public static CadMesh CreateSphere(Vector3d pos, double r, int slices1, int slices2) { VertexList vl = new VertexList(slices2); double d = Math.PI / slices2; for (int i = 0; i < slices2; i++) { double a = i * d; double x = Math.Sin(a) * r; double y = Math.Cos(a) * r; vl.Add(CadVertex.Create(x, y, 0)); } vl.Add(CadVertex.Create(0, -r, 0)); CadMesh mesh = CreateRotatingBody( slices1, Vector3d.Zero, Vector3d.UnitY, vl, false, false, FaceType.TRIANGLE); for (int i = 0; i < mesh.VertexStore.Count; i++) { mesh.VertexStore.Ref(i).vector += pos; } return(mesh); }
public CadVertex Restore() { CadVertex v = CadVertex.Create(x, y, z); v.Flag = Flag; return(v); }
public CadVertex Restore() { CadVertex v = CadVertex.Create(P.X, P.Y, P.Z); v.Flag = Flag; return(v); }
public static CadMesh CreateUnitCube(Vector3d wv, Vector3d hv, FaceType faceType = FaceType.TRIANGLE) { Vector3d tv = CadMath.Normal(wv, hv); Vector3d wv2 = wv / 2; Vector3d hv2 = hv / 2; Vector3d tv2 = tv / 2; CadMesh cm = new CadMesh(8, 12); cm.VertexStore.Add(CadVertex.Create(wv2 + hv2 + tv2)); cm.VertexStore.Add(CadVertex.Create(-wv2 + hv2 + tv2)); cm.VertexStore.Add(CadVertex.Create(-wv2 - hv2 + tv2)); cm.VertexStore.Add(CadVertex.Create(wv2 - hv2 + tv2)); cm.VertexStore.Add(CadVertex.Create(wv2 + hv2 - tv2)); cm.VertexStore.Add(CadVertex.Create(-wv2 + hv2 - tv2)); cm.VertexStore.Add(CadVertex.Create(-wv2 - hv2 - tv2)); cm.VertexStore.Add(CadVertex.Create(wv2 - hv2 - tv2)); if (faceType == FaceType.QUADRANGLE) { cm.FaceStore.Add(new CadFace(0, 1, 2, 3)); cm.FaceStore.Add(new CadFace(7, 6, 5, 4)); cm.FaceStore.Add(new CadFace(0, 4, 5, 1)); cm.FaceStore.Add(new CadFace(1, 5, 6, 2)); cm.FaceStore.Add(new CadFace(2, 6, 7, 3)); cm.FaceStore.Add(new CadFace(3, 7, 4, 0)); } else { cm.FaceStore.Add(new CadFace(0, 1, 2)); cm.FaceStore.Add(new CadFace(2, 3, 0)); cm.FaceStore.Add(new CadFace(7, 6, 5)); cm.FaceStore.Add(new CadFace(5, 4, 7)); cm.FaceStore.Add(new CadFace(0, 4, 5)); cm.FaceStore.Add(new CadFace(5, 1, 0)); cm.FaceStore.Add(new CadFace(1, 5, 6)); cm.FaceStore.Add(new CadFace(6, 2, 1)); cm.FaceStore.Add(new CadFace(2, 6, 7)); cm.FaceStore.Add(new CadFace(7, 3, 2)); cm.FaceStore.Add(new CadFace(3, 7, 4)); cm.FaceStore.Add(new CadFace(4, 0, 3)); } return(cm); }
// 単位立方体作成 public static CadMesh CreateUnitCube(FaceType faceType = FaceType.TRIANGLE) { CadMesh cm = new CadMesh(8, 12); cm.VertexStore.Add(CadVertex.Create(+0.5, +0.5, +0.5)); cm.VertexStore.Add(CadVertex.Create(-0.5, +0.5, +0.5)); cm.VertexStore.Add(CadVertex.Create(-0.5, -0.5, +0.5)); cm.VertexStore.Add(CadVertex.Create(+0.5, -0.5, +0.5)); cm.VertexStore.Add(CadVertex.Create(+0.5, +0.5, -0.5)); cm.VertexStore.Add(CadVertex.Create(-0.5, +0.5, -0.5)); cm.VertexStore.Add(CadVertex.Create(-0.5, -0.5, -0.5)); cm.VertexStore.Add(CadVertex.Create(+0.5, -0.5, -0.5)); if (faceType == FaceType.QUADRANGLE) { cm.FaceStore.Add(new CadFace(0, 1, 2, 3)); cm.FaceStore.Add(new CadFace(7, 6, 5, 4)); cm.FaceStore.Add(new CadFace(0, 4, 5, 1)); cm.FaceStore.Add(new CadFace(1, 5, 6, 2)); cm.FaceStore.Add(new CadFace(2, 6, 7, 3)); cm.FaceStore.Add(new CadFace(3, 7, 4, 0)); } else { cm.FaceStore.Add(new CadFace(0, 1, 2)); cm.FaceStore.Add(new CadFace(2, 3, 0)); cm.FaceStore.Add(new CadFace(7, 6, 5)); cm.FaceStore.Add(new CadFace(5, 4, 7)); cm.FaceStore.Add(new CadFace(0, 4, 5)); cm.FaceStore.Add(new CadFace(5, 1, 0)); cm.FaceStore.Add(new CadFace(1, 5, 6)); cm.FaceStore.Add(new CadFace(6, 2, 1)); cm.FaceStore.Add(new CadFace(2, 6, 7)); cm.FaceStore.Add(new CadFace(7, 3, 2)); cm.FaceStore.Add(new CadFace(3, 7, 4)); cm.FaceStore.Add(new CadFace(4, 0, 3)); } return(cm); }
public static ArrowHead Create(ArrowTypes type, ArrowPos pos, double len, double width) { ArrowHead a = default(ArrowHead); double w2 = width / 2; if (pos == ArrowPos.END) { if (type == ArrowTypes.CROSS) { a.p0 = CadVertex.Create(0, 0, 0); a.p1 = CadVertex.Create(-len, w2, w2); a.p2 = CadVertex.Create(-len, w2, -w2); a.p3 = CadVertex.Create(-len, -w2, -w2); a.p4 = CadVertex.Create(-len, -w2, w2); } else if (type == ArrowTypes.PLUS) { a.p0 = CadVertex.Create(0, 0, 0); a.p1 = CadVertex.Create(-len, w2, 0); a.p2 = CadVertex.Create(-len, 0, -w2); a.p3 = CadVertex.Create(-len, -w2, 0); a.p4 = CadVertex.Create(-len, 0, w2); } } else { if (type == ArrowTypes.CROSS) { a.p0 = CadVertex.Create(0, 0, 0); a.p1 = CadVertex.Create(len, w2, w2); a.p2 = CadVertex.Create(len, w2, -w2); a.p3 = CadVertex.Create(len, -w2, -w2); a.p4 = CadVertex.Create(len, -w2, w2); } else if (type == ArrowTypes.PLUS) { a.p0 = CadVertex.Create(0, 0, 0); a.p1 = CadVertex.Create(len, w2, 0); a.p2 = CadVertex.Create(len, 0, -w2); a.p3 = CadVertex.Create(len, -w2, 0); a.p4 = CadVertex.Create(len, 0, w2); } } return(a); }
public CadMesh Load(string fname, double scale) { TotalPointCount = 0; TotalFaceCount = 0; CadMesh mesh = new CadMesh(10, 10); StreamReader reader = new StreamReader(fname); string L1; string L2; DxfState state = DxfState.STATE_NONE; int valCnt = 0; double[] val = new double[3]; int code; VertexList pointList = new VertexList(); while (!reader.EndOfStream) { L1 = reader.ReadLine(); L2 = reader.ReadLine(); code = Int32.Parse(L1); L2 = L2.Trim(); if (code == 0) { if (L2 == "3DFACE") { state = DxfState.STATE_3DFACE; valCnt = 0; } if (pointList.Count > 0) { AddFace(mesh, pointList); TotalFaceCount++; pointList.Clear(); } if (valCnt != 0) { state = 0; } } if (state == DxfState.STATE_3DFACE) { if (code < 10) { continue; } val[valCnt] = Double.Parse(L2) * scale; valCnt++; if (valCnt >= 3) { pointList.Add(CadVertex.Create(val[2], val[1], val[0])); valCnt = 0; TotalPointCount++; } continue; } } return(mesh); }
public CadVertex CreateVertex(double x, double y, double z) { return(CadVertex.Create(x, y, z)); }