Beispiel #1
0
        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);
        }
Beispiel #2
0
        public CadVertex Restore()
        {
            CadVertex v = CadVertex.Create(x, y, z);

            v.Flag = Flag;

            return(v);
        }
Beispiel #3
0
        public CadVertex Restore()
        {
            CadVertex v = CadVertex.Create(P.X, P.Y, P.Z);

            v.Flag = Flag;

            return(v);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        // 単位立方体作成
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
 public CadVertex CreateVertex(double x, double y, double z)
 {
     return(CadVertex.Create(x, y, z));
 }