
Mon, 03/17/2025 - 14:11
Forums:
Hi all,
I am using the lastest version of pythonocc-core. I just want to extract the name of shape / label and print it out:
# Get all labels containing shapes
labels = TDF_LabelSequence()
shape_tool.GetFreeShapes(labels)
# Iterate through all labels and print their names
for i in range(labels.Length()):
label = labels.Value(i + 1) # Labels are 1-indexed
if label.IsNull():
print("Null label encountered, skipping...")
continue
# Use FindAttribute to check for and retrieve the name attribute
name_attr = TDataStd_Name()
if label.FindAttribute(TDataStd_Name.GetID(), name_attr):
name = name_attr.Get()
print(f"Shape Name: {name}")
else:
print("Unnamed Shape")
But then, the following error appeared:
An error occurred: Wrong number or type of arguments for overloaded function 'TDF_Label_FindAttribute'.
Possible C/C++ prototypes are:
TDF_Label::FindAttribute(Standard_GUID const &,opencascade::handle< TDF_Attribute > &)
TDF_Label::FindAttribute(Standard_GUID const &,Standard_Integer const,opencascade::handle< TDF_Attribute > &)
Could you please help me to overcome this issue, as I have not found any example regarding FindAttribute() in python. :-(
Thank you so much!
Mon, 03/17/2025 - 14:16
Hello.
Please use the handle type as a second argument.
Best regards, Dmitrii.
Mon, 03/17/2025 - 14:24
Thank yu @Dmitrii for your tip. Unfortunately, the Handle_TDataStd_Name is not found / cannot be imported from OCC.Core.TDataStd.
Well, I do not know whether I am using the proper class for handle or not. :-(
Following is my full code:
Mon, 03/17/2025 - 14:59
Well, look into code, I see that a lot of object that not marked as Handle already handle. shape_tool is a handle, doc is handle. But attribute for some reason - not.
There are some problem from wrapping side, please share bugs with OCC-Py project.
Or try to create variable with basic type and allocate the name attribute:
TDF_Attribute anAttr = TDataStd_Name();
Best regards, Dmitrii.
Mon, 03/17/2025 - 15:36
It did not help with TDF_Attribute :-(.
Mon, 03/17/2025 - 15:40
I already submitted an Issue by pythonocc-core at https://github.com/tpaviot/pythonocc-core/issues/1415. But, personally, I think I missed an important point of
FindAttribute()
.Mon, 03/17/2025 - 16:37
As a workaround you may try using static method
RWMesh::ReadNameAttribute()
. It will not allow distinguishing labels without name from labels with an empty name""
, though.Mon, 03/17/2025 - 17:00
Thank you for your info. How can I find RWMesh Class? As I remember, there is a Package namely e.g. `OCC.Core.RWMesh`.
Tue, 03/18/2025 - 08:08
lanluu wrote: