def storePose(modelname, posename): """ Stores the current pose of all of a robot's selected joints. Existing poses of the same name will be overwritten. :param modelname: The robot the pose belongs to. :type modelname: str. :param posename: The name the pose will be stored under. :type posename: str. :return: Nothing. """ rootlink = None for root in sUtils.getRoots(): if root['modelname'] == modelname: rootlink = root if rootlink: filename = modelname + '::poses' posedict = yaml.load(bUtils.readTextFile(filename)) if not posedict: posedict = {posename: {'name': posename, 'joints': {}}} else: posedict[posename] = {'name': posename, 'joints': {}} bpy.ops.object.mode_set(mode='POSE') links = sUtils.getChildren(rootlink, ('link',), True, False) for link in (link for link in links if 'joint/type' in link and link['joint/type'] not in ['fixed', 'floating']): link.pose.bones['Bone'].rotation_mode = 'XYZ' posedict[posename]['joints'][nUtils.getObjectName(link, 'joint')] = link.pose.bones['Bone'].rotation_euler.y bUtils.updateTextFile(filename, yaml.dump(posedict, default_flow_style=False)) else: log("No model root could be found to store the pose for", "ERROR", "storePose")
def storePose(modelname, posename): """ Stores the current pose of all of a robot's selected joints. Existing poses of the same name will be overwritten. :param modelname: The robot the pose belongs to. :type modelname: str. :param posename: The name the pose will be stored under. :type posename: str. :return: Nothing. """ rootlink = None for root in sUtils.getRoots(): if root['modelname'] == modelname: rootlink = root if rootlink: filename = modelname + '::poses' posedict = yaml.load(bUtils.readTextFile(filename)) if not posedict: posedict = {posename: {'name': posename, 'joints': {}}} else: posedict[posename] = {'name': posename, 'joints': {}} bpy.ops.object.mode_set(mode='POSE') links = sUtils.getChildren(rootlink, ('link', ), True, False) for link in (link for link in links if 'joint/type' in link and link['joint/type'] not in ['fixed', 'floating']): link.pose.bones['Bone'].rotation_mode = 'XYZ' posedict[posename]['joints'][nUtils.getObjectName( link, 'joint')] = link.pose.bones['Bone'].rotation_euler.y bUtils.updateTextFile(filename, yaml.dump(posedict, default_flow_style=False)) else: log("No model root could be found to store the pose for", "ERROR")
def storePose(robot_name, pose_name): """ Store the current pose of all of a robot's selected links. Existing poses of the same name will be overwritten. :param robot_name: The robot the pose belongs to. :type robot_name: str. :param pose_name: The name the pose will be stored under. :type pose_name: str. :return: Nothing. """ file_name = 'robot_poses_' + robot_name load_file = blenderUtils.readTextFile(file_name) if load_file == '': poses = {} else: poses = yaml.load(load_file) new_pose = {} prev_mode = bpy.context.mode bpy.ops.object.mode_set(mode='POSE') for root in selectionUtils.getRoots(): if root['modelname'] == robot_name: links = selectionUtils.getChildren(root) for link in links: if link.select and link.phobostype == 'link': link.pose.bones['Bone'].rotation_mode = 'XYZ' new_pose[namingUtils.getObjectName(link, 'joint')] = link.pose.bones['Bone'].rotation_euler.y bpy.ops.object.mode_set(mode=prev_mode) poses[pose_name] = new_pose blenderUtils.updateTextFile(file_name, yaml.dump(poses))
def storePose(robot_name, pose_name): """ Store the current pose of all of a robot's selected links. Existing poses of the same name will be overwritten. :param robot_name: The robot the pose belongs to. :type robot_name: str. :param pose_name: The name the pose will be stored under. :type pose_name: str. :return: Nothing. """ file_name = 'robot_poses_' + robot_name load_file = blenderUtils.readTextFile(file_name) if load_file == '': poses = {} else: poses = yaml.load(load_file) new_pose = {} prev_mode = bpy.context.mode bpy.ops.object.mode_set(mode='POSE') for root in selectionUtils.getRoots(): if root['modelname'] == robot_name: links = selectionUtils.getChildren(root) for link in links: if link.select and link.phobostype == 'link': link.pose.bones['Bone'].rotation_mode = 'XYZ' new_pose[namingUtils.getObjectName( link, 'joint')] = link.pose.bones['Bone'].rotation_euler.y bpy.ops.object.mode_set(mode=prev_mode) poses[pose_name] = new_pose blenderUtils.updateTextFile(file_name, yaml.dump(poses))
def storePose(root, posename): """Stores the current pose of all of a model's selected joints. Existing poses of the same name will be overwritten. Args: root(bpy_types.Object): root of the model the pose belongs to posename(str): name the pose will be stored under Returns: : Nothing. """ if root: filename = nUtils.getModelName(root) + '::poses' posedict = json.loads(bUtils.readTextFile(filename)) if not posedict: posedict = {posename: {'name': posename, 'joints': {}}} else: posedict[posename] = {'name': posename, 'joints': {}} links = sUtils.getChildren(root, ('link', ), True, False) sUtils.selectObjects([root] + links, clear=True, active=0) bpy.ops.object.mode_set(mode='POSE') for link in (link for link in links if 'joint/type' in link and link['joint/type'] not in ['fixed', 'floating']): link.pose.bones['Bone'].rotation_mode = 'XYZ' posedict[posename]['joints'][nUtils.getObjectName( link, 'joint')] = link.pose.bones['Bone'].rotation_euler.y bpy.ops.object.mode_set(mode='OBJECT') posedict = gUtils.roundFloatsInDict( posedict, ioUtils.getExpSettings().decimalPlaces) bUtils.updateTextFile(filename, json.dumps(posedict)) else: log("No model root provided to store the pose for", "ERROR")
def storePose(pose_name): load_file = blenderUtils.readTextFile('robot_poses') if load_file == '': poses = {} else: poses = yaml.load(load_file) new_pose = {} prev_mode = bpy.context.mode bpy.ops.object.mode_set(mode='POSE') for obj in selectionUtils.returnObjectList('link'): obj.pose.bones['Bone'].rotation_mode = 'XYZ' new_pose[namingUtils.getObjectName(obj, 'joint')] = obj.pose.bones['Bone'].rotation_euler.y bpy.ops.object.mode_set(mode=prev_mode) poses[pose_name] = new_pose blenderUtils.updateTextFile('robot_poses', yaml.dump(poses))
def storePose(root, posename): """Stores the current pose of all of a model's selected joints. Existing poses of the same name will be overwritten. Args: root(bpy_types.Object): root of the model the pose belongs to posename(str): name the pose will be stored under Returns: : Nothing. """ if root: filename = nUtils.getModelName(root) + '::poses' posedict = yaml.load(bUtils.readTextFile(filename)) if not posedict: posedict = {posename: {'name': posename, 'joints': {}}} else: posedict[posename] = {'name': posename, 'joints': {}} links = sUtils.getChildren(root, ('link',), True, False) sUtils.selectObjects([root] + links, clear=True, active=0) bpy.ops.object.mode_set(mode='POSE') for link in ( link for link in links if 'joint/type' in link and link['joint/type'] not in ['fixed', 'floating'] ): link.pose.bones['Bone'].rotation_mode = 'XYZ' posedict[posename]['joints'][nUtils.getObjectName(link, 'joint')] = link.pose.bones[ 'Bone' ].rotation_euler.y bpy.ops.object.mode_set(mode='OBJECT') posedict = gUtils.roundFloatsInDict(posedict, ioUtils.getExpSettings().decimalPlaces) bUtils.updateTextFile(filename, yaml.dump(posedict, default_flow_style=False)) else: log("No model root provided to store the pose for", "ERROR")