예제 #1
0
def new_rig(object):
    doc.AddUndo(c4d.UNDOTYPE_CHANGE, object)

    #create a Python tag and attach it to the first joint
    pythontag = c4d.BaseTag(c4d.Tpython)
    object.InsertTag(pythontag)
    doc.AddUndo(c4d.UNDOTYPE_NEW, pythontag)
    #set the Python code inside the tag
    pythontag[c4d.TPYTHON_CODE] = pythontagcode

    #add a 'link' field to the python tag's user data -
    #this link will determine which previous bend to attach to
    userdata_link = c4d.GetCustomDataTypeDefault(c4d.DTYPE_BASELISTLINK)
    userdata_link[c4d.DESC_NAME] = "Previous Bend"
    pythontag.AddUserData(userdata_link)

    #add an offset field to the user data
    userdata_offset = c4d.GetCustomDataTypeDefault(c4d.DTYPE_REAL)
    userdata_offset[c4d.DESC_NAME] = "Offset"
    pythontag.AddUserData(userdata_offset)

    #add an offset field to the user data
    userdata_rotation = c4d.GetCustomDataTypeDefault(c4d.DTYPE_REAL)
    userdata_rotation[c4d.DESC_NAME] = "Rotation"
    userdata_rotation[c4d.DESC_UNIT] = c4d.DESC_UNIT_DEGREE
    userdata_rotation[c4d.DESC_STEP] = math.pi / 180.0
    pythontag.AddUserData(userdata_rotation)

    return pythontag
예제 #2
0
def main():
    doc = documents.GetActiveDocument()
    fileSaver = c4d.BaseObject(c4d.Onull)
    fileSaver.InsertBefore(doc.GetFirstObject())

    fileSaver.SetName("FileSaver")

    isOutputFbxFile = c4d.GetCustomDataTypeDefault(
        c4d.DTYPE_BOOL)  # Create default container
    isOutputFbxFile[c4d.DESC_NAME] = "isOutputFbxFile"
    isOutputFbxFileElement = fileSaver.AddUserData(isOutputFbxFile)
    fileSaver[isOutputFbxFileElement] = True

    isSaveOriginFile = c4d.GetCustomDataTypeDefault(
        c4d.DTYPE_BOOL)  # Create default container
    isSaveOriginFile[c4d.DESC_NAME] = "isSaveOriginFile"
    isSaveOriginFileElement = fileSaver.AddUserData(isSaveOriginFile)
    fileSaver[isSaveOriginFileElement] = True

    saveOutPath = c4d.GetCustomDataTypeDefault(
        c4d.DTYPE_FILENAME)  # Create default container
    saveOutPath[c4d.DESC_NAME] = "SaveOutPath"
    fileSaver.AddUserData(saveOutPath)

    c4d.EventAdd()
예제 #3
0
파일: DazRig.py 프로젝트: daz3d/DazToC4D
 def store_incorrect_orientations(self, joint):
     current_m = joint.GetMl()
     v1 = c4d.GetCustomDataTypeDefault(c4d.DTYPE_VECTOR)
     v1[c4d.DESC_NAME] = "V1 at Import"
     descId = joint.AddUserData(v1)
     joint[descId] = current_m.v1
     v2 = c4d.GetCustomDataTypeDefault(c4d.DTYPE_VECTOR)
     v2[c4d.DESC_NAME] = "V2 at Import"
     descId = joint.AddUserData(v2)
     joint[descId] = current_m.v2
     v3 = c4d.GetCustomDataTypeDefault(c4d.DTYPE_VECTOR)
     v3[c4d.DESC_NAME] = "V3 at Import"
     descId = joint.AddUserData(v3)
     joint[descId] = current_m.v3
예제 #4
0
    def String(self):

        bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_STRING)
        bc.SetInt32(c4d.DESC_ANIMATE, c4d.DESC_ANIMATE_ON)
        bc.SetBool(c4d.DESC_REMOVEABLE, False)

        return bc
예제 #5
0
파일: build_biped.py 프로젝트: satan/eve
    def build_finger_controllers(self):

        for dir in Directions:
            obj = doc.SearchObject('Root_Controls')

            for finger in IndexName:

                #userdata
                bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_REAL)
                bc[c4d.DESC_NAME] = dir + finger + 'Finger'
                bc[c4d.DESC_UNIT] = c4d.DESC_UNIT_DEGREE
                bc[c4d.DESC_MIN] = 0
                bc[c4d.DESC_MAX] = math.radians(360)
                bc[c4d.DESC_STEP] = math.radians(1)
                bc[c4d.DESC_CUSTOMGUI] = c4d.CUSTOMGUI_REALSLIDER
                element1 = obj.AddUserData(bc)
                obj[element1] = 0

                # Assign Tick
                bc = c4d.GetCustomDatatypeDefault(
                    c4d.DTYPE_BOOL)  # Create default container
                bc[c4d.DESC_NAME] = dir + finger + 'Controlled'
                # Rename the entry
                element2 = obj.AddUserData(bc)
                # Add userdata container
                obj[element2] = 0
예제 #6
0
    def Separator(self):

        bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_SEPARATOR)
        bc.SetInt32(c4d.DESC_CUSTOMGUI, c4d.DTYPE_SEPARATOR)
        bc.SetBool(c4d.DESC_SEPARATORLINE, True)

        return bc
예제 #7
0
    def Group(self):

        bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_GROUP)
        bc.SetString(c4d.DESC_NAME, "Levels")
        bc.SetInt32(c4d.DESC_COLUMNS, 1)
        bc.SetInt32(c4d.DESC_DEFAULT, 1)

        return bc
def createUserDataFloatSlider(obj, name, smin=0, smax=1, step=.01):
    bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_REAL)
    bc[c4d.DESC_CUSTOMGUI] = c4d.CUSTOMGUI_REALSLIDER
    bc[c4d.DESC_NAME] = name
    bc[c4d.DESC_UNIT] = c4d.DESC_UNIT_PERCENT
    bc[c4d.DESC_STEP] = step
    bc[c4d.DESC_MINSLIDER] = smin
    bc[c4d.DESC_MAXSLIDER] = smax

    element = obj.AddUserData(bc)
예제 #9
0
def new_rig(obj, cachetype):
    #create a Python tag and attach it to the selected tag's object
    pythontag = c4d.BaseTag(c4d.Tpython)

    #set the Python code inside the tag
    pythontag[
        c4d.TPYTHON_CODE] = copyright + pythontagcode + pythontagcode_dict[
            cachetype]

    #add userdata to the Python tag
    userdata = c4d.GetCustomDataTypeDefault(c4d.DTYPE_REAL)
    userdata[c4d.DESC_NAME] = "Frame"
    pythontag.AddUserData(userdata)
    pythontag[c4d.ID_USERDATA, 1] = 0.0

    #add an animation track to the userdata we just created
    track = c4d.CTrack(
        pythontag,
        c4d.DescID(c4d.DescLevel(c4d.ID_USERDATA, c4d.DTYPE_SUBCONTAINER, 0),
                   c4d.DescLevel(1, c4d.DTYPE_REAL, 0)))
    pythontag.InsertTrackSorted(track)
    #get the curve of our new track (we'll attach keyframes to this curve)
    curve = track.GetCurve()
    #make some keyframes, setting their time, value and curve
    key1 = c4d.CKey()
    key1.SetTime(curve, doc.GetMinTime())
    key1.SetValue(curve, doc.GetMinTime().Get() * doc.GetFps())
    key1.SetTimeRight(curve, c4d.BaseTime(0.5))

    key2 = c4d.CKey()
    key2.SetTime(curve, doc.GetMaxTime())
    key2.SetValue(curve, doc.GetMaxTime().Get() * doc.GetFps())
    key2.SetTimeLeft(curve, c4d.BaseTime(-0.5))

    #add the keyframes to the curve
    curve.InsertKey(key1)
    curve.InsertKey(key2)

    #set the Python tag's priority
    priority = c4d.PriorityData()
    priority.SetPriorityValue(c4d.PRIORITYVALUE_MODE, c4d.CYCLE_GENERATORS)
    priority.SetPriorityValue(c4d.PRIORITYVALUE_PRIORITY, -1)
    pythontag[c4d.EXPRESSION_PRIORITY] = priority

    #add the Python tag to the selected object, and add an undo
    doc.StartUndo()
    obj.InsertTag(pythontag)
    doc.AddUndo(c4d.UNDOTYPE_NEW, pythontag)
    doc.EndUndo()

    c4d.EventAdd(c4d.EVENT_FORCEREDRAW)

    print "Cache retimer successfully added to " + obj.GetName() + "!"
예제 #10
0
def new_rig(object):
    doc.AddUndo(c4d.UNDOTYPE_CHANGE, object)

    #create a Python tag and attach it to the object
    pythontag = c4d.BaseTag(c4d.Tpython)
    object.InsertTag(pythontag)
    doc.AddUndo(c4d.UNDOTYPE_NEW, pythontag)
    #set the Python code inside the tag
    pythontag[c4d.TPYTHON_CODE] = pythontagcode

    #add a description string and the width field to the tag's user data
    userdata = c4d.GetCustomDataTypeDefault(c4d.DTYPE_STATICTEXT)
    userdata[c4d.DESC_NAME] = "About"
    pythontag.AddUserData(userdata)
    pythontag[c4d.ID_USERDATA,
              1] = "Consistent Falloff Edge Width Tag - www.curiousanimal.tv"

    userdata = c4d.GetCustomDataTypeDefault(c4d.DTYPE_REAL)
    userdata[c4d.DESC_NAME] = "Falloff Width"
    pythontag.AddUserData(userdata)
    pythontag[c4d.ID_USERDATA, 2] = 20.0
예제 #11
0
def AddUserData(obj, name, val):
    # Create default container
    bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_BOOL)

    # Rename the entry
    bc[c4d.DESC_NAME] = name

    # set the default value
    element = obj.AddUserData(bc)
    obj[element] = val

    c4d.EventAdd()
예제 #12
0
    def RealSlider(self):

        bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_REAL)
        bc.SetInt32(c4d.DESC_CUSTOMGUI, c4d.CUSTOMGUI_REALSLIDER)
        bc.SetFloat(c4d.DESC_MIN, 0.0)
        bc.SetFloat(c4d.DESC_MAX, 10000.0)
        bc.SetFloat(c4d.DESC_MINSLIDER, 0.0)
        bc.SetFloat(c4d.DESC_MAXSLIDER, 10000.0)
        bc.SetFloat(c4d.DESC_STEP, 0.01)
        bc.SetInt32(c4d.DESC_UNIT, c4d.DESC_UNIT_FLOAT)
        bc.SetInt32(c4d.DESC_ANIMATE, c4d.DESC_ANIMATE_ON)
        bc.SetBool(c4d.DESC_REMOVEABLE, False)

        return bc
예제 #13
0
def AddUserData(obj, name, id, Dtye, step, min, max):
    bc = c4d.GetCustomDataTypeDefault(Dtye)  # Create default container
    bc[c4d.DESC_NAME] = name  # Rename the entry
    bc[c4d.DESC_MIN] = min  # Set min value
    bc[c4d.DESC_MAX] = max  # Set max value
    bc[c4d.DESC_STEP] = step  # Set step value
    bc[c4d.DESC_CUSTOMGUI] = 1000489  # Set float slider
    bc[c4d.DESC_MINSLIDER] = min  # Set min value slider
    bc[c4d.DESC_MAXSLIDER] = max  # Set man value slider

    parentGroup = c4d.DescID(c4d.DescLevel(c4d.ID_USERDATA),
                             c4d.DescLevel(1, c4d.DTYPE_GROUP,
                                           0))  # 1 is my secondary Group ID
    bc.SetData(c4d.DESC_PARENTGROUP, parentGroup)

    obj.SetUserDataContainer([c4d.ID_USERDATA, id],
                             bc)  # Add userdata container
예제 #14
0
 def create_custom_controller(self, morph_link, morph_name):
     morph_ctrl = self.find_ctrl_null()
     parent = self.add_path_group(morph_ctrl, morph_link)
     label_name = str(morph_link["Label"])
     min_morph = morph_link["Minimum"]
     max_morph = morph_link["Maximum"]
     real_data = c4d.GetCustomDataTypeDefault(c4d.DTYPE_REAL)
     real_data[c4d.DESC_NAME] = label_name
     real_data[c4d.DESC_CUSTOMGUI] = c4d.CUSTOMGUI_REALSLIDER
     real_data[c4d.DESC_UNIT] = c4d.DESC_UNIT_PERCENT
     real_data[c4d.DESC_MIN] = min_morph
     real_data[c4d.DESC_MAX] = max_morph
     real_data[c4d.DESC_MINSLIDER] = min_morph
     real_data[c4d.DESC_MAXSLIDER] = max_morph
     real_data[c4d.DESC_STEP] = 0.01
     real_data[c4d.DESC_PARENTGROUP] = parent
     slider_id = morph_ctrl.AddUserData(real_data)
     c4d.EventAdd()
     self.morph_ctrl_user_data[morph_name] = slider_id
     self.connect_morph_to_controller(slider_id, morph_name)
예제 #15
0
def main():
    obj = c4d.BaseObject(1025800)
    obj.SetName("Quantize")
    doc.InsertObject(obj)
    doc.SetSelection(obj)

    field = c4d.FieldList()
    solid = mo.FieldLayer(c4d.FLsolid)
    field.InsertLayer(solid)
    obj[c4d.FIELDS] = field

    rootGroup = c4d.GetCustomDataTypeDefault(c4d.DTYPE_GROUP)
    rootGroup[c4d.DESC_NAME] = "Parameters"
    rootGroup[c4d.DESC_SHORT_NAME] = "Parameters"
    rootGroup[c4d.DESC_TITLEBAR] = True
    rootGroup[c4d.DESC_GUIOPEN] = True
    rootGroup[c4d.DESC_COLUMNS] = 2
    rootGroup[c4d.DESC_PARENTGROUP] = c4d.DescID()
    root = obj.AddUserData(rootGroup)

    nameVec = ["Position step", "Scale step", "Angle step"]
    unitVec = [c4d.DESC_UNIT_METER, c4d.DESC_UNIT_REAL, c4d.DESC_UNIT_DEGREE]
    stepVec = [c4d.Vector(1), c4d.Vector(0.1), c4d.Vector(pi / 180)]
    minVec = [c4d.Vector(0.1), c4d.Vector(0.1), c4d.Vector(pi / 180)]
    defVec = [c4d.Vector(20), c4d.Vector(0.5), c4d.Vector(pi / 2)]
    nameBool = "On"
    defBool = True

    for i in xrange(3):
        dataAddVector(obj, nameVec[i], root, unitVec[i], stepVec[i], minVec[i],
                      defVec[i])
        dataAddBool(obj, nameBool, root, defBool)

    dataAddBool(obj, "Unify parameters", root, False)

    obj[c4d.OEPYTHON_MODE] = 1
    obj[c4d.
        OEPYTHON_STRING] = "import c4d\nfrom c4d.modules import mograph as mo\nfrom c4d import utils\n\ndef quantize(num, step):\n    return step*(num//step)\n\ndef vectorQuantize(vec, stepParams):\n    vecX = quantize(vec.x, stepParams.x)\n    vecY = quantize(vec.y, stepParams.y)\n    vecZ = quantize(vec.z, stepParams.z)\n    return c4d.Vector(vecX, vecY, vecZ)\n\ndef main():\n\n    unify = op[c4d.ID_USERDATA,8]\n    posStep = op[c4d.ID_USERDATA,2]\n    sclStep = op[c4d.ID_USERDATA,4]\n    angStep = op[c4d.ID_USERDATA,6]\n    posOn = op[c4d.ID_USERDATA,3]\n    sclOn = op[c4d.ID_USERDATA,5]\n    angOn = op[c4d.ID_USERDATA,7]\n\n    md = mo.GeGetMoData(op)\n    if md is None: return 1.0\n\n    cnt = md.GetCount()\n    marr = md.GetArray(c4d.MODATA_MATRIX)\n\n    if unify == True:\n        posStep = c4d.Vector(posStep.x)\n        sclStep = c4d.Vector(sclStep.x)\n        angStep = c4d.Vector(angStep.x)\n\n    for i in xrange(cnt):\n        m = marr[i]\n\n        if posOn == True:\n            pos = m.off\n            m.off = vectorQuantize(pos, posStep)\n\n        if sclOn == True:\n            scl = c4d.Vector(   m.v1.GetLength(),\n                                m.v2.GetLength(),\n                                m.v3.GetLength())\n            scl = vectorQuantize(scl, sclStep)\n            m.v1 = m.v1.GetNormalized()*scl.x\n            m.v2 = m.v2.GetNormalized()*scl.y\n            m.v3 = m.v3.GetNormalized()*scl.z\n\n        if angOn == True:\n            ang = utils.MatrixToHPB(m)\n            ang = vectorQuantize(ang, angStep)\n            pos = m.off\n            scl = c4d.Vector(   m.v1.GetLength(),\n                                m.v2.GetLength(),\n                                m.v3.GetLength())\n\n            m = utils.HPBToMatrix(ang)\n\n            m.off = pos\n            m.v1 = m.v1.GetNormalized() * scl.x\n            m.v2 = m.v2.GetNormalized() * scl.y\n            m.v3 = m.v3.GetNormalized() * scl.z\n\n        marr[i] = m\n\n    md.SetArray(c4d.MODATA_MATRIX, marr, True)" ""
def createUserDataLink(obj, name, val=None):
    bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_BASELISTLINK)
    bc[c4d.DESC_NAME] = name
    element = obj.AddUserData(bc)
    if val:
        obj[element] = val
def createUserDataFloat(obj, name, val=None):
    bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_LONG)
    bc[c4d.DESC_NAME] = name
    element = obj.AddUserData(bc)
    if val:
        obj[element] = val
예제 #18
0
nodemaster = xtag.GetNodeMaster()

# change Cloner -> Object -> Mode to "Grid Array"
cloner[c4d.ID_MG_MOTIONGENERATOR_MODE] = 3

# change Cloner -> Object -> Count(3) to (width, height, 1)
cloner[c4d.MG_GRID_RESOLUTION] = c4d.Vector(3, 3, 1)

# change Cloner -> Object -> Size(3) to (width * cubeX, height * cubeY, nonimportant value)
cloner[c4d.MG_GRID_SIZE] = c4d.Vector(width * cube[c4d.PRIM_CUBE_LEN].x,
                                      height * cube[c4d.PRIM_CUBE_LEN].y, 1)

## completely unnecessary code because C4D is messed up
## Need this code to access the "Object" Port on the actual Mograph Selection Tag in Xpresso
## this is because there is a bug in C4D and you cannot Add the Object port
bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_BASELISTLINK)
bc[c4d.DESC_NAME] = "obj"

## Make mograph selection tag
ms_tag = c4d.BaseTag(1021338)  # mograph selection tag
## Note, clone grid array y axis in inverted tile 0 is bottom-left
## Name the mograph selection tag by the color it represents : ie (255,255,255)
ms_tag.SetName("Mograph Selection Tag")
linkDataType = ms_tag.AddUserData(bc)
ms_tag[linkDataType] = ms_tag
# ms_tag.__setitem__((c4d.ID_USERDATA,1), ms_tag)
## Add tag to cloner
cloner.InsertTag(ms_tag)
# Add the MoSelection tag to XPresso
### XPRESSO
xnode_mograph_selection_tag = nodemaster.CreateNode(nodemaster.GetRoot(),
예제 #19
0
def AddUserDataGroup(obj, name):
    gc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_GROUP)
    gc[c4d.DESC_NAME] = name
    gc[c4d.DESC_PARENTGROUP] = c4d.DescID(0)
    obj.SetUserDataContainer([c4d.ID_USERDATA, 1], gc)
예제 #20
0
    def Button(self):

        bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_BUTTON)
        bc.SetInt32(c4d.DESC_CUSTOMGUI, c4d.CUSTOMGUI_BUTTON)

        return bc