Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    MSG_MULTI_RENDERNOTIFICATION with Command Plugin..

    Scheduled Pinned Locked Moved PYTHON Development
    9 Posts 0 Posters 720 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      On 03/09/2015 at 01:27, xxxxxxxx wrote:

      Hi,

      I understand that a Command plugin doesn't receive the MSG_MULTI_RENDERNOTIFICATION message ( in fact there's no info in the Python docs for R15 on what the Message function does receive )..

      I'd like to somehow use MSG_MULTI_RENDERNOTIFICATION to toggle when a render has started and when it has finished, in combination with c4d.CheckIsRunning(c4d.CHECKISRUNNING_EDITORRENDERING).

      I can use CheckIsRunning inside the Command plugin ok, but i don't want to continually poll this until the render has finished, hence why i think i need the MSG_MULTI_RENDERNOTIFICATION..

      How best would i go about this?  Can i force the active doc to message the Command plugin when it receives that message?  Or should i set up a MessageData plugin for this, and if so how would i call it and get it to pass on the message to my Command plugin?

      Thanks for any help on this.

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        On 03/09/2015 at 02:59, xxxxxxxx wrote:

        Hello,

        MSG_MULTI_RENDERNOTIFICATION is send to the document and all it's content. CommandData plugins and MessageData plugins are not part of the document, so they don't receive that message.

        With "toggle" you mean to implement CommandData.GetState? In this case I don't see anything wrong to use CheckIsRunning() to enable or disable your command.

        Best wishes,
        Sebastian

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          On 03/09/2015 at 07:30, xxxxxxxx wrote:

          No, by toggle i just mean set a variable to True if rendering or false otherwise.

          Actually what i need is, to do something 'when rendering has finished'..

          So CheckIsRunning() is useful, but i'd have to continually run CheckIsRunning() until the render had stopped, to know it had finished..

          Any suggestions?

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            On 03/09/2015 at 09:50, xxxxxxxx wrote:

            Hello,

            I still don't fully understand what you are trying to do. What has a command data plugin to do with what you describe?

            Best wishes,
            Sebastian

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              On 03/09/2015 at 12:51, xxxxxxxx wrote:

              Hi Sebastian,

              Basically, i have a plugin, which allows the user to choose from preset render settings, and then hit a Test Render button to render to either the viewport or picture viewer with the chosen render settings.

              This works fine, applying the various preset render settings - however, i need to be able to reapply the settings that were there before the preset was applied.  So the users render settings are stored, then the preset settings are applied, and then once the render is complete the users settings are re-applied.

              So i need a way to know when a render is finished, so that the settings can be reapplied.

              I've tried applying the settings immediately after starting the render, but for some reason that causes the renders to use the newly applied settings even though they are applied AFTER starting the render..  Have also considered setting some kind of delay timer, to apply a time after starting render, to prevent this from happening, but it's not ideal..

              So - simple question, how can i find out when a render has finished?

              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                On 04/09/2015 at 00:44, xxxxxxxx wrote:

                Hello,

                I'm not sure if it is possible to do what you want in Python. When one renders a document in the Picture Viewer this is done handling a copy of the original document. The document rendered is not the original document anymore. This means while the document is rendering in the PV, the user could close or switch the current document in the editor. So when you "reset" the settings it would be on the wrong document.

                If you just want to preview a single frame you could render that frame yourself using RenderDocument() and then show that frame in the PV using ShowBitmap().

                To truly detect if the rendering of a document finished you probably need something inside that document. Typically this would be a SceneHook, but this class is only available in the C++ API.

                Best wishes,
                Sebastian

                1 Reply Last reply Reply Quote 0
                • H Offline
                  Helper
                  last edited by

                  On 04/09/2015 at 02:50, xxxxxxxx wrote:

                  Yeah i was aware of the document clone thing..

                  RenderDocument()/ShowBitmap() is a useful tip i have never tried that, thanks.

                  In the meantime i think i will just assign the 're-apply user settings' to a Restore Settings button or something similar.  It would be useful to know if there was a way to intercept that MSG_MULTI_RENDERNOTIFICATION message from a Command plugin, but i guess it just might not be possible.

                  Thanks for the help it is much appreciated.

                  1 Reply Last reply Reply Quote 0
                  • H Offline
                    Helper
                    last edited by

                    On 04/09/2015 at 07:21, xxxxxxxx wrote:

                    If you install Apex, you get the MSG_MULTI_RENDERNOTIFICATION send to Python via PluginMessage().
                    I've tested it on OSX only yet, there could be ABI compatibility problems on Windows.

                    https://github.com/nr-plugins/apex/wiki/Redirected-Messages

                    You can grab an OSX build for R15+ from the releases page.

                    Edit  I've just added a Windows build as well, seems to work fine.

                    1 Reply Last reply Reply Quote 0
                    • H Offline
                      Helper
                      last edited by

                      On 06/09/2015 at 16:09, xxxxxxxx wrote:

                      Thanks Niklas that's a really interesting solution.  I've reworked the plugin to work around the problem, but will definitely bear this in mind for similar future issues..

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post