0025279: OCCT fails to read VRML file created by OCCT
[occt.git] / src / VrmlConverter / VrmlConverter_WFDeflectionShape.cxx
old mode 100755 (executable)
new mode 100644 (file)
index 5cb7d4e..4b1f684
@@ -1,19 +1,15 @@
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
 //
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
+// This file is part of Open CASCADE Technology software library.
 //
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
 //
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
 
 #include <VrmlConverter_WFDeflectionShape.ixx>
 #include <Bnd_Box.hxx>
@@ -34,7 +30,7 @@
 #include <Vrml_Material.hxx>
 #include <Vrml_PointSet.hxx>
 #include <Precision.hxx>
-
+#include <Poly_PolygonOnTriangulation.hxx>
 
 //=========================================================================
 // function: Add
@@ -75,8 +71,8 @@ void VrmlConverter_WFDeflectionShape::Add( Standard_OStream&                   a
       {
        theRequestedDeflection = aDrawer->MaximalChordialDeviation(); 
       }
-//==
-    if (aDrawer->UIsoAspect()->Number() != 0 ||
+//== Is not used to reach the same wireframe representation with VRML#2.0
+    /*if (aDrawer->UIsoAspect()->Number() != 0 ||
        aDrawer->VIsoAspect()->Number() != 0 ) {
 
       BRepAdaptor_Surface S;
@@ -146,7 +142,7 @@ void VrmlConverter_WFDeflectionShape::Add( Standard_OStream&                   a
        }
       }
     }
-  }
+  }*/
 
 //====
     Standard_Integer qnt=0;
@@ -155,6 +151,10 @@ void VrmlConverter_WFDeflectionShape::Add( Standard_OStream&                   a
        qnt++;
       }
 
+  Handle(Poly_PolygonOnTriangulation) aPT;
+  Handle(Poly_Triangulation) aT;
+  TopLoc_Location aL;
+
 //   cout << "Quantity of Curves  = " << qnt << endl;
 
 // Wire (without any neighbour)
@@ -172,7 +172,11 @@ void VrmlConverter_WFDeflectionShape::Add( Standard_OStream&                   a
            if (Tool.Neighbours() == 0) {
              if (Tool.HasCurve()) {
                BRepAdaptor_Curve C(Tool.GetCurve());
-               VrmlConverter_DeflectionCurve::Add(anOStream, C, theRequestedDeflection, aDrawer);
+    BRep_Tool::PolygonOnTriangulation(Tool.GetCurve(), aPT, aT, aL);
+    if (!aPT.IsNull() && !aT.IsNull() && aPT->HasParameters())
+      VrmlConverter_DeflectionCurve::Add(anOStream, C, aPT->Parameters(), aPT->NbNodes(), aDrawer);
+    else
+      VrmlConverter_DeflectionCurve::Add(anOStream, C, theRequestedDeflection, aDrawer);
              }
            }
          }
@@ -195,7 +199,11 @@ void VrmlConverter_WFDeflectionShape::Add( Standard_OStream&                   a
            if (Tool.Neighbours() == 1) {
              if (Tool.HasCurve()) {
                BRepAdaptor_Curve C(Tool.GetCurve());
-               VrmlConverter_DeflectionCurve::Add(anOStream, C, theRequestedDeflection, aDrawer);
+    BRep_Tool::PolygonOnTriangulation(Tool.GetCurve(), aPT, aT, aL);
+    if (!aPT.IsNull() && !aT.IsNull() && aPT->HasParameters())
+      VrmlConverter_DeflectionCurve::Add(anOStream, C, aPT->Parameters(), aPT->NbNodes(), aDrawer);
+    else
+      VrmlConverter_DeflectionCurve::Add(anOStream, C, theRequestedDeflection, aDrawer);
              }
            }
          }
@@ -218,7 +226,11 @@ void VrmlConverter_WFDeflectionShape::Add( Standard_OStream&                   a
          if (Tool.Neighbours() >= 2) {
            if (Tool.HasCurve()) {
              BRepAdaptor_Curve C(Tool.GetCurve());
-             VrmlConverter_DeflectionCurve::Add(anOStream, C, theRequestedDeflection, aDrawer);
+        BRep_Tool::PolygonOnTriangulation(Tool.GetCurve(), aPT, aT, aL);
+        if (!aPT.IsNull() && !aT.IsNull() && aPT->HasParameters())
+          VrmlConverter_DeflectionCurve::Add(anOStream, C, aPT->Parameters(), aPT->NbNodes(), aDrawer);
+        else
+          VrmlConverter_DeflectionCurve::Add(anOStream, C, theRequestedDeflection, aDrawer);
            }
          }
        }