Hello @mocoloco,
thank you for reaching out to us. I have forked your question from How to Highlight a Button since it is a new question which does constitute a new topic. I am also currently on vacation which means that you will have to address the rest of the team to get support in a timely fashion (addressing just me and hiding your question in an older topic was probably what got your question being overlooked).
About your question(s):
You can find out more about dialog resources, i.e., defining a dialog in a file and not programmatically, in
Resource Files Manual and
Dialog Resource. Both manuals are part of our C++ documentation but do translate quite directly to Python since resource files are mostly a language agnostic topic. It also remains unclear to me if you actually want to define a dialog or a node since *"using .RES" does not distinguish the two. In either case the resource snippet I did post in the other thread could be used as a template for both cases.
I am also not quite sure how the second part of your question is meant. You usually do react to dialog input events in
GeDialog.Command. In a node you would have to indeed listen in NodeData.Message() as pointed out by yourself. In a dialog the value would be then attached to the dialog and in case of a node to the node. I.e., in the case of the muscle object thingy polling the quicktab gadget could look like this:
Message(self, node, mid, mdata):
"""Polls a quicktab gadget for the hypothetical muscle object case.
Args:
node (c4d.BaseList2D): The node to which the message has been sent.
mid (int): The message id.
mdata (any): The message data. In case of description messages usually
a `dict` in Python.
"""
# The conditioning to a specific message/event type is optional, but
# should be in your case probably MSG_DESCRIPTION_POSTSETPARAMETER.
if mid == c4d.MSG_DESCRIPTION_POSTSETPARAMETER:
# Unpack from which element the message has been sent.
eid = mdata["descid"][0].id
# This has been sent by the quicktab gadget.
if eid == c4d.ID_CA_MUSCLE_OBJECT_STATE:
# Get the node state of the parameter which has that quicktab GUI
# and do different things based on the state.
state = node[c4d.ID_CA_MUSCLE_OBJECT_STATE]
if state == c4d.ID_CA_MUSCLE_OBJECT_STATE_RELAX:
# ...
elif state == c4d.ID_CA_MUSCLE_OBJECT_STATE_COMPRESSED:
# ...
# ...
return True
For a more precise answer you should post code or a more precise description of what you are trying to do. And you should also address the rest of the team since I am still going to be on vacation for a few days.
Cheers,
Ferdinand