On 30/08/2017 at 12:16, xxxxxxxx wrote:
Hello! I'm trying to make a script that generates two nulls for a spline and attaches spline's first and last point to those nulls.
In this topic Andreas tells to use CallButton() function, but I can't get this script to work.
https://plugincafe.maxon.net/topic/9445/12661_clicking-set-button-of-constraint-tag-from-pygen
The script is for Script Manager. You have to select spline object first and then run the script.
import c4d
def main() :
doc = c4d.documents.GetActiveDocument()
selo = doc.GetActiveObjects(0)
if len(selo) > 0:
for o in selo:
select_points = o.GetPointS()
pc = len(o.GetAllPoints())
select_points.DeselectAll()
select_points.Select(0)
nulla = c4d.BaseObject(c4d.Onull)
if nulla is None:
return
nulla[c4d.NULLOBJECT_DISPLAY] = 2
nulla.SetAbsPos(c4d.Vector(o.GetPoint(0)[0],o.GetPoint(0)[1],o.GetPoint(0)[2]))
nulla.SetName("A")
doc.InsertObject(nulla)
aTag = o.MakeTag(1018074)
aTag[c4d.HAIR_CONSTRAINTS_TAG_ANCHOR_LINK] = nulla
c4d.CallButton(aTag, c4d.HAIR_CONSTRAINTS_TAG_SET_ANCHOR)
select_points.DeselectAll()
select_points.Select(pc-1)
nullb = c4d.BaseObject(c4d.Onull)
if nullb is None:
return
nullb[c4d.NULLOBJECT_DISPLAY] = 2
nullb.SetAbsPos(c4d.Vector(o.GetPoint(pc-1)[0],o.GetPoint(pc-1)[1],o.GetPoint(pc-1)[2]))
nullb.SetName("B")
doc.InsertObject(nullb)
bTag = o.MakeTag(1018074)
bTag[c4d.HAIR_CONSTRAINTS_TAG_ANCHOR_LINK] = nullb
c4d.CallButton(bTag, c4d.HAIR_CONSTRAINTS_TAG_SET_ANCHOR)
o.InsertTag(c4d.BaseTag(1018068))
c4d.EventAdd()
if __name__ == "__main__":
main()
I made similar script that uses CallButton function with Spline Dynamics tag to set fixed points and it works. Weird...