The Maxon SDK Team is currently short staffed due to the winter holidays. No forum support is being provided between 15/12/2025 and 5/1/2026. For details see Maxon SDK 2025 Winter Holidays.
  • maxon::String in classic API

    6
    1
    0 Votes
    6 Posts
    1k Views
    C4DSC
    Thanks for the confirmation SNHookClass still using the legacy String.
  • Quit Cinema after SAVE_AFTER message

    r20 python
    3
    0 Votes
    3 Posts
    705 Views
    B
    Hi @m_adam! Thank you for your response. I looked for a way to mark the post as a question while submitting, I didn't think to look at the submitted post again for that option. I'll remember next time. KillDocument and Exiting were never ment to run consecutively, they were just two things I wanted to try for different scenarios. I should have clarified that. StopAllThreads() unfortunately wasn't enough, but adding in a small message plugin to trigger the exit from the CoreMessage() did the trick. I'm now changing a global boolean for the CoreMessage() to look for. Is that what you had in mind? Thank you for your help, everything works now. I'll make sure and try and find the "mark as solved" button on my way out Edit: I can't actually mark your comment as the solution, only this one...
  • Add Dotted Line to Labels

    4
    1
    0 Votes
    4 Posts
    852 Views
    M
    Hi @Ogers, first of all, welcome in the plugincafe community. Before to start I would like to point you to: -Q&A New Functionality. -About Tags and Tagging. I've setup your topic correctly. As you can see, and already figured in this topic what you are seeing in your picture is a DescriptionCustomGui especially how the CustomGui display each DescId entry. That means it's not a text, but a parameter ID. Which can be dragged into the console / animated for example. There is no proper way to creates theses without using DescriptionCustomGui. With that's said I will answer to your other topic. Cheers, Maxime.
  • Where to put my .dylib ?

    Moved c++
    11
    0 Votes
    11 Posts
    6k Views
    r_giganteR
    Hi ascorbin, I see the point. Well in this case I strongly suggest you to google around for install_name_tooland see (e.g. here) how helpful it can be with regard to dylib handling. What I suggest is: make a backup copy of your dylib execute in a terminal install_name_tool -id "@loader_path/res/libs/osx/<yourlib>.dylib" <path to your c4d plugin>/res/libs/osx/<yourlib>.dylib rebuild your plugin to be sure that the referenced .dylib informs your plugins about the install name update This should update the install name of your dylib, inform your plugin about the path to look for and, in the end, have your plugin properly loading the dynamic library. Let me know, Riccardo.
  • R20 Startup script location - python_init.py

    python r20
    9
    1 Votes
    9 Posts
    4k Views
    T
    @m_adam said in R20 Startup script location - python_init.py: This will be fixed within a future release. Well, that's a relief then. Good to know. Thank you Maxime for the clarification. Kind regards, Tom
  • GeDialog TabGroup

    r19 c++
    6
    0 Votes
    6 Posts
    1k Views
    M
    Hi @C4DS, Unfortunately, there are no messages for clicking on this button since Tab Group was really not designed to handle to this kind of cases. With that's said, I've thought of BFM_GETCURSORINFO, maybe you can find a way to get the coordinate of theses button, and if they are drawn. Then you can define a member variable for enabling/disabling the addition of a new Tab according to the mouse position. Cheers, Maxime.
  • Field Layer Description Names

    c++ r20 macos
    5
    0 Votes
    5 Posts
    1k Views
    D
    Thank you so much, that's exactly what I needed! Dan
  • BaseContainer FlushAll crashes

    r19 c++
    3
    0 Votes
    3 Posts
    697 Views
    C4DSC
    Seems I have been doing it wrong for all those years. Thanks for leading me onto the right path ...
  • Shortcuts for buttons from gui.GeDialog

    r20 python
    4
    0 Votes
    4 Posts
    1k Views
    FlavioDinizF
    Thanks a lot @C4DS @m_adam ! So I think it's better to create separate CommandDataplugins to perform the same action of each button, it's less complicated and allow the user to change the keyboard shortcuts and exclude the need of the GUI being always open. Although the m_adam suggestions may be useful for other plugins ideas I have. I'll try it later. Thanksss !
  • Bevel selection after a CSTO

    python r20
    2
    3
    0 Votes
    2 Posts
    518 Views
    a_blockA
    Hi Pim, no, I don't think so. Basically the Selection tag reacts to MSG_POINTS_CHANGED and MSG_POLYGONS_CHANGED, in the end adding or removing the needed amount of points or polygons in the selection array. But there's no information, what to do with for example additional points. And so it heavily depends on where the new points/polygons are added and also which tool does so, what the outcome for those selected entities will be. Something that will probably be addressed in future with the CustomDataTag introduced in R20. Cheers, Andreas
  • Project Tool failing when installing on Mac

    project tool macos
    3
    0 Votes
    3 Posts
    973 Views
    F
    Hey that was it! Thanks
  • Objectdata and Bevel objects

    python r20
    6
    2
    0 Votes
    6 Posts
    2k Views
    P
    Hi Riccardo, I am not sure what you mean, but I guess you mean that you define selection tags on one of the children and use that selection on the resulting objectdata object? -Pim
  • Separator in plugins menu

    c++ r19 r20
    3
    0 Votes
    3 Posts
    670 Views
    a_blockA
    Hi, yes, this is still the "official" way to add separators to the Plugins menu. Cheers, Andreas
  • Checknames option

    python r20
    3
    0 Votes
    3 Posts
    873 Views
    P
    Works great, thanks. -Pim
  • Dependence Cache flag

    c++ r19 r20
    3
    0 Votes
    3 Posts
    766 Views
    rsodreR
    Hey @a_block , I finally got some time to try again, and I actually had two problems First, I'm adding that object as a dependent because one of my modifiers need it, and it was sending a Join modeling command to read it as a single polygon. The command was invalidating the cache, entering a loop. Now I first clone it before join, and the cache flag remains intact. Just looking at the CACHE dirty count of the object was not enough to detect if the deform cache was dirty, I need to look at it's cache dirty cache count. Sounds weird but works, and makes sense to me. if ( distributionObject != nullptr ) { // Check deformed cache auto distributionObjectCache = distributionObject->GetCache( hh ); if ( distributionObjectCache != nullptr ) { auto dirtyCount = distributionObjectCache->GetDirty( DIRTYFLAGS_CACHE ); if ( distributionObjectDirtyCount_ != dirtyCount ) { dirty = true; distributionObjectDirtyCount_ = dirtyCount; } } } op->AddDependence( hh, distributionObject, DIRTYFLAGS_DATA | DIRTYFLAGS_CACHE ); }
  • Bevel Object Type

    python r20
    3
    0 Votes
    3 Posts
    727 Views
    P
    Thanks. And yes, I used that value already. -Pim
  • Object Target Expression in Python

    Moved
    8
    0 Votes
    8 Posts
    2k Views
    a_blockA
    Hi, unfortunately we can't help developing algorithms. So, what has been said here and in the Quaternion Rotation thread, is probably all we can contribute from MAXON's side. Maybe somebody from our community is willing to step into this and help out? Cheers, Andreas
  • Quaternion rotation

    5
    0 Votes
    5 Posts
    2k Views
    a_blockA
    Hi, please, do not delete discussions threads. The contained information might be valuable for future readers. Cheers, Andreas
  • 0 Votes
    2 Posts
    841 Views
    M
    Hi @pyr, In Python, there is a GIL which do not allow Python by design to execute something in parallel. In Cinema 4D all our functions (so everything which is in the c4d python module) is "GIL safe" in order to avoid any issue with Python memory. So in Cinema 4D thread are designed for doing GUI, or background stuff. Moreover, keep in mind creating a Thread have a cost in term of time (to create, execute, delete them). Finally, I would like to point you to multiprocessing vs multi-threading. Note that since it's more an algorithm problem than an issue related to our API, we can only provide you hints. btw, I also turned your topic as a question. See Q&A New Functionality. Cheers, Maxime.
  • SetDocumentData options for exporting

    r20 python
    4
    0 Votes
    4 Posts
    1k Views
    M
    Hi @Rage I guess export_OBJ example on our Github repository is what you are looking for. Note for the moment values of the BaseContainer are not available in the Python Documentation. But you could find them in the C++ documentation about fobjexport2.h. If you have any question please let me know. Cheers, Maxime.