Hi!
I am trying to implement a custom ViewportManager for a SciChart3DSurface, but the overridden methods, such as OnCalculateNewXRange are not called after I assign the custom ViewportManager to a surface. The minimalistic version of my code is:
public class Test3DViewportManager : ViewportManager3DBase
{
public Test3DViewportManager() : base()
{
}
public override void OnParentSurfaceRendered(ISciChart3DSurface sciChartSurface)
{
base.OnParentSurfaceRendered(sciChartSurface);
}
protected override IRange OnCalculateNewXRange(IAxis3D xAxis)
{
return base.CalculateAutoRange(xAxis);
}
protected override IRange OnCalculateNewYRange(IAxis3D yAxis, RenderPassInfo3D renderPassInfo)
{
return base.CalculateAutoRange(yAxis);
}
protected override IRange OnCalculateNewZRange(IAxis3D zAxis, RenderPassInfo3D renderPassInfo)
{
return base.CalculateAutoRange(zAxis);
}
}
I tried to assign the custom manager is two different ways in code-behind, none of them work:
var VM= new Test3DViewportManager();
SciChart.ViewportManager = VM; // way 1
VM.AttachSciChartSurface(SciChart); // way 2
I would appreciate any suggestion, thanks in advance!
- corvex asked 4 years ago
- You must login to post comments
Hi there,
Definitely you want to use Way 1
var VM= new Test3DViewportManager();
SciChart.ViewportManager = VM; // way 1
However, the methods in ViewportManager will not be called when you assign to a SciChartSurface, but when the SciChart3DSurface is drawn and when axis auto ranges.
Have you set Axis.AutoRange in your application? If you set Axis.AutoRange = Never it will never call this method (as this method is part of autoranging).
If you set Axis.AutoRange = Once it will be called once when the chart is shown.
If you set Axis.AutoRange = Always it will be called every time the chart is drawn.
Best regards,
Andrew
- Andrew Burnett-Thompson answered 4 years ago
- You must login to post comments
Hi Andrew,
I thought that AutoRange should have an effect too but, unfortunately, neither of the options works in my case. Here is the XAML code that I use and still the overridden methods are not called (apart of the constructor).
<s3D:SciChart3DSurface x:Name="SciChart" Grid.Column="1" BorderThickness="0" WorldDimensions="200,100,200">
<s3D:SciChart3DSurface.Camera>
<s3D:Camera3D ZoomToFitOnAttach="True"/>
</s3D:SciChart3DSurface.Camera>
<s3D:SciChart3DSurface.RenderableSeries>
<s3D:ScatterRenderableSeries3D x:Name="ScatterSeries3D">
<s3D:ScatterRenderableSeries3D.PointMarker>
<s3D:EllipsePointMarker3D Fill="#77ADFF2F" Size="1.0" Opacity="1"/>
</s3D:ScatterRenderableSeries3D.PointMarker>
</s3D:ScatterRenderableSeries3D>
</s3D:SciChart3DSurface.RenderableSeries>
<s3D:SciChart3DSurface.XAxis>
<s3D:NumericAxis3D GrowBy="0.1,0.1" AutoRange="Always"/>
</s3D:SciChart3DSurface.XAxis>
<s3D:SciChart3DSurface.YAxis>
<s3D:NumericAxis3D GrowBy="0.1,0.1" AutoRange="Always"/>
</s3D:SciChart3DSurface.YAxis>
<s3D:SciChart3DSurface.ZAxis>
<s3D:NumericAxis3D GrowBy="0.1,0.1" AutoRange="Always"/>
</s3D:SciChart3DSurface.ZAxis>
</s3D:SciChart3DSurface>
I attached here the test project.
- corvex answered 4 years ago
- last edited 4 years ago
- You must login to post comments
Please login first to submit.