hub/venv/lib/python3.7/site-packages/trimesh/path/util.py

50 lines
1.4 KiB
Python

import numpy as np
from ..util import is_ccw # NOQA
def concatenate(paths):
"""
Concatenate multiple paths into a single path.
Parameters
-------------
paths : (n,) Path
Path objects to concatenate
Returns
-------------
concat : Path, Path2D, or Path3D
Concatenated result
"""
# if only one path object just return copy
if len(paths) == 1:
return paths[0].copy()
# length of vertex arrays
vert_len = np.array([len(i.vertices) for i in paths])
# how much to offset each paths vertex indices by
offsets = np.append(0.0, np.cumsum(vert_len))[:-1].astype(np.int64)
# resulting entities
entities = []
# resulting vertices
vertices = []
# resulting metadata
metadata = {}
for path, offset in zip(paths, offsets):
# update metadata
metadata.update(path.metadata)
# copy vertices, we will stack later
vertices.append(path.vertices.copy())
# copy entity then reindex points
for entity in path.entities:
entities.append(entity.copy())
entities[-1].points += offset
# generate the single new concatenated path
# use input types so we don't have circular imports
concat = type(path)(metadata=metadata,
entities=entities,
vertices=np.vstack(vertices))
return concat