Member 13538520 Ответов: 1

Есть ли какой-нибудь способ рисовать 2D-фигуры в viewport3d, такие как линия, дуга , точка, плоскость?


Прямо сейчас я использую Viewport3D, в котором я рисую все 3D-фигуры, но я также хочу нарисовать дугу, точку и линии в Viewport3D. Может ли кто-нибудь помочь мне с этим?

Что я уже пробовал:

Я использую геометрию пути для рисования дуги, но почему-то не могу добавить ее в viewport3D...могу ли я использовать Viewport2DVisual3D.Visual? но я не знаю, как им пользоваться

1 Ответов

Рейтинг:
10

Member 13538520

Есть решение.

ArcModel = new Viewport2DVisual3D();
 MeshGeometry3D testGeometry = new MeshGeometry3D();
 PathFigure pthFigure = new PathFigure();
 pthFigure.StartPoint = new Point(100, 10);

 ArcSegment arcSeg = new ArcSegment();
 arcSeg.Point = new Point(300, 30);
 arcSeg.Size = new Size(50, 5);
 arcSeg.IsLargeArc = true;
 arcSeg.SweepDirection = SweepDirection.Counterclockwise;
 //arcSeg.RotationAngle = 30;

 PathSegmentCollection myPathSegmentCollection = new    PathSegmentCollection();
 myPathSegmentCollection.Add(arcSeg);

 pthFigure.Segments = myPathSegmentCollection;

 PathFigureCollection pthFigureCollection = new PathFigureCollection();
 pthFigureCollection.Add(pthFigure);

 PathGeometry pthGeometry = new PathGeometry();
 pthGeometry.Figures = pthFigureCollection;

 Path arcPath = new Path();
 arcPath.Stroke = new SolidColorBrush(Colors.Violet);
 arcPath.StrokeThickness = 1;
 arcPath.Data = pthGeometry;



 Point3DCollection myPoint3DCollection = new Point3DCollection();
 myPoint3DCollection.Add(new Point3D(0, 0, 0));
 myPoint3DCollection.Add(new Point3D(0, 0, 2));
 myPoint3DCollection.Add(new Point3D(0, 2, 0));
 myPoint3DCollection.Add(new Point3D(0, 2, 2));
 testGeometry.Positions = myPoint3DCollection;

 PointCollection myPointCollection = new PointCollection();
 myPointCollection.Add(new Point(0, 1));
 myPointCollection.Add(new Point(1, 1));
 myPointCollection.Add(new Point(0, 0));
 myPointCollection.Add(new Point(1, 0));
 testGeometry.TextureCoordinates = myPointCollection;

 Int32Collection triangleIndicesCollection = new Int32Collection();
 triangleIndicesCollection.Add(0);
 triangleIndicesCollection.Add(1);
 triangleIndicesCollection.Add(2);
 triangleIndicesCollection.Add(2);
 triangleIndicesCollection.Add(1);
 triangleIndicesCollection.Add(3);
 testGeometry.TriangleIndices = triangleIndicesCollection;

 DiffuseMaterial myDiffuseMaterial = new DiffuseMaterial(Brushes.White);
 Viewport2DVisual3D.SetIsVisualHostMaterial(myDiffuseMaterial, true);

 Transform3DGroup myTransform3DGroup = new Transform3DGroup();

 RotateTransform3D rotateTransform = new RotateTransform3D()
 {
     Rotation = new AxisAngleRotation3D
     {
         Angle = 40,
         Axis = new Vector3D(0, 1, 0)
     }
 };


 myTransform3DGroup.Children.Add(rotateTransform);
 ArcModel.Transform = myTransform3DGroup;
 ArcModel.Material = myDiffuseMaterial;
 ArcModel.Geometry = testGeometry;
 ArcModel.Visual = arcPath;

 viewport.Children.Add(ArcModel);



надеюсь, это кому-то поможет!