SOLVED how can i get the id of each target? note: I will add more with c4d.CallButton ()

68664532-a8c5-4eb9-9e75-88ea4e2631a6-image.png

Hi,

the description for this tag is obviously being built dynamically. By poking around in the editor, you can find out that the field Target in the tab Parent is starting at the id 30001 and placed with a stride of 10. So the next ids would be at 30011, 30021, etc.

To test up to which point your tag has been populated, you should enumerate all possible ids consecutively and test for each if the data container of your tag contains an element of the type BaseLink at that id. When an id fails this test, you know you have reached the end, i.e. the last id in your enumeration was the last valid id. The code could look something like this:

cid = 30001
result, data = [], constraint_tag.GetData()

while True:
    if not data.GetType(cid) is c4d.DA_ALIASLINK:
        break
    result.append(cid)
    cid += 10

Cheers,
zipit

While the method provided by Zipit Is fine, it is not 100% reliable.

here how to achieve, unfortunately, the ELEMENT_Count value is hardcoded and no way for you to retrieve it.

    constraintTag = doc.GetActiveTag()
    targetCount = constraintTag[c4d.ID_CA_CONSTRAINT_TAG_PARENT_TARGET_COUNT]
    for i in range(targetCount):
        CONSTRAINT_ELEMENT = 10  # This is hardcoded
        targetId = c4d.ID_CA_CONSTRAINT_TAG_PARENT_TARGET_COUNT + i * CONSTRAINT_ELEMENT + 1
        print(constraintTag[targetId])

Cheers,
Maxime.