Set Axis to Center via Python



  • On 22/06/2015 at 03:59, xxxxxxxx wrote:

    Hello, 
    I would like to set axis to center of an object. And as I will use it in xpresso-python node, it should only fire for once. Position will be 0,0,0. I tried script below, please help.

    import c4d
    from c4d import Vector as v

    def setAxis(obj) :

    size = obj.GetRad()
        position = obj.GetMp() + obj.GetAbsPos()
        if obj is None or not obj.CheckType(c4d.Opoint) : return False
        oldm   = obj.GetMg()
        points = obj.GetAllPoints()
        pcount = obj.GetPointCount()
        doc.StartUndo()
        doc.AddUndo(c4d.UNDOTYPE_CHANGE, obj)
        obj.SetAbsRot(v(0))
        obj.SetAbsPos(v(0))
        obj.Message(c4d.MSG_UPDATE)
        
        newm    = obj.GetMg()
        newm.off = position-size/2
        newm.v1 = newm.v1.GetNormalized()
        newm.v2 = newm.v2.GetNormalized()
        newm.v3 = newm.v3.GetNormalized()
        
        for p in xrange(pcount) :
            obj.SetPoint(p,newm*oldm*points
    )
            c4d.EventAdd()
            
        obj.Message(c4d.MSG_UPDATE)
        c4d.EventAdd()
        doc.EndUndo()

    def main() :
        
        global Source
        
        if Source.CheckType(c4d.Opoint) :
            setAxis(Source)



  • On 29/06/2015 at 02:38, xxxxxxxx wrote:

    Hello,

    is this thread on the same topic as in your other thread?

    If you want to execute a python script only once you can edit and execute a script from the Script Manager. This allows you to run scripts that can edit the scene and it's objects as desired.

    A Python Xpresso Node should only be used for logic operations etc. and not to edit the current scene since the node will be executed many times.

    Best wishes,
    Sebastian



  • On 03/07/2015 at 09:40, xxxxxxxx wrote:

    Hello grasycho,

    was your question answered?

    Best wishes,
    Sebastian


Log in to reply