示例#1
0
        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;
            }
        }