• Modify rounded edges radius via python script

    Moved python
    3
    0 Votes
    3 Posts
    375 Views
    A
    Hi Maxime. Sorry for the confusion, I was referring to a Redshift material node, and a specific node called "Round Edge". We know that we can edit the rounded edges node via the API in Xpresso materials already, but we were trying to not use Xpresso here. Turns out, we can actually edit the Round Edge node in Redshift materials when we use c4dpy instead of executing the script by placing a .pyp file in the plugins folder. This solution works for us, so I think this issue is resolved. Thanks!
  • Accessing json data from DataDictionary

    c++ r20 r21 r23 s22 s24
    3
    0 Votes
    3 Posts
    581 Views
    kbarK
    That is what I was looking for. Thanks Manuel!
  • Layer Selection Python

    python r21
    11
    0 Votes
    11 Posts
    2k Views
    ROMANR
    @cairyn Thank you again. I will check your patreon
  • Constraint tag has no enum description

    2
    0 Votes
    2 Posts
    445 Views
    ferdinandF
    Hello @Boony2000, thank you for reaching out to us. There is unfortunately no guarantee that everything that should have an id symbol has an id symbol. Or more directly, there are other cases where one most use integer instead of symbols. This mostly happens for message symbols, but there are also a few cases for NodeData types, e.g., there is no Omgcloner. These mostly did happen as an oversight of the person who did implement these functionalities, there is no higher meaning behind it. As a developer one must define such symbol locally or hardcode it. We are currently not planning to update the symbols in this regard. Thank you for your understanding, Ferdinand
  • SendModelingCommand c4d.MCOMMAND_JOIN

    python
    3
    0 Votes
    3 Posts
    680 Views
    B
    Thanks for the info!
  • How to update the scene in a threaded

    r21 c++
    4
    0 Votes
    4 Posts
    707 Views
    ferdinandF
    Hello @AiMiDi, it would really help if you could clarify/confirm the context. I am still assuming that you are writing a SceneLoaderData, namely for your MikuMikuDance project. We have an example on GitHub for how to implement an im- and exporter plugin, the STL-example. Invoking the status bar indicators, i.e., StatusSetSpin. StatusSetBar and StatusSetText, for a computational process, e.g., loading a file, are a bit of a special case regarding the UI-restrictions. I always also struggle with them and what is allowed where. In general, you can get away with a bit more with them, as they do not check immediately for being on the main thread and do not refuse execution if they are not. But you can also run into problems with them outside of the main thread. With that being said, our STL example also makes use of StatusSetBar, which sort of indicates that it is safe to use within SceneLoaderData::Load (more on that later). Regarding providing a custom progress dialogs for the import process: Most importers of Cinema do not do that. There are exceptions like the FBX importer which spawns its own dialog to give feedback for the importing process. When you invoke GeIsMainThread() in SceneLoaderData::Load, you will see that you are in almost all cases in the main thread (at least the ones where I did try). But in the end, there is no guarantee that this will always hold true. What I would do is safeguard all GUI operations with GeIsMainThread(), including status-bar operations, i.e., only carry them out when Load is being called from the main thread and otherwise just skip them. Then you can also open as many dialogs as you want from there. Our FBX importer plugin for example instantiates an interface for handling importing FBX within Load. Cascading out from that interfac instantiation, also a ProgressDialog will be being instantiated and opened (there are some types involved in between). But frankly, I would not bother with all that complexity and just use the status bar of the main app, i.e., StatusSetBar. Checking for the main thread seems advisable though. Cheers, Ferdinand
  • GeUserArea Reversed in Arabic Language

    s24 python
    5
    0 Votes
    5 Posts
    545 Views
    ferdinandF
    Hello @blastframe, thank you for closing your topics. Cheers, Ferdinand
  • Send Message to CommandData

    8
    0 Votes
    8 Posts
    2k Views
    ferdinandF
    Hello @César-Vonc, without any further questions or replies, we will consider this topic as solved by Wednesday and flag it accordingly. Thank you for your understanding, Ferdinand
  • Simple asset browser example

    r20 c++
    5
    0 Votes
    5 Posts
    934 Views
    ferdinandF
    Hello @Rox, without any further questions or replies, we will consider this topic as solved by Wednesday and flag it accordingly. Thank you for your understanding, Ferdinand
  • Placing an effector at specific Index in effector list

    python
    5
    0 Votes
    5 Posts
    934 Views
    ferdinandF
    Hello @Motion4D, without any further questions or replies, we will consider this topic as solved by Wednesday and flag it accordingly. Thank you for your understanding, Ferdinand
  • Can't apply shaders to a CUSTOMGUI_TEXBOX in iCustomGui

    c++ r21
    3
    0 Votes
    3 Posts
    588 Views
    O
    I see, thank you for the answer. Cheers, Ogers.
  • Field Refusing Object

    12
    0 Votes
    12 Posts
    3k Views
    ferdinandF
    Hello Dan, I know that the situation is a bit unsatisfying, but that is unfortunately mostly a design problem you have there and not an API one. Which are often questions that are hard to answer "in a good way" and technically also out of scope of support. In case you encounter any problems further down the road, please do not hesitate to revisit us. Cheers, Ferdinand
  • Pyhon Tag message for Generator Bit Change

    4
    0 Votes
    4 Posts
    674 Views
    indexofrefractionI
    blush... not remembering my own threads, ouch! .-) thanks Maxime !
  • Creating node material presets for custom node space

    c++ sdk
    5
    1
    0 Votes
    5 Posts
    965 Views
    ManuelM
    Hi, you can create those preset with a commandData sure. When you add the graph to your node material it will call the function you defined in maxon::nodes::NODESPACE::CREATEMATERIALGRAPHFUNC See Proving Default Graph Setup for more information. So be sure to remove the nodes added by this function if they are not needed. You must create a NodeMaterial, insert it in the document, add the graph for the right nodespace and retrieve the graph itself (by first retrieving the nimbusref). We got an example on this page: Reading and Modifying Node This page also contains an introduction to Transaction. maxon::GraphModelInterface::BeginTransaction must be used if you want to modify the graph. You can than Commit your changes, which will ensure the graph is in a correct state. You can have a look a nodespace_impl.cpp, you will find the function CreateMaterialGraphDefaultSetup. remarque: this function doesn't need transactions to modify the graph. In this handbook, we are using transaction to modify some port's value inside a graph. With both examples, you will understand how to add nodes, connect them, and sets values. Cheers, Manuel.
  • Mirror without duplicate using `MCOMMAND_MIRROR`

    s22 python
    12
    0 Votes
    12 Posts
    2k Views
    ManuelM
    Hi, This have been fixe and will be available in a futur update. Cheers, Manuel
  • C4DUnhandledExceptionFilter - debugging log ?

    2
    0 Votes
    2 Posts
    985 Views
    ferdinandF
    Hello @nicholas_yue, thank you for reaching out to us. You can find the crash reports of Cinema in its preference folder. The preference folder should be located in \{​​​​​​​USER}​​​​​​​\AppData\Roaming\MAXON\{​​​​​​​​​​​​​​VERSION}​​​​​​​​​​​​​​\. It can also be opened via a button at the bottom of the preferences menu. [image: 1623227605524-4f6efb26-a940-40f4-ba2e-235d991e14e4-image.png] However, this will lead you to the preference folder of the Cinema 4D app, not the one for commandline.exe. The last element in the path will be a folder with a name like S24_XXX_YYYYYYY where the XXX part is the minor revision and the YYYYYYY part a hash with no higher meaning for the user. So, the path is then for example {USER}\AppData\Roaming\MAXON\S24_037_DFA0E3FB. When you have run the command line app at least once, then there will also be a folder with almost the same path, but only that an _x has been appended, e.g., {USER}\AppData\Roaming\MAXON\S24_037_DFA0E3FB_x. This path then contains all the commandline.exe data, including the bug reports, which should be visible to you under {USER}\AppData\Roaming\MAXON\{VERSION}_x\_bugreports. For testing purposes, you can always invoke a crash on Cinema 4D by using the argument -crashtest. So, .\Commandline.exe -crashtest will force a crash which should pop up in your {USER}\AppData\Roaming\MAXON\{VERSION}_x\_bugreports. Cheers, Ferdinand
  • Changing Asset References to Absolute

    python
    14
    0 Votes
    14 Posts
    2k Views
    ferdinandF
    Thank you Andreas for closing it. Cheers, Ferdinand
  • How to use UV morph node

    r21 c++
    5
    0 Votes
    5 Posts
    792 Views
    A
    Hi, Thank you so much for your suggestion. I changed my code to iterate each surface. It works very well. Thank you for your help, which solved my problem. [image: 1623154713798-6ecf2fc3-56cc-4834-9632-0b815d3a5f39-image.png] Thanks, Manuel
  • Select custom tab with python

    Moved
    8
    0 Votes
    8 Posts
    1k Views
    jochemdkJ
    Below gets the focus back on the first tab of the pyTag (after other objects have been selected), but it only works with/after a button click.. Perhaps this might be of use. def message(id, data): if id == c4d.MSG_DESCRIPTION_COMMAND: id2 = data['id'][0].id if id2 == c4d.ID_USERDATA: userDataId = data['id'][1].id if userDataId == 1: # << just a button on the pyTag with ID 1 ### do some function... # GET FOCUS BACK on the pyTags's 1st Tab: op.GetObject().SetBit(c4d.BIT_ACTIVE) op.SetBit(c4d.BIT_ACTIVE) c4d.gui.ActiveObjectManager_SetObject(c4d.ACTIVEOBJECTMODE_TAG, op.GetObject(), c4d.ACTIVEOBJECTMANAGER_SETOBJECTS_OPEN, c4d.DescID(c4d.DescLevel(1))) op.GetObject().DelBit(c4d.BIT_ACTIVE) c4d.EventAdd()
  • FieldLayer GetDirty

    c++ r20 sdk
    10
    0 Votes
    10 Posts
    1k Views
    J
    Thanks for the response, that seems to have solved the issue. John Terenece