#include <IGESCAFControl_Provider.hxx>
#include <BinXCAFDrivers.hxx>
+#include <IGESControl_Controller.hxx>
#include <IGESCAFControl_ConfigurationNode.hxx>
#include <IGESCAFControl_Reader.hxx>
#include <IGESCAFControl_Writer.hxx>
#include <Interface_Static.hxx>
#include <Message.hxx>
#include <XCAFDoc_DocumentTool.hxx>
+#include <XSControl_WorkSession.hxx>
#include <UnitsMethods.hxx>
IMPLEMENT_STANDARD_RTTIEXT(IGESCAFControl_Provider, DE_Provider)
: 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 :
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);
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);
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);
}
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);
}
}
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());
TopoDS_Shape& theShape,
const Message_ProgressRange& theProgress)
{
- Handle(XSControl_WorkSession) aWS;
+ Handle(XSControl_WorkSession) aWS = new XSControl_WorkSession();
return Read(thePath, theShape, aWS, theProgress);
}
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);
}
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);
#include <BinXCAFDrivers.hxx>
#include <Interface_Static.hxx>
#include <Message.hxx>
+#include <STEPControl_Controller.hxx>
#include <StepData_StepModel.hxx>
#include <STEPCAFControl_ConfigurationNode.hxx>
#include <STEPCAFControl_Controller.hxx>
#include <STEPCAFControl_Reader.hxx>
#include <STEPCAFControl_Writer.hxx>
#include <XCAFDoc_DocumentTool.hxx>
+#include <XSControl_WorkSession.hxx>
#include <UnitsMethods.hxx>
IMPLEMENT_STANDARD_RTTIEXT(STEPCAFControl_Provider, DE_Provider)
: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 :
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);
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<STEPControl_StepModelType>(aNode->InternalParameters.WriteModelType);
aWriter.SetColorMode(aNode->InternalParameters.WriteColor);
aWriter.SetNameMode(aNode->InternalParameters.WriteName);
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);
}
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);
}
}
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)
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));
TopoDS_Shape& theShape,
const Message_ProgressRange& theProgress)
{
- Handle(XSControl_WorkSession) aWS;
+ Handle(XSControl_WorkSession) aWS = new XSControl_WorkSession();
return Read(thePath, theShape, aWS, theProgress);
}
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);
}
//! @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 initStatic(const Handle(DE_ConfigurationNode)& theNode);
- //! Initialize static variables
- void setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter);
+ //! Initialize static variables
+ void setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter);
- //! Reset used interface static variables
- void resetStatic();
+ //! Reset used interface static variables
+ void resetStatic();
- STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection myOldValues;
+ STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection myOldValues;
};