@joel
The simplest way is to drag the parameter to the python console, then you could get desclevel id without dtype and creator. e.g.c4d.DescID(1500)
.

If you want to get the DescID programmatically. I wrote a function to list all parameters and detail descriptions of an object. This may help you.
import c4d
def find_ident(value: int, prefix=""):
for key, val in c4d.__dict__.items():
if val == value and key.startswith(prefix):
return f"c4d.{key}"
def dump_params(obj: c4d.BaseList2D):
def dump_param_desc(bc):
for k, v in bc:
ident = find_ident(k, "DESC_")
if type(v) == str:
v = repr(v)
if not ident:
continue
if k == c4d.DESC_UNIT:
v = find_ident(v, "DESC_")
if k == c4d.DESC_CUSTOMGUI:
v = find_ident(v, "CUSTOMGUI") or v
if isinstance(v, c4d.Vector) and abs(v.x) > 1e10:
v = "Vector"
print('\t', ident, ":", v)
description = obj.GetDescription(c4d.DESCFLAGS_DESC_0)
descid: c4d.DescID
for bc, descid, _ in description:
name = bc[c4d.DESC_NAME] or bc[c4d.DESC_SHORT_NAME]
if not name:
continue
if descid[descid.GetDepth() - 1].dtype == c4d.DTYPE_GROUP:
print("---------")
print(name, descid, ":", repr(obj[descid]))
dump_param_desc(bc)
if bc[c4d.DESC_CUSTOMGUI] == c4d.CUSTOMGUI_SUBDESCRIPTION:
for subvector in [c4d.VECTOR_X, c4d.VECTOR_Y, c4d.VECTOR_Z]:
subdescid = c4d.DescID(*[descid[i] for i in range(descid.GetDepth())])
subdescid.PushId(c4d.DescLevel(subvector))
subbc = description.GetParameter(subdescid)
name = subbc[c4d.DESC_NAME] or subbc[c4d.DESC_SHORT_NAME]
if not name:
continue
name = name.replace(" . ", ".")
print(name, ":", obj[subdescid])
dump_param_desc(subbc)
if __name__ == "__main__":
obj = doc.GetActiveObject()
dump_params(obj)
Following is the outputs to the end:
Effectors (2009, 1009290, 1018639) : <c4d.InExcludeData object at 0x00000198DD88E9C0>
c4d.DESC_NAME : 'Effectors'
c4d.DESC_SHORT_NAME : 'Effectors'
c4d.DESC_VERSION : 3
c4d.DESC_ANIMATE : 0
c4d.DESC_CUSTOMGUI : c4d.CUSTOMGUI_INEXCLUDE_LIST
c4d.DESC_ACCEPT : <c4d.BaseContainer object at 0x00000198DD88DE00>
c4d.DESC_IDENT : 'ID_MG_MOTIONGENERATOR_EFFECTORLIST'
Plain (1500, 19, 1018544) : 0.99
c4d.DESC_NAME : 'Plain'
c4d.DESC_SHORT_NAME : 'Plain'
c4d.DESC_VERSION : 3
c4d.DESC_MIN : -1e+20
c4d.DESC_MAX : 1e+20
c4d.DESC_MINEX : 0
c4d.DESC_MAXEX : 0
c4d.DESC_STEP : 0.01
c4d.DESC_ANIMATE : 1
c4d.DESC_UNIT : c4d.DESC_UNIT_PERCENT
c4d.DESC_CUSTOMGUI : c4d.CUSTOMGUI_REALSLIDER
c4d.DESC_MINSLIDER : 0.0
c4d.DESC_MAXSLIDER : 1.0
c4d.DESC_REMOVEABLE : 0
Plain.1 (1501, 19, 1018544) : 1.0
c4d.DESC_NAME : 'Plain.1'
c4d.DESC_SHORT_NAME : 'Plain.1'
c4d.DESC_VERSION : 3
c4d.DESC_MIN : -1e+20
c4d.DESC_MAX : 1e+20
c4d.DESC_MINEX : 0
c4d.DESC_MAXEX : 0
c4d.DESC_STEP : 0.01
c4d.DESC_ANIMATE : 1
c4d.DESC_UNIT : c4d.DESC_UNIT_PERCENT
c4d.DESC_CUSTOMGUI : c4d.CUSTOMGUI_REALSLIDER
c4d.DESC_MINSLIDER : 0.0
c4d.DESC_MAXSLIDER : 1.0
c4d.DESC_REMOVEABLE : 0
Then you can get the DescID: c4d.DescID(c4d.DescLevel(1500, 19, 1018544))