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); }
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); }