From e1f5ac2c9b9e3d4e4a804871d09083f7a9a11955 Mon Sep 17 00:00:00 2001 From: dpasukhi Date: Mon, 31 Jan 2022 11:09:20 +0300 Subject: [PATCH] 0032731: Data Exchange, Step Import - Incorrect PMI text location Added new complex Entity for representation of PMI Added moving the presentation with new entity --- src/RWStepAP214/RWStepAP214_GeneralModule.cxx | 20 +++- .../RWStepAP214_ReadWriteModule.cxx | 59 ++++++++++- src/RWStepVisual/FILES | 4 + ..._RWRepositionedTessellatedGeometricSet.cxx | 99 +++++++++++++++++++ ..._RWRepositionedTessellatedGeometricSet.hxx | 50 ++++++++++ ...epVisual_RWRepositionedTessellatedItem.cxx | 58 +++++++++++ ...epVisual_RWRepositionedTessellatedItem.hxx | 46 +++++++++ src/STEPCAFControl/STEPCAFControl_Reader.cxx | 22 ++++- src/StepAP214/StepAP214_Protocol.cxx | 4 + src/StepVisual/FILES | 4 + ...al_RepositionedTessellatedGeometricSet.cxx | 30 ++++++ ...al_RepositionedTessellatedGeometricSet.hxx | 50 ++++++++++ ...StepVisual_RepositionedTessellatedItem.cxx | 29 ++++++ ...StepVisual_RepositionedTessellatedItem.hxx | 49 +++++++++ tests/bugs/step/bug32731 | 17 ++++ 15 files changed, 535 insertions(+), 6 deletions(-) create mode 100644 src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedGeometricSet.cxx create mode 100644 src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedGeometricSet.hxx create mode 100644 src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedItem.cxx create mode 100644 src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedItem.hxx create mode 100644 src/StepVisual/StepVisual_RepositionedTessellatedGeometricSet.cxx create mode 100644 src/StepVisual/StepVisual_RepositionedTessellatedGeometricSet.hxx create mode 100644 src/StepVisual/StepVisual_RepositionedTessellatedItem.cxx create mode 100644 src/StepVisual/StepVisual_RepositionedTessellatedItem.hxx create mode 100644 tests/bugs/step/bug32731 diff --git a/src/RWStepAP214/RWStepAP214_GeneralModule.cxx b/src/RWStepAP214/RWStepAP214_GeneralModule.cxx index cea13b4ee6..3fd6358580 100644 --- a/src/RWStepAP214/RWStepAP214_GeneralModule.cxx +++ b/src/RWStepAP214/RWStepAP214_GeneralModule.cxx @@ -529,6 +529,8 @@ #include #include #include +#include +#include #include #include #include @@ -1088,6 +1090,8 @@ #include #include #include +#include +#include #include #include #include @@ -5890,7 +5894,13 @@ void RWStepAP214_GeneralModule::FillSharedCase(const Standard_Integer CN, tool.Share(anent, iter); } break; - + case 802: + { + DeclareAndCast(StepVisual_RepositionedTessellatedGeometricSet, anEnt, ent); + RWStepVisual_RWRepositionedTessellatedGeometricSet aTool; + aTool.Share(anEnt, iter); + break; + } default : break; } } @@ -8146,6 +8156,12 @@ Standard_Boolean RWStepAP214_GeneralModule::NewVoid case 801: ent = new StepKinematics_MechanismStateRepresentation; break; + case 802: + ent = new StepVisual_RepositionedTessellatedGeometricSet; + break; + case 803: + ent = new StepVisual_RepositionedTessellatedItem; + break; default: return Standard_False; @@ -8826,6 +8842,8 @@ Standard_Integer RWStepAP214_GeneralModule::CategoryNumber case 798: return cataux; case 800: return catsh; case 801: return cataux; + case 802: return cataux; + case 803: return cataux; default : break; } return 0; diff --git a/src/RWStepAP214/RWStepAP214_ReadWriteModule.cxx b/src/RWStepAP214/RWStepAP214_ReadWriteModule.cxx index fbc05b8024..fd15b8f029 100644 --- a/src/RWStepAP214/RWStepAP214_ReadWriteModule.cxx +++ b/src/RWStepAP214/RWStepAP214_ReadWriteModule.cxx @@ -258,6 +258,8 @@ IMPLEMENT_STANDARD_RTTIEXT(RWStepAP214_ReadWriteModule,StepData_ReadWriteModule) #include #include #include +#include +#include #include #include #include @@ -654,6 +656,8 @@ IMPLEMENT_STANDARD_RTTIEXT(RWStepAP214_ReadWriteModule,StepData_ReadWriteModule) #include #include #include +#include +#include #include #include #include @@ -2205,6 +2209,8 @@ static TCollection_AsciiString Reco_AnnotationPlane("ANNOTATION_PLANE"); static TCollection_AsciiString Reco_TessellatedAnnotationOccurrence("TESSELLATED_ANNOTATION_OCCURRENCE"); static TCollection_AsciiString Reco_TessellatedGeometricSet("TESSELLATED_GEOMETRIC_SET"); static TCollection_AsciiString Reco_TessellatedCurveSet("TESSELLATED_CURVE_SET"); +static TCollection_AsciiString Reco_TessellatedItem("TESSELLATED_ITEM"); +static TCollection_AsciiString Reco_RepositionedTessellatedItem("REPOSITIONED_TESSELLATED_ITEM"); static TCollection_AsciiString Reco_CoordinatesList("COORDINATES_LIST"); static TCollection_AsciiString Reco_ConstructiveGeometryRepresentation("CONSTRUCTIVE_GEOMETRY_REPRESENTATION"); static TCollection_AsciiString Reco_ConstructiveGeometryRepresentationRelationship("CONSTRUCTIVE_GEOMETRY_REPRESENTATION_RELATIONSHIP"); @@ -3035,6 +3041,7 @@ RWStepAP214_ReadWriteModule::RWStepAP214_ReadWriteModule () typenums.Bind(Reco_LinearFlexibleLinkRepresentation, 798); typenums.Bind(Reco_KinematicPair, 799); typenums.Bind(Reco_MechanismStateRepresentation, 801); + typenums.Bind(Reco_RepositionedTessellatedItem, 803); // SHORT NAMES @@ -3827,13 +3834,22 @@ Standard_Integer RWStepAP214_ReadWriteModule::CaseStep types(5).IsEqual(StepType(624))))) { return 705; } - if ((types(1).IsEqual(StepType(4))) && + else if ((types(1).IsEqual(StepType(4))) && (types(2).IsEqual(StepType(7))) && (types(3).IsEqual(StepType(144))) && (types(4).IsEqual(StepType(247))) && - (types(5).IsEqual(StepType(270)))) { + (types(5).IsEqual(StepType(270)))) + { return 719; } + else if ((types(1).IsEqual(StepType(144))) && + (types(2).IsEqual(StepType(803))) && + (types(3).IsEqual(StepType(247))) && + (types(4).IsEqual(StepType(709))) && + (types(5).IsEqual(StepType(708)))) + { + return 802; + } } else if (NbComp == 4) { if ((types(1).IsEqual(StepType(161))) && @@ -4903,6 +4919,7 @@ const TCollection_AsciiString& RWStepAP214_ReadWriteModule::StepType case 704: return Reco_AnnotationPlane; case 707 : return Reco_TessellatedAnnotationOccurrence; + case 708 : return Reco_TessellatedItem; case 709 : return Reco_TessellatedGeometricSet; case 710 : return Reco_TessellatedCurveSet; @@ -4996,7 +5013,7 @@ const TCollection_AsciiString& RWStepAP214_ReadWriteModule::StepType case 798: return Reco_LinearFlexibleLinkRepresentation; case 799: return Reco_KinematicPair; case 801: return Reco_MechanismStateRepresentation; - + case 803: return Reco_RepositionedTessellatedItem; default : return PasReco; } } @@ -5327,6 +5344,13 @@ Standard_Boolean RWStepAP214_ReadWriteModule::ComplexType(const Standard_Integer types.Append(StepType(759)); types.Append(StepType(247)); break; + case 802: + types.Append(StepType(144)); + types.Append(StepType(803)); + types.Append(StepType(247)); + types.Append(StepType(709)); + types.Append(StepType(708)); + break; default: return Standard_False; } return Standard_True; @@ -10473,6 +10497,20 @@ void RWStepAP214_ReadWriteModule::ReadStep(const Standard_Integer CN, tool.ReadStep(data, num, ach, anent); } break; + case 802: + { + DeclareAndCast(StepVisual_RepositionedTessellatedGeometricSet, anEnt, ent); + RWStepVisual_RWRepositionedTessellatedGeometricSet aTool; + aTool.ReadStep(data, num, ach, anEnt); + break; + } + case 803: + { + DeclareAndCast(StepVisual_RepositionedTessellatedItem, anEnt, ent); + RWStepVisual_RWRepositionedTessellatedItem aTool; + aTool.ReadStep(data, num, ach, anEnt); + break; + } default: ach->AddFail("Type Mismatch when reading - Entity"); @@ -15896,7 +15934,20 @@ void RWStepAP214_ReadWriteModule::WriteStep(const Standard_Integer CN, tool.WriteStep(SW, anent); } break; - + case 802: + { + DeclareAndCast(StepVisual_RepositionedTessellatedGeometricSet, anEnt, ent); + RWStepVisual_RWRepositionedTessellatedGeometricSet aTool; + aTool.WriteStep(SW, anEnt); + break; + } + case 803: + { + DeclareAndCast(StepVisual_RepositionedTessellatedItem, anEnt, ent); + RWStepVisual_RWRepositionedTessellatedItem aTool; + aTool.WriteStep(SW, anEnt); + break; + } default: return; } diff --git a/src/RWStepVisual/FILES b/src/RWStepVisual/FILES index 739e8d7c9e..5c396ba9ae 100644 --- a/src/RWStepVisual/FILES +++ b/src/RWStepVisual/FILES @@ -106,6 +106,10 @@ RWStepVisual_RWPresentationView.cxx RWStepVisual_RWPresentationView.hxx RWStepVisual_RWPresentedItemRepresentation.cxx RWStepVisual_RWPresentedItemRepresentation.hxx +RWStepVisual_RWRepositionedTessellatedGeometricSet.cxx +RWStepVisual_RWRepositionedTessellatedGeometricSet.hxx +RWStepVisual_RWRepositionedTessellatedItem.cxx +RWStepVisual_RWRepositionedTessellatedItem.hxx RWStepVisual_RWStyledItem.cxx RWStepVisual_RWStyledItem.hxx RWStepVisual_RWSurfaceSideStyle.cxx diff --git a/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedGeometricSet.cxx b/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedGeometricSet.cxx new file mode 100644 index 0000000000..6f173e8a19 --- /dev/null +++ b/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedGeometricSet.cxx @@ -0,0 +1,99 @@ +// Copyright (c) 2022 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// 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. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//======================================================================= +//function : ReadStep +//purpose : +//======================================================================= +void RWStepVisual_RWRepositionedTessellatedGeometricSet::ReadStep + (const Handle(StepData_StepReaderData)& theData, + const Standard_Integer theNum, + Handle(Interface_Check)& theAch, + const Handle(StepVisual_RepositionedTessellatedGeometricSet)& theEnt) const +{ + Standard_Integer aNum = 0; + theData->NamedForComplex("REPOSITIONED_TESSELLATED_ITEM", theNum, aNum, theAch); + if (!theData->CheckNbParams(aNum, 1, theAch, "location")) + return; + Handle(StepGeom_Axis2Placement3d) aLocation; + theData->ReadEntity(aNum,1,"location",theAch,STANDARD_TYPE(StepGeom_Axis2Placement3d), aLocation); + + theData->NamedForComplex("REPRESENTATION_ITEM", theNum, aNum, theAch); + if (!theData->CheckNbParams(aNum, 1, theAch, "name")) + return; + Handle(TCollection_HAsciiString) aName; + theData->ReadString (aNum, 1, "name", theAch, aName); + + theData->NamedForComplex("TESSELLATED_GEOMETRIC_SET", theNum, aNum, theAch); + NCollection_Handle anItems; + Standard_Integer aNSub2; + if (theData->ReadSubList (aNum,1,"items",theAch,aNSub2)) { + Standard_Integer aNb2 = theData->NbParams(aNSub2); + anItems = new StepVisual_Array1OfTessellatedItem(1, aNb2); + for (Standard_Integer i2 = 1; i2 <= aNb2; i2 ++) { + Handle(StepVisual_TessellatedItem) anItem; + if (theData->ReadEntity (aNSub2,i2,"item",theAch,STANDARD_TYPE(StepVisual_TessellatedItem), anItem)) + anItems->SetValue(i2,anItem); + } + } + theEnt->Init(aName, anItems, aLocation); +} + +//======================================================================= +//function : WriteStep +//purpose : +//======================================================================= +void RWStepVisual_RWRepositionedTessellatedGeometricSet::WriteStep + (StepData_StepWriter& theSW, + const Handle(StepVisual_RepositionedTessellatedGeometricSet)& theEnt) const +{ + theSW.StartEntity("GEOMETRIC_REPRESENTATION_ITEM"); + theSW.StartEntity("REPOSITIONED_TESSELLATED_ITEM"); + theSW.Send(theEnt->Location()); + theSW.StartEntity("REPRESENTATION_ITEM"); + theSW.Send(theEnt->Name()); + theSW.StartEntity("TESSELLATED_GEOMETRIC_SET"); + theSW.OpenSub(); + for(StepVisual_Array1OfTessellatedItem::Iterator anIter(*theEnt->Items()); + anIter.More(); anIter.Next()) + { + theSW.Send(anIter.Value()); + } + theSW.CloseSub(); + theSW.StartEntity("TESSELLATED_ITEM"); +} + +//======================================================================= +//function : Share +//purpose : +//======================================================================= +void RWStepVisual_RWRepositionedTessellatedGeometricSet::Share(const Handle(StepVisual_RepositionedTessellatedGeometricSet)& theEnt, + Interface_EntityIterator& theIter) const +{ + // Own field : children + for (Standard_Integer i = 1; i <= theEnt->Items()->Length(); i++) + theIter.AddItem(theEnt->Items()->Value(i)); + theIter.AddItem(theEnt->Location()); +} diff --git a/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedGeometricSet.hxx b/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedGeometricSet.hxx new file mode 100644 index 0000000000..80b8ba04c2 --- /dev/null +++ b/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedGeometricSet.hxx @@ -0,0 +1,50 @@ +// Copyright (c) 2022 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// 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. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#ifndef _RWStepVisual_RWRepositionedTessellatedGeometricSet_HeaderFile +#define _RWStepVisual_RWRepositionedTessellatedGeometricSet_HeaderFile + +#include +#include + +class StepData_StepReaderData; +class Interface_Check; +class StepVisual_RepositionedTessellatedGeometricSet; +class StepData_StepWriter; +class Interface_EntityIterator; + +//! Read & Write tool for complex RepositionedTessellatedGeometricSet +class RWStepVisual_RWRepositionedTessellatedGeometricSet +{ +public: + + DEFINE_STANDARD_ALLOC + + //! Empty constructor + RWStepVisual_RWRepositionedTessellatedGeometricSet() {}; + + //! Reads RepositionedTessellatedGeometricSet + Standard_EXPORT void ReadStep (const Handle(StepData_StepReaderData)& theData, + const Standard_Integer theNum, + Handle(Interface_Check)& theAch, + const Handle(StepVisual_RepositionedTessellatedGeometricSet)& theEnt) const; + + //! Writes RepositionedTessellatedGeometricSet + Standard_EXPORT void WriteStep (StepData_StepWriter& theSW, + const Handle(StepVisual_RepositionedTessellatedGeometricSet)& theEnt) const; + + //! Fills data for graph (shared items) + Standard_EXPORT void Share (const Handle(StepVisual_RepositionedTessellatedGeometricSet)& theEnt, + Interface_EntityIterator& theIter) const; +}; +#endif // _RWStepVisual_RWRepositionedTessellatedGeometricSet_HeaderFile diff --git a/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedItem.cxx b/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedItem.cxx new file mode 100644 index 0000000000..f1e33ebba0 --- /dev/null +++ b/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedItem.cxx @@ -0,0 +1,58 @@ +// Copyright (c) 2022 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// 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. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +#include +#include +#include +#include +#include + +//======================================================================= +//function : ReadStep +//purpose : +//======================================================================= +void RWStepVisual_RWRepositionedTessellatedItem::ReadStep + (const Handle(StepData_StepReaderData)& theData, + const Standard_Integer theNum, + Handle(Interface_Check)& theAch, + const Handle(StepVisual_RepositionedTessellatedItem)& theEnt) const +{ + // --- Number of Parameter Control --- + if (!theData->CheckNbParams(theNum,2,theAch,"tessellated_item")) + return; + + // --- inherited field : name --- + Handle(TCollection_HAsciiString) aName; + theData->ReadString (theNum,1,"name",theAch,aName); + // --- inherited field : location --- + Handle(StepGeom_Axis2Placement3d) aLocation; + theData->ReadEntity(theNum,2,"location", theAch, STANDARD_TYPE(StepGeom_Axis2Placement3d),aLocation); + + //--- Initialisation of the read entity --- + theEnt->Init(aName, aLocation); +} + +//======================================================================= +//function : WriteStep +//purpose : +//======================================================================= +void RWStepVisual_RWRepositionedTessellatedItem::WriteStep + (StepData_StepWriter& theSW, + const Handle(StepVisual_RepositionedTessellatedItem)& theEnt) const +{ + // --- inherited field name --- + theSW.Send(theEnt->Name()); + theSW.Send(theEnt->Location()); +} diff --git a/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedItem.hxx b/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedItem.hxx new file mode 100644 index 0000000000..719db354b1 --- /dev/null +++ b/src/RWStepVisual/RWStepVisual_RWRepositionedTessellatedItem.hxx @@ -0,0 +1,46 @@ +// Copyright (c) 2022 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// 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. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#ifndef _RWStepVisual_RWRepositionedTessellatedItem_HeaderFile +#define _RWStepVisual_RWRepositionedTessellatedItem_HeaderFile + +#include +#include +#include + +class StepData_StepReaderData; +class Interface_Check; +class StepVisual_RepositionedTessellatedItem; +class StepData_StepWriter; + +//! Read & Write tool for RepositionedTessellatedItem +class RWStepVisual_RWRepositionedTessellatedItem +{ +public: + + DEFINE_STANDARD_ALLOC + + //! Empty constructor + RWStepVisual_RWRepositionedTessellatedItem() {}; + + //! Reads RepositionedTessellatedItem + Standard_EXPORT void ReadStep (const Handle(StepData_StepReaderData)& theData, + const Standard_Integer theNum, + Handle(Interface_Check)& theAch, + const Handle(StepVisual_RepositionedTessellatedItem)& theEnt) const; + + //! Writes RepositionedTessellatedItem + Standard_EXPORT void WriteStep (StepData_StepWriter& theSW, + const Handle(StepVisual_RepositionedTessellatedItem)& theEnt) const; +}; +#endif // _RWStepVisual_RWRepositionedTessellatedItem_HeaderFile diff --git a/src/STEPCAFControl/STEPCAFControl_Reader.cxx b/src/STEPCAFControl/STEPCAFControl_Reader.cxx index fedf03721b..753531b91a 100644 --- a/src/STEPCAFControl/STEPCAFControl_Reader.cxx +++ b/src/STEPCAFControl/STEPCAFControl_Reader.cxx @@ -204,6 +204,7 @@ #include #include #include +#include #include #include #include @@ -1868,6 +1869,25 @@ Standard_Boolean readPMIPresentation(const Handle(Standard_Transient)& thePresen Handle(StepVisual_TessellatedGeometricSet) aTessSet = Handle(StepVisual_TessellatedGeometricSet)::DownCast(aTessItem); if (aTessSet.IsNull()) continue; + gp_Trsf aTransf; + if (aTessSet->IsKind(STANDARD_TYPE(StepVisual_RepositionedTessellatedGeometricSet))) + { + Handle(StepVisual_RepositionedTessellatedGeometricSet) aRTGS = + Handle(StepVisual_RepositionedTessellatedGeometricSet)::DownCast(aTessSet); + Handle(Geom_Axis2Placement) aLocation = StepToGeom::MakeAxis2Placement(aRTGS->Location()); + if (!aLocation.IsNull()) + { + const gp_Ax3 anAx3Orig = gp::XOY(); + const gp_Ax3 anAx3Targ(aLocation->Ax2()); + if (anAx3Targ.Location().SquareDistance(anAx3Orig.Location()) >= Precision::SquareConfusion() || + !anAx3Targ.Direction().IsEqual(anAx3Orig.Direction(), Precision::Angular()) || + !anAx3Targ.XDirection().IsEqual(anAx3Orig.XDirection(), Precision::Angular()) || + !anAx3Targ.YDirection().IsEqual(anAx3Orig.YDirection(), Precision::Angular())) + { + aTransf.SetTransformation(anAx3Targ, anAx3Orig); + } + } + } NCollection_Handle aListItems = aTessSet->Items(); Standard_Integer nb = aListItems.IsNull() ? 0 : aListItems->Length(); Handle(StepVisual_TessellatedCurveSet) aTessCurve; @@ -1913,7 +1933,7 @@ Standard_Boolean readPMIPresentation(const Handle(Standard_Transient)& thePresen } aB.Add(aComp, aCurW); } - anAnnotationShape = aComp; + anAnnotationShape = aComp.Moved(aTransf); } if (!anAnnotationShape.IsNull()) { diff --git a/src/StepAP214/StepAP214_Protocol.cxx b/src/StepAP214/StepAP214_Protocol.cxx index 7d69f8e42b..d4c4e3d074 100644 --- a/src/StepAP214/StepAP214_Protocol.cxx +++ b/src/StepAP214/StepAP214_Protocol.cxx @@ -738,6 +738,8 @@ static Standard_CString schemaAP242DIS = "AP242_MANAGED_MODEL_BASED_3D_ENGINEERI #include #include #include +#include +#include #include #include #include @@ -1626,6 +1628,8 @@ StepAP214_Protocol::StepAP214_Protocol () types.Bind(STANDARD_TYPE(StepKinematics_LinearFlexibleLinkRepresentation), 798); types.Bind(STANDARD_TYPE(StepKinematics_ActuatedKinPairAndOrderKinPair), 800); types.Bind(STANDARD_TYPE(StepKinematics_MechanismStateRepresentation), 801); + types.Bind(STANDARD_TYPE(StepVisual_RepositionedTessellatedGeometricSet), 802); + types.Bind(STANDARD_TYPE(StepVisual_RepositionedTessellatedItem), 803); } diff --git a/src/StepVisual/FILES b/src/StepVisual/FILES index b86995588f..83e199d91d 100644 --- a/src/StepVisual/FILES +++ b/src/StepVisual/FILES @@ -197,6 +197,10 @@ StepVisual_PresentedItemRepresentation.cxx StepVisual_PresentedItemRepresentation.hxx StepVisual_RenderingPropertiesSelect.cxx StepVisual_RenderingPropertiesSelect.hxx +StepVisual_RepositionedTessellatedGeometricSet.hxx +StepVisual_RepositionedTessellatedGeometricSet.cxx +StepVisual_RepositionedTessellatedItem.hxx +StepVisual_RepositionedTessellatedItem.cxx StepVisual_ShadingSurfaceMethod.hxx StepVisual_StyleContextSelect.cxx StepVisual_StyleContextSelect.hxx diff --git a/src/StepVisual/StepVisual_RepositionedTessellatedGeometricSet.cxx b/src/StepVisual/StepVisual_RepositionedTessellatedGeometricSet.cxx new file mode 100644 index 0000000000..20ac1d2515 --- /dev/null +++ b/src/StepVisual/StepVisual_RepositionedTessellatedGeometricSet.cxx @@ -0,0 +1,30 @@ +// Copyright (c) 2022 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// 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. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +#include + +IMPLEMENT_STANDARD_RTTIEXT(StepVisual_RepositionedTessellatedGeometricSet, StepVisual_TessellatedGeometricSet) + +//======================================================================= +//function : Init +//purpose : +//======================================================================= +void StepVisual_RepositionedTessellatedGeometricSet::Init(const Handle(TCollection_HAsciiString)& theName, + const NCollection_Handle& theItems, + const Handle(StepGeom_Axis2Placement3d)& theLocation) +{ + StepVisual_TessellatedGeometricSet::Init(theName, theItems); + myLocation = theLocation; +} diff --git a/src/StepVisual/StepVisual_RepositionedTessellatedGeometricSet.hxx b/src/StepVisual/StepVisual_RepositionedTessellatedGeometricSet.hxx new file mode 100644 index 0000000000..c037b015b6 --- /dev/null +++ b/src/StepVisual/StepVisual_RepositionedTessellatedGeometricSet.hxx @@ -0,0 +1,50 @@ +// Copyright (c) 2022 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// 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. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#ifndef _StepVisual_RepositionedTessellatedGeometricSet_HeaderFile +#define _StepVisual_RepositionedTessellatedGeometricSet_HeaderFile + +#include + +class StepGeom_Axis2Placement3d; + +DEFINE_STANDARD_HANDLE(StepVisual_RepositionedTessellatedGeometricSet, StepVisual_TessellatedGeometricSet) + +//! Representation of complex STEP entity RepositionedTessellatedGeometricSet +class StepVisual_RepositionedTessellatedGeometricSet : public StepVisual_TessellatedGeometricSet +{ +public: + + DEFINE_STANDARD_ALLOC + + DEFINE_STANDARD_RTTIEXT(StepVisual_RepositionedTessellatedGeometricSet, StepVisual_TessellatedGeometricSet) + + //! Default constructor + StepVisual_RepositionedTessellatedGeometricSet() {}; + + //! Initialize all fields (own and inherited) + Standard_EXPORT void Init(const Handle(TCollection_HAsciiString)& theName, + const NCollection_Handle& theItems, + const Handle(StepGeom_Axis2Placement3d)& theLocation); + + //! Returns location + Handle(StepGeom_Axis2Placement3d) Location() const { return myLocation; } + + //! Sets location + void SetLocation(const Handle(StepGeom_Axis2Placement3d)& theLocation) { myLocation = theLocation; } + +private: + + Handle(StepGeom_Axis2Placement3d) myLocation; +}; +#endif // StepVisual_RepositionedTessellatedGeometricSet_HeaderFile diff --git a/src/StepVisual/StepVisual_RepositionedTessellatedItem.cxx b/src/StepVisual/StepVisual_RepositionedTessellatedItem.cxx new file mode 100644 index 0000000000..ef05a4ec1f --- /dev/null +++ b/src/StepVisual/StepVisual_RepositionedTessellatedItem.cxx @@ -0,0 +1,29 @@ +// Copyright (c) 2022 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// 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. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +#include + +IMPLEMENT_STANDARD_RTTIEXT(StepVisual_RepositionedTessellatedItem, StepVisual_TessellatedItem) + +//======================================================================= +//function : Init +//purpose : +//======================================================================= +void StepVisual_RepositionedTessellatedItem::Init(const Handle(TCollection_HAsciiString)& theName, + const Handle(StepGeom_Axis2Placement3d)& theLocation) +{ + StepVisual_TessellatedItem::Init(theName); + myLocation = theLocation; +} diff --git a/src/StepVisual/StepVisual_RepositionedTessellatedItem.hxx b/src/StepVisual/StepVisual_RepositionedTessellatedItem.hxx new file mode 100644 index 0000000000..b9b4dec5db --- /dev/null +++ b/src/StepVisual/StepVisual_RepositionedTessellatedItem.hxx @@ -0,0 +1,49 @@ +// Copyright (c) 2022 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// 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. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#ifndef _StepVisual_RepositionedTessellatedItem_HeaderFile +#define _StepVisual_RepositionedTessellatedItem_HeaderFile + +#include + +class StepGeom_Axis2Placement3d; + +DEFINE_STANDARD_HANDLE(StepVisual_RepositionedTessellatedItem, StepVisual_TessellatedItem) + +//! Representation of STEP entity RepositionedTessellatedItem +class StepVisual_RepositionedTessellatedItem : public StepVisual_TessellatedItem +{ +public: + + DEFINE_STANDARD_RTTIEXT(StepVisual_RepositionedTessellatedItem, StepVisual_TessellatedItem) + + DEFINE_STANDARD_ALLOC + + //! Default constructor + StepVisual_RepositionedTessellatedItem() {}; + + //! Initialize all fields (own and inherited) + Standard_EXPORT void Init(const Handle(TCollection_HAsciiString)& theName, + const Handle(StepGeom_Axis2Placement3d)& theLocation); + + //! Returns location + Handle(StepGeom_Axis2Placement3d) Location() const { return myLocation; } + + //! Sets location + void SetLocation(const Handle(StepGeom_Axis2Placement3d)& theLocation) { myLocation = theLocation; } + +private: + + Handle(StepGeom_Axis2Placement3d) myLocation; +}; +#endif // StepVisual_RepositionedTessellatedItem_HeaderFile diff --git a/tests/bugs/step/bug32731 b/tests/bugs/step/bug32731 new file mode 100644 index 0000000000..f5779f111e --- /dev/null +++ b/tests/bugs/step/bug32731 @@ -0,0 +1,17 @@ +puts "=======" +puts "0032731: Data Exchange, Step Import - Incorrect PMI text location" +puts "=======" + +pload OCAF + +Close D -silent + +# Read file +ReadStep D [locate_data_file bug32731_A5E46910589A.stp] + +#Checking +XGetShape repr0 D 0:1:4:106:16 +checkgravitycenter repr0 -l -109.847 153.679 0 1e-7 + +XGetShape repr1 D 0:1:4:56:16 +checkgravitycenter repr1 -l -68.7 123.272 -18.5624 1e-7