private static void StartNextInProcessingQueue() { if (c_queue.Count > 0) { if (!c_backgroundWorker.IsBusy) { FileHandlerBase inputHandler = c_queue.Dequeue(); OnProcessingStarted(inputHandler); c_backgroundWorker.RunWorkerAsync(inputHandler); } } }
public void LoadPreview3D() { PointCloudTileSource tileSource = CurrentTileSource; Jacere.Core.Geometry.Extent3D extent = tileSource.Extent; Model3DGroup modelGroup = new Model3DGroup(); Model3DGroup modelSubGroup = new Model3DGroup(); modelGroup.Children.Add(modelSubGroup); Model3DGroup modelStitchingGroup = new Model3DGroup(); modelGroup.Children.Add(modelStitchingGroup); DirectionalLight lightSource = new DirectionalLight(System.Windows.Media.Colors.White, new Vector3D(-1, -1, -1)); modelGroup.Children.Add(lightSource); ModelVisual3D model = new ModelVisual3D(); model.Content = modelGroup; Jacere.Core.Geometry.Point3D centerOfMass = tileSource.CenterOfMass; Point3D lookatPoint = new Point3D(0, 0, 0); Point3D cameraPoint = new Point3D(0, extent.MinY - centerOfMass.Y, centerOfMass.Z - extent.MinZ + extent.RangeX); Vector3D lookDirection = lookatPoint - cameraPoint; lookDirection.Normalize(); PerspectiveCamera camera = new PerspectiveCamera(); camera.Position = cameraPoint; camera.LookDirection = lookDirection; camera.UpDirection = new Vector3D(0, 0, 1); camera.FieldOfView = 70; RenderOptions.SetEdgeMode(viewport, EdgeMode.Aliased); //viewport.ClipToBounds = false; //viewport.IsHitTestVisible = false; viewport.Camera = camera; viewport.Children.Add(model); m_tileModelCollection = modelSubGroup.Children; m_stitchingModelCollection = modelStitchingGroup.Children; m_backgroundWorker.RunWorkerAsync(CurrentTileSource); }