コード例 #1
0
ファイル: ligamentNode.py プロジェクト: antonstattin/mayadev
    def initilizeStiffness(self, dataBlock):
        """
        sets up the default stiffness params
        """

        inCurveDataHandle = dataBlock.inputValue(self.inCurve)

        mCurve = inCurveDataHandle.asNurbsCurveTransformed()
        if not mCurve: return

        # stiffness
        mfnCrv = om.MFnNurbsCurve(mCurve)
        stiffnessArrayData = dataBlock.outputArrayValue(self.stiffness)
        stiffnessDataBuilder = om.MArrayDataBuilder(dataBlock, self.stiffness,
                                                    int(mfnCrv.numCVs))

        # outputs
        outputArrayData = dataBlock.outputArrayValue(self.output)
        outputDataBuilder = om.MArrayDataBuilder(dataBlock, self.output,
                                                 int(mfnCrv.numCVs))

        for i in xrange(mfnCrv.numCVs):
            stiffnessHandler = stiffnessDataBuilder.addElement(i)
            stiffnessHandler.setFloat(0.5)
            stiffnessHandler.setClean()

            outputHandler = outputDataBuilder.addElement(i)
            outputHandler.setMVector(om.MVector(0, 0, 0))
            outputHandler.setClean()

        stiffnessArrayData.set(stiffnessDataBuilder)
        outputArrayData.set(outputDataBuilder)

        setInitMode = om.MPlug(self.thisMObject(), self.initilize)
        setInitMode.setShort(2)
コード例 #2
0
    def computeBounds(self, plug, dataBlock):
        handleMatrix = OpenMaya.MMatrix(dataBlock.inputValue(self.handleMatrix).asMatrix())
        handleMatrixInverse = handleMatrix.inverse()

        projectedPoints = OpenMaya.MPointArray()
        matrices = dataBlock.inputArrayValue(self.childHandleMatrix)
        while not matrices.isDone():
            dataHandle = matrices.inputValue()

            idx = matrices.elementLogicalIndex()
            matrixPlug = OpenMaya.MPlug(plug.node(), self.childHandleMatrix).elementByLogicalIndex(idx)
            if matrixPlug.isConnected:
                childMatrix = OpenMaya.MMatrix(dataHandle.asMatrix())
                local = childMatrix * handleMatrixInverse
                pt = OpenMaya.MTransformationMatrix(local).translation(OpenMaya.MSpace.kPostTransform)
                projectedPoints.append(pt)
            matrices.next()

        outputArray = dataBlock.outputArrayValue(self.childPosition)
        builder = OpenMaya.MArrayDataBuilder(dataBlock, self.childPosition, len(projectedPoints))

        for i, pt in enumerate(projectedPoints):
            handle = builder.addElement(i)
            handle.set3Double(pt.x, pt.y, pt.z)

        outputArray.set(builder)
        dataBlock.setClean(self.childPosition)

        # Compute Bounding box based on child positions
        radius = 1
        bounds = OpenMaya.MBoundingBox(
            OpenMaya.MPoint(-radius, -radius, -radius),
            OpenMaya.MPoint(radius, radius, radius),
            )

        for pt in projectedPoints:
            bounds.expand(pt)

        lowerHandle = dataBlock.outputValue(self.boundingBoxCorner1)
        upperHandle = dataBlock.outputValue(self.boundingBoxCorner2)
        minPt = bounds.min
        maxPt = bounds.max
        lowerHandle.set3Double(minPt.x, minPt.y, minPt.z)
        upperHandle.set3Double(maxPt.x, maxPt.y, maxPt.z)
        lowerHandle.setClean()
        upperHandle.setClean()