From: Elias Cohenca Date: Sat, 17 May 2025 09:00:40 +0000 (+0300) Subject: Data Exchange, GLTF - Change export line type to LINE_STRIP #535 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=b9629dba1c7253640f7714169697b50efb9063d9;p=occt.git Data Exchange, GLTF - Change export line type to LINE_STRIP #535 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 --- diff --git a/src/RWGltf/RWGltf_CafWriter.cxx b/src/RWGltf/RWGltf_CafWriter.cxx index d64e459dd6..d2cff43a66 100644 --- a/src/RWGltf/RWGltf_CafWriter.cxx +++ b/src/RWGltf/RWGltf_CafWriter.cxx @@ -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); diff --git a/src/RWGltf/RWGltf_GltfJsonParser.cxx b/src/RWGltf/RWGltf_GltfJsonParser.cxx index 292cadbd48..803c2c3895 100644 --- a/src/RWGltf/RWGltf_GltfJsonParser.cxx +++ b/src/RWGltf/RWGltf_GltfJsonParser.cxx @@ -1783,7 +1783,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"); @@ -1954,7 +1954,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) { @@ -1989,7 +1990,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()); } diff --git a/src/RWGltf/RWGltf_TriangulationReader.cxx b/src/RWGltf/RWGltf_TriangulationReader.cxx index 445e315b66..3a3d4d4254 100644 --- a/src/RWGltf/RWGltf_TriangulationReader.cxx +++ b/src/RWGltf/RWGltf_TriangulationReader.cxx @@ -566,6 +566,7 @@ bool RWGltf_TriangulationReader::readBuffer( 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