Files
onshape-to-robot/onshape_to_robot/processor_fixed_links.py
T

52 lines
1.7 KiB
Python
Raw Normal View History

from .processor import Processor
from .config import Config
from .robot import Robot, Link, Joint
from .message import info
import fnmatch
class ProcessorFixedLinks(Processor):
"""
Fixed links processor.
When enabled, crawl all the links, and split them into sublinks containing all one part.
"""
def __init__(self, config: Config):
super().__init__(config)
# Check if it is enabled in configuration
self.use_fixed_links: bool | list = config.get("use_fixed_links", False)
def should_fix_links(self, link_name: str) -> bool:
if self.use_fixed_links == True:
return True
elif isinstance(self.use_fixed_links, list):
for entry in self.use_fixed_links:
if fnmatch.fnmatch(link_name, entry):
return True
return False
def process(self, robot: Robot):
if self.use_fixed_links:
print(info(f"Using fixed links ({self.use_fixed_links})"))
new_links = []
for link in robot.links:
if self.should_fix_links(link.name):
for part in link.parts:
part_link = Link(f"{link.name}_{part.name}")
part_link.parts = [part]
new_links.append([link, part_link])
link.parts = []
for parent_link, new_link in new_links:
robot.links.append(new_link)
robot.joints.append(
Joint(
f"{new_link.name}_fixed",
Joint.FIXED,
parent_link,
new_link,
new_link.parts[0].T_world_part,
)
)