• Material Tag: Fit to object

    Cinema 4D SDK python 2024
    3
    0 Votes
    3 Posts
    645 Views
    .
    Hi @m_adam - In this particular instance I'm calling it on objects that have children and I'm getting the prompt to include sub objects. If it were a modeling command or something like that it may include the ability to include or exclude the children programmatically. I'm creating 30 objects and each object has six flat projections that I want to set to the size of the object. That's 180 confirmation clicks.
  • Boundary Edges to Spline in Python

    Cinema 4D SDK s26 python 2024 2023
    3
    0 Votes
    3 Posts
    932 Views
    F
    Dear Ilia, I greatly appreciate your assistance; it was precisely what I needed. Thank you for your guidance and I wish you a wonderful day. Best regards, Tomasz
  • Issue collecting all the shaders in a material

    Cinema 4D SDK python 2024
    11
    2
    0 Votes
    11 Posts
    3k Views
    John_DoJ
    Hi, One last thing I've noticed. The last code shared by @HerrMay works great on all materials but the one I'm using to test my script, it's odd. On this particular material, the function consistently skip the shader which is in the Blend Channel of the Fusion shader. Even the Mask shader in the Mask channel is discovered and printed. [image: 1702592718593-db2bf693-59e6-4eb1-a42e-5c484b38f253-image.png] I've ran the debugger on the function : when the loop state is on the Color shader, the function is going up on the parent Fusion shader as expected but then the elif node.GetNext() condition isn't verified (?!) so it skips the last branch and go back to the material The thing is it doesn't happen with other materials nor other shaders : I've made this particular material's shader tree more complex and all the shaders are seen, even when a node has several children. A brand new material with the same shader setup is not a problem. There are two cases where the function scan the shader correctly and output the expected result : When using the recursive function written by @ferdinand Disconnecting and reconnecting the Filter shader from the Fusion shader. If I run the function again after doing that, the AO and Filter shaders are discovered and printed correctly. Do you have any idea of what it is happening here ? I'm planning to use this function for several commands and I don't like the possibility that it could fail in some cases, even if it is some niche ones.
  • Hot4D for C4D 2024 not working, Xcode error

    Cinema 4D SDK 2024 macos
    3
    0 Votes
    3 Posts
    1k Views
    J
    Hello @josephnvelasquez49, 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 Thanks a lot for posting, we are looking into this and let you know as soon as possible. Cheers Jana
  • Spline to UV map... is this even possible?

    Cinema 4D SDK python 2024 windows
    3
    0 Votes
    3 Posts
    949 Views
    justinleducJ
    Hey @m_adam, I never thanked you for your very helpful and thorough reply, so allow me to do so now: thank you very much! Your reply ended up being extremely useful, as it guided me in implementing the KD-Tree within my Python script, as well as helping me convert the Barycentric coordinates to UV coordinates. So, for that, once again; thank you! Now that this is implemented, I am faced with a challenge: it appears that the precision of the drawing of the Spline greatly depends on the subdivision/triangulation level of my geometry (for example, the Sphere in my parent message). In other words, if the geometry whose UV map I am drawing the shape of my Spline onto is very low-poly, the drawing of said Spline will be incredibly imprecise. It seems like the precision increases as I increase the amount of polygons on the geometry. Just curiously, without necessarily pasting my code here, I was wondering if - at the top of your head - this behavior was to be expected? Does this mean that, with the KD-Tree and Barycentric conversion method, I would never be able to programmatically draw a perfectly round circle Spline on a Plane object that, despite having a perfect UV map, only has 2 polygons? I can work around those constraints, but it'd be great to know if the current imprecision of my drawing approach isn't caused by something else. Thanks!
  • 0 Votes
    5 Posts
    1k Views
    joel_motionJ
    @i_mazlov Thank you very much for your response! I am not sure how long it would have taken me to figure out the "prefsPlugin: c4d.BasePlugin =... " part without your help. This is the code I wrote, which works exactly how I wanted it to (and now I have the script mapped to a hotkey). import c4d def main(): prefsPlugin: c4d.BasePlugin = c4d.plugins.FindPlugin(c4d.PREFS_NAVIGATION, c4d.PLUGINTYPE_PREFS) navigationValue: int = prefsPlugin[c4d.PREF_NAVIGATION_CAMERA] if navigationValue == 3: prefsPlugin[c4d.PREF_NAVIGATION_CAMERA] = c4d.PREF_NAVIGATION_CAMERA_CAM else: prefsPlugin[c4d.PREF_NAVIGATION_CAMERA] = c4d.PREF_NAVIGATION_CAMERA_CUR if __name__=='__main__': main() Thanks again!
  • 0 Votes
    7 Posts
    2k Views
    DunhouD
    Hi @i_mazlov , Thanks for your time, sorry for my bad that I use a confusing word for "id", I should say "asset id", but as you said, I can use ID to check this, for some reason, I overlooked this for a moment. And the GetParent(), I found out that the culprit is GetSelectedNodes(), I use this to get a selected node(abs bode) but the return is "group", so what ever I try the return is 'Root'. Thanks for all your works! Cheers~ DunHou
  • 0 Votes
    9 Posts
    3k Views
    i_mazlovI
    Hi Christophe, Please note our Support Procedures, namely: We cannot provide support for third party libraries "It doesn't work" is not a support request and we cannot debug your code for you, but instead provide answers to specific problems. From my personal point of view, you need to reduce your setup as far as possible while still being able to reproduce the bug: Determine which one of your 2 tag plugins causes the issue Cut off unrelated functionality of your plugin that has nothing to do with the issue Figure out the specific function or line that causes the issue Search the forum if this issue was already discussed If not, create an example code snippet that highlights your issue Post your specific question and the example code snippet in a separate thread with a meaningful title Cheers, Ilia
  • 0 Votes
    8 Posts
    3k Views
    M
    Hi correct I made a typo in the string representation of a Vec3, this is going to be fixed in an upcoming release. Cheers, Maxime.
  • After undo, point object SetAllPoints not update

    Cinema 4D SDK 2024 python
    3
    1 Votes
    3 Posts
    622 Views
    chuanzhenC
    @ferdinand Thanks for your help!
  • "Vector Curl" on Volume Builder?

    Cinema 4D SDK python 2024
    3
    0 Votes
    3 Posts
    604 Views
    justinleducJ
    Hey @i_mazlov, thank you so much for your incredibly helpful and thorough reply. This is exactly what I was looking for. Thanks again! I really appreciate it!
  • Adding UVs to Ngons in C++

    Cinema 4D SDK c++ 2024
    2
    0 Votes
    2 Posts
    392 Views
    i_mazlovI
    Hello @mn-kb3d , 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 Sorry for the delayed answer. In your further postings please add a code snippet that highlights the issue you're struggling with and shows the context of your question. Please also note that you're pointing out to the outdated documentation, please use the up-to-date one instead: UVWStruct. You can easily access it from the top menu as shown on the screenshot [image: 1701798037356-a17b9e9f-6762-4617-ae84-9d0fe94c73cd-image.png] Regarding your question. Ngons are actually sort of a collection of polygons (tris or quads). Even though you create an Ngon, for the UV mapping you would be using the same UVWStruct being applied to the underlying polygons. To find out the corresponding polygons and its indices you're welcome to use GetPolygonTranslationMap and GetNGonTranslationMap functions. Here is a simple example of how you can use them: // PolygonObject* poly; // ... // // Polygon-object initialization routine // ... Int32 ngonCount = 0; Int32* polyMap = nullptr; CheckState(poly->GetPolygonTranslationMap(ngonCount, polyMap)); Int32** ngons = nullptr; CheckState(poly->GetNGonTranslationMap(ngonCount, polyMap, ngons)); for (Int32 i = 0; i < ngonCount; ++i) { Int32 nPoly = ngons[i][0]; String polyIndicesStr; for (Int32 j = 1; j < nPoly + 1; ++j) polyIndicesStr += FormatString("@ ", polygonIdx); DiagnosticOutput("Ngon #@ with @ polygons: @", i, nPoly, polyIndicesStr); } Cheers, Ilia
  • Setting Mograph Tracer Properties

    Cinema 4D SDK python 2024
    3
    0 Votes
    3 Posts
    485 Views
    D
    Dear Ferdinand, Thank you so much. I've found it tricky to navigate the API reference. Being able to get a pointer to the object parameter through drag and drop is a game changer for me!!
  • VC_FLAGS

    Cinema 4D SDK 2024 python 2023
    2
    0 Votes
    2 Posts
    389 Views
    M
    Hi @baca VC_SAFETY has been removed in 2023.1, you do not need it anymore, since the message can't fail anymore. You should keep it for old code but for new code, just leave the vc_flags empty will be enough. Cheers, Maxime.
  • 0 Votes
    4 Posts
    730 Views
    K
    I found the AddPorts() Method,Sorry I missed it before. from typing import Optional import c4d import maxon doc: c4d.documents.BaseDocument # The active document op: Optional[c4d.BaseObject] # The active object, None if unselected def main() -> None: material = doc.GetActiveMaterial() nodeMaterial = material.GetNodeMaterialReference() graph: maxon.GraphModelInterface = nodeMaterial.GetGraph(c4d.GetActiveNodeSpaceId()) with graph.BeginTransaction() as transaction: layered_node = graph.AddChild(maxon.Id(),"com.chaos.vray_node.texlayeredmax") layers = layered_node.GetInputs().FindChild("com.chaos.vray_node.texlayeredmax.texture_layers") #The Layers portbundle layers.AddPorts(2, 1) #Add layers transaction.Commit() #Layer in Layers portbundle layers_list = [] layers.GetChildren(layers_list,maxon.NODE_KIND.INPORT) #Textureports and BlendMode_ports in Layers portbundle layers_texport_list = [tport for port in layers_list if (tport := port.FindChild("com.chaos.vray.portbundle.texture_layer.texture"))] layers_mode_list = [mport for port in layers_list if (mport := port.FindChild("com.chaos.vray.portbundle.texture_layer.blend_mode"))] print(layered_node) print(layers) print(layers_list) print(layers_texport_list) print(layers_mode_list) if __name__ == '__main__': main()
  • use existing Catmull Clark algorithm

    Cinema 4D SDK python c++ 2024
    14
    0 Votes
    14 Posts
    3k Views
    ferdinandF
    Hey @CJtheTiger, yes, we disabled Ask as question because it was a lot of extra work for us to maintain because 60%-80% of users set their topics never as solved. Cheers, Ferdinand
  • Which DisplayFilter affects ToolData.draw

    Cinema 4D SDK 2023 2024 s26 python
    3
    0 Votes
    3 Posts
    572 Views
    gheyretG
    Hi @ferdinand , I'm sorry that my title and description may be a little confused, maybe I misunderstood something and thought a little complicated. And thank you very much for your answer, you always help me when my thinking is confused. Cheers! Gheyret
  • 0 Votes
    3 Posts
    878 Views
    G
    This is an excellent explanation , thank you.