private void CreateCylinderWithCircles(Point3D bottomCenterPosition, double radius, double height, DiffuseMaterial material)
        {
            var cylinderVisual3D = new CylinderVisual3D()
            {
                BottomCenterPosition = bottomCenterPosition,
                Radius   = radius,
                Height   = height,
                Material = material
            };

            TestObjectsModelVisual3D.Children.Add(cylinderVisual3D);


            int circlesCount = 4;

            for (int i = 0; i < circlesCount; i++)
            {
                var lineArcVisual3D = new LineArcVisual3D()
                {
                    CircleCenterPosition = bottomCenterPosition + Constants.UpVector * height * (double)i / (double)(circlesCount - 1),
                    Radius             = radius * 1.02,
                    CircleNormal       = Constants.UpVector,
                    ZeroAngleDirection = Constants.XAxis,
                    StartAngle         = 0,
                    EndAngle           = 360,
                    LineColor          = Colors.Yellow,
                    LineThickness      = 3
                };

                TestObjectsModelVisual3D.Children.Add(lineArcVisual3D);
            }
        }
        private BaseLineVisual3D CloneLineVisuals(BaseLineVisual3D lineVisual)
        {
            BaseLineVisual3D clonedLineVisual = null;

            // NOTE:
            // This method supports only cloning LineArcVisual3D and WireBoxVisual3D

            var lineArcVisual3D = lineVisual as LineArcVisual3D;

            if (lineArcVisual3D != null)
            {
                clonedLineVisual = new LineArcVisual3D()
                {
                    CircleCenterPosition = lineArcVisual3D.CircleCenterPosition,
                    Radius             = lineArcVisual3D.Radius,
                    CircleNormal       = lineArcVisual3D.CircleNormal,
                    ZeroAngleDirection = lineArcVisual3D.ZeroAngleDirection,
                    StartAngle         = lineArcVisual3D.StartAngle,
                    EndAngle           = lineArcVisual3D.EndAngle,
                    LineColor          = lineArcVisual3D.LineColor,
                    LineThickness      = lineArcVisual3D.LineThickness
                };
            }
            else
            {
                var wireBoxVisual3D = lineVisual as WireBoxVisual3D;
                if (wireBoxVisual3D != null)
                {
                    clonedLineVisual = new WireBoxVisual3D()
                    {
                        CenterPosition = wireBoxVisual3D.CenterPosition,
                        Size           = wireBoxVisual3D.Size,
                        LineColor      = wireBoxVisual3D.LineColor,
                        LineThickness  = wireBoxVisual3D.LineThickness
                    };
                }
            }

            return(clonedLineVisual);
        }
Esempio n. 3
0
        private ModelVisual3D CreateScene()
        {
            var rootModelVisual3D = new ModelVisual3D();

            var showLineThicknesses = new double[4];

            showLineThicknesses[0] = 0.6;

            double screenPixelLineThickness = 1.0 / _dpiScale; // set line thickness so that it will take 1 pixel
            string screenPixelThickLineText;

            if (_dpiScale == 1)
            {
                // No DPI scaling is used
                showLineThicknesses[1] = 0.8;
                showLineThicknesses[2] = 1.0;
                showLineThicknesses[3] = 2.0;

                screenPixelThickLineText = null; // No special line title
            }
            else
            {
                // DPI scaling is used => show line with 1 screen pixel line thickness
                showLineThicknesses[1] = screenPixelLineThickness;
                showLineThicknesses[2] = 1.0;
                showLineThicknesses[3] = 2.0;

                screenPixelThickLineText = string.Format(System.Globalization.CultureInfo.InvariantCulture, "LineThickness {0:0.##} (1px *):", screenPixelLineThickness);
            }


            AddLinesFan(rootModelVisual3D, startPosition: new Point3D(-210, -5, 0), lineThickness: 0.6, linesLength: 100);
            AddLinesFan(rootModelVisual3D, startPosition: new Point3D(-50, -5, 0), lineThickness: 0.8, linesLength: 100, screenPixelThickLineText);

            AddLinesFan(rootModelVisual3D, startPosition: new Point3D(-210, -140, 0), lineThickness: 1, linesLength: 100);
            AddLinesFan(rootModelVisual3D, startPosition: new Point3D(-50, -140, 0), lineThickness: 2, linesLength: 100);


            // Add lines that start from vertical lines and then continue with slightly angled lines
            var linePositions = new Point3DCollection();

            double xPos = 100;

            for (int i = 0; i <= 16; i++)
            {
                var startPosition = new Point3D(xPos, -5.5, 0);

                linePositions.Add(startPosition);
                linePositions.Add(startPosition + new Vector3D(i, 100, 0));

                xPos += 6;
            }

            var multiLineVisual3D = new MultiLineVisual3D()
            {
                Positions     = linePositions,
                LineColor     = Colors.Black,
                LineThickness = screenPixelLineThickness
            };

            rootModelVisual3D.Children.Add(multiLineVisual3D);



            // Add line circles
            double radius = 10;

            while (radius <= 40)
            {
                var lineArcVisual3D = new LineArcVisual3D()
                {
                    Radius        = radius,
                    LineColor     = Colors.Black,
                    LineThickness = screenPixelLineThickness,
                    StartAngle    = 0,
                    EndAngle      = 360,
                    Segments      = 60,
                    CircleNormal  = new Vector3D(0, 0, 1),
                };

                var transform3DGroup = new Transform3DGroup();
                transform3DGroup.Children.Add(new ScaleTransform3D(1.5, 1, 1));
                transform3DGroup.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), 45)));
                transform3DGroup.Children.Add(new TranslateTransform3D(150, -90.5, 0));
                lineArcVisual3D.Transform = transform3DGroup;

                radius += radius <= 20 ? 2 : 3;

                rootModelVisual3D.Children.Add(lineArcVisual3D);
            }

            return(rootModelVisual3D);
        }