AddSegment() public method

Function to add one segment of our curve. d1 and d2 are two pre-calc'd disks of points perpendicular to the curve.
public AddSegment ( Vector3D d1, Vector3D d2 ) : void
d1 Vector3D
d2 Vector3D
return void
Beispiel #1
0
        public static void GenCapWithHole()
        {
            Shapeways mesh = new Shapeways();

            double overallScale = 12.5;                 // 2.5 cm = 1 in diameter

            // Make hole 2 mm
            double startAngle = Math.Asin(2.0 / 2 / overallScale);
            double endAngle   = Math.PI / 8;            // Slightly larger than hole above.

            int    div      = 75;
            double angleInc = (endAngle - startAngle) / div;

            for (int i = 0; i < div; i++)
            {
                double   angle1 = startAngle + angleInc * i;
                double   angle2 = startAngle + angleInc * (i + 1);
                Vector3D s1 = new Vector3D(0, 0, 1), s2 = new Vector3D(0, 0, 1);
                s1.RotateAboutAxis(new Vector3D(0, 1, 0), angle1);
                s2.RotateAboutAxis(new Vector3D(0, 1, 0), angle2);

                Vector3D p1 = s1 * (1 + SizeFunc(s1, overallScale));
                Vector3D p2 = s2 * (1 + SizeFunc(s2, overallScale));
                Vector3D n1 = s1 * (1 - SizeFunc(s1, overallScale));
                Vector3D n2 = s2 * (1 - SizeFunc(s2, overallScale));

                List <Vector3D> pointsP1 = new List <Vector3D>();
                List <Vector3D> pointsP2 = new List <Vector3D>();
                List <Vector3D> pointsN1 = new List <Vector3D>();
                List <Vector3D> pointsN2 = new List <Vector3D>();
                for (int j = 0; j < div; j++)
                {
                    pointsP1.Add(p1);
                    pointsP2.Add(p2);
                    pointsN1.Add(n1);
                    pointsN2.Add(n2);
                    p1.RotateAboutAxis(new Vector3D(0, 0, 1), 2 * Math.PI / div);
                    p2.RotateAboutAxis(new Vector3D(0, 0, 1), 2 * Math.PI / div);
                    n1.RotateAboutAxis(new Vector3D(0, 0, 1), 2 * Math.PI / div);
                    n2.RotateAboutAxis(new Vector3D(0, 0, 1), 2 * Math.PI / div);
                }

                mesh.AddSegment(pointsP1.ToArray(), pointsP2.ToArray());
                mesh.AddSegment(pointsN2.ToArray(), pointsN1.ToArray());
                if (i == 0)
                {
                    mesh.AddSegment(pointsN1.ToArray(), pointsP1.ToArray());
                }
                if (i == div - 1)
                {
                    mesh.AddSegment(pointsP2.ToArray(), pointsN2.ToArray());
                }
            }

            mesh.Mesh.Scale(overallScale);

            string outputFileName = @"d:\temp\cap_with_hole.stl";

            STL.SaveMeshToSTL(mesh.Mesh, outputFileName);
        }