Compare commits
2 Commits
e91578347c
...
1a02956519
Author | SHA1 | Date | |
---|---|---|---|
1a02956519 | |||
817db1a623 |
|
@ -166,8 +166,10 @@ class PlateLayout:
|
|||
# compute coordinates and various measurements for fixed radii of plate and tubes
|
||||
self.target_plate_radius = 160.0
|
||||
self.target_center_hole_radius = 7.5
|
||||
self.target_radius_1 = 50.5
|
||||
self.target_radius_1 = 50.5 # should be 50 mm according to data sheet but in fact its a bit more than that..
|
||||
self.target_radius_1_inner = 94.0/2.0
|
||||
self.target_radius_2 = 20.0
|
||||
self.target_radius_2_inner = 34.0/2.0
|
||||
teeth = 200
|
||||
|
||||
D = 2 * self.target_plate_radius
|
||||
|
@ -184,6 +186,7 @@ class PlateLayout:
|
|||
|
||||
# parameters for dispenser gears
|
||||
self.dispenser_module = 1.0
|
||||
plate_height = 8.0
|
||||
dispenser_1_target_pitch_diameter_big = 50.0
|
||||
dispenser_1_target_pitch_diameter_small = 15.0
|
||||
dispenser_1_teeth_big = int(dispenser_1_target_pitch_diameter_big/self.dispenser_module)
|
||||
|
@ -259,7 +262,8 @@ class PlateLayout:
|
|||
p2 = dispenser_1_pitch_diameter_small
|
||||
a1 = self.dispenser_module
|
||||
a2 = self.dispenser_module
|
||||
offset_1 = sqrt((p1 / 2 + p2 / 2) ** 2 - (p1 / 2 + a1) ** 2) - p2 / 2 - a2
|
||||
h = plate_height/2.0
|
||||
offset_1 = sqrt((p1 / 2 + p2 / 2) ** 2 - (p1 / 2 + a1 + h) ** 2) - p2 / 2 - a2
|
||||
print("dispenser 1 offset = {}".format(offset_1))
|
||||
|
||||
print(" big circle tangent points: ")
|
||||
|
@ -294,7 +298,7 @@ class PlateLayout:
|
|||
self.tube_1_cuts[k]['tangent_point'] = t1
|
||||
self.tube_1_cuts[k]['angle_deg'] = angle1_deg
|
||||
self.tube_1_cuts[k]['length'] = dispenser_1_outer_diameter_small
|
||||
self.tube_1_cuts[k]['width'] = 5.0
|
||||
self.tube_1_cuts[k]['width'] = 4.0
|
||||
|
||||
plt.plot(cut_center[0], cut_center[1], 'o')
|
||||
|
||||
|
@ -321,7 +325,7 @@ class PlateLayout:
|
|||
p2 = dispenser_2_pitch_diameter_small
|
||||
a1 = self.dispenser_module
|
||||
a2 = self.dispenser_module
|
||||
offset_2 = sqrt((p1 / 2 + p2 / 2) ** 2 - (p1 / 2 + a1) ** 2) - p2 / 2 - a2
|
||||
offset_2 = sqrt((p1 / 2 + p2 / 2) ** 2 - (p1 / 2 + a1 + h) ** 2) - p2 / 2 - a2
|
||||
print("dispenser 2 offset = {}".format(offset_2))
|
||||
|
||||
print(" small circle tangent points: ")
|
||||
|
@ -353,7 +357,7 @@ class PlateLayout:
|
|||
self.tube_2_cuts[k]['tangent_point'] = t1
|
||||
self.tube_2_cuts[k]['angle_deg'] = angle1_deg
|
||||
self.tube_2_cuts[k]['length'] = dispenser_2_outer_diameter_small
|
||||
self.tube_2_cuts[k]['width'] = 5.0
|
||||
self.tube_2_cuts[k]['width'] = 4.0
|
||||
|
||||
plt.plot(cut_center[0], cut_center[1], 'o')
|
||||
|
||||
|
@ -408,7 +412,24 @@ class PlateLayout:
|
|||
if output_all:
|
||||
f_lines = self.output_whole(f_lines)
|
||||
else:
|
||||
f_lines = self.output_segment(f_lines, 2, split_at_big_circles=False)
|
||||
f_lines += '<g>\n'
|
||||
f_lines = self.output_segment(f_lines, 2, split_at_big_circles=True)
|
||||
f_lines += '</g>\n'
|
||||
|
||||
# output other parts
|
||||
r = np.linalg.norm(self.tube_1_coords[0]) - self.target_radius_1
|
||||
f_lines += '<g>\n'
|
||||
f_lines += svg_circle('1', 'center_ring_clamp', (0,0), r)
|
||||
f_lines += svg_circle('2', 'center_ring_clamp', (0,0), self.target_center_hole_radius)
|
||||
height = 5.0
|
||||
width = 40.0
|
||||
f_lines += svg_rect(x=-width/2.0, y=-height/2.0, width=width, height=height)
|
||||
f_lines += '</g>\n'
|
||||
|
||||
f_lines += '<g>\n'
|
||||
f_lines += svg_circle('1', 'center_ring', (0,0), r)
|
||||
f_lines += svg_circle('2', 'center_ring', (0,0), self.target_center_hole_radius)
|
||||
f_lines += '</g>\n'
|
||||
|
||||
f_lines.append('</svg>\n')
|
||||
|
||||
|
@ -417,6 +438,10 @@ class PlateLayout:
|
|||
fw.writelines(f_lines)
|
||||
fw.close()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
pass
|
||||
|
||||
|
||||
|
@ -452,13 +477,13 @@ class PlateLayout:
|
|||
f_lines += svg_gear_marking(self.tube_1_tangents[k_next], self.tube_1_coords[k_next])
|
||||
|
||||
# cutout rectangle for big circles
|
||||
f_lines += svg_rectangle(k_next, 'cut', self.tube_1_cuts[k_next])
|
||||
f_lines += svg_rect_trans(k_next, 'cut', self.tube_1_cuts[k_next])
|
||||
|
||||
# gear pos for small circle
|
||||
f_lines += svg_gear_marking(self.tube_2_tangents[k], self.tube_2_coords[k])
|
||||
|
||||
# cutout rectangle for small circles
|
||||
f_lines += svg_rectangle(k, 'cut', self.tube_2_cuts[k])
|
||||
f_lines += svg_rect_trans(k, 'cut', self.tube_2_cuts[k])
|
||||
|
||||
# first segment border
|
||||
f_lines += svg_segment_border_inner(self.tube_1_angles[k], self.target_center_hole_radius,
|
||||
|
@ -499,38 +524,38 @@ class PlateLayout:
|
|||
f_lines += svg_arc(p1, p2, self.target_center_hole_radius, 0, 1)
|
||||
|
||||
# small circles arcs
|
||||
f_lines += svg_half_circle(k, 'small circle', self.tube_2_coords[k], self.target_radius_2,
|
||||
f_lines += svg_half_circle(k, 'small circle', self.tube_2_coords[k], self.target_radius_2_inner,
|
||||
self.tube_2_angles[k])
|
||||
f_lines += svg_half_circle(k_next, 'small circle', self.tube_2_coords[k_next], self.target_radius_2,
|
||||
f_lines += svg_half_circle(k_next, 'small circle', self.tube_2_coords[k_next], self.target_radius_2_inner,
|
||||
self.tube_2_angles[k_next], orientation_flag=0)
|
||||
|
||||
# big circle
|
||||
f_lines += svg_circle(k, 'big circle', self.tube_1_coords[k_next], self.target_radius_1)
|
||||
f_lines += svg_circle(k, 'big circle', self.tube_1_coords[k_next], self.target_radius_1_inner)
|
||||
|
||||
# gear pos for big circle
|
||||
f_lines += svg_gear_marking(self.tube_1_tangents[k_next], self.tube_1_coords[k_next])
|
||||
|
||||
# cutout rectangle for big circles
|
||||
f_lines += svg_rectangle(k, 'cut', self.tube_1_cuts[k_next])
|
||||
f_lines += svg_rectangle(k, 'cut', self.tube_1_cuts[k_next_next])
|
||||
f_lines += svg_rect_trans(k, 'cut', self.tube_1_cuts[k_next])
|
||||
f_lines += svg_rect_trans(k, 'cut', self.tube_1_cuts[k_next_next])
|
||||
|
||||
# gear pos for small circle
|
||||
f_lines += svg_gear_marking(self.tube_2_tangents[k_next], self.tube_2_coords[k_next])
|
||||
|
||||
# cutout rectangle for small circles
|
||||
f_lines += svg_rectangle(k_next, 'cut', self.tube_2_cuts[k_next])
|
||||
f_lines += svg_rect_trans(k_next, 'cut', self.tube_2_cuts[k_next])
|
||||
|
||||
# first segment border
|
||||
f_lines += svg_segment_border_inner(self.tube_2_angles[k], self.target_center_hole_radius,
|
||||
self.tube_2_coords[k], self.target_radius_2, puzzle_scale=0.5, placement=0.25)
|
||||
self.tube_2_coords[k], self.target_radius_2_inner, puzzle_scale=0.5, placement=0.25)
|
||||
f_lines += svg_segment_border_outer(self.tube_2_angles[k], self.target_plate_radius, self.plate_module,
|
||||
self.tube_2_coords[k], self.target_radius_2)
|
||||
self.tube_2_coords[k], self.target_radius_2_inner)
|
||||
|
||||
# second segment border
|
||||
f_lines += svg_segment_border_inner(self.tube_2_angles[k_next], self.target_center_hole_radius,
|
||||
self.tube_2_coords[k_next], self.target_radius_2, puzzle_scale=0.5, placement=0.25)
|
||||
self.tube_2_coords[k_next], self.target_radius_2_inner, puzzle_scale=0.5, placement=0.25)
|
||||
f_lines += svg_segment_border_outer(self.tube_2_angles[k_next], self.target_plate_radius, self.plate_module,
|
||||
self.tube_2_coords[k_next], self.target_radius_2)
|
||||
self.tube_2_coords[k_next], self.target_radius_2_inner)
|
||||
|
||||
|
||||
# find outmost points for segment cut lines
|
||||
|
@ -627,13 +652,13 @@ class PlateLayout:
|
|||
|
||||
# output cuts for big circles
|
||||
for k, c in self.tube_1_cuts.items():
|
||||
text = svg_rectangle(k, 'cut', c['center'], c['length'], c['width'], c['angle_deg'])
|
||||
text = svg_rect_trans(k, 'cut', c)
|
||||
f_lines = f_lines + text
|
||||
pass
|
||||
|
||||
# output cuts for small circles
|
||||
for k, c in self.tube_2_cuts.items():
|
||||
text = svg_rectangle(k, 'cut', c['center'], c['length'], c['width'], c['angle_deg'])
|
||||
text = svg_rect_trans(k, 'cut', c)
|
||||
f_lines = f_lines + text
|
||||
pass
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="feeder_gears.svg"
|
||||
sodipodi:docname="dispenser_gears.svg"
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
viewBox="0 0 744.09448819 1052.3622047"
|
||||
|
@ -23,17 +23,17 @@
|
|||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.8101934"
|
||||
inkscape:cx="196.01806"
|
||||
inkscape:cy="474.03501"
|
||||
inkscape:zoom="2.5600001"
|
||||
inkscape:cx="116.84746"
|
||||
inkscape:cy="648.90954"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="svg2"
|
||||
showgrid="false"
|
||||
inkscape:window-width="960"
|
||||
inkscape:window-height="1028"
|
||||
inkscape:window-x="960"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1056"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="0" />
|
||||
inkscape:window-maximized="1" />
|
||||
<defs
|
||||
id="defs4" />
|
||||
<metadata
|
||||
|
@ -72,7 +72,7 @@
|
|||
</g>
|
||||
<g
|
||||
info="N:16; Pitch:22.2632550254; Pressure Angle: 20.0"
|
||||
transform="matrix(0.98261279,-0.18566662,0.18566662,0.98261279,416.37006,413.37433)"
|
||||
transform="matrix(0.99144484,0.13052619,-0.13052619,0.99144484,402.83559,425.52773)"
|
||||
inkscape:label="Gear16"
|
||||
id="g4161">
|
||||
<path
|
||||
|
@ -89,38 +89,38 @@
|
|||
id="circle4165" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.81840914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 208.00782,413.69031 139.45312,0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.18522573px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 208.00782,413.69031 292.47544,0"
|
||||
id="path4205"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 296.28906,412.90906 c 0.39063,-120.50782 0.39063,-120.50782 0.39063,-120.50782 C 417.1875,413.29968 417.1875,413.29968 417.1875,413.29968"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.9883278px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 295.9019,425.20469 C 296.24829,292.4573 296.24829,292.4573 296.24829,292.4573 403.10616,425.63498 403.10616,425.63498 403.10616,425.63498"
|
||||
id="path4212"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="322.07031"
|
||||
y="310.56531"
|
||||
x="325.39062"
|
||||
y="320.33093"
|
||||
id="text4214"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4216"
|
||||
x="322.07031"
|
||||
y="310.56531"
|
||||
x="325.39062"
|
||||
y="320.33093"
|
||||
style="font-size:6.25px">p1/2</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="391.20636"
|
||||
y="384.9657"
|
||||
x="385.5423"
|
||||
y="393.36414"
|
||||
id="text4214-3"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4216-6"
|
||||
x="391.20636"
|
||||
y="384.9657"
|
||||
x="385.5423"
|
||||
y="393.36414"
|
||||
style="font-size:6.25px">p2/2</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
|
@ -133,7 +133,7 @@
|
|||
x="228.71094"
|
||||
y="324.62781"
|
||||
style="font-size:6.25px"
|
||||
id="tspan4246"> p1/2 + a1</tspan><tspan
|
||||
id="tspan4246"> p1/2 + a1 + h</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="228.71094"
|
||||
y="332.44031"
|
||||
|
@ -141,27 +141,27 @@
|
|||
id="tspan4248">(= Outside circle)</tspan></text>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 351.95313,417.20593 c 0,4.10157 0,4.10157 0,4.10157"
|
||||
d="m 338.67188,428.53405 c 0,4.10157 0,4.10157 0,4.10157"
|
||||
id="path4252"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.96795285px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 295.70311,419.35437 122.05746,0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.90801376px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 294.87447,430.40291 107.40902,0"
|
||||
id="path4254"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 375.58594,373.45593 c 4.88281,-3.71094 4.88281,-3.71094 4.88281,-3.71094"
|
||||
d="m 364.84375,383.41687 c 4.88281,-3.71094 4.88281,-3.71094 4.88281,-3.71094"
|
||||
id="path4258"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 294.92188,292.01062 c 3.51562,-2.14844 3.51562,-2.14844 3.51562,-2.14844"
|
||||
d="m 293.95513,292.83926 c 3.51562,-2.14844 3.51562,-2.14844 3.51562,-2.14844"
|
||||
id="path4260"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 415.18699,415.16107 c 4.29687,-3.51562 4.29687,-3.51562 4.29687,-3.51562"
|
||||
d="m 401.12449,427.46576 c 4.29687,-3.51562 4.29687,-3.51562 4.29687,-3.51562"
|
||||
id="path4262"
|
||||
inkscape:connector-curvature="0" />
|
||||
<flowRoot
|
||||
|
@ -187,41 +187,41 @@
|
|||
x="51.5625"
|
||||
y="596.11218"
|
||||
style="font-size:6.25px" /></flowRegion><flowPara
|
||||
id="flowPara4278">(p1/2 + p2/2)**2 = (p1/2 + a1)**2 + (p2/2 + a2 + x)**2</flowPara><flowPara
|
||||
id="flowPara4278">(p1/2 + p2/2)**2 = (p1/2 + a1 + h)**2 + (p2/2 + a2 + x)**2</flowPara><flowPara
|
||||
id="flowPara4374" /><flowPara
|
||||
id="flowPara4372"> => Offset x = sqrt((p1/2 + p2/2)**2 - (p1/2 + a1)**2) - p2/2 - a2</flowPara></flowRoot> <text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="324.21875"
|
||||
y="428.14343"
|
||||
x="323.4375"
|
||||
y="435.37"
|
||||
id="text4296"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4298"
|
||||
x="324.21875"
|
||||
y="428.14343"
|
||||
x="323.4375"
|
||||
y="435.37"
|
||||
style="font-size:6.25px">x</tspan></text>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 295.70313,417.49892 c 0,4.10157 0,4.10157 0,4.10157"
|
||||
d="m 295.50782,427.91413 c 0,4.10157 0,4.10157 0,4.10157"
|
||||
id="path4252-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 417.77344,417.10829 c 0,4.10157 0,4.10157 0,4.10157"
|
||||
d="m 402.92969,427.45985 c 0,4.10157 0,4.10157 0,4.10157"
|
||||
id="path4252-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="373.82812"
|
||||
y="427.36218"
|
||||
x="355.07812"
|
||||
y="435.56531"
|
||||
id="text4321"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4323"
|
||||
x="373.82812"
|
||||
y="427.36218"
|
||||
x="355.07812"
|
||||
y="435.56531"
|
||||
style="font-size:6.25px">p2/2 + a2</tspan></text>
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
|
@ -239,7 +239,8 @@
|
|||
id="flowPara4333">p2: Pitch diameter gear 2</flowPara><flowPara
|
||||
id="flowPara4335">a1: Addendum gear 1 = module 1</flowPara><flowPara
|
||||
id="flowPara4337">a2: Addendum gear 2 = module 2</flowPara><flowPara
|
||||
id="flowPara4376">x : Offset</flowPara></flowRoot> <flowRoot
|
||||
id="flowPara4376">x : Offset</flowPara><flowPara
|
||||
id="flowPara4212">h : half of the plate height</flowPara></flowRoot> <flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot4360"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
|
||||
|
@ -305,7 +306,7 @@
|
|||
</g>
|
||||
<g
|
||||
info="N:53; Pitch:16.6974412691; Pressure Angle: 25.0"
|
||||
transform="translate(224.50825,840.97022)"
|
||||
transform="translate(147.94575,906.59522)"
|
||||
inkscape:label="Gear53"
|
||||
inkscape:transform-center-x="-0.086406844"
|
||||
id="g6277">
|
||||
|
@ -412,4 +413,19 @@
|
|||
x="0"
|
||||
style="font-style:normal;font-weight:normal;font-size:13px;font-family:'Bitstream Vera Sans', sans-serif;text-align:center;text-anchor:middle;fill:#f6921e">Base diameter: 35.346 mm</text>
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4208"
|
||||
d="m 206.90296,426.67235 292.47544,0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.18346453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.18346453, 2.36692905;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4210"
|
||||
d="m 207.45539,438.54953 292.47544,0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.18522573px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 298.1593,425.68469 c -4.10157,0 -4.10157,0 -4.10157,0"
|
||||
id="path4252-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
|
@ -8,11 +8,18 @@ Lasercut segments for plate. Profile: FLB_Sperrholz_4mm_Natur_new
|
|||
Important: SVG produced by python script needs to be openend, transformed and saved in inkscape, otherwise import in CorelDraw fails
|
||||
|
||||
In progress:
|
||||
- automate generation of plate segment
|
||||
|
||||
|
||||
TODO:
|
||||
- stack 2 plates for better stability (add cuts at small circles)
|
||||
- add displacement between gear cuts and circles to have more stability at the cuts
|
||||
- second ring above the first plate to fix the containers and hide the gear mechanic (or manufacure them from acrylic to show the mechanic)
|
||||
- think about if stacked plate is to thick for a single gear (i.e. we may need two gears in order to transfer motion from below the plate to dispensers)
|
||||
- hole for hinges of big dispenser gears (only if necessary)
|
||||
- shovels for dispensers by cutting segments from a sphere
|
||||
|
||||
DONE:
|
||||
- center ring for holding the plates
|
||||
- make circles for lower plate of the two plates a bit smaller s.t. tube are perfectly set into the upper plate and fixed by the lower plate
|
||||
- stack 2 plates for better stability (add cuts at small circles)
|
||||
- automate generation of plate segment
|
||||
- connectors for segments (jigsaw puzzle style)
|
||||
- think about if stacked plate is to thick for a single gear (i.e. we may need two gears in order to transfer motion from below the plate to dispensers) -> solved by moving hinge point of the gear in between the two plates
|
||||
|
|
|
@ -161,14 +161,7 @@ def svg_arc(p1, p2, r, large_arc, sweep):
|
|||
|
||||
return text
|
||||
|
||||
|
||||
def svg_rectangle(id, name, c):
|
||||
center = c['center']
|
||||
width = c['length']
|
||||
height = c['width']
|
||||
angle = c['angle_deg']
|
||||
x = np.sqrt(center[0] ** 2 + center[1] ** 2) - width / 2
|
||||
y = - height
|
||||
def svg_rect(x, y, width, height, angle=0.0):
|
||||
text = ['<g transform="rotate({})">\n '
|
||||
'<rect x="{}mm" y="{}mm" width="{}mm" height="{}mm" style="fill:none;stroke-width:0.1mm;stroke:rgb(0,0,0)" />\n '
|
||||
'</g>\n'
|
||||
|
@ -176,6 +169,16 @@ def svg_rectangle(id, name, c):
|
|||
|
||||
return text
|
||||
|
||||
def svg_rect_trans(id, name, c):
|
||||
center = c['center']
|
||||
width = c['length']
|
||||
height = c['width']
|
||||
angle = c['angle_deg']
|
||||
x = np.sqrt(center[0] ** 2 + center[1] ** 2) - width / 2
|
||||
y = - height
|
||||
|
||||
return svg_rect(x, y, width, height, angle)
|
||||
|
||||
|
||||
def svg_line(p1, p2, width=1.0):
|
||||
text = ['<line x1="{}mm" y1="{}mm" x2="{}mm" y2="{}mm" style="stroke:rgb(0,0,0);stroke-width:{}mm" />'.format(p1[0],
|
||||
|
|
Loading…
Reference in New Issue
Block a user