Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Register
    • Login
    1. Maxon Developers Forum
    2. ferdinand
    3. Posts
    Offline
    • Profile
    • Following 0
    • Followers 17
    • Topics 58
    • Posts 3,263
    • Groups 2

    Posts

    Recent Best Controversial
    • RE: Programmatically created Redshift Lights in an Object Plugin converts lights into Null-Objekts without an function after making Objekt-Plugin editable

      Thanks, I will have a look. This all is starting to make sense now. We rewrote the RS Light and Camera objects a while ago. And at least the RS Camera object is not absolutely non-trivial to operate. This either sounds like that you have to jump through specific hoops or there is a bug in the importer code, that transforms pre 2024 Light and Camera objects (I think this was when we revamped them).

      It might take me a week or so to figure this out. When this is very urgent for you, I would recommend fixing the scene(s) by manually recreating the lights. You could probably also automate this by just selectively copying data (which is likely going to be the solution I am going to provide, unless I come to the conclusion that this must be fixed on our side, as for example the importer being faulty).

      Cheers,
      Ferdinand

      posted in Cinema 4D SDK
      ferdinandF
      ferdinand
    • RE: Programmatically created Redshift Lights in an Object Plugin converts lights into Null-Objekts without an function after making Objekt-Plugin editable

      Hey @ThomasB,

      I do not think that this is an API issue. I do not meant with that that I will not help you, as this still happens in the context of a plugin, I say this simply to classify the issue.

      When I try to manually open your build_1.c4d file, it loads in 2026.2.0 but when I then press C on that light in question, I get exactly the output you report. And I cannot really explain why as this is just a normal rectangle shape area light (well, I sort of can, see below šŸ˜„ ).

      26b330be-2ffb-4079-94bd-e35821b41c29-image.png

      The plot however thickens when I try to open the file with 2026.3.1:

      3f42e837-826c-4145-87ae-9436d31c51f2-image.png

      This file seems to be somehow corrupted. After some poking around I manged to create this build_2.c4d which loads in 2026.3. But the light still did not work correctly. I then created a new RS light instance and copied over the whole data container via Get/SetData, which again resulted in a broken light. Only when I manually recreated the light by manually copying values, I ended up with a valid light. Which then also revealed that this light should have a much different light representation in the VP.

      Your light:

      8bb73cb1-8cf6-4851-9001-83dff031795e-image.png

      The manual copy:

      31f028b3-6054-4078-b9c0-82f04b49b7a9-image.png

      I.e., you seem to have there a fundamentally corrupted scene and especially light objects. The fact that I could reproduce this with a fresh light instance and a Get/SetData copy indicates this the data container of the light is corrupted. We could now start comparing the data containers of your light and the manually created one, to dive deeper, but I think I stop here for now. Did you programmatically modify this scene? Because your plugin only seems to load it. The question is now if you have more scenes like this. Otherwise I would just use my fixed scene (which also contains the fixed light) and move one.

      Cheers,
      Ferdinand

      PS: Okay, now I see it, the actual scene in much more complex.

      When you want to dig deeper yourself, a great tool to debug this would be mxutils.GetContainerTreeString. You can just dump both containers and then either visually compare them or use a diff tool. Or you use mxutils.GetParameterTreeString directly on the light objects.

      posted in Cinema 4D SDK
      ferdinandF
      ferdinand
    • RE: Sub materials links and undo

      @DronKozy

      Yeah, I got the general direction, that you are probably implementing a material mixer type of material/shader. When you implement a full render engine binding, you should go the event notification route, as I am sure you can then easily handle the (slight) complexity that comes with them.

      Regarding the architecture, in principle you can do with whatever you want. As Maxon employee I would of course recommend to use our Nodes API (what you call 'native'). The SDK contains both code examples and documentation about this. But this biggest flaw of the Nodes API is probably that it is not entirely non-trivial. But implementing a full node editor also requires a relatively high level of expertise about our APIs, although in different areas.

      Currently Redshift, Vray, Arnold, and CentiLeo use the Nodes API and all other render engines (Corona, Octane, Cycles, etc.) use either a completely custom system or the old Xpresso Nodes API.

      Cheers,
      Ferdinand

      PS: When you are developing a render engine binding, you might want to consider our Maxon Registered Developer Program.

      posted in Cinema 4D SDK
      ferdinandF
      ferdinand
    • RE: Programmatically created Redshift Lights in an Object Plugin converts lights into Null-Objekts without an function after making Objekt-Plugin editable

      Hello @ThomasB,

      I am sorry that you had a bad experience in the RS forum. Can you show me the actual code where you add the RS light object in code? Because I see no Orslight in your snippet? Or when you load an asset, share that asset? When I do a quick test with a Python generator object, this works fine for me.

      Cheers,
      Ferdinand

      PS: The plugin link you shared only contains an encrypted plugin (pypv) which not only makes it harder for me to get to the source code, I also cannot run such plugin on company hardware before I cracked it and can reasonably say that it does not contain dangerous code. Could you please share an unencrypted version?

      posted in Cinema 4D SDK
      ferdinandF
      ferdinand
    • RE: Sub materials links and undo

      Hello @DronKozy,

      Welcome to the Maxon developers forum and its community, it is great to have you with us!

      Getting Started

      Before creating your next postings, we would recommend making yourself accustomed with our forum and support procedures. You did not do anything wrong, we point all new users to these rules.

      • Forum Overview: Provides a broad overview of the fundamental structure and rules of this forum, such as the purpose of the different sub-forums or the fact that we will ban users who engage in hate speech or harassment.
      • Support Procedures: Provides a more in detail overview of how we provide technical support for APIs here. This topic will tell you how to ask good questions and limits of our technical support.
      • Forum Features: Provides an overview of the technical features of this forum, such as Markdown markup or file uploads.

      It is strongly recommended to read the first two topics carefully, especially the section Support Procedures: How to Ask Questions.

      About your First Question

      I am afraid there is no really good way to do what you want to do. Without example code, I also have to somewhat guess what is going on. As lined out in our support procedures, we recommend to always accompany questions with compileable code.

      I it is a bit fuzzy to me what you are doing, please tell me when I got it wrong. You have a BaseMaterial implementation which itself has LINK parameters which link to other materials. You now want to update MATPREVIEW parameter manually when your dependencies update.

      Tracking Changes

      Cinema generally follows an opt-out and not an opt-in update/message model. E.g., all objects get their GetVirtualObjects method called on each scene update, and it is then up to the object to decide if they actually want to update or just keep using their existing cache.

      The evaluation of materials happens at render time, so there is no direct function which is called or message which is sent to your plugin when something in the scene is being updated. The messages you are using somewhat go into that direction, but you misunderstood a bit their purpose. MSG_UPDATE is sent when an external entity wants to inform a node that it modified dependent data and that the node should update its internal data (outside of the general scene state rebuild). It is not a message that is being sent each time the node has been updated. I could for example get a point object, modify its points, and then not send that message and that would be totally valid code. The object would only update once Cinema 4D reevaluates the object on its own, but sometimes this is desirable. For user interactions, Cinema 4D will usually send this message, but its purpose is still a bit different from what you think it is. The same goes for MSG_CHANGE.

      The way to track changes in Cinema 4D, is the dirty system found on C4Datom. Cinema will usually automatically entail updates when the dirtiness of something changed, e.g., when a user changed the parameters of a node. The problem is that for LINK parameters (and also shader links), changes to the linked node do not count towards the data dirtiness of the node. Or in other words, Cinema does not consider a node A to be changed when the node B changed to which A links. For something like objects this is not really a problem due to the out-out update model, for material previews this means you can get event starved. The video below demonstrates the effect.

      Well, how do I solve this?

      What you do - a material that links other materials and in some shape or form drives its own material preview updates - is simply not intended. So, we have to get a bit creative.

      Piggybacking on other messages

      Just hook into a message that is being sent all the time. Objects and tags for example receive MSG_GETREALCAMERADATA and MSG_GETCUSTOMICON_SETTINGS each time a scene update ran. But I think you will not get these messages in a BaseMaterial. As I said, there is a good chance that you get event starved in a material. I would put a print statement into you message function, printing out the message ID, and then just start interacting with the scene, adding a cube, changing your linked material. To see if anything sticks to the wall, if there is a message ID you can piggy back on.

      Event Notifications

      ⚠ Event notifications are private for a reason. You can easily crash Cinema 4D with them when misused. The type of event notifications we use here, message notifications, are however relatively harmless.

      An alternative could be cinema::AddEventNotification. With event notifications, you can hook into the message stream of other nodes among other things. So, the idea would be:

      1. In your MyMaterialData::Message, listen for MSG_DESCRIPTION_POSTSETPARAMETER, to catch the moment when the user sets a new linked material (which will count as an update for your material).
      2. Then call myMaterialNode->AddEventNotification(materialThatHasBeenSet, NOTIFY_EVENT::MESSAGE, NOTIFY_EVENT_FLAG::NONE, nullptr);
      3. In your MyMaterialData::Message, listen for MSG_NOTIFY_EVENT and then do something like this:
      if (type == MSG_NOTIFY_EVENT && data)
      {
          const NotifyEventData* const notifyData = (NotifyEventData*)data;
          if (notifyData->eventid == NOTIFY_EVENT::MESSAGE && notifyData->event_data)
          {
              NotifyEventMsg* messageData = (NotifyEventMsg*)notifyData->event_data;
      
              // Now we are basically inside the ::Message function of the linked material #materialThatHasBeenSet. We could 
              // for example react to a parameter change.
              if (messageData->msg_id == MSG_DESCRIPTION_POSTSETPARAMETER)
              {
                  // Do something when the linked material changed
              }
          }
      }
      

      All in all, this is not a trivial problem to solve. When you run into more issues, please provide a minimal reproducible example code, so we can help you better.

      Cheers,
      Ferdinand

      posted in Cinema 4D SDK
      ferdinandF
      ferdinand
    • RE: GetWorkplaneMatrix is broken in Cinema 4D 2026.3

      This will be fixed in the next upcoming hotfix.

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: GetWorkplaneMatrix is broken in Cinema 4D 2026.3

      Hey @peter_horvath,

      thanks for the files, I will keep you posted here.

      Cheers,
      Ferdinand

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: UV Peeler - accessible?

      I don't know what your script does and if it needs fixing for 2026.3. What I said is that we usually put a lot of effort into keeping our ABIs and APIs stable, as exemplified with the 2026.3.1 hotfix where we fixed an issue with the UV tag interface that made it incompatible with old code.

      2026.3 contained the UV manager overhaul as its main feature. We tried not to break any glass there but I cannot rule it out. when you find a regression in our APIs, you can also always report it. when the break was unintentional we usually provide a fix (in critical cases even a hotfix) or at least a workaround.

      We also usually do not remove systems. For example, the old content system and its "Content Browser" is still in our APIs and Cinema, although it long has been replaced by the Asset Browser and API. Can I guarantee that the UVPeeler will not be removed soon? No, we sometimes have to remove things. But it is quite rare.

      posted in Cinema 4D SDK
      ferdinandF
      ferdinand
    • RE: GetWorkplaneMatrix is broken in Cinema 4D 2026.3

      Hey Peter,

      both your uploads failed.

      Cheers,
      Ferdinand

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: UV Peeler - accessible?

      Well, there is no hard rule, but generally we are very conservative when it comes to Python API changes and removing features in general. The UV peeler made it through the 2026.3 UV overhaul and we also did hotfix a minor API issue with the old UV-system with 2026.3.1. But I cannot give you a hard guarantee "the uv peeler will still be 2030 around" because I do not know either.

      Sometimes we have to remove features because it would be too much work carrying them on. But that is relatively rare, and I am currently not aware of any plans to deprecate the UV-Peeler or that 2026.3 changes broke it.

      posted in Cinema 4D SDK
      ferdinandF
      ferdinand
    • RE: Thread safety when handling CTrack in TagData.Message() on button click

      @ThomasB

      That is not a misunderstanding. I am aware that MRDs can only see their own tickets. But we still needed that crash reported, so I did it. I would have done the same if you would not have been an MRD. I usually mention ticket IDs here so that I can come back and close bugs. As you might have noticed, I have moved this into the Bugs forum.

      You do not have to do anything regarding that ticket, it it inaccessible for non-Maxonians. But we are still very much interested in a version of your plugin or a workflow which caused the crash. Otherwise we will not be able to reproduce and fix the issue. When you cannot provide it, this is also not a biggie (please do not waste time on this), then we have at least documented that there is somewhere a problem with audio tracks and how they handle memory while post-processing audio; in case we run into the same issue in the future in another context.

      Cheers,
      Ferdinand

      To share plugins with us, you can either use a chat on backstage or send us a mail to sdk_support(at)maxon(dot)net. There is a good chance that when you use a binary data attachment in a mail, that our mail system will filter out that attachment. When you use backstage (and upload the plugin there in a chat) that data would be permanently in the assets of that forum. When you just give us a link, we will delete your data once we do not need them anymore for debugging.

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: Thread safety when handling CTrack in TagData.Message() on button click

      Hello @ThomasB,

      thank you for putting the work into this. I manually injected your bug report since you could not reproduce anymore. Its issue ID is ITEM#650353 BugReport_3deoskill_Audioworkstation.

      This also gave me the resolved crash report. I cannot post it here in full, but these are the last stack frames (we also discussed above). So, this crashes while trying to apply filtering to the audio.

      I will also give end user support a poke so that they can connect the dots. We would also be still very much interested in the state of the plugin which did cause the crash (and I saw that you cannot reproduce it anymore, I am asking for the old state of your plugin which caused the crash in case you use version control therefore also have a non-working version).

      Call_Stack_Thread_57060
          VCRUNTIME140.dll = _NLG_Return2+ 0x6c0
          c4d_base.xdl64 = cinema::TSCompoundAudioCurve::processFiltering
          ...
          winmmbase.dll = DriverCallback+ 0x5a
          wdmaud.drv = 0x00007ffe1d202a35
          wdmaud.drv = 0x00007ffe1d2020f4
          wdmaud.drv = 0x00007ffe1d201e45
          KERNEL32.DLL = BaseThreadInitThunk+ 0x17
          ntdll.dll = RtlUserThreadStart+ 0x2c
      

      Cheers,
      Ferdinand

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: Thread safety when handling CTrack in TagData.Message() on button click

      @ThomasB

      Reproduction steps just refers to what you do in the GUI as an end user (switch to modeling layout, press play, ...). Do not include any API information, imagine you are someone who knows nothing about our APIs. And if we have or have not your plugin is irrelevant for the report, just state what you do.

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: Thread safety when handling CTrack in TagData.Message() on button click

      While my UI synchronization from the GeDialog to the Attribute Manager parameters and vice versa runs perfectly safe on the main thread (hope sošŸ™„ :-)) , the crash was triggered inside MSG_DESCRIPTION_COMMAND when clicking the "Convert" button. In that moment, my code overwrites the temporary audio file, temporarily flushes the track path with an empty string "" to force C4D to clear its memory buffer, and reloads the track. Without protection it somehow collided with Redshift or MoGraph trying to read the document's audio properties during a redraw cycle, resulting in the access violation inside the audio driver callback (wdmaud.drv).

      First of all: I am happy that you found your fix.

      But this should not happen, and would imply a severe bug on our side. You should be able to write data as you desire on the MT. I am also not sure if the AI did not misinform you a bit. The stack trace which is found in a bug report contains raw function pointer offsets. Apart from some guesswork based on the DLL names, the offsets are meaningless for a human, even an AI cannot read this. To become meaningful, these stack traces must be resolved by our bug ticket system which then turns the function offset pointers into function and method names and their file and line numbers (it then looks more or less the same as the Python stack traces you know). You can only resolve this when you have access to the debug database /source code of Cinema 4D, which is for obvious reasons not shipped with Cinema 4D.

      Did you submit your crash when Cinema 4D asked you to do so? Because I do not see it in our bug tracker when I search for that stack trace. The strack trace in your crash report must be read bottom to top, i.e., the highest item is the stack frame where it crashed.

      CINEMA_4D_Crash_Report_WINDOWS
      {
      	Call_Stacks
      	{
      		Call_Stack_Thread_57060
      		{
      			VCRUNTIME140.dll:	_NLG_Return2 + 0x6c0 (SP: 0x0000006CAA3FED68, PC: 0x00007FFEB8DB0CF0) // Here is goes 'poof'
      			c4d_base.xdl64:	0x00007FFD9CDB07E6 (SP: 0x0000006CAA3FED70, PC: 0x00007FFD9CDB07E6)
      			c4d_base.xdl64:	0x00007FFD9CDAC864 (SP: 0x0000006CAA3FEDE0, PC: 0x00007FFD9CDAC864)
      			c4d_base.xdl64:	0x00007FFD9CDAC503 (SP: 0x0000006CAA3FEE80, PC: 0x00007FFD9CDAC503)
      			c4d_base.xdl64:	0x00007FFD9CDB480F (SP: 0x0000006CAA3FEF60, PC: 0x00007FFD9CDB480F)
      			c4d_base.xdl64:	0x00007FFD9CDB5914 (SP: 0x0000006CAA3FF500, PC: 0x00007FFD9CDB5914)
      			c4d_base.xdl64:	0x00007FFD9CDB755C (SP: 0x0000006CAA3FF550, PC: 0x00007FFD9CDB755C)
      			c4d_base.xdl64:	0x00007FFD9DA833B4 (SP: 0x0000006CAA3FF590, PC: 0x00007FFD9DA833B4)
      			c4d_base.xdl64:	0x00007FFD9DA82F45 (SP: 0x0000006CAA3FF5F0, PC: 0x00007FFD9DA82F45)
      			winmmbase.dll:	DriverCallback + 0x5a (SP: 0x0000006CAA3FF630, PC: 0x00007FFEB126D38A)
      			wdmaud.drv:	0x00007FFE1D202A35 (SP: 0x0000006CAA3FF670, PC: 0x00007FFE1D202A35)
      			wdmaud.drv:	0x00007FFE1D2020F4 (SP: 0x0000006CAA3FF6E0, PC: 0x00007FFE1D2020F4)
      			wdmaud.drv:	0x00007FFE1D201E45 (SP: 0x0000006CAA3FF970, PC: 0x00007FFE1D201E45)
      			KERNEL32.DLL:	BaseThreadInitThunk + 0x17 (SP: 0x0000006CAA3FF9A0, PC: 0x00007FFED3BAE957)
      			ntdll.dll:	RtlUserThreadStart + 0x2c (SP: 0x0000006CAA3FF9D0, PC: 0x00007FFED52A7C1C)
      			Registers
      			{
      ...
      

      I.e., it crashed in VCRUNTIME140.dll, a Visual C++ Runtime component that is responsible for executing basic C++ code. This hints at low level operations such as memory allocation or hardware drivers. And you are right, wdmaud.drv is the Windows Media audio driver. c4d_base.xdl64 is then the base library of the Cinema API, there are a lot of things to be found in there and without resolving the report we cannot know where the problem lies (the stack frame in the Cinema API which then invokes something in VCRUNTIME140.dll). So, this basically goes "Audio Driver -> Cinema Core -> MSVC lib -> poof".

      Python plugin execution modules do not show up at all (which means that this happens quite a bit after any Python code ran). And Mograph and Redshift modules do not show up in the crashing thread (MG shows up one thread before but that does not mean much).

      It would be great if you could submit the bug report, so that our crash handler can resolve it. I can also technically add your crash dump manually, but that is always a bit of a hassle. This is pretty much guaranteed to be a severe bug somewhere in the audio memory management.

      Cheers,
      Ferdinand

      edit: I edited out the crash report download link in your posting, as it contains some minor sensitive details about your system we do not want to publish to the world when we do not have to šŸ™‚

      PS: And we will of course never shame users for their code, as that would be very counterproductive to what we are trying to do: help developers.

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: Thread safety when handling CTrack in TagData.Message() on button click

      @ThomasB said in Thread safety when handling CTrack in TagData.Message() on button click:

      I think you misunderstood me. I’m not trying to report a bug here, since the issue isn't with Cinema 4D itself.

      No, I did not misunderstood your situation (at least I think so šŸ˜„ ). We sometimes ask people to report a formal bug report so that we can reproduce an issue. This is not necessarily bound to the bug being in Cinema 4D. Although we often do this when we suspect that the bug is on the Cinema side or at least in a grey area where the plugin does something that is not so great but Cinema also drops the ball in some shape or form.

      Your code, at least the one you shared with us, does not do anything wrong. And even though I know you have put a lot of work in your reply here, a lot of text and diagrams do not help in concretely fixing the issue. To answer a few questions anyway:

      1. NodeData::Message usually runs on the main thread (and you additionally check), so we are fine.
      2. Dialog code also usually runs on the main thread. The only exception can be drawing code (something like GeUseraArea::DrawMsg), although drawing code usually also runs in a special section of the main thread. Hence my hint to use GeIsMainThreadAndNoDrawThread instead of GeIsMainThread in my first posting.
      3. Generally there is no guarantee that any code runs on the MT. As an example, NodeData::Message calls are usually on the MT, especially the message MSG_DESCRIPTION_COMMAND. I.e., when a user clicked a button in your node this should run on the MT as you often want to do GUI things or modify the scene. And Cinema will (should) honor this. But nothing prevents me, Evil Bob the developer, from grabbing your tag, creating a new thread then calling yourTag.Message(MSG_DESCRIPTION_COMMAND, BaseContainer()) from this new thread and with that violate the assumption that description commands alwary run on the MT.
      4. Core messages are also usually sent from the MT, both in a dialog and in a MessageData; so CoreMessage functions should usually run on the MT. Core message (i.e., event) evaluation is also decoupled. When you set a (core) event from a non-MT thread (via SpecialEventAdd), Cinema should properly synchronize and execute the event on the MT. But there could be of course bugs in our code. You should therefore always shield your code with GeIsMainThreadAndNoDrawThread or GeIsMainThread if your code could also run in a drawing context.

      It is good that you have an eye on the threading safety in Cinema as this is something that often trips developers. But I do not think that threading is here the issue. Threading violations usually lead to crashes, corrupted data, or inexplicable behavior. Slowdowns usually mean that either code runs way more often that you think, e.g. some feedback loop between your tag and dialog, or that there is some resource fighting going on. Playing audio means that hardware resources must be allocated. When they are constantly dropped and reallocated, because something else wants to access them too, this can lead to slowdowns. This is still just a guess into the blue of mine, but it would fit the symptoms you are describing.

      Could you please:

      1. Confirm that the issue also happens for your with the simplified plugin.
      2. Provide a step by step bug report to reproducing the issue as described here.
      3. Check that the issue does not happen when you delete your tag (but leave the sound track in the scene). I really want to rule out that Cinema does not have a problem with audio playback on some hardware in general.

      When push comes to shove, you can also share your full plugin in private with us via sdk_support(at)maxon(dot)com. When you can reproduce the issue with the simplified plugin, this is of course sufficient for us to investigate the issue. But if you cannot reproduce the issue with the simplified plugin, then we would need to see the full plugin to understand what is going on.

      Cheers,
      Ferdinand

      edit: I now also tried on my Win 11 machine (Intel chipset, a bit beefier GPU). And I cannot detect any slowdowns in normal scene playback or when using the RS render view. However, when I use the Calculate Fps tool (just press SHIFT + C and type 'FPS'), I experience distorted audio and the view port becomes sightly laggy. This happens with and without your tag, an audio track alone seem to be enough.

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: TimeLine DopeSheet not update

      Hello,

      This is a bug. I have fieled it under 'ITEM#649699 Timeline does not react to NBIT selection changes on tracks anymore'. It is unfortunately not a bug in the Python or core C++ API which I could just fix myself, but either a bug in the scene evaluation or the timeline. So, we will have to wait until the owning team tackles it. I notified the owners that timeline automation is a popular scripting task and that they therefore should fix this.

      For now, the only thing I can recommend is to use 2026.2 when you want to carry out such tasks.

      Cheers,
      Ferdinand

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: TimeLine DopeSheet not update

      Hello @chuanzhen,

      Thank you for reporting this. At first glance this looks like a bug/regression in 2026.3.0. I'll have to check in more detail myself before I can say for sure. But your code is also incorrect, the NBIT_TLX_SELECT2 bits are internal and not for what you think they are. You must use NBIT_TLX_SELECT instead. But they are currently malfunctioning for me on Windows in 2026.3.

      Until I am sure, I will not yet classify this as a bug.

      Cheers,
      Ferdinand

      In 2026.2.0, this code randomly selects and deselects tracks in an all timelines for the active object. I.e., you can spam-click the script and see the track selections 'jump around'. In 2026.3 it does exactly nothing (at least on my Windows machine).

      import c4d
      import random
      
      def main() -> None:
          for track in op.GetCTracks():
              bit: int = random.choice([c4d.NBITCONTROL_SET, c4d.NBITCONTROL_CLEAR])
              for tl in (c4d.NBIT_TL1_SELECT, c4d.NBIT_TL2_SELECT, c4d.NBIT_TL3_SELECT, c4d.NBIT_TL4_SELECT):
                  track.ChangeNBit(tl, bit)
          
          c4d.EventAdd()
      
      
      if __name__ == '__main__':
          main()
      
      posted in Bugs
      ferdinandF
      ferdinand
    • RE: Thread safety when handling CTrack in TagData.Message() on button click

      Hey,

      Can you provide a bit more context? I tried your plugin on Cinema 4D 2025.2.1 and macOS 26.5.1. I added your tag to a scene, clicked the "Add Audio" button, and started playback.

      c1dd2914-3795-4dc5-a7c3-a1fba9066410-image.png

      • I experience no slowdowns when I run the scene playback (F8) or the RS render view.
      • I hear the base_1.wav sound playing your plugin adds.

      Can you please:

      • Provide the type and version of operating system you use.
      • Provide the version of Cinema 4D you use.
      • Describe the hardware you use.
      • Provide an example scene.
      • Check if you experience the same slowdowns when your plugin is being removed from the scene (but the sound track it has added is being left in.
      • If necessary, provide a step-by-step instruction to describe your bug. See here for how to formally make a bug report.

      My hunch right now is that your plugin has probably little to do with the slowdowns, but that sound track playback is the culprit which might lead to 'resource fighting' on some systems.

      Cheers,
      Ferdinand

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: Thread safety when handling CTrack in TagData.Message() on button click

      It did, thanks, I will have a look.

      posted in Bugs
      ferdinandF
      ferdinand
    • RE: Thread safety when handling CTrack in TagData.Message() on button click

      @ThomasB

      Absolutely, but you have to either grant me access or make the whole folder public.

      posted in Bugs
      ferdinandF
      ferdinand