• UNIT METER SCALE ISSUE

    4
    0 Votes
    4 Posts
    715 Views
    r_giganteR
    Hi pyr, thanks for reaching out us. Consider that the Scale modifier operates on the transformation matrix of the object when in Object Mode, whilst it operates on the parameters specified as lengths when in Model Mode. Finally, as pointed out by @zipit, providing more context will be definitively beneficial since with a very simple example I'm not able to replicate the issue as well. Best, R
  • TreeView: c4d.DRAGTYPE_FILES

    r20 python
    10
    0 Votes
    10 Posts
    2k Views
    M
    Hello Maxime, thanks for that detailed answer. Much appreciated. I see, drawing slows down things massively. (3minutes vs. a few seconds) Bad luck for me then. But it still helped me though, I'm now going for another approach. (The GUI part was just for convenience, so everything is fine) Thank you and cheers, Robert
  • Output all renderpaths

    r20 r21 windows python
    3
    1 Votes
    3 Posts
    582 Views
    B
    Thanks Maxime! In the mean time I will cycle through takes, AOVs and Frames manually to get the paths.
  • Disable default Right-Click Menu

    python r19 r20 r21
    9
    0 Votes
    9 Posts
    2k Views
    U
    @m_adam Thanks! Thats a perfect explanation that solves many of my issues - even in some of my other Plugins. I am sorry, I did in fact refer to c4d freezing when I said crashing. Sorry for the confusion.
  • Catch other object's delete/undo

    c++ r19 r20 r21
    5
    0 Votes
    5 Posts
    912 Views
    rsodreR
    @m_adam , AddEventNotification was exactly what I needed. I created a notification to NOTIFY_EVENT_UNDO, and then add my object to it. Now if I delete anything from my object after a polygon is deleted, it will be restored with Undo. Thanks! case MSG_NOTIFY_EVENT: { CHECK_BREAK( data != nullptr ); const auto eventData = static_cast<NotifyEventData*>( data ); if( eventData->eventid == NOTIFY_EVENT_UNDO ) { NotifyEventMsg* notifyMessage = static_cast<NotifyEventMsg*>( eventData->event_data ); CHECK_BREAK( notifyMessage != nullptr ); if( notifyMessage->msg_id == Int32( UNDOTYPE_DELETE ) ) { eventData->doc->AddUndo( UNDOTYPE_CHANGE, Get() ); } } break; }
  • Adding polygon UVs & Normals.

    python r20
    13
    0 Votes
    13 Posts
    3k Views
    M
    Just to add additional information, In R21 GetAllHighlevelData() and SetAllHighlevelData() are working as expected for NormalTag, so data are not any more "shifted" and correctly interpreted internally. See What's New: Fixes: Fixed an issue where VariableTag.GetAllHighlevelData() and VariableTag.SetAllHighlevelData() used Uint16 instead of int16 for Tnormal. Fixed an issue where VariableTag.GetAllHighlevelData() returned data were shifted and not complete for Tnormal. Cheers, Maxime.
  • On the problems of C + + novice

    6
    0 Votes
    6 Posts
    925 Views
    S
    Hello, there aren't any official video tutorials regarding plugin development. If you are new to C++, I strongly suggest to learn the language and how to use Visual Studio before diving into Cinema 4D plugin programming. When you are familiar with C++ and Visual Studio, the first thing you should do is to compile the provided example projects. Especially the "microsdk" show the basics of a simple project. How to build the example projects is described here: Getting Started: Introduction. What specific issues do you encounter while compiling the examples? best wishes, Sebastian
  • 0 Votes
    6 Posts
    709 Views
    S
    Hello, just for your information: GetDEnabling() gives you the description of the parameter with the itemdesc parameter. From that BaseContainer, you should be able to read the ID of the parameter's parent group (see Description Settings Manual - Groups). best wishes, Sebastian
  • 0 Votes
    6 Posts
    930 Views
    B
    @Cairyn and @r_gigante Apologies for the late response. Yes, the ExecutePasses works as expected. Thanks for the solution. I can't use the SetMg()/GetMg() because the script is part of a larger base code which is not limited only to the PSR tag. Thanks again. Have a great day ahead!
  • Custom renderer, viewport render crashes

    c++ r21
    3
    0 Votes
    3 Posts
    595 Views
    F
    "I warmly recommend cloning the whole document on a temp doc" Thanks, I'll try working on a clone. I had the impression that the document passed to the videopost was already a clone of the original document, but perhaps this is not the case for viewport rendering? "With regard to your issue, I'm a bit confused by the need you have to call BaseDocument::AnimateObject() or BaseDocument::ExecutePasses() when the VIDEOPOSTCALL in VideoPostData::Execute() is VIDEOPOSTCALL::INNER. Actually when you're in this step, you can already access and query the VolumeData to retrieve all the relevant information about the scene elements (like RayObject, RayLight and so on)." -We have some good reasons for working with the basedocument directly, rather than the data provided from the VolumeData. "Consider that this approach is sub-optimal since you're going to double the resources used to store the current document." -OK. This should be fine for our purposes. Our plugin actually provides custom rendering commands, that are the preferred way of rendering with the plugin. The videopost functionality is added as more of a convenience in our case, to make the plugin work nicely with things like viewport rendering, material preview etc. /Filip
  • Visual Studio - Debugging Plugin Error

    9
    1
    0 Votes
    9 Posts
    1k Views
    S
    Hello, you find information how to run a plugin from within Visual Studio in the documentation: Development for Microsoft Windows - Running Plugins. best wishes, Sebastian
  • Visual Studio - How to build the final plugin version.

    5
    0 Votes
    5 Posts
    761 Views
    mfersaouiM
    Thank you so much, all The Cinema 4D on the other computer was not updated to R19.068, I updated the c4d app and I made new test, it seem to work normally. To be sure, I will retest it again on a third computer. I have an error when I try to debugging plugins, I will create new topic concerning this error. Thanks again, and have a great day.
  • Creating a 'Reload Image' button

    6
    1
    0 Votes
    6 Posts
    1k Views
    S
    Hello, if in doubt, one can always call c4d.StopAllThreads() before editing the active document from some user interaction in the main thread. This call will terminate other threads that may also currently use the active document (e.g. viewport rendering). best wishes, Sebastian
  • Compling against Alembic

    4
    0 Votes
    4 Posts
    721 Views
    r_giganteR
    Hi eldiren, thanks for following up. With regard to the different amount of errors between R19 and R20 without better clarification on what were the errors on R19 I would not argue about things being "better". In R20 plugin project files are created by using the Project Tool whilst in R19 projects had to be setup manually. This could maybe helped to a certain extent. Because of the use of the Project Tool and the need to include both external headers and libraries I recommend to have a look at: including headers adding external libs Finally I recommend to switch to Alembic 1.7.7 which was the revision used in Cinema 4D R20 in order to limit potential conflicts due to the different revision level or to use your source in a separate namespace to make sure “your” Alembic binaries are used. Best, R
  • Prevent c4d from opening path passed in sys.argv

    r20 python windows
    5
    0 Votes
    5 Posts
    932 Views
    B
    Thanks! I'll try that.
  • Find nearest position on a geometry

    r21 python
    6
    0 Votes
    6 Posts
    643 Views
    r_giganteR
    Hi Frank, thanks for reaching out us. With regard to your request, aside from confirming that nothing comes with Python API for obvious performance reasons, in C++ the nearest thing you can find is KDtree - as already pointed out by @zipit - or other similar accelerating structures. On top of these notes, I would consider this topic more a general programming / algorithm-related topic which could find, based on the contour conditions, different "better" solutions. Best, R
  • Show/Hide Tabs in GUI

    python
    3
    0 Votes
    3 Posts
    700 Views
    N
    Hello Sebastian, sorry, for not using the QA System, will do in the future! This was exactly what I needed. I have never changed my GUI outside the res file and it felt kinda confusing to me what exactly I have to do after reading the doc. Thanks for your awnser! Best Regards, Florian
  • How to Open a Dialog Plugin from a Tag Plugin?

    sdk python
    6
    0 Votes
    6 Posts
    1k Views
    S
    Hello, the important question is, if you want to open a modal or asynchronous dialog. An asynchronous dialog must be hosted by a CommandData plugin (GeDialog Manual) (e.g. py-memory_viewer). As mentioned above, a double-click on a tag can be detected by looking for the MSG_EDIT message (NodeData::Message() Manual). So, when you detect MSG_EDIT, you simply have to execute the command that hosts you dialog. You can simply do that using CallCommand() (Command Utility Manual). Within your dialog, you can find your tag by getting the active tag. best wishes, Sebastian
  • What is the difference between CheckType() and IsInstanceOf()?

    r21 python
    3
    1 Votes
    3 Posts
    335 Views
    CairynC
    Yes, C4DAtom.CheckType() in Python. Thanks for the confirmation, it bugged me that it was only in the Python doc but not in the C++ doc.
  • Selecting Objects in Order

    python
    2
    1 Votes
    2 Posts
    2k Views
    M
    Hi @dskeithbuck thanks for reaching us. In fact, it's written in the C++ BaseDocument - Selection Manual but I agree maybe a note in the function will be welcome. IN any case, I will add a note for the python doc. Thanks again. Cheers, Maxime.