Source code for compas_slicer.pre_processing.positioning
from compas.geometry import Frame, Point
from compas.geometry import Transformation
from compas.datastructures import mesh_bounding_box
import logging
logger = logging.getLogger('logger')
__all__ = ['move_mesh_to_point',
'get_mid_pt_base']
[docs]def move_mesh_to_point(mesh, target_point):
"""Moves (translates) a mesh to a target point.
Parameters
----------
mesh: :class:`compas.datastructures.Mesh`
A compas mesh.
target_point: :class:`compas.geometry.Point`
The point to move the mesh to.
"""
mesh_center_pt = get_mid_pt_base(mesh)
# transform mesh
mesh_frame = Frame(mesh_center_pt, (1, 0, 0), (0, 1, 0))
target_frame = Frame(target_point, (1, 0, 0), (0, 1, 0))
T = Transformation.from_frame_to_frame(mesh_frame, target_frame)
mesh.transform(T)
logger.info("Mesh moved to: " + str(target_point))
return mesh
[docs]def get_mid_pt_base(mesh):
"""Gets the middle point of the base (bottom) of the mesh.
Parameters
----------
mesh: :class:`compas.datastructures.Mesh`
A compas mesh.
Returns
-------
mesh_mid_pt: :class:`compas.geometry.Point`
Middle point of the base of the mesh.
"""
# get center bottom point of mesh model
bbox = mesh_bounding_box(mesh)
corner_pts = [bbox[0], bbox[2]]
x = [p[0] for p in corner_pts]
y = [p[1] for p in corner_pts]
z = [p[2] for p in corner_pts]
mesh_mid_pt = Point((sum(x) / 2), (sum(y) / 2), (sum(z) / 2))
return mesh_mid_pt
if __name__ == "__main__":
pass