mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
27e4532498 | ||
|
932ddd6980 | ||
|
176b97aec6 |
@@ -295,6 +295,18 @@ TCollection_AsciiString DE_ConfigurationContext::StringVal(const TCollection_Asc
|
||||
return GetString(theParam, aVal, theScope) ? aVal : theDefValue;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : StringSeqVal
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
TColStd_ListOfAsciiString DE_ConfigurationContext::StringSeqVal(const TCollection_AsciiString& theParam,
|
||||
const TColStd_ListOfAsciiString& theDefValue,
|
||||
const TCollection_AsciiString& theScope) const
|
||||
{
|
||||
TColStd_ListOfAsciiString aVal;
|
||||
return GetStringSeq(theParam, aVal, theScope) ? aVal : theDefValue;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GetReal
|
||||
//purpose :
|
||||
|
@@ -139,6 +139,15 @@ public:
|
||||
const TCollection_AsciiString& theDefValue,
|
||||
const TCollection_AsciiString& theScope = "") const;
|
||||
|
||||
//! Gets value of parameter as being of specific type
|
||||
//! @param[in] theParam complex parameter name
|
||||
//! @param[in] theDefValue value by default if param is not found or has wrong type
|
||||
//! @param[in] theScope base parameter name
|
||||
//! @return specific type value
|
||||
Standard_EXPORT TColStd_ListOfAsciiString StringSeqVal(const TCollection_AsciiString& theParam,
|
||||
const TColStd_ListOfAsciiString& theDefValue,
|
||||
const TCollection_AsciiString& theScope = "") const;
|
||||
|
||||
//! Gets internal resource map
|
||||
//! @return map with resource value
|
||||
Standard_EXPORT const DE_ResourceMap& GetInternalMap() const { return myResource; }
|
||||
|
@@ -114,6 +114,15 @@ bool DE_ConfigurationNode::IsExportSupported() const
|
||||
return false;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : IsExportSupported
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DE_ConfigurationNode::IsStreamSupported() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : CheckForSupport
|
||||
// purpose :
|
||||
|
@@ -102,6 +102,10 @@ public:
|
||||
//! @return Standard_True if export is support
|
||||
Standard_EXPORT virtual bool IsExportSupported() const;
|
||||
|
||||
//! Checks the stream for import/export supporting
|
||||
//! @return Standard_True if stream is support
|
||||
Standard_EXPORT virtual bool IsStreamSupported() const;
|
||||
|
||||
//! Gets CAD format name of associated provider
|
||||
//! @return provider CAD format
|
||||
Standard_EXPORT virtual TCollection_AsciiString GetFormat() const = 0;
|
||||
@@ -128,17 +132,11 @@ public:
|
||||
|
||||
//! Gets the provider loading status
|
||||
//! @return Standard_True if the load is correct
|
||||
Standard_Boolean IsEnabled() const
|
||||
{
|
||||
return myIsEnabled;
|
||||
}
|
||||
Standard_Boolean IsEnabled() const { return myIsEnabled; }
|
||||
|
||||
//! Sets the provider loading status
|
||||
//! @param[in] theIsLoaded input load status
|
||||
void SetEnabled(const Standard_Boolean theIsLoaded)
|
||||
{
|
||||
myIsEnabled = theIsLoaded;
|
||||
}
|
||||
void SetEnabled(const Standard_Boolean theIsLoaded) { myIsEnabled = theIsLoaded; }
|
||||
|
||||
public:
|
||||
|
||||
|
@@ -47,7 +47,27 @@ Standard_Boolean DE_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
(void)theWS;
|
||||
(void)theProgress;
|
||||
Message::SendFail() << "Error: provider " << GetFormat() <<
|
||||
" " << GetVendor() <<" doesn't support read operation";
|
||||
" " << GetVendor() << " doesn't support read operation";
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DE_Provider::Read(std::istream& theIStream,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const TCollection_AsciiString theName,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theIStream;
|
||||
(void)theDocument;
|
||||
(void)theName;
|
||||
(void)theWS;
|
||||
(void)theProgress;
|
||||
Message::SendFail() << "Error: provider " << GetFormat() <<
|
||||
" " << GetVendor() << " doesn't support stream read operation";
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
@@ -69,35 +89,21 @@ Standard_Boolean DE_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean DE_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)thePath;
|
||||
(void)theDocument;
|
||||
(void)theProgress;
|
||||
Message::SendFail() << "Error: provider " << GetFormat() <<
|
||||
" " << GetVendor() << " doesn't support read operation";
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean DE_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
bool DE_Provider::Write(std::ostream& theOStream,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)thePath;
|
||||
(void)theOStream;
|
||||
(void)theDocument;
|
||||
(void)theWS;
|
||||
(void)theProgress;
|
||||
Message::SendFail() << "Error: provider " << GetFormat() <<
|
||||
" " << GetVendor() << " doesn't support write operation";
|
||||
" " << GetVendor() << " doesn't support stream write operation";
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
@@ -119,6 +125,26 @@ Standard_Boolean DE_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DE_Provider::Read(std::istream& theIStream,
|
||||
TopoDS_Shape& theShape,
|
||||
const TCollection_AsciiString theName,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theIStream;
|
||||
(void)theShape;
|
||||
(void)theName;
|
||||
(void)theWS;
|
||||
(void)theProgress;
|
||||
Message::SendFail() << "Error: provider " << GetFormat() <<
|
||||
" " << GetVendor() << " doesn't support stream read operation";
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
@@ -137,34 +163,20 @@ Standard_Boolean DE_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean DE_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)thePath;
|
||||
(void)theShape;
|
||||
(void)theProgress;
|
||||
Message::SendFail() << "Error: provider " << GetFormat() <<
|
||||
" " << GetVendor() << " doesn't support read operation";
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean DE_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
bool DE_Provider::Write(std::ostream& theOStream,
|
||||
const TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)thePath;
|
||||
(void)theOStream;
|
||||
(void)theShape;
|
||||
(void)theWS;
|
||||
(void)theProgress;
|
||||
Message::SendFail() << "Error: provider " << GetFormat() <<
|
||||
" " << GetVendor() << " doesn't support write operation";
|
||||
" " << GetVendor() << " doesn't support stream write operation";
|
||||
return Standard_False;
|
||||
}
|
||||
|
@@ -61,39 +61,45 @@ public:
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return True if Read was successful
|
||||
Standard_EXPORT virtual Standard_Boolean Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return True if Write was successful
|
||||
Standard_EXPORT virtual Standard_Boolean Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[in] theIStream stream to import CAD data
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @paramp[in] theName name of CAD file, can be empty
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return True if Read was successful
|
||||
Standard_EXPORT virtual Standard_Boolean Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(std::istream& theIStream,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const TCollection_AsciiString theName,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return True if Write was successful
|
||||
Standard_EXPORT virtual Standard_Boolean Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] theOStream stream to export CAD data
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(std::ostream& theOStream,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
@@ -101,10 +107,23 @@ public:
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return True if Read was successful
|
||||
Standard_EXPORT virtual Standard_Boolean Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] theIStream stream to the CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @paramp[in] theName name of CAD file, can be empty
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(std::istream& theIStream,
|
||||
TopoDS_Shape& theShape,
|
||||
const TCollection_AsciiString theName,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
@@ -112,28 +131,21 @@ public:
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return True if Write was successful
|
||||
Standard_EXPORT virtual Standard_Boolean Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return True if Read was successful
|
||||
Standard_EXPORT virtual Standard_Boolean Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[in] theOStream stream to export CAD data
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return True if Write was successful
|
||||
Standard_EXPORT virtual Standard_Boolean Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(std::ostream& theOStream,
|
||||
const TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
public:
|
||||
|
||||
@@ -147,17 +159,11 @@ public:
|
||||
|
||||
//! Gets internal configuration node
|
||||
//! @return configuration node object
|
||||
Handle(DE_ConfigurationNode) GetNode() const
|
||||
{
|
||||
return myNode;
|
||||
}
|
||||
Handle(DE_ConfigurationNode) GetNode() const { return myNode; }
|
||||
|
||||
//! Sets internal configuration node
|
||||
//! @param[in] theNode configuration node to set
|
||||
void SetNode(const Handle(DE_ConfigurationNode)& theNode)
|
||||
{
|
||||
myNode = theNode;
|
||||
}
|
||||
void SetNode(const Handle(DE_ConfigurationNode)& theNode) { myNode = theNode; }
|
||||
|
||||
private:
|
||||
|
||||
|
@@ -31,7 +31,7 @@ namespace
|
||||
{
|
||||
static const TCollection_AsciiString& THE_CONFIGURATION_SCOPE()
|
||||
{
|
||||
static const TCollection_AsciiString aScope ("global");
|
||||
static const TCollection_AsciiString aScope("global");
|
||||
return aScope;
|
||||
}
|
||||
|
||||
@@ -109,10 +109,6 @@ Standard_Boolean DE_Wrapper::Read(const TCollection_AsciiString& thePath,
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
if (theWS.IsNull())
|
||||
{
|
||||
return Read(thePath, theDocument, theProgress);
|
||||
}
|
||||
Handle(DE_Provider) aProvider;
|
||||
if (!FindProvider(thePath, Standard_True, aProvider))
|
||||
{
|
||||
@@ -134,10 +130,6 @@ Standard_Boolean DE_Wrapper::Write(const TCollection_AsciiString& thePath,
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
if (theWS.IsNull())
|
||||
{
|
||||
return Write(thePath, theDocument, theProgress);
|
||||
}
|
||||
Handle(DE_Provider) aProvider;
|
||||
if (!FindProvider(thePath, Standard_False, aProvider))
|
||||
{
|
||||
@@ -146,46 +138,6 @@ Standard_Boolean DE_Wrapper::Write(const TCollection_AsciiString& thePath,
|
||||
return aProvider->Write(thePath, theDocument, theWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean DE_Wrapper::Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
Handle(DE_Provider) aProvider;
|
||||
if (!FindProvider(thePath, Standard_True, aProvider))
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
return aProvider->Read(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean DE_Wrapper::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
Handle(DE_Provider) aProvider;
|
||||
if (!FindProvider(thePath, Standard_False, aProvider))
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
return aProvider->Write(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
@@ -195,10 +147,6 @@ Standard_Boolean DE_Wrapper::Read(const TCollection_AsciiString& thePath,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (theWS.IsNull())
|
||||
{
|
||||
return Read(thePath, theShape, theProgress);
|
||||
}
|
||||
Handle(DE_Provider) aProvider;
|
||||
if (!FindProvider(thePath, Standard_True, aProvider))
|
||||
{
|
||||
@@ -216,10 +164,6 @@ Standard_Boolean DE_Wrapper::Write(const TCollection_AsciiString& thePath,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (theWS.IsNull())
|
||||
{
|
||||
return Write(thePath, theShape, theProgress);
|
||||
}
|
||||
Handle(DE_Provider) aProvider;
|
||||
if (!FindProvider(thePath, Standard_False, aProvider))
|
||||
{
|
||||
@@ -228,39 +172,6 @@ Standard_Boolean DE_Wrapper::Write(const TCollection_AsciiString& thePath,
|
||||
return aProvider->Write(thePath, theShape, theWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean DE_Wrapper::Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
|
||||
Handle(DE_Provider) aProvider;
|
||||
if (!FindProvider(thePath, Standard_True, aProvider))
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
return aProvider->Read(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean DE_Wrapper::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(DE_Provider) aProvider;
|
||||
if (!FindProvider(thePath, Standard_False, aProvider))
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
return aProvider->Write(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Load
|
||||
// purpose :
|
||||
|
@@ -94,24 +94,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT Standard_Boolean Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT Standard_Boolean Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
@@ -134,24 +116,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT Standard_Boolean Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT Standard_Boolean Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
public:
|
||||
|
||||
//! Updates values according the resource file
|
||||
|
@@ -51,7 +51,21 @@ bool DEBRepCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theDocument, theProgress);
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : "
|
||||
<< "Null document";
|
||||
return false;
|
||||
}
|
||||
TopoDS_Shape aShape;
|
||||
if (!Read(thePath, aShape, theWS, theProgress))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Handle(XCAFDoc_ShapeTool) aShTool =
|
||||
XCAFDoc_DocumentTool::ShapeTool(theDocument->Main());
|
||||
aShTool->AddShape(aShape);
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -64,49 +78,15 @@ bool DEBRepCascade_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DEBRepCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if(theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during reading the file " <<
|
||||
thePath << "\t: theDocument shouldn't be null";
|
||||
return false;
|
||||
}
|
||||
TopoDS_Shape aShape;
|
||||
if (!Read(thePath, aShape, theProgress))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Handle(XCAFDoc_ShapeTool) aShTool = XCAFDoc_DocumentTool::ShapeTool(theDocument->Main());
|
||||
aShTool->AddShape(aShape);
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DEBRepCascade_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
TopoDS_Shape aShape;
|
||||
TDF_LabelSequence aLabels;
|
||||
Handle(XCAFDoc_ShapeTool) aSTool = XCAFDoc_DocumentTool::ShapeTool(theDocument->Main());
|
||||
Handle(XCAFDoc_ShapeTool) aSTool =
|
||||
XCAFDoc_DocumentTool::ShapeTool(theDocument->Main());
|
||||
aSTool->GetFreeShapes(aLabels);
|
||||
if (aLabels.Length() <= 0)
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during writing the file " <<
|
||||
thePath << "\t: Document contain no shapes";
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -126,7 +106,7 @@ bool DEBRepCascade_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
}
|
||||
aShape = aComp;
|
||||
}
|
||||
return Write(thePath, aShape, theProgress);
|
||||
return Write(thePath, aShape, theWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -139,7 +119,45 @@ bool DEBRepCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theShape, theProgress);
|
||||
bool isBinaryFormat = true;
|
||||
{
|
||||
// probe file header to recognize format
|
||||
const Handle(OSD_FileSystem)& aFileSystem =
|
||||
OSD_FileSystem::DefaultFileSystem();
|
||||
std::shared_ptr<std::istream> aFile =
|
||||
aFileSystem->OpenIStream(thePath, std::ios::in | std::ios::binary);
|
||||
if (aFile.get() == NULL)
|
||||
{
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : ["
|
||||
<< thePath << "] : Cannot open the file";
|
||||
return false;
|
||||
}
|
||||
char aStringBuf[255] = {};
|
||||
aFile->read(aStringBuf, 255);
|
||||
if (aFile->fail())
|
||||
{
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : ["
|
||||
<< thePath << "] : Cannot open the file";
|
||||
return false;
|
||||
}
|
||||
isBinaryFormat = !(::strncmp(aStringBuf, "DBRep_DrawableShape", 19) == 0);
|
||||
}
|
||||
Standard_Boolean aReadStatus = Standard_True;
|
||||
if (isBinaryFormat)
|
||||
{
|
||||
aReadStatus = BinTools::Read(theShape, thePath.ToCString(), theProgress);
|
||||
}
|
||||
else
|
||||
{
|
||||
aReadStatus =
|
||||
BRepTools::Read(theShape, thePath.ToCString(), BRep_Builder(), theProgress);
|
||||
}
|
||||
if (!aReadStatus)
|
||||
{
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : ["
|
||||
<< thePath << "] : Cannot read data from the file";
|
||||
}
|
||||
return aReadStatus;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -152,127 +170,72 @@ bool DEBRepCascade_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DEBRepCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
bool isBinaryFormat = true;
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(DEBRepCascade_ConfigurationNode)))
|
||||
{
|
||||
// probe file header to recognize format
|
||||
const Handle(OSD_FileSystem)& aFileSystem = OSD_FileSystem::DefaultFileSystem();
|
||||
std::shared_ptr<std::istream> aFile = aFileSystem->OpenIStream(thePath, std::ios::in | std::ios::binary);
|
||||
if (aFile.get() == NULL)
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during reading the file " <<
|
||||
thePath << "\t: Cannot read the file";
|
||||
return false;
|
||||
}
|
||||
|
||||
char aStringBuf[255] = {};
|
||||
aFile->read(aStringBuf, 255);
|
||||
if (aFile->fail())
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during reading the file " <<
|
||||
thePath << "\t: Cannot read the file";
|
||||
return false;
|
||||
}
|
||||
isBinaryFormat = !(::strncmp(aStringBuf, "DBRep_DrawableShape", 19) == 0);
|
||||
}
|
||||
|
||||
if (isBinaryFormat)
|
||||
{
|
||||
if (!BinTools::Read(theShape, thePath.ToCString(), theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during reading the file " <<
|
||||
thePath << "\t: Cannot read from the file";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!BRepTools::Read(theShape, thePath.ToCString(), BRep_Builder(), theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during reading the file " <<
|
||||
thePath << "\t: Cannot read from the file";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DEBRepCascade_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(DEBRepCascade_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during writing the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(DEBRepCascade_ConfigurationNode) aNode = Handle(DEBRepCascade_ConfigurationNode)::DownCast(GetNode());
|
||||
Handle(DEBRepCascade_ConfigurationNode) aNode =
|
||||
Handle(DEBRepCascade_ConfigurationNode)::DownCast(GetNode());
|
||||
if (aNode->InternalParameters.WriteBinary)
|
||||
{
|
||||
if (aNode->InternalParameters.WriteVersionBin > static_cast<BinTools_FormatVersion>(BinTools_FormatVersion_UPPER) ||
|
||||
aNode->InternalParameters.WriteVersionBin < static_cast<BinTools_FormatVersion>(BinTools_FormatVersion_LOWER))
|
||||
if (aNode->InternalParameters.WriteVersionBin >
|
||||
static_cast<BinTools_FormatVersion>(BinTools_FormatVersion_UPPER) ||
|
||||
aNode->InternalParameters.WriteVersionBin <
|
||||
static_cast<BinTools_FormatVersion>(BinTools_FormatVersion_LOWER))
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during writing the file " <<
|
||||
thePath << "\t: Unknown format version";
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : ["
|
||||
<< thePath << "] : Unknown format version";
|
||||
return false;
|
||||
}
|
||||
if (aNode->InternalParameters.WriteNormals &&
|
||||
if (aNode->InternalParameters.WriteNormals &&
|
||||
aNode->InternalParameters.WriteVersionBin < BinTools_FormatVersion_VERSION_4)
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during writing the file " <<
|
||||
thePath << "\t: Vertex normals require binary format version 4 or later";
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : ["
|
||||
<< thePath << "] : Vertex normals require binary format version 4 or later";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!BinTools::Write(theShape, thePath.ToCString(), aNode->InternalParameters.WriteTriangles,
|
||||
aNode->InternalParameters.WriteNormals, aNode->InternalParameters.WriteVersionBin, theProgress))
|
||||
if (!BinTools::Write(theShape, thePath.ToCString(),
|
||||
aNode->InternalParameters.WriteTriangles,
|
||||
aNode->InternalParameters.WriteNormals,
|
||||
aNode->InternalParameters.WriteVersionBin, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during writing the file " <<
|
||||
thePath << "\t: Cannot write the file";
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : ["
|
||||
<< thePath << "] : Cannot write the file";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (aNode->InternalParameters.WriteVersionAscii > static_cast<TopTools_FormatVersion>(TopTools_FormatVersion_UPPER) ||
|
||||
aNode->InternalParameters.WriteVersionAscii < static_cast<TopTools_FormatVersion>(TopTools_FormatVersion_LOWER))
|
||||
if (aNode->InternalParameters.WriteVersionAscii >
|
||||
static_cast<TopTools_FormatVersion>(TopTools_FormatVersion_UPPER) ||
|
||||
aNode->InternalParameters.WriteVersionAscii <
|
||||
static_cast<TopTools_FormatVersion>(TopTools_FormatVersion_LOWER))
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during writing the file " <<
|
||||
thePath << "\t: Unknown format version";
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : ["
|
||||
<< thePath << "] : Unknown format version";
|
||||
return false;
|
||||
}
|
||||
if (aNode->InternalParameters.WriteNormals &&
|
||||
aNode->InternalParameters.WriteVersionAscii < TopTools_FormatVersion_VERSION_3)
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during writing the file " <<
|
||||
thePath << "\t: Error: vertex normals require ascii format version 3 or later";
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : ["
|
||||
<< thePath << "] : Vertex normals require ascii format version 3 or later";
|
||||
return false;
|
||||
}
|
||||
if (!BRepTools::Write(theShape, thePath.ToCString(), aNode->InternalParameters.WriteTriangles,
|
||||
aNode->InternalParameters.WriteNormals, aNode->InternalParameters.WriteVersionAscii, theProgress))
|
||||
if (!BRepTools::Write(theShape, thePath.ToCString(),
|
||||
aNode->InternalParameters.WriteTriangles,
|
||||
aNode->InternalParameters.WriteNormals,
|
||||
aNode->InternalParameters.WriteVersionAscii, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the DEBRepCascade_Provider during writing the file " <<
|
||||
thePath << "\t: Cannot write the file";
|
||||
Message::SendFail() << "Error: DEBRepCascade_Provider : ["
|
||||
<< thePath << "] : Cannot write the file";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -64,24 +64,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
@@ -104,24 +86,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//! Gets CAD format name of associated provider
|
||||
|
@@ -59,43 +59,21 @@ bool DEXCAFCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DEXCAFCascade_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DEXCAFCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during reading the file " <<
|
||||
thePath << "\t: theDocument shouldn't be null";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : "
|
||||
<< "Null document";
|
||||
return false;
|
||||
}
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(DEXCAFCascade_ConfigurationNode)))
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(DEXCAFCascade_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during reading the file " << thePath
|
||||
<< "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(DEXCAFCascade_ConfigurationNode) aNode = Handle(DEXCAFCascade_ConfigurationNode)::DownCast(GetNode());
|
||||
Handle(DEXCAFCascade_ConfigurationNode) aNode =
|
||||
Handle(DEXCAFCascade_ConfigurationNode)::DownCast(GetNode());
|
||||
Handle(TDocStd_Document) aDocument;
|
||||
Handle(TDocStd_Application) anApp = new TDocStd_Application();
|
||||
BinDrivers::DefineFormat(anApp);
|
||||
@@ -108,12 +86,15 @@ bool DEXCAFCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
XmlLDrivers::DefineFormat(anApp);
|
||||
XmlTObjDrivers::DefineFormat(anApp);
|
||||
XmlXCAFDrivers::DefineFormat(anApp);
|
||||
Handle(PCDM_ReaderFilter) aFilter = new PCDM_ReaderFilter(aNode->InternalParameters.ReadAppendMode);
|
||||
for (TColStd_ListOfAsciiString::Iterator anIt(aNode->InternalParameters.ReadSkipValues); anIt.More(); anIt.Next())
|
||||
Handle(PCDM_ReaderFilter) aFilter =
|
||||
new PCDM_ReaderFilter(aNode->InternalParameters.ReadAppendMode);
|
||||
for (TColStd_ListOfAsciiString::Iterator anIt(aNode->InternalParameters.ReadSkipValues);
|
||||
anIt.More(); anIt.Next())
|
||||
{
|
||||
aFilter->AddSkipped(anIt.Value());
|
||||
}
|
||||
for (TColStd_ListOfAsciiString::Iterator anIt(aNode->InternalParameters.ReadValues); anIt.More(); anIt.Next())
|
||||
for (TColStd_ListOfAsciiString::Iterator anIt(aNode->InternalParameters.ReadValues);
|
||||
anIt.More(); anIt.Next())
|
||||
{
|
||||
if (anIt.Value().StartsWith("0"))
|
||||
{
|
||||
@@ -127,8 +108,8 @@ bool DEXCAFCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
|
||||
if (anApp->Open(thePath, aDocument, aFilter, theProgress) != PCDM_RS_OK)
|
||||
{
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during reading the file : " << thePath
|
||||
<< "\t: Cannot open XDE document";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Cannot open XDE document";
|
||||
return false;
|
||||
}
|
||||
theDocument->SetData(aDocument->GetData());
|
||||
@@ -141,8 +122,10 @@ bool DEXCAFCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
//=======================================================================
|
||||
bool DEXCAFCascade_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
Handle(TDocStd_Application) anApp = new TDocStd_Application();
|
||||
BinXCAFDrivers::DefineFormat(anApp);
|
||||
PCDM_StoreStatus aStatus = PCDM_SS_Doc_IsNull;
|
||||
@@ -152,50 +135,50 @@ bool DEXCAFCascade_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
}
|
||||
else if (!theDocument->IsSaved())
|
||||
{
|
||||
Message::SendFail() << "Storage error in the DEXCAFCascade_Provider during writing the file " <<
|
||||
thePath << "\t: Storage error : this document has never been saved";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Storage error : Document has never been saved";
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
aStatus = anApp->Save(theDocument, theProgress);
|
||||
}
|
||||
|
||||
switch (aStatus)
|
||||
{
|
||||
case PCDM_SS_OK:
|
||||
return true;
|
||||
case PCDM_SS_DriverFailure:
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during writing the file : " << thePath
|
||||
<< "\t: Storage error : driver failure";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Storage error : driver failure";
|
||||
break;
|
||||
case PCDM_SS_WriteFailure:
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during the writing the file : " << thePath
|
||||
<< "\t: Storage error : write failure";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Storage error : write failure";
|
||||
break;
|
||||
case PCDM_SS_Failure:
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during writing the file : " << thePath
|
||||
<< "\t: Storage error : general failure";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Storage error : general failure";
|
||||
break;
|
||||
case PCDM_SS_Doc_IsNull:
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during writing the file : " << thePath
|
||||
<< "\t: Storage error :: document is NULL";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Storage error : document is NULL";
|
||||
break;
|
||||
case PCDM_SS_No_Obj:
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during writing the file : " << thePath
|
||||
<< "\t: Storage error : no object";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Storage error : no object";
|
||||
break;
|
||||
case PCDM_SS_Info_Section_Error:
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during writing the file : " << thePath
|
||||
<< "\t: Storage error : section error";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Storage error : section error";
|
||||
break;
|
||||
case PCDM_SS_UserBreak:
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during writing the file : " << thePath
|
||||
<< "\t: Storage error : user break";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Storage error : user break";
|
||||
break;
|
||||
case PCDM_SS_UnrecognizedFormat:
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during writing the file : " << thePath
|
||||
<< "\t: Storage error : unrecognized document storage format : " << theDocument->StorageFormat();
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Storage error : unrecognized document storage format : "
|
||||
<< theDocument->StorageFormat();
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
@@ -211,48 +194,25 @@ bool DEXCAFCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DEXCAFCascade_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool DEXCAFCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(DEXCAFCascade_ConfigurationNode)))
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(DEXCAFCascade_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during reading the file " << thePath
|
||||
<< "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(TDocStd_Document) aDocument;
|
||||
Handle(TDocStd_Application) anApp = new TDocStd_Application();
|
||||
BinXCAFDrivers::DefineFormat(anApp);
|
||||
anApp->NewDocument("BinXCAF", aDocument);
|
||||
Read(thePath, aDocument, theProgress);
|
||||
Read(thePath, aDocument, theWS, theProgress);
|
||||
TDF_LabelSequence aLabels;
|
||||
Handle(XCAFDoc_ShapeTool) aSTool = XCAFDoc_DocumentTool::ShapeTool(aDocument->Main());
|
||||
aSTool->GetFreeShapes(aLabels);
|
||||
if (aLabels.Length() <= 0)
|
||||
{
|
||||
Message::SendFail() << "Error in the DEXCAFCascade_Provider during reading the file : " << thePath
|
||||
<< "\t: Document contain no shapes";
|
||||
Message::SendFail() << "Error: DEXCAFCascade_Provider : [" <<
|
||||
thePath << "] : Storage error : Document contain no shapes";
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -281,12 +241,14 @@ bool DEXCAFCascade_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
//=======================================================================
|
||||
bool DEXCAFCascade_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
Handle(TDocStd_Document) aDoc = new TDocStd_Document("BinXCAF");
|
||||
Handle(XCAFDoc_ShapeTool) aShTool = XCAFDoc_DocumentTool::ShapeTool(aDoc->Main());
|
||||
aShTool->AddShape(theShape);
|
||||
return Write(thePath, aDoc, theProgress);
|
||||
return Write(thePath, aDoc, theWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -64,24 +64,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
@@ -104,24 +86,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//! Gets CAD format name of associated provider
|
||||
|
@@ -13,19 +13,217 @@
|
||||
|
||||
#include <IGESCAFControl_Provider.hxx>
|
||||
|
||||
#include <BinXCAFDrivers.hxx>
|
||||
#include <IGESCAFControl_ConfigurationNode.hxx>
|
||||
#include <IGESCAFControl_Reader.hxx>
|
||||
#include <IGESCAFControl_Writer.hxx>
|
||||
#include <IGESControl_Controller.hxx>
|
||||
#include <IGESData.hxx>
|
||||
#include <IGESData_IGESModel.hxx>
|
||||
#include <Interface_Static.hxx>
|
||||
#include <Message.hxx>
|
||||
#include <XCAFDoc_DocumentTool.hxx>
|
||||
#include <UnitsMethods.hxx>
|
||||
#include <XCAFDoc_DocumentTool.hxx>
|
||||
#include <XSControl_WorkSession.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(IGESCAFControl_Provider, DE_Provider)
|
||||
|
||||
namespace
|
||||
{
|
||||
//! Special class to handle static parameters.
|
||||
//! Initialize all parameters in the begin of life
|
||||
//! and reset changed parameters in the end of life
|
||||
class IGESCAFControl_ParameterController
|
||||
{
|
||||
public:
|
||||
|
||||
IGESCAFControl_ParameterController(const Handle(IGESCAFControl_ConfigurationNode)& theNode,
|
||||
const Standard_Boolean theUpdateStatic);
|
||||
|
||||
~IGESCAFControl_ParameterController();
|
||||
|
||||
protected:
|
||||
|
||||
void setStatic(const IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection theParameter);
|
||||
|
||||
private:
|
||||
|
||||
bool myToUpdateStaticParameters; //!< Flag to updating static parameters
|
||||
IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection myOldValues; //!< Container to save previous static parameters
|
||||
IGESCAFControl_ConfigurationNode::DE_SectionGlobal myOldGlobalValues; //!< Container to save previous global parameters
|
||||
};
|
||||
|
||||
//=======================================================================
|
||||
// function : IGESCAFControl_ParameterController
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
IGESCAFControl_ParameterController::IGESCAFControl_ParameterController(const Handle(IGESCAFControl_ConfigurationNode)& theNode,
|
||||
const Standard_Boolean theUpdateStatic)
|
||||
: myToUpdateStaticParameters(theUpdateStatic)
|
||||
{
|
||||
IGESControl_Controller::Init();
|
||||
IGESData::Init();
|
||||
if (!myToUpdateStaticParameters)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// Get previous values
|
||||
myOldValues.ReadBSplineContinuity =
|
||||
(IGESCAFControl_ConfigurationNode::ReadMode_BSplineContinuity)
|
||||
Interface_Static::IVal("read.iges.bspline.continuity");
|
||||
myOldValues.ReadPrecisionMode =
|
||||
(IGESCAFControl_ConfigurationNode::ReadMode_Precision)
|
||||
Interface_Static::IVal("read.precision.mode");
|
||||
myOldValues.ReadPrecisionVal =
|
||||
Interface_Static::RVal("read.precision.val");
|
||||
myOldValues.ReadMaxPrecisionMode =
|
||||
(IGESCAFControl_ConfigurationNode::ReadMode_MaxPrecision)
|
||||
Interface_Static::IVal("read.maxprecision.mode");
|
||||
myOldValues.ReadMaxPrecisionVal =
|
||||
Interface_Static::RVal("read.maxprecision.val");
|
||||
myOldValues.ReadSameParamMode =
|
||||
Interface_Static::IVal("read.stdsameparameter.mode") == 1;
|
||||
myOldValues.ReadSurfaceCurveMode =
|
||||
(IGESCAFControl_ConfigurationNode::ReadMode_SurfaceCurve)
|
||||
Interface_Static::IVal("read.surfacecurve.mode");
|
||||
myOldValues.EncodeRegAngle =
|
||||
Interface_Static::RVal("read.encoderegularity.angle") * 180.0 / M_PI;
|
||||
|
||||
myOldValues.ReadApproxd1 =
|
||||
Interface_Static::IVal("read.iges.bspline.approxd1.mode") == 1;
|
||||
myOldValues.ReadResourceName =
|
||||
Interface_Static::CVal("read.iges.resource.name");
|
||||
myOldValues.ReadSequence =
|
||||
Interface_Static::CVal("read.iges.sequence");
|
||||
myOldValues.ReadFaultyEntities =
|
||||
Interface_Static::IVal("read.iges.faulty.entities") == 1;
|
||||
myOldValues.ReadOnlyVisible =
|
||||
Interface_Static::IVal("read.iges.onlyvisible") == 1;
|
||||
|
||||
myOldValues.WriteBRepMode =
|
||||
(IGESCAFControl_ConfigurationNode::WriteMode_BRep)
|
||||
Interface_Static::IVal("write.iges.brep.mode");
|
||||
myOldValues.WriteConvertSurfaceMode =
|
||||
(IGESCAFControl_ConfigurationNode::WriteMode_ConvertSurface)
|
||||
Interface_Static::IVal("write.convertsurface.mode");
|
||||
myOldValues.WriteUnit =
|
||||
(UnitsMethods_LengthUnit)
|
||||
Interface_Static::IVal("write.iges.unit");
|
||||
myOldValues.WriteHeaderAuthor =
|
||||
Interface_Static::CVal("write.iges.header.author");
|
||||
myOldValues.WriteHeaderCompany =
|
||||
Interface_Static::CVal("write.iges.header.company");
|
||||
myOldValues.WriteHeaderProduct =
|
||||
Interface_Static::CVal("write.iges.header.product");
|
||||
myOldValues.WriteHeaderReciever =
|
||||
Interface_Static::CVal("write.iges.header.receiver");
|
||||
myOldValues.WriteResourceName =
|
||||
Interface_Static::CVal("write.iges.resource.name");
|
||||
myOldValues.WriteSequence =
|
||||
Interface_Static::CVal("write.iges.sequence");
|
||||
myOldValues.WritePrecisionMode =
|
||||
(IGESCAFControl_ConfigurationNode::WriteMode_PrecisionMode)
|
||||
Interface_Static::IVal("write.precision.mode");
|
||||
myOldValues.WritePrecisionVal =
|
||||
Interface_Static::RVal("write.precision.val");
|
||||
myOldValues.WritePlaneMode =
|
||||
(IGESCAFControl_ConfigurationNode::WriteMode_PlaneMode)
|
||||
Interface_Static::IVal("write.iges.plane.mode");
|
||||
myOldValues.WriteOffsetMode =
|
||||
Interface_Static::IVal("write.iges.offset.mode") == 1;
|
||||
|
||||
myOldGlobalValues.LengthUnit = 0.001 *
|
||||
UnitsMethods::GetLengthFactorValue(Interface_Static::IVal("xstep.cascade.unit"));
|
||||
// Set new values
|
||||
TCollection_AsciiString aStrUnit(
|
||||
UnitsMethods::DumpLengthUnit(theNode->GlobalParameters.LengthUnit));
|
||||
aStrUnit.UpperCase();
|
||||
Interface_Static::SetCVal("xstep.cascade.unit", aStrUnit.ToCString());
|
||||
UnitsMethods::SetCasCadeLengthUnit(theNode->GlobalParameters.LengthUnit);
|
||||
setStatic(theNode->InternalParameters);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : ~IGESCAFControl_ParameterController
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
IGESCAFControl_ParameterController::~IGESCAFControl_ParameterController()
|
||||
{
|
||||
if (!myToUpdateStaticParameters)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// Set new values
|
||||
TCollection_AsciiString aStrUnit(
|
||||
UnitsMethods::DumpLengthUnit(myOldGlobalValues.LengthUnit,
|
||||
UnitsMethods_LengthUnit_Meter));
|
||||
aStrUnit.UpperCase();
|
||||
Interface_Static::SetCVal("xstep.cascade.unit", aStrUnit.ToCString());
|
||||
setStatic(myOldValues);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : setStatic
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
void IGESCAFControl_ParameterController::setStatic(const IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection theParameter)
|
||||
{
|
||||
Interface_Static::SetIVal("read.iges.bspline.continuity",
|
||||
theParameter.ReadBSplineContinuity);
|
||||
Interface_Static::SetIVal("read.precision.mode",
|
||||
theParameter.ReadPrecisionMode);
|
||||
Interface_Static::SetRVal("read.precision.val",
|
||||
theParameter.ReadPrecisionVal);
|
||||
Interface_Static::SetIVal("read.maxprecision.mode",
|
||||
theParameter.ReadMaxPrecisionMode);
|
||||
Interface_Static::SetRVal("read.maxprecision.val",
|
||||
theParameter.ReadMaxPrecisionVal);
|
||||
Interface_Static::SetIVal("read.stdsameparameter.mode",
|
||||
theParameter.ReadSameParamMode);
|
||||
Interface_Static::SetIVal("read.surfacecurve.mode",
|
||||
theParameter.ReadSurfaceCurveMode);
|
||||
Interface_Static::SetRVal("read.encoderegularity.angle",
|
||||
theParameter.EncodeRegAngle * M_PI / 180.0);
|
||||
|
||||
Interface_Static::SetIVal("read.iges.bspline.approxd1.mode",
|
||||
theParameter.ReadApproxd1);
|
||||
Interface_Static::SetCVal("read.iges.resource.name",
|
||||
theParameter.ReadResourceName.ToCString());
|
||||
Interface_Static::SetCVal("read.iges.sequence",
|
||||
theParameter.ReadSequence.ToCString());
|
||||
Interface_Static::SetIVal("read.iges.faulty.entities",
|
||||
theParameter.ReadFaultyEntities);
|
||||
Interface_Static::SetIVal("read.iges.onlyvisible",
|
||||
theParameter.ReadOnlyVisible);
|
||||
|
||||
Interface_Static::SetIVal("write.iges.brep.mode",
|
||||
theParameter.WriteBRepMode);
|
||||
Interface_Static::SetIVal("write.convertsurface.mode",
|
||||
theParameter.WriteConvertSurfaceMode);
|
||||
Interface_Static::SetIVal("write.iges.unit",
|
||||
theParameter.WriteUnit);
|
||||
Interface_Static::SetCVal("write.iges.header.author",
|
||||
theParameter.WriteHeaderAuthor.ToCString());
|
||||
Interface_Static::SetCVal("write.iges.header.company",
|
||||
theParameter.WriteHeaderCompany.ToCString());
|
||||
Interface_Static::SetCVal("write.iges.header.product",
|
||||
theParameter.WriteHeaderProduct.ToCString());
|
||||
Interface_Static::SetCVal("write.iges.header.receiver",
|
||||
theParameter.WriteHeaderReciever.ToCString());
|
||||
Interface_Static::SetCVal("write.iges.resource.name",
|
||||
theParameter.WriteResourceName.ToCString());
|
||||
Interface_Static::SetCVal("write.iges.sequence",
|
||||
theParameter.WriteSequence.ToCString());
|
||||
Interface_Static::SetIVal("write.precision.mode",
|
||||
theParameter.WritePrecisionMode);
|
||||
Interface_Static::SetRVal("write.precision.val",
|
||||
theParameter.WritePrecisionVal);
|
||||
Interface_Static::SetIVal("write.iges.plane.mode",
|
||||
theParameter.WritePlaneMode);
|
||||
Interface_Static::SetIVal("write.iges.offset.mode",
|
||||
theParameter.WriteOffsetMode);
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : IGESCAFControl_Provider
|
||||
// purpose :
|
||||
@@ -42,99 +240,23 @@ IGESCAFControl_Provider::IGESCAFControl_Provider(const Handle(DE_ConfigurationNo
|
||||
{}
|
||||
|
||||
//=======================================================================
|
||||
// function : initStatic
|
||||
// function : STEPCAFControl_Provider
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
void IGESCAFControl_Provider::initStatic(const Handle(DE_ConfigurationNode)& theNode)
|
||||
void IGESCAFControl_Provider::personizeWS(Handle(XSControl_WorkSession)& theWS)
|
||||
{
|
||||
Handle(IGESCAFControl_ConfigurationNode) aNode = Handle(IGESCAFControl_ConfigurationNode)::DownCast(theNode);
|
||||
IGESData::Init();
|
||||
|
||||
// Get previous values
|
||||
myOldValues.ReadBSplineContinuity = (IGESCAFControl_ConfigurationNode::ReadMode_BSplineContinuity)Interface_Static::IVal("read.iges.bspline.continuity");
|
||||
myOldValues.ReadPrecisionMode = (IGESCAFControl_ConfigurationNode::ReadMode_Precision)Interface_Static::IVal("read.precision.mode");
|
||||
myOldValues.ReadPrecisionVal = Interface_Static::RVal("read.precision.val");
|
||||
myOldValues.ReadMaxPrecisionMode = (IGESCAFControl_ConfigurationNode::ReadMode_MaxPrecision)Interface_Static::IVal("read.maxprecision.mode");
|
||||
myOldValues.ReadMaxPrecisionVal = Interface_Static::RVal("read.maxprecision.val");
|
||||
myOldValues.ReadSameParamMode = Interface_Static::IVal("read.stdsameparameter.mode") == 1;
|
||||
myOldValues.ReadSurfaceCurveMode = (IGESCAFControl_ConfigurationNode::ReadMode_SurfaceCurve)Interface_Static::IVal("read.surfacecurve.mode");
|
||||
myOldValues.EncodeRegAngle = Interface_Static::RVal("read.encoderegularity.angle") * 180.0 / M_PI;
|
||||
|
||||
myOldValues.ReadApproxd1 = Interface_Static::IVal("read.iges.bspline.approxd1.mode") == 1;
|
||||
myOldValues.ReadResourceName = Interface_Static::CVal("read.iges.resource.name");
|
||||
myOldValues.ReadSequence = Interface_Static::CVal("read.iges.sequence");
|
||||
myOldValues.ReadFaultyEntities = Interface_Static::IVal("read.iges.faulty.entities") == 1;
|
||||
myOldValues.ReadOnlyVisible = Interface_Static::IVal("read.iges.onlyvisible") == 1;
|
||||
|
||||
myOldValues.WriteBRepMode = (IGESCAFControl_ConfigurationNode::WriteMode_BRep)Interface_Static::IVal("write.iges.brep.mode");
|
||||
myOldValues.WriteConvertSurfaceMode = (IGESCAFControl_ConfigurationNode::WriteMode_ConvertSurface)Interface_Static::IVal("write.convertsurface.mode");
|
||||
myOldValues.WriteUnit = (UnitsMethods_LengthUnit)Interface_Static::IVal("write.iges.unit");
|
||||
myOldValues.WriteHeaderAuthor = Interface_Static::CVal("write.iges.header.author");
|
||||
myOldValues.WriteHeaderCompany = Interface_Static::CVal("write.iges.header.company");
|
||||
myOldValues.WriteHeaderProduct = Interface_Static::CVal("write.iges.header.product");
|
||||
myOldValues.WriteHeaderReciever = Interface_Static::CVal("write.iges.header.receiver");
|
||||
myOldValues.WriteResourceName = Interface_Static::CVal("write.iges.resource.name");
|
||||
myOldValues.WriteSequence = Interface_Static::CVal("write.iges.sequence");
|
||||
myOldValues.WritePrecisionMode = (IGESCAFControl_ConfigurationNode::WriteMode_PrecisionMode)Interface_Static::IVal("write.precision.mode");
|
||||
myOldValues.WritePrecisionVal = Interface_Static::RVal("write.precision.val");
|
||||
myOldValues.WritePlaneMode = (IGESCAFControl_ConfigurationNode::WriteMode_PlaneMode)Interface_Static::IVal("write.iges.plane.mode");
|
||||
myOldValues.WriteOffsetMode = Interface_Static::IVal("write.iges.offset.mode") == 1;
|
||||
|
||||
myOldLengthUnit = Interface_Static::IVal("xstep.cascade.unit");
|
||||
|
||||
// Set new values
|
||||
UnitsMethods::SetCasCadeLengthUnit(aNode->GlobalParameters.LengthUnit, UnitsMethods_LengthUnit_Millimeter);
|
||||
TCollection_AsciiString aStrUnit(UnitsMethods::DumpLengthUnit(aNode->GlobalParameters.LengthUnit));
|
||||
aStrUnit.UpperCase();
|
||||
Interface_Static::SetCVal("xstep.cascade.unit", aStrUnit.ToCString());
|
||||
setStatic(aNode->InternalParameters);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : setStatic
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
void IGESCAFControl_Provider::setStatic(const IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection theParameter)
|
||||
{
|
||||
Interface_Static::SetIVal("read.iges.bspline.continuity", theParameter.ReadBSplineContinuity);
|
||||
Interface_Static::SetIVal("read.precision.mode", theParameter.ReadPrecisionMode);
|
||||
Interface_Static::SetRVal("read.precision.val", theParameter.ReadPrecisionVal);
|
||||
Interface_Static::SetIVal("read.maxprecision.mode", theParameter.ReadMaxPrecisionMode);
|
||||
Interface_Static::SetRVal("read.maxprecision.val", theParameter.ReadMaxPrecisionVal);
|
||||
Interface_Static::SetIVal("read.stdsameparameter.mode", theParameter.ReadSameParamMode);
|
||||
Interface_Static::SetIVal("read.surfacecurve.mode", theParameter.ReadSurfaceCurveMode);
|
||||
Interface_Static::SetRVal("read.encoderegularity.angle", theParameter.EncodeRegAngle * M_PI / 180.0);
|
||||
|
||||
Interface_Static::SetIVal("read.iges.bspline.approxd1.mode", theParameter.ReadApproxd1);
|
||||
Interface_Static::SetCVal("read.iges.resource.name", theParameter.ReadResourceName.ToCString());
|
||||
Interface_Static::SetCVal("read.iges.sequence", theParameter.ReadSequence.ToCString());
|
||||
Interface_Static::SetIVal("read.iges.faulty.entities", theParameter.ReadFaultyEntities);
|
||||
Interface_Static::SetIVal("read.iges.onlyvisible", theParameter.ReadOnlyVisible);
|
||||
|
||||
Interface_Static::SetIVal("write.iges.brep.mode", theParameter.WriteBRepMode);
|
||||
Interface_Static::SetIVal("write.convertsurface.mode", theParameter.WriteConvertSurfaceMode);
|
||||
Interface_Static::SetIVal("write.iges.unit", theParameter.WriteUnit);
|
||||
Interface_Static::SetCVal("write.iges.header.author", theParameter.WriteHeaderAuthor.ToCString());
|
||||
Interface_Static::SetCVal("write.iges.header.company", theParameter.WriteHeaderCompany.ToCString());
|
||||
Interface_Static::SetCVal("write.iges.header.product", theParameter.WriteHeaderProduct.ToCString());
|
||||
Interface_Static::SetCVal("write.iges.header.receiver", theParameter.WriteHeaderReciever.ToCString());
|
||||
Interface_Static::SetCVal("write.iges.resource.name", theParameter.WriteResourceName.ToCString());
|
||||
Interface_Static::SetCVal("write.iges.sequence", theParameter.WriteSequence.ToCString());
|
||||
Interface_Static::SetIVal("write.precision.mode", theParameter.WritePrecisionMode);
|
||||
Interface_Static::SetRVal("write.precision.val", theParameter.WritePrecisionVal);
|
||||
Interface_Static::SetIVal("write.iges.plane.mode", theParameter.WritePlaneMode);
|
||||
Interface_Static::SetIVal("write.iges.offset.mode", theParameter.WriteOffsetMode);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : resetStatic
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
void IGESCAFControl_Provider::resetStatic()
|
||||
{
|
||||
Interface_Static::SetIVal("xstep.cascade.unit", myOldLengthUnit);
|
||||
UnitsMethods::SetCasCadeLengthUnit(myOldLengthUnit);
|
||||
setStatic(myOldValues);
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -148,50 +270,70 @@ bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
{
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: theDocument shouldn't be null";
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : "
|
||||
<< "Null document";
|
||||
return false;
|
||||
}
|
||||
if (!GetNode()->IsKind(STANDARD_TYPE(IGESCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(IGESCAFControl_ConfigurationNode) aNode = Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
initStatic(aNode);
|
||||
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument, aNode->GlobalParameters.LengthUnit, UnitsMethods_LengthUnit_Millimeter);
|
||||
IGESCAFControl_Reader aReader;
|
||||
if (!theWS.IsNull())
|
||||
Handle(IGESCAFControl_ConfigurationNode) aNode =
|
||||
Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
IGESCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument,
|
||||
aNode->GlobalParameters.LengthUnit,
|
||||
UnitsMethods_LengthUnit_Millimeter);
|
||||
const Standard_Boolean toUseLoaded = thePath == ".";
|
||||
TCollection_AsciiString aFile;
|
||||
if (toUseLoaded)
|
||||
{
|
||||
aReader.SetWS(theWS);
|
||||
aFile = theWS->LoadedFile();
|
||||
Message::SendInfo() << "Model taken from the IGES session : "
|
||||
<< aFile;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
aFile = thePath;
|
||||
Message::SendInfo() << "File IGES to read : "
|
||||
<< aFile;
|
||||
}
|
||||
IGESCAFControl_Reader aReader(theWS, !toUseLoaded);
|
||||
aReader.SetReadVisible(aNode->InternalParameters.ReadOnlyVisible);
|
||||
|
||||
aReader.SetColorMode(aNode->InternalParameters.ReadColor);
|
||||
aReader.SetNameMode(aNode->InternalParameters.ReadName);
|
||||
aReader.SetLayerMode(aNode->InternalParameters.ReadLayer);
|
||||
|
||||
Handle(IGESData_IGESModel) aModel = aReader.IGESModel();
|
||||
if (aModel.IsNull())
|
||||
{
|
||||
aModel = Handle(IGESData_IGESModel)::DownCast(theWS->NewModel());
|
||||
}
|
||||
aModel->ClearHeader();
|
||||
aModel->ChangeGlobalSection().SetCascadeUnit(aNode->GlobalParameters.LengthUnit);
|
||||
IFSelect_ReturnStatus aReadStat = IFSelect_RetVoid;
|
||||
aReadStat = aReader.ReadFile(thePath.ToCString());
|
||||
if (!toUseLoaded)
|
||||
{
|
||||
aReadStat = aReader.ReadFile(thePath.ToCString());
|
||||
}
|
||||
else if (theWS->NbStartingEntities() > 0)
|
||||
{
|
||||
aReadStat = IFSelect_RetDone;
|
||||
}
|
||||
if (aReadStat != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: abandon, no model loaded";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : ["
|
||||
<< aFile << "] : abandon, no model loaded";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!aReader.Transfer(theDocument, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Cannot read any relevant data from the IGES file";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : [" <<
|
||||
aFile << "] : Cannot read any relevant data from the IGES file";
|
||||
return false;
|
||||
}
|
||||
resetStatic();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -206,18 +348,35 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
{
|
||||
if (!GetNode()->IsKind(STANDARD_TYPE(IGESCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(IGESCAFControl_ConfigurationNode) aNode = Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
initStatic(aNode);
|
||||
Handle(IGESCAFControl_ConfigurationNode) aNode =
|
||||
Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
IGESCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
TCollection_AsciiString aUnit(
|
||||
UnitsMethods::DumpLengthUnit(aNode->InternalParameters.WriteUnit));
|
||||
aUnit.UpperCase();
|
||||
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument, aNode->InternalParameters.WriteUnit, UnitsMethods_LengthUnit_Millimeter);
|
||||
IGESCAFControl_Writer aWriter;
|
||||
if (!theWS.IsNull())
|
||||
IGESCAFControl_Writer aWriter(theWS, Standard_True);
|
||||
if (aNode->InternalParameters.WriteUnit > UnitsMethods_LengthUnit_Undefined &&
|
||||
aNode->InternalParameters.WriteUnit <= UnitsMethods_LengthUnit_Microinch)
|
||||
{
|
||||
aWriter = IGESCAFControl_Writer(theWS);
|
||||
Handle(IGESData_IGESModel) aModel = aWriter.Model();
|
||||
IGESData_GlobalSection aGSesction = aModel->GlobalSection();
|
||||
Handle(TCollection_HAsciiString) aName = new TCollection_HAsciiString(
|
||||
IGESData_BasicEditor::UnitFlagName(aNode->InternalParameters.WriteUnit));
|
||||
if (aGSesction.UnitFlag() == 3)
|
||||
{
|
||||
aGSesction.SetUnitName(aName);
|
||||
}
|
||||
else if (aGSesction.UnitFlag() > 0)
|
||||
{
|
||||
aGSesction.SetUnitFlag(aNode->InternalParameters.WriteUnit);
|
||||
}
|
||||
aModel->SetGlobalSection(aGSesction);
|
||||
}
|
||||
aWriter.SetColorMode(aNode->InternalParameters.WriteColor);
|
||||
aWriter.SetNameMode(aNode->InternalParameters.WriteName);
|
||||
@@ -225,46 +384,25 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
|
||||
if (!aWriter.Transfer(theDocument, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: The document cannot be translated or gives no result";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : "
|
||||
<< "The document cannot be translated or gives no result";
|
||||
return false;
|
||||
}
|
||||
if (thePath == ".")
|
||||
{
|
||||
Message::SendInfo() << "Document has been translated into the session";
|
||||
return true;
|
||||
}
|
||||
if (!aWriter.Write(thePath.ToCString()))
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Write failed";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : [" <<
|
||||
thePath << "] : Write failed";
|
||||
return false;
|
||||
}
|
||||
resetStatic();
|
||||
Message::SendInfo() << "IGES file [" << thePath << "] Successfully written";
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(XSControl_WorkSession) aWS;
|
||||
return Read(thePath, theDocument, aWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(XSControl_WorkSession) aWS;
|
||||
return Write(thePath, theDocument, aWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
@@ -277,36 +415,39 @@ bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
(void)theProgress;
|
||||
if (!GetNode()->IsKind(STANDARD_TYPE(IGESCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(IGESCAFControl_ConfigurationNode) aNode = Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
initStatic(aNode);
|
||||
Handle(IGESCAFControl_ConfigurationNode) aNode =
|
||||
Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
IGESCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
IGESControl_Reader aReader;
|
||||
if (!theWS.IsNull())
|
||||
aReader.SetWS(theWS);
|
||||
Handle(IGESData_IGESModel) aModel = aReader.IGESModel();
|
||||
if (aModel.IsNull())
|
||||
{
|
||||
aReader.SetWS(theWS);
|
||||
aModel = Handle(IGESData_IGESModel)::DownCast(theWS->NewModel());
|
||||
}
|
||||
aModel->ClearHeader();
|
||||
aModel->ChangeGlobalSection().SetCascadeUnit(aNode->GlobalParameters.LengthUnit);
|
||||
aReader.SetReadVisible(aNode->InternalParameters.ReadOnlyVisible);
|
||||
IFSelect_ReturnStatus aReadStat = IFSelect_RetVoid;
|
||||
aReadStat = aReader.ReadFile(thePath.ToCString());
|
||||
if (aReadStat != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Could not read file, no model loaded";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : [" <<
|
||||
thePath << "] : Could not read file, no model loaded";
|
||||
return false;
|
||||
}
|
||||
if (aReader.TransferRoots() <= 0)
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Cannot read any relevant data from the IGES file";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : [" <<
|
||||
thePath << "] : Cannot read any relevant data from the IGES file";
|
||||
return false;
|
||||
}
|
||||
theShape = aReader.OneShape();
|
||||
resetStatic();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -323,58 +464,36 @@ bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
(void)theProgress;
|
||||
if (!GetNode()->IsKind(STANDARD_TYPE(IGESCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the IGESCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(IGESCAFControl_ConfigurationNode) aNode = Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
initStatic(aNode);
|
||||
TCollection_AsciiString aUnit(UnitsMethods::DumpLengthUnit(aNode->InternalParameters.WriteUnit));
|
||||
Handle(IGESCAFControl_ConfigurationNode) aNode =
|
||||
Handle(IGESCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
IGESCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
TCollection_AsciiString aUnit(
|
||||
UnitsMethods::DumpLengthUnit(aNode->InternalParameters.WriteUnit));
|
||||
aUnit.UpperCase();
|
||||
IGESControl_Writer aWriter(aUnit.ToCString(),
|
||||
aNode->InternalParameters.WriteBRepMode);
|
||||
Standard_Boolean aIsOk = aWriter.AddShape(theShape);
|
||||
if (!aIsOk)
|
||||
{
|
||||
Message::SendFail() << "IGESCAFControl_Provider: Shape not written";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : "
|
||||
<< "Can't translate shape to IGES model";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(aWriter.Write(thePath.ToCString())))
|
||||
{
|
||||
Message::SendFail() << "IGESCAFControl_Provider: Error on writing file " << thePath;
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: IGESCAFControl_Provider : "
|
||||
<< "Can't write IGES file" << thePath;
|
||||
return false;
|
||||
}
|
||||
resetStatic();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool IGESCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(XSControl_WorkSession) aWS;
|
||||
return Read(thePath, theShape, aWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool IGESCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(XSControl_WorkSession) aWS;
|
||||
return Write(thePath, theShape, aWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : GetFormat
|
||||
// purpose :
|
||||
|
@@ -15,6 +15,7 @@
|
||||
#define _IGESCAFControl_Provider_HeaderFile
|
||||
|
||||
#include <DE_Provider.hxx>
|
||||
#include <DE_ConfigurationNode.hxx>
|
||||
#include <IGESCAFControl_ConfigurationNode.hxx>
|
||||
|
||||
//! The class to transfer IGES files.
|
||||
@@ -65,23 +66,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
@@ -105,24 +89,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//! Gets CAD format name of associated provider
|
||||
@@ -133,19 +99,24 @@ public:
|
||||
//! @return provider's vendor name
|
||||
Standard_EXPORT virtual TCollection_AsciiString GetVendor() const Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//! Sets parameter to update static parameter, that true by default
|
||||
void SetToUpdateStaticParameters(const bool theToUpdate) { myToUpdateStaticParameters = theToUpdate; }
|
||||
|
||||
//! Gets parameter to update static parameter, that true by default
|
||||
bool ToUpdateStaticParameters() const { return myToUpdateStaticParameters; }
|
||||
|
||||
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 IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection theParameter);
|
||||
private:
|
||||
|
||||
//! Reset used interface static variables
|
||||
void resetStatic();
|
||||
|
||||
IGESCAFControl_ConfigurationNode::IGESCAFControl_InternalSection myOldValues;
|
||||
int myOldLengthUnit = 1;
|
||||
bool myToUpdateStaticParameters = true; //!< Flag to updating static parameters
|
||||
|
||||
};
|
||||
|
||||
|
@@ -53,43 +53,43 @@ bool RWGltf_ConfigurationNode::Load(const Handle(DE_ConfigurationContext)& theRe
|
||||
{
|
||||
TCollection_AsciiString aScope = THE_CONFIGURATION_SCOPE() + "." + GetFormat() + "." + GetVendor();
|
||||
|
||||
InternalParameters.FileLengthUnit =
|
||||
InternalParameters.FileLengthUnit =
|
||||
theResource->RealVal("file.length.unit", InternalParameters.FileLengthUnit, aScope);
|
||||
InternalParameters.SystemCS = (RWMesh_CoordinateSystem)
|
||||
(theResource->IntegerVal("system.cs", (int)InternalParameters.SystemCS, aScope) % 2);
|
||||
InternalParameters.FileCS = (RWMesh_CoordinateSystem)
|
||||
(theResource->IntegerVal("file.cs", (int)InternalParameters.SystemCS, aScope) % 2);
|
||||
|
||||
InternalParameters.ReadSinglePrecision =
|
||||
InternalParameters.ReadSinglePrecision =
|
||||
theResource->BooleanVal("read.single.precision", InternalParameters.ReadSinglePrecision, aScope);
|
||||
InternalParameters.ReadCreateShapes =
|
||||
InternalParameters.ReadCreateShapes =
|
||||
theResource->BooleanVal("read.create.shapes", InternalParameters.ReadCreateShapes, aScope);
|
||||
InternalParameters.ReadRootPrefix =
|
||||
InternalParameters.ReadRootPrefix =
|
||||
theResource->StringVal("read.root.prefix", InternalParameters.ReadRootPrefix, aScope);
|
||||
InternalParameters.ReadFillDoc =
|
||||
InternalParameters.ReadFillDoc =
|
||||
theResource->BooleanVal("read.fill.doc", InternalParameters.ReadFillDoc, aScope);
|
||||
InternalParameters.ReadFillIncomplete =
|
||||
InternalParameters.ReadFillIncomplete =
|
||||
theResource->BooleanVal("read.fill.incomplete", InternalParameters.ReadFillIncomplete, aScope);
|
||||
InternalParameters.ReadMemoryLimitMiB =
|
||||
InternalParameters.ReadMemoryLimitMiB =
|
||||
theResource->IntegerVal("read.memory.limit.mib", InternalParameters.ReadMemoryLimitMiB, aScope);
|
||||
InternalParameters.ReadParallel =
|
||||
InternalParameters.ReadParallel =
|
||||
theResource->BooleanVal("read.parallel", InternalParameters.ReadParallel, aScope);
|
||||
InternalParameters.ReadSkipEmptyNodes =
|
||||
InternalParameters.ReadSkipEmptyNodes =
|
||||
theResource->BooleanVal("read.skip.empty.nodes", InternalParameters.ReadSkipEmptyNodes, aScope);
|
||||
InternalParameters.ReadLoadAllScenes =
|
||||
InternalParameters.ReadLoadAllScenes =
|
||||
theResource->BooleanVal("read.load.all.scenes", InternalParameters.ReadLoadAllScenes, aScope);
|
||||
InternalParameters.ReadUseMeshNameAsFallback =
|
||||
InternalParameters.ReadUseMeshNameAsFallback =
|
||||
theResource->BooleanVal("read.use.mesh.name.as.fallback", InternalParameters.ReadUseMeshNameAsFallback, aScope);
|
||||
InternalParameters.ReadSkipLateDataLoading =
|
||||
InternalParameters.ReadSkipLateDataLoading =
|
||||
theResource->BooleanVal("read.skip.late.data.loading", InternalParameters.ReadSkipLateDataLoading, aScope);
|
||||
InternalParameters.ReadKeepLateData =
|
||||
InternalParameters.ReadKeepLateData =
|
||||
theResource->BooleanVal("read.keep.late.data", InternalParameters.ReadKeepLateData, aScope);
|
||||
InternalParameters.ReadPrintDebugMessages =
|
||||
InternalParameters.ReadPrintDebugMessages =
|
||||
theResource->BooleanVal("read.print.debug.message", InternalParameters.ReadPrintDebugMessages, aScope);
|
||||
|
||||
InternalParameters.WriteComment =
|
||||
InternalParameters.WriteComment =
|
||||
theResource->StringVal("write.comment", InternalParameters.WriteComment, aScope);
|
||||
InternalParameters.WriteAuthor =
|
||||
InternalParameters.WriteAuthor =
|
||||
theResource->StringVal("write.author", InternalParameters.WriteAuthor, aScope);
|
||||
|
||||
InternalParameters.WriteTrsfFormat = (RWGltf_WriterTrsfFormat)
|
||||
@@ -98,14 +98,43 @@ bool RWGltf_ConfigurationNode::Load(const Handle(DE_ConfigurationContext)& theRe
|
||||
(theResource->IntegerVal("write.node.name.format", InternalParameters.WriteNodeNameFormat, aScope) % (RWMesh_NameFormat_ProductAndInstanceAndOcaf + 1));
|
||||
InternalParameters.WriteMeshNameFormat = (RWMesh_NameFormat)
|
||||
(theResource->IntegerVal("write.mesh.name.format", InternalParameters.WriteMeshNameFormat, aScope) % (RWMesh_NameFormat_ProductAndInstanceAndOcaf + 1));
|
||||
InternalParameters.WriteForcedUVExport =
|
||||
|
||||
// Draco parameters
|
||||
InternalParameters.WriteDracoParameters.DracoCompression =
|
||||
theResource->BooleanVal("write.draco.compression",
|
||||
InternalParameters.WriteDracoParameters.DracoCompression, aScope);
|
||||
InternalParameters.WriteDracoParameters.CompressionLevel =
|
||||
theResource->IntegerVal("write.draco.level",
|
||||
InternalParameters.WriteDracoParameters.CompressionLevel, aScope);
|
||||
InternalParameters.WriteDracoParameters.QuantizePositionBits =
|
||||
theResource->IntegerVal("write.draco.position.bits",
|
||||
InternalParameters.WriteDracoParameters.QuantizePositionBits, aScope);
|
||||
InternalParameters.WriteDracoParameters.QuantizeNormalBits =
|
||||
theResource->IntegerVal("write.draco.normal.bits",
|
||||
InternalParameters.WriteDracoParameters.QuantizeNormalBits, aScope);
|
||||
InternalParameters.WriteDracoParameters.QuantizeTexcoordBits =
|
||||
theResource->IntegerVal("write.draco.texture.bits",
|
||||
InternalParameters.WriteDracoParameters.QuantizeTexcoordBits, aScope);
|
||||
InternalParameters.WriteDracoParameters.QuantizeColorBits =
|
||||
theResource->IntegerVal("write.draco.color.bits",
|
||||
InternalParameters.WriteDracoParameters.QuantizeColorBits, aScope);
|
||||
InternalParameters.WriteDracoParameters.QuantizeGenericBits =
|
||||
theResource->IntegerVal("write.draco.generic.bits",
|
||||
InternalParameters.WriteDracoParameters.QuantizeGenericBits, aScope);
|
||||
InternalParameters.WriteDracoParameters.UnifiedQuantization =
|
||||
theResource->BooleanVal("write.draco.unified.quantization",
|
||||
InternalParameters.WriteDracoParameters.UnifiedQuantization, aScope);
|
||||
|
||||
InternalParameters.WriteForcedUVExport =
|
||||
theResource->BooleanVal("write.forced.uv.export", InternalParameters.WriteForcedUVExport, aScope);
|
||||
InternalParameters.WriteEmbedTexturesInGlb =
|
||||
InternalParameters.WriteEmbedTexturesInGlb =
|
||||
theResource->BooleanVal("write.embed.textures.in.glb", InternalParameters.WriteEmbedTexturesInGlb, aScope);
|
||||
InternalParameters.WriteMergeFaces =
|
||||
InternalParameters.WriteMergeFaces =
|
||||
theResource->BooleanVal("write.merge.faces", InternalParameters.WriteMergeFaces, aScope);
|
||||
InternalParameters.WriteSplitIndices16 =
|
||||
InternalParameters.WriteSplitIndices16 =
|
||||
theResource->BooleanVal("write.split.indices16", InternalParameters.WriteSplitIndices16, aScope);
|
||||
InternalParameters.WriteParallel =
|
||||
theResource->BooleanVal("write.parallel", InternalParameters.WriteParallel, aScope);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -258,6 +287,63 @@ TCollection_AsciiString RWGltf_ConfigurationNode::Save() const
|
||||
aResult += aScope + "write.mesh.name.format :\t " + InternalParameters.WriteMeshNameFormat + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
// Draco parameters
|
||||
aResult += "!\n";
|
||||
aResult += "!Flag to use Draco compression. If it is TRUE, compression is used\n";
|
||||
aResult += "!Default value: 0(false). Available values: 0(false), 1(true)\n";
|
||||
aResult += aScope + "write.draco.compression :\t " +
|
||||
InternalParameters.WriteDracoParameters.DracoCompression + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Draco compression level\n";
|
||||
aResult += "!Default value: 7. Available values: [0-10]\n";
|
||||
aResult += aScope + "write.draco.level :\t " +
|
||||
InternalParameters.WriteDracoParameters.CompressionLevel + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Quantization bits for position attribute\n";
|
||||
aResult += "!Default value: 14. Available values: any positive value\n";
|
||||
aResult += aScope + "write.draco.position.bits :\t " +
|
||||
InternalParameters.WriteDracoParameters.QuantizePositionBits + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Quantization bits for normal attribute\n";
|
||||
aResult += "!Default value: 10. Available values: any positive value\n";
|
||||
aResult += aScope + "write.draco.normal.bits :\t " +
|
||||
InternalParameters.WriteDracoParameters.QuantizeNormalBits + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Quantization bits for texture coordinate attribute\n";
|
||||
aResult += "!Default value: 12. Available values: any positive value\n";
|
||||
aResult += aScope + "write.draco.texture.bits :\t " +
|
||||
InternalParameters.WriteDracoParameters.QuantizeTexcoordBits + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Quantization bits for color attributes\n";
|
||||
aResult += "!Default value: 8. Available values: any positive value\n";
|
||||
aResult += aScope + "write.draco.color.bits :\t " +
|
||||
InternalParameters.WriteDracoParameters.QuantizeColorBits + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Quantization bits for skinning and custom attributes\n";
|
||||
aResult += "!Default value: 12. Available values: any positive value\n";
|
||||
aResult += aScope + "write.draco.generic.bits :\t " +
|
||||
InternalParameters.WriteDracoParameters.QuantizeGenericBits + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Quantize positions of all primitives using the same quantization grid\n";
|
||||
aResult += "!Default value: 0(false). Available values: 0(false), 1(true)\n";
|
||||
aResult += aScope + "write.draco.unified.quantization :\t " +
|
||||
InternalParameters.WriteDracoParameters.UnifiedQuantization + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Export UV coordinates even if there are no mapped texture\n";
|
||||
aResult += "!Default value: 0(false). Available values: 0(false), 1(true)\n";
|
||||
@@ -282,6 +368,12 @@ TCollection_AsciiString RWGltf_ConfigurationNode::Save() const
|
||||
aResult += aScope + "write.split.indices16 :\t " + InternalParameters.WriteSplitIndices16 + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Flag to use multithreading\n";
|
||||
aResult += "!Default value: 0(false). Available values: 0(false), 1(true)\n";
|
||||
aResult += aScope + "write.parallel :\t " + InternalParameters.WriteParallel + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!*****************************************************************************\n";
|
||||
return aResult;
|
||||
}
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
#include <DE_ConfigurationNode.hxx>
|
||||
#include <RWMesh_CoordinateSystem.hxx>
|
||||
#include <RWGltf_DracoParameters.hxx>
|
||||
#include <RWGltf_WriterTrsfFormat.hxx>
|
||||
#include <RWMesh_NameFormat.hxx>
|
||||
|
||||
@@ -107,10 +108,12 @@ public:
|
||||
RWGltf_WriterTrsfFormat WriteTrsfFormat = RWGltf_WriterTrsfFormat_Compact; //!< Transformation format to write into glTF file
|
||||
RWMesh_NameFormat WriteNodeNameFormat = RWMesh_NameFormat_InstanceOrProduct; //!< Name format for exporting Nodes
|
||||
RWMesh_NameFormat WriteMeshNameFormat = RWMesh_NameFormat_Product; //!< Name format for exporting Meshes
|
||||
RWGltf_DracoParameters WriteDracoParameters; //!< Defines draco compression parameters
|
||||
bool WriteForcedUVExport = false; //!< Export UV coordinates even if there are no mapped texture
|
||||
bool WriteEmbedTexturesInGlb = true; //!< Flag to write image textures into GLB file
|
||||
bool WriteMergeFaces = false; //!< Flag to merge faces within a single part
|
||||
bool WriteSplitIndices16 = false; //!< Flag to prefer keeping 16-bit indexes while merging face
|
||||
bool WriteParallel = false; //!< Flag to use multithreading
|
||||
} InternalParameters;
|
||||
};
|
||||
|
||||
|
@@ -20,13 +20,14 @@
|
||||
#include <XCAFDoc_ShapeTool.hxx>
|
||||
#include <XCAFDoc_DocumentTool.hxx>
|
||||
|
||||
namespace
|
||||
namespace
|
||||
{
|
||||
//=======================================================================
|
||||
// function : SetReaderParameters
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
static void SetReaderParameters(RWGltf_CafReader& theReader, const Handle(RWGltf_ConfigurationNode) theNode)
|
||||
static void SetReaderParameters(RWGltf_CafReader& theReader,
|
||||
const Handle(RWGltf_ConfigurationNode) theNode)
|
||||
{
|
||||
theReader.SetDoublePrecision(!theNode->InternalParameters.ReadSinglePrecision);
|
||||
theReader.SetSystemLengthUnit(theNode->GlobalParameters.LengthUnit / 1000);
|
||||
@@ -73,7 +74,36 @@ bool RWGltf_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theDocument, theProgress);
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error: RWGltf_Provider : "
|
||||
<< "Null document";
|
||||
return false;
|
||||
}
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(RWGltf_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error: RWGltf_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWGltf_ConfigurationNode) aNode =
|
||||
Handle(RWGltf_ConfigurationNode)::DownCast(GetNode());
|
||||
RWGltf_CafReader aReader;
|
||||
aReader.SetDocument(theDocument);
|
||||
SetReaderParameters(aReader, aNode);
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument,
|
||||
aNode->GlobalParameters.LengthUnit,
|
||||
UnitsMethods_LengthUnit_Millimeter);
|
||||
if (!aReader.Perform(thePath, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error: RWGltf_Provider : [" <<
|
||||
thePath << "] : Cannot read any relevant data from the GLTF file";
|
||||
return false;
|
||||
}
|
||||
myExternalFiles = aReader.ExternalFiles();
|
||||
myMetadata = aReader.Metadata();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -86,58 +116,15 @@ bool RWGltf_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWGltf_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (theDocument.IsNull())
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(RWGltf_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWGltf_Provider during reading the file " <<
|
||||
thePath << "\t: theDocument shouldn't be null";
|
||||
Message::SendFail() << "Error: RWGltf_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
if (GetNode().IsNull() || (!GetNode().IsNull() && !GetNode()->IsKind(STANDARD_TYPE(RWGltf_ConfigurationNode))))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWGltf_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWGltf_ConfigurationNode) aNode = Handle(RWGltf_ConfigurationNode)::DownCast(GetNode());
|
||||
RWGltf_CafReader aReader;
|
||||
aReader.SetDocument(theDocument);
|
||||
SetReaderParameters(aReader, aNode);
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument, aNode->GlobalParameters.LengthUnit, UnitsMethods_LengthUnit_Millimeter);
|
||||
if (!aReader.Perform(thePath, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWGltf_Provider during reading the file " << thePath;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWGltf_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(RWGltf_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWGltf_Provider during writing the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWGltf_ConfigurationNode) aNode = Handle(RWGltf_ConfigurationNode)::DownCast(GetNode());
|
||||
Handle(RWGltf_ConfigurationNode) aNode =
|
||||
Handle(RWGltf_ConfigurationNode)::DownCast(GetNode());
|
||||
|
||||
RWMesh_CoordinateSystemConverter aConverter;
|
||||
aConverter.SetInputLengthUnit(aNode->GlobalParameters.LengthUnit / 1000);
|
||||
@@ -159,16 +146,19 @@ bool RWGltf_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
anExt.LowerCase();
|
||||
RWGltf_CafWriter aWriter(thePath, anExt.EndsWith(".glb"));
|
||||
aWriter.SetCoordinateSystemConverter(aConverter);
|
||||
aWriter.SetCompressionParameters(aNode->InternalParameters.WriteDracoParameters);
|
||||
aWriter.SetTransformationFormat(aNode->InternalParameters.WriteTrsfFormat);
|
||||
aWriter.SetNodeNameFormat(aNode->InternalParameters.WriteNodeNameFormat);
|
||||
aWriter.SetMeshNameFormat(aNode->InternalParameters.WriteMeshNameFormat);
|
||||
aWriter.SetForcedUVExport(aNode->InternalParameters.WriteForcedUVExport);
|
||||
aWriter.SetToEmbedTexturesInGlb(aNode->InternalParameters.WriteEmbedTexturesInGlb);
|
||||
aWriter.SetMergeFaces(aNode->InternalParameters.WriteMergeFaces);
|
||||
aWriter.SetParallel(aNode->InternalParameters.WriteParallel);
|
||||
aWriter.SetSplitIndices16(aNode->InternalParameters.WriteSplitIndices16);
|
||||
if (!aWriter.Perform(theDocument, aFileInfo, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWGltf_Provider during writing the file " << thePath;
|
||||
Message::SendFail() << "Error: RWGltf_Provider : [" <<
|
||||
thePath << "] : Cannot write any relevant data to the GLTF file";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -184,7 +174,27 @@ bool RWGltf_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theShape, theProgress);
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(RWGltf_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error: RWGltf_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWGltf_ConfigurationNode) aNode =
|
||||
Handle(RWGltf_ConfigurationNode)::DownCast(GetNode());
|
||||
RWGltf_CafReader aReader;
|
||||
SetReaderParameters(aReader, aNode);
|
||||
if (!aReader.Perform(thePath, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error: RWGltf_Provider : [" <<
|
||||
thePath << "] : Cannot read any relevant data from the GLTF file";
|
||||
return false;
|
||||
}
|
||||
theShape = aReader.SingleShape();
|
||||
myExternalFiles = aReader.ExternalFiles();
|
||||
myMetadata = aReader.Metadata();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -197,47 +207,10 @@ bool RWGltf_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWGltf_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(RWGltf_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWGltf_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWGltf_ConfigurationNode) aNode = Handle(RWGltf_ConfigurationNode)::DownCast(GetNode());
|
||||
RWGltf_CafReader aReader;
|
||||
SetReaderParameters(aReader, aNode);
|
||||
if (!aReader.Perform(thePath, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWGltf_Provider during reading the file " << thePath;
|
||||
return false;
|
||||
}
|
||||
theShape = aReader.SingleShape();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWGltf_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(TDocStd_Document) aDoc = new TDocStd_Document("BinXCAF");
|
||||
Handle(XCAFDoc_ShapeTool) aShTool = XCAFDoc_DocumentTool::ShapeTool(aDoc->Main());
|
||||
aShTool->AddShape(theShape);
|
||||
return Write(thePath, aDoc, theProgress);
|
||||
return Write(thePath, aDoc, theWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -66,24 +66,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
@@ -106,24 +88,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//! Gets CAD format name of associated provider
|
||||
@@ -134,6 +98,18 @@ public:
|
||||
//! @return provider's vendor name
|
||||
Standard_EXPORT virtual TCollection_AsciiString GetVendor() const Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//!
|
||||
const TColStd_IndexedDataMapOfStringString& GetMetadata() const { return myMetadata; }
|
||||
|
||||
//!
|
||||
const NCollection_IndexedMap<TCollection_AsciiString>& GetExternalFiles() const { return myExternalFiles; }
|
||||
|
||||
private:
|
||||
|
||||
TColStd_IndexedDataMapOfStringString myMetadata; //!<
|
||||
NCollection_IndexedMap<TCollection_AsciiString> myExternalFiles; //!<
|
||||
};
|
||||
|
||||
#endif // _RWGltf_Provider_HeaderFile
|
||||
|
@@ -63,6 +63,8 @@ bool RWObj_ConfigurationNode::Load(const Handle(DE_ConfigurationContext)& theRes
|
||||
theResource->BooleanVal("read.single.precision", InternalParameters.ReadSinglePrecision, aScope);
|
||||
InternalParameters.ReadCreateShapes =
|
||||
theResource->BooleanVal("read.create.shapes", InternalParameters.ReadCreateShapes, aScope);
|
||||
InternalParameters.ReadCreateSingle =
|
||||
theResource->BooleanVal("read.create.single", InternalParameters.ReadCreateSingle, aScope);
|
||||
InternalParameters.ReadRootPrefix =
|
||||
theResource->StringVal("read.root.prefix", InternalParameters.ReadRootPrefix, aScope);
|
||||
InternalParameters.ReadFillDoc =
|
||||
@@ -123,11 +125,17 @@ TCollection_AsciiString RWObj_ConfigurationNode::Save() const
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Flag for create a single triangulation\n";
|
||||
aResult += "!Flag for create shapes in shape reading case\n";
|
||||
aResult += "!Default value: 0(false). Available values: 0(false), 1(true)\n";
|
||||
aResult += aScope + "read.create.shapes :\t " + InternalParameters.ReadCreateShapes + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Flag for create shapes in shape reading case\n";
|
||||
aResult += "!Default value: 0(false). Available values: 0(false), 1(true)\n";
|
||||
aResult += aScope + "read.create.single :\t " + InternalParameters.ReadCreateSingle + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Root folder for generating root labels names\n";
|
||||
aResult += "!Default value: ""(empty). Available values: <path>\n";
|
||||
|
@@ -87,7 +87,8 @@ public:
|
||||
RWMesh_CoordinateSystem FileCS = RWMesh_CoordinateSystem_Yup; //!< File origin coordinate system to perform conversion during read
|
||||
// Reading
|
||||
bool ReadSinglePrecision = false; //!< Flag for reading vertex data with single or double floating point precision
|
||||
bool ReadCreateShapes = false; //!< Flag for create a single triangulation
|
||||
bool ReadCreateShapes = false; //!< Flag for create shapes in shape reading case
|
||||
bool ReadCreateSingle = false; //!< Flag for create a single triangulation in shape reading case
|
||||
TCollection_AsciiString ReadRootPrefix; //!< Root folder for generating root labels names
|
||||
bool ReadFillDoc = true; //!< Flag for fill document from shape sequence
|
||||
bool ReadFillIncomplete = true; //!< Flag for fill the document with partially retrieved data even if reader has failed with error
|
||||
|
@@ -49,7 +49,38 @@ bool RWObj_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theDocument, theProgress);
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error: RWObj_Provider : "
|
||||
<< "Null document";
|
||||
return false;
|
||||
}
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(RWObj_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error: RWObj_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWObj_ConfigurationNode) aNode =
|
||||
Handle(RWObj_ConfigurationNode)::DownCast(GetNode());
|
||||
RWObj_CafReader aReader;
|
||||
aReader.SetSinglePrecision(aNode->InternalParameters.ReadSinglePrecision);
|
||||
aReader.SetSystemLengthUnit(aNode->GlobalParameters.LengthUnit / 1000);
|
||||
aReader.SetSystemCoordinateSystem(aNode->InternalParameters.SystemCS);
|
||||
aReader.SetFileLengthUnit(aNode->InternalParameters.FileLengthUnit);
|
||||
aReader.SetFileCoordinateSystem(aNode->InternalParameters.FileCS);
|
||||
aReader.SetDocument(theDocument);
|
||||
aReader.SetRootPrefix(aNode->InternalParameters.ReadRootPrefix);
|
||||
aReader.SetMemoryLimitMiB(aNode->InternalParameters.ReadMemoryLimitMiB);
|
||||
if (!aReader.Perform(thePath, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error: RWObj_Provider : [" <<
|
||||
thePath << "] : Cannot read any relevant data from the Obj file";
|
||||
return false;
|
||||
}
|
||||
myExternalFiles = aReader.ExternalFiles();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -62,63 +93,15 @@ bool RWObj_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWObj_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (theDocument.IsNull())
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(RWObj_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWObj_Provider during reading the file " <<
|
||||
thePath << "\t: theDocument shouldn't be null";
|
||||
Message::SendFail() << "Error: RWObj_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(RWObj_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWObj_ConfigurationNode during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWObj_ConfigurationNode) aNode = Handle(RWObj_ConfigurationNode)::DownCast(GetNode());
|
||||
RWObj_CafReader aReader;
|
||||
aReader.SetSinglePrecision(aNode->InternalParameters.ReadSinglePrecision);
|
||||
aReader.SetSystemLengthUnit(aNode->GlobalParameters.LengthUnit / 1000);
|
||||
aReader.SetSystemCoordinateSystem(aNode->InternalParameters.SystemCS);
|
||||
aReader.SetFileLengthUnit(aNode->InternalParameters.FileLengthUnit);
|
||||
aReader.SetFileCoordinateSystem(aNode->InternalParameters.FileCS);
|
||||
aReader.SetDocument(theDocument);
|
||||
aReader.SetRootPrefix(aNode->InternalParameters.ReadRootPrefix);
|
||||
aReader.SetMemoryLimitMiB(aNode->InternalParameters.ReadMemoryLimitMiB);
|
||||
if (!aReader.Perform(thePath, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWObj_ConfigurationNode during reading the file " << thePath;
|
||||
return false;
|
||||
}
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument, aNode->GlobalParameters.LengthUnit, UnitsMethods_LengthUnit_Millimeter);
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWObj_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(RWObj_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWObj_ConfigurationNode during writing the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWObj_ConfigurationNode) aNode = Handle(RWObj_ConfigurationNode)::DownCast(GetNode());
|
||||
Handle(RWObj_ConfigurationNode) aNode =
|
||||
Handle(RWObj_ConfigurationNode)::DownCast(GetNode());
|
||||
|
||||
TColStd_IndexedDataMapOfStringString aFileInfo;
|
||||
if (!aNode->InternalParameters.WriteAuthor.IsEmpty())
|
||||
@@ -129,7 +112,6 @@ bool RWObj_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
{
|
||||
aFileInfo.Add("Comments", aNode->InternalParameters.WriteComment);
|
||||
}
|
||||
|
||||
RWMesh_CoordinateSystemConverter aConverter;
|
||||
aConverter.SetInputLengthUnit(aNode->GlobalParameters.LengthUnit / 1000);
|
||||
aConverter.SetInputCoordinateSystem(aNode->InternalParameters.SystemCS);
|
||||
@@ -140,7 +122,8 @@ bool RWObj_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
aWriter.SetCoordinateSystemConverter(aConverter);
|
||||
if (!aWriter.Perform(theDocument, aFileInfo, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWObj_ConfigurationNode during writing the file " << thePath;
|
||||
Message::SendFail() << "Error: RWObj_Provider : [" <<
|
||||
thePath << "] : Cannot write any relevant data to the Obj file";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -156,7 +139,61 @@ bool RWObj_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theShape, theProgress);
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(RWObj_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error: RWObj_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWObj_ConfigurationNode) aNode =
|
||||
Handle(RWObj_ConfigurationNode)::DownCast(GetNode());
|
||||
if (aNode->InternalParameters.ReadCreateSingle)
|
||||
{
|
||||
RWMesh_CoordinateSystemConverter aConverter;
|
||||
aConverter.SetOutputLengthUnit(aNode->GlobalParameters.LengthUnit / 1000);
|
||||
aConverter.SetOutputCoordinateSystem(aNode->InternalParameters.SystemCS);
|
||||
aConverter.SetInputLengthUnit(aNode->InternalParameters.FileLengthUnit);
|
||||
aConverter.SetInputCoordinateSystem(aNode->InternalParameters.FileCS);
|
||||
|
||||
RWObj_TriangulationReader aSimpleReader;
|
||||
aSimpleReader.SetTransformation(aConverter);
|
||||
aSimpleReader.SetSinglePrecision(aNode->InternalParameters.ReadSinglePrecision);
|
||||
aSimpleReader.SetCreateShapes(aNode->InternalParameters.ReadCreateShapes);
|
||||
aSimpleReader.SetSinglePrecision(aNode->InternalParameters.ReadSinglePrecision);
|
||||
aSimpleReader.SetMemoryLimit(aNode->InternalParameters.ReadMemoryLimitMiB);
|
||||
if (!aSimpleReader.Read(thePath, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error: RWObj_Provider : [" <<
|
||||
thePath << "] : Cannot read any relevant data from the Obj file";
|
||||
return false;
|
||||
}
|
||||
Handle(Poly_Triangulation) aTriangulation = aSimpleReader.GetTriangulation();
|
||||
TopoDS_Face aFace;
|
||||
BRep_Builder aBuiler;
|
||||
aBuiler.MakeFace(aFace);
|
||||
aBuiler.UpdateFace(aFace, aTriangulation);
|
||||
theShape = aFace;
|
||||
myExternalFiles = aSimpleReader.ExternalFiles();
|
||||
return true;
|
||||
}
|
||||
RWObj_CafReader aReader;
|
||||
aReader.SetSinglePrecision(aNode->InternalParameters.ReadSinglePrecision);
|
||||
aReader.SetSystemLengthUnit(aNode->GlobalParameters.LengthUnit / 1000);
|
||||
aReader.SetSystemCoordinateSystem(aNode->InternalParameters.SystemCS);
|
||||
aReader.SetFileLengthUnit(aNode->InternalParameters.FileLengthUnit);
|
||||
aReader.SetFileCoordinateSystem(aNode->InternalParameters.FileCS);
|
||||
aReader.SetRootPrefix(aNode->InternalParameters.ReadRootPrefix);
|
||||
aReader.SetMemoryLimitMiB(aNode->InternalParameters.ReadMemoryLimitMiB);
|
||||
if (!aReader.Perform(thePath, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error: RWObj_Provider : [" <<
|
||||
thePath << "] : Cannot read any relevant data from the Obj file";
|
||||
return false;
|
||||
}
|
||||
theShape = aReader.SingleShape();
|
||||
myExternalFiles = aReader.ExternalFiles();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -169,62 +206,11 @@ bool RWObj_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWObj_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(RWObj_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWObj_ConfigurationNode during writing the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWObj_ConfigurationNode) aNode = Handle(RWObj_ConfigurationNode)::DownCast(GetNode());
|
||||
RWMesh_CoordinateSystemConverter aConverter;
|
||||
aConverter.SetOutputLengthUnit(aNode->GlobalParameters.LengthUnit / 1000);
|
||||
aConverter.SetOutputCoordinateSystem(aNode->InternalParameters.SystemCS);
|
||||
aConverter.SetInputLengthUnit(aNode->InternalParameters.FileLengthUnit);
|
||||
aConverter.SetInputCoordinateSystem(aNode->InternalParameters.FileCS);
|
||||
|
||||
RWObj_TriangulationReader aSimpleReader;
|
||||
aSimpleReader.SetTransformation(aConverter);
|
||||
aSimpleReader.SetSinglePrecision(aNode->InternalParameters.ReadSinglePrecision);
|
||||
aSimpleReader.SetCreateShapes(aNode->InternalParameters.ReadCreateShapes);
|
||||
aSimpleReader.SetSinglePrecision(aNode->InternalParameters.ReadSinglePrecision);
|
||||
aSimpleReader.SetMemoryLimit(aNode->InternalParameters.ReadMemoryLimitMiB);
|
||||
if (!aSimpleReader.Read(thePath, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWObj_ConfigurationNode during reading the file " << thePath;
|
||||
return false;
|
||||
}
|
||||
Handle(Poly_Triangulation) aTriangulation = aSimpleReader.GetTriangulation();
|
||||
TopoDS_Face aFace;
|
||||
BRep_Builder aBuiler;
|
||||
aBuiler.MakeFace(aFace);
|
||||
aBuiler.UpdateFace(aFace, aTriangulation);
|
||||
theShape = aFace;
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWObj_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(TDocStd_Document) aDoc = new TDocStd_Document("BinXCAF");
|
||||
Handle(XCAFDoc_ShapeTool) aShTool = XCAFDoc_DocumentTool::ShapeTool(aDoc->Main());
|
||||
Handle(XCAFDoc_ShapeTool) aShTool =
|
||||
XCAFDoc_DocumentTool::ShapeTool(aDoc->Main());
|
||||
aShTool->AddShape(theShape);
|
||||
return Write(thePath, aDoc, theProgress);
|
||||
return Write(thePath, aDoc, theWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -16,6 +16,8 @@
|
||||
|
||||
#include <DE_Provider.hxx>
|
||||
|
||||
#include <NCollection_IndexedMap.hxx>
|
||||
|
||||
//! The class to transfer OBJ files.
|
||||
//! Reads and Writes any OBJ files into/from OCCT.
|
||||
//! Each operation needs configuration node.
|
||||
@@ -64,24 +66,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
@@ -104,24 +88,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//! Gets CAD format name of associated provider
|
||||
@@ -131,6 +97,15 @@ public:
|
||||
//! Gets provider's vendor name of associated provider
|
||||
//! @return provider's vendor name
|
||||
Standard_EXPORT virtual TCollection_AsciiString GetVendor() const Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//!
|
||||
const NCollection_IndexedMap<TCollection_AsciiString>& GetExternalFiles() const { return myExternalFiles; }
|
||||
|
||||
private:
|
||||
|
||||
NCollection_IndexedMap<TCollection_AsciiString> myExternalFiles; //!<
|
||||
};
|
||||
|
||||
#endif // _RWObj_Provider_HeaderFile
|
||||
|
@@ -52,33 +52,24 @@ bool RWPly_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWPly_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(RWPly_ConfigurationNode)))
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(RWPly_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWPly_Provider during writing the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: RWPly_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWPly_ConfigurationNode) aNode = Handle(RWPly_ConfigurationNode)::DownCast(GetNode());
|
||||
Handle(RWPly_ConfigurationNode) aNode =
|
||||
Handle(RWPly_ConfigurationNode)::DownCast(GetNode());
|
||||
|
||||
TDF_LabelSequence aRootLabels;
|
||||
Handle(XCAFDoc_ShapeTool) aShapeTool = XCAFDoc_DocumentTool::ShapeTool(theDocument->Main());
|
||||
Handle(XCAFDoc_ShapeTool) aShapeTool =
|
||||
XCAFDoc_DocumentTool::ShapeTool(theDocument->Main());
|
||||
aShapeTool->GetFreeShapes(aRootLabels);
|
||||
if (aRootLabels.IsEmpty())
|
||||
{
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
TColStd_IndexedDataMapOfStringString aFileInfo;
|
||||
if (!aNode->InternalParameters.WriteAuthor.IsEmpty())
|
||||
{
|
||||
@@ -102,8 +93,8 @@ bool RWPly_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
aPlyCtx.SetFaceId(aNode->InternalParameters.WriteFaceId);
|
||||
if (!aPlyCtx.Perform(theDocument, aFileInfo, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWPly_Provider during writing the file "
|
||||
<< thePath << "\t: Cannot perform the document";
|
||||
Message::SendFail() << "Error: RWObj_Provider : [" <<
|
||||
thePath << "] : Cannot write any relevant data to the Ply file";
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -120,21 +111,10 @@ bool RWPly_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWPly_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(TDocStd_Document) aDoc = new TDocStd_Document("BinXCAF");
|
||||
Handle(XCAFDoc_ShapeTool) aShTool = XCAFDoc_DocumentTool::ShapeTool(aDoc->Main());
|
||||
aShTool->AddShape(theShape);
|
||||
return Write(thePath, aDoc, theProgress);
|
||||
return Write(thePath, aDoc, theWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -53,15 +53,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
@@ -73,15 +64,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//! Gets CAD format name of associated provider
|
||||
|
@@ -56,8 +56,8 @@ bool RWStl_ConfigurationNode::Load(const Handle(DE_ConfigurationContext)& theRes
|
||||
|
||||
InternalParameters.ReadMergeAngle =
|
||||
theResource->RealVal("read.merge.angle", InternalParameters.ReadMergeAngle, aScope);
|
||||
InternalParameters.ReadBRep =
|
||||
theResource->BooleanVal("read.brep", InternalParameters.ReadBRep, aScope);
|
||||
InternalParameters.ReadShapeType = (ReadMode_ShapeType)
|
||||
theResource->IntegerVal("read.brep", InternalParameters.ReadShapeType, aScope);
|
||||
InternalParameters.WriteAscii =
|
||||
theResource->BooleanVal("write.ascii", InternalParameters.WriteAscii, aScope);
|
||||
return true;
|
||||
@@ -85,9 +85,9 @@ TCollection_AsciiString RWStl_ConfigurationNode::Save() const
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Setting up Boundary Representation flag\n";
|
||||
aResult += "!Default value: false. Available values: \"on\", \"off\"\n";
|
||||
aResult += aScope + "read.brep :\t " + InternalParameters.ReadBRep + "\n";
|
||||
aResult += "!Defines result type of transferred shape\n";
|
||||
aResult += "!Default value: 1(SingleMesh). Available values: 0(MultiMesh), 1(SingleMesh), 2(CompShape)\n";
|
||||
aResult += aScope + "read.brep :\t " + InternalParameters.ReadShapeType + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
|
@@ -84,11 +84,17 @@ public:
|
||||
Standard_EXPORT virtual bool CheckContent(const Handle(NCollection_Buffer)& theBuffer) const Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
enum ReadMode_ShapeType
|
||||
{
|
||||
ReadMode_ShapeType_MultiMesh = 0,
|
||||
ReadMode_ShapeType_SingleMesh,
|
||||
ReadMode_ShapeType_CompShape,
|
||||
};
|
||||
struct RWStl_InternalSection
|
||||
{
|
||||
// Read
|
||||
double ReadMergeAngle = 90.; //!< Input merge angle value
|
||||
bool ReadBRep = false; //!< Setting up Boundary Representation flag
|
||||
ReadMode_ShapeType ReadShapeType = ReadMode_ShapeType_SingleMesh; //!< Defines result type of transferred shape
|
||||
|
||||
// Write
|
||||
bool WriteAscii = true; //!< Setting up writing mode (Ascii or Binary)
|
||||
|
@@ -51,7 +51,21 @@ bool RWStl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theDocument, theProgress);
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error: RWStl_Provider : "
|
||||
<< "Null document";
|
||||
return false;
|
||||
}
|
||||
TopoDS_Shape aShape;
|
||||
if (!Read(thePath, aShape, theWS, theProgress))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Handle(XCAFDoc_ShapeTool) aShapeTool =
|
||||
XCAFDoc_DocumentTool::ShapeTool(theDocument->Main());
|
||||
aShapeTool->AddShape(aShape);
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -64,49 +78,15 @@ bool RWStl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWStl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error in the RWStl_Provider during reading the file " <<
|
||||
thePath << "\t: theDocument shouldn't be null";
|
||||
return false;
|
||||
}
|
||||
TopoDS_Shape aShape;
|
||||
if (!Read(thePath, aShape, theProgress))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Handle(XCAFDoc_ShapeTool) aShapeTool = XCAFDoc_DocumentTool::ShapeTool(theDocument->Main());
|
||||
aShapeTool->AddShape(aShape);
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWStl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
TopoDS_Shape aShape;
|
||||
TDF_LabelSequence aLabels;
|
||||
Handle(XCAFDoc_ShapeTool) aSTool = XCAFDoc_DocumentTool::ShapeTool(theDocument->Main());
|
||||
Handle(XCAFDoc_ShapeTool) aSTool =
|
||||
XCAFDoc_DocumentTool::ShapeTool(theDocument->Main());
|
||||
aSTool->GetFreeShapes(aLabels);
|
||||
if (aLabels.Length() <= 0)
|
||||
{
|
||||
Message::SendFail() << "Error in the RWStl_Provider during writing the file " <<
|
||||
thePath << "\t: Document contain no shapes";
|
||||
Message::SendFail() << "Error: RWStl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -126,7 +106,7 @@ bool RWStl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
}
|
||||
aShape = aComp;
|
||||
}
|
||||
return Write(thePath, aShape, theProgress);
|
||||
return Write(thePath, aShape, theWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -139,7 +119,87 @@ bool RWStl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theShape, theProgress);
|
||||
Message::SendWarning()
|
||||
<< "OCCT Stl reader does not support model scaling according to custom length unit";
|
||||
if (!GetNode()->IsKind(STANDARD_TYPE(RWStl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error: RWStl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWStl_ConfigurationNode) aNode =
|
||||
Handle(RWStl_ConfigurationNode)::DownCast(GetNode());
|
||||
double aMergeAngle = aNode->InternalParameters.ReadMergeAngle * M_PI / 180.0;
|
||||
if (aMergeAngle < 0.0 || aMergeAngle > M_PI_2)
|
||||
{
|
||||
Message::SendFail() << "Error: RWStl_Provider : ["
|
||||
<< aMergeAngle << "] The merge angle is out of the valid range";
|
||||
return false;
|
||||
}
|
||||
switch (aNode->InternalParameters.ReadShapeType)
|
||||
{
|
||||
case(RWStl_ConfigurationNode::ReadMode_ShapeType_MultiMesh):
|
||||
{
|
||||
NCollection_Sequence<Handle(Poly_Triangulation)> aTriangList;
|
||||
// Read STL file to the triangulation list.
|
||||
RWStl::ReadFile(thePath.ToCString(), aMergeAngle, aTriangList, theProgress);
|
||||
BRep_Builder aB;
|
||||
if (aTriangList.Size() == 1)
|
||||
{
|
||||
TopoDS_Face aFace;
|
||||
aB.MakeFace(aFace);
|
||||
aB.UpdateFace(aFace, aTriangList.First());
|
||||
theShape = aFace;
|
||||
}
|
||||
else
|
||||
{
|
||||
TopoDS_Compound aCmp;
|
||||
for (NCollection_Sequence<Handle(Poly_Triangulation)>::Iterator anIt(aTriangList);
|
||||
anIt.More(); anIt.Next())
|
||||
{
|
||||
if (aCmp.IsNull())
|
||||
{
|
||||
aB.MakeCompound(aCmp);
|
||||
}
|
||||
TopoDS_Face aFace;
|
||||
aB.MakeFace(aFace, anIt.Value());
|
||||
aB.Add(aCmp, aFace);
|
||||
}
|
||||
theShape = aCmp;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case(RWStl_ConfigurationNode::ReadMode_ShapeType_SingleMesh):
|
||||
{
|
||||
// Read STL file to the triangulation.
|
||||
Handle(Poly_Triangulation) aTriangulation =
|
||||
RWStl::ReadFile(thePath.ToCString(), aMergeAngle, theProgress);
|
||||
|
||||
if (!aTriangulation.IsNull())
|
||||
{
|
||||
TopoDS_Face aFace;
|
||||
BRep_Builder aB;
|
||||
aB.MakeFace(aFace);
|
||||
aB.UpdateFace(aFace, aTriangulation);
|
||||
theShape = aFace;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case(RWStl_ConfigurationNode::ReadMode_ShapeType_CompShape):
|
||||
{
|
||||
Standard_DISABLE_DEPRECATION_WARNINGS
|
||||
StlAPI::Read(theShape, thePath.ToCString());
|
||||
Standard_ENABLE_DEPRECATION_WARNINGS
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (theShape.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error: RWStl_Provider : [" <<
|
||||
thePath << "] : Cannot read any relevant data from the STL file";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -152,81 +212,24 @@ bool RWStl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWStl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Message::SendWarning() << "OCCT Stl reader does not support model scaling according to custom length unit";
|
||||
if (!GetNode()->IsKind(STANDARD_TYPE(RWStl_ConfigurationNode)))
|
||||
Message::SendWarning() <<
|
||||
"OCCT Stl writer does not support model scaling according to custom length unit";
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(RWStl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWStl_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
return true;
|
||||
}
|
||||
Handle(RWStl_ConfigurationNode) aNode = Handle(RWStl_ConfigurationNode)::DownCast(GetNode());
|
||||
double aMergeAngle = aNode->InternalParameters.ReadMergeAngle * M_PI / 180.0;
|
||||
if(aMergeAngle != M_PI_2)
|
||||
{
|
||||
if (aMergeAngle < 0.0 || aMergeAngle > M_PI_2)
|
||||
{
|
||||
Message::SendFail() << "Error in the RWStl_Provider during reading the file " <<
|
||||
thePath << "\t: The merge angle is out of the valid range";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (!aNode->InternalParameters.ReadBRep)
|
||||
{
|
||||
Handle(Poly_Triangulation) aTriangulation = RWStl::ReadFile(thePath.ToCString(), aMergeAngle, theProgress);
|
||||
|
||||
TopoDS_Face aFace;
|
||||
BRep_Builder aB;
|
||||
aB.MakeFace(aFace);
|
||||
aB.UpdateFace(aFace, aTriangulation);
|
||||
theShape = aFace;
|
||||
}
|
||||
else
|
||||
{
|
||||
Standard_DISABLE_DEPRECATION_WARNINGS
|
||||
if (!StlAPI::Read(theShape, thePath.ToCString()))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWStl_Provider during reading the file " << thePath;
|
||||
return false;
|
||||
}
|
||||
Standard_ENABLE_DEPRECATION_WARNINGS
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool RWStl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Message::SendWarning() << "OCCT Stl writer does not support model scaling according to custom length unit";
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(RWStl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWStl_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: RWStl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(RWStl_ConfigurationNode) aNode = Handle(RWStl_ConfigurationNode)::DownCast(GetNode());
|
||||
Handle(RWStl_ConfigurationNode) aNode =
|
||||
Handle(RWStl_ConfigurationNode)::DownCast(GetNode());
|
||||
|
||||
StlAPI_Writer aWriter;
|
||||
aWriter.ASCIIMode() = aNode->InternalParameters.WriteAscii;
|
||||
if (!aWriter.Write(theShape, thePath.ToCString(), theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the RWStl_Provider during reading the file " <<
|
||||
thePath << "\t: Mesh writing has been failed";
|
||||
Message::SendFail() << "Error: RWStl_Provider : [" <<
|
||||
thePath << "] : Mesh writing has been failed";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@@ -64,24 +64,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual Standard_Boolean Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual Standard_Boolean Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
@@ -104,24 +86,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual Standard_Boolean Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual Standard_Boolean Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//! Gets CAD format name of associated provider
|
||||
|
@@ -131,8 +131,12 @@ bool STEPCAFControl_ConfigurationNode::Load(const Handle(DE_ConfigurationContext
|
||||
theResource->IntegerVal("write.unit", InternalParameters.WriteUnit, aScope);
|
||||
InternalParameters.WriteResourceName =
|
||||
theResource->StringVal("write.resource.name", InternalParameters.WriteResourceName, aScope);
|
||||
InternalParameters.WriteMultiPrefix =
|
||||
theResource->StringVal("write.multi.prefix", InternalParameters.WriteMultiPrefix, aScope);
|
||||
InternalParameters.WriteSequence =
|
||||
theResource->StringVal("write.sequence", InternalParameters.WriteSequence, aScope);
|
||||
InternalParameters.WriteLabels =
|
||||
theResource->StringSeqVal("write.labels", InternalParameters.WriteLabels, aScope);
|
||||
InternalParameters.WriteVertexMode = (WriteMode_VertexMode)
|
||||
theResource->IntegerVal("write.vertex.mode", InternalParameters.WriteVertexMode, aScope);
|
||||
InternalParameters.WriteSubshapeNames =
|
||||
@@ -427,12 +431,30 @@ TCollection_AsciiString STEPCAFControl_ConfigurationNode::Save() const
|
||||
aResult += aScope + "write.resource.name :\t " + InternalParameters.WriteResourceName + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Defines prefix for names of external files, if empty do not make multifile\n";
|
||||
aResult += "!Default value: empty. Available values: <string>\n";
|
||||
aResult += aScope + "write.multi.prefix :\t " + InternalParameters.WriteMultiPrefix + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Defines name of the sequence of operators\n";
|
||||
aResult += "!Default value: \"ToSTEP\". Available values: <string>\n";
|
||||
aResult += aScope + "write.sequence :\t " + InternalParameters.WriteSequence + "\n";
|
||||
aResult += "!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!Defines list of shape labels to export, if empty import full document\n";
|
||||
aResult += "!Default value: empty. Available values: sequense of label entries\n";
|
||||
aResult += aScope + "write.labels :\t ";
|
||||
for (TColStd_ListOfAsciiString::Iterator anIter(InternalParameters.WriteLabels);
|
||||
anIter.More(); anIter.Next())
|
||||
{
|
||||
aResult += anIter.Value();
|
||||
aResult += " ";
|
||||
}
|
||||
aResult += "\n!\n";
|
||||
|
||||
aResult += "!\n";
|
||||
aResult += "!This parameter indicates which of free vertices writing mode is switch on\n";
|
||||
aResult += "!Default value: 0(\"One Compound\"). Available values: 0(\"One Compound\"), 1(\"Signle Vertex\")\n";
|
||||
@@ -517,6 +539,15 @@ bool STEPCAFControl_ConfigurationNode::IsExportSupported() const
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : IsExportSupported
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool STEPCAFControl_ConfigurationNode::IsStreamSupported() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : GetFormat
|
||||
// purpose :
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#include <DE_ConfigurationNode.hxx>
|
||||
#include <STEPControl_StepModelType.hxx>
|
||||
#include <Resource_FormatType.hxx>
|
||||
#include <TColStd_SequenceOfAsciiString.hxx>
|
||||
#include <UnitsMethods_LengthUnit.hxx>
|
||||
|
||||
//! The purpose of this class is to configure the transfer process for STEP format
|
||||
@@ -69,6 +70,10 @@ public:
|
||||
//! @return true if export is supported
|
||||
Standard_EXPORT virtual bool IsExportSupported() const Standard_OVERRIDE;
|
||||
|
||||
//! Checks the stream for import/export supporting
|
||||
//! @return Standard_True if stream is support
|
||||
Standard_EXPORT virtual bool IsStreamSupported() const Standard_OVERRIDE;
|
||||
|
||||
//! Gets CAD format name of associated provider
|
||||
//! @return provider CAD format
|
||||
Standard_EXPORT virtual TCollection_AsciiString GetFormat() const Standard_OVERRIDE;
|
||||
@@ -218,7 +223,9 @@ public:
|
||||
bool WriteSurfaceCurMode = true; //<! Indicates whether parametric curves (curves in parametric space of surface) should be written into the STEP file
|
||||
UnitsMethods_LengthUnit WriteUnit = UnitsMethods_LengthUnit_Millimeter; //<! Defines a unit in which the STEP file should be written
|
||||
TCollection_AsciiString WriteResourceName = "STEP"; //<! Defines the name of the resource file to write
|
||||
TCollection_AsciiString WriteMultiPrefix; //<! Defines prefix for names of external files, if empty do not make multifile
|
||||
TCollection_AsciiString WriteSequence = "ToSTEP"; //<! Defines the name of the sequence of operators to write
|
||||
TColStd_ListOfAsciiString WriteLabels; //<! Defines list of shape labels to export, if empty import full document
|
||||
WriteMode_VertexMode WriteVertexMode = WriteMode_VertexMode_OneCompound; //<! Indicates which of free vertices writing mode is switch on
|
||||
bool WriteSubshapeNames = false; //<! Indicates whether to write sub-shape names to 'Name' attributes of STEP Representation Items
|
||||
bool WriteColor = true; //<! ColorMode is used to indicate write Colors or not
|
||||
|
@@ -13,19 +13,256 @@
|
||||
|
||||
#include <STEPCAFControl_Provider.hxx>
|
||||
|
||||
#include <BinXCAFDrivers.hxx>
|
||||
#include <Interface_Static.hxx>
|
||||
#include <Message.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 <STEPControl_ActorWrite.hxx>
|
||||
#include <STEPControl_Controller.hxx>
|
||||
#include <StepData_StepModel.hxx>
|
||||
#include <TDataStd_Name.hxx>
|
||||
#include <TDF_Tool.hxx>
|
||||
#include <TDocStd_Document.hxx>
|
||||
#include <UnitsMethods.hxx>
|
||||
#include <XCAFDoc_DocumentTool.hxx>
|
||||
#include <XSControl_WorkSession.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(STEPCAFControl_Provider, DE_Provider)
|
||||
|
||||
namespace
|
||||
{
|
||||
//! Special class to handle static parameters.
|
||||
//! Initialize all parameters in the begin of life
|
||||
//! and reset changed parameters in the end of life
|
||||
class STEPCAFControl_ParameterController
|
||||
{
|
||||
public:
|
||||
|
||||
STEPCAFControl_ParameterController(const Handle(STEPCAFControl_ConfigurationNode)& theNode,
|
||||
const Standard_Boolean theUpdateStatic);
|
||||
|
||||
~STEPCAFControl_ParameterController();
|
||||
|
||||
protected:
|
||||
|
||||
void setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter);
|
||||
|
||||
private:
|
||||
|
||||
bool myToUpdateStaticParameters; //!< Flag to updating static parameters
|
||||
STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection myOldValues; //!< Container to save previous static parameters
|
||||
};
|
||||
|
||||
//=======================================================================
|
||||
// function : STEPCAFControl_ParameterController
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
STEPCAFControl_ParameterController::STEPCAFControl_ParameterController(const Handle(STEPCAFControl_ConfigurationNode)& theNode,
|
||||
const Standard_Boolean theUpdateStatic)
|
||||
: myToUpdateStaticParameters(theUpdateStatic)
|
||||
{
|
||||
STEPCAFControl_Controller::Init();
|
||||
STEPControl_Controller::Init();
|
||||
if (!myToUpdateStaticParameters)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// Get previous values
|
||||
myOldValues.ReadBSplineContinuity =
|
||||
(STEPCAFControl_ConfigurationNode::ReadMode_BSplineContinuity)
|
||||
Interface_Static::IVal("read.iges.bspline.continuity");
|
||||
myOldValues.ReadPrecisionMode =
|
||||
(STEPCAFControl_ConfigurationNode::ReadMode_Precision)
|
||||
Interface_Static::IVal("read.precision.mode");
|
||||
myOldValues.ReadPrecisionVal =
|
||||
Interface_Static::RVal("read.precision.val");
|
||||
myOldValues.ReadMaxPrecisionMode =
|
||||
(STEPCAFControl_ConfigurationNode::ReadMode_MaxPrecision)
|
||||
Interface_Static::IVal("read.maxprecision.mode");
|
||||
myOldValues.ReadMaxPrecisionVal =
|
||||
Interface_Static::RVal("read.maxprecision.val");
|
||||
myOldValues.ReadSameParamMode =
|
||||
Interface_Static::IVal("read.stdsameparameter.mode") == 1;
|
||||
myOldValues.ReadSurfaceCurveMode =
|
||||
(STEPCAFControl_ConfigurationNode::ReadMode_SurfaceCurve)
|
||||
Interface_Static::IVal("read.surfacecurve.mode");
|
||||
myOldValues.EncodeRegAngle =
|
||||
Interface_Static::RVal("read.encoderegularity.angle") * 180.0 / M_PI;
|
||||
myOldValues.AngleUnit =
|
||||
(STEPCAFControl_ConfigurationNode::AngleUnitMode)
|
||||
Interface_Static::IVal("step.angleunit.mode");
|
||||
|
||||
myOldValues.ReadResourceName =
|
||||
Interface_Static::CVal("read.step.resource.name");
|
||||
myOldValues.ReadSequence =
|
||||
Interface_Static::CVal("read.step.sequence");
|
||||
myOldValues.ReadProductMode =
|
||||
Interface_Static::IVal("read.step.product.mode") == 1;
|
||||
myOldValues.ReadProductContext =
|
||||
(STEPCAFControl_ConfigurationNode::ReadMode_ProductContext)
|
||||
Interface_Static::IVal("read.step.product.context");
|
||||
myOldValues.ReadShapeRepr =
|
||||
(STEPCAFControl_ConfigurationNode::ReadMode_ShapeRepr)
|
||||
Interface_Static::IVal("read.step.shape.repr");
|
||||
myOldValues.ReadTessellated =
|
||||
(STEPCAFControl_ConfigurationNode::RWMode_Tessellated)
|
||||
Interface_Static::IVal("read.step.tessellated");
|
||||
myOldValues.ReadAssemblyLevel =
|
||||
(STEPCAFControl_ConfigurationNode::ReadMode_AssemblyLevel)
|
||||
Interface_Static::IVal("read.step.assembly.level");
|
||||
myOldValues.ReadRelationship =
|
||||
Interface_Static::IVal("read.step.shape.relationship") == 1;
|
||||
myOldValues.ReadShapeAspect =
|
||||
Interface_Static::IVal("read.step.shape.aspect") == 1;
|
||||
myOldValues.ReadConstrRelation =
|
||||
Interface_Static::IVal("read.step.constructivegeom.relationship") == 1;
|
||||
myOldValues.ReadSubshapeNames =
|
||||
Interface_Static::IVal("read.stepcaf.subshapes.name") == 1;
|
||||
myOldValues.ReadCodePage =
|
||||
(Resource_FormatType)Interface_Static::IVal("read.step.codepage");
|
||||
myOldValues.ReadNonmanifold =
|
||||
Interface_Static::IVal("read.step.nonmanifold") == 1;
|
||||
myOldValues.ReadIdeas =
|
||||
Interface_Static::IVal("read.step.ideas") == 1;
|
||||
myOldValues.ReadAllShapes =
|
||||
Interface_Static::IVal("read.step.all.shapes") == 1;
|
||||
myOldValues.ReadRootTransformation =
|
||||
Interface_Static::IVal("read.step.root.transformation") == 1;
|
||||
|
||||
myOldValues.WritePrecisionMode =
|
||||
(STEPCAFControl_ConfigurationNode::WriteMode_PrecisionMode)
|
||||
Interface_Static::IVal("write.precision.mode");
|
||||
myOldValues.WritePrecisionVal =
|
||||
Interface_Static::RVal("write.precision.val");
|
||||
myOldValues.WriteAssembly =
|
||||
(STEPCAFControl_ConfigurationNode::WriteMode_Assembly)
|
||||
Interface_Static::IVal("write.step.assembly");
|
||||
myOldValues.WriteSchema =
|
||||
(STEPCAFControl_ConfigurationNode::WriteMode_StepSchema)
|
||||
Interface_Static::IVal("write.step.schema");
|
||||
myOldValues.WriteTessellated =
|
||||
(STEPCAFControl_ConfigurationNode::RWMode_Tessellated)
|
||||
Interface_Static::IVal("write.step.tessellated");
|
||||
myOldValues.WriteProductName =
|
||||
Interface_Static::CVal("write.step.product.name");
|
||||
myOldValues.WriteSurfaceCurMode =
|
||||
Interface_Static::IVal("write.surfacecurve.mode") == 1;
|
||||
myOldValues.WriteUnit =
|
||||
(UnitsMethods_LengthUnit)Interface_Static::IVal("write.step.unit");
|
||||
myOldValues.WriteResourceName =
|
||||
Interface_Static::CVal("write.resource.name");
|
||||
myOldValues.WriteSequence =
|
||||
Interface_Static::CVal("write.step.sequence");
|
||||
myOldValues.WriteVertexMode =
|
||||
(STEPCAFControl_ConfigurationNode::WriteMode_VertexMode)
|
||||
Interface_Static::IVal("write.step.vertex.mode");
|
||||
myOldValues.WriteSubshapeNames =
|
||||
Interface_Static::IVal("write.stepcaf.subshapes.name") == 1;
|
||||
|
||||
// Set new values
|
||||
setStatic(theNode->InternalParameters);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : ~STEPCAFControl_ParameterController
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
STEPCAFControl_ParameterController::~STEPCAFControl_ParameterController()
|
||||
{
|
||||
if (!myToUpdateStaticParameters)
|
||||
{
|
||||
return;
|
||||
}
|
||||
setStatic(myOldValues);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : setStatic
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
void STEPCAFControl_ParameterController::setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter)
|
||||
{
|
||||
Interface_Static::SetIVal("read.iges.bspline.continuity",
|
||||
theParameter.ReadBSplineContinuity);
|
||||
Interface_Static::SetIVal("read.precision.mode",
|
||||
theParameter.ReadPrecisionMode);
|
||||
Interface_Static::SetRVal("read.precision.val",
|
||||
theParameter.ReadPrecisionVal);
|
||||
Interface_Static::SetIVal("read.maxprecision.mode",
|
||||
theParameter.ReadMaxPrecisionMode);
|
||||
Interface_Static::SetRVal("read.maxprecision.val",
|
||||
theParameter.ReadMaxPrecisionVal);
|
||||
Interface_Static::SetIVal("read.stdsameparameter.mode",
|
||||
theParameter.ReadSameParamMode);
|
||||
Interface_Static::SetIVal("read.surfacecurve.mode",
|
||||
theParameter.ReadSurfaceCurveMode);
|
||||
Interface_Static::SetRVal("read.encoderegularity.angle",
|
||||
theParameter.EncodeRegAngle * M_PI / 180.0);
|
||||
Interface_Static::SetIVal("step.angleunit.mode",
|
||||
theParameter.AngleUnit);
|
||||
|
||||
Interface_Static::SetCVal("read.step.resource.name",
|
||||
theParameter.ReadResourceName.ToCString());
|
||||
Interface_Static::SetCVal("read.step.sequence",
|
||||
theParameter.ReadSequence.ToCString());
|
||||
Interface_Static::SetIVal("read.step.product.mode",
|
||||
theParameter.ReadProductMode);
|
||||
Interface_Static::SetIVal("read.step.product.context",
|
||||
theParameter.ReadProductContext);
|
||||
Interface_Static::SetIVal("read.step.shape.repr",
|
||||
theParameter.ReadShapeRepr);
|
||||
Interface_Static::SetIVal("read.step.tessellated",
|
||||
theParameter.ReadTessellated);
|
||||
Interface_Static::SetIVal("read.step.assembly.level",
|
||||
theParameter.ReadAssemblyLevel);
|
||||
Interface_Static::SetIVal("read.step.shape.relationship",
|
||||
theParameter.ReadRelationship);
|
||||
Interface_Static::SetIVal("read.step.shape.aspect",
|
||||
theParameter.ReadShapeAspect);
|
||||
Interface_Static::SetIVal("read.step.constructivegeom.relationship",
|
||||
theParameter.ReadConstrRelation);
|
||||
Interface_Static::SetIVal("read.stepcaf.subshapes.name",
|
||||
theParameter.ReadSubshapeNames);
|
||||
Interface_Static::SetIVal("read.step.codepage",
|
||||
theParameter.ReadCodePage);
|
||||
Interface_Static::SetIVal("read.step.nonmanifold",
|
||||
theParameter.ReadNonmanifold);
|
||||
Interface_Static::SetIVal("read.step.ideas",
|
||||
theParameter.ReadIdeas);
|
||||
Interface_Static::SetIVal("read.step.all.shapes",
|
||||
theParameter.ReadAllShapes);
|
||||
Interface_Static::SetIVal("read.step.root.transformation",
|
||||
theParameter.ReadRootTransformation);
|
||||
|
||||
Interface_Static::SetIVal("write.precision.mode",
|
||||
theParameter.WritePrecisionMode);
|
||||
Interface_Static::SetRVal("write.precision.val",
|
||||
theParameter.WritePrecisionVal);
|
||||
Interface_Static::SetIVal("write.step.assembly",
|
||||
theParameter.WriteAssembly);
|
||||
Interface_Static::SetIVal("write.step.schema",
|
||||
theParameter.WriteSchema);
|
||||
Interface_Static::SetIVal("write.step.tessellated",
|
||||
theParameter.WriteTessellated);
|
||||
Interface_Static::SetCVal("write.step.product.name",
|
||||
theParameter.WriteProductName.ToCString());
|
||||
Interface_Static::SetIVal("write.surfacecurve.mode",
|
||||
theParameter.WriteSurfaceCurMode);
|
||||
Interface_Static::SetIVal("write.step.unit",
|
||||
theParameter.WriteUnit);
|
||||
Interface_Static::SetCVal("write.resource.name",
|
||||
theParameter.WriteResourceName.ToCString());
|
||||
Interface_Static::SetCVal("write.step.sequence",
|
||||
theParameter.WriteSequence.ToCString());
|
||||
Interface_Static::SetIVal("write.step.vertex.mode",
|
||||
theParameter.WriteVertexMode);
|
||||
Interface_Static::SetIVal("write.stepcaf.subshapes.name",
|
||||
theParameter.WriteSubshapeNames);
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : STEPCAFControl_Provider
|
||||
// purpose :
|
||||
@@ -42,113 +279,23 @@ STEPCAFControl_Provider::STEPCAFControl_Provider(const Handle(DE_ConfigurationNo
|
||||
{}
|
||||
|
||||
//=======================================================================
|
||||
// function : initStatic
|
||||
// function : personizeWS
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
void STEPCAFControl_Provider::initStatic(const Handle(DE_ConfigurationNode)& theNode)
|
||||
void STEPCAFControl_Provider::personizeWS(Handle(XSControl_WorkSession)& theWS)
|
||||
{
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode = Handle(STEPCAFControl_ConfigurationNode)::DownCast(theNode);
|
||||
STEPCAFControl_Controller::Init();
|
||||
|
||||
// Get previous values
|
||||
myOldValues.ReadBSplineContinuity = (STEPCAFControl_ConfigurationNode::ReadMode_BSplineContinuity)Interface_Static::IVal("read.iges.bspline.continuity");
|
||||
myOldValues.ReadPrecisionMode = (STEPCAFControl_ConfigurationNode::ReadMode_Precision)Interface_Static::IVal("read.precision.mode");
|
||||
myOldValues.ReadPrecisionVal = Interface_Static::RVal("read.precision.val");
|
||||
myOldValues.ReadMaxPrecisionMode = (STEPCAFControl_ConfigurationNode::ReadMode_MaxPrecision)Interface_Static::IVal("read.maxprecision.mode");
|
||||
myOldValues.ReadMaxPrecisionVal = Interface_Static::RVal("read.maxprecision.val");
|
||||
myOldValues.ReadSameParamMode = Interface_Static::IVal("read.stdsameparameter.mode") == 1;
|
||||
myOldValues.ReadSurfaceCurveMode = (STEPCAFControl_ConfigurationNode::ReadMode_SurfaceCurve)Interface_Static::IVal("read.surfacecurve.mode");
|
||||
myOldValues.EncodeRegAngle = Interface_Static::RVal("read.encoderegularity.angle") * 180.0 / M_PI;
|
||||
myOldValues.AngleUnit = (STEPCAFControl_ConfigurationNode::AngleUnitMode)Interface_Static::IVal("step.angleunit.mode");
|
||||
|
||||
myOldValues.ReadResourceName = Interface_Static::CVal("read.step.resource.name");
|
||||
myOldValues.ReadSequence = Interface_Static::CVal("read.step.sequence");
|
||||
myOldValues.ReadProductMode = Interface_Static::IVal("read.step.product.mode") == 1;
|
||||
myOldValues.ReadProductContext = (STEPCAFControl_ConfigurationNode::ReadMode_ProductContext)Interface_Static::IVal("read.step.product.context");
|
||||
myOldValues.ReadShapeRepr = (STEPCAFControl_ConfigurationNode::ReadMode_ShapeRepr)Interface_Static::IVal("read.step.shape.repr");
|
||||
myOldValues.ReadTessellated = (STEPCAFControl_ConfigurationNode::RWMode_Tessellated)Interface_Static::IVal("read.step.tessellated");
|
||||
myOldValues.ReadAssemblyLevel = (STEPCAFControl_ConfigurationNode::ReadMode_AssemblyLevel)Interface_Static::IVal("read.step.assembly.level");
|
||||
myOldValues.ReadRelationship = Interface_Static::IVal("read.step.shape.relationship") == 1;
|
||||
myOldValues.ReadShapeAspect = Interface_Static::IVal("read.step.shape.aspect") == 1;
|
||||
myOldValues.ReadConstrRelation = Interface_Static::IVal("read.step.constructivegeom.relationship") == 1;
|
||||
myOldValues.ReadSubshapeNames = Interface_Static::IVal("read.stepcaf.subshapes.name") == 1;
|
||||
myOldValues.ReadCodePage = (Resource_FormatType)Interface_Static::IVal("read.step.codepage");
|
||||
myOldValues.ReadNonmanifold = Interface_Static::IVal("read.step.nonmanifold") == 1;
|
||||
myOldValues.ReadIdeas = Interface_Static::IVal("read.step.ideas") == 1;
|
||||
myOldValues.ReadAllShapes = Interface_Static::IVal("read.step.all.shapes") == 1;
|
||||
myOldValues.ReadRootTransformation = Interface_Static::IVal("read.step.root.transformation") == 1;
|
||||
|
||||
myOldValues.WritePrecisionMode = (STEPCAFControl_ConfigurationNode::WriteMode_PrecisionMode)Interface_Static::IVal("write.precision.mode");
|
||||
myOldValues.WritePrecisionVal = Interface_Static::RVal("write.precision.val");
|
||||
myOldValues.WriteAssembly = (STEPCAFControl_ConfigurationNode::WriteMode_Assembly)Interface_Static::IVal("write.step.assembly");
|
||||
myOldValues.WriteSchema = (STEPCAFControl_ConfigurationNode::WriteMode_StepSchema)Interface_Static::IVal("write.step.schema");
|
||||
myOldValues.WriteTessellated = (STEPCAFControl_ConfigurationNode::RWMode_Tessellated)Interface_Static::IVal("write.step.tessellated");
|
||||
myOldValues.WriteProductName = Interface_Static::CVal("write.step.product.name");
|
||||
myOldValues.WriteSurfaceCurMode = Interface_Static::IVal("write.surfacecurve.mode") == 1;
|
||||
myOldValues.WriteUnit = (UnitsMethods_LengthUnit)Interface_Static::IVal("write.step.unit");
|
||||
myOldValues.WriteResourceName = Interface_Static::CVal("write.resource.name");
|
||||
myOldValues.WriteSequence = Interface_Static::CVal("write.step.sequence");
|
||||
myOldValues.WriteVertexMode = (STEPCAFControl_ConfigurationNode::WriteMode_VertexMode)Interface_Static::IVal("write.step.vertex.mode");
|
||||
myOldValues.WriteSubshapeNames = Interface_Static::IVal("write.stepcaf.subshapes.name") == 1;
|
||||
|
||||
// Set new values
|
||||
setStatic(aNode->InternalParameters);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : setStatic
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
void STEPCAFControl_Provider::setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter)
|
||||
{
|
||||
Interface_Static::SetIVal("read.iges.bspline.continuity", theParameter.ReadBSplineContinuity);
|
||||
Interface_Static::SetIVal("read.precision.mode", theParameter.ReadPrecisionMode);
|
||||
Interface_Static::SetRVal("read.precision.val", theParameter.ReadPrecisionVal);
|
||||
Interface_Static::SetIVal("read.maxprecision.mode", theParameter.ReadMaxPrecisionMode);
|
||||
Interface_Static::SetRVal("read.maxprecision.val", theParameter.ReadMaxPrecisionVal);
|
||||
Interface_Static::SetIVal("read.stdsameparameter.mode", theParameter.ReadSameParamMode);
|
||||
Interface_Static::SetIVal("read.surfacecurve.mode", theParameter.ReadSurfaceCurveMode);
|
||||
Interface_Static::SetRVal("read.encoderegularity.angle", theParameter.EncodeRegAngle * M_PI / 180.0);
|
||||
Interface_Static::SetIVal("step.angleunit.mode", theParameter.AngleUnit);
|
||||
|
||||
Interface_Static::SetCVal("read.step.resource.name", theParameter.ReadResourceName.ToCString());
|
||||
Interface_Static::SetCVal("read.step.sequence", theParameter.ReadSequence.ToCString());
|
||||
Interface_Static::SetIVal("read.step.product.mode", theParameter.ReadProductMode);
|
||||
Interface_Static::SetIVal("read.step.product.context", theParameter.ReadProductContext);
|
||||
Interface_Static::SetIVal("read.step.shape.repr", theParameter.ReadShapeRepr);
|
||||
Interface_Static::SetIVal("read.step.tessellated", theParameter.ReadTessellated);
|
||||
Interface_Static::SetIVal("read.step.assembly.level", theParameter.ReadAssemblyLevel);
|
||||
Interface_Static::SetIVal("read.step.shape.relationship", theParameter.ReadRelationship);
|
||||
Interface_Static::SetIVal("read.step.shape.aspect", theParameter.ReadShapeAspect);
|
||||
Interface_Static::SetIVal("read.step.constructivegeom.relationship", theParameter.ReadConstrRelation);
|
||||
Interface_Static::SetIVal("read.stepcaf.subshapes.name", theParameter.ReadSubshapeNames);
|
||||
Interface_Static::SetIVal("read.step.codepage", theParameter.ReadCodePage);
|
||||
Interface_Static::SetIVal("read.step.nonmanifold", theParameter.ReadNonmanifold);
|
||||
Interface_Static::SetIVal("read.step.ideas", theParameter.ReadIdeas);
|
||||
Interface_Static::SetIVal("read.step.all.shapes", theParameter.ReadAllShapes);
|
||||
Interface_Static::SetIVal("read.step.root.transformation", theParameter.ReadRootTransformation);
|
||||
|
||||
Interface_Static::SetIVal("write.precision.mode", theParameter.WritePrecisionMode);
|
||||
Interface_Static::SetRVal("write.precision.val", theParameter.WritePrecisionVal);
|
||||
Interface_Static::SetIVal("write.step.assembly", theParameter.WriteAssembly);
|
||||
Interface_Static::SetIVal("write.step.schema", theParameter.WriteSchema);
|
||||
Interface_Static::SetIVal("write.step.tessellated", theParameter.WriteTessellated);
|
||||
Interface_Static::SetCVal("write.step.product.name", theParameter.WriteProductName.ToCString());
|
||||
Interface_Static::SetIVal("write.surfacecurve.mode", theParameter.WriteSurfaceCurMode);
|
||||
Interface_Static::SetIVal("write.step.unit", theParameter.WriteUnit);
|
||||
Interface_Static::SetCVal("write.resource.name", theParameter.WriteResourceName.ToCString());
|
||||
Interface_Static::SetCVal("write.step.sequence", theParameter.WriteSequence.ToCString());
|
||||
Interface_Static::SetIVal("write.step.vertex.mode", theParameter.WriteVertexMode);
|
||||
Interface_Static::SetIVal("write.stepcaf.subshapes.name", theParameter.WriteSubshapeNames);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : resetStatic
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
void STEPCAFControl_Provider::resetStatic()
|
||||
{
|
||||
setStatic(myOldValues);
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -162,48 +309,120 @@ bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
{
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: theDocument shouldn't be null";
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Null document";
|
||||
return false;
|
||||
}
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode = Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
initStatic(aNode);
|
||||
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument, aNode->GlobalParameters.LengthUnit, UnitsMethods_LengthUnit_Millimeter);
|
||||
STEPCAFControl_Reader aReader;
|
||||
if (!theWS.IsNull())
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode =
|
||||
Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument,
|
||||
aNode->GlobalParameters.LengthUnit,
|
||||
UnitsMethods_LengthUnit_Millimeter);
|
||||
const Standard_Boolean toUseLoaded = thePath == ".";
|
||||
TCollection_AsciiString aFile;
|
||||
if (toUseLoaded)
|
||||
{
|
||||
aReader.Init(theWS);
|
||||
aFile = theWS->LoadedFile();
|
||||
Message::SendInfo() << "Model taken from the STEP session : "
|
||||
<< aFile;
|
||||
}
|
||||
else
|
||||
{
|
||||
aFile = thePath;
|
||||
Message::SendInfo() << "File STEP to read : "
|
||||
<< aFile;
|
||||
}
|
||||
STEPCAFControl_Reader aReader(theWS, !toUseLoaded);
|
||||
aReader.SetColorMode(aNode->InternalParameters.ReadColor);
|
||||
aReader.SetNameMode(aNode->InternalParameters.ReadName);
|
||||
aReader.SetLayerMode(aNode->InternalParameters.ReadLayer);
|
||||
aReader.SetPropsMode(aNode->InternalParameters.ReadProps);
|
||||
|
||||
IFSelect_ReturnStatus aReadStat = IFSelect_RetVoid;
|
||||
aReadStat = aReader.ReadFile(thePath.ToCString());
|
||||
if (!toUseLoaded)
|
||||
{
|
||||
aReadStat = aReader.ReadFile(thePath.ToCString());
|
||||
}
|
||||
else if (theWS->NbStartingEntities() > 0)
|
||||
{
|
||||
aReadStat = IFSelect_RetDone;
|
||||
}
|
||||
if (aReadStat != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: abandon";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : ["
|
||||
<< aFile << "] : abandon, no model loaded";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!aReader.Transfer(theDocument, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Cannot read any relevant data from the STEP file";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : [" <<
|
||||
aFile << "] : Cannot read any relevant data from the STEP file";
|
||||
return false;
|
||||
}
|
||||
resetStatic();
|
||||
myProcessedExtFiles = aReader.ExternFiles();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool STEPCAFControl_Provider::Read(std::istream& theIStream,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const TCollection_AsciiString theName,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Null document";
|
||||
return false;
|
||||
}
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode =
|
||||
Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument,
|
||||
aNode->GlobalParameters.LengthUnit,
|
||||
UnitsMethods_LengthUnit_Millimeter);
|
||||
Message::SendInfo() << "Model taken from the STEP stream";
|
||||
STEPCAFControl_Reader aReader(theWS);
|
||||
aReader.SetColorMode(aNode->InternalParameters.ReadColor);
|
||||
aReader.SetNameMode(aNode->InternalParameters.ReadName);
|
||||
aReader.SetLayerMode(aNode->InternalParameters.ReadLayer);
|
||||
aReader.SetPropsMode(aNode->InternalParameters.ReadProps);
|
||||
IFSelect_ReturnStatus aReadStat = IFSelect_RetVoid;
|
||||
aReadStat = aReader.ReadStream(theName.ToCString(), theIStream);
|
||||
if (aReadStat != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Abandon, no model loaded via stream";
|
||||
return false;
|
||||
}
|
||||
if (!aReader.Transfer(theDocument, theProgress))
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Cannot read any relevant data from the STEP file";
|
||||
return false;
|
||||
}
|
||||
myProcessedExtFiles = aReader.ExternFiles();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -216,86 +435,176 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during writing the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode = Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
initStatic(aNode);
|
||||
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument,
|
||||
UnitsMethods::GetLengthUnitScale(aNode->InternalParameters.WriteUnit, UnitsMethods_LengthUnit_Millimeter),
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode =
|
||||
Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
XCAFDoc_DocumentTool::SetLengthUnit(theDocument,
|
||||
aNode->GlobalParameters.LengthUnit,
|
||||
UnitsMethods_LengthUnit_Millimeter);
|
||||
STEPCAFControl_Writer aWriter;
|
||||
if (!theWS.IsNull())
|
||||
{
|
||||
aWriter.Init(theWS);
|
||||
}
|
||||
STEPControl_StepModelType aMode = static_cast<STEPControl_StepModelType>(aNode->InternalParameters.WriteModelType);
|
||||
STEPCAFControl_Writer aWriter(theWS, Standard_True);
|
||||
STEPControl_StepModelType aMode =
|
||||
static_cast<STEPControl_StepModelType>(aNode->InternalParameters.WriteModelType);
|
||||
aWriter.SetColorMode(aNode->InternalParameters.WriteColor);
|
||||
aWriter.SetNameMode(aNode->InternalParameters.WriteName);
|
||||
aWriter.SetLayerMode(aNode->InternalParameters.WriteLayer);
|
||||
aWriter.SetPropsMode(aNode->InternalParameters.WriteProps);
|
||||
|
||||
TDF_Label aLabel;
|
||||
|
||||
if (!aWriter.Transfer(theDocument, aMode, 0, theProgress))
|
||||
TDF_LabelSequence aLabels;
|
||||
TCollection_AsciiString aLabelsString;
|
||||
for (TColStd_ListOfAsciiString::Iterator anIter(aNode->InternalParameters.WriteLabels);
|
||||
anIter.More(); anIter.Next())
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during writing the file " <<
|
||||
thePath << "\t: The document cannot be translated or gives no result";
|
||||
resetStatic();
|
||||
return false;
|
||||
}
|
||||
IFSelect_ReturnStatus aStatus = aWriter.Write(thePath.ToCString());
|
||||
switch (aStatus)
|
||||
{
|
||||
case IFSelect_RetVoid:
|
||||
const TCollection_AsciiString& aValue = anIter.Value();
|
||||
TDF_Label aLabel;
|
||||
TDF_Tool::Label(theDocument->Main().Data(), aValue, aLabel, Standard_False);
|
||||
if (aLabel.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during writing the file " <<
|
||||
thePath << "\t: No file written";
|
||||
resetStatic();
|
||||
return false;;
|
||||
}
|
||||
case IFSelect_RetDone:
|
||||
{
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during writing the file " <<
|
||||
thePath << "\t: Error on writing file";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: No label for entry '" << aValue << "'";
|
||||
return false;
|
||||
}
|
||||
if (!aLabelsString.IsEmpty())
|
||||
{
|
||||
aLabelsString += " ";
|
||||
}
|
||||
aLabelsString += aValue;
|
||||
aLabels.Append(aLabel);
|
||||
}
|
||||
resetStatic();
|
||||
TCollection_ExtendedString aDocName;
|
||||
Handle(TDataStd_Name) aNameAttr;
|
||||
if (theDocument->GetData()->Root().FindAttribute(TDataStd_Name::GetID(), aNameAttr))
|
||||
{
|
||||
aDocName = aNameAttr->Get();
|
||||
}
|
||||
Standard_Boolean aTransferStatus = Standard_True;
|
||||
Standard_CString aMultiFilePrefix = !aNode->InternalParameters.WriteMultiPrefix.IsEmpty() ?
|
||||
aNode->InternalParameters.WriteMultiPrefix.ToCString() : nullptr;
|
||||
Message::SendInfo() << "Writing STEP file "
|
||||
<< thePath;
|
||||
if (aLabels.IsEmpty())
|
||||
{
|
||||
Message::SendInfo() << "Translating labels "
|
||||
<< aLabelsString << " of document " << aDocName << " to STEP";
|
||||
aTransferStatus = aWriter.Transfer(theDocument, aMode, aMultiFilePrefix, theProgress);
|
||||
}
|
||||
else
|
||||
{
|
||||
Message::SendInfo() << "Translating document "
|
||||
<< aDocName << " to STEP";
|
||||
aTransferStatus = aWriter.Transfer(aLabels, aMode, aMultiFilePrefix, theProgress);
|
||||
}
|
||||
if (!aTransferStatus)
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "The document cannot be translated or gives no result";
|
||||
return false;
|
||||
}
|
||||
if (thePath == ".")
|
||||
{
|
||||
Message::SendInfo() << "Document has been translated into the session";
|
||||
return true;
|
||||
}
|
||||
if (aWriter.Write(thePath.ToCString()) != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : [" <<
|
||||
thePath << "] : Write failed";
|
||||
return false;
|
||||
}
|
||||
Message::SendInfo() << "STEP file [" << thePath << "] Successfully written";
|
||||
myProcessedExtFiles = aWriter.ExternFiles();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(XSControl_WorkSession) aWS;
|
||||
return Read(thePath, theDocument, aWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
bool STEPCAFControl_Provider::Write(std::ostream& theOStream,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(XSControl_WorkSession) aWS;
|
||||
return Write(thePath, theDocument, aWS, theProgress);
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode =
|
||||
Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
STEPCAFControl_Writer aWriter(theWS, Standard_True);
|
||||
STEPControl_StepModelType aMode =
|
||||
static_cast<STEPControl_StepModelType>(aNode->InternalParameters.WriteModelType);
|
||||
aWriter.SetColorMode(aNode->InternalParameters.WriteColor);
|
||||
aWriter.SetNameMode(aNode->InternalParameters.WriteName);
|
||||
aWriter.SetLayerMode(aNode->InternalParameters.WriteLayer);
|
||||
aWriter.SetPropsMode(aNode->InternalParameters.WriteProps);
|
||||
TDF_LabelSequence aLabels;
|
||||
TCollection_AsciiString aLabelsString;
|
||||
for (TColStd_ListOfAsciiString::Iterator anIter(aNode->InternalParameters.WriteLabels);
|
||||
anIter.More(); anIter.Next())
|
||||
{
|
||||
const TCollection_AsciiString& aValue = anIter.Value();
|
||||
TDF_Label aLabel;
|
||||
TDF_Tool::Label(theDocument->Main().Data(), aValue, aLabel, Standard_False);
|
||||
if (aLabel.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error: No label for entry '" << aValue << "'";
|
||||
return false;
|
||||
}
|
||||
if (!aLabelsString.IsEmpty())
|
||||
{
|
||||
aLabelsString += " ";
|
||||
}
|
||||
aLabelsString += aValue;
|
||||
aLabels.Append(aLabel);
|
||||
}
|
||||
TCollection_ExtendedString aDocName;
|
||||
Handle(TDataStd_Name) aNameAttr;
|
||||
if (theDocument->GetData()->Root().FindAttribute(TDataStd_Name::GetID(), aNameAttr))
|
||||
{
|
||||
aDocName = aNameAttr->Get();
|
||||
}
|
||||
Standard_Boolean aTransferStatus = Standard_True;
|
||||
Standard_CString aMultiFilePrefix = !aNode->InternalParameters.WriteMultiPrefix.IsEmpty() ?
|
||||
aNode->InternalParameters.WriteMultiPrefix.ToCString() : nullptr;
|
||||
Message::SendInfo() << "Writing STEP file to stream";
|
||||
if (aLabels.IsEmpty())
|
||||
{
|
||||
Message::SendInfo() << "Translating labels "
|
||||
<< aLabelsString << " of document " << aDocName << " to STEP";
|
||||
aTransferStatus = aWriter.Transfer(theDocument, aMode, aMultiFilePrefix, theProgress);
|
||||
}
|
||||
else
|
||||
{
|
||||
Message::SendInfo() << "Translating document "
|
||||
<< aDocName << " to STEP";
|
||||
aTransferStatus = aWriter.Transfer(aLabels, aMode, aMultiFilePrefix, theProgress);
|
||||
}
|
||||
if (!aTransferStatus)
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "The document cannot be translated or gives no result";
|
||||
return false;
|
||||
}
|
||||
if (aWriter.WriteStream(theOStream) != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : Write to stream failed";
|
||||
return false;
|
||||
}
|
||||
Message::SendInfo() << "STEP file to stream successfully written";
|
||||
myProcessedExtFiles = aWriter.ExternFiles();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -308,39 +617,74 @@ bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theProgress;
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode = Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
initStatic(aNode);
|
||||
STEPControl_Reader aReader;
|
||||
if(!theWS.IsNull())
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode =
|
||||
Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
STEPControl_Reader aReader(theWS);
|
||||
if (aReader.ReadFile(thePath.ToCString()) != IFSelect_RetDone)
|
||||
{
|
||||
aReader.SetWS(theWS);
|
||||
}
|
||||
IFSelect_ReturnStatus aReadstat = IFSelect_RetVoid;
|
||||
aReadstat = aReader.ReadFile(thePath.ToCString());
|
||||
if (aReadstat != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: abandon, no model loaded";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : ["
|
||||
<< thePath << "] : abandon, no model loaded";
|
||||
return false;
|
||||
}
|
||||
Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(aReader.Model());
|
||||
aModel->SetLocalLengthUnit(aNode->GlobalParameters.LengthUnit);
|
||||
if (aReader.TransferRoots() <= 0)
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t:Cannot read any relevant data from the STEP file";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : [" <<
|
||||
thePath << "] : Cannot read any relevant data from the STEP file";
|
||||
return false;
|
||||
}
|
||||
theShape = aReader.OneShape();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool STEPCAFControl_Provider::Read(std::istream& theIStream,
|
||||
TopoDS_Shape& theShape,
|
||||
const TCollection_AsciiString theName,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theProgress;
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode =
|
||||
Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
STEPControl_Reader aReader(theWS);
|
||||
if (aReader.ReadStream(theName.ToCString(), theIStream) != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Abandon, no model loaded from STEP stream";
|
||||
return false;
|
||||
}
|
||||
Handle(StepData_StepModel) aModel = Handle(StepData_StepModel)::DownCast(aReader.Model());
|
||||
aModel->SetLocalLengthUnit(aNode->GlobalParameters.LengthUnit);
|
||||
if (aReader.TransferRoots() <= 0)
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Cannot read any relevant data from the STEP stream";
|
||||
return false;
|
||||
}
|
||||
theShape = aReader.OneShape();
|
||||
resetStatic();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -353,63 +697,94 @@ bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: Incorrect or empty Configuration Node";
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode = Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
initStatic(aNode);
|
||||
|
||||
STEPControl_Writer aWriter;
|
||||
if(!theWS.IsNull())
|
||||
{
|
||||
aWriter.SetWS(theWS);
|
||||
}
|
||||
IFSelect_ReturnStatus aWritestat = IFSelect_RetVoid;
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode =
|
||||
Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
STEPControl_Writer aWriter(theWS, Standard_True);
|
||||
Handle(StepData_StepModel) aModel = aWriter.Model();
|
||||
aModel->SetWriteLengthUnit(UnitsMethods::GetLengthUnitScale(aNode->InternalParameters.WriteUnit, UnitsMethods_LengthUnit_Millimeter));
|
||||
aWritestat = aWriter.Transfer(theShape, aNode->InternalParameters.WriteModelType, true, theProgress);
|
||||
Standard_Integer aNbEntities = (aModel.IsNull() ? 0 : aModel->NbEntities());
|
||||
aModel->SetWriteLengthUnit(UnitsMethods::GetLengthUnitScale(
|
||||
aNode->InternalParameters.WriteUnit,
|
||||
UnitsMethods_LengthUnit_Millimeter));
|
||||
IFSelect_ReturnStatus aWritestat =
|
||||
aWriter.Transfer(theShape, aNode->InternalParameters.WriteModelType, true, theProgress);
|
||||
if (aNbEntities > 0)
|
||||
{
|
||||
Message::SendTrace() << "STEPCAFControl_Provider : Model not empty before transferring";
|
||||
}
|
||||
if (aWritestat != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error in the STEPCAFControl_Provider during reading the file " <<
|
||||
thePath << "\t: abandon, no model loaded";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Can't translate shape to STEP model";
|
||||
return false;
|
||||
}
|
||||
if (thePath == ".")
|
||||
{
|
||||
Message::SendInfo() << "Step model has been translated into the session";
|
||||
return true;
|
||||
}
|
||||
if (aWriter.Write(thePath.ToCString()) != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "STEPCAFControl_Provider: Error on writing file";
|
||||
resetStatic();
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Can't write STEP file " << thePath;
|
||||
return false;
|
||||
}
|
||||
resetStatic();
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool STEPCAFControl_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(XSControl_WorkSession) aWS;
|
||||
return Read(thePath, theShape, aWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool STEPCAFControl_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
bool STEPCAFControl_Provider::Write(std::ostream& theOStream,
|
||||
const TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(XSControl_WorkSession) aWS;
|
||||
return Write(thePath, theShape, aWS, theProgress);
|
||||
if (GetNode().IsNull() ||
|
||||
!GetNode()->IsKind(STANDARD_TYPE(STEPCAFControl_ConfigurationNode)))
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Incorrect or empty Configuration Node";
|
||||
return false;
|
||||
}
|
||||
Handle(STEPCAFControl_ConfigurationNode) aNode =
|
||||
Handle(STEPCAFControl_ConfigurationNode)::DownCast(GetNode());
|
||||
STEPCAFControl_ParameterController aParamController(aNode, myToUpdateStaticParameters);
|
||||
personizeWS(theWS);
|
||||
STEPControl_Writer aWriter(theWS, Standard_True);
|
||||
Handle(StepData_StepModel) aModel = aWriter.Model();
|
||||
Standard_Integer aNbEntities = (aModel.IsNull() ? 0 : aModel->NbEntities());
|
||||
aModel->SetWriteLengthUnit(UnitsMethods::GetLengthUnitScale(
|
||||
aNode->InternalParameters.WriteUnit,
|
||||
UnitsMethods_LengthUnit_Millimeter));
|
||||
IFSelect_ReturnStatus aWritestat =
|
||||
aWriter.Transfer(theShape, aNode->InternalParameters.WriteModelType, true, theProgress);
|
||||
if (aNbEntities > 0)
|
||||
{
|
||||
Message::SendTrace() << "STEPCAFControl_Provider : Model not empty before transferring";
|
||||
}
|
||||
if (aWritestat != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Can't translate shape to STEP model";
|
||||
return false;
|
||||
}
|
||||
if (aWriter.WriteStream(theOStream) != IFSelect_RetDone)
|
||||
{
|
||||
Message::SendFail() << "Error: STEPCAFControl_Provider : "
|
||||
<< "Can't write STEP to stream";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
#include <DE_Provider.hxx>
|
||||
#include <STEPCAFControl_ConfigurationNode.hxx>
|
||||
#include <STEPCAFControl_ExternFile.hxx>
|
||||
|
||||
//! The class to transfer STEP files.
|
||||
//! Reads and Writes any STEP files into/from OCCT.
|
||||
@@ -54,6 +55,19 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] theIStream stream to import STEP data
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @paramp[in] theName name of step file, can be empty
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(std::istream& theIStream,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const TCollection_AsciiString theName,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
@@ -65,23 +79,16 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[in] theOStream stream to export STEP data
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
Standard_EXPORT virtual bool Write(std::ostream& theOStream,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
@@ -94,6 +101,19 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] theIStream stream to the step file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @paramp[in] theName name of step file, can be empty
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(std::istream& theIStream,
|
||||
TopoDS_Shape& theShape,
|
||||
const TCollection_AsciiString theName,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
@@ -105,23 +125,16 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[in] theOStream stream to export STEP data
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param[in] theWS current work session
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
Standard_EXPORT virtual bool Write(std::ostream& theOStream,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange());
|
||||
|
||||
public:
|
||||
|
||||
@@ -133,18 +146,34 @@ public:
|
||||
//! @return provider's vendor name
|
||||
Standard_EXPORT virtual TCollection_AsciiString GetVendor() const Standard_OVERRIDE;
|
||||
|
||||
private:
|
||||
public:
|
||||
|
||||
//! Initialize static variables
|
||||
void initStatic(const Handle(DE_ConfigurationNode)& theNode);
|
||||
//! Sets parameter to update static parameter, that true by default
|
||||
void SetToUpdateStaticParameters(const bool theToUpdate) { myToUpdateStaticParameters = theToUpdate; }
|
||||
|
||||
//! Initialize static variables
|
||||
void setStatic(const STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection theParameter);
|
||||
//! Gets parameter to update static parameter, that true by default
|
||||
bool ToUpdateStaticParameters() const { return myToUpdateStaticParameters; }
|
||||
|
||||
//! Reset used interface static variables
|
||||
void resetStatic();
|
||||
public:
|
||||
|
||||
STEPCAFControl_ConfigurationNode::STEPCAFControl_InternalSection myOldValues;
|
||||
//! Gets external files used in the last read or write process.
|
||||
//! Processed only on multifile setting up
|
||||
NCollection_DataMap<TCollection_AsciiString, Handle(STEPCAFControl_ExternFile)> GetExternalFiles() const
|
||||
{
|
||||
return myProcessedExtFiles;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
private:
|
||||
|
||||
bool myToUpdateStaticParameters = true; //!< Flag to updating static parameters
|
||||
NCollection_DataMap<TCollection_AsciiString, Handle(STEPCAFControl_ExternFile)> myProcessedExtFiles; //!< External files from the last operation
|
||||
|
||||
};
|
||||
|
||||
|
@@ -51,30 +51,6 @@ bool Vrml_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool Vrml_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theDocument, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool Vrml_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
if (theDocument.IsNull())
|
||||
{
|
||||
Message::SendFail() << "Error in the Vrml_Provider during reading the file " <<
|
||||
@@ -118,8 +94,10 @@ bool Vrml_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
//=======================================================================
|
||||
bool Vrml_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
(void)theProgress;
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(Vrml_ConfigurationNode)))
|
||||
{
|
||||
@@ -152,30 +130,6 @@ bool Vrml_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Read(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Write
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool Vrml_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theWS;
|
||||
return Write(thePath, theShape, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function : Read
|
||||
// purpose :
|
||||
//=======================================================================
|
||||
bool Vrml_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
(void)theProgress;
|
||||
if (GetNode().IsNull() || !GetNode()->IsKind(STANDARD_TYPE(Vrml_ConfigurationNode)))
|
||||
{
|
||||
@@ -271,12 +225,13 @@ bool Vrml_Provider::Read(const TCollection_AsciiString& thePath,
|
||||
//=======================================================================
|
||||
bool Vrml_Provider::Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress)
|
||||
{
|
||||
Handle(TDocStd_Document) aDoc = new TDocStd_Document("BinXCAF");
|
||||
Handle(XCAFDoc_ShapeTool) aShTool = XCAFDoc_DocumentTool::ShapeTool(aDoc->Main());
|
||||
aShTool->AddShape(theShape);
|
||||
return Write(thePath, aDoc, theProgress);
|
||||
return Write(thePath, aDoc, theWS, theProgress);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@@ -64,24 +64,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theDocument document to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theDocument document to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const Handle(TDocStd_Document)& theDocument,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
@@ -104,24 +86,6 @@ public:
|
||||
Handle(XSControl_WorkSession)& theWS,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Reads a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the import CAD file
|
||||
//! @param[out] theShape shape to save result
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Read operation has ended correctly
|
||||
Standard_EXPORT virtual bool Read(const TCollection_AsciiString& thePath,
|
||||
TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
//! Writes a CAD file, according internal configuration
|
||||
//! @param[in] thePath path to the export CAD file
|
||||
//! @param[out] theShape shape to export
|
||||
//! @param theProgress[in] progress indicator
|
||||
//! @return true if Write operation has ended correctly
|
||||
Standard_EXPORT virtual bool Write(const TCollection_AsciiString& thePath,
|
||||
const TopoDS_Shape& theShape,
|
||||
const Message_ProgressRange& theProgress = Message_ProgressRange()) Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
//! Gets CAD format name of associated provider
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
# !!!! This file is generated automatically, do not edit manually! See end script
|
||||
puts "TODO CR23096 ALL: Error: First - file was not read - exception "
|
||||
puts "TODO CR23096 ALL: Error : Here is reading problem"
|
||||
|
||||
puts "TODO CR00000 ALL: Error: First - file was not read - exception "
|
||||
puts "TODO CR00000 ALL: Error : Here is reading problem"
|
||||
puts "TODO CR00000 ALL: Error: STEPCAFControl_Provider"
|
||||
|
||||
set filename tr9_r0301-pe-adjusted.stp
|
||||
|
@@ -1,6 +1,7 @@
|
||||
# !!!! This file is generated automatically, do not edit manually! See end script
|
||||
puts "TODO CR23096 ALL: Error: First - file was not read - exception "
|
||||
puts "TODO CR23096 ALL: Error : Here is reading problem"
|
||||
puts "TODO CR00000 ALL: Error: First - file was not read - exception "
|
||||
puts "TODO CR00000 ALL: Error : Here is reading problem"
|
||||
puts "TODO CR00000 ALL: Error: STEPCAFControl_Provider"
|
||||
|
||||
|
||||
set filename buc60990.stp
|
||||
|
@@ -2,9 +2,7 @@ puts "========"
|
||||
puts "0030691: test glTF reader on standard sample models"
|
||||
puts "========"
|
||||
|
||||
ReadGltf D [locate_data_file bug30691_DamagedHelmet.gltf]
|
||||
|
||||
set anAssetInfo [ReadGltf [locate_data_file bug30691_DamagedHelmet.gltf] -assetInfo]
|
||||
set anAssetInfo [ReadGltf D [locate_data_file bug30691_DamagedHelmet.gltf] -assetInfo]
|
||||
if { "$anAssetInfo" != "generator: Khronos Blender glTF 2.0 exporter" } { puts "Error: unexpected asset info" }
|
||||
|
||||
XGetOneShape s D
|
||||
|
@@ -49,7 +49,12 @@ set fd [open ${imagedir}/${casename}_zero_ascii_dos.stl w]
|
||||
fconfigure $fd -translation crlf
|
||||
puts $fd "solid \nendsolid"
|
||||
close $fd
|
||||
readstl res_zero_ascii_dos ${imagedir}/${casename}_zero_ascii_dos.stl -brep
|
||||
puts "REQUIRED ALL: Error: RWStl_Provider :"
|
||||
catch {
|
||||
if {[readstl res_zero_ascii_dos ${imagedir}/${casename}_zero_ascii_dos.stl -brep]} {
|
||||
puts "Error: empty file should be marked as invalid input file"
|
||||
}
|
||||
}
|
||||
|
||||
puts "\n#======================================================================"
|
||||
puts "# Ascii file with no facets, LF"
|
||||
@@ -58,7 +63,11 @@ set fd [open ${imagedir}/${casename}_zero_ascii_unix.stl w]
|
||||
fconfigure $fd -translation lf
|
||||
puts $fd "solid \nendsolid"
|
||||
close $fd
|
||||
readstl res_zero_ascii_unix ${imagedir}/${casename}_zero_ascii_unix.stl -brep
|
||||
catch {
|
||||
if {[readstl res_zero_ascii_unix ${imagedir}/${casename}_zero_ascii_unix.stl -brep] != 1} {
|
||||
puts "Error: empty file should be marked as invalid input file"
|
||||
}
|
||||
}
|
||||
|
||||
puts "\n#======================================================================"
|
||||
puts "# Binary file with single facet"
|
||||
@@ -79,7 +88,11 @@ set fd [open ${imagedir}/${casename}_zero_binary.stl w]
|
||||
fconfigure $fd -translation binary
|
||||
puts -nonewline $fd "stl [string repeat { } 76][binary format i 0]"
|
||||
close $fd
|
||||
readstl res_zero_binary ${imagedir}/${casename}_zero_binary.stl -brep
|
||||
catch {
|
||||
if {[readstl res_zero_binary ${imagedir}/${casename}_zero_binary.stl -brep] != 1} {
|
||||
puts "Error: empty file should be marked as invalid input file"
|
||||
}
|
||||
}
|
||||
|
||||
puts "\n#======================================================================"
|
||||
puts "# Empty file"
|
||||
@@ -87,5 +100,9 @@ puts "#======================================================================"
|
||||
puts "REQUIRED ALL: Error: premature end of file"
|
||||
set fd [open ${imagedir}/${casename}_empty.stl w]
|
||||
close $fd
|
||||
readstl res_empty ${imagedir}/${casename}_empty.stl -brep
|
||||
catch {
|
||||
if {[readstl res_empty ${imagedir}/${casename}_empty.stl -brep] != 1} {
|
||||
puts "Error: empty file should be marked as invalid input file"
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -53,7 +53,9 @@ provider.STEP.OCC.write.product.name :
|
||||
provider.STEP.OCC.write.surfacecurve.mode : 1
|
||||
provider.STEP.OCC.write.unit : 2
|
||||
provider.STEP.OCC.write.resource.name : STEP
|
||||
provider.STEP.OCC.write.multi.prefix :
|
||||
provider.STEP.OCC.write.sequence : ToSTEP
|
||||
provider.STEP.OCC.write.labels :
|
||||
provider.STEP.OCC.write.vertex.mode : 0
|
||||
provider.STEP.OCC.write.stepcaf.subshapes.name : 0
|
||||
provider.STEP.OCC.write.color : 1
|
||||
@@ -68,13 +70,14 @@ provider.VRML.OCC.read.fill.incomplete : 1
|
||||
provider.VRML.OCC.writer.version : 2
|
||||
provider.VRML.OCC.write.representation.type : 1
|
||||
provider.STL.OCC.read.merge.angle : 90
|
||||
provider.STL.OCC.read.brep : 0
|
||||
provider.STL.OCC.read.brep : 1
|
||||
provider.STL.OCC.write.ascii : 1
|
||||
provider.OBJ.OCC.file.length.unit : 1
|
||||
provider.OBJ.OCC.system.cs : 0
|
||||
provider.OBJ.OCC.file.cs : 1
|
||||
provider.OBJ.OCC.read.single.precision : 0
|
||||
provider.OBJ.OCC.read.create.shapes : 0
|
||||
provider.OBJ.OCC.read.create.single : 0
|
||||
provider.OBJ.OCC.read.root.prefix :
|
||||
provider.OBJ.OCC.read.fill.doc : 1
|
||||
provider.OBJ.OCC.read.fill.incomplete : 1
|
||||
@@ -102,10 +105,19 @@ provider.GLTF.OCC.write.author :
|
||||
provider.GLTF.OCC.write.trsf.format : 0
|
||||
provider.GLTF.OCC.write.node.name.format : 3
|
||||
provider.GLTF.OCC.write.mesh.name.format : 1
|
||||
provider.GLTF.OCC.write.draco.compression : 0
|
||||
provider.GLTF.OCC.write.draco.level : 7
|
||||
provider.GLTF.OCC.write.draco.position.bits : 14
|
||||
provider.GLTF.OCC.write.draco.normal.bits : 10
|
||||
provider.GLTF.OCC.write.draco.texture.bits : 12
|
||||
provider.GLTF.OCC.write.draco.color.bits : 8
|
||||
provider.GLTF.OCC.write.draco.generic.bits : 12
|
||||
provider.GLTF.OCC.write.draco.unified.quantization : 0
|
||||
provider.GLTF.OCC.write.forced.uv.export : 0
|
||||
provider.GLTF.OCC.write.embed.textures.in.glb : 1
|
||||
provider.GLTF.OCC.write.merge.faces : 0
|
||||
provider.GLTF.OCC.write.split.indices16 : 0
|
||||
provider.GLTF.OCC.write.parallel : 0
|
||||
provider.BREP.OCC.write.binary : 1
|
||||
provider.BREP.OCC.write.version.binary : 4
|
||||
provider.BREP.OCC.write.version.ascii : 3
|
||||
|
@@ -53,7 +53,9 @@ provider.STEP.OCC.write.product.name :
|
||||
provider.STEP.OCC.write.surfacecurve.mode : 1
|
||||
provider.STEP.OCC.write.unit : 2
|
||||
provider.STEP.OCC.write.resource.name : STEP
|
||||
provider.STEP.OCC.write.multi.prefix :
|
||||
provider.STEP.OCC.write.sequence : ToSTEP
|
||||
provider.STEP.OCC.write.labels :
|
||||
provider.STEP.OCC.write.vertex.mode : 0
|
||||
provider.STEP.OCC.write.stepcaf.subshapes.name : 0
|
||||
provider.STEP.OCC.write.color : 1
|
||||
|
@@ -96,7 +96,7 @@ if [catch {ReadFile D7 $write_path -conf "global.general.length.unit : 0.0254 "}
|
||||
}
|
||||
XGetOneShape S7 D7
|
||||
|
||||
array set areas {0 11995.4 1 0.0119954 2 47916.8 3 11979.2 4 0.0479168 5 0.0119792 6 47916.8 7 18.5678}
|
||||
array set areas {0 11995.4 1 0.0119954 2 11979.2 3 11979.2 4 11979.2 5 0.0119792 6 11979.2 7 18.5678}
|
||||
array set results {0 S0 1 S1 2 S2 3 S3 4 S4 5 S5 6 S6 7 S7}
|
||||
for { set anind 0} { $anind < 8 } { incr anind } {
|
||||
checkprops $results($anind) -s $areas($anind) -eps 1e-2
|
||||
|
@@ -52,7 +52,7 @@ if [catch {readfile S5 $filename -conf "global.general.length.unit : 1000 "} cat
|
||||
puts "OK : Reading is correct"
|
||||
}
|
||||
|
||||
array set areas {0 1.21752e+07 1 1.21752e+07 2 1.21752e+13 3 1.21752e+07 4 1.21752e+13 5 1.21752e+07}
|
||||
array set areas {0 1.21752e+13 1 1.21752e+07 2 1.21752e+13 3 1.21752e+07 4 1.21752e+13 5 1.21752e+07}
|
||||
array set results {0 res0 1 res1 2 S2 3 S3 4 S4 5 S5}
|
||||
for { set anind 0} { $anind < 6 } { incr anind } {
|
||||
checkprops $results($anind) -s $areas($anind) -eps 1e-2
|
||||
|
@@ -96,7 +96,7 @@ if [catch {ReadFile D7 $write_path -conf "global.general.length.unit : 1000 "} c
|
||||
}
|
||||
XGetOneShape S7 D7
|
||||
|
||||
array set areas {0 1.21752e+07 1 12.1752 2 1.21752e+07 3 1.21752e+07 4 12.1752 5 12.1752 6 1.21752e+07 7 1.21773e-05}
|
||||
array set areas {0 1.21752e+13 1 12.1752 2 1.21752e+13 3 1.21752e+13 4 12.1752 5 12.1752 6 1.21752e+13 7 1.21773e-05}
|
||||
array set results {0 S0 1 S1 2 S2 3 S3 4 S4 5 S5 6 S6 7 S7}
|
||||
for { set anind 0} { $anind < 8 } { incr anind } {
|
||||
checkprops $results($anind) -s $areas($anind) -eps 1e-2
|
||||
|
Reference in New Issue
Block a user