Пример #1
0
def pickPositionMulti(message="Pick position",
                      logWarning=True,
                      minimum=1,
                      maximum=-1):

    pickedPositions = []

    while True:
        rtn = xsi.PickPosition(message, message)
        if not rtn.Value("ButtonPressed"):
            break
        v = XSIMath.CreateVector3(rtn("PosX"), rtn("PosY"), rtn("PosZ"))
        pickedPositions.append(v)
        if addHelpers:
            null = pri.addNullFromPos(xsi.ActiveSceneRoot, "temp_0", v)
            pri.setNullDisplay(null, 1, .5, 2, 0, 0, 0, .5, .5, .5, [0, 1, 0])
            helpers.Add(null)
        if maximum > 0 and len(pickedPositions) >= maximum:
            break

    if len(pickedPositions) < minimum:
        if logWarning:
            xsi.LogMessage("Pick Session Aborded", c.siWarning)
        return False

    return pickedPositions
Пример #2
0
def popWindow(prop, width=100, height=100, posX=None, posY=None):

    if not prop:
        xsi.LogMessage("Can't find property", c.siError)
        return False

    resolution = scr.getResolution()

    if not posX:
        posX = int((resolution[0] / 2.0) - (width / 2.0))
    elif posX < 0:
        posX = int(resolution[0] + posX)

    if not posY:
        posY = int((resolution[1] / 2.0) - (height / 2.0))
    elif posY < 0:
        posX = int(resolution[1] + posY)

    view = xsi.Desktop.ActiveLayout.CreateView("Property Panel", "MyProperty")

    view.BeginEdit()

    view.Move(posX, posY)
    view.Resize(width, height)
    view.SetAttributeValue("targetcontent", prop.FullName)

    view.EndEdit()
Пример #3
0
def XSIUnloadPlugin(in_reg):

    strPluginName = in_reg.Name
    xsi.LogMessage(
        str(strPluginName) + str(" has been unloaded."), c.siVerbose)

    return True
Пример #4
0
def addExpression(param, definition):

    if not param.Animatable:
        xsi.LogMessage(param.FullName + " is not animatable", c.siWarning)
        return False

    definition = str(definition)
    exp = param.AddExpression(definition)

    if not param.IsAnimated(c.siExpressionSource):
        xsi.LogMessage("Invalid Expression on " + param.FullName + ": \r\n" + definition, c.siWarning)
        return False
    else:
        param.SetLock(c.siLockLevelAll)

    return exp
Пример #5
0
def gear_selectionSets_selectMembers_OnClicked():
    oList = PPG.pSetsList.Value.split(";")[0]
    for x in PPG.pSetsList.Value.split(";")[1:]:
        oList = oList + "," + x
    if len(oList) <= 1:
        xsi.LogMessage("Select a Set before selet items", 4)
    else:

        xsi.SelectMembers(oList, "", "")
Пример #6
0
def setRotOrder(obj, s="XYZ"):

    a = ["XYZ", "XZY", "YXZ", "YZX", "ZXY", "ZYX"]

    if s not in a:
        xsi.LogMessage("Invalid Rotorder : " + s, c.siError)
        return False

    obj.Kinematics.Local.Parameters("rotorder").Value = a.index(s)
Пример #7
0
def pickPosition(message="Pick position", logWarning=True):

    rtn = xsi.PickPosition(message, message)

    if rtn("ButtonPressed") == 0:
        if logWarning:
            xsi.LogMessage("Pick Session Aborded", c.siWarning)
        return False

    position = XSIMath.CreateVector3(rtn("PosX"), rtn("PosY"), rtn("PosZ"))
    return position
Пример #8
0
def pickSession(objectFilter=c.siGenericObjectFilter,
                message="Pick Object",
                logWarning=True):

    rtn = xsi.PickElement(objectFilter, message, message)

    if not rtn.Value("ButtonPressed"):
        if logWarning:
            xsi.LogMessage("Pick Session Aborded", c.siWarning)
        return False

    return rtn.Value("PickedElement")
Пример #9
0
def getSymmetryMap(obj, logWarning=True):

    allSymmetryMaps = xsi.FindObjects(
        None, "{2EBA6DE4-B7EA-4877-80FE-FC768F32729F}")

    for map in allSymmetryMaps:
        if map.Parent3DObject.IsEqualTo(obj):
            return map

    if logWarning:
        xsi.LogMessage("No Symmetry Map for " + obj.FullName, c.siWarning)

    return False
Пример #10
0
Файл: ppg.py Проект: jeanim/gear
    def popItem(self, itemToPop):

        index = None
        for i, item in enumerate(self.items):
            if item == itemToPop:
                index = i
                break

        if index is None:
            xsi.LogMessage("item doesn't belong to LayouCompound", c.siWarning)
            return

        self.items.pop[index]
Пример #11
0
    def log(self, caption=None, statusText=None, increment=False):

        self.bar.Visible = self.showBar

        if caption:
            self.bar.Caption = caption
        if statusText:
            self.bar.StatusText = statusText

        if self.showLog:
            s = " - ".join([s for s in [caption, statusText] if s is not None])
            xsi.LogMessage(s, c.siComment)

        if increment:
            self.increment()
Пример #12
0
def gear_selectionSets_deleteSet_OnClicked():
    from win32com.client import constants as c

    oList = PPG.pSetsList.Value.split(";")[0]
    for x in PPG.pSetsList.Value.split(";")[1:]:
        oList = oList + "," + x
    if len(oList) <= 1:
        xsi.LogMessage("Select a Set before Delete it", 4)
    else:
        oReturn = XSIUIToolkit.MsgBox(
            "Are you sure? Want to delete selected sets?", c.siMsgYesNo)
        if oReturn:
            xsi.DeleteObj(oList)
            gear_selectionSets_OnInit()
        else:
            lm("You cancel the delete operation.")
Пример #13
0
def gear_selectionSets_createSet_OnClicked():

    oSel = xsi.Selection
    oRoot = xsi.ActiveSceneRoot
    oModel = oSel[0].Model

    oDescription = xsi.XSIInputBox("Group Description", "Description",
                                   "NoDescription")
    if oDescription.isalnum():
        if oModel.ModelKind:
            oRoot.AddGroup(oSel,
                           "selSet_" + oDescription + "_grp_" + oModel.Name)
        else:
            oModel.AddGroup(oSel, "selSet_" + oDescription + "_grp")
        gear_selectionSets_OnInit()
    else:
        xsi.LogMessage("Description not valid. Creation aborted!!!!", 4)
Пример #14
0
def gear_selectionSets_outObject_OnClicked():
    from win32com.client import constants as c
    oList = PPG.pSetsList.Value.split(";")[0]

    if len(oList) <= 1:
        xsi.LogMessage(
            "Select one Set before remove objects to it, and Only one set at the time",
            4)
    else:
        oReturn = XSIUIToolkit.MsgBox(
            "REMOVE Selected objects to first selected Set?, Remember if you have more than one set, only the first one will be used. ",
            c.siMsgYesNo)
        if oReturn:
            xsi.RemoveFromGroup(oList)

        else:
            lm("You cancel the adding operation.", 4)
Пример #15
0
def gear_ExportGuide_Execute():

    if not xsi.Selection.Count:
        xsi.LogMessage("Select an object from the guide to export", c.siError)
        return

    if xsi.Selection(0).Type == "#model":
        model = xsi.Selection(0)
    else:
        model = xsi.Selection(0).Model

    options = model.Properties("options")
    if not options:
        gear.log("Invalid selection", gear.sev_error)
        return

    path = uit.fileBrowser("Export Guide", xsi.ActiveProject2.OriginPath, model.Name, ["xml"], True)
    if not path:
        return

    rg = RigGuide()
    rg.exportToXml(xsi.Selection(0), path)
Пример #16
0
def pickSessionMulti(objectFilter=c.siGenericObjectFilter,
                     message="Pick Object",
                     logWarning=True,
                     minimum=1,
                     maximum=-1):

    pickedObjects = []

    while True:
        rtn = xsi.PickElement(objectFilter, message, message)
        if not rtn.Value("ButtonPressed"):
            break
        pickedObjects.append(rtn.Value("PickedElement"))
        if maximum > 0 and len(pickedObjects) >= maximum:
            break

    if len(pickedObjects) < minimum:
        if logWarning:
            xsi.LogMessage("Pick Session Aborded", c.siWarning)
        return False

    return pickedObjects
Пример #17
0
def gear_GuideToolsUI_export_OnClicked():

    if not xsi.Selection.Count:
        xsi.LogMessage("Select an object from the guide to export", c.siError)
        return

    if xsi.Selection(0).Type == "#model":
        model = xsi.Selection(0)
    else:
        model = xsi.Selection(0).Model

    options = model.Properties("options")
    if not options:
        gear.log("Invalid selection", gear.sev_error)
        return

    path = uit.fileBrowser("Export Guide", TEMPLATE_PATH, model.Name, ["xml"], True)
    if not path:
        return

    rg = RigGuide()
    rg.exportToXml(xsi.Selection(0), path)

    gear_GuideToolsUI_OnInit()
Пример #18
0
    def addObjects(self):

        self.normal = self.getNormalFromPos(self.guide.apos)

        self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1])
        self.length1 = vec.getDistance(self.guide.apos[1], self.guide.apos[2])
        self.length2 = vec.getDistance(self.guide.apos[2], self.guide.apos[3])

        # FK Controlers ------------------------------------
        t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1],
                                      self.normal, "xz", self.negate)
        self.fk0_ctl = self.addCtl(self.root,
                                   "fk0_ctl",
                                   t,
                                   self.color_fk,
                                   "cube",
                                   h=self.size * .1,
                                   w=1,
                                   d=self.size * .1,
                                   po=XSIMath.CreateVector3(
                                       .5 * self.n_factor, 0, 0))
        self.fk0_ctl.Parameters("SclX").Value = self.length0
        xsi.SetNeutralPose(self.fk0_ctl)
        par.setKeyableParameters(self.fk0_ctl)
        par.addLocalParamToCollection(self.inv_params, self.fk0_ctl,
                                      ["posx", "posy", "posz"])

        t = tra.getTransformLookingAt(self.guide.apos[1], self.guide.apos[2],
                                      self.normal, "xz", self.negate)
        self.fk1_ctl = self.addCtl(self.fk0_ctl,
                                   "fk1_ctl",
                                   t,
                                   self.color_fk,
                                   "cube",
                                   h=self.size * .1,
                                   w=1,
                                   d=self.size * .1,
                                   po=XSIMath.CreateVector3(
                                       .5 * self.n_factor, 0, 0))
        self.fk1_ctl.Parameters("SclX").Value = self.length1 / self.length0
        xsi.SetNeutralPose(self.fk1_ctl, c.siST)
        par.setKeyableParameters(self.fk1_ctl)
        par.addLocalParamToCollection(self.inv_params, self.fk1_ctl,
                                      ["posx", "posy", "posz"])

        t = tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[3],
                                      self.normal, "xz", self.negate)
        self.fk2_ctl = self.addCtl(self.fk1_ctl,
                                   "fk2_ctl",
                                   t,
                                   self.color_fk,
                                   "cube",
                                   h=self.size * .1,
                                   w=self.length2,
                                   d=self.size * .1,
                                   po=XSIMath.CreateVector3(
                                       self.length2 * .5 * self.n_factor, 0,
                                       0))
        xsi.SetNeutralPose(self.fk2_ctl, c.siST)
        par.setKeyableParameters(self.fk2_ctl)
        par.addLocalParamToCollection(self.inv_params, self.fk2_ctl,
                                      ["posx", "posy", "posz"])

        # IK Controlers ------------------------------------
        self.ik_cns = pri.addNullFromPos(self.root, self.getName("ik_cns"),
                                         self.guide.apos[2], self.size * .02)
        self.addToGroup(self.ik_cns, "hidden")

        self.ikcns_ctl = self.addCtl(self.ik_cns,
                                     "ikcns_ctl",
                                     self.ik_cns.Kinematics.Global.Transform,
                                     self.color_ik,
                                     "null",
                                     h=self.size * .2)
        par.setKeyableParameters(self.ikcns_ctl)
        par.addLocalParamToCollection(self.inv_params, self.ikcns_ctl,
                                      ["posx", "rotx", "rotz"])

        t = tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[3],
                                      self.x_axis, "zx", False)
        self.ik_ctl = self.addCtl(self.ikcns_ctl,
                                  "ik_ctl",
                                  t,
                                  self.color_ik,
                                  "cube",
                                  h=self.size * .12,
                                  w=self.length2,
                                  d=self.size * .12,
                                  po=XSIMath.CreateVector3(
                                      0, 0, self.length2 * .5))
        self.addToCtlGroup(self.ik_ctl)
        par.setKeyableParameters(self.ik_ctl)
        par.addLocalParamToCollection(self.inv_params, self.ik_ctl, ["posx"])

        # IK and FK references
        self.ik_ref = pri.addNull(self.ik_ctl, self.getName("ik_ref"),
                                  self.ik_ctl.Kinematics.Global.Transform,
                                  self.size * .1)
        self.addToGroup(self.ik_ref, "hidden")

        self.fk_ref = pri.addNull(self.fk2_ctl, self.getName("fk_ref"),
                                  self.ik_ref.Kinematics.Global.Transform,
                                  self.size * .1)
        self.addToGroup(self.fk_ref, "hidden")

        v = XSIMath.CreateVector3()
        v.Sub(self.guide.apos[2], self.guide.apos[0])
        v.Cross(self.normal, v)
        v.NormalizeInPlace()
        v.ScaleInPlace(self.size * .5)
        v.AddInPlace(self.guide.apos[1])
        self.upv_cns = pri.addNullFromPos(self.root, self.getName("upv_cns"),
                                          v, self.size * .02)
        self.addToGroup(self.upv_cns, "hidden")

        self.upv_ctl = self.addCtl(self.upv_cns,
                                   "upv_ctl",
                                   self.upv_cns.Kinematics.Global.Transform,
                                   self.color_ik,
                                   "leash",
                                   h=self.size * .05,
                                   ap=self.guide.apos[1])
        par.setKeyableParameters(self.upv_ctl, self.t_params)
        par.addLocalParamToCollection(self.inv_params, self.upv_ctl, ["posx"])

        # Chain --------------------------------------------
        self.bone0 = pri.addNull(self.root, self.getName("0_jnt"),
                                 self.fk0_ctl.Kinematics.Global.Transform)
        pri.setNullDisplay(self.bone0, 0, 1, 4, self.n_factor * .5, 0, 0, 1,
                           self.size * .01, self.size * .01)
        self.bone0.Kinematics.Global.Parameters("sclx").Value = self.length0
        self.bone1 = pri.addNull(self.bone0, self.getName("1_jnt"),
                                 self.fk1_ctl.Kinematics.Global.Transform)
        pri.setNullDisplay(self.bone1, 0, 1, 4, self.n_factor * .5, 0, 0, 1,
                           self.size * .01, self.size * .01)
        self.bone1.Kinematics.Global.Parameters("sclx").Value = self.length1

        self.ctrn_loc = pri.addNullFromPos(self.bone0,
                                           self.getName("ctrn_loc"),
                                           self.guide.apos[1], self.size * .05)
        self.eff_loc = pri.addNullFromPos(self.root, self.getName("eff_loc"),
                                          self.guide.apos[2], self.size * .05)

        x = XSIMath.CreateVector3(0, -1, 0)
        x.MulByRotationInPlace(
            self.eff_loc.Kinematics.Global.Transform.Rotation)
        import gear.xsi.log as log
        xsi.LogMessage("HEEEEYYYYYY")
        log.logVector(self.normal)
        z = XSIMath.CreateVector3(self.normal.X, self.normal.Y, self.normal.Z)
        z.MulByRotationInPlace(
            self.eff_loc.Kinematics.Global.Transform.Rotation)
        xsi.LogMessage("POUET")
        xsi.LogMessage("POUET2")

        r = tra.getRotationFromAxis(x, z, "xz", self.negate)
        t = self.ik_ctl.Kinematics.Global.Transform
        t.SetRotation(r)

        self.tws_ref = pri.addNull(self.eff_loc, self.getName("tws_ref"), t,
                                   self.size * .1)

        self.addToGroup([
            self.bone0, self.bone1, self.ctrn_loc, self.eff_loc, self.tws_ref
        ], "hidden")

        # Mid Controler ------------------------------------
        self.mid_ctl = self.addCtl(self.ctrn_loc,
                                   "mid_ctl",
                                   self.ctrn_loc.Kinematics.Global.Transform,
                                   self.color_ik,
                                   "sphere",
                                   h=self.size * .2)
        par.addLocalParamToCollection(self.inv_params, self.mid_ctl,
                                      ["posx", "posy", "posz"])

        # Twist references ---------------------------------
        t = tra.getFilteredTransform(self.fk0_ctl.Kinematics.Global.Transform,
                                     True, True, False)
        self.tws0_loc = pri.addNull(self.root, self.getName("tws0_loc"), t,
                                    self.size * .05)
        self.tws0_rot = pri.addNull(self.tws0_loc, self.getName("tws0_rot"), t)
        pri.setNullDisplay(self.tws0_rot, 0, self.size * .05, 2, 0, 0, 0,
                           self.size * .01)

        self.tws1_loc = pri.addNull(self.ctrn_loc, self.getName("tws1_loc"),
                                    self.ctrn_loc.Kinematics.Global.Transform,
                                    self.size * .05)
        self.tws1_rot = pri.addNull(self.tws1_loc, self.getName("tws1_rot"),
                                    self.ctrn_loc.Kinematics.Global.Transform)
        pri.setNullDisplay(self.tws1_rot, 0, self.size * .05, 2, 0, 0, 0,
                           self.size * .01)

        t = tra.getFilteredTransform(self.bone1.Kinematics.Global.Transform,
                                     True, True, False)
        t.SetTranslation(self.guide.apos[2])
        self.tws2_loc = pri.addNull(self.bone1, self.getName("tws2_loc"), t,
                                    self.size * .05)
        self.tws2_rot = pri.addNull(self.tws2_loc, self.getName("tws2_rot"), t)
        self.tws2_rot.Kinematics.Global.Parameters("SclX").Value = .001
        pri.setNullDisplay(self.tws2_rot, 0, self.size * .05, 2, 0, 0, 0,
                           self.size * .01)

        self.addToGroup([
            self.tws0_loc, self.tws0_rot, self.tws1_loc, self.tws1_rot,
            self.tws2_loc, self.tws2_rot
        ], "hidden")

        # End reference ------------------------------------
        t = tra.getFilteredTransform(self.tws2_rot.Kinematics.Global.Transform,
                                     True, True, False)
        self.end_ref = pri.addNull(self.tws2_rot, self.getName("end_ref"), t,
                                   self.size * .2)
        self.addToGroup(self.end_ref, "hidden")
        self.addShadow(self.end_ref, "end")

        # Divisions ----------------------------------------
        # We have at least one division at the start, the end and one for the elbow.
        self.divisions = self.settings["div0"] + self.settings["div1"] + 3

        self.div_cns = []
        for i in range(self.divisions):

            div_cns = pri.addNull(self.tws0_loc, self.getName("div%s_loc" % i),
                                  XSIMath.CreateTransform())
            pri.setNullDisplay(div_cns, 1, self.size * .02, 10, 0, 0, 0, 1, 1,
                               2)
            self.addToGroup(div_cns, "hidden")

            self.div_cns.append(div_cns)

            self.addShadow(div_cns, i)
Пример #19
0
 def logTime(self, message=""):
     xsi.LogMessage(message + " : " + self.getTime(), c.siComment)