• Still not possible to find out what's visible in the Timeline?

    r21 c++ python
    19
    0 Votes
    19 Posts
    3k Views
    M
    The bug is fixed in R23. Cheers, Maxime
  • SculptTag

    r20 python windows
    6
    0 Votes
    6 Posts
    768 Views
    M
    The bug is fixed in S22. Cheers, Maxime.
  • Japanese Language Interface – Problems

    r23
    2
    0 Votes
    2 Posts
    615 Views
    ferdinandF
    Hi @lasselauch, thank you for reaching out to us and I am sorry to hear about your problems regarding targeting multiple localizations. I am struggling however a bit to understand what is exactly going wrong for you. You tell us that the plugin "isn't behaving correctly in R23" which is a bit too broad for us to come up with an reliable answer. I am also sorry for having to point out that your proposed way of getting hold of the implementation of the plugin via aescripts.com - with the proprietary downloader you provide there to distribute your products - is a bit much for us. I would suggest that you share the relevant code more directly here, or, in case you cannot do this, share it via sdk_support(at)maxon.net confidentially with us (please note the Forum Guidelines regarding Support Procedures: Confidential Data, specifically regarding NDAs, in case they would apply here). For your actual problem: It is really hard to give any advice without knowing what exactly is going wrong. I assume you have a Japanese localization in your resource folder and it does not work for the user? I would check: If the folder has the correct ISO 639-1 language code, for Japanese it should be ja-JP, so for the strings folder it should be strings_ja-JP for example. Not providing a matching language code for a running Cinema 4D instance should result in Cinema automatically falling back to en-US. Make sure that the Japanese translation files are all UTF-8. While the manuals do not state that restriction, it could be something that is tripping Cinema up, especially considering that languages with large character sets, like for example Japanese, are not fully represented in UTF-8 due to the limited namespace. I would however had to ask our translators how they handle Japanese if this is the culprit. But in the end these are mostly shots into the dark for me, due to not knowing what is exactly going wrong. So I would also had to ask you to describe more precisely what is going wrong. Cheers, Ferdinand
  • 0 Votes
    6 Posts
    1k Views
    M
    @ferdinand said in "Frame Selected Elements" command not working when running script through c4dpy?: forgot to call c4d.documents.InsertDocument before calling c4d.documents.SetActiveDocument which causes all sorts of hiccups in Cinema, not only c4dpy This is a real classic! I stumbled over this several times!
  • Drawing to Multiple Views at Once

    r23 python windows
    5
    0 Votes
    5 Posts
    632 Views
    ?
    @ferdinand That's very helpful, thank you!
  • Spline dynamics

    python r21 windows
    7
    0 Votes
    7 Posts
    1k Views
    bacaB
    @ferdinand you were clear and example is pretty good, I got the idea. No need to write code for me But it's not trivial overall, I just need to spend some time on this. Thanks again.
  • phong tag

    c++ sdk
    9
    0 Votes
    9 Posts
    4k Views
    C
    @Yaroslav If you are simply looking for a way to manipulate vertex normals there is a great plugin out there: http://frostsoft.blogspot.com/2012/01/vertex-normal-tool-plugin_80.html?m=1
  • Custom FieldList is not reevaluated on field change

    c++ s22 windows
    6
    0 Votes
    6 Posts
    696 Views
    ManuelM
    hi, this shouldn't make any difference, what do you mean by "my own FIELDLIST gui element" . Can i see how do you add it and initialise it ? Cheers, Manuel
  • How To Add Undo For Description Added Dynamically

    python r23
    8
    2
    0 Votes
    8 Posts
    1k Views
    beatgramB
    @Cairyn Thank you so much for helping me again!
  • 0 Votes
    4 Posts
    976 Views
    M
    thank you for your help, I am trying to understand ... am I right in the assumption that this is not "clean code" in a pythonic sense ? kind regards
  • ToolData::GetDDescription() redundant call, why?

    c++ r23
    4
    0 Votes
    4 Posts
    912 Views
    WTools3DW
    Thank you guys for quick reply. But I was probably not clear enough with the question. I do understated the concept of setting panel description via GetDDescription() callback. I already did the checks for whether it is request for full description of just single id. As it is listed in the example below (it is member function of C4dControls class from previous snippet void C4dControls::AddIntChoice(int id, int gid, const String& name, const BaseContainer& items) { const DescID cid = DescLevel(id, DTYPE_LONG, 0); //--------------------------------------------------------------------- if (ex_descr && (!ex_singleid || cid.IsPartOf(*ex_singleid, nullptr)) ) { BaseContainer bc = GetCustomDataTypeDefault(DTYPE_LONG); //--------------------------------------------- bc.SetInt32 (DESC_CUSTOMGUI, ID_QUICKTABSRADIO_GADGET); bc.SetString(DESC_NAME, name); bc.SetInt32 (DESC_SCALEH, 1); // animate OFF bc.SetInt32 (DESC_ANIMATE, DESC_ANIMATE_OFF); //--------------------------------------------- bc.SetContainer(DESC_CYCLE, items); //--------------------------------------------- ex_descr->SetParameter(cid, bc, DescLevel(gid)); } } But it is still calling to rewrite each control description several times after any event in GUI. What confuses me the most, is that each series of calls is with the different pointer to description (Description* description) For example there are five different pointers to description when ToolData::GetDDescription() is executed for the same event. (after mouse click into attribute manager) Is this the way how it really works? There are more versions of description for the same panel, and all of them have to be initialized repeatedly after each event? Thanks! Viktor
  • DrawPolygonObject at specific z-offset

    r23 c++
    5
    0 Votes
    5 Posts
    922 Views
    ferdinandF
    Hi @C4DS, I am not sure that I can follow on what you are exactly doing. But my assumption is that you have x objects in a scene, want to block out all these objects with some kind of background texture and then draw one of these objects on top of that background texture, right? This is unfortunately not possible in my understanding. What you could do, is fill the viewport with a background texture by putting it behind an object by manually doing the trigonometry/transforms necessary for a given cemara. Not fun to do, because you have all these ifs and whens of camera parameters, but doable. This however would only give you a custom background and block out everything behind it, but not what is between the camera, the object and the background. Which is probably not what you are after if I understand you correctly. Cheers, Ferdinand
  • GroupBorderNoTitle change GUI or flags after user input

    4
    0 Votes
    4 Posts
    776 Views
    ferdinandF
    Hi @mogh, thank you for reaching out to us and thank you @mp5gosu for providing help. I think the most meaningful thing I can say is that GeDialog is pretty forgiving and not as strict as the sum of its methods might imply; at least that was my insight to be gained when I encountered the class first. Since you said you consider this to be still rough, here are some tips that might be helpful. All following method references are members of GeDialog. You can define and load file based resources for dialogs, just like it is implicitly done with descriptions, with LoadDialogResource. This helps to clean up GeDialog implementations from the inherent clutter that comes with complex interface definitions. You can also do this to some extent in a modular fashion, i.e., invoking LoadDialogResource multiple times will not replace the former content but instead append new content. CreateLayout is mostly a convenience method. Or in other words, there is nothing which does prevent you from modifying the resource of a dialog from anywhere else where you have access to the dialog instance (be careful with threading though). Resources are organized in groups and you can flush these groups with LayoutFlushGroup, for example to rebuild them on user interaction. Single arbitrary elements can be removed by invoking RemoveElement. The relevant methods are all grouped under Dialog Change Methods in the GeDialog documentation. If anything remains unclear, please do not hesitate to ask. Cheers, Ferdinand
  • Gets the point weight of the Field object.

    2
    0 Votes
    2 Posts
    554 Views
    ferdinandF
    Hi @x_nerve, thank you for reaching out to us. The most straightforward way to sample a FieldObject is FieldObject.Sample; there are also other sample methods attached to the various fields related classes, most notably c4d.FieldList. We have two examples in the Python SDK examples which showcase field sampling, fieldlist_sampling_r20 and fieldobject_sampling_20. You also mention "Is there a way to get the weight of the cube field points?"; you are probably aware of this, but since your phrasing could imply otherwise, it seems noteworthy to point out that fields are not discrete. So in other words, there is no finite amount of points you can exhaustively sample for a field object, since the object is non-discrete. You have to pick a point or a set of points you want to sample for a field object, which can be any point in in the value range c4d.Vector can handle. If there are any questions left, please do not hesitate to ask. Cheers, Ferdinand
  • Thinking Particles- How to Set "Settings"

    r23 python
    5
    0 Votes
    5 Posts
    800 Views
    I
    Okay, thank you again.
  • Is there a Resource Editor for Version 23

    r23
    5
    0 Votes
    5 Posts
    989 Views
    ThomasBT
    Thanks a lot, this also works for Python Plugins or? Thanks man...
  • Global variable for Preferences Folder?

    r21 python
    7
    0 Votes
    7 Posts
    624 Views
    ferdinandF
    Hi @bentraje, hi @C4DS, you seem to have solved your problem yourself, so there is not much for me to add here apart from offering alternative solutions. One slightly dodgy way to get the preferences path is to use the path which is stored under c4d.PREF_MEMORY_PVHARDFOLDER in the world container of Cinema (it is the Memory>Cache Path attribute). A more elegant way is to use maxon.Application.GetUrl() which does properly handle the different paths under which the preferences can be stored (see example at the end of my posting for details). Cheers, Ferdinand """On how to iterate over the different preferences paths with the maxon API. """ import maxon def main(): """Entry point. """ for urlType in (maxon.APPLICATION_URLTYPE.GLOBALPREFS_DIR, maxon.APPLICATION_URLTYPE.PREFS_DIR, maxon.APPLICATION_URLTYPE.PREFS_DIR_STATIC): print (f"{urlType}:{maxon.Application.GetUrl(urlType)}") if __name__=='__main__': main()
  • Request: Combobox Icons

    9
    0 Votes
    9 Posts
    1k Views
    ferdinandF
    Hi @blastframe, the Python documentation will be updated in this regard with the release of R24. If you do not have any questions left related to the initial topic we would ask you to mark this topic as solved. Cheers, Ferdinand
  • NodeData: How to get connected GeListNode

    python r20
    3
    0 Votes
    3 Posts
    435 Views
    M
    Thought so. No, there's nothing missing in inherited methods. Thought, it'd be convenient. However, storing it to a member variable on init or forwarding does the trick.
  • Editor and viewport colours - where/how to find them?

    c++ sdk
    3
    0 Votes
    3 Posts
    345 Views
    WickedPW
    Thanks @C4DS, that's what I'm after! WP.