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); } }
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); } }
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); }
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); } }