From b29788cae02e0be70e353648a6eeb89c5a281bf5 Mon Sep 17 00:00:00 2001 From: Elias Cohenca Date: Sat, 17 May 2025 12:00:40 +0300 Subject: [PATCH] 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 --- src/DataExchange/TKDEGLTF/RWGltf/RWGltf_CafWriter.cxx | 2 +- src/DataExchange/TKDEGLTF/RWGltf/RWGltf_GltfJsonParser.cxx | 7 ++++--- .../TKDEGLTF/RWGltf/RWGltf_TriangulationReader.cxx | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/DataExchange/TKDEGLTF/RWGltf/RWGltf_CafWriter.cxx b/src/DataExchange/TKDEGLTF/RWGltf/RWGltf_CafWriter.cxx index d64e459dd6..d2cff43a66 100644 --- a/src/DataExchange/TKDEGLTF/RWGltf/RWGltf_CafWriter.cxx +++ b/src/DataExchange/TKDEGLTF/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/DataExchange/TKDEGLTF/RWGltf/RWGltf_GltfJsonParser.cxx b/src/DataExchange/TKDEGLTF/RWGltf/RWGltf_GltfJsonParser.cxx index e517be7bf5..922ac6d27f 100644 --- a/src/DataExchange/TKDEGLTF/RWGltf/RWGltf_GltfJsonParser.cxx +++ b/src/DataExchange/TKDEGLTF/RWGltf/RWGltf_GltfJsonParser.cxx @@ -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()); } diff --git a/src/DataExchange/TKDEGLTF/RWGltf/RWGltf_TriangulationReader.cxx b/src/DataExchange/TKDEGLTF/RWGltf/RWGltf_TriangulationReader.cxx index 77dfdf4a3a..3542a26375 100644 --- a/src/DataExchange/TKDEGLTF/RWGltf/RWGltf_TriangulationReader.cxx +++ b/src/DataExchange/TKDEGLTF/RWGltf/RWGltf_TriangulationReader.cxx @@ -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