1

it seems adding following XAML in SurfaceMeshRenderableSeries3D has no effect:

<s3D:SurfaceMeshRenderableSeries3D.PointMarker>
  <s3D:SpherePointMarker3D Size="0.3"/>
</s3D:SurfaceMeshRenderableSeries3D.PointMarker>

Also adding a ControlTemplate doesn't work:

<ControlTemplate x:Key="marker">
     <s3D:SpherePointMarker3D Fill="Red" Size="0.5"/>
</ControlTemplate>

...PointMarkerTemplate="{StaticResource marker}...

Adding ScatterRenderableSeries3D with same data shows the marker on data points. But we plan to combine multiple 3DMeshSeries with multiple 3DLineSeries in 3D chart. Additional series for each mesh doubles a count of required series. It make handling of series to be very complicated, in case of modifying data points.

Is it possible to add data point marker to show on SurfaceMeshRenderableSeries3D without adding additional ScatterRenderableSeries3D to each mesh series?

Download Solution

Silvester
  • 11
  • 2

1 Answers1

0

According to the SciChart 3D Surface documentation there is nothing in there to suggest you can show a PointMarker on a SurfaceMeshRenderableSeries.

However, you can achieve the same effect that you want using a ImpulseRenderableSeries3D.

enter image description here

Declare the chart as follows:

<s3D:SciChart3DSurface x:Name="SciChart"
                       BorderThickness="0"
                       WorldDimensions="200,100,200">
    <s3D:SciChart3DSurface.RenderableSeries>
        <s3D:SurfaceMeshRenderableSeries3D x:Name="surfaceMeshRenderableSeries"
                                        DrawMeshAs="SolidWireFrame"
                                        Stroke="#77228B22"
                                        ContourStroke="#77228B22"
                                        StrokeThickness="2.0"
                                        DrawSkirt="False"
                                        Opacity="0.9">
           <s3D:SurfaceMeshRenderableSeries.MeshColorPalette>
              <s3D:GradientColorPalette>
                  <s3D:GradientColorPalette.GradientStops>
                     <GradientStop Offset="1" Color="DarkRed"/>
                     <GradientStop Offset="0.9" Color="Red"/>
                     <GradientStop Offset="0.7" Color="Yellow"/>
                     <GradientStop Offset="0.5" Color="GreenYellow"/>
                     <GradientStop Offset="0.3" Color="Cyan"/>
                     <GradientStop Offset="0.1" Color="Blue"/>
                     <GradientStop Offset="0.0" Color="#1D2C6B"/>
                  </s3D:GradientColorPalette.GradientStops>
              </s3D:GradientColorPalette>
           </s3D:SurfaceMeshRenderableSereis.MeshColorPalette>
        </s3D:SurfaceMeshRenderableSeries3D>
        <s3D:ImpulseRenderableSeries3D x:Name="ImpulseSeries3D"
                                       StrokeThickness="0">
            <s3D:ImpulseRenderableSeries3D.PointMarker>
                <s3D:SpherePointMarker3D Fill="Blue" Size="4.0" Opacity="1"/>
            </s3D:ImpulseRenderableSeries3D.PointMarker>
        </s3D:ImpulseRenderableSeries3D>
    </s3D:SciChart3DSurface.RenderableSeries>
    <s3D:SciChart3DSurface.XAxis>
        <s3D:NumericAxis3D />
    </s3D:SciChart3DSurface.XAxis>
    <s3D:SciChart3DSurface.YAxis>
        <s3D:NumericAxis3D VisibleRange="0, 0.5"/>
    </s3D:SciChart3DSurface.YAxis>
    <s3D:SciChart3DSurface.ZAxis>
        <s3D:NumericAxis3D />
    </s3D:SciChart3DSurface.ZAxis>
</s3D:SciChart3DSurface>

By setting the same dataseries on both ImpulseRenderableSeries3D and SurfaceMeshRenderableSeries3D you will get the pointmarkers appearing at the mesh coordinates.

Edit: Update

Note that I have set ImpulseRenderableSeries3D.StrokeThickness to zero to hide the lines.

Also, a bug was found in v5.1.0.11439 of SciChart where setting StrokeThickness=0 and Opacity to any value caused a NullReferenceException. This will be fixed in the v5.1.0.11440 nightly build of SciChart.

You can get latest builds from the SciChart NuGet feed.

Dr. Andrew Burnett-Thompson
  • 20,980
  • 8
  • 88
  • 178
  • Thanks for the answer... According to the [SurfaceMeshRenderableSeries3D Class Members] (https://www.scichart.com/documentation/v5.x/SciChart.Charting3D~SciChart.Charting3D.RendableSeries.SurfaceMeshRendableSeries3D_members.html) there is a property called PointMarker that suggests to me that I can display a PointMarker on a SurfaceMeshRenderableSeries. In any case, I have tried your solution, although there are still two series per data point collection. However, it does not meet all the requirements that I need and there are some problems with it: – Silvester May 22 '18 at 11:52
  • - If you set the Stroke property to Transparent, lines are not hidden, but a tooltip is made transparent. When Opacity is set to "0", lines become invisible, but crosshairs with gaps are displayed at a crosshair. The line is at the end of the grid: - ToolTipModifier does not seem to work properly. When you move the mouse over a data point, the crosshairs are displayed at another data point. - VertexSelectionModifier does not work with ImpulsLineSeries. It only seems to work with ScatterRenderableSeries3D. I need data points to be selectable. – Silvester May 22 '18 at 11:54
  • Our most important requirement is the display and selection of the data points on the 3D surface diagram. It should be possible to move the selected data points on the Y-axis with the mouse. Please tell me if these requirements are possible with your product. The products of your competitors largely support this out of the box. But I like your solution slightly better because of the modifier concept, despite the fact that the 3D charts offer relatively few options, they are less documented and have fewer examples than 2D charts. – Silvester May 22 '18 at 11:54
  • Updated answer. Found a bug in v5.1 and fixed in v5.1.0.11440. You will need to get that build and set StrokeThickness=0 on ImpulseRenderableSeries. The code is tested as working. – Dr. Andrew Burnett-Thompson May 22 '18 at 17:11