Exemplo n.º 1
0
def getLatticePoints(latticePath):

    selectionList = om.MSelectionList()

    latticeFn = oma.MFnLattice(latticePath)

    utilS = om.MScriptUtil()
    SintPtr = utilS.asUintPtr()

    utilT = om.MScriptUtil()
    TintPtr = utilT.asUintPtr()

    utilU = om.MScriptUtil()
    UintPtr = utilU.asUintPtr()

    latticeFn.getDivisions(SintPtr, TintPtr, UintPtr)

    SVal = utilS.getUint(SintPtr)
    TVal = utilT.getUint(TintPtr)
    UVal = utilU.getUint(UintPtr)

    for s in range(SVal):

        for u in range(UVal):

            for t in range(TVal):

                latticeShapeString = latticePath.fullPathName()
                component = getMObjectComponent('%s.pt[%i][%i][%i]' %
                                                (latticeShapeString, s, t, u))
                selectionList.add(latticePath, component, False)

    return selectionList
Exemplo n.º 2
0
    def unpackLattice(self, inputHandle):
        self.inputObject = inputHandle.data()

        self.shapeUtils = OpenMayaAnim.MFnLattice(self.inputObject)

        self.collectFfdSettings(self.shapeUtils)

        pointArray = self.collectFFdPoints()

        self.writeArray(pointArray)
Exemplo n.º 3
0
    def compute_outLattice(self, Data, InputData):
        widthA_Val = Data.inputValue(self.widthA).asDouble()
        widthB_Val = Data.inputValue(self.widthB).asDouble()
        uDensity_Val = Data.inputValue(self.uDensity).asShort()
        vDensity_Val = Data.inputValue(self.vDensity).asShort()

        surfMFn.setObject(InputData)
        surfData = self.getPatchInfos(surfMFn)
        surfMFn.getCVs(pointList, OpenMaya.MSpace.kObject)
        uCv = surfData[0]
        vCv = surfData[1]
        path_knotsU = surfData[6]
        path_knotsV = surfData[7]
        startU = surfData[8]
        endU = surfData[9]
        startV = surfData[10]
        endV = surfData[11]

        uRatio = (endU - startU) / (uCv * uDensity_Val * 1.0)
        vRatio = (endV - startV) / (vCv * vDensity_Val * 1.0)
        uRange = []
        vRange = []
        for k in xrange(uCv * uDensity_Val + 1):
            uRange.append(k * uRatio)
        for k in xrange(vCv * vDensity_Val + 1):
            vRange.append(k * vRatio)

        widthData = [widthA_Val, widthB_Val]

        mat = OpenMaya.MMatrix()
        nurbIntersect.create(InputData, mat)
        ptON = OpenMaya.MPointOnNurbs()

        outLattice_Hndle = Data.outputValue(self.outLattice)
        latDat = OpenMaya.MFnLatticeData()
        latObj = latDat.create()
        lafFn = OpenMayaAnim.MFnLattice()

        divX = len(uRange)
        divY = len(vRange)
        divZ = 2

        lafFn.create(divX, divY, divZ, latObj)
        resultPoint = OpenMaya.MPoint()
        vecList = [widthData[0] * -0.01, widthData[1] * 0.01]

        for i in range(divX):
            for j in range(divY):
                surfMFn.getPointAtParam(uRange[i], vRange[j], resultPoint,
                                        OpenMaya.MSpace.kObject)
                outV = surfMFn.normal(uRange[i], vRange[j],
                                      OpenMaya.MSpace.kObject).normal()

                for k in range(divZ):
                    outPoint = lafFn.point(i, j, k)
                    outPointB = resultPoint + (outV * vecList[k])

                    outPoint.x = outPointB.x
                    outPoint.y = outPointB.y
                    outPoint.z = outPointB.z

        outLattice_Hndle.setMObject(latObj)
        outLattice_Hndle.setClean()
Exemplo n.º 4
0
    def compute_outCage(self, Data):
        splineMatrixData = self.composeSplineMatrix(Data)
        radius_Val = Data.inputValue(self.radius).asDouble()

        if splineMatrixData == None:
            return
        else:
            knotCount = 8

            offsetPoint = OpenMaya.MPoint(0, radius_Val, 0, 1)
            offsetArray = OpenMaya.MPointArray(knotCount + 1)

            indexTable = [[5, 4, 3], [6, 8, 2], [7, 0, 1]]

            shiftVal = OpenMaya.MEulerRotation(0, 0, 0, 0)
            shftRatio = 360.0 / (knotCount * 1.0)
            sidenum = int(math.sqrt(knotCount + 1))

            for j in range(knotCount):
                shiftVal.x = math.radians(j * shftRatio)
                offsetArray.set(offsetPoint * shiftVal.asMatrix(), j)

            outCage_Hndle = Data.outputValue(self.outCage)
            latDat = OpenMaya.MFnLatticeData()
            latObj = latDat.create()
            lafFn = OpenMayaAnim.MFnLattice()

            divX = splineMatrixData.length()
            divY = sidenum
            divZ = sidenum

            lafFn.create(divX, divY, divZ, latObj)

            knotOffset_obj = Data.inputValue(self.knotOffset).data()
            knotChk = False
            knotOffsetList = None

            if knotOffset_obj.isNull() == False:
                knotOffsetFn = OpenMaya.MFnVectorArrayData(knotOffset_obj)
                knotOffsetList = knotOffsetFn.array()

                if knotOffsetList.length() > 0:
                    knotChk = True

            if knotChk == False:
                for i in range(divX):
                    for j in range(divY):
                        for k in range(divZ):
                            outPoint = lafFn.point(i, j, k)
                            outPointB = offsetArray[indexTable[j]
                                                    [k]] * splineMatrixData[i]

                            outPoint.x = outPointB.x
                            outPoint.y = outPointB.y
                            outPoint.z = outPointB.z
            else:
                idx = 0
                outPointB = OpenMaya.MPoint()
                tmpPnt = OpenMaya.MPoint()
                for i in range(divX):
                    for j in range(divY):
                        for k in range(divZ):
                            outPoint = lafFn.point(i, j, k)
                            idx = indexTable[j][k]
                            if idx != 8:
                                outPointB = (tmpPnt +
                                             knotOffsetList[idx +
                                                            (i * knotCount)]
                                             ) * splineMatrixData[i]
                            else:
                                outPointB = offsetArray[8] * splineMatrixData[i]
                            outPoint.x = outPointB.x
                            outPoint.y = outPointB.y
                            outPoint.z = outPointB.z
            outCage_Hndle.setMObject(latObj)
            outCage_Hndle.setClean()