Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        public CoordinateSystemNode()
        {
            var builder = new MeshBuilder(true, false, false);

            builder.AddArrow(Vector3.Zero, new Vector3(arrowSize, 0, 0), arrowWidth, arrowHead, 8);
            builder.AddArrow(Vector3.Zero, new Vector3(0, arrowSize, 0), arrowWidth, arrowHead, 8);
            builder.AddArrow(Vector3.Zero, new Vector3(0, 0, arrowSize), arrowWidth, arrowHead, 8);
            var mesh = builder.ToMesh();

            arrowMeshModel.Material = new PhongMaterialCore()
            {
                DiffuseColor = Color.White
            };
            arrowMeshModel.Geometry              = mesh;
            arrowMeshModel.CullMode              = CullMode.Back;
            arrowMeshModel.OnSetRenderTechnique += (host) => { return(host.EffectsManager[DefaultRenderTechniqueNames.Colors]); };
            arrowMeshModel.IsHitTestVisible      = false;
            arrowMeshModel.RenderCore.RenderType = RenderType.ScreenSpaced;

            axisBillboard.IsHitTestVisible       = false;
            axisBillboard.RenderCore.RenderType  = RenderType.ScreenSpaced;
            axisBillboard.EnableViewFrustumCheck = false;
            var axisLabel = new BillboardText3D();

            axisLabel.TextInfo.Add(new TextInfo());
            axisLabel.TextInfo.Add(new TextInfo());
            axisLabel.TextInfo.Add(new TextInfo());
            axisBillboard.Geometry = axisLabel;
            UpdateAxisColor(mesh, 0, AxisXColor, LabelX, LabelColor);
            UpdateAxisColor(mesh, 1, AxisYColor, LabelY, LabelColor);
            UpdateAxisColor(mesh, 2, AxisZColor, LabelZ, LabelColor);

            this.AddChildNode(arrowMeshModel);
            this.AddChildNode(axisBillboard);
        }
Beispiel #2
0
        /// <summary>
        /// Initialization
        /// </summary>
        public void InitializeBusinessLogic()
        {
            ConfigurationHelper.RegisterSettings(Properties.Settings.Default);
            pointCloudViewModel      = new PointcloudViewModel(new SharpDX.Size2(0, 0));
            PointCloudView.ViewModel = pointCloudViewModel;
            PointCloudView.InitializeScene();
            DataContext = pointCloudViewModel;

            // Moving Camera vertically up and turning it to look down
            PointCloudView.ViewModel.SetCvmPosition(new System.Windows.Media.Media3D.Vector3D(0, 0, groundZ),
                                                    new System.Windows.Media.Media3D.Vector3D(180, 0, 90));

            var planeColor = System.Windows.Media.Color.FromArgb(20, 50, 255, 50).ToColor4();
            // Only points from this rectangular area are included and outliers are ignored
            var scenePlane = PointcloudViewModel.CreatePlane(planeColor, groundD, groundW, new SharpDX.Vector3(0, 0, 1f));

            PointCloudView.SceneRoot.Children.Add(scenePlane);

            // For 3D texts
            BillboardTextModel3D text = new BillboardTextModel3D();

            PointCloudView.SceneRoot.Children.Add(text);
            labels        = new BillboardText3D();
            text.Geometry = labels;

            boundingBoxGroup = new GroupModel3D();
            PointCloudView.SceneRoot.Children.Add(boundingBoxGroup);

            rosControlBase.RosConnected        += RosControlBase_RosConnected;
            rosControlBase.RosDisconnected     += RosControlBase_RosDisconnected;
            rosControlBase.CvmDeviceInfoChaged += RosControlBase_CvmDeviceInfoChaged;
        }
        public MainViewModel()
        {
            EffectsManager = new DefaultEffectsManager();
            Title          = "Material Demo";
            this.Camera    = new PerspectiveCamera {
                Position = new Point3D(-30, 30, -30), LookDirection = new Vector3D(30, -30, 30), UpDirection = new Vector3D(0, 1, 0)
            };

            var builder = new MeshBuilder();

            builder.AddBox(new Vector3(0, -6, 0), 200, 2, 100);

            Floor = builder.ToMesh();

            builder = new MeshBuilder();
            builder.AddSphere(Vector3.Zero, 2);

            LoadObj(@"shaderBall\shaderBall.obj");

            EnvironmentMap = LoadFileToMemory("Cubemap_Grandcanyon.dds");

            ColorStripeMaterial.ColorStripeX = GetGradients(new Color4(1, 0, 0, 1), new Color4(0, 1, 0, 1), new Color4(0, 0, 1, 1), 48).ToList();
            ColorStripeMaterial.ColorStripeY = GetGradients(new Color4(1, 1, 0, 1), new Color4(0, 1, 1, 1), new Color4(1, 0, 1, 1), 48).ToList();

            MeshTitles = new BillboardText3D();
            MeshTitles.TextInfo.Add(new TextInfo("Blinn", Transform1.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            MeshTitles.TextInfo.Add(new TextInfo("Normal", Transform2.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            MeshTitles.TextInfo.Add(new TextInfo("Diffuse", Transform3.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            MeshTitles.TextInfo.Add(new TextInfo("Position", Transform4.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            MeshTitles.TextInfo.Add(new TextInfo("VertexColor", Transform5.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            MeshTitles.TextInfo.Add(new TextInfo("ColorStripe", Transform6.ToVector3())
            {
                Scale = 0.08f, Background = new Color4(1, 1, 1, 1)
            });
            (FloorMaterial as PhongMaterial).RenderShadowMap = true;
        }
            /// <summary>
            ///
            /// </summary>
            public CoordinateSystemNode()
            {
                IsHitTestVisible        = false;
                CameraType              = ScreenSpacedCameraType.Perspective;
                arrowMeshModel.Material = new ColorMaterialCore();
                arrowMeshModel.CullMode = CullMode.Back;
                axisBillboard.EnableViewFrustumCheck = false;
                var axisLabel = new BillboardText3D();

                axisLabel.TextInfo.Add(new TextInfo());
                axisLabel.TextInfo.Add(new TextInfo());
                axisLabel.TextInfo.Add(new TextInfo());
                axisBillboard.Geometry = axisLabel;
                this.AddChildNode(arrowMeshModel);
                this.AddChildNode(axisBillboard);
                UpdateModel();
            }
        public DynaShapeDisplay(Solver solver)
        {
            this.solver = solver;

            pointGeometry = new PointGeometry3D
            {
                Positions = new Vector3Collection(),
                Indices   = new IntCollection(),
                Colors    = new Color4Collection()
            };

            lineGeometry = new LineGeometry3D()
            {
                Positions = new Vector3Collection(),
                Indices   = new IntCollection(),
                Colors    = new Color4Collection()
            };

            billboardText = new BillboardText3D();

            DynaShapeViewExtension.DynamoWindow.Dispatcher.Invoke(
                () =>
            {
                pointModel = new PointGeometryModel3D
                {
                    Size   = new Size(5, 5),
                    Figure = PointGeometryModel3D.PointFigure.Ellipse,
                    Color  = Color.White,
                };

                lineModel = new LineGeometryModel3D
                {
                    Thickness = 0.5,
                    Color     = Color.White,
                };

                billboardTextModel = new BillboardTextModel3D()
                {
                };
            },
                DispatcherPriority.Send);

            DynaShapeViewExtension.ViewModel.RequestViewRefresh += RequestViewRefreshHandler;
            DynaShapeViewExtension.DynamoWindow.Closed          += (sender, args) => Dispose();
        }
        private void InitializeCoordinates()
        {
            var builder = new LineBuilder();

            builder.AddLine(Vector3.Zero, Vector3.UnitX * 5);
            builder.AddLine(Vector3.Zero, Vector3.UnitY * 5);
            builder.AddLine(Vector3.Zero, Vector3.UnitZ * 5);
            Coordinate           = builder.ToLineGeometry3D();
            Coordinate.Colors    = new Color4Collection(Enumerable.Repeat <Color4>(Color.White, 6));
            Coordinate.Colors[0] = Coordinate.Colors[1] = Color.Red;
            Coordinate.Colors[2] = Coordinate.Colors[3] = Color.Green;
            Coordinate.Colors[4] = Coordinate.Colors[5] = Color.Blue;

            CoordinateText = new BillboardText3D();
            CoordinateText.TextInfo.Add(new TextInfo("X", Vector3.UnitX * 6));
            CoordinateText.TextInfo.Add(new TextInfo("Y", Vector3.UnitY * 6));
            CoordinateText.TextInfo.Add(new TextInfo("Z", Vector3.UnitZ * 6));
        }
Beispiel #7
0
        public MainViewModel()
        {
            // titles
            this.Title    = "Simple Demo";
            this.SubTitle = "WPF & SharpDX";

            // camera setup
            this.Camera = new PerspectiveCamera {
                Position = new Point3D(3, 3, 5), LookDirection = new Vector3D(-3, -3, -5), UpDirection = new Vector3D(0, 1, 0)
            };

            // default render technique
            this.RenderTechnique = Techniques.RenderBlinn;

            // setup lighting
            this.AmbientLightColor         = new Color4(0.1f, 0.1f, 0.1f, 1.0f);
            this.DirectionalLightColor     = Color.White;
            this.DirectionalLightDirection = new Vector3(-2, -5, -2);

            // floor plane grid
            this.Grid          = LineBuilder.GenerateGrid();
            this.GridColor     = SharpDX.Color.Black;
            this.GridTransform = new Media3D.TranslateTransform3D(-5, -1, -5);

            // scene model3d
            var b1 = new MeshBuilder();

            b1.AddSphere(new Vector3(0, 0, 0), 0.5);
            b1.AddBox(new Vector3(0, 0, 0), 1, 0.5, 2, BoxFaces.All);

            var meshGeometry = b1.ToMeshGeometry3D();

            meshGeometry.Colors = new Color4Collection(meshGeometry.TextureCoordinates.Select(x => x.ToColor4()));
            this.Model          = meshGeometry;

            // lines model3d
            var e1 = new LineBuilder();

            e1.AddBox(new Vector3(0, 0, 0), 1, 0.5, 2);
            this.Lines = e1.ToLineGeometry3D();

            // model trafos
            this.Model1Transform = new Media3D.TranslateTransform3D(0, 0, 0);
            this.Model2Transform = new Media3D.TranslateTransform3D(-2, 0, 0);
            this.Model3Transform = new Media3D.TranslateTransform3D(+2, 0, 0);

            // model materials
            this.RedMaterial   = PhongMaterials.Red;
            this.GreenMaterial = PhongMaterials.Green;
            this.BlueMaterial  = PhongMaterials.Blue;
            //var diffColor = this.RedMaterial.DiffuseColor;
            //diffColor.Alpha = 0.5f;
            //this.RedMaterial.DiffuseColor = diffColor;

            Points = new PointGeometry3D();
            var ptPos = new Vector3Collection();
            var ptIdx = new IntCollection();

            for (int x = 0; x < 10; x++)
            {
                for (int y = 0; y < 10; y++)
                {
                    for (int z = 0; z < 10; z++)
                    {
                        ptIdx.Add(ptPos.Count);
                        ptPos.Add(new Vector3(x, y, z));
                    }
                }
            }

            Points.Positions = ptPos;
            Points.Indices   = ptIdx;

            Text = new BillboardText3D();

            for (var i = 0; i < 50; i++)
            {
                for (var j = 0; j < 50; j++)
                {
                    Text.TextInfo.Add(new TextInfo("Hello World", new Vector3(i, j, 0)));
                }
            }
        }
Beispiel #8
0
        public MainViewModel()
        {
            //    RenderTechniquesManager = new DefaultRenderTechniquesManager();
            EffectsManager = new DefaultEffectsManager();
            // ----------------------------------------------
            // titles
            this.Title    = "GroupElement Test";
            this.SubTitle = "WPF & SharpDX";

            // ----------------------------------------------
            // camera setup
            this.Camera = new PerspectiveCamera {
                Position = new Point3D(10, 2, 10), LookDirection = new Vector3D(-10, -2, -10), UpDirection = new Vector3D(0, 1, 0)
            };

            var lineBuilder = new LineBuilder();

            lineBuilder.AddLine(new Vector3(0, 0, 0), new Vector3(10, 0, 0));
            lineBuilder.AddLine(new Vector3(0, 0, 0), new Vector3(0, 10, 0));
            lineBuilder.AddLine(new Vector3(0, 0, 0), new Vector3(0, 0, 10));
            AxisModel        = lineBuilder.ToLineGeometry3D();
            AxisModel.Colors = new Color4Collection(AxisModel.Positions.Count);
            AxisModel.Colors.Add(Colors.Red.ToColor4());
            AxisModel.Colors.Add(Colors.Red.ToColor4());
            AxisModel.Colors.Add(Colors.Green.ToColor4());
            AxisModel.Colors.Add(Colors.Green.ToColor4());
            AxisModel.Colors.Add(Colors.Blue.ToColor4());
            AxisModel.Colors.Add(Colors.Blue.ToColor4());

            AxisLabel = new BillboardText3D();
            AxisLabel.TextInfo.Add(new TextInfo()
            {
                Origin = new Vector3(11, 0, 0), Text = "X", Foreground = Colors.Red.ToColor4()
            });
            AxisLabel.TextInfo.Add(new TextInfo()
            {
                Origin = new Vector3(0, 11, 0), Text = "Y", Foreground = Colors.Green.ToColor4()
            });
            AxisLabel.TextInfo.Add(new TextInfo()
            {
                Origin = new Vector3(0, 0, 11), Text = "Z", Foreground = Colors.Blue.ToColor4()
            });

            var meshBuilder = new MeshBuilder(true);

            meshBuilder.AddSphere(new Vector3(0, 0, 0), 0.5);
            SphereModel = meshBuilder.ToMesh();
            meshBuilder = new MeshBuilder(true);
            meshBuilder.AddBox(Vector3.Zero, 0.5, 0.5, 0.5);
            BoxModel    = meshBuilder.ToMesh();
            meshBuilder = new MeshBuilder(true);
            meshBuilder.AddCone(Vector3.Zero, new Vector3(0, 2, 0), 1, true, 24);
            ConeModel = meshBuilder.ToMesh();

            AddGroupModelCommand               = new RelayCommand(AddGroupModel);
            RemoveGroupModelCommand            = new RelayCommand(RemoveGroupModel);
            AddTransparentGroupModelCommand    = new RelayCommand(AddTransparentMesh);
            RemoveTransparentGroupModelCommand = new RelayCommand(RemoveTransparentModel);
            ClearGroupModelCommand             = new RelayCommand((o) => { GroupModelSource.Clear(); });
            AnimateGroupModelCommand           = new RelayCommand(AnimateGroupModel);
            AddItemsModelCommand               = new RelayCommand(AddItemsModel);
            RemoveItemsModelCommand            = new RelayCommand(RemoveItemsModel);
            ClearItemsModelCommand             = new RelayCommand((o) => { ItemsSource.Clear(); });
            AnimateItemsModelCommand           = new RelayCommand(AnimateItemsModel);
        }
Beispiel #9
0
        public MainPageViewModel()
        {
            EffectsManager = new DefaultEffectsManager(new Logger());

            Camera = new PerspectiveCamera()
            {
                Position = new Vector3(40, 10, 100), LookDirection = new Vector3(0, -10, -100), UpDirection = UpDirection, FarPlaneDistance = 500, NearPlaneDistance = 0.1
            };
            Camera1 = new OrthographicCamera()
            {
                Position = new Vector3(60, 10, 100), LookDirection = new Vector3(0, -10, -100), UpDirection = upDirection, Width = 30, FarPlaneDistance = 500, NearPlaneDistance = 20
            };
            var builder = new MeshBuilder(true, true, true);

            builder.AddBox(new SharpDX.Vector3(0, 0, 0), 2, 2, 2);
            builder.AddSphere(new Vector3(0, 2, 0), 1.5);
            Geometry = builder.ToMesh();
            Geometry.UpdateOctree();
            builder = new MeshBuilder();
            builder.AddSphere(new Vector3(0, 2, 0), 2);
            Sphere = builder.ToMesh();
            Sphere.UpdateOctree();

            Material = new PhongMaterial()
            {
                AmbientColor      = Color.Gray,
                DiffuseColor      = new Color4(0.75f, 0.75f, 0.75f, 1.0f),
                SpecularColor     = Color.White,
                SpecularShininess = 10f,
                ReflectiveColor   = new Color4(0.2f, 0.2f, 0.2f, 0.5f)
            };
            Material.DiffuseMap        = LoadTexture("TextureCheckerboard2.jpg");
            Material.NormalMap         = LoadTexture("TextureCheckerboard2_dot3.jpg");
            Material1                  = Material.Clone();
            Material1.ReflectiveColor  = Color.Silver;
            Material1.RenderDiffuseMap = false;
            Material1.RenderNormalMap  = false;
            var lineBuilder = new LineBuilder();

            lineBuilder.AddLine(Vector3.Zero, new Vector3(5, 0, 0));
            lineBuilder.AddLine(Vector3.Zero, new Vector3(0, 5, 0));
            lineBuilder.AddLine(Vector3.Zero, new Vector3(0, 0, 5));
            LineGeometry        = lineBuilder.ToLineGeometry3D();
            LineGeometry.Colors = new HelixToolkit.UWP.Core.Color4Collection()
            {
                Color.Red, Color.Red, Color.Green, Color.Green, Color.Blue, Color.Blue
            };

            builder = new MeshBuilder();
            builder.AddSphere(new Vector3(), 3);
            var mesh = builder.ToMesh();

            mesh.UpdateOctree();
            PointGeometry = new PointGeometry3D()
            {
                Positions = mesh.Positions
            };

            AxisLabelGeometry = new BillboardText3D();
            AxisLabelGeometry.TextInfo.Add(new TextInfo("X", new Vector3(5.5f, 0, 0))
            {
                Foreground = Color.Red
            });
            AxisLabelGeometry.TextInfo.Add(new TextInfo("Y", new Vector3(0, 5.5f, 0))
            {
                Foreground = Color.Green
            });
            AxisLabelGeometry.TextInfo.Add(new TextInfo("Z", new Vector3(0, 0, 5.5f))
            {
                Foreground = Color.Blue
            });

            builder = new MeshBuilder();
            builder.AddBox(new Vector3(0, -6, 0), 30, 0.5, 30);
            FloorModel = builder.ToMesh();

            FloorMaterial = PhongMaterials.Obsidian;
            FloorMaterial.ReflectiveColor = Color.Silver;

            EnvironmentMap = LoadTexture("Cubemap_Grandcanyon.dds");

            UpDirXCommand = new RelayCommand(() => { UpDirection = Vector3.UnitX; }, () => { return(UpDirection != Vector3.UnitX); });
            UpDirYCommand = new RelayCommand(() => { UpDirection = Vector3.UnitY; }, () => { return(UpDirection != Vector3.UnitY); });
            UpDirZCommand = new RelayCommand(() => { UpDirection = Vector3.UnitZ; }, () => { return(UpDirection != Vector3.UnitZ); });

            timer          = new DispatcherTimer();
            timer.Tick    += Timer_Tick;
            timer.Interval = new TimeSpan(0, 0, 0, 0, 16);
            timer.Start();
        }
Beispiel #10
0
        public MainViewModel()
        {
            EffectsManager = new DefaultEffectsManager();
            // titles
            Title    = "Simple Demo";
            SubTitle = "WPF & SharpDX";

            // camera setup
            Camera = new PerspectiveCamera {
                Position         = new Point3D(3, 3, 5),
                LookDirection    = new Vector3D(-3, -3, -5),
                UpDirection      = new Vector3D(0, 1, 0),
                FarPlaneDistance = 5000000
            };

            // setup lighting
            AmbientLightColor         = Colors.DimGray;
            DirectionalLightColor     = Colors.White;
            DirectionalLightDirection = new Vector3D(-2, -5, -2);

            // floor plane grid
            Grid          = LineBuilder.GenerateGrid(new Vector3(0, 1, 0), -5, 5, -5, 5);
            GridColor     = Colors.Black;
            GridTransform = new Media3D.TranslateTransform3D(0, -3, 0);

            // scene model3d
            var b1 = new MeshBuilder();

            b1.AddSphere(new Vector3(0, 0, 0), 0.5);
            b1.AddBox(new Vector3(0, 0, 0), 1, 0.5, 2, BoxFaces.All);

            var meshGeometry = b1.ToMeshGeometry3D();

            meshGeometry.Colors = new Color4Collection(meshGeometry.TextureCoordinates.Select(x => x.ToColor4()));
            Model = meshGeometry;

            // lines model3d
            var e1 = new LineBuilder();

            e1.AddBox(new Vector3(0, 0, 0), 1, 0.5, 2);
            Lines = e1.ToLineGeometry3D();

            var textBuilder = new MeshBuilder();

            textBuilder.ExtrudeText("HelixToolkit.SharpDX", "Arial", System.Windows.FontStyles.Normal, System.Windows.FontWeights.Bold,
                                    14, new Vector3(1, 0, 0), new Vector3(0, 0, 0), new Vector3(0, 0, 1));
            TextModel = textBuilder.ToMesh();

            // model trafos
            Model1Transform = new Media3D.TranslateTransform3D(0, 0, 0);
            Model2Transform = new Media3D.TranslateTransform3D(-2, 0, 0);
            Model3Transform = new Media3D.TranslateTransform3D(+2, 0, 0);
            Model4Transform = new Media3D.TranslateTransform3D(-8, 0, -5);

            // model materials
            RedMaterial   = PhongMaterials.Red;
            GreenMaterial = PhongMaterials.Green;
            BlueMaterial  = PhongMaterials.Blue;
            //var diffColor = this.RedMaterial.DiffuseColor;
            //diffColor.Alpha = 0.5f;
            //this.RedMaterial.DiffuseColor = diffColor;

            Points = new PointGeometry3D();
            var ptPos = new Vector3Collection();
            var ptIdx = new IntCollection();

            for (int x = 0; x < 10; x++)
            {
                for (int y = 0; y < 10; y++)
                {
                    for (int z = 0; z < 10; z++)
                    {
                        ptIdx.Add(ptPos.Count);
                        ptPos.Add(new Vector3(x, y, z));
                    }
                }
            }

            Points.Positions = ptPos;
            Points.Indices   = ptIdx;

            Text = new BillboardText3D();
            int numRows    = 11;
            int numColumns = 11;

            string[] texts = new string[]
            {
                "HelixToolkit",
                "abcde",
                "random",
                "SharpDX",
                "DirectX"
            };
            float angle = 0;

            for (var i = 0; i < numRows; i++)
            {
                for (var j = 0; j < numColumns; j++)
                {
                    angle += (float)Math.PI / 10;
                    Text.TextInfo.Add(new TextInfo(texts[(i + j) % texts.Length], new Vector3((i - numRows / 2), 0.0f, (j - numColumns / 2)))
                    {
                        Foreground = new Color4((float)i / numRows, 1 - (float)i / numRows, (float)(numColumns - j) / numColumns, 1f),
                        Background = new Color4(1 - (float)i / numRows, (float)(numColumns - j) / numColumns, (float)i / numRows, 0.8f),
                        Scale      = Math.Max(0.01f, (float)i / numRows * 0.02f),
                        Angle      = angle
                    });
                }
            }

            Billboard1Model = new BillboardSingleText3D()
            {
                TextInfo = new TextInfo("Model 1", new Vector3(0, 1, 0))
                {
                    Angle = 0
                },
                FontColor       = Colors.Blue.ToColor4(),
                FontSize        = 12,
                BackgroundColor = Colors.Plum.ToColor4(),
                FontStyle       = System.Windows.FontStyles.Italic,
                Padding         = new System.Windows.Thickness(2),
            };

            var background = Colors.Blue;

            background.A    = (byte)120;
            Billboard2Model = new BillboardSingleText3D()
            {
                TextInfo = new TextInfo("Model 2", new Vector3(2, 1, 0))
                {
                    Angle = -(float)Math.PI / 3
                },
                FontSize        = 12,
                FontColor       = Colors.Green.ToColor4(),
                BackgroundColor = background.ToColor4(),
                FontWeight      = System.Windows.FontWeights.Bold,
                Padding         = new System.Windows.Thickness(2),
            };
            background      = Colors.Purple;
            background.A    = (byte)50;
            Billboard3Model = new BillboardSingleText3D(2, 0.8f)
            {
                TextInfo = new TextInfo("Model 3", new Vector3(-2, 1, 0))
                {
                    Angle = -(float)Math.PI / 6
                },
                FontSize        = 12,
                FontColor       = Colors.Red.ToColor4(),
                BackgroundColor = background.ToColor4(),
                FontFamily      = "Times New Roman",
                FontStyle       = System.Windows.FontStyles.Italic,
                Padding         = new System.Windows.Thickness(2),
            };


            //BillboardImageModel = new BillboardSingleImage3D(CreateBitmapSample()) { MaskColor = Color.Black };
            BillboardImageModel = new BillboardSingleImage3D(CreatePNGSample(), 1, 1)
            {
                Angle = -(float)Math.PI / 5
            };
            BillboardImageModel.Center = new Vector3(2, 2, 0);

            UpXCommand        = new RelayCommand(x => { UpDirection = new Vector3D(1, 0, 0); });
            UpYCommand        = new RelayCommand(x => { UpDirection = new Vector3D(0, 1, 0); });
            UpZCommand        = new RelayCommand(x => { UpDirection = new Vector3D(0, 0, 1); });
            BackgroundTexture =
                BitmapExtensions.CreateLinearGradientBitmapStream(EffectsManager, 128, 128, Direct2DImageFormat.Bmp,
                                                                  new Vector2(0, 0), new Vector2(0, 128), new SharpDX.Direct2D1.GradientStop[]
            {
                new SharpDX.Direct2D1.GradientStop()
                {
                    Color = Colors.White.ToColor4(), Position = 0f
                },
                new SharpDX.Direct2D1.GradientStop()
                {
                    Color = Colors.DarkGray.ToColor4(), Position = 1f
                }
            });
        }
        public MainViewModel()
        {
            // titles
            Title    = "Simple Demo";
            SubTitle = "WPF & SharpDX";

            // camera setup
            Camera = new PerspectiveCamera {
                Position         = new Point3D(-6, 8, 23),
                LookDirection    = new Vector3D(11, -4, -23),
                UpDirection      = new Vector3D(0, 1, 0),
                FarPlaneDistance = 5000
            };

            EffectsManager = new CustomEffectsManager();


            var builder = new MeshBuilder(true);

            Vector3[] points = new Vector3[Width * Height];
            for (int i = 0; i < Width; ++i)
            {
                for (int j = 0; j < Height; ++j)
                {
                    points[i * Width + j] = new Vector3(i / 10f, 0, j / 10f);
                }
            }
            builder.AddRectangularMesh(points, Width);
            Model = builder.ToMesh();
            for (int i = 0; i < Model.Normals.Count; ++i)
            {
                Model.Normals[i] = new Vector3(0, Math.Abs(Model.Normals[i].Y), 0);
            }
            StartColor = Colors.Blue;
            MidColor   = Colors.Green;
            EndColor   = Colors.Red;

            var lineBuilder = new LineBuilder();

            lineBuilder.AddLine(new Vector3(0, 0, 0), new Vector3(10, 0, 0));
            lineBuilder.AddLine(new Vector3(0, 0, 0), new Vector3(0, 10, 0));
            lineBuilder.AddLine(new Vector3(0, 0, 0), new Vector3(0, 0, 10));

            AxisModel        = lineBuilder.ToLineGeometry3D();
            AxisModel.Colors = new Color4Collection(AxisModel.Positions.Count);
            AxisModel.Colors.Add(Colors.Red.ToColor4());
            AxisModel.Colors.Add(Colors.Red.ToColor4());
            AxisModel.Colors.Add(Colors.Green.ToColor4());
            AxisModel.Colors.Add(Colors.Green.ToColor4());
            AxisModel.Colors.Add(Colors.Blue.ToColor4());
            AxisModel.Colors.Add(Colors.Blue.ToColor4());

            AxisLabel = new BillboardText3D();
            AxisLabel.TextInfo.Add(new TextInfo()
            {
                Origin = new Vector3(11, 0, 0), Text = "X", Foreground = Colors.Red.ToColor4()
            });
            AxisLabel.TextInfo.Add(new TextInfo()
            {
                Origin = new Vector3(0, 11, 0), Text = "Y", Foreground = Colors.Green.ToColor4()
            });
            AxisLabel.TextInfo.Add(new TextInfo()
            {
                Origin = new Vector3(0, 0, 11), Text = "Z", Foreground = Colors.Blue.ToColor4()
            });

            builder = new MeshBuilder(true);
            builder.AddSphere(new Vector3(-15, 0, 0), 5);
            SphereModel = builder.ToMesh();

            GenerateNoiseCommand = new RelayCommand((o) => { CreatePerlinNoise(); });
            CreatePerlinNoise();
        }
        public MainViewModel()
        {
            // titles
            Title    = "Simple Demo";
            SubTitle = "WPF & SharpDX";

            // camera setup
            Camera = new PerspectiveCamera {
                Position         = new Point3D(3, 3, 5),
                LookDirection    = new Vector3D(-3, -3, -5),
                UpDirection      = new Vector3D(0, 1, 0),
                FarPlaneDistance = 5000000
            };

            // default render technique
            RenderTechniquesManager = new DefaultRenderTechniquesManager();
            RenderTechnique         = RenderTechniquesManager.RenderTechniques[DefaultRenderTechniqueNames.Blinn];
            EffectsManager          = new DefaultEffectsManager(RenderTechniquesManager);

            // setup lighting
            AmbientLightColor         = new Color4(0.1f, 0.1f, 0.1f, 1.0f);
            DirectionalLightColor     = Color.White;
            DirectionalLightDirection = new Vector3(-2, -5, -2);

            // floor plane grid
            Grid          = LineBuilder.GenerateGrid();
            GridColor     = SharpDX.Color.Black;
            GridTransform = new Media3D.TranslateTransform3D(-5, -1, -5);

            // scene model3d
            var b1 = new MeshBuilder();

            b1.AddSphere(new Vector3(0, 0, 0), 0.5);
            b1.AddBox(new Vector3(0, 0, 0), 1, 0.5, 2, BoxFaces.All);

            var meshGeometry = b1.ToMeshGeometry3D();

            meshGeometry.Colors = new Color4Collection(meshGeometry.TextureCoordinates.Select(x => x.ToColor4()));
            Model = meshGeometry;

            // lines model3d
            var e1 = new LineBuilder();

            e1.AddBox(new Vector3(0, 0, 0), 1, 0.5, 2);
            Lines = e1.ToLineGeometry3D();

            // model trafos
            Model1Transform = new Media3D.TranslateTransform3D(0, 0, 0);
            Model2Transform = new Media3D.TranslateTransform3D(-2, 0, 0);
            Model3Transform = new Media3D.TranslateTransform3D(+2, 0, 0);

            // model materials
            RedMaterial   = PhongMaterials.Red;
            GreenMaterial = PhongMaterials.Green;
            BlueMaterial  = PhongMaterials.Blue;
            //var diffColor = this.RedMaterial.DiffuseColor;
            //diffColor.Alpha = 0.5f;
            //this.RedMaterial.DiffuseColor = diffColor;

            Points = new PointGeometry3D();
            var ptPos = new Vector3Collection();
            var ptIdx = new IntCollection();

            for (int x = 0; x < 10; x++)
            {
                for (int y = 0; y < 10; y++)
                {
                    for (int z = 0; z < 10; z++)
                    {
                        ptIdx.Add(ptPos.Count);
                        ptPos.Add(new Vector3(x, y, z));
                    }
                }
            }

            Points.Positions = ptPos;
            Points.Indices   = ptIdx;

            Text = new BillboardText3D();

            for (var i = 0; i < 50; i++)
            {
                for (var j = 0; j < 50; j++)
                {
                    Text.TextInfo.Add(new TextInfo("Hello World", new Vector3(i, j, 0)));
                }
            }

            Billboard1Model = new BillboardSingleText3D()
            {
                TextInfo        = new TextInfo("Model 1", new Vector3(0, 1, 0)),
                FontColor       = Color.Blue,
                FontSize        = 12,
                BackgroundColor = Color.Plum,
                FontStyle       = System.Windows.FontStyles.Italic,
                Padding         = new System.Windows.Thickness(2)
            };

            var background = Color.Blue;

            background.A    = (byte)120;
            Billboard2Model = new BillboardSingleText3D()
            {
                TextInfo        = new TextInfo("Model 1", new Vector3(2, 1, 0)),
                FontSize        = 12,
                FontColor       = Color.Green,
                BackgroundColor = background,
                FontWeight      = System.Windows.FontWeights.Bold,
                Padding         = new System.Windows.Thickness(2)
            };
            background      = Color.Purple;
            background.A    = (byte)50;
            Billboard3Model = new BillboardSingleText3D(2, 0.8f)
            {
                TextInfo        = new TextInfo("Model 1", new Vector3(-2, 1, 0)),
                FontSize        = 12,
                FontColor       = Color.Red,
                BackgroundColor = background,
                FontFamily      = new System.Windows.Media.FontFamily("Times New Roman"),
                FontStyle       = System.Windows.FontStyles.Italic,
                Padding         = new System.Windows.Thickness(2)
            };


            //BillboardImageModel = new BillboardSingleImage3D(CreateBitmapSample()) { MaskColor = Color.Black };
            BillboardImageModel        = new BillboardSingleImage3D(CreatePNGSample(), 1, 1);
            BillboardImageModel.Center = new Vector3(2, 2, 0);
        }
Beispiel #13
0
        public MainViewModel()
        {
            // titles
            Title    = "Simple Demo";
            SubTitle = "WPF & SharpDX";

            // camera setup
            Camera = new PerspectiveCamera {
                Position         = new Point3D(3, 3, 5),
                LookDirection    = new Vector3D(-3, -3, -5),
                UpDirection      = new Vector3D(0, 1, 0),
                FarPlaneDistance = 5000000
            };

            // Create a custom render techniques manager that
            // only supports Phong and Blinn
            RenderTechniquesManager = new CustomRenderTechniquesManager();
            RenderTechnique         = RenderTechniquesManager.RenderTechniques["RenderCustom"];
            EffectsManager          = new CustomEffectsManager(RenderTechniquesManager);

            // setup lighting
            AmbientLightColor         = new Color4(0.1f, 0.1f, 0.1f, 1.0f);
            DirectionalLightColor     = Color.White;
            DirectionalLightDirection = new Vector3(-2, -5, -2);

            // floor plane grid
            Grid          = LineBuilder.GenerateGrid();
            GridColor     = Color.Black;
            GridTransform = new Media3D.TranslateTransform3D(-5, -1, -5);

            // scene model3d
            var b1 = new MeshBuilder();

            b1.AddSphere(new Vector3(0, 0, 0), 0.5);
            b1.AddBox(new Vector3(0, 0, 0), 1, 0.5, 2, BoxFaces.All);

            var meshGeometry = b1.ToMeshGeometry3D();

            meshGeometry.Colors = new Color4Collection(meshGeometry.TextureCoordinates.Select(x => x.ToColor4()));
            Model = meshGeometry;

            // lines model3d
            var e1 = new LineBuilder();

            e1.AddBox(new Vector3(0, 0, 0), 1, 0.5, 2);
            Lines = e1.ToLineGeometry3D();

            // model transform
            Model1Transform = new Media3D.TranslateTransform3D(0, 0, 0);
            Model2Transform = new Media3D.TranslateTransform3D(-2, 0, 0);
            Model3Transform = new Media3D.TranslateTransform3D(+2, 0, 0);

            // model materials
            RedMaterial   = PhongMaterials.Red;
            GreenMaterial = PhongMaterials.Green;
            BlueMaterial  = PhongMaterials.Blue;

            Points = new PointGeometry3D();
            var ptPos = new Vector3Collection();
            var ptIdx = new IntCollection();

            Text = new BillboardText3D();

            for (int x = -5; x <= 5; x++)
            {
                for (int y = -5; y <= 5; y++)
                {
                    ptIdx.Add(ptPos.Count);
                    ptPos.Add(new Vector3(x, -1, y));
                    Text.TextInfo.Add(new TextInfo(string.Format("{0}:{1}", x, y), new Vector3(x, -1, y)));
                }
            }

            Points.Positions = ptPos;
            Points.Indices   = ptIdx;
        }
Beispiel #14
0
        private void RenderAction()
        {
            IRenderHost    renderHost = DynaShapeViewExtension.GetViewport().RenderHost;
            List <Model3D> sceneItems = DynaShapeViewExtension.GetSceneItems();


            pointGeometry = new PointGeometry3D
            {
                Positions = new Vector3Collection(),
                Indices   = new IntCollection(),
                Colors    = new Color4Collection()
            };

            lineGeometry = new LineGeometry3D()
            {
                Positions = new Vector3Collection(),
                Indices   = new IntCollection(),
                Colors    = new Color4Collection()
            };


            billboardText = new BillboardText3D();

            foreach (MeshGeometryModel3D meshModel in meshModels)
            {
                meshModel.Detach();
                if (sceneItems.Contains(meshModel))
                {
                    sceneItems.Remove(meshModel);
                }
            }

            meshModels.Clear();

            //============================================
            // Render nodes as points
            //============================================

            int n = pointGeometry.Indices.Count;

            for (int i = 0; i < solver.Nodes.Count; i++)
            {
                pointGeometry.Positions.Add(solver.Nodes[i].Position.ToVector3());
                pointGeometry.Colors.Add(DefaultPointColor);
                pointGeometry.Indices.Add(n + i);
            }

            //==============================================================
            // Render geometries from geometry binders
            //==============================================================

            foreach (GeometryBinder geometryBinder in solver.GeometryBinders)
            {
                if (geometryBinder.Show)
                {
                    geometryBinder.CreateDisplayedGeometries(this, solver.Nodes);
                }
            }

            //============================================================================
            // Render GUI elements
            //============================================================================

            RenderGUI();

            //==============================================================
            // Attach the geometries to Helix render host
            //==============================================================

            if (pointGeometry.Positions.Count >= 1)
            {
                pointModel.Geometry = pointGeometry;
                if (!sceneItems.Contains(pointModel))
                {
                    sceneItems.Add(pointModel);
                }
                if (!pointModel.IsAttached)
                {
                    pointModel.Attach(renderHost);
                }
//                sceneItems.Remove(pointModel);
//                pointModel.Detach();
//                sceneItems.Add(pointModel);
//                sw.Restart();
//                pointModel.Attach(renderHost);
//                DynamoLogger.Instance.Log(sw.Elapsed.TotalMilliseconds + "ms (Attach)");
            }
            else
            {
                if (sceneItems.Contains(pointModel))
                {
                    sceneItems.Remove(pointModel);
                }
                pointModel.Detach();
            }

            if (lineGeometry.Positions.Count >= 2)
            {
                lineModel.Geometry = lineGeometry;
                if (!sceneItems.Contains(lineModel))
                {
                    sceneItems.Add(lineModel);
                }
                if (!lineModel.IsAttached)
                {
                    lineModel.Attach(renderHost);
                }
            }
            else
            {
                if (sceneItems.Contains(lineModel))
                {
                    sceneItems.Remove(lineModel);
                }
                lineModel.Detach();
            }

            foreach (MeshGeometryModel3D meshModel in meshModels)
            {
                sceneItems.Add(meshModel);
                meshModel.Attach(renderHost);
            }

            if (billboardText.TextInfo.Count >= 1)
            {
                billboardTextModel.Geometry = billboardText;
                if (!sceneItems.Contains(billboardTextModel))
                {
                    sceneItems.Add(billboardTextModel);
                }
                if (!billboardTextModel.IsAttached)
                {
                    billboardTextModel.Attach(renderHost);
                }
            }
            else
            {
                if (sceneItems.Contains(billboardTextModel))
                {
                    sceneItems.Remove(billboardTextModel);
                }
                billboardTextModel.Detach();
            }
        }
Beispiel #15
0
        internal static BillboardText3D InitText3D()
        {
            var text3D = new BillboardText3D();

            return(text3D);
        }
Beispiel #16
0
        public MainPageViewModel()
        {
            EffectsManager = new DefaultEffectsManager(new Logger());

            Camera = new PerspectiveCamera()
            {
                Position = new Vector3(0, 0, -15), LookDirection = new Vector3(0, 0, 15), UpDirection = new Vector3(0, 1, 0)
            };

            var builder = new MeshBuilder(true, true, true);

            builder.AddBox(new SharpDX.Vector3(0, 0, 0), 2, 2, 2);
            builder.AddSphere(new Vector3(0, 2, 0), 1.5);
            Geometry = builder.ToMesh();
            Material = new PhongMaterial()
            {
                AmbientColor      = Color.Gray,
                DiffuseColor      = new Color4(0.75f, 0.75f, 0.75f, 1.0f),
                SpecularColor     = Color.White,
                SpecularShininess = 100f,
            };
            Material.DiffuseMap = LoadTexture("TextureCheckerboard2.jpg");
            Material.NormalMap  = LoadTexture("TextureCheckerboard2_dot3.jpg");
            var lineBuilder = new LineBuilder();

            lineBuilder.AddLine(Vector3.Zero, new Vector3(5, 0, 0));
            lineBuilder.AddLine(Vector3.Zero, new Vector3(0, 5, 0));
            lineBuilder.AddLine(Vector3.Zero, new Vector3(0, 0, 5));
            LineGeometry        = lineBuilder.ToLineGeometry3D();
            LineGeometry.Colors = new HelixToolkit.UWP.Core.Color4Collection()
            {
                Color.Red, Color.Red, Color.Green, Color.Green, Color.Blue, Color.Blue
            };

            builder = new MeshBuilder();
            builder.AddSphere(new Vector3(), 3);
            var mesh = builder.ToMesh();

            PointGeometry = new PointGeometry3D()
            {
                Positions = mesh.Positions
            };

            AxisLabelGeometry = new BillboardText3D();
            AxisLabelGeometry.TextInfo.Add(new TextInfo("X", new Vector3(5.5f, 0, 0))
            {
                Foreground = Color.Red
            });
            AxisLabelGeometry.TextInfo.Add(new TextInfo("Y", new Vector3(0, 5.5f, 0))
            {
                Foreground = Color.Green
            });
            AxisLabelGeometry.TextInfo.Add(new TextInfo("Z", new Vector3(0, 0, 5.5f))
            {
                Foreground = Color.Blue
            });

            builder = new MeshBuilder();
            builder.AddBox(new Vector3(0, -6, 0), 30, 0.5, 30);
            FloorModel = builder.ToMesh();

            FloorMaterial = PhongMaterials.LightGray;

            timer          = new DispatcherTimer();
            timer.Tick    += Timer_Tick;
            timer.Interval = new TimeSpan(0, 0, 0, 0, 16);
            timer.Start();
        }