def __init__(self, name, solverTypeName, extension): super(KLOperator, self).__init__(name) self.solverTypeName = solverTypeName self.extension = extension # Load the Fabric Engine client and construct the RTVal for the Solver ks.loadCoreClient() ks.loadExtension('Kraken') if self.extension != 'Kraken': ks.loadExtension(self.extension) self.solverRTVal = ks.constructRTVal(self.solverTypeName) self.args = self.solverRTVal.getArguments('KrakenSolverArg[]') # Initialize the inputs and outputs based on the given args. for i in xrange(len(self.args)): arg = self.args[i] argName = arg.name.getSimpleType() argDataType = arg.dataType.getSimpleType() argConnectionType = arg.connectionType.getSimpleType() if argConnectionType == 'In': if argDataType.endswith('[]'): self.inputs[argName] = [] else: self.inputs[argName] = None else: if argDataType.endswith('[]'): self.outputs[argName] = [] else: self.outputs[argName] = None
def __init__(self, name, solverTypeName, extension, metaData=None): super(KLOperator, self).__init__(name, metaData=metaData) self.solverTypeName = solverTypeName self.extension = extension # Load the Fabric Engine client and construct the RTVal for the Solver ks.loadCoreClient() ks.loadExtension('Kraken') if self.extension != 'Kraken': ks.loadExtension(self.extension) self.solverRTVal = ks.constructRTVal( '%s::%s' % (self.extension, self.solverTypeName)) # logger.debug("Creating kl operator object [%s] of type [%s] from extension [%s]:" % (self.getName(), self.solverTypeName, self.extension)) self.args = self.solverRTVal.getArguments('Kraken::KrakenSolverArg[]') # Initialize the inputs and outputs based on the given args. for i in xrange(len(self.args)): arg = self.args[i] argName = arg.name.getSimpleType() argDataType = arg.dataType.getSimpleType() argConnectionType = arg.connectionType.getSimpleType() # Note, do not create empty arrays here as we need to know later whether or not # to create default values if input/output is None if argConnectionType == 'In': self.inputs[argName] = None else: self.outputs[argName] = None
def __init__(self, name, solverTypeName, extension, alwaysEval=False): super(SpliceOperator, self).__init__(name) self.solverTypeName = solverTypeName self.extension = extension self.alwaysEval = alwaysEval # This is for Softimage only to force eval. # Load the Fabric Engine client and construct the RTVal for the Solver ks.loadCoreClient() ks.loadExtension('Kraken') if self.extension != 'Kraken': ks.loadExtension(self.extension) self.solverRTVal = ks.constructRTVal(self.solverTypeName) self.args = self.solverRTVal.getArguments('KrakenSolverArg[]') # Initialize the inputs and outputs based on the given args. for i in xrange(len(self.args)): arg = self.args[i] if arg.connectionType == 'in': if str(arg.dataType).endswith('[]'): self.inputs[arg.name] = [] else: self.inputs[arg.name] = None else: if str(arg.dataType).endswith('[]'): self.outputs[arg.name] = [] else: self.outputs[arg.name] = None
def buildPoseConstraint(self, kConstraint): """Builds an pose constraint represented by the kConstraint. Args: kConstraint (object): kraken constraint object to build. Returns: bool: True if successful. """ useXSIConstraint = True if useXSIConstraint: constraineeDCCSceneItem = self.getDCCSceneItem( kConstraint.getConstrainee()) if kConstraint.getMaintainOffset(): constraineeTransform = constraineeDCCSceneItem.Kinematics.Global.Transform constrainingObjs = getCollection() for eachConstrainer in kConstraint.getConstrainers(): constrainer = self.getDCCSceneItem(eachConstrainer) if kConstraint.getMaintainOffset(): constrainerTransform = constrainer.Kinematics.Global.Transform # si.LogMessage( "%s,%s,%s" % (constrainer.posx.Value, constrainer.posy.Value, constrainer.posz.Value) ) constrainingObjs.AddItems(constrainer) dccSceneItem = constraineeDCCSceneItem.Kinematics.AddConstraint( "Pose", constrainingObjs, kConstraint.getMaintainOffset()) self._registerSceneItemPair(kConstraint, dccSceneItem) else: # Load the Fabric Engine client and construct the RTVal for the Solver ks.loadCoreClient() ks.loadExtension('Kraken') solverTypeName = 'PoseConstraintSolver' target = constraineeDCCSceneItem.FullName # + ".kine.global" canvasOpPath = target + ".kine.global.CanvasOp" si.FabricCanvasOpApply(target, "", True, "", "") si.FabricCanvasAddPort(canvasOpPath, "", "solver", "In", solverTypeName, "Kraken") si.FabricCanvasAddPort(canvasOpPath, "", "debug", "In", "Boolean", "") si.FabricCanvasAddPort(canvasOpPath, "", "rightSide", "In", "Boolean", "") connectionTargets = "" connectionSuffix = ".kine.global" for eachConstrainer in kConstraint.getConstrainers(): if eachConstrainer is None: raise Exception("Constraint '" + kConstraint.getPath() + "' has invalid connection.") dccSceneItem = self.getDCCSceneItem(eachConstrainer) if dccSceneItem is None: raise Exception( "Constraint '" + kConstraint.getPath() + "' of type '" + solverTypeName + "' is connected to object without corresponding SceneItem:" + eachConstrainer.getPath()) connectionTargets = dccSceneItem.FullName + connectionSuffix break si.FabricCanvasAddPort(canvasOpPath, "", "constrainer", "In", "Mat44", "") # si.fabricSplice("addInputPort", canvasOpPath, "{\"portName\":\"constrainer\", \"dataType\":\"Mat44\", \"extension\":\"\", \"targets\":\"" + connectionTargets + "\"}", "") # Generate the operator source code. opSourceCode = "" opSourceCode += "require Kraken;\n" opSourceCode += "operator poseConstraint(\n" opSourceCode += " io " + solverTypeName + " solver,\n" opSourceCode += " in Boolean debug,\n" opSourceCode += " in Boolean rightSide,\n" opSourceCode += " io Mat44 constrainee,\n" opSourceCode += " in Mat44 constrainer\n" opSourceCode += " )\n" opSourceCode += "{\n" opSourceCode += " solver.solve(debug, rightSide, constrainer, constrainee);" opSourceCode += "}\n" si.fabricSplice('addKLOperator', canvasOpPath, '{"opName": "poseConstraint"}', opSourceCode) return dccSceneItem
def buildPoseConstraint(self, kConstraint): """Builds an pose constraint represented by the kConstraint. Args: kConstraint (object): kraken constraint object to build. Returns: bool: True if successful. """ useXSIConstraint = True if useXSIConstraint: constraineeDCCSceneItem = self.getDCCSceneItem(kConstraint.getConstrainee()) if kConstraint.getMaintainOffset(): constraineeTransform = constraineeDCCSceneItem.Kinematics.Global.Transform constrainingObjs = getCollection() for eachConstrainer in kConstraint.getConstrainers(): constrainer = self.getDCCSceneItem(eachConstrainer) if kConstraint.getMaintainOffset(): constrainerTransform = constrainer.Kinematics.Global.Transform # si.LogMessage( "%s,%s,%s" % (constrainer.posx.Value, constrainer.posy.Value, constrainer.posz.Value) ) constrainingObjs.AddItems(constrainer) dccSceneItem = constraineeDCCSceneItem.Kinematics.AddConstraint("Pose", constrainingObjs, kConstraint.getMaintainOffset()) self._registerSceneItemPair(kConstraint, dccSceneItem) else: # Load the Fabric Engine client and construct the RTVal for the Solver ks.loadCoreClient() ks.loadExtension('Kraken') solverTypeName = 'PoseConstraintSolver' target = constraineeDCCSceneItem.FullName# + ".kine.global" canvasOpPath = target + ".kine.global.CanvasOp" si.FabricCanvasOpApply(target, "", True, "", "") si.FabricCanvasAddPort(canvasOpPath, "", "solver", "In", solverTypeName, "Kraken") si.FabricCanvasAddPort(canvasOpPath, "", "debug", "In", "Boolean", "") si.FabricCanvasAddPort(canvasOpPath, "", "rightSide", "In", "Boolean", "") connectionTargets = "" connectionSuffix = ".kine.global" for eachConstrainer in kConstraint.getConstrainers(): if eachConstrainer is None: raise Exception("Constraint '"+kConstraint.getPath()+"' has invalid connection."); dccSceneItem = self.getDCCSceneItem(eachConstrainer) if dccSceneItem is None: raise Exception("Constraint '"+kConstraint.getPath()+"' of type '"+solverTypeName+"' is connected to object without corresponding SceneItem:" + eachConstrainer.getPath()); connectionTargets = dccSceneItem.FullName + connectionSuffix break si.FabricCanvasAddPort(canvasOpPath, "", "constrainer", "In", "Mat44", "") # si.fabricSplice("addInputPort", canvasOpPath, "{\"portName\":\"constrainer\", \"dataType\":\"Mat44\", \"extension\":\"\", \"targets\":\"" + connectionTargets + "\"}", "") # Generate the operator source code. opSourceCode = "" opSourceCode += "require Kraken;\n" opSourceCode += "operator poseConstraint(\n" opSourceCode += " io " + solverTypeName + " solver,\n" opSourceCode += " in Boolean debug,\n" opSourceCode += " in Boolean rightSide,\n" opSourceCode += " io Mat44 constrainee,\n" opSourceCode += " in Mat44 constrainer\n" opSourceCode += " )\n" opSourceCode += "{\n" opSourceCode += " solver.solve(debug, rightSide, constrainer, constrainee);" opSourceCode += "}\n" si.fabricSplice('addKLOperator', canvasOpPath, '{"opName": "poseConstraint"}', opSourceCode) return dccSceneItem