27
27
28
28
29
29
class BezierCyl2D :
30
+
30
31
def __init__ (self , start_pt = None , end_pt = None , radius = 1 , mid_pt = None ):
31
32
""" Create a bezier from 2 points or an optional mid point
32
33
@param start_pt - start point
@@ -45,8 +46,13 @@ def __init__(self, start_pt=None, end_pt=None, radius=1, mid_pt=None):
45
46
self .p1 = 0.5 * (self .p0 + self .p2 )
46
47
else :
47
48
self .p1 = np .array (mid_pt )
48
- self .radius_2d = radius
49
-
49
+ self .start_radius = radius
50
+ self .end_radius = 100
51
+ #want to pass every single point from start to end and return radius along that path
52
+ def radius (self , t ):
53
+ return (1 - t )* (self .start_radius ) + (t * self .end_radius )
54
+
55
+
50
56
@staticmethod
51
57
def _orientation (start_pt , end_pt ):
52
58
"""Set the orientation and ensure left-right or down-up
@@ -92,7 +98,7 @@ def edge_pts(self, t):
92
98
@return 2d pts, left and right edge"""
93
99
pt = self .pt_axis (t )
94
100
vec = self .tangent_axis (t )
95
- vec_step = self .radius_2d * vec / np .sqrt (vec [0 ] * vec [0 ] + vec [1 ] * vec [1 ])
101
+ vec_step = self .radius ( pt ) * vec / np .sqrt (vec [0 ] * vec [0 ] + vec [1 ] * vec [1 ])
96
102
left_pt = [pt [0 ] - vec_step [1 ], pt [1 ] + vec_step [0 ]]
97
103
right_pt = [pt [0 ] + vec_step [1 ], pt [1 ] - vec_step [0 ]]
98
104
return left_pt , right_pt
@@ -122,7 +128,7 @@ def _rect_corners(self, t1, t2, perc_width=0.3):
122
128
edge_left1 , edge_right1 = self .edge_pts (t1 )
123
129
edge_left2 , edge_right2 = self .edge_pts (t2 )
124
130
125
- vec_step = perc_width * self .radius_2d * vec_ts / np .sqrt (vec_ts [0 ] * vec_ts [0 ] + vec_ts [1 ] * vec_ts [1 ])
131
+ vec_step = perc_width * self .radius ( t1 ) * vec_ts / np .sqrt (vec_ts [0 ] * vec_ts [0 ] + vec_ts [1 ] * vec_ts [1 ])
126
132
rect_left = np .array ([[edge_left1 [0 ] + vec_step [1 ], edge_left1 [1 ] - vec_step [0 ]],
127
133
[edge_left2 [0 ] + vec_step [1 ], edge_left2 [1 ] - vec_step [0 ]],
128
134
[edge_left2 [0 ] - vec_step [1 ], edge_left2 [1 ] + vec_step [0 ]],
@@ -144,7 +150,7 @@ def _rect_corners_interior(self, t1, t2, perc_width=0.3):
144
150
pt1 = self .pt_axis (t1 )
145
151
pt2 = self .pt_axis (t2 )
146
152
147
- vec_step = perc_width * self .radius_2d * vec_ts / np .sqrt (vec_ts [0 ] * vec_ts [0 ] + vec_ts [1 ] * vec_ts [1 ])
153
+ vec_step = perc_width * self .radius ( t1 ) * vec_ts / np .sqrt (vec_ts [0 ] * vec_ts [0 ] + vec_ts [1 ] * vec_ts [1 ])
148
154
rect = np .array ([[pt1 [0 ] + vec_step [1 ], pt1 [1 ] - vec_step [0 ]],
149
155
[pt2 [0 ] + vec_step [1 ], pt2 [1 ] - vec_step [0 ]],
150
156
[pt2 [0 ] - vec_step [1 ], pt2 [1 ] + vec_step [0 ]],
@@ -231,7 +237,7 @@ def is_wire(self):
231
237
@return True/False
232
238
"""
233
239
rad_clip = 3
234
- if self .radius_2d > rad_clip :
240
+ if self .end_radius > rad_clip or self . start_radius > rad_clip :
235
241
return False
236
242
237
243
line_axis = LineSeg2D (self .p0 , self .p2 )
@@ -487,10 +493,11 @@ def read_json(fname, bezier_crv=None):
487
493
axs [2 , i_row ].imshow (im_debug )
488
494
axs [2 , i_row ].set_title (crv .orientation + f" mask 0.25" )
489
495
490
- fname_test = "./Data /test_crv.json"
496
+ fname_test = "./data /test_crv.json"
491
497
crv .write_json (fname_test )
492
498
493
499
read_back_in_crv = BezierCyl2D .read_json (fname_test )
494
500
plt .tight_layout ()
501
+ plt .show ()
495
502
496
503
print ("Done" )
0 commit comments