Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
Hello, I've been trying to find a more up-to-date version of this list of Cinema 4D IDs posted to GitHub by seeminglee. Here is another that was created for COFFEE by Niklas Rosenstein.
I find it extremely useful in understanding C4D messages. Does anyone know how I could find/create something like this for R21? Thank you!
Hi @blastframe, while the code provided by @zipit will work for most of the symbols There will be some symbols missing, some are not uppercase (like Ocube), some are made from other types, like c4d.ID_USERDATA which return a DescID).
c4d.ID_USERDATA
So the safest way to process is to retrieve everything that is not a module, a class, a type object, a method or a function.
import c4d import types def GetAllSymbols(): def IsSymbol(x): isSymbols = False obj = getattr(c4d, x) return not isinstance(obj, (types.FunctionType, types.BuiltinFunctionType, types.BuiltinMethodType, types.MethodType, types.UnboundMethodType, types.ClassType, types.TypeType, types.ModuleType)) dirC4D = filter(lambda objStr: IsSymbol(objStr), dir(c4d)) values = {"c4d.{0}".format(objStr): getattr(c4d, objStr) for objStr in dirC4D} return values def main(): allSymbol = GetAllSymbols() for symbol, value in allSymbol.items(): print symbol, value # Execute main() if __name__=='__main__': main()
Cheers, Maxime.
Hi,
I am not quite sure, if I do understand your question correctly. At least the first link is a dummy module listing members of all types of the c4d module, but you talk about ids and messages. Anyways, you can in both cases just inspect the c4d module. Here is a little function that inverts the c4d module dictionary so that you can plug integer symbols into the returned dict and get a list of strings which are associated with that integer (Cinema's symbol namespace is anything but collision free).
c4d
def _get_smybol_table(): """Function to extract and invert the integer symbols and their corresponding strings symbols from the c4d module. Will ignore all members of ``c4d`` that are not of type ``int`` and members where the string symbol is not all in capitals letters. Returns: dict: The inverted c4d module dict, with integer symbols as keys and string symbols as lists of values. """ tbl = {} for name, sid in c4d.__dict__.items(): if (not isinstance(sid, int) or not isinstance(name, str) or not name.isupper()): continue tbl[sid] = [name] if sid not in tbl else tbl[sid] + [name] return tbl # The symbol table. _SYMBOL_TABLE = _get_smybol_table()
Cheers, zipit
Thank you @zipit . for name, sid in c4d.__dict__.items(): was what I needed!
for name, sid in c4d.__dict__.items():
@m_adam Thank you for the clarification and the code example, Maxime!