CadQuery / CadQuery/OCP

PMI annotations reading (TDF_Label.FindAttribute from OCP not working properly)

Open
#153 3 comments 1 reaction 0 assignees View on GitHub
Dominant language
C++
Stars
197
Forks
47
Avg merge
2d 2h
Merged PRs (30d)
6

Description

Hello,

I'm trying to implement the reading of PMI annotations (Geometrical Dimensions and tolerances) from a step file using OCP.

I have a C++ code that is working fine and that I have already tested:
annotations

In my C++ code, I have something like this:

```cpp

m_gdtTool = XCAFDoc_DocumentTool::DimTolTool(doc->Main());

TDF_LabelSequence labels_datums, label_geoms, label_dims, label_dimTols;
m_gdtTool->GetDatumLabels(labels_datums);
m_gdtTool->GetDimensionLabels(label_dims);
m_gdtTool->GetGeomToleranceLabels(label_geoms);

int datumSize = labels_datums.Length();
int dimSize = label_dims.Length();
int geomSize = label_geoms.Length();
// Dimensional Tolerances
for (int i = 1; i <= dimSize; ++i)
{
const TDF_Label& label_dim = label_dims.Value(i);
Handle(XCAFDoc_Dimension) aDimAttr;
label_dim.FindAttribute(XCAFDoc_Dimension::GetID(), aDimAttr);

if (!aDimAttr.IsNull())
{
Handle(XCAFDimTolObjects_DimensionObject) aDimObject = aDimAttr->GetObject();
}
}

```

So, I have translated into python:

```python
labels_datums = TDF_LabelSequence()
labels_dims = TDF_LabelSequence()
labels_geoms = TDF_LabelSequence()

self.gdt_tool.GetDatumLabels(labels_datums)
self.gdt_tool.GetDimensionLabels(labels_dims)
self.gdt_tool.GetGeomToleranceLabels(labels_geoms)

datum_size = labels_datums.Length()
dim_size = labels_dims.Length()
geom_size = labels_geoms.Length()
for i in range(1, dim_size + 1):
label_dim = labels_dims.Value(i)
aDimAttr = XCAFDoc_Dimension()
found = label_dim.FindAttribute(XCAFDoc_Dimension.GetID_s(), aDimAttr)

if found:
aDimObject = aDimAttr.GetObject()
```
When the execution gets in the line `aDimObject = aDimAttr.GetObject()` I get this error:

![image](https://github.com/user-attachments/assets/1df5ad65-d508-4419-ae46-0685592978c7)

I have verified and compared the label_dim variable in both python and c++ :
### python
![image](https://github.com/user-attachments/assets/c3a6d447-45ff-4aeb-b972-bbb0d99a8aff)
### c++
![image](https://github.com/user-attachments/assets/42a9ad7a-a735-4a8c-bbf0-d14b43ed5281)

Do you have any ideas why I'm getting this error?

I suspect that the problem is coming from TDF_Label.FindAttribute method:

I think that for my case it's falling in the third case, and maybe the pybind11 wrapping of this method is not working properly because the generic type?
![image](https://github.com/user-attachments/assets/6f261492-a0a1-4a93-9a61-3c4e0a89a93b)

I'm attaching the c++ project and the step file used to test the reading. The main file is called TestOCCT.cpp

Thank you very much for the attention. Any insight on how to solve this issue or workaround will be highly appreciated!
[TestOCCPMI.zip](https://github.com/user-attachments/files/16618172/TestOCCPMI.zip)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.