Example #1
0
        public void RecomputeNormal()
        {
            RHVector3 d1 = vertices[1].pos.Subtract(vertices[0].pos);
            RHVector3 d2 = vertices[2].pos.Subtract(vertices[1].pos);

            normal = d1.CrossProduct(d2);
            normal.NormalizeSafe();
        }
Example #2
0
        public double alphaBeta; // Sum of dihedral angles to a virtual shared triangle

        public TopoEdgePair(TopoEdge _edgeA, TopoEdge _edgeB)
        {
            edgeA = _edgeA;
            edgeB = _edgeB;
            RHVector3 sharedPoint = null;
            RHVector3 p1 = null, p2 = null;

            if (edgeA.v1 == edgeB.v1)
            {
                sharedPoint = edgeA.v1.pos;
                p1          = edgeA.v2.pos;
                p2          = edgeB.v2.pos;
            }
            else if (edgeA.v1 == edgeB.v2)
            {
                sharedPoint = edgeA.v1.pos;
                p1          = edgeA.v2.pos;
                p2          = edgeB.v1.pos;
            }
            else if (edgeA.v2 == edgeB.v1)
            {
                sharedPoint = edgeA.v1.pos;
                p1          = edgeA.v1.pos;
                p2          = edgeB.v2.pos;
            }
            else if (edgeA.v2 == edgeB.v2)
            {
                sharedPoint = edgeA.v2.pos;
                p1          = edgeA.v1.pos;
                p2          = edgeB.v1.pos;
            }
            RHVector3 d1     = p1.Subtract(sharedPoint);
            RHVector3 d2     = p2.Subtract(sharedPoint);
            RHVector3 normal = d1.CrossProduct(d2);

            normal.NormalizeSafe();
            alphaBeta = normal.AngleForNormalizedVectors(edgeA.faces.First.Value.normal) + normal.AngleForNormalizedVectors(edgeB.faces.First.Value.normal);
            if (alphaBeta > Math.PI) // normal was wrong direction
            {
                alphaBeta = 2 * Math.PI - alphaBeta;
            }
        }
Example #3
0
 public void importSTL(string filename)
 {
     StartAction("L_LOADING...");
     clear();
     try
     {
         FileStream f = File.OpenRead(filename);
         byte[] header = new byte[80];
         ReadArray(f, header);
         /*   if (header[0] == 's' && header[1] == 'o' && header[2] == 'l' && header[3] == 'i' && header[4] == 'd')
            {
                f.Close();
                LoadText(file);
            }
            else
            {*/
         BinaryReader r = new BinaryReader(f);
         int nTri = r.ReadInt32();
         if (f.Length != 84 + nTri * 50)
         {
             f.Close();
             importSTLAscii(filename);
         }
         else
         {
             for (int i = 0; i < nTri; i++)
             {
                 Progress((double)i / nTri);
                 if (i % 2000 == 0)
                 {
                     Application.DoEvents();
                     if(IsActionStopped()) return;
                 }
                 RHVector3 normal = new RHVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());
                 RHVector3 p1 = new RHVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());
                 RHVector3 p2 = new RHVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());
                 RHVector3 p3 = new RHVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());
                 normal.NormalizeSafe();
                 addTriangle(p1, p2, p3, normal);
                 r.ReadUInt16();
             }
             r.Close();
             f.Close();
         }
     }
     catch (Exception e)
     {
         MessageBox.Show(e.ToString(), "Error reading STL file", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
Example #4
0
 public TopoPlane(RHVector3 _normal, RHVector3 pointOnPlane)
 {
     normal = new RHVector3(_normal);
     normal.NormalizeSafe();
     d = pointOnPlane.ScalarProduct(normal);
 }
Example #5
0
 public TopoPlane(RHVector3 _normal, RHVector3 pointOnPlane)
 {
     normal = new RHVector3(_normal);
     normal.NormalizeSafe();
     d = pointOnPlane.ScalarProduct(normal);
 }