CallCommand() help



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 27/06/2011 at 13:37, xxxxxxxx wrote:

    So this is likely some noob mistake, some fundamental that I am missing.  I can get CallCommand to work great from the console but I can't for the life of me make it work in a script.  I'm not sure what I'm doing wrong.  The relevant part of the code is towards the bottom.  Thanks for your time!

      
    import c4d
    from c4d import SplineObject
    from c4d import documents
    from c4d import BaseTag
    from c4d import BaseSelect
      
    doc = c4d.documents.GetActiveDocument()
      
    def add_spline(number_points, spline_length) :
        '''Returns a linear spline of a specified length that starts at the origin and extends through the y-axis'''
        segment_length = spline_length / (number_points - 1)
        spline = c4d.SplineObject(int(number_points), c4d.SPLINETYPE_LINEAR)
        
        index = 0
        while index <= (int(number_points) - 1) :
            if index == 0:
                spline.SetPoint(index, c4d.Vector())
                index += 1
            else:
                point_pos = c4d.Vector(0, 0, int((segment_length * index)))
                spline.SetPoint(index, point_pos)
                index += 1
        return spline
      
    def main() :
        # function creates a linear spline
        spline = add_spline(10, 500)
        
        # create tags
        constraint_tag = c4d.BaseTag(1018074)                                       # 1018074 //Constraint
        dynamics_tag = c4d.BaseTag(1018068)                                         # 1018068 //Spline Dynamics
        
        # add dynamics tag to spline
        spline.InsertTag(dynamics_tag)
        
        # create null
        null = c4d.BaseObject(c4d.Onull)
        
        # insert null into anchor field for constraint tag
        constraint_tag[c4d.HAIR_CONSTRAINTS_TAG_ANCHOR_LINK] = null
        
        # add constraint tag to spline
        spline.InsertTag(constraint_tag)
        
        # select point 0 on spline (at position 0, 0, 0)
        all_points = spline.GetPointS()
        all_points.Select(0)
        
        # set the spline to be the active object
        doc.SetActiveObject(spline, 1)
        
        # get all tags attached to spline
        tags = spline.GetTags()
        
        # push the button HAIR_CONSTRAINTS_TAG_SET_ANCHOR
        c4d.CallButton(tags[0], 5000)                                               # 5000 //HAIR_CONSTRAINTS_TAG_SET_ANCHOR
        
        # Add the spline and null to the scene
        doc.InsertObject(spline)
        doc.InsertObject(null)
        
        c4d.EventAdd()
      
    if __name__ == '__main__':
        main()
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 27/06/2011 at 16:23, xxxxxxxx wrote:

    Not a noob mistake at all. It's a tricky one that can happen a lot. Especially in scripts.
    Sometimes the object's need to be in the scene(not in memory) and C4D updated before you can go any further.

    try it this way:

    import c4d  
    from c4d import SplineObject  
    from c4d import documents  
    from c4d import BaseTag  
    from c4d import BaseSelect  
      
    doc = c4d.documents.GetActiveDocument()  
      
    def add_spline(number_points, spline_length) :  
      '''Returns a linear spline of a specified length that starts at the origin and extends through the y-axis'''  
      segment_length = spline_length / (number_points - 1)  
      spline = c4d.SplineObject(int(number_points), c4d.SPLINETYPE_LINEAR)  
        
      index = 0  
      while index <= (int(number_points) - 1) :  
          if index == 0:  
              spline.SetPoint(index, c4d.Vector())  
              index += 1  
          else:  
              point_pos = c4d.Vector(0, 0, int((segment_length * index)))  
              spline.SetPoint(index, point_pos)  
              index += 1  
      return spline  
      
    def main() :  
      # function creates a linear spline  
      spline = add_spline(10, 500)  
        
      # create tags  
      constraint_tag = c4d.BaseTag(1018074)   # 1018074 //Constraint  
      dynamics_tag = c4d.BaseTag(1018068)     # 1018068 //Spline Dynamics  
        
      # add dynamics tag to spline  
      spline.InsertTag(dynamics_tag)  
        
      # create null  
      null = c4d.BaseObject(c4d.Onull)  
        
      # insert null into anchor field for constraint tag  
      constraint_tag[c4d.HAIR_CONSTRAINTS_TAG_ANCHOR_LINK] = null  
        
      # add constraint tag to spline  
      spline.InsertTag(constraint_tag)  
        
      # select point 0 on spline (at position 0, 0, 0)  
      all_points = spline.GetPointS()  
      all_points.Select(0)  
      
      # Add the spline and null to the scene  
      doc.InsertObject(spline)  
      doc.InsertObject(null)  
        
      # set the spline to be the active object  
      doc.SetActiveObject(spline, 1)  
        
      # get all tags attached to spline  
      tags = spline.GetTags()  
      
      #Before we attempt to execute any buttons. Let's first update C4D about all these changes we've made first  
      c4d.DrawViews(c4d.DRAWFLAGS_ONLY_ACTIVE_VIEW|c4d.DRAWFLAGS_NO_THREAD|c4d.DRAWFLAGS_NO_REDUCTION|c4d.DRAWFLAGS_STATICBREAK) #Update cinema 4d  
        
      # push the button HAIR_CONSTRAINTS_TAG_SET_ANCHOR  
      c4d.CallButton(tags[0], 5000)   # 5000 //HAIR_CONSTRAINTS_TAG_SET_ANCHOR  
        
      c4d.EventAdd()  
      
    if __name__ == '__main__':  
      main()
    

    -ScottA



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 27/06/2011 at 20:01, xxxxxxxx wrote:

    Beautiful, Scott! Thank you so much.  This was definitely one of those sticky problems that's been with me for the last 4 days.  Cool technique to learn too.  Should come in handy in the future.


Log in to reply