Working with TDocStd_Document: Empty document when trying to use TDocStd_Application::Open wrapped by OCP
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Start with the TDocStd_Application::Open call, the open_ocaf_file binding, and the subsequent app.Close(doc) failure described in the issue. Check how the BytesIO input and returned status are handled, then verify that the opened document exposes free shapes through GetFreeShapes and can be closed successfully.
Written by the indexing model from the issue text.
Description
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!
Thank you very much for the attention
- Dominant language
- C++
- Stars
- 203
- Forks
- 50
- Avg merge
- 3d 4h
- Merged PRs (30d)
- 1
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from CadQuery/OCP
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
Difficulty 3/5 1-2 days Newbie friendliness 68/100
-
Difficulty 3/5 1-2 days Newbie friendliness 58/100
-
Python 3.14t buildOpen
Difficulty 5/5 Over a week Newbie friendliness 35/100
-
OCCT8
Difficulty 3/5 1-2 days Newbie friendliness 35/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
ROCm/rocm-systems#12638 ·
Maintainers usually reply within 2 days
-
Difficulty 1/5 Under an hour Newbie friendliness 78/100
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
Ryan-Millard/Img2Num#652 · 1 comment ·
Maintainers usually reply within 2 days
-
Difficulty 1/5 Under an hour Newbie friendliness 72/100
lxqt/qtermwidget#688 ·
Maintainers usually reply within 1 day
-
CI enhancement tests
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
lfortran/lfortran#13885 · 1 comment ·
Maintainers usually reply within 1 day