Source code for concepts.simulator.cad_asset_utils.alphabet_arial
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File : alphabet_arial.py
# Author : Jiayuan Mao
# Email : maojiayuan@gmail.com
# Date : 08/01/2024
#
# This file is part of Project Concepts.
# Distributed under terms of the MIT license.
import os.path as osp
from typing import Optional
from concepts.simulator.urdf_utils.obj2urdf import ObjectUrdfBuilder
from concepts.simulator.cad_asset_utils.assets_base import CADAssetCollection
[docs]
class AlphabetArialCollection(CADAssetCollection):
"""A collection of object URDFs for the Arial alphabet."""
[docs]
def __init__(self, asset_root: Optional[str] = None, use_vhacd: bool = False):
if asset_root is None:
asset_root = self.get_default_asset_root()
self.root = asset_root
self.uppercase_root = osp.join(asset_root, 'upper')
self.lowercase_root = osp.join(asset_root, 'lower')
self.available_models = dict()
for letter in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
self.available_models[letter] = osp.join(self.uppercase_root, f'{letter}.obj')
for letter in 'abcdefghijklmnopqrstuvwxyz':
self.available_models[letter] = osp.join(self.lowercase_root, f'{letter}.obj')
self.use_vhacd = use_vhacd
[docs]
def get_default_asset_root(self) -> str:
return self.get_assets_path('objects', 'alphabet_arial')
[docs]
def build_urdf(self, object_path) -> None:
object_dir = osp.dirname(object_path)
object_builder = ObjectUrdfBuilder(object_dir)
object_builder.build_urdf(object_path, force_overwrite=True, decompose_concave=True, force_decompose=False, center='mass')
[docs]
def assert_build_urdf(self, identifier) -> str:
assert identifier in self.available_models, f'Unknown identifier: {identifier}'
obj_path = self.available_models[identifier]
urdf_path = obj_path + '.urdf'
if not osp.isfile(urdf_path):
self.build_urdf(obj_path)
return urdf_path
[docs]
def get_urdf(self, identifier: str) -> str:
return self.assert_build_urdf(identifier)
[docs]
def get_obj_filename(self, identifier: str, vhacd: Optional[bool] = None) -> str:
assert identifier in self.available_models, f'Unknown identifier: {identifier}'
if vhacd is None:
vhacd = self.use_vhacd
if vhacd:
return self.available_models[identifier].replace('.obj', '_vhacd.obj')
return self.available_models[identifier]