Beispiel #1
0
 public static void smethod_22(WW.Cad.Drawing.Surface.Geometry geometry, IList <WW.Math.Point3D> boundary)
 {
     if (boundary.Count == 0)
     {
         return;
     }
     if (boundary.Count == 1)
     {
         geometry.Add((IPrimitive) new WW.Cad.Drawing.Surface.Point(boundary[0]));
     }
     else if (boundary.Count == 2)
     {
         geometry.Add((IPrimitive) new WW.Cad.Drawing.Surface.Segment(boundary[0], boundary[1]));
     }
     else if (boundary.Count == 3)
     {
         geometry.Add((IPrimitive) new WW.Cad.Drawing.Surface.Triangle(boundary[0], boundary[1], boundary[2]));
     }
     else if (boundary.Count == 4)
     {
         geometry.Add((IPrimitive) new Quad(boundary[0], boundary[1], boundary[2], boundary[3]));
     }
     else
     {
         int       count     = boundary.Count;
         Polygon3D polygon3D = new Polygon3D(count);
         for (int index = 0; index < count; ++index)
         {
             polygon3D.Add(boundary[index]);
         }
         Plane3D?plane = polygon3D.GetPlane();
         if (!plane.HasValue)
         {
             return;
         }
         Matrix4D  matrix4D     = Transformation4D.Translation(plane.Value.Distance * plane.Value.Normal) * Transformation4D.GetArbitraryCoordSystem(plane.Value.Normal);
         Matrix4D  inverse      = matrix4D.GetInverse();
         Polygon2D projection2D = polygon3D.GetProjection2D(inverse);
         List <Triangulator2D.Triangle> triangleList = new List <Triangulator2D.Triangle>();
         List <WW.Math.Point2D>         point2DList  = new List <WW.Math.Point2D>();
         Triangulator2D.Triangulate((IList <IList <WW.Math.Point2D> >) new Polygon2D[1]
         {
             projection2D
         }, (IList <Triangulator2D.Triangle>)triangleList, (IList <WW.Math.Point2D>)point2DList);
         foreach (Triangulator2D.Triangle triangle in triangleList)
         {
             geometry.Add((IPrimitive) new WW.Cad.Drawing.Surface.Triangle(matrix4D.TransformTo3D(point2DList[triangle.I0]), matrix4D.TransformTo3D(point2DList[triangle.I1]), matrix4D.TransformTo3D(point2DList[triangle.I2])));
         }
     }
 }
Beispiel #2
0
 public static void smethod_20(
     DxfEntity entity,
     DrawContext.Surface context,
     ISurfaceGraphicsFactory graphicsFactory,
     Polyline4D boundary,
     List <bool> edgeVisibleList)
 {
     if (boundary.Count == 0)
     {
         return;
     }
     if (boundary.Count == 1)
     {
         graphicsFactory.CreatePoint(boundary[0]);
     }
     else if (boundary.Count == 2)
     {
         bool flag = true;
         if (edgeVisibleList.Count != 0 && !edgeVisibleList[0])
         {
             flag = false;
         }
         if (!flag)
         {
             return;
         }
         graphicsFactory.CreateSegment(boundary[0], boundary[1]);
     }
     else if (boundary.Count == 3)
     {
         bool[] flagArray = (bool[])null;
         if (edgeVisibleList != null)
         {
             flagArray = edgeVisibleList.ToArray();
         }
         graphicsFactory.CreateTriangle(boundary[0], boundary[1], boundary[2], (IList <bool>)flagArray);
     }
     else if (boundary.Count == 4)
     {
         bool[] flagArray = (bool[])null;
         if (edgeVisibleList != null)
         {
             flagArray = edgeVisibleList.ToArray();
         }
         graphicsFactory.CreateQuad((IList <Vector4D>)boundary.ToArray(), (IList <bool>)flagArray);
     }
     else
     {
         int       count     = boundary.Count;
         Polygon3D polygon3D = new Polygon3D(count);
         for (int index = 0; index < count; ++index)
         {
             polygon3D.Add((WW.Math.Point3D)boundary[index]);
         }
         Plane3D?plane = polygon3D.GetPlane();
         if (!plane.HasValue)
         {
             return;
         }
         Matrix4D  matrix4D     = Transformation4D.Translation(plane.Value.Distance * plane.Value.Normal) * Transformation4D.GetArbitraryCoordSystem(plane.Value.Normal);
         Matrix4D  inverse      = matrix4D.GetInverse();
         Polygon2D projection2D = polygon3D.GetProjection2D(inverse);
         List <Triangulator2D.Triangle> triangleList = new List <Triangulator2D.Triangle>();
         List <WW.Math.Point2D>         point2DList  = new List <WW.Math.Point2D>();
         Triangulator2D.Triangulate((IList <IList <WW.Math.Point2D> >) new Polygon2D[1]
         {
             projection2D
         }, (IList <Triangulator2D.Triangle>)triangleList, (IList <WW.Math.Point2D>)point2DList);
         foreach (Triangulator2D.Triangle triangle in triangleList)
         {
             graphicsFactory.CreateTriangle(matrix4D.TransformTo4D(point2DList[triangle.I0]), matrix4D.TransformTo4D(point2DList[triangle.I1]), matrix4D.TransformTo4D(point2DList[triangle.I2]), (IList <bool>)null);
         }
     }
 }