Link not connecting



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

    On 16/10/2012 at 10:38, xxxxxxxx wrote:

    My goal is to control a null on a user specified spline with an align to spline tag on a null.  My problem is that the linking isn't working.  When I make my object plugin editable the null object snaps to the test spline that I had placed into the link box in my plugin.  Why does this only work when I make my object plugin editable?  This is my first plugin by the way.  Here is the code:

    CABLEPATH_LINK = 11010,
    PERCENT_PATH = 11011
      
      
    class Test(c4d.plugins.ObjectData) :
      
        def __init__(self) :
            self.SetOptimizeCache(True)
      
        def Init(self, op) :
            self.InitAttr(op, float, [PERCENT_PATH])
            op[PERCENT_PATH] = 0
            return True
      
        def GetVirtualObjects(self, op, hierarchyhelp) :
            doc = c4d.documents.GetActiveDocument()
            myData = op.GetDataInstance()
      
            pathDist = myData.GetReal(PERCENT_PATH)
            pathLink = myData.GetLink(11010)
            baseNull = c4d.BaseObject(c4d.Onull)
            myPathNull, alignT = self.PathNull(op, pathLink, pathDist)
            myPathNull.InsertUnder(baseNull)
      
            return baseNull
      
        def PathNull(self, op, pathLink, pathDist) :
            pNull = c4d.BaseObject(c4d.Onull) #Create new null
            alignT = pNull.MakeTag(c4d.Taligntospline)
            alignT[c4d.ALIGNTOSPLINETAG_TANGENTIAL] = True
            alignT[c4d.ALIGNTOSPLINETAG_LINK] = pathLink
            alignT[c4d.ALIGNTOSPLINETAG_POSITION] = pathDist/10
            return pNull, alignT
      
    if __name__ == '__main__':
    


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

    On 16/10/2012 at 11:12, xxxxxxxx wrote:

    The align to spline tag is an expression tag, meaning that it's executed every frame. But what you're doing is creating a virtual tag each frame which only exists at that point, so the tag is never executed. The moment you make it editable the tag can be executed and it works as expected.

    What you should do instead is attach an align to spline tag to your generator object in the OM. You can set the tag's values from within your plugin if you want to - e.g. when the user drops a spline into the link field, set that spline in the corresponding field in the tag. The tag will execute each frame, treat the generator's output as a null and move it along the spline.



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

    On 16/10/2012 at 13:51, xxxxxxxx wrote:

    Thanks for the explanation and tip Spedler!  Though the idea of attaching a tag to the generator object seems like it would work, I'm considering a cleaner way instead of relying on the tag to give me the path and animatable position.  After reading Rui Batista's recent post (Limit at 512), I may have enough info now to get a spline (dropped into a link field) and all of it's info (length, and any point at a designated percentage along the spline).  I'm using the animated null just to give me position data to animate objects before and after it along the spline with all the settings applied by the user.

    If you have any more tips on a spline matrix not already stated in Rui's post or within some other post or link, I would definitely appreciate it.



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

    On 16/10/2012 at 16:02, xxxxxxxx wrote:

    Here is my current solution edit for getting a null object linked to and controlled along a spline.:

        myData = op.GetDataInstance()
        offset = myData.GetReal(PERCENT_PATH) #PERCENT_PATH is the variable controlled by a slider.
        self.PathNull(op, pathLink, offset)
      
        def PathNull(self, op, pathLink, offset) :
            pNull = c4d.BaseObject(c4d.Onull) #Create new null
            if pathLink != None:
                real_spline = pathLink.GetRealSpline()
                sh = c4d.utils.SplineHelp()
                sh.InitSpline(real_spline,c4d.Vector(0),None,True,True,True,True)
                spLen = sh.GetSplineLength()
                pos = sh.GetPosition(offset)
                pNull.SetAbsPos(c4d.Vector(pos))
            return pNull
    

    Now it's time to go figure out the whole angle tangent bit.  I think I see Scott Ayers and Deep Shade explaining it over at CGTalk('Python - align to spline' post).


Log in to reply