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); }
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); }
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); }
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; }
public virtual VsElement Project(Projector proj) { VsPolygon3 ret = new VsPolygon3(this); if (ret.pol.NVertex() >= 3) { ret.pol = ret.pol.Project(proj); } return(ret); }
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); }
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); }
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); }
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); }