def _link_to_marker_group(self, mkr_grp): """ Parent a marker under a Marker Group. """ assert isinstance(mkr_grp, markergroup.MarkerGroup) mkr_node = self.get_node() mkr_grp_node = mkr_grp.get_node() # Make sure the camera is valid for us to link to. if mkr_grp.is_valid() is False: msg = 'Cannot link Marker to Marker Group; Marker Group is not valid.' msg += ' marker={0} marker group={1}' msg = msg.format(repr(mkr_node), repr(mkr_grp_node)) raise excep.NotValid(msg) # Check if we're trying to link the the camera that we're already # linked to. current_mkr_grp = self.get_marker_group() if current_mkr_grp is not None: assert isinstance(current_mkr_grp, markergroup.MarkerGroup) current_mkr_grp = current_mkr_grp.get_node() if current_mkr_grp == mkr_grp_node: msg = 'Marker is already linked to Marker Group, skipping.' msg += ' marker={0} marker group={1}' msg = msg.format(repr(mkr_node), repr(mkr_grp_node)) raise excep.AlreadyLinked(msg) # Move the marker under the marker group, make sure the relative # marker attribute values are maintained. maya.cmds.parent(mkr_node, mkr_grp_node, relative=True) return
def _link_to_camera(self, cam): """ Parent a marker under the marker group which is under the given camera. If there is no marker group, one is created. :param cam: The camera to connect this Marker to. :type cam: None or Camera :returns: None """ assert isinstance(cam, camera.Camera) mkr_node = self.get_node() if mkr_node is None: LOG.warn('Could not get Marker node. self=%r', self) return cam_tfm = cam.get_transform_node() cam_shp = cam.get_shape_node() # Make sure the camera is valid for us to link to. if cam.is_valid() is False: msg = 'Cannot link Marker to Camera; Camera is not valid.' msg += ' marker={0} camera={1}' msg = msg.format(repr(mkr_node), repr(cam_shp)) raise excep.NotValid(msg) # Check if we're trying to link the the camera that we're already # linked to. current_cam = self.get_camera() if current_cam is not None: assert isinstance(current_cam, camera.Camera) current_cam_shp = current_cam.get_shape_node() if current_cam_shp == cam_shp: msg = 'Marker is already linked to camera, skipping.' msg += ' marker={0} camera={1}' msg = msg.format(repr(mkr_node), repr(cam_shp)) raise excep.AlreadyLinked(msg) # Create Marker Group mkr_grp = None mkr_grp_nodes = maya.cmds.ls(cam_tfm, dag=True, long=True, type='mmMarkerGroupTransform') or [] mkr_grp_nodes = sorted(mkr_grp_nodes) if len(mkr_grp_nodes) == 0: mkr_grp = markergroup.MarkerGroup().create_node(cam=cam) else: mkr_grp = markergroup.MarkerGroup(node=mkr_grp_nodes[0]) # Link to Marker Group self.set_marker_group(mkr_grp) return
def _link_to_bundle(self, bnd): """ Connect a Bundle to the Marker. A Marker may only have one connected Bundle object. :param bnd: The Bundle to connect to. :type bnd: Bundle :returns: None. """ # output message to marker.bundle attr assert isinstance(bnd, mmSolver._api.bundle.Bundle) bnd_node = bnd.get_node() assert isinstance(bnd_node, (str, unicode)) assert maya.cmds.objExists(bnd_node) mkr_node = self.get_node() if mkr_node is None: LOG.warn('Could not get Marker node. self=%r', self) return None assert isinstance(mkr_node, (str, unicode)) assert maya.cmds.objExists(mkr_node) attr_name = 'bundle' attr_names = maya.cmds.listAttr(mkr_node) if attr_name not in attr_names: maya.cmds.addAttr(mkr_node, longName=attr_name, at='message') src = bnd_node + '.message' dst = mkr_node + '.' + attr_name if not maya.cmds.isConnected(src, dst): maya.cmds.connectAttr(src, dst) else: msg = 'Marker and Bundle are already linked; ' msg += 'marker={0}, bundle={1}' msg = msg.format(repr(mkr_node), repr(bnd_node)) raise excep.AlreadyLinked(msg) return