On 23/10/2014 at 13:02, xxxxxxxx wrote:
Hi,
I have a problem when calling my function IterateHierarchy.
It raises the NameError: global name 'IterateHierarchy' is not defined
I've looked at many topics to fix this problem;
I came upon this: Your function should be defined before you call it.
But the weird thing for me is, that it is defined before I call it. This makes me kinda confused.
Here is my code:
import c4d
import os
import sys
from c4d import gui, plugins, bitmaps
PLUGIN_ID = 1000002
BPBUTTON = 1002
CROBUTTON = 1011
askedforbase = False
control = False
class ControlPoseHandler(plugins.TagData) :
pass
def GetNextObject(op) :
if op == None:
return None
if op.GetDown() :
return op.GetDown()
while not op.GetNext() and op.GetUp() :
op = op.GetUp()
return op.GetNext()
def IterateHierarchy(op) :
if op is None:
return
count = 0
while op:
count += 1
print op.GetName()
op = GetNextObject(op)
return count
def Init(self, node) :
tag = node
data = tag.GetDataInstance()
global askedforbase
if askedforbase == False:
global askbase
askbase = gui.QuestionDialog("Are you sure this is the base pose?")
askedforbase = True
global doc
doc = c4d.documents.GetActiveDocument()
tagobject = tag.GetObject()
global controlobject
controlobject = doc.SearchObject("Control_Goal")
global baseposition
baseposition = controlobject.GetAbsPos()
tagobject = tag.GetObject()
count = IterateHierarchy(tagobject)
return True
def Execute(self, tag, doc, op, bt, priority, flags) :
data = tag.GetDataInstance()
if askbase == False:
tag.Remove()
print "The askedforbase is: ", askedforbase
return True
def Message(self, node, type, data) :
if type == c4d.MSG_DESCRIPTION_COMMAND:
if data['id'][0].id == BPBUTTON:
doc.StartUndo()
doc.AddUndo(c4d.UNDOTYPE_CHANGE, controlobject)
controlobject.SetAbsPos(baseposition)
doc.EndUndo()
return True
if __name__ == "__main__":
bmp = bitmaps.BaseBitmap()
dir, file = os.path.split(__file__)
bitmapfile = os.path.join(dir, "res", "ControlPoseHandler.tif")
result = bmp.InitWith(bitmapfile)
if not result:
print "Error loading bitmap!"
okyn = plugins.RegisterTagPlugin(id = PLUGIN_ID, str = "ControlPoseHandler", info = c4d.TAG_VISIBLE | c4d.TAG_EXPRESSION, g = ControlPoseHandler, description = "ControlPoseHandler", icon = bmp)
print "ControlPoseHandler initialized", okyn
Thanks for your help!!