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.
  • Legacy Code still a thing?

    2024 c++ windows
    11
    0 Votes
    11 Posts
    2k Views
    Y
    Oh sorry, thank you. I totally missed that.
  • Error building R25 macOS - TypeTraitExpr

    r25 c++ macos
    7
    1
    0 Votes
    7 Posts
    1k Views
    rsodreR
    Thanks for all the tips @ferdinand The solution was Catalina + XCode 12.4
  • How to use GenerateDragArray() with Node Editor?

    windows 2024 python
    6
    1
    0 Votes
    6 Posts
    992 Views
    DunhouD
    Thanks for that @ferdinand @m_adam , yes, Ferdinand is right, Maxime's point is too "pro" for me, and with some maxon decorators I never used in some way mess me up, with Ferdinand's "rookie" like explain that I can understand this more, thanks for your both respected work. Cheers~ DunHou
  • Howto add headers & dividers for a ShowPopupDialog?

    windows s26 python
    13
    0 Votes
    13 Posts
    2k Views
    G
    It works as expected in C4D 2024, but not in the previous versions.
  • 1 Votes
    3 Posts
    661 Views
    moghurtM
    @m_adam m_adam resolved the issue perfectly. Thanks for the great support!
  • How to Apply a modeling command?

    s26 windows python
    3
    0 Votes
    3 Posts
    561 Views
    G
    Thanks man, i'll take a look at it!
  • How to set options when saving TIF file

    2023 c++
    2
    1
    0 Votes
    2 Posts
    448 Views
    ferdinandF
    Hello @kbar, Thank you for reaching out to us. You cannot do what you want to do from the classic API. When we use the classic API interface BaseBitmap::Save internally, we always pass nullptr or the empty container when saving a FILTER_TIF. There is unfortunately no classic API translation layer anymore for this aspect of TIFF saving. But you can get the underlying ImageRef with BaseBitmap::GetImageRef and then use the Image API directly to save things as you want them to be saved: Saving an ImageRef to Disk maxon::MEDIASESSION::TIFF::EXPORT Namespace Note that other than in the classic API, image data is expressed by more than one type in the maxon API. To save a plain ImageRef, you will have first to insert it into a ImageTextureRef via ::AddChildren, as only it has the ::Save method. Cheers, Ferdinand
  • How do you manipulate the points on a spline?

    2023 windows python
    3
    0 Votes
    3 Posts
    619 Views
    M
    Hi @ll2pakll, I am glad that you solved your issue. Message(c4d.MSG_UPDATE) is indeed required to finalize your spline editing. If you want a complete example on spline editing please take a look at geometry_splineobject.py example. Cheers, Maxime.
  • How to create a radial (pie) menu?

    windows s26 python
    6
    0 Votes
    6 Posts
    2k Views
    G
    Thanks for your detailed answers, i hoped there is a simpler way to do it)... Pie menus is a very common thing nowadays, why maxon developers haven't implemented it already? In modo for example you can create pie menus, popups...etc without any coding. Not every user is ready/have the time/etc to learn python to build a simple popup, but almost every user needs to customize their working software. I really hope you'll implement these features soon.
  • OBJ Import setting not changing

    python 2024 windows
    5
    0 Votes
    5 Posts
    953 Views
    ferdinandF
    Hey @del, Thank you for pointing out that this part of our examples, I overlooked this aspect this morning. I have fixed the issue in our local repository for import_obj_r13.py. The updated line is: objImport[c4d.OBJIMPORTOPTIONS_PHONG_ANGLE_DEFAULT] = c4d.utils.DegToRad(22.5) and it will go live with the next docs update. I cannot update the legacy version of the SDK in import_OBJ.py as I lack the permissions to write there even in our local repository. Cheers, Ferdinand
  • Check if a texture is missing

    python 2024 macos
    2
    0 Votes
    2 Posts
    634 Views
    ferdinandF
    Hello @visualride, Thank you for reaching out to us. I would recommend having a look at c4d.documents.GetAllAssetsNew . Helpful might also be the thread Get all Textures for a Material. It is one of the multiple threads where I showcased the usage of GetAllAssetsNew (search for GetAllAssetsNew and my user name to find the other threads). In this thread you can see here how to read the exists field in asset data to know if Cinema 4D can find that asset. But asset handling can get complex when node materials are involved as shown here (also a good place to better understand the data associated with MSG_GETALLASSETS). The thread shows also a simpler approach using BaseDocument.GetAllTextures. You can then just check with os.exists if the paths do exist. You might have to deal with relative paths here, depending on the document. Cheers, Ferdinand
  • Problem with MessageData plugin

    2023 windows python
    5
    0 Votes
    5 Posts
    1k Views
    gheyretG
    Hi @ferdinand Thank you so much for your explain, i understand what's happen now. Cheers
  • How to access PLA data

    c++
    19
    0 Votes
    19 Posts
    3k Views
    F
    Hi @ferdinand , Thanks very much for all of your time and tips!! Facundo
  • Adding a STATICTEXT element to a Description... changes in C4D 2024?

    2024 c++
    10
    0 Votes
    10 Posts
    2k Views
    fwilleke80F
    Very informative, thank you Ferdinand!
  • Custom Build C4D.2024.py310 ?

    2024 python
    7
    0 Votes
    7 Posts
    2k Views
    gheyretG
    Hi @Unit-Image-Dev Thank you for your reply. That's so cool! and i will try it.
  • [PYTHON] How to properly set the toggle of viewport solo

    python 2024 2023 s26
    3
    0 Votes
    3 Posts
    701 Views
    B
    In the past I have refrained from CallCommands and CallButtons because they used to add to the undo queue or did. But I suppose in this instance I can just do it for thise purpose.
  • 0 Votes
    6 Posts
    2k Views
    H
    Hi Ferdinand, Yeah, I'll need to do dirty checking for sure. Not because I am shipping this to any customers (unless I can find a good licensing framework ), but because the nature of my plugin is to create quite a few objects; We could easily reach 100s or even 1000s of objects, depending on the situation. So I implemented primitive dirty checking from one of the links you provided, and this helps a LOT with the performance - as you're mentioning, just ignoring the cache and recreating everything every time GetVirtualObjects is called would effectively kill Cinema 4D. Especially when fiddling with parameters, as the algorithm to layout all the objects I am creating is quite intensive. So I'm using your code from this topic https://developers.maxon.net/forum/topic/14936/difficulties-to-dedect-the-right-message-data/2 to make sure I do proper dirty checking for my own generator and all linked objects before I decide to return the cache or generate all objects again. I'm not done yet, but early tests seem pretty promosing. Now if only there was a simple way to split the large python file into multiple files, then bundle them all together for one giant python file so I wouldn't have to mess with module paths. 1000 line code files get old real fast. Thanks again!
  • How to obtain the selection order of objects in C++

    s26 c++ macos windows
    4
    1
    0 Votes
    4 Posts
    811 Views
    P
    @spedler Thank you for your help
  • CreateRay

    sdk c++
    6
    0 Votes
    6 Posts
    1k Views
    rsodreR
    Ok, but if RS can call it, when and how does it? Call just once... makes no sense, because the effect calls once per pixel at least, on every frame. Why would RS call it in a different context? What do you mean not fully functional? Is it partially functional? How so?
  • How to increase the number of calculations in a Python tag?

    windows python 2023
    4
    0 Votes
    4 Posts
    894 Views
    ferdinandF
    Hey @ll2pakll, yes, any kind of simulation/solver is usually quite a bit of work; and as with most things, most of it is pushing data around in a 'clever' way and not the actual algorithm. You might get away with just saturating the system (add frames or "redraws"), but be warned, you will run into more problems with this approach. To have a robust solver, you must decouple it from the FPS and scene update events; this is not just a Cinema 4D thing, but universal. Cheers, Ferdinand