예제 #1
0
        public static VsObject Prism(VsPolygon3 bs, double thickness)
        {
            VsObject ret = new VsObject();
            Matrix44 m   = new Matrix44();

            ret.Add(new VsPolygon3(bs));
            m.SetTMat(0.0D, 0.0D, thickness);
            VsPolygon3 p = (VsPolygon3)bs.Transform(m);

            int n = bs.pol.NVertex();

            for (int i = 0; i < n; i++)
            {
                int j = i + 1;
                if (j >= n)
                {
                    j = 0;
                }
                Polygon3D temp = new Polygon3D();
                temp.AddVertex(new Vector3D(bs.pol.GetVertex(i)));
                temp.AddVertex(new Vector3D(p.pol.GetVertex(i)));
                temp.AddVertex(new Vector3D(p.pol.GetVertex(j)));
                temp.AddVertex(new Vector3D(bs.pol.GetVertex(j)));
                ret.Add(new VsPolygon3(temp, new Material(bs.mate)));
            }

            p.pol.Reverse();
            ret.Add(p);

            return(ret);
        }
예제 #2
0
        public static VsObject Pyramid(VsPolygon3 bs, Vector3D top)
        {
            VsObject ret = new VsObject();
            Matrix44 m   = new Matrix44();

            ret.Add(new VsPolygon3(bs));

            int n = bs.pol.NVertex();

            for (int i = 0; i < n; i++)
            {
                int j = i + 1;
                if (j >= n)
                {
                    j = 0;
                }
                Polygon3D temp = new Polygon3D();
                temp.AddVertex(new Vector3D(bs.pol.GetVertex(j)));
                temp.AddVertex(new Vector3D(bs.pol.GetVertex(i)));
                temp.AddVertex(new Vector3D(top));
                ret.Add(new VsPolygon3(temp, new Material(bs.mate)));
            }

            return(ret);
        }
예제 #3
0
        public virtual VsElement Clip2D(Clipper clip)
        {
            VsPolygon3 ret = new VsPolygon3(this);

            if (ret.pol.NVertex() >= 3)
            {
                ret.pol = clip.Vs_polygon_clip_2d(ret.pol);
            }
            return(ret);
        }
예제 #4
0
 public VsPolygon3(VsPolygon3 p)
 {
     type     = "VsPolygon3";
     col      = Color.Black;
     faceflag = true;
     mate     = new Material(p.mate);
     col      = p.col;
     pol      = new Polygon3D(p.pol);
     faceflag = p.faceflag;
 }
예제 #5
0
        public virtual VsElement Project(Projector proj)
        {
            VsPolygon3 ret = new VsPolygon3(this);

            if (ret.pol.NVertex() >= 3)
            {
                ret.pol = ret.pol.Project(proj);
            }
            return(ret);
        }
예제 #6
0
        public virtual VsElement Clip3DF(Clipper clip)
        {
            VsPolygon3 ret = new VsPolygon3(this);

            if (ret.pol.NVertex() >= 3)
            {
                ret.pol      = clip.Vs_polygon_clip_3df(ret.pol);
                ret.faceflag = ret.pol.BackfaceCheck();
            }
            return(ret);
        }
예제 #7
0
        public virtual VsElement Transform(Matrix44 mat)
        {
            VsPolygon3 ret = new VsPolygon3(this);

            if (ret.pol.NVertex() >= 3)
            {
                ret.pol      = ret.pol.Transform(mat);
                ret.faceflag = ret.pol.BackfaceCheck();
            }

            return(ret);
        }
예제 #8
0
        public static VsPolygon3 RegularPolygonM(int n, Material mate)
        {
            double[] x          = new double[n];
            double[] y          = new double[n];
            double[] z          = new double[n];
            double   angleStep  = 360.0D / n;
            double   startAngle = 270.0D - angleStep / 2.0D;

            for (int i = 0; i < n; i++)
            {
                double angle = startAngle + angleStep * i;
                if (angle > 360.0D)
                {
                    angle -= 360.0D;
                }
                x[i] = (System.Math.Cos(MathTool.DegToRad(angle)) / 2.0D);
                y[i] = (System.Math.Sin(MathTool.DegToRad(angle)) / 2.0D);
                z[i] = 0.0D;
            }

            VsPolygon3 ret = new VsPolygon3(n, x, y, z, mate);

            return(ret);
        }
예제 #9
0
        public static VsObject QubeM(Material mate)
        {
            VsObject   ret = new VsObject();
            VsPolygon3 a   = SquareM(mate);
            Matrix44   m   = new Matrix44();

            m.SetTMat(0.0D, 0.0D, -0.5D);
            a = (VsPolygon3)a.Transform(m);
            ret.Add(a);
            m.SetRyMat(MathTool.DegToRad(180.0D));
            ret.Add(a.Transform(m));

            m.SetRyMat(MathTool.DegToRad(90.0D));
            ret.Add(a.Transform(m));
            m.SetRyMat(MathTool.DegToRad(-90.0D));
            ret.Add(a.Transform(m));

            m.SetRxMat(MathTool.DegToRad(90.0D));
            ret.Add(a.Transform(m));
            m.SetRxMat(MathTool.DegToRad(-90.0D));
            ret.Add(a.Transform(m));

            return(ret);
        }