Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware 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
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Batch Processor: plugin for python scripts developers

    General Talk
    3
    5
    1.6k
    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.
    • mikeudinM
      mikeudin
      last edited by

      Hello folks!

      Let me introduce you my new plugin, which is good solution for those people who developing file handling scripts for Cinema 4D R19 and higher.

      The Batch Processor plugin allows to convert between all the 3D formats that are supported by Cinema 4D and supports User Scripts, including scripts with User Interface. Plugin installation contains several scripts that can be used as an example. Also plugin help contains all the necessary information about developing scripts with Batch Processor compatibility.

      Using the Batch Processor, the developer needs to write only code part for processing the document, the plugin takes care of the rest (opening-saving file,collecting, display and saving the script results log).

      Here is an example Demo Script:

      import c4d
      from c4d import gui
      
      '''
      Batch processor User Script Basic Example
      Please follow the code comments 
      https://mikeudin.net/
      
      
      To add User Scipt dialog make sure:
      1. Your dialog is based on gui.Subdialog class
      2. Class must have a name 'UserScriptDialog'
      3. Class must have a class variable 'user_script_container' to store all data on it
      4. Script must have 'main' function that will be executed by Batch Processor
      5. 'user_script_container' from dialog will be used as input argument for 'main' function
      
      '''
      
      class UserScriptDialog(gui.SubDialog):
          """
          A SubDialog to display the passed string, its used as example for the actual content of a Tab
          """
          
          STRING_FIELD = 2000
          INT_FIELD = 2001
      
          # define user_script_container as dictionary
          user_script_container = dict()
          
          def CreateLayout(self):
      
              # Add your dialog gui elements as descibed on Cinema 4D Python API
              # Please use methods which is compatible with Cinema 4D R19+ Python API
              
              bc = c4d.BaseContainer()
              bc.SetBool(c4d.QUICKTAB_BAR, True)  
              bc.SetString(c4d.QUICKTAB_BARTITLE, 'Script Options')
              self.AddCustomGui(1000, c4d.CUSTOMGUI_QUICKTAB, '', c4d.BFH_SCALEFIT, 0, 0, bc)
      
              if self.GroupBegin(1001,flags=c4d.BFH_SCALEFIT | c4d.BFV_TOP,cols=2,rows=1,title='Script Options'):
                  
                  self.GroupSpace(15, 6)
                  self.GroupBorderSpace(15,5,15,10)
      
                  self.AddStaticText(1002, c4d.BFH_LEFT, name='My String Data')
                  self.AddEditText(self.STRING_FIELD, c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT, 0, 10)
      
                  self.AddStaticText(1003, c4d.BFH_LEFT, name='My Integer Data')
                  self.AddEditNumberArrows(self.INT_FIELD, c4d.BFH_LEFT | c4d.BFV_SCALEFIT, 80, 10)
      
                  self.GroupEnd()
      
              return True
      
          def Command(self,id,msg):
      
              # Assign data to 'user_script_container' variable on any user gui interaction
              if id in {self.STRING_FIELD,self.INT_FIELD}:
                  self.user_script_container['int'] = self.GetInt32(self.INT_FIELD)
                  self.user_script_container['string'] = self.GetString(self.STRING_FIELD)
      
              return True
      
      # On execution 'user_script_container' will be used as input argument for 'main' function. 
      # if User Scipt do not contains dialog, 'main' function will be executed without arguments.
      
      def main(data):
          
          '''
          Batch Processor adds some global variables to User Script:
          
          doc - referenced to a processed document, type: c4d.BaseDocument
          doc_index - referenced to an document index in Jobs Queue, type: int
          docs_total - total number of documents in a Jobs Queue, type:int
      
          op - Active Object of processed document, type: c4d.BaseObject 
          mat - Active Material of processed document, type: c4d.Material
          tp - Particle System of processed document, type: c4d.modules.thinkingparticles.TP_MasterSystem
      
          '''
      
          # All data that needed to be printed will be passed to plugin Log tab
          print 'Processed Document Index {0} from {1}'.format(doc_index,docs_total) 
          print 'Document name: ', doc.GetDocumentName()
          print 'Document path: ', doc.GetDocumentPath()
          print 'Document Active Object is ', op
          
          print 'My String data', data['string']
          print 'My Integer data', data['int']
          
          if 3 < doc_index < 7:
              # If index of processed document have a number 4,5,6
              # in this case User Scipt will return error   
              raise Exception('Error!')
      
      

      Here is how it works:

      f873b137-b5f8-4c55-bf8f-fae9a3fc943b-image.png

      I hope the Batch Processor will be the solution that will help automate your work on processing a large number of files using the Cinema 4D Python API!

      Checkout my python tutorials, plugins, scripts, xpresso presets and more
      https://mikeudin.net

      1 Reply Last reply Reply Quote 4
      • intenditoreI
        intenditore
        last edited by

        Ой, Михаил, как приятно вас тут видеть)
        Great tool, that's what I missed MUCH in r19 which is still required often (if you understand why :D)

        mikeudinM 1 Reply Last reply Reply Quote 0
        • mikeudinM
          mikeudin @intenditore
          last edited by

          @intenditore Любой разработчик под Cinema 4D должен тут быть)

          Checkout my python tutorials, plugins, scripts, xpresso presets and more
          https://mikeudin.net

          1 Reply Last reply Reply Quote 0
          • M
            m_adam
            last edited by

            That's a very nice project, we wish you great success with it.

            Cheers,
            Maxime.

            MAXON SDK Specialist

            Development Blog, MAXON Registered Developer

            mikeudinM 1 Reply Last reply Reply Quote 1
            • mikeudinM
              mikeudin @m_adam
              last edited by

              @m_adam Thank you!

              Checkout my python tutorials, plugins, scripts, xpresso presets and more
              https://mikeudin.net

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