def setUp(self): OpenMaya.MFileIO.newFile(True) context = tests._util.Context() master = tests._util.createTransform(context, name='master') tests._util.createTransform(context, name='node', parent=master) tests._util.createTransform(context, name='awesome_node', parent=master) tests._util.createTransform(context, name='node_awesome', parent=master) tests._util.createTransform(context, name='n0de', parent=master) root1 = tests._util.createTransform(context, name='root_1', parent=master) child1 = tests._util.createTransform(context, name='child_1', parent=root1) tests._util.createTransform(context, name='node', parent=child1) root2 = tests._util.createTransform(context, name='root_2', parent=master) child2 = tests._util.createTransform(context, name='child_2', parent=root2) grandchild = tests._util.createTransform(context, name='grandchild', parent=child2) tests._util.createTransform(context, name='node', parent=grandchild) cube, cubeShape = tests._util.createPolyCube(context, name='cube', parent=master) intermediary1 = tests._util.createDagNode(context, 'mesh', name='intermediary1', parent=cube) context.dg.newPlugValueBool(intermediary1.findPlug('intermediateObject'), True) context.dg.connect(cubeShape.findPlug('outMesh'), intermediary1.findPlug('inMesh')) intermediary2 = tests._util.createDagNode(context, 'mesh', name='intermediary2', parent=cube) context.dg.newPlugValueBool(intermediary2.findPlug('intermediateObject'), True) context.dg.connect(cubeShape.findPlug('outMesh'), intermediary2.findPlug('inMesh')) template = tests._util.createDagNode(context, 'mesh', name='template', parent=cube) context.dg.newPlugValueBool(template.findPlug('template'), True) context.dg.connect(cubeShape.findPlug('outMesh'), template.findPlug('inMesh')) sphere, sphereShape = tests._util.createNurbsSphere(context, name='sphere', parent=master) circle, circleShape = tests._util.createNurbsCircle(context, name='circle', parent=master) OpenMaya.MNamespace.addNamespace('awesome') light = tests._util.createTransform(context, name='awesome:light', parent=master) tests._util.createDagNode(context, 'pointLight', name='awesome:lightShape', parent=light) context.dag.doIt() context.dg.doIt() cmds.projectCurve(circleShape.fullPathName(), sphereShape.fullPathName())
def setUp(self): OpenMaya.MFileIO.newFile(True) master = cmds.group(name='master', empty=True) for i in (1, 2): root = cmds.group(name='root_%d' % i, parent=master, empty=True) child = cmds.group(name='child_%d' % i, parent=root, empty=True) node = cmds.group(name='node', parent=child, empty=True) cmds.group('|master|root_2|child_2|node', name='grandchild', parent='|master|root_2|child_2') cmds.group(name='node', parent='|master', empty=True) cmds.group(name='awesome_node', parent='|master', empty=True) cmds.group(name='node_awesome', parent='|master', empty=True) cmds.group(name='n0de', parent='|master', empty=True) cmds.polyCube(name='cube') cmds.parent('cube', '|master') cmds.sphere(name='sphere') cmds.parent('sphere', '|master') cmds.circle(name='circle') cmds.parent('|circle', '|master') cmds.projectCurve('|master|circle', '|master|sphere') cmds.namespace(add='awesome') cmds.pointLight(name='awesome:light') cmds.parent('|awesome:light', '|master')
def createSpherical4Arrowhead (): _controlled = cmds.ls ( long = True, selection = True ) _baseCurve = cmds.curve ( degree = 1, point = [ (0,1,1),(0,3,1),(0,3,2),(0,6,0),(0,3,-2),(0,3,-1), (0,1,-1),(0,1,-3),(0,2,-3),(0,0,-6),(0,-2,-3),(0,-1,-3),(0,-1,-1),(0,-3,-1), (0,-3,-2),(0,-6,0),(0,-3,2),(0,-3,1),(0,-1,1),(0,-1,3),(0,-2,3),(0,0,6),(0,2,3), (0,1,3),(0,1,1) ] ) _tempSphere = cmds.sphere ( radius = 7, axis = ( 0, 1, 0 ), sections = 4, startSweep = 270, endSweep = 90, constructionHistory = 0 ) _control = cmds.projectCurve ( _baseCurve, _tempSphere, constructionHistory = False, direction = ( 1, 0, 0 ), ) _control = cmds.duplicateCurve ( _control, constructionHistory = True, object = True ) cmds.delete ( _tempSphere ) cmds.delete ( _baseCurve ) postProcessControl ( _control[0], 'rotate', _controlled )
def _build_cmd(self): """maya built-in command However I don't think we can give it other inputs? """ var_node, project_node = cmds.projectCurve( self.curve_node().get(), self.surface().get(), useNormal=False, direction=self.direction().get(), name=self.name().get() ) self._var_node = "{}_curveVarGroup".format(self.name().get()) cmds.rename(var_node, self._var_node) self._project_node = "{}_projectCurve".format(self.name().get()) cmds.rename(project_node, self._project_node) return True
def create_saucer_plate_b(control, name, saucer_surface, saucer_profile, saucer_circle_1, saucer_circle_2, parent, start_angle, sweep_angle): """ in this version we offset sweep angle based on the difference in the circumference of each circle (instead of the sweep angle) to ensure parallel gaps we also divide the plate in half to make sure the curves start precisely from the profile this will create one half, to create the other half, reverse the sweep angle """ # create offset circles plate_circle_transform_1, plate_circle_node_1 = create_nurbs_circle( "{}_plateCircle1".format(name), parent) plate_circle_transform_2, plate_circle_node_2 = create_nurbs_circle( "{}_plateCircle2".format(name), parent) circle_add_1 = cmds.createNode( "plusMinusAverage", name="{}CircleAdd1_plusMinusAverage".format(name)) circle_add_2 = cmds.createNode( "plusMinusAverage", name="{}CircleAdd2_plusMinusAverage".format(name)) cmds.connectAttr("{}.{}".format(control, saucer_circle_1), "{}.input1D[0]".format(circle_add_1)) cmds.connectAttr("{}.{}".format(control, PLATE_SEPARATION_ATTR), "{}.input1D[1]".format(circle_add_1)) cmds.connectAttr("{}.output1D".format(circle_add_1), "{}.radius".format(plate_circle_node_1)) cmds.setAttr("{}.operation".format(circle_add_2), 2) # subtract cmds.connectAttr("{}.{}".format(control, saucer_circle_2), "{}.input1D[0]".format(circle_add_2)) cmds.connectAttr("{}.{}".format(control, PLATE_SEPARATION_ATTR), "{}.input1D[1]".format(circle_add_2)) cmds.connectAttr("{}.output1D".format(circle_add_2), "{}.radius".format(plate_circle_node_2)) start_add = cmds.createNode( "plusMinusAverage", name="{}StartAngle_plusMinusAverage".format(name)) cmds.connectAttr("{}.{}".format(control, DIVISION_SEPARATION_ATTR), "{}.input1D[0]".format(start_add)) cmds.setAttr("{}.input1D[1]".format(start_add), start_angle) end_add = cmds.createNode("plusMinusAverage", name="{}EndAngle_plusMinusAverage".format(name)) cmds.setAttr("{}.operation".format(end_add), 2) # subtract cmds.setAttr("{}.input1D[0]".format(end_add), sweep_angle) cmds.connectAttr("{}.{}".format(control, DIVISION_SEPARATION_ATTR), "{}.input1D[1]".format(end_add)) cmds.connectAttr("{}.{}".format(control, DIVISION_SEPARATION_ATTR), "{}.input1D[2]".format(end_add)) # connect angles # cmds.connectAttr("{}.output1D".format(start_add), "{}.rotateY".format(plate_circle_transform_1)) # cmds.connectAttr("{}.output1D".format(start_add), "{}.rotateY".format(plate_circle_transform_2)) cmds.setAttr("{}.rotateY".format(plate_circle_transform_1), start_angle) cmds.setAttr("{}.rotateY".format(plate_circle_transform_2), start_angle) cmds.connectAttr("{}.output1D".format(end_add), "{}.sweep".format(plate_circle_node_1)) cmds.connectAttr("{}.output1D".format(end_add), "{}.sweep".format(plate_circle_node_2)) # project curves projection_kwargs = { "ch": True, "direction": (0, 1, 0), "range": False, "useNormal": False, "tol": 0.01 } cmds.projectCurve(plate_circle_transform_1, saucer_surface, **projection_kwargs) cmds.projectCurve(plate_circle_transform_2, saucer_surface, **projection_kwargs)
def create_saucer_plate_a(control, name, saucer_surface, saucer_profile, saucer_circle_1, saucer_circle_2, parent, start_angle, sweep_angle): # create offset circles plate_circle_transform_1, plate_circle_node_1 = create_nurbs_circle( "{}_plateCircle1".format(name), parent) plate_circle_transform_2, plate_circle_node_2 = create_nurbs_circle( "{}_plateCircle2".format(name), parent) circle_add_1 = cmds.createNode( "plusMinusAverage", name="{}CircleAdd1_plusMinusAverage".format(name)) circle_add_2 = cmds.createNode( "plusMinusAverage", name="{}CircleAdd2_plusMinusAverage".format(name)) cmds.connectAttr("{}.{}".format(control, saucer_circle_1), "{}.input1D[0]".format(circle_add_1)) cmds.connectAttr("{}.{}".format(control, PLATE_SEPARATION_ATTR), "{}.input1D[1]".format(circle_add_1)) cmds.connectAttr("{}.output1D".format(circle_add_1), "{}.radius".format(plate_circle_node_1)) cmds.setAttr("{}.operation".format(circle_add_2), 2) # subtract cmds.connectAttr("{}.{}".format(control, saucer_circle_2), "{}.input1D[0]".format(circle_add_2)) cmds.connectAttr("{}.{}".format(control, PLATE_SEPARATION_ATTR), "{}.input1D[1]".format(circle_add_2)) cmds.connectAttr("{}.output1D".format(circle_add_2), "{}.radius".format(plate_circle_node_2)) # calculate angles start_add = cmds.createNode( "plusMinusAverage", name="{}StartAngle_plusMinusAverage".format(name)) cmds.connectAttr("{}.{}".format(control, DIVISION_SEPARATION_ATTR), "{}.input1D[0]".format(start_add)) cmds.setAttr("{}.input1D[1]".format(start_add), start_angle) end_add = cmds.createNode("plusMinusAverage", name="{}EndAngle_plusMinusAverage".format(name)) cmds.setAttr("{}.operation".format(end_add), 2) # subtract cmds.setAttr("{}.input1D[0]".format(end_add), sweep_angle) cmds.connectAttr("{}.{}".format(control, DIVISION_SEPARATION_ATTR), "{}.input1D[1]".format(end_add)) cmds.connectAttr("{}.{}".format(control, DIVISION_SEPARATION_ATTR), "{}.input1D[2]".format(end_add)) # connect angles # cmds.connectAttr("{}.output1D".format(start_add), "{}.rotateY".format(plate_circle_transform_1)) # cmds.connectAttr("{}.output1D".format(start_add), "{}.rotateY".format(plate_circle_transform_2)) cmds.setAttr("{}.rotateY".format(plate_circle_transform_1), start_angle) cmds.setAttr("{}.rotateY".format(plate_circle_transform_2), start_angle) cmds.connectAttr("{}.output1D".format(end_add), "{}.sweep".format(plate_circle_node_1)) cmds.connectAttr("{}.output1D".format(end_add), "{}.sweep".format(plate_circle_node_2)) # project curves projection_kwargs = { "ch": True, "direction": (0, 1, 0), "range": False, "useNormal": False, "tol": 0.01 } cmds.projectCurve(plate_circle_transform_1, saucer_surface, **projection_kwargs) cmds.projectCurve(plate_circle_transform_2, saucer_surface, **projection_kwargs)
# #############################################################################
def projectCurve(*args, **kwargs): res = cmds.projectCurve(*args, **kwargs) if not kwargs.get('query', kwargs.get('q', False)): res = _factories.maybeConvert(res, _general.PyNode) return res