]> OCCT Git - occt.git/commitdiff
Data Exchange, GLTF - Change export line type to LINE_STRIP #535
authorElias Cohenca <elias@bananaz.ai>
Sat, 17 May 2025 09:00:40 +0000 (12:00 +0300)
committerGitHub <noreply@github.com>
Sat, 17 May 2025 09:00:40 +0000 (10:00 +0100)
GLTF exporter mark edges as a LINE, which is 2 connected points.
OCCT polylines is mostly line strip structure.
Updated GLTF reader to handle new type of lines

src/DataExchange/TKDEGLTF/RWGltf/RWGltf_CafWriter.cxx
src/DataExchange/TKDEGLTF/RWGltf/RWGltf_GltfJsonParser.cxx
src/DataExchange/TKDEGLTF/RWGltf/RWGltf_TriangulationReader.cxx

index d64e459dd6141e51d7acd182f2b117187322938c..d2cff43a6689cd541feeebcb0143b2a90ccdd4dc 100644 (file)
@@ -2030,7 +2030,7 @@ void RWGltf_CafWriter::writePrimArray(const RWGltf_GltfFace&         theGltfFace
     switch (theGltfFace.Shape.ShapeType())
     {
       case TopAbs_EDGE:
-        myWriter->Int(RWGltf_GltfPrimitiveMode_Lines);
+        myWriter->Int(RWGltf_GltfPrimitiveMode_LineStrip);
         break;
       case TopAbs_VERTEX:
         myWriter->Int(RWGltf_GltfPrimitiveMode_Points);
index e517be7bf546cbb726a2585183c8c4a37a559e45..922ac6d27f84077d621dc037a0ecc68532731fc2 100644 (file)
@@ -1808,7 +1808,7 @@ bool RWGltf_GltfJsonParser::gltfParsePrimArray(TopoDS_Shape&                  th
     }
   }
   if (aMode != RWGltf_GltfPrimitiveMode_Triangles && aMode != RWGltf_GltfPrimitiveMode_Lines
-      && aMode != RWGltf_GltfPrimitiveMode_Points)
+      && aMode != RWGltf_GltfPrimitiveMode_LineStrip && aMode != RWGltf_GltfPrimitiveMode_Points)
   {
     Message::SendWarning(TCollection_AsciiString() + "Primitive array within Mesh '" + theMeshId
                          + "' skipped due to unsupported mode");
@@ -1976,7 +1976,8 @@ bool RWGltf_GltfJsonParser::gltfParsePrimArray(TopoDS_Shape&                  th
         aShape = aVertices;
         break;
       }
-      case RWGltf_GltfPrimitiveMode_Lines: {
+      case RWGltf_GltfPrimitiveMode_Lines:
+      case RWGltf_GltfPrimitiveMode_LineStrip: {
         TColgp_Array1OfPnt aNodes(1, aMeshData->NbEdges());
         for (Standard_Integer anEdgeIdx = 1; anEdgeIdx <= aMeshData->NbEdges(); ++anEdgeIdx)
         {
@@ -2011,7 +2012,7 @@ bool RWGltf_GltfJsonParser::gltfParsePrimArray(TopoDS_Shape&                  th
       aShapeAttribs.RawName = theMeshName;
 
       // assign material and not color
-      if (aMode == RWGltf_GltfPrimitiveMode_Lines)
+      if (aMode == RWGltf_GltfPrimitiveMode_Lines || aMode == RWGltf_GltfPrimitiveMode_LineStrip)
       {
         aShapeAttribs.Style.SetColorCurv(aMeshData->BaseColor().GetRGB());
       }
index 77dfdf4a3a95a130b84ae508e0dcbcc8c88da1c1..3542a2637513d0e8e80cc3382b893ffd6f72166d 100644 (file)
@@ -579,6 +579,7 @@ bool RWGltf_TriangulationReader::ReadStream(
   const TCollection_AsciiString& aName     = theSourceMesh->Id();
   const RWGltf_GltfPrimitiveMode aPrimMode = theSourceMesh->PrimitiveMode();
   if (aPrimMode != RWGltf_GltfPrimitiveMode_Triangles && aPrimMode != RWGltf_GltfPrimitiveMode_Lines
+      && aPrimMode != RWGltf_GltfPrimitiveMode_LineStrip
       && aPrimMode != RWGltf_GltfPrimitiveMode_Points)
   {
     Message::SendWarning(TCollection_AsciiString("Buffer '") + aName