Esempio n. 1
0
        public void ModelAdd(
            Vector3[] Vert, Vector3[] Norm)
        {
            Plane3D Face = new Plane3D();

            Face.Color      = new Vector4(fColor);
            Face.InnerDelta = InnerDelta;
            Face.InnerN     = InnerN;
            Face.Tp         = PlaneType;
            for (int i = 0; i < 3; ++i)
            {
                Face.Vertex[i]          = new Vector3(Vert[i]);
                Face.Normals[i]         = new Vector3(Norm[i]);
                Face.PerVertexLightning = true;
            }

            try
            {
                Face.CalcNormal();
                //     Log(Face.Tp.ToString());
                CurrentFigure.Faces.Add(Face);
            }
            catch (Exception e)
            {
                Log(e.Message);
            }
        }
Esempio n. 2
0
        public void ApplyTransform(Scene3D s)
        {
            TransformedFaces.Clear();
            MyAABB = new AABB();

            Matrix TrfM = TransformToMatrix();

            Figure3D ParrentF = s.Figs.Find(f => f.ID == this.ParrentID);
            Matrix   ParrentM = ParrentF != null?ParrentF.GetTrasnformRecursive(s, 0) : null;

            foreach (Plane3D F in Faces)
            {
                Plane3D newF = new Plane3D(F);
                for (int i = 0; i < 3; ++i)
                {
                    if (ParrentF != null)
                    {
                        newF.Vertex[i] = newF.Vertex[i].MultMatrix(ParrentM);
                    }
                    newF.Vertex[i] = newF.Vertex[i].MultMatrix(TrfM);
                    MyAABB.Extend(newF.Vertex[i]);
                }
                newF.ID = ID;
                newF.CalcNormal();
                TransformedFaces.Add(newF);
            }
        }
Esempio n. 3
0
        public Tube3D UniversalSplit(Vector3[] Points)
        {
            Tube3D t = new Tube3D(this);



            Plane3D UpperPlane = new Plane3D(Rays[0].End, Rays[1].End, Rays[2].End, false);

            try
            {
                UpperPlane.CalcNormal();
            }
            catch
            {
                return(null);
            }

            Plane3D LowerPlane = new Plane3D(Rays[0].Begin, Rays[1].Begin, Rays[2].Begin, false);

            for (int i = 0; i < 3; ++i)
            {
                double u, v, n;
                UpperPlane.GetUV(Points[i], out u, out v, out n);
                t.Rays[i] = new Ray3D(LowerPlane.UVToXYZ(u, v), Points[i], t.Rays[i]);
            }
            return(t);
        }
Esempio n. 4
0
        public void Add(
            double x1, double y1, double z1,
            double x2, double y2, double z2,
            double x3, double y3, double z3)
        {
            Plane3D Face = new Plane3D();

            Face.Color      = new Vector4(fColor);
            Face.InnerDelta = InnerDelta;
            Face.InnerN     = InnerN;
            Face.Tp         = PlaneType;
            Face.Vertex[0]  = new Vector3(x1, y1, z1);
            Face.Vertex[1]  = new Vector3(x2, y2, z2);
            Face.Vertex[2]  = new Vector3(x3, y3, z3);
            try
            {
                Face.CalcNormal();
                CurrentFigure.Faces.Add(Face);
            }
            catch (Exception e)
            {
                Log(e.Message);
            }
        }