1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0033484: Data Exchange, Step Import - Pretessellated geometry is translated incompletely

Added proper translation for TessellatedCurveSet and ComplexTriangulatedSurfaceSet.
This commit is contained in:
anv
2023-09-15 06:15:34 +01:00
parent 06f2625c35
commit 2b5ee7c791
9 changed files with 291 additions and 98 deletions

View File

@@ -27,6 +27,7 @@
#include <Standard_Real.hxx>
#include <TColStd_HArray1OfInteger.hxx>
#include <TColStd_HArray2OfInteger.hxx>
#include <TColStd_HArray1OfTransient.hxx>
//=======================================================================
//function : RWStepVisual_RWComplexTriangulatedSurfaceSet
@@ -106,15 +107,16 @@ void RWStepVisual_RWComplexTriangulatedSurfaceSet::ReadStep(
}
}
Handle(TColStd_HArray2OfInteger) aTriangleStrips;
Handle(TColStd_HArray1OfTransient) aTriangleStrips;
Standard_Integer sub6 = 0;
if (theData->ReadSubList(theNum, 6, "triangle_strips", theCheck, sub6))
{
Standard_Integer nb0 = theData->NbParams(sub6);
Standard_Integer nbj0 = theData->NbParams(theData->ParamNumber(sub6,1));
aTriangleStrips = new TColStd_HArray2OfInteger(1, nb0, 1, nbj0);
aTriangleStrips = new TColStd_HArray1OfTransient(1, nb0);
for (Standard_Integer i0 = 1; i0 <= nb0; i0++)
{
Standard_Integer nbj0 = theData->NbParams(theData->ParamNumber(sub6, i0));
Handle(TColStd_HArray1OfInteger) aSingleTriangleStrip = new TColStd_HArray1OfInteger(1, nbj0);
Standard_Integer subj6 = 0;
if ( theData->ReadSubList (sub6, i0, "sub-part(triangle_strips)", theCheck, subj6) ) {
Standard_Integer num4 = subj6;
@@ -122,21 +124,23 @@ void RWStepVisual_RWComplexTriangulatedSurfaceSet::ReadStep(
{
Standard_Integer anIt0;
theData->ReadInteger(num4, j0, "integer", theCheck, anIt0);
aTriangleStrips->SetValue(i0,j0, anIt0);
aSingleTriangleStrip->SetValue(j0, anIt0);
}
aTriangleStrips->SetValue(i0, aSingleTriangleStrip);
}
}
}
Handle(TColStd_HArray2OfInteger) aTriangleFans;
Handle(TColStd_HArray1OfTransient) aTriangleFans;
Standard_Integer sub7 = 0;
if (theData->ReadSubList(theNum, 7, "triangle_fans", theCheck, sub7))
{
Standard_Integer nb0 = theData->NbParams(sub7);
Standard_Integer nbj0 = theData->NbParams(theData->ParamNumber(sub7,1));
aTriangleFans = new TColStd_HArray2OfInteger(1, nb0, 1, nbj0);
aTriangleFans = new TColStd_HArray1OfTransient(1, nb0);
for (Standard_Integer i0 = 1; i0 <= nb0; i0++)
{
Standard_Integer nbj0 = theData->NbParams(theData->ParamNumber(sub7, i0));
Handle(TColStd_HArray1OfInteger) aSingleTriangleFan = new TColStd_HArray1OfInteger(1, nbj0);
Standard_Integer subj7 = 0;
if ( theData->ReadSubList (sub7, i0, "sub-part(triangle_fans)", theCheck, subj7) ) {
Standard_Integer num4 = subj7;
@@ -144,8 +148,9 @@ void RWStepVisual_RWComplexTriangulatedSurfaceSet::ReadStep(
{
Standard_Integer anIt0;
theData->ReadInteger(num4, j0, "integer", theCheck, anIt0);
aTriangleFans->SetValue(i0,j0, anIt0);
aSingleTriangleFan->SetValue(j0, anIt0);
}
aTriangleFans->SetValue(i0, aSingleTriangleFan);
}
}
}
@@ -199,13 +204,14 @@ void RWStepVisual_RWComplexTriangulatedSurfaceSet::WriteStep(
theSW.CloseSub();
theSW.OpenSub();
for (Standard_Integer i5 = 1; i5 <= theEnt->TriangleStrips()->RowLength(); i5++)
for (Standard_Integer i5 = 1; i5 <= theEnt->NbTriangleStrips(); i5++)
{
theSW.NewLine(Standard_False);
theSW.OpenSub();
for (Standard_Integer j5 = 1; j5 <= theEnt->TriangleStrips()->ColLength(); j5++)
Handle(TColStd_HArray1OfInteger) aTriangleStrip = Handle(TColStd_HArray1OfInteger)::DownCast(theEnt->TriangleStrips()->Value(i5));
for (Standard_Integer j5 = 1; j5 <= aTriangleStrip->Length(); j5++)
{
Standard_Integer Var0 = theEnt->TriangleStrips()->Value(i5,j5);
Standard_Integer Var0 = aTriangleStrip->Value(j5);
theSW.Send(Var0);
}
theSW.CloseSub();
@@ -213,13 +219,14 @@ void RWStepVisual_RWComplexTriangulatedSurfaceSet::WriteStep(
theSW.CloseSub();
theSW.OpenSub();
for (Standard_Integer i6 = 1; i6 <= theEnt->TriangleFans()->RowLength(); i6++)
for (Standard_Integer i6 = 1; i6 <= theEnt->NbTriangleFans(); i6++)
{
theSW.NewLine(Standard_False);
theSW.OpenSub();
for (Standard_Integer j6 = 1; j6 <= theEnt->TriangleFans()->ColLength(); j6++)
Handle(TColStd_HArray1OfInteger) aTriangleFan = Handle(TColStd_HArray1OfInteger)::DownCast(theEnt->TriangleFans()->Value(i6));
for (Standard_Integer j6 = 1; j6 <= aTriangleFan->Length(); j6++)
{
Standard_Integer Var0 = theEnt->TriangleFans()->Value(i6,j6);
Standard_Integer Var0 = aTriangleFan->Value(j6);
theSW.Send(Var0);
}
theSW.CloseSub();