Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Working with TDocStd_Document: Empty document when trying to use TDocStd_Application::Open wrapped by OCP

Open
#182 2 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
cpp, python
Domain
tooling

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

question

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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from CadQuery/OCP

All issues in CadQuery/OCP

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.