public static Point3dCollection GetOffsetTriangles(TinSurfaceTriangle tri, double offset) { var points = new Point3dCollection(); try { Acad.Vector3d cenpointp3d = new Acad.Vector3d(); Acad.Vector3d centerv1 = new Acad.Vector3d(); Acad.Vector3d centerv2 = new Acad.Vector3d(); Acad.Vector3d centerv3 = new Acad.Vector3d(); var v1 = tri.Vertex1.Location; var v2 = tri.Vertex2.Location; var v3 = tri.Vertex3.Location; var vec1 = v1.GetVectorTo(v2); var vec2 = v1.GetVectorTo(v3); var norm = vec1.CrossProduct(vec2); var e1 = UnitVector3D(vec1); var e2 = UnitVector3D(vec2); var M = new Acad.Vector3d(norm.X, norm.Y, norm.Z + offset); cenpointp3d = FindTriangleCenter(v1, v2, v3, vec1.CrossProduct(vec2)); centerv1 = new Acad.Vector3d(cenpointp3d.X + v1.X, cenpointp3d.Y + v1.Y, cenpointp3d.Z + v1.Z) / 2.0; centerv2 = new Acad.Vector3d(cenpointp3d.X + v2.X, cenpointp3d.Y + v2.Y, cenpointp3d.Z + v2.Z) / 2.0; centerv3 = new Acad.Vector3d(cenpointp3d.X + v3.X, cenpointp3d.Y + v3.Y, cenpointp3d.Z + v3.Z) / 2.0; var offsetcenterv1 = (centerv1.Add(M)); var offsetcenterv2 = (centerv2.Add(M)); var offsetcenterv3 = (centerv3.Add(M)); var p1 = new Acad.Point3d(offsetcenterv1.X, offsetcenterv1.Y, offsetcenterv1.Z); var p2 = new Acad.Point3d(offsetcenterv2.X, offsetcenterv2.Y, offsetcenterv2.Z); var p3 = new Acad.Point3d(offsetcenterv3.X, offsetcenterv3.Y, offsetcenterv3.Z); points.Add(p1); points.Add(p2); points.Add(p3); } catch (System.Exception ex) { Debug.WriteLine("Error: " + ex.Message); } return(points); }
public static Point3dCollection GetOffsetTrianglesEdges(TinSurfaceTriangle tri, double offset) { var points = new Point3dCollection(); try { Acad.Vector3d cenpointp3d = new Acad.Vector3d(); Acad.Vector3d centerv1 = new Acad.Vector3d(); Acad.Vector3d centerv2 = new Acad.Vector3d(); Acad.Vector3d centerv3 = new Acad.Vector3d(); var edge1 = tri.Edge1; var edge2 = tri.Edge2; var edge3 = tri.Edge3; //compute the contributions from the edges var tv111 = edge1.Triangle1.Vertex1.Location; var tv112 = edge1.Triangle1.Vertex2.Location; var tv113 = edge1.Triangle1.Vertex3.Location; var tv121 = edge1.Triangle2.Vertex1.Location; var tv122 = edge1.Triangle2.Vertex2.Location; var tv123 = edge1.Triangle2.Vertex3.Location; BBC.SkeletonSurf.SkeletonSurf.CreateLine(tv111, tv112); BBC.SkeletonSurf.SkeletonSurf.CreateLine(tv111, tv113); BBC.SkeletonSurf.SkeletonSurf.CreateLine(tv113, tv112); // vectors var v22 = tv111.GetVectorTo(tv113); var v23 = tv121.GetVectorTo(tv123); var n22 = v22.GetNormal(Tolerance.Global); var n23 = v23.GetNormal(Tolerance.Global); var n = n22 + n23; var angle = v22.GetAngleTo(v23) * 180 / Math.PI; var ap = v22.AngleOnPlane(new Plane(tv121, v23.CrossProduct(v22))); var ap2 = v23.AngleOnPlane(new Plane(tv121, v23.CrossProduct(v22))); //edge1.Triangle1 var v1 = tri.Vertex1.Location; var v2 = tri.Vertex2.Location; var v3 = tri.Vertex3.Location; var vec1 = v1.GetVectorTo(v2); var vec2 = v1.GetVectorTo(v3); var norm = vec1.CrossProduct(vec2); var e1 = UnitVector3D(vec1); var e2 = UnitVector3D(vec2); var M = new Acad.Vector3d(norm.X, norm.Y, norm.Z + offset); cenpointp3d = FindTriangleCenter(v1, v2, v3, vec1.CrossProduct(vec2)); centerv1 = new Acad.Vector3d(cenpointp3d.X + v1.X, cenpointp3d.Y + v1.Y, cenpointp3d.Z + v1.Z) / 2.0; centerv2 = new Acad.Vector3d(cenpointp3d.X + v2.X, cenpointp3d.Y + v2.Y, cenpointp3d.Z + v2.Z) / 2.0; centerv3 = new Acad.Vector3d(cenpointp3d.X + v3.X, cenpointp3d.Y + v3.Y, cenpointp3d.Z + v3.Z) / 2.0; var offsetcenterv1 = (centerv1.Add(M)); var offsetcenterv2 = (centerv2.Add(M)); var offsetcenterv3 = (centerv3.Add(M)); var p1 = new Acad.Point3d(offsetcenterv1.X, offsetcenterv1.Y, offsetcenterv1.Z); var p2 = new Acad.Point3d(offsetcenterv2.X, offsetcenterv2.Y, offsetcenterv2.Z); var p3 = new Acad.Point3d(offsetcenterv3.X, offsetcenterv3.Y, offsetcenterv3.Z); points.Add(p1); points.Add(p2); points.Add(p3); } catch (System.Exception ex) { Debug.WriteLine("Error: " + ex.Message); } return(points); }
public static List <Acad.Vector3d> GetOffsetPoints(TinSurfaceVertex vert, double offset) { var points = new List <Acad.Vector3d>(); try { var sum = new SummationsAcad(); var sumv = new SummationsAcad(); Acad.Vector3d centerOfPlane = new Acad.Vector3d(); Acad.Vector3d centerv1 = new Acad.Vector3d(); Acad.Vector3d centerv2 = new Acad.Vector3d(); Acad.Vector3d centerv3 = new Acad.Vector3d(); // central connection point var location = vert.Location; var cenpoint = MathNet.Numerics.LinearAlgebra.Vector <double> .Build.DenseOfArray(new[] { location.X, location.Y, location.Z }); var cenpointp3d = new Acad.Point3d(cenpoint[0], cenpoint[1], cenpoint[2]); // all the connecting Triangles var triangles = vert.Triangles; // all the connecting vertices's var connectedvertices = vert.Vertices; var connectedTriangles = vert.Triangles; foreach (var tri in connectedTriangles) { var v1 = tri.Vertex1.Location; var v2 = tri.Vertex2.Location; var v3 = tri.Vertex3.Location; var vec1 = v1.GetVectorTo(v2); var vec2 = v1.GetVectorTo(v3); var norm = vec1.CrossProduct(vec2); var e1 = UnitVector3D(vec1); var e2 = UnitVector3D(vec2); centerOfPlane = FindTriangleCenter(v1, v2, v3, vec1.CrossProduct(vec2)); //create 3 more points on the plane centerv1 = new Acad.Vector3d(cenpointp3d.X + v1.X, cenpointp3d.Y + v1.Y, cenpointp3d.Z + v1.Z) / 2.0; centerv2 = new Acad.Vector3d(cenpointp3d.X + v2.X, cenpointp3d.Y + v2.Y, cenpointp3d.Z + v2.Z) / 2.0; centerv3 = new Acad.Vector3d(cenpointp3d.X + v3.X, cenpointp3d.Y + v3.Y, cenpointp3d.Z + v3.Z) / 2.0; sum = IterateAdjacentTrianglesAcad(connectedTriangles, cenpointp3d); } //Triangle Center Points var M = (new Acad.Vector3d(sum.Top.X, sum.Top.Y, sum.Top.Z) / (Magnitude(new Acad.Vector3d(sum.Bot.X, sum.Bot.Y, sum.Bot.Z)))) * offset; var offsetvecCenter = (centerOfPlane.Add(M)); var offsetcenterv1 = (centerv1.Add(M)); var offsetcenterv2 = (centerv2.Add(M)); var offsetcenterv3 = (centerv3.Add(M)); points.Add(offsetvecCenter); points.Add(offsetcenterv1); points.Add(offsetcenterv2); points.Add(offsetcenterv3); } catch (System.Exception ex) { Debug.WriteLine("Error: " + ex.Message); } return(points.ToList()); }