Пример #1
0
    def writeToGroup(self, group):
        animset = sfm.GetCurrentAnimationSet()
        shot = sfm.GetCurrentShot()
        rootDag = sfmUtils.FindFirstDag([
            "RootTransform", "rootTransform", "roottransform", "Roottransform"
        ])
        suffix = self.createSuffix(self.target)

        groupAddStringAttribute(group, name_targetname, self.target)

        group.SetValue(name_boxsize, self.boxsize)
        group.SetValue(name_boxcenter, self.boxcenter)
        group.SetValue(name_margin, float(self.margin))
        group.SetValue(name_mass, float(self.mass))

        self.handle = sfm.CreateRigHandle(name_handle + suffix,
                                          group=group.GetName())

        #position the handle at the box center
        bonedag = sfm.FindDag(self.target)
        CenterTransform = PosQuatToTransform(self.boxcenter,
                                             vs.Quaternion(0, 0, 0, 1))
        ResultTransform = vs.matrix3x4_t()
        vs.ConcatTransforms(bonedag.GetAbsTransform(), CenterTransform,
                            ResultTransform)
        self.handle.SetAbsTransform(ResultTransform)
        sfmUtils.Parent(self.handle, rootDag)
        sfm.ParentConstraint(name_handle + suffix, self.target, mo=True)

        self.force = sfm.CreateRigHandle(name_force + suffix,
                                         group=group.GetName())
        self.force.SetAbsTransform(self.handle.GetAbsTransform())
        sfmUtils.Parent(self.force, self.handle)

        shapeval = 0
        if self.shape == "sphere":
            shapeval = 1
        groupCreateControlledValue(group, name_shape + suffix, shapeval,
                                   animset, shot)

        kineval = 0
        if self.mass == 0:
            kineval = 1
        groupCreateControlledValue(group, name_kinematic + suffix, kineval,
                                   animset, shot)

        groupCreateControlledValue(group, name_bounce + suffix, self.bounce,
                                   animset, shot)
        groupCreateControlledValue(group, name_friction + suffix,
                                   self.friction, animset, shot)
        groupCreateControlledValue(group, name_lindamp + suffix, self.lindamp,
                                   animset, shot)
        groupCreateControlledValue(group, name_rotdamp + suffix, self.rotdamp,
                                   animset, shot)
Пример #2
0
    def writeToGroup(self, group):
        animset = sfm.GetCurrentAnimationSet()
        shot = sfm.GetCurrentShot()
        rootDag = sfmUtils.FindFirstDag([
            "RootTransform", "rootTransform", "roottransform", "Roottransform"
        ])
        suffix = self.createSuffix(self.constype, self.bodya, self.bodyb)

        groupAddStringAttribute(group, name_typename, self.constype)
        groupAddStringAttribute(group, name_bodya, self.bodya)
        groupAddStringAttribute(group, name_bodyb, self.bodyb)

        self.handle = sfm.CreateRigHandle(name_handle + suffix,
                                          group=group.GetName())

        #position the handle at bodya plus some offset
        daga = sfm.FindDag(self.bodya)
        dagb = sfm.FindDag(self.bodyb)
        ResultTransform = vs.matrix3x4_t()
        if (self.pos is None):
            #placing pos at the same spot as bodyb is usually a good guess
            ResultTransform = PosQuatToTransform(dagb.GetAbsPosition(),
                                                 daga.GetAbsOrientation())
        else:
            OffsetTransform = PosQuatToTransform(self.pos,
                                                 vs.Quaternion(0, 0, 0, 1))
            vs.ConcatTransforms(daga.GetAbsTransform(), OffsetTransform,
                                ResultTransform)
        #end
        self.handle.SetAbsTransform(ResultTransform)
        sfmUtils.Parent(self.handle, daga)

        if (self.constype == "cone"):
            groupCreateControlledValue(group, name_rotx + suffix,
                                       self.rotx / 180.0, animset, shot)
            groupCreateControlledValue(group, name_roty + suffix,
                                       self.roty / 180.0, animset, shot)
            groupCreateControlledValue(group, name_twist + suffix,
                                       self.twist / 180.0, animset, shot)
Пример #3
0
    def readFromGroup(self, group, time):
        animset = group.FindAnimationSet(True)
        shot = sfm.GetCurrentShot()
        self.boneprefix = group.GetValue(name_boneprefix)
        suffix = self.createSuffix(animset.GetName(), self.boneprefix)

        self.daglist = list()

        for bone in group.GetValue(name_nodelist):
            dag = sfm.FindDag(animset.GetName() + ":" +
                              bone.GetValue(name_nodename))
            pos, quat = TransformToPosQuat(GetAbsTransformAtTime(dag, time))
            self.nodelist.append((bone.GetValue(name_nodename),
                                  bone.GetValue(name_nodemass), pos))
            self.daglist.append(dag)
        #end
        for link in group.GetValue(name_linklist):
            self.linklist.append((link.GetValue("a"), link.GetValue("b")))
        #end
        for face in group.GetValue(name_facelist):
            self.facelist.append((face.GetValue("a"), face.GetValue("b"),
                                  face.GetValue("c"), face.GetValue("d")))
        #end

        self.margin = group.GetValue(name_margin)
        self.mass = group.GetValue(name_mass)
        self.stretch = groupGetControlledValueAtTime(group,
                                                     name_stretch + suffix,
                                                     time)
        self.shear = groupGetControlledValueAtTime(group, name_shear + suffix,
                                                   time)
        self.bend = groupGetControlledValueAtTime(group, name_bend + suffix,
                                                  time)
        self.damp = groupGetControlledValueAtTime(group, name_lindamp + suffix,
                                                  time)
        self.friction = groupGetControlledValueAtTime(group,
                                                      name_friction + suffix,
                                                      time)

    #end


#end
Пример #4
0
def WriteFile(fileName, scale):
    shot = sfm.GetCurrentShot()
    animSet = sfm.GetCurrentAnimationSet()

    dag = sfm.FindDag("transform")

    if dag == None:
        SetError("Selected animation set does not have transform DAG node.")
        return False

    curFrame = 0
    fps = sfmApp.GetFramesPerSecond()
    frameTime = fps
    if not 0 == frameTime:
        frameTime = 1.0 / float(frameTime)
    frameCount = shot.GetDuration().CurrentFrame(vs.DmeFramerate_t(fps))

    file = open(fileName, 'wb')
    if not file:
        SetError('Could not open file ' + fileName + ' for writing')
        return False

    oldFrame = sfm.GetCurrentFrame()
    try:
        WriteHeader(file, frameCount, frameTime)

        while curFrame < frameCount:
            sfm.SetCurrentFrame(curFrame)

            loc = sfm.GetPosition("transform", space="World")
            rot = sfm.GetRotation("transform", space="World")

            X = -loc[1] * scale
            Y = loc[2] * scale
            Z = -loc[0] * scale

            ZR = -rot[0]  #*RAD2DEG
            XR = -rot[1]  #*RAD2DEG
            YR = rot[2]  #*RAD2DEG

            ZR = LimDeg(ZR)
            XR = LimDeg(XR)
            YR = LimDeg(YR)

            S = "" + FloatToBvhString(X) + " " + FloatToBvhString(
                Y) + " " + FloatToBvhString(Z) + " " + FloatToBvhString(
                    ZR) + " " + FloatToBvhString(XR) + " " + FloatToBvhString(
                        YR) + "\n"
            file.write(S)

            curFrame += 1

    finally:
        file.close()
        sfm.SetCurrentFrame(oldFrame)

    if not curFrame == frameCount:
        SetError("Could not write all frames.")
        return False

    return True