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
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Execfile with loaded script errors

    Scheduled Pinned Locked Moved PYTHON Development
    3 Posts 0 Posters 952 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 31/07/2018 at 20:04, xxxxxxxx wrote:

      Hi everyone,

      I've got two scripts that seemingly look like they're working correctly but put both together they don't. The main part is a script that iterates through all objects in a file, selects the ones with a specific name and then changes an attribute. However, that script doesn't work properly unless there's an object already selected so I am calling it from another script that will select the first object if none are already selected. Now I'm getting "not defined" errors from the main script because I guess it doesn't know that it's in the current document?

      import c4d
        
        
      def recur_iter(obj,ref) :
          
          while obj:
              if obj.GetName() == 'V1' and obj[c4d.LIGHT_VLTYPE] == 2:
                  print obj.GetName() + ' Now Has No Volumetrics'
                  obj[c4d.LIGHT_VLTYPE]=0
              elif obj.GetName() == 'V1' and obj[c4d.LIGHT_VLTYPE] == 0:
                  print obj.GetName() + ' Now Has Volumetrics'
                  obj[c4d.LIGHT_VLTYPE]=2
              recur_iter(obj.GetDown(),ref)
              obj = obj.GetNext()
        
      def recur_iter2(obj2,ref2) :
          
          while obj2:
              if obj2.GetName() == 'V2' and obj2[c4d.LIGHT_VLTYPE] == 2:
                  print obj2.GetName() + ' Now Has No Volumetrics'
                  obj2[c4d.LIGHT_VLTYPE]=0
              elif obj2.GetName() == 'V2' and obj2[c4d.LIGHT_VLTYPE] == 0:
                  print obj2.GetName() + ' Now Has Volumetrics'
                  obj2[c4d.LIGHT_VLTYPE]=2
              recur_iter2(obj2.GetDown(),ref2)
              obj2 = obj2.GetNext()
        
      def main() :
        
          ref = op[c4d.LIGHT_BRIGHTNESS]
          ref2 = op[c4d.LIGHT_BRIGHTNESS]    
          recur_iter(doc.GetFirstObject(),ref)
          recur_iter2(doc.GetFirstObject(),ref2)
          
          
          c4d.EventAdd()
         
        
      if __name__=='__main__':
          main()
      
      import c4d, os
        
        
        
      def main() :
          
          FirstObject = doc.GetFirstObject()
                  
          selec = doc.GetActiveObject()
          
          if selec == None:
              FirstObject.SetBit(c4d.BIT_ACTIVE)
              
          else:
              pass
              
          c4d.EventAdd()         
          
        
          execfile(c4d.storage.GeGetC4DPath(c4d.C4D_PATH_LIBRARY_USER)+os.sep+"scripts"+os.sep+"VolumetricSwitch.py")
        
              
          c4d.EventAdd()
          
      if __name__=='__main__':
          main()
      
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        On 01/08/2018 at 09:40, xxxxxxxx wrote:

        Hi,

        It seems you're getting "not defined" errors for 'op' variable in the executed script with execfile().
        'op' is None when there is no selected object before running the main script.
        So in the executed script, if 'op' is None it should then be assigned the active object returned by doc.GetActiveObject().

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

          On 02/08/2018 at 10:24, xxxxxxxx wrote:

          Thanks, that pointed me in the right direction. 
          This worked for me

              doc = c4d.documents.GetActiveDocument() # Get the open document
            
              obj = c4d.documents.BaseDocument.GetFirstObject(doc) # Get first object in hierarchy
              
              op = obj
          
          1 Reply Last reply Reply Quote 0
          • First post
            Last post