From 00bb121b1ab4fa82033d81650ada04be00249a11 Mon Sep 17 00:00:00 2001 From: dpasukhi Date: Tue, 3 Jan 2023 19:09:28 +0000 Subject: [PATCH] 0033300: Data Exchange, DE Wrapper - Specialise WS for each transfer process Updated STEP and IGES to personalize own work session --- .../IGESCAFControl_Provider.cxx | 48 +++++++++++------ .../IGESCAFControl_Provider.hxx | 5 ++ .../STEPCAFControl_Provider.cxx | 53 ++++++++++++------- .../STEPCAFControl_Provider.hxx | 21 +++++--- 4 files changed, 82 insertions(+), 45 deletions(-) diff --git a/src/IGESCAFControl/IGESCAFControl_Provider.cxx b/src/IGESCAFControl/IGESCAFControl_Provider.cxx index fa8084ace0..403c9ec755 100644 --- a/src/IGESCAFControl/IGESCAFControl_Provider.cxx +++ b/src/IGESCAFControl/IGESCAFControl_Provider.cxx @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -22,6 +23,7 @@ #include #include #include +#include #include IMPLEMENT_STANDARD_RTTIEXT(IGESCAFControl_Provider, DE_Provider) @@ -41,6 +43,25 @@ IGESCAFControl_Provider::IGESCAFControl_Provider(const Handle(DE_ConfigurationNo : DE_Provider(theNode) {} +//======================================================================= +// function : STEPCAFControl_Provider +// purpose : +//======================================================================= +void IGESCAFControl_Provider::personizeWS(Handle(XSControl_WorkSession)& theWS) +{ + if (theWS.IsNull()) + { + Message::SendWarning() << "Warning: IGESCAFControl_Provider :" + << " Null work session, use internal temporary session"; + theWS = new XSControl_WorkSession(); + } + Handle(IGESControl_Controller) aCntrl = Handle(IGESControl_Controller)::DownCast(theWS->NormAdaptor()); + if (aCntrl.IsNull()) + { + theWS->SelectNorm("IGES"); + } +} + //======================================================================= // function : initStatic // purpose : @@ -161,12 +182,10 @@ bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath, Handle(IGESCAFControl_ConfigurationNode) aNode = Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode()); initStatic(aNode); + personizeWS(theWS); XCAFDoc_DocumentTool::SetLengthUnit(theDocument, aNode->GlobalParameters.LengthUnit, UnitsMethods_LengthUnit_Millimeter); IGESCAFControl_Reader aReader; - if (!theWS.IsNull()) - { - aReader.SetWS(theWS); - } + aReader.SetWS(theWS); aReader.SetReadVisible(aNode->InternalParameters.ReadOnlyVisible); @@ -213,12 +232,9 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath, Handle(IGESCAFControl_ConfigurationNode) aNode = Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode()); initStatic(aNode); + personizeWS(theWS); XCAFDoc_DocumentTool::SetLengthUnit(theDocument, aNode->InternalParameters.WriteUnit, UnitsMethods_LengthUnit_Millimeter); - IGESCAFControl_Writer aWriter; - if (!theWS.IsNull()) - { - aWriter = IGESCAFControl_Writer(theWS); - } + IGESCAFControl_Writer aWriter(theWS); aWriter.SetColorMode(aNode->InternalParameters.WriteColor); aWriter.SetNameMode(aNode->InternalParameters.WriteName); aWriter.SetLayerMode(aNode->InternalParameters.WriteLayer); @@ -249,7 +265,7 @@ bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath, const Handle(TDocStd_Document)& theDocument, const Message_ProgressRange& theProgress) { - Handle(XSControl_WorkSession) aWS; + Handle(XSControl_WorkSession) aWS = new XSControl_WorkSession(); return Read(thePath, theDocument, aWS, theProgress); } @@ -261,7 +277,7 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath, const Handle(TDocStd_Document)& theDocument, const Message_ProgressRange& theProgress) { - Handle(XSControl_WorkSession) aWS; + Handle(XSControl_WorkSession) aWS = new XSControl_WorkSession(); return Write(thePath, theDocument, aWS, theProgress); } @@ -283,11 +299,9 @@ bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath, } Handle(IGESCAFControl_ConfigurationNode) aNode = Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode()); initStatic(aNode); + personizeWS(theWS); IGESControl_Reader aReader; - if (!theWS.IsNull()) - { - aReader.SetWS(theWS); - } + aReader.SetWS(theWS); aReader.SetReadVisible(aNode->InternalParameters.ReadOnlyVisible); IFSelect_ReturnStatus aReadStat = IFSelect_RetVoid; aReadStat = aReader.ReadFile(thePath.ToCString()); @@ -359,7 +373,7 @@ bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath, TopoDS_Shape& theShape, const Message_ProgressRange& theProgress) { - Handle(XSControl_WorkSession) aWS; + Handle(XSControl_WorkSession) aWS = new XSControl_WorkSession(); return Read(thePath, theShape, aWS, theProgress); } @@ -371,7 +385,7 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath, const TopoDS_Shape& theShape, const Message_ProgressRange& theProgress) { - Handle(XSControl_WorkSession) aWS; + Handle(XSControl_WorkSession) aWS = new XSControl_WorkSession(); return Write(thePath, theShape, aWS, theProgress); } diff --git a/src/IGESCAFControl/IGESCAFControl_Provider.hxx b/src/IGESCAFControl/IGESCAFControl_Provider.hxx index 101234a414..a3b778f601 100644 --- a/src/IGESCAFControl/IGESCAFControl_Provider.hxx +++ b/src/IGESCAFControl/IGESCAFControl_Provider.hxx @@ -135,6 +135,11 @@ public: private: + //! Personizes work session with current format. + //! Creates new temporary session if current session is null + //! @param[in] theWS current work session + void personizeWS(Handle(XSControl_WorkSession)& theWS); + //! Initialize static variables void initStatic(const Handle(DE_ConfigurationNode)& theNode); diff --git a/src/STEPCAFControl/STEPCAFControl_Provider.cxx b/src/STEPCAFControl/STEPCAFControl_Provider.cxx index c7078c397b..20e835c854 100644 --- a/src/STEPCAFControl/STEPCAFControl_Provider.cxx +++ b/src/STEPCAFControl/STEPCAFControl_Provider.cxx @@ -16,12 +16,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include IMPLEMENT_STANDARD_RTTIEXT(STEPCAFControl_Provider, DE_Provider) @@ -41,6 +43,25 @@ STEPCAFControl_Provider::STEPCAFControl_Provider(const Handle(DE_ConfigurationNo :DE_Provider(theNode) {} +//======================================================================= +// function : STEPCAFControl_Provider +// purpose : +//======================================================================= +void STEPCAFControl_Provider::personizeWS(Handle(XSControl_WorkSession)& theWS) +{ + if (theWS.IsNull()) + { + Message::SendWarning() << "Warning: STEPCAFControl_Provider :" + << " Null work session, use internal temporary session"; + theWS = new XSControl_WorkSession(); + } + Handle(STEPControl_Controller) aCntrl = Handle(STEPControl_Controller)::DownCast(theWS->NormAdaptor()); + if (aCntrl.IsNull()) + { + theWS->SelectNorm("STEP"); + } +} + //======================================================================= // function : initStatic // purpose : @@ -175,12 +196,10 @@ bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath, Handle(STEPCAFControl_ConfigurationNode) aNode = Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode()); initStatic(aNode); + personizeWS(theWS); XCAFDoc_DocumentTool::SetLengthUnit(theDocument, aNode->GlobalParameters.LengthUnit, UnitsMethods_LengthUnit_Millimeter); STEPCAFControl_Reader aReader; - if (!theWS.IsNull()) - { - aReader.Init(theWS); - } + aReader.Init(theWS); aReader.SetColorMode(aNode->InternalParameters.ReadColor); aReader.SetNameMode(aNode->InternalParameters.ReadName); aReader.SetLayerMode(aNode->InternalParameters.ReadLayer); @@ -228,11 +247,9 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath, XCAFDoc_DocumentTool::SetLengthUnit(theDocument, UnitsMethods::GetLengthUnitScale(aNode->InternalParameters.WriteUnit, UnitsMethods_LengthUnit_Millimeter), UnitsMethods_LengthUnit_Millimeter); + personizeWS(theWS); STEPCAFControl_Writer aWriter; - if (!theWS.IsNull()) - { - aWriter.Init(theWS); - } + aWriter.Init(theWS); STEPControl_StepModelType aMode = static_cast(aNode->InternalParameters.WriteModelType); aWriter.SetColorMode(aNode->InternalParameters.WriteColor); aWriter.SetNameMode(aNode->InternalParameters.WriteName); @@ -282,7 +299,7 @@ bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath, const Handle(TDocStd_Document)& theDocument, const Message_ProgressRange& theProgress) { - Handle(XSControl_WorkSession) aWS; + Handle(XSControl_WorkSession) aWS = new XSControl_WorkSession(); return Read(thePath, theDocument, aWS, theProgress); } @@ -294,7 +311,7 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath, const Handle(TDocStd_Document)& theDocument, const Message_ProgressRange& theProgress) { - Handle(XSControl_WorkSession) aWS; + Handle(XSControl_WorkSession) aWS = new XSControl_WorkSession(); return Write(thePath, theDocument, aWS, theProgress); } @@ -316,11 +333,9 @@ bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath, } Handle(STEPCAFControl_ConfigurationNode) aNode = Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode()); initStatic(aNode); + personizeWS(theWS); STEPControl_Reader aReader; - if(!theWS.IsNull()) - { - aReader.SetWS(theWS); - } + aReader.SetWS(theWS); IFSelect_ReturnStatus aReadstat = IFSelect_RetVoid; aReadstat = aReader.ReadFile(thePath.ToCString()); if (aReadstat != IFSelect_RetDone) @@ -362,11 +377,9 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath, Handle(STEPCAFControl_ConfigurationNode) aNode = Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode()); initStatic(aNode); + personizeWS(theWS); STEPControl_Writer aWriter; - if(!theWS.IsNull()) - { - aWriter.SetWS(theWS); - } + aWriter.SetWS(theWS); IFSelect_ReturnStatus aWritestat = IFSelect_RetVoid; Handle(StepData_StepModel) aModel = aWriter.Model(); aModel->SetWriteLengthUnit(UnitsMethods::GetLengthUnitScale(aNode->InternalParameters.WriteUnit, UnitsMethods_LengthUnit_Millimeter)); @@ -396,7 +409,7 @@ bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath, TopoDS_Shape& theShape, const Message_ProgressRange& theProgress) { - Handle(XSControl_WorkSession) aWS; + Handle(XSControl_WorkSession) aWS = new XSControl_WorkSession(); return Read(thePath, theShape, aWS, theProgress); } @@ -408,7 +421,7 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath, const TopoDS_Shape& theShape, const Message_ProgressRange& theProgress) { - Handle(XSControl_WorkSession) aWS; + Handle(XSControl_WorkSession) aWS = new XSControl_WorkSession(); return Write(thePath, theShape, aWS, theProgress); } diff --git a/src/STEPCAFControl/STEPCAFControl_Provider.hxx b/src/STEPCAFControl/STEPCAFControl_Provider.hxx index fb468efafa..c80e9e7153 100644 --- a/src/STEPCAFControl/STEPCAFControl_Provider.hxx +++ b/src/STEPCAFControl/STEPCAFControl_Provider.hxx @@ -133,18 +133,23 @@ public: //! @return provider's vendor name Standard_EXPORT virtual TCollection_AsciiString GetVendor() const Standard_OVERRIDE; - private: +private: - //! Initialize static variables - void initStatic(const Handle(DE_ConfigurationNode)& theNode); + //! Personizes work session with current format. + //! Creates new temporary session if current session is null + //! @param[in] theWS current work session + void personizeWS(Handle(XSControl_WorkSession)& theWS); - //! Initialize static variables - void setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter); + //! Initialize static variables + void initStatic(const Handle(DE_ConfigurationNode)& theNode); - //! Reset used interface static variables - void resetStatic(); + //! Initialize static variables + void setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter); - STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection myOldValues; + //! Reset used interface static variables + void resetStatic(); + + STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection myOldValues; };