Source code for genepy3d_gpl.obj.curves

"""Methods for working with Curve objects.
"""

import warnings
warnings.filterwarnings("ignore", category=FutureWarning)

import numpy as np
from genepy3d.obj.points import Points

[docs] def intersect(c1, c2): """Intersection between two curves. Args: c1 (Curve): curve object. c2 (Curve): curve object. Returns: list of intersected points. Examples: .. code-block:: python import numpy as np from genepy3d.obj.curves import Curve from genepy3d_gpl.obj import curves import matplotlib.pyplot as plt # Create two dummy curves crv1 = Curve(([0.,1.,2.],[0.,1.,2.],[0.,0.,0.])) crv2 = Curve(([1.5,1.5,1.5],[0.,1.,2.],[0.,0.,0.])) # Check intersection pnts = curves.intersect(crv1,crv2) # Plot curves and intersected points fig = plt.figure() ax = fig.add_subplot(111,projection='3d') crv1.plot(ax,show_root=False); crv2.plot(ax,show_root=False); pnts.plot(ax); """ from CGAL.CGAL_Kernel import Point_3, Segment_3 from CGAL.CGAL_AABB_tree import AABB_tree_Segment_3_soup plst = [] # create a list of segments from c1 segments = [] for i in range(len(c1.coors)-1): p1 = Point_3(c1.coors[i][0],c1.coors[i][1],c1.coors[i][2]) p2 = Point_3(c1.coors[i+1][0],c1.coors[i+1][1],c1.coors[i+1][2]) segment = Segment_3(p1,p2) segments.append(segment) # initialize AABB tree search tree = AABB_tree_Segment_3_soup(segments) # searching intersection between each c2 segment and c1. for i in range(len(c2.coors)-1): p1 = Point_3(c2.coors[i][0],c2.coors[i][1],c2.coors[i][2]) p2 = Point_3(c2.coors[i+1][0],c2.coors[i+1][1],c2.coors[i+1][2]) segment_query = Segment_3(p1,p2) if tree.do_intersect(segment_query): intersections = [] tree.all_intersections(segment_query,intersections) for inter in intersections: p = inter[0].get_Point_3() plst.append([p.x(),p.y(),p.z()]) return Points(np.array(plst))