private void CreateTestScene(int totalModelsCount) { Mouse.OverrideCursor = Cursors.Wait; // Creating Model3DGroup takes too much time when a lot of objects are created. // Therefore we are creating SceneNodes (MeshObjectNode) directly. //var model3DGroup = CreateModel3DGroup(boxMesh, new Point3D(0, 0, 0), new Size3D(400, 100, 400), 5, 40, 40, 40); //var model3DGroup = CreateModel3DGroup(boxMesh, new Point3D(0, 0, 0), new Size3D(400, 200, 400), 5, 40, 20, 40); //var model3DGroup = CreateModel3DGroup(boxMesh, new Point3D(0, 0, 0), new Size3D(400, 200, 400), 10, 10, 5, 10); //modelsCount = model3DGroup.Children.Count; //MainViewport.Children.Add(model3DGroup.CreateModelVisual3D()); try { if (_sceneNodeVisual3D != null) { _mainViewport3D.Children.Remove(_sceneNodeVisual3D); _sceneNodeVisual3D.SceneNode.Dispose(); } var boxMesh = new BoxMesh3D(new Point3D(0, 0, 0), new Size3D(1, 1, 1), 1, 1, 1).Geometry; int modelsXZCount = totalModelsCount < 2500 ? 10 : 50; int modelsYCount = totalModelsCount / (modelsXZCount * modelsXZCount); var sceneNode = CreateSceneNodes(boxMesh, new Point3D(0, 0, 0), new Size3D(500, modelsYCount * 10, 500), 5, modelsXZCount, modelsYCount, modelsXZCount); _objectsCount = sceneNode.ChildNodesCount; _sceneNodeVisual3D = new SceneNodeVisual3D(sceneNode); _mainViewport3D.Children.Add(_sceneNodeVisual3D); _mainDXViewportView.Refresh(); } finally { Mouse.OverrideCursor = null; } }
private void CreateTestScene(int totalModelsCount) { Mouse.OverrideCursor = Cursors.Wait; // Creating Model3DGroup takes too much time when a lot of objects are created. // Therefore we are creating SceneNodes (MeshObjectNode) directly. //var model3DGroup = CreateModel3DGroup(boxMesh, new Point3D(0, 0, 0), new Size3D(400, 100, 400), 5, 40, 40, 40); //var model3DGroup = CreateModel3DGroup(boxMesh, new Point3D(0, 0, 0), new Size3D(400, 200, 400), 5, 40, 20, 40); //var model3DGroup = CreateModel3DGroup(boxMesh, new Point3D(0, 0, 0), new Size3D(400, 200, 400), 10, 10, 5, 10); //modelsCount = model3DGroup.Children.Count; //MainViewport.Children.Add(model3DGroup.CreateModelVisual3D()); try { if (_disposables != null) { _disposables.Dispose(); } if (_sceneNodeVisual3D != null) { _mainViewport3D.Children.Remove(_sceneNodeVisual3D); _sceneNodeVisual3D.SceneNode.Dispose(); _sceneNodeVisual3D = null; } _disposables = new DisposeList(); var boxMesh = new BoxMesh3D(new Point3D(0, 0, 0), new Size3D(1, 1, 1), 1, 1, 1).Geometry; int modelsXZCount = totalModelsCount < 2500 ? 10 : 50; int modelsYCount = totalModelsCount / (modelsXZCount * modelsXZCount); bool useSingleColor = _currentObjectsType == ObjectsTypes.SingleColorBoxes || _currentObjectsType == ObjectsTypes.SingleColorLines; SceneNode sceneNode; if (_currentObjectsType == ObjectsTypes.MultiColorBoxes || _currentObjectsType == ObjectsTypes.SingleColorBoxes) { sceneNode = CreateBoxSceneNodes(boxMesh, new Point3D(0, 0, 0), new Size3D(500, modelsYCount * 10, 500), 5, useSingleColor, modelsXZCount, modelsYCount, modelsXZCount); } else if (_currentObjectsType == ObjectsTypes.MultiColorLines || _currentObjectsType == ObjectsTypes.SingleColorLines) { sceneNode = CreateLineSceneNodes(new Point3D(0, 0, 0), new Size3D(500, modelsYCount * 10, 500), useSingleColor, modelsXZCount, modelsYCount, modelsXZCount, _disposables); } else if (_currentObjectsType == ObjectsTypes.MultiColorBoxesAndLines) { sceneNode = new SceneNode(); var sceneNode1 = CreateBoxSceneNodes(boxMesh, new Point3D(0, -modelsYCount * 2.5 - 10, 0), new Size3D(500, modelsYCount * 5, 500), 5, useSingleColor, modelsXZCount, modelsYCount / 2, modelsXZCount); var sceneNode2 = CreateLineSceneNodes(new Point3D(0, modelsYCount * 2.5 + 10, 0), new Size3D(500, modelsYCount * 5, 500), useSingleColor, modelsXZCount, modelsYCount / 2, modelsXZCount, _disposables); sceneNode.AddChild(sceneNode1); sceneNode.AddChild(sceneNode2); } else { sceneNode = null; } if (sceneNode == null) { return; } _objectsCount = totalModelsCount; _sceneNodeVisual3D = new SceneNodeVisual3D(sceneNode); _mainViewport3D.Children.Add(_sceneNodeVisual3D); _mainDXViewportView.Refresh(); } finally { Mouse.OverrideCursor = null; } }