I'm trying to read/open an XDE/OCAF XML file. I've tried already different ways of doing it. First, I've tried to read from the disk a .xml file, using:
TDocStd_Application::Open
and in my last attempt I've tried to read from an io.BytesIO() that comes from my C++ code also using TDocStd_Application::Open.
Bellow my code:
def read_ocaf_file():
output_stream = io.BytesIO()
# Save the document contents to the provided output stream
success = open_ocaf_file(output_stream) # C++ binded fuction that returns a stream containing the data of the TDocStd_Document
if success:
# prepare a doc
app = XCAFApp_Application.GetApplication_s()
doc = TDocStd_Document(TCollection_ExtendedString("XmlXCAF"))
app.InitDocument(doc)
#app = XCAFApp_Application.GetApplication_s()
tool = XCAFDoc_DocumentTool.ShapeTool_s(doc.Main())
tool.SetAutoNaming_s(False)
ctool = XCAFDoc_DocumentTool.ColorTool_s(doc.Main())
store = XmlXCAFDrivers_DocumentStorageDriver(
TCollection_ExtendedString("Copyright: Open Cascade, 2001-2002")
)
ret = XmlXCAFDrivers_DocumentRetrievalDriver()
app.DefineFormat(
TCollection_AsciiString("XmlXCAF"),
TCollection_AsciiString("Xml XCAF Document"),
TCollection_AsciiString("xml"),
ret,
store,
)
#doc.UnsetIsReadOnly()
status = app.Open(io.BytesIO(output_stream.getvalue()), doc)
assert status == PCDM_StoreStatus.PCDM_SS_OK
else:
print("Failed to save the document.")
labels = TDF_LabelSequence()
tool.GetFreeShapes(labels)
shapes = []
for i in range(1, labels.Length() + 1):
label = labels.Value(i)
shape = self.shape_tool.GetShape_s(label)
shapes.append(shape)
app.Close(doc)
Although, at the end the app.Open returns PCDM_StoreStatus.PCDM_SS_OK when I try to get data from the doc is like it's empty, If I try to do for example: app.Close(doc), I get this following error:
app.Close(doc)
OCP.Standard.Standard_Failure: cannot close a document that has not been opened
Does anyone have experience on working with OCAF/XDE files and has experienced similar difficulties with TDocStd_Document?
Any insights or examples on this matter would be highly appreciated!
I'm trying to read/open an XDE/OCAF XML file. I've tried already different ways of doing it. First, I've tried to read from the disk a .xml file, using:
TDocStd_Application::Open
and in my last attempt I've tried to read from an io.BytesIO() that comes from my C++ code also using TDocStd_Application::Open.
Bellow my code:
Although, at the end the app.Open returns PCDM_StoreStatus.PCDM_SS_OK when I try to get data from the doc is like it's empty, If I try to do for example: app.Close(doc), I get this following error:
Does anyone have experience on working with OCAF/XDE files and has experienced similar difficulties with TDocStd_Document?
Any insights or examples on this matter would be highly appreciated!
Thank you very much for the attention