Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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());
        }