示例#1
0
def deriveVisual(obj):
    """This function derives the visual information from an object.

    :param obj: The blender object to derive the visuals from.
    :type obj: bpy_types.Object
    :return: dict
    """
    try:
        visual = initObjectProperties(obj,
                                      phobostype='visual',
                                      ignoretypes='geometry')
        visual['geometry'] = deriveGeometry(obj)
        visual['pose'] = deriveObjectPose(obj)
        if obj.lod_levels:
            if 'lodmaxdistances' in obj:
                maxdlist = obj['lodmaxdistances']
            else:
                maxdlist = [
                    obj.lod_levels[i + 1].distance
                    for i in range(len(obj.lod_levels) - 1)
                ] + [100.0]
            lodlist = []
            for i in range(len(obj.lod_levels)):
                filename = obj.lod_levels[
                    i].object.data.name + ioUtils.getOutputMeshtype()
                lodlist.append({
                    'start': obj.lod_levels[i].distance,
                    'end': maxdlist[i],
                    'filename': os.path.join('meshes', filename)
                })
            visual['lod'] = lodlist
    except KeyError:
        log("Missing data in visual object " + obj.name, "ERROR")
        return None
    return visual
示例#2
0
文件: urdf.py 项目: jacknlliu/phobos
def writeURDFGeometry(output, element):
    """This functions writes the URDF geometry for a given element at the end of a given String.

    :param output: The String to append the URDF output string on.
    :type output: str
    :param element: A certain element to parse into URDF.
    :type element: dict
    :return: str -- The extended String

    """
    geometry = element['geometry']
    try:
        output.append(indent * 4 + '<geometry>\n')
        if geometry['type'] == 'box':
            output.append(xmlline(5, 'box', ['size'], [l2str(geometry['size'])]))
        elif geometry['type'] == "cylinder":
            output.append(xmlline(5, 'cylinder', ['radius', 'length'], [geometry['radius'], geometry['length']]))
        elif geometry['type'] == "sphere":
            output.append(xmlline(5, 'sphere', ['radius'], [geometry['radius']]))
        elif geometry['type'] == 'mesh':
            output.append(xmlline(5, 'mesh', ['filename', 'scale'],
                                  [os.path.join(ioUtils.getRelativeMeshpath(),
                                                geometry['filename'] + '.' + ioUtils.getOutputMeshtype()),
                                   l2str(geometry['scale'])]))
        elif geometry['type'] == 'capsule':
            output.append(xmlline(5, 'cylinder', ['radius', 'length'], [geometry['radius'], geometry['length']]))  # FIXME: real capsules here!
        else:
            raise TypeError("Unknown geometry type")
        output.append(indent * 4 + '</geometry>\n')
    except (KeyError, TypeError) as err:
        log("Misdefined geometry in element " + element['name'] + " " + str(err), "ERROR", "writeURDFGeometry")
示例#3
0
def writeURDFGeometry(output, element, filepath):
    """This functions writes the URDF geometry for a given element at the end of a given String.

    :param output: The String to append the URDF output string on.
    :type output: str
    :param element: A certain element to parse into URDF.
    :type element: dict
    :return: str -- The extended String

    """
    geometry = element['geometry']
    try:
        output.append(indent * 4 + '<geometry>\n')
        if geometry['type'] == 'box':
            output.append(
                xmlline(5, 'box', ['size'], [l2str(geometry['size'])]))
        elif geometry['type'] == "cylinder":
            output.append(
                xmlline(5, 'cylinder', ['radius', 'length'],
                        [geometry['radius'], geometry['length']]))
        elif geometry['type'] == "sphere":
            output.append(
                xmlline(5, 'sphere', ['radius'], [geometry['radius']]))
        elif geometry['type'] == 'mesh':
            # FIXME: the following will crash if unstructured export is used
            log(
                "writeURDFGeometry: " + filepath + ' ' +
                ioUtils.getOutputMeshpath(path.dirname(filepath)), "DEBUG")
            meshpath = ioUtils.getOutputMeshpath(path.dirname(filepath))
            output.append(
                xmlline(5, 'mesh', ['filename', 'scale'], [
                    path.join(
                        path.relpath(meshpath,
                                     filepath), geometry['filename'] + '.' +
                        ioUtils.getOutputMeshtype()),
                    l2str(geometry['scale'])
                ]))
        elif geometry['type'] == 'capsule':
            # FIXME: real capsules here!
            output.append(
                xmlline(5, 'cylinder', ['radius', 'length'],
                        [geometry['radius'], geometry['length']]))
        else:
            raise TypeError("Unknown geometry type")
        output.append(indent * 4 + '</geometry>\n')
    except (KeyError, TypeError) as err:
        log(
            "Misdefined geometry in element " + element['name'] + " " +
            str(err), "ERROR")
示例#4
0
def writeURDFGeometry(output, element, filepath):
    """This functions writes the URDF geometry for a given element at the end of a given String.

    Args:
      output(str): The String to append the URDF output string on.
      element(dict): A certain element to parse into URDF.
      filepath: 

    Returns:
      : str -- The extended String

    """
    geometry = element['geometry']
    try:
        output.append(indent * 4 + '<geometry>\n')
        if geometry['type'] == 'box':
            output.append(
                xmlline(5, 'box', ['size'], [l2str(geometry['size'])]))
        elif geometry['type'] == "cylinder":
            output.append(
                xmlline(5, 'cylinder', ['radius', 'length'],
                        [geometry['radius'], geometry['length']]))
        elif geometry['type'] == "sphere":
            output.append(
                xmlline(5, 'sphere', ['radius'], [geometry['radius']]))
        elif geometry['type'] == 'mesh':
            meshpath = ioUtils.getOutputMeshpath(
                path.dirname(filepath), None, None
            ) + geometry['filename'] + '.' + ioUtils.getOutputMeshtype()
            if not "package://" in meshpath:
                meshpath = path.relpath(meshpath, filepath)
            output.append(
                xmlline(
                    5,
                    'mesh',
                    ['filename', 'scale'],
                    [
                        meshpath,
                        l2str(geometry['scale']),
                    ],
                ))
        else:
            raise TypeError("Unknown geometry type")
        output.append(indent * 4 + '</geometry>\n')
    except (KeyError, TypeError) as err:
        log(
            "Misdefined geometry in element " + element['name'] + " " +
            str(err), "ERROR")
示例#5
0
文件: models.py 项目: shareeff/phobos
def deriveVisual(obj, logging=True, **kwargs):
    """This function derives the visual information from an object.
    
    Contains these keys:
        *name*: name of the visual
        *geometry*: derived according to `deriveGeometry`
        *pose*: derived according to `deriveObjectPose`
        *lod*: (opt.) level of detail levels

    Args:
      obj(bpy.types.Object): object to derive the visual representation from
      logging: (Default value = True)
      **kwargs: 

    Returns:
      : dict -- model representation of the visual object

    """
    visual = initObjectProperties(obj,
                                  phobostype='visual',
                                  ignoretypes='geometry')
    visual['geometry'] = deriveGeometry(obj, logging=logging)
    visual['pose'] = deriveObjectPose(obj, logging=logging)

    # check for material of the visual
    material = deriveMaterial(obj.active_material, logging=logging)
    if material:
        visual['material'] = material['name']

    if obj.lod_levels:
        if 'lodmaxdistances' in obj:
            maxdlist = obj['lodmaxdistances']
        else:
            maxdlist = [
                obj.lod_levels[i + 1].distance
                for i in range(len(obj.lod_levels) - 1)
            ] + [100.0]
        lodlist = []
        for i in range(len(obj.lod_levels)):
            filename = obj.lod_levels[
                i].object.data.name + ioUtils.getOutputMeshtype()
            lodlist.append({
                'start': obj.lod_levels[i].distance,
                'end': maxdlist[i],
                'filename': os.path.join('meshes', filename),
            })
        visual['lod'] = lodlist
    return visual
示例#6
0
文件: urdf.py 项目: Amudtogal/phobos
def writeURDFGeometry(output, element, filepath):
    """This functions writes the URDF geometry for a given element at the end of a given String.

    Args:
      output(str): The String to append the URDF output string on.
      element(dict): A certain element to parse into URDF.
      filepath: 

    Returns:
      : str -- The extended String

    """
    geometry = element['geometry']
    try:
        output.append(indent * 4 + '<geometry>\n')
        if geometry['type'] == 'box':
            output.append(xmlline(5, 'box', ['size'], [l2str(geometry['size'])]))
        elif geometry['type'] == "cylinder":
            output.append(
                xmlline(
                    5, 'cylinder', ['radius', 'length'], [geometry['radius'], geometry['length']]
                )
            )
        elif geometry['type'] == "sphere":
            output.append(xmlline(5, 'sphere', ['radius'], [geometry['radius']]))
        elif geometry['type'] == 'mesh':
            meshpath = ioUtils.getOutputMeshpath(path.dirname(filepath))
            output.append(
                xmlline(
                    5,
                    'mesh',
                    ['filename', 'scale'],
                    [
                        path.join(
                            path.relpath(meshpath, filepath),
                            geometry['filename'] + '.' + ioUtils.getOutputMeshtype(),
                        ),
                        l2str(geometry['scale']),
                    ],
                )
            )
        else:
            raise TypeError("Unknown geometry type")
        output.append(indent * 4 + '</geometry>\n')
    except (KeyError, TypeError) as err:
        log("Misdefined geometry in element " + element['name'] + " " + str(err), "ERROR")