private static void MyCurrentCamPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { ViewFrustumFunctions vf = d as ViewFrustumFunctions; object newVal = e.NewValue; HelixToolkit.SharpDX.ProjectionCamera cam = newVal as HelixToolkit.SharpDX.ProjectionCamera; if (vf != null && cam != null && vf.SynchrCam) { // clear children list vf.Children.Clear(); // get the size of the viewport double parentH = 0; double parentW = 0; Viewport3DX parent = vf.Parent as Viewport3DX; if (parent != null) { vf.CurrentPos = parent.CurrentPosition; parentH = parent.ActualHeight; parentW = parent.ActualWidth; //var test = parent.Parent; } // add new View Frustum vf.DefineViewFrustum(cam, parentH, parentW); vf.BuildViewFrustumModel(); } }
private static void MyShowFrustumPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { ViewFrustumFunctions vff = d as ViewFrustumFunctions; if (vff != null && vff.model != null) { if (vff.ShowFrustum) { vff.model.Visibility = Visibility.Visible; } else { vff.model.Visibility = Visibility.Collapsed; } } }
private void CheckForVisibilitySimpleCommand(object _vff) { ViewFrustumFunctions viewFF = _vff as ViewFrustumFunctions; if (viewFF == null) { return; } List <BoundingBox> regions = new List <BoundingBox>(); List <Point3D> newPointsVisible_End = new List <Point3D>(); List <Point3D> newPointsVisible_Mid = new List <Point3D>(); this.root.GetVisibleRegions(ref regions, ref newPointsVisible_End, ref newPointsVisible_Mid, viewFF); this.PointsVisible_End = new List <Point3D>(newPointsVisible_End); this.PointsVisible_Mid = new List <Point3D>(newPointsVisible_Mid); }
private void CheckForVisibilityCommand(object _vff) { ViewFrustumFunctions viewFF = _vff as ViewFrustumFunctions; if (viewFF == null) { return; } List <BoundingBox> regions = new List <BoundingBox>(); List <Point3D> newPointsVisible_End = new List <Point3D>(); List <Point3D> newPointsVisible_Mid = new List <Point3D>(); this.root.GetVisibleRegions(ref regions, ref newPointsVisible_End, ref newPointsVisible_Mid, viewFF); this.PointsVisible_End = new List <Point3D>(newPointsVisible_End); this.PointsVisible_Mid = new List <Point3D>(newPointsVisible_Mid); if (regions.Count > 0) { List <SharpDX.Matrix> instances = new List <Matrix>(); int rn = regions.Count; for (int i = rn - 1; i >= 0; i--) { BoundingBox region = regions[i]; Vector3 dimensions = region.Maximum - region.Minimum; Vector3 half = dimensions / 2f; Vector3 center = region.Minimum + half; SharpDX.Matrix Sc = SharpDX.Matrix.Scaling(dimensions - new Vector3((float)VIS_OFFSET)); SharpDX.Matrix Tr = SharpDX.Matrix.Translation(center); instances.Add(Sc * Tr); } this.cellVisible.Instances = instances; this.cellVisible.Visibility = Visibility.Visible; this.cellVisibleNormals.Instances = instances; this.cellVisibleNormals.Visibility = Visibility.Visible; } else { this.cellVisible.Instances = new List <SharpDX.Matrix>(); this.cellVisible.Visibility = Visibility.Hidden; this.cellVisibleNormals.Instances = new List <SharpDX.Matrix>(); this.cellVisibleNormals.Visibility = Visibility.Hidden; } }
public void GetVisibleRegions(ref List <BoundingBox> _regions, ref List <Point3D> _pointsE, ref List <Point3D> _pointsM, ViewFrustumFunctions _vff) { if (_vff == null) { return; } if (_regions == null) { _regions = new List <BoundingBox>(); } if (_pointsE == null) { _pointsE = new List <Point3D>(); } if (_pointsM == null) { _pointsM = new List <Point3D>(); } bool notOutside = !_vff.IsOutsideFrustum(this.region); if (notOutside) { _regions.Add(this.region); Utils.LineWHistory.LinesWH2UniqueP3D(this.nodeLines, ref _pointsE, ref _pointsM, true); // check deeper into the tree if (this.hasChildren()) { for (int flags = this.activeNodes, index = 0; flags > 0; flags >>= 1, index++) { if ((flags & 1) == 1) { this.childNodes[index].GetVisibleRegions(ref _regions, ref _pointsE, ref _pointsM, _vff); } } } } }