• 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
    662 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
    776 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
    866 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
  • Time Shift. Python tag.

    windows python 2023
    3
    0 Votes
    3 Posts
    592 Views
    L
    @ferdinand Thank you very much for your reply. I only need to animate one parameter and I have already written something similar to this parameter cache myself, you saw it in a previous question and advised me to change the location of the cache for more reliability. I will take your advice in the future to avoid reinventing the wheel. Thanks again for your help.
  • Python tag doesn't work when rendering

    windows 2023 python
    6
    0 Votes
    6 Posts
    1k Views
    L
    @ferdinand Your solution of replacing the doc = c4d.documents.GetActiveDocument() line with doc: c4d.documents.BaseDocument = op.GetDocument() really worked. From my point of view, as an ordinary person, your level of understanding of the code seems to be something beyond the realm of possibility. I wish you a good day and thank you again for your help.
  • Saving Documents

    python 2023
    3
    0 Votes
    3 Posts
    529 Views
    A
    Hi Ilia, Thanks for the reply - you're correct about what I'm trying to do! I've tried your first option and unfortunately the following dialog pops up: "Unable to write file $FILE$ (file may be write protected)" This dialog does not appear if the file is saved manually with the File -> Save Project As... Dialog The save location is a network drive. Let me know if theres a workaround? For your second option - is it possible to specify the exact filename here? EDIT: It looks like you can also specify a filename here, which has worked - thanks !
  • node size

    python windows 2023
    4
    0 Votes
    4 Posts
    840 Views
    L
    Thank you for the answers.
  • Import NumPy?

    python 2024
    4
    0 Votes
    4 Posts
    929 Views
    G
    Hi, I'm also trying to install numpy, but after registering c4dpy I'm getting a syntax error after running "c4dpy -m ensurepip" command. c4dpy -m ensurepip (null) File "<stdin>", line 1 c4dpy -m ensurepip ^^^^^^^^^ (null)SyntaxError: invalid syntax
  • 0 Votes
    4 Posts
    845 Views
    i_mazlovI
    Hi @AiMiDi , The problem you're pointing out to lies in the algorithmic field and relates to a non-public part of C4D, hence is Out of Scope for this forum: We will neither reveal non-public functionalities of Cinema 4D's API, nor will we establish a direct line of communication with the developers of Cinema 4D. Let me know if you have any further questions! Cheers, Ilia
  • Python module load order in 2024

    windows 2024
    9
    0 Votes
    9 Posts
    1k Views
    I
    Thank you again, it worked. I just had to take into account that the python310.win64.framework directory is now named just win64 in Cinema 4D 2024. And I had to add the path to ai.dll too, because our Arnold translator had the same problem, the C4DtoA module no longer loads ai.dll on startup.
  • 0 Votes
    4 Posts
    849 Views
    ferdinandF
    Hey @jochemdk, That is the nature of threading restrictions. It is like crossing the street without looking left and right: It works fine until it doesn't Cheers, Ferdinand
  • Why doesn't c4d.Vector.GetAngle throw an error for the null vector?

    python s26
    2
    0 Votes
    2 Posts
    525 Views
    ferdinandF
    Hello Herr May, Thank you for reaching out to us. I am not quite sure why you think it should do that. The angle between two vectors u and v is defined as: theta(u, v) = arccosine(~u * ~v) I.e., the arccosine of the dot product of the two normalized vectors. This is due to the so called circle functions, specifically this identity: [image: 1697012566409-26ea0c5e-9de3-4885-bc15-34b4ee3342da-image.png] Under the hood, GetAngle does exactly what I declared above (just in a bit more efficient manner, as calculating the normalized vector is much more expensive than this little trick): [image: 1697012429446-123bbf8a-568b-49a5-9ff3-2bac41f61339-image.png] As you can see, the correct solution to the arccosine of the dot product of the null vector with itself is 0.5 π, i.e., the value you got : [image: 1697012846516-ebfd4607-e872-42ef-898c-d3a2de4d8dd8-image.png] You could now argue if that is a sensible result for a method that is called 'GetAngle' and if it should throw an error on getting an input vector or being called on a vector with the length zero. But you have also to keep in mind that the C++ backend is used by people who will know the identity pi_half = arccosine(~(0, 0, 0) * ~(0, 0, 0)) and might want to make use of it. Cheers, Ferdinand
  • How to Obtain the .FBX Points of Objects in C++

    s26 c++ macos windows
    3
    4
    0 Votes
    3 Posts
    587 Views
    P
    @ferdinand Thank you for your reply
  • Simulating mouse movement in C4D

    python r25 windows
    5
    0 Votes
    5 Posts
    3k Views
    D
    Hi @ferdinand, Thank you so much for the comprehensive reply! Given all this I don't think it would make sense to keep trying to unit test this particular part of our code with Python. The last approach you highlighted with testing directly on the C++ side seems like the best option, so I'll give that a try. I'll have to see how to integrate this test with the rest of the unit tests (we have a lot and they're all in Python) but hopefully that won't be too much of a problem. Thanks again for all the help, Daniel
  • Command Make Editable confusion

    s26 windows python
    4
    0 Votes
    4 Posts
    742 Views
    G
    Got it! Thanks.
  • How to get a Vertex Map to trigger animated object?

    2024
    2
    0 Votes
    2 Posts
    440 Views
    J
    Hello @spektor04 , Welcome to the Plugin Café forum and the Cinema 4D development 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 Guidelines, as they line out details about the Maxon SDK Group support procedures. Of special importance are: Support Procedures: Scope of Support: Lines out the things we will do and what we will not do. Support Procedures: Confidential Data: Most questions should be accompanied by code but code cannot always be shared publicly. This section explains how to share code confidentially with Maxon. Forum Structure and Features: Lines out how the forum works. Structure of a Question: Lines out how to ask a good technical question. It is not mandatory to follow this exactly, but you should follow the idea of keeping things short and mentioning your primary question in a clear manner. About your First Question Please provide us testscript(s) and a testfile which would help us to reproduce the issue. Thanks and Cheers Jana
  • BaseSelect::Free() in 2024 - Access violation reading location

    2024
    8
    0 Votes
    8 Posts
    1k Views
    ferdinandF
    Hey @yaya, okay, and your your plugin hook is ObjectData, right? Your plugin is the 'RagDoll' entity, in your screen grab? It is really hard to get here anywhere without code, but here are a few guesses: Are you 'abusing' your ObjectData hook by modifying the scene it is contained in? ObjectData is bound to the threading restrictions in most of its methods, because most run not on the main thread. This is more relevant than ever with 2024, because more methods have been parallelized. You can modify the scene from an ObjectData plugin, but you must be on the main thread to do it, by for example defer execution to the MT or use a method like Message which often runs on the MT (but I would still avoid doing it when possible). Modyfing the scene means for example inserting, objects, materials, shaders, etc. or adding events. Modifying your cache to your likeing in getVirtualObjects is of course okay. This could also be a nasty side effect of the new data access system. But these two are of course fairly speculative since I almost know nothing about your plugin. And you said, when I understand you correctly, that you already this problem in the past, and then somehow fixed it by illegally freeing the selection of the object. I would recommend doing the following things: Reduce the complexity of your example scene, that thing is way too complex. Make it as simple as possible by removing as many things as possible with the problem still happening. Run Make Editable and Current State to Object separately on instances of your faulty plugin output. Analyze the content of the caches to see what is actually happening in the places "where things go wrong". Either you are somehow missing full objects in your cache or skip some data, etc. Just do normal debugging then: Set a breakpoint on GetVirtualObjects in your plugin and step through the code, trying to figure out when you "loose" parts. Avoid skipping 'boring' parts as you easily miss the problem then. Other than that, I will have to see code, because otherwise there is no magic wand move with which I could guess what is going wrong here for you. Cheers, Ferdinand