|
1 | 1 | import time |
2 | 2 |
|
| 3 | +import rich |
| 4 | + |
3 | 5 | from mmcore._test_data import csx as csx_cases |
4 | 6 |
|
5 | | -from mmcore.numeric.intersection.csx import nurbs_csx |
| 7 | +from mmcore.numeric.intersection.csx import nurbs_csx, nurbs_csx_v2 |
6 | 8 |
|
7 | | -from mmcore.geom._nurbs_eval import _tuple_to_nurbs, _nurbs_to_tuple |
| 9 | +from mmcore.geom._nurbs_eval import _tuple_to_nurbs, _nurbs_to_tuple, evaluate_nurbs_curve |
8 | 10 | from mmcore.geom._nurbs_knots import split_curve_multiple |
9 | 11 | import numpy as np |
10 | 12 | from mmcore.geom._nurbs_eval import NURBSCurveTuple |
|
22 | 24 | ) |
23 | 25 |
|
24 | 26 |
|
25 | | - |
26 | 27 | curve2 = NURBSCurveTuple( |
27 | 28 | order=4, |
28 | 29 | knot=np.array([0., 0., 0., 0., 2.10490611, |
|
60 | 61 | ) |
61 | 62 |
|
62 | 63 | surface, curve3 = csx_cases[0] |
| 64 | +surface=_nurbs_to_tuple(surface) |
63 | 65 | curve3=_nurbs_to_tuple(curve3) |
64 | 66 | inters = [] |
65 | 67 | overs = [] |
66 | 68 | pts = [] |
67 | 69 | s = time.time() |
68 | | -result1 = nurbs_csx(_tuple_to_nurbs(curve1), surface) |
| 70 | +result1 = nurbs_csx_v2(curve1, surface,tol=1e-3) |
| 71 | + |
69 | 72 | print(f"CSX 1 performed at: {time.time()-s} secs.") |
| 73 | +print('isolated:') |
| 74 | +if result1[0] is not None: |
| 75 | + rich.print(result1[0]['point']) |
| 76 | +print('overlaps:') |
| 77 | +if result1[1] is not None: |
| 78 | + rich.print(result1[1]['point']) |
| 79 | + |
70 | 80 | s = time.time() |
71 | | -result2 = nurbs_csx(_tuple_to_nurbs(curve2), surface) |
| 81 | +result2 = nurbs_csx_v2(curve2, surface,tol=1e-3) |
72 | 82 | print(f"CSX 2 performed at: {time.time()-s} secs.") |
| 83 | +print('isolated:') |
| 84 | +if result2[0] is not None: |
| 85 | + rich.print(result2[0]['point']) |
| 86 | +print('overlaps:') |
| 87 | +if result2[1] is not None: |
| 88 | + rich.print(result2[1]['point']) |
| 89 | + |
73 | 90 | s = time.time() |
74 | | -result3 = nurbs_csx(_tuple_to_nurbs(curve3), surface) |
| 91 | +result3 = nurbs_csx_v2(curve3, surface,tol=1e-3) |
75 | 92 |
|
76 | 93 | print(f"CSX 3 performed at: {time.time()-s} secs.") |
| 94 | +print('isolated:') |
| 95 | +if result3[0] is not None: |
| 96 | + rich.print(result3[0]['point']) |
| 97 | +print('overlaps:') |
| 98 | +if result3[1] is not None: |
| 99 | + rich.print(result3[1]['point']) |
| 100 | + |
| 101 | +try: |
| 102 | + from mmcore.extras.renderer.renderer3d import Viewer,OrbitCamera |
77 | 103 |
|
| 104 | + viewer=Viewer(camera=OrbitCamera(target= surface.control_points.reshape(-1,3).mean(axis=0))) |
| 105 | + srf = viewer.add_nurbs_surface(surface, color=(0.7, 0.7, 0.7,1.), surface_color=(0.5, 0.5, 0.9, 0.05), v_count=4) |
78 | 106 |
|
| 107 | + def render_result(result,curve,surface=None): |
| 108 | + if surface is not None: |
| 109 | + srf = viewer.add_nurbs_surface(surface, color=(0.3, 0.3, 0.3, 0.05), v_count=4) |
| 110 | + |
| 111 | + crv= viewer.add(curve, color=(0.9, 0.9, 0.9, 1.0)) |
| 112 | + isolated, overlaps = result |
| 113 | + if isolated is not None: |
| 114 | + uvs=[] |
| 115 | + for pt in isolated['point']: |
| 116 | + |
| 117 | + viewer.add(pt, color=(0.0, 1.0, 0.5,1.0),size_px=13) |
| 118 | + |
| 119 | + if overlaps is not None: |
| 120 | + |
| 121 | + for start,end in overlaps['point']: |
| 122 | + viewer.add(start, color=(0.0, 1.0, 0.5, 1.0), size_px=6) |
| 123 | + viewer.add(end, color=(0.0, 1.0, 0.5, 1.0), size_px=6) |
| 124 | + |
| 125 | + for o in overlaps["t"]: |
| 126 | + |
| 127 | + t0 = o[0] |
| 128 | + t1 = o[-1] |
| 129 | + |
| 130 | + pts=np.linspace(t0,t1,500) |
| 131 | + for t in pts: |
| 132 | + |
| 133 | + evl=evaluate_nurbs_curve(curve,t,d_order=0) |
| 134 | + viewer.add_point3d(evl['C'],color=(0.0, 1.0, 0.5, 1.0), size_px=3) |
| 135 | + render_result(result1,curve1) |
| 136 | + render_result(result2, curve2) |
| 137 | + render_result(result3, curve3) |
| 138 | + viewer.run() |
79 | 139 |
|
80 | | -try: |
81 | | - from mmcore.extras.renderer import CADRenderer, Camera |
82 | | - |
83 | | - print(dir(Camera)) |
84 | | - |
85 | | - |
86 | | - renderer = CADRenderer(camera=Camera(zoom=50.0, near=0.1)) |
87 | | - |
88 | | - tess=renderer.add_nurbs_surface(surface, color=(0.9,0.9,0.9),surface_color = (0.5, 0.5, 0.9, 0.1)) |
89 | | - |
90 | | - def render_intersects(renderer,curve1,result1, curve_color=(0.0, 1.0, 0.5),inter_color=(1.0, 0.5, 0.0)): |
91 | | - overlaps_prms=[] |
92 | | - |
93 | | - for item in result1: |
94 | | - print(item) |
95 | | - if item[0]=='overlap': |
96 | | - tinter,uinter,vinter=item[2] |
97 | | - |
98 | | - renderer.add_point(item[1][0], np.array(inter_color), 4) |
99 | | - |
100 | | - renderer.add_point(item[1][1], np.array(inter_color), 4) |
101 | | - overlaps_prms.extend((tinter.low,tinter.upp)) |
102 | | - |
103 | | - |
104 | | - else: |
105 | | - renderer.add_point(item[1], np.array(inter_color), 4) |
106 | | - if len(overlaps_prms)>0: |
107 | | - overlaps_prms=np.unique(overlaps_prms).tolist() |
108 | | - |
109 | | - at_start=(overlaps_prms[0]-curve1.interval()[0])<=1e-6 |
110 | | - if at_start: |
111 | | - del overlaps_prms[0] |
112 | | - if (curve1.interval()[1]-overlaps_prms[-1] ) <= 1e-6: |
113 | | - del overlaps_prms[-1] |
114 | | - |
115 | | - |
116 | | - for i,segm in enumerate(split_curve_multiple(curve1, overlaps_prms)): |
117 | | - |
118 | | - if ((i%2) ==0) : |
119 | | - |
120 | | - renderer.add_nurbs_curve( |
121 | | - _tuple_to_nurbs(segm), |
122 | | - color=np.array(inter_color) if at_start else np.array(curve_color) |
123 | | - ) |
124 | | - else: |
125 | | - renderer.add_nurbs_curve( |
126 | | - _tuple_to_nurbs(segm), |
127 | | - color=np.array(curve_color) if at_start else np.array(inter_color) |
128 | | - ) |
129 | | - else: |
130 | | - |
131 | | - renderer.add_nurbs_curve( |
132 | | - _tuple_to_nurbs(curve1), |
133 | | - color=np.array(curve_color) |
134 | | - ) |
135 | | - |
136 | | - render_intersects(renderer,curve1,result1) |
137 | | - render_intersects(renderer, curve2, result2) |
138 | | - #render_intersects(renderer, curve3, result3) |
139 | | - renderer.run() |
140 | 140 |
|
141 | 141 | except ModuleNotFoundError as err: |
142 | 142 | print("mmcore.renderer is not installed, skip preview.") |
|
0 commit comments