designix 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +17 -0
- package/.eslintrc.cjs +24 -0
- package/.prettierignore +15 -0
- package/.prettierrc +8 -0
- package/README.md +27 -0
- package/export_svg/base.svg +1 -0
- package/export_svg/base_cut.svg +1 -0
- package/export_svg/base_hollow.svg +1 -0
- package/export_svg/base_top.svg +1 -0
- package/export_svg/calculation_of_initAngle2.svg +1 -0
- package/export_svg/circles.svg +1 -0
- package/export_svg/circles_amplitude-offset.svg +1 -0
- package/export_svg/circles_amplitude-scale.svg +1 -0
- package/export_svg/circles_angle.svg +1 -0
- package/export_svg/default_param_blank.svg +1 -0
- package/export_svg/dummy_pole_static.svg +1 -0
- package/export_svg/dummy_pole_static_face.svg +1 -0
- package/export_svg/gear_addendeum_dedendum_sizes.svg +9 -0
- package/export_svg/gear_addendum_and_dedendum.svg +1 -0
- package/export_svg/gear_adherence_replaced_by_teeth.svg +1 -0
- package/export_svg/gear_base_circle_for_involute.svg +2 -0
- package/export_svg/gear_base_left_circle_for_involute.svg +2 -0
- package/export_svg/gear_base_right_circle_for_involute.svg +2 -0
- package/export_svg/gear_inter_axis_maximum_distance.svg +1 -0
- package/export_svg/gear_inter_axis_minimum_distance.svg +1 -0
- package/export_svg/gear_large_base_radius.svg +5 -0
- package/export_svg/gear_module_and_tooth_thickness.svg +3 -0
- package/export_svg/gear_optimum_base_radius.svg +5 -0
- package/export_svg/gear_optimum_base_radius_with_longer_inter_axis.svg +5 -0
- package/export_svg/gear_right_left_base_circles.svg +1 -0
- package/export_svg/gear_small_base_radius.svg +5 -0
- package/export_svg/gear_wheel_circles.svg +2 -0
- package/export_svg/gears.svg +71 -0
- package/export_svg/gears_motion_transmission_via_adherence.svg +1 -0
- package/export_svg/heliostat.svg +1 -0
- package/export_svg/heliostat2_face_sizing.svg +1 -0
- package/export_svg/heliostat2_side_sizing.svg +1 -0
- package/export_svg/heliostat_face_sizing.svg +1 -0
- package/export_svg/heliostat_overview.svg +1 -0
- package/export_svg/heliostat_side.svg +1 -0
- package/export_svg/heliostat_side_sizing.svg +1 -0
- package/export_svg/involute_of_circle.svg +19 -0
- package/export_svg/involute_of_circle_R0.svg +1 -0
- package/export_svg/involute_of_circle_Ri1_u0.svg +1 -0
- package/export_svg/involute_of_circle_Ri2_u2.svg +1 -0
- package/export_svg/left_side_angle_kitchen.svg +1 -0
- package/export_svg/negative_involute_of_circle_R0.svg +1 -0
- package/export_svg/point_c_position_and_speed_negative.svg +1 -0
- package/export_svg/point_c_position_and_speed_positive.svg +1 -0
- package/export_svg/pole_rotor.svg +1 -0
- package/export_svg/pole_rotor_cut.svg +1 -0
- package/export_svg/pole_rotor_ends.svg +1 -0
- package/export_svg/pole_stator.svg +3 -0
- package/export_svg/pole_stator_E2.svg +3 -0
- package/export_svg/pole_stator_bottom.svg +1 -0
- package/export_svg/pole_stator_cut.svg +1 -0
- package/export_svg/pole_stator_face.svg +1 -0
- package/export_svg/pole_stator_right.svg +1 -0
- package/export_svg/rake.svg +1 -0
- package/export_svg/rake_door.svg +1 -0
- package/export_svg/rake_face.svg +1 -0
- package/export_svg/rake_side.svg +1 -0
- package/export_svg/rake_side_stopper.svg +1 -0
- package/export_svg/rake_top.svg +1 -0
- package/export_svg/rake_top_stopper.svg +1 -0
- package/export_svg/rectangle.svg +1 -0
- package/export_svg/rectangle_height.svg +1 -0
- package/export_svg/rectangle_width.svg +1 -0
- package/export_svg/right_side_angle_kitchen.svg +1 -0
- package/export_svg/rod.svg +1 -0
- package/export_svg/rod_cut.svg +1 -0
- package/export_svg/rod_plate.svg +1 -0
- package/export_svg/rod_top.svg +1 -0
- package/export_svg/spider.svg +1 -0
- package/export_svg/spider_lateral.svg +1 -0
- package/export_svg/spider_profile.svg +1 -0
- package/export_svg/surface.svg +3 -0
- package/export_svg/surface_crenel.svg +1 -0
- package/export_svg/surface_extremities.svg +2 -0
- package/export_svg/surface_lz.svg +1 -0
- package/export_svg/surface_main.svg +1 -0
- package/export_svg/surface_power.svg +2 -0
- package/export_svg/surface_space_evolution.svg +1 -0
- package/export_svg/surface_space_shape.svg +1 -0
- package/export_svg/swing.svg +1 -0
- package/export_svg/swing_face.svg +1 -0
- package/export_svg/swing_side.svg +1 -0
- package/export_svg/swing_top.svg +1 -0
- package/export_svg/swing_with_rod.svg +1 -0
- package/export_svg/trapeze.svg +1 -0
- package/export_svg/trapeze_rod.svg +1 -0
- package/export_svg/trapeze_side.svg +1 -0
- package/export_svg/trapeze_top.svg +1 -0
- package/export_svg/verify_contour_1.svg +1 -0
- package/export_svg/verify_contour_1_l1.svg +1 -0
- package/export_svg/verify_contour_1_r1.svg +1 -0
- package/export_svg/verify_line.svg +1 -0
- package/export_svg/verify_line_2_l1cx.svg +1 -0
- package/export_svg/verify_line_p1x.svg +1 -0
- package/export_svg/verify_point.svg +1 -0
- package/export_svg/verify_point_p1x.svg +1 -0
- package/export_svg/verify_vector_p1x.svg +1 -0
- package/package.json +76 -0
- package/src/dummy/circles.ts +65 -0
- package/src/dummy/pole_static.ts +86 -0
- package/src/dummy/rectangle.ts +55 -0
- package/src/dummy/svg/circles.svg +288 -0
- package/src/dummy/svg/circles_amplitude-offset.svg +109 -0
- package/src/dummy/svg/circles_amplitude-scale.svg +122 -0
- package/src/dummy/svg/circles_angle.svg +110 -0
- package/src/dummy/svg/dummy_pole_static.svg +192 -0
- package/src/dummy/svg/dummy_pole_static_face.svg +176 -0
- package/src/dummy/svg/rectangle.svg +131 -0
- package/src/dummy/svg/rectangle_height.svg +82 -0
- package/src/dummy/svg/rectangle_width.svg +81 -0
- package/src/gears/gearWheelProfile.test.ts +25 -0
- package/src/gears/gearWheelProfile.ts +753 -0
- package/src/gears/gear_wheel_wheel.ts +335 -0
- package/src/gears/involute.test.ts +21 -0
- package/src/gears/involute.ts +113 -0
- package/src/gears/simplified_gear_wheel.ts +242 -0
- package/src/gears/svg/calculation_of_initAngle2.svg +376 -0
- package/src/gears/svg/gear_addendeum_dedendum_sizes.svg +471 -0
- package/src/gears/svg/gear_addendum_and_dedendum.svg +269 -0
- package/src/gears/svg/gear_adherence_replaced_by_teeth.svg +168 -0
- package/src/gears/svg/gear_base_circle_for_involute.svg +376 -0
- package/src/gears/svg/gear_base_left_circle_for_involute.svg +556 -0
- package/src/gears/svg/gear_base_right_circle_for_involute.svg +516 -0
- package/src/gears/svg/gear_inter_axis_maximum_distance.svg +218 -0
- package/src/gears/svg/gear_inter_axis_minimum_distance.svg +218 -0
- package/src/gears/svg/gear_large_base_radius.svg +199 -0
- package/src/gears/svg/gear_module_and_tooth_thickness.svg +319 -0
- package/src/gears/svg/gear_optimum_base_radius.svg +232 -0
- package/src/gears/svg/gear_optimum_base_radius_with_longer_inter_axis.svg +344 -0
- package/src/gears/svg/gear_right_left_base_circles.svg +295 -0
- package/src/gears/svg/gear_small_base_radius.svg +163 -0
- package/src/gears/svg/gear_wheel_circles.svg +348 -0
- package/src/gears/svg/gears.svg +4726 -0
- package/src/gears/svg/gears_motion_transmission_via_adherence.svg +178 -0
- package/src/gears/svg/involute_of_circle.svg +2745 -0
- package/src/gears/svg/involute_of_circle_R0.svg +334 -0
- package/src/gears/svg/involute_of_circle_Ri1_u0.svg +297 -0
- package/src/gears/svg/involute_of_circle_Ri2_u2.svg +386 -0
- package/src/gears/svg/left_side_angle_kitchen.svg +207 -0
- package/src/gears/svg/negative_involute_of_circle_R0.svg +381 -0
- package/src/gears/svg/point_c_position_and_speed_negative.svg +343 -0
- package/src/gears/svg/point_c_position_and_speed_positive.svg +339 -0
- package/src/gears/svg/right_side_angle_kitchen.svg +201 -0
- package/src/gears/wheelElements.test.ts +13 -0
- package/src/gears/wheelElements.ts +176 -0
- package/src/geometrix_verification/svg/verify_contour_1.svg +320 -0
- package/src/geometrix_verification/svg/verify_contour_1_l1.svg +102 -0
- package/src/geometrix_verification/svg/verify_contour_1_r1.svg +170 -0
- package/src/geometrix_verification/svg/verify_line.svg +845 -0
- package/src/geometrix_verification/svg/verify_line_2_l1cx.svg +274 -0
- package/src/geometrix_verification/svg/verify_line_p1x.svg +261 -0
- package/src/geometrix_verification/svg/verify_point.svg +350 -0
- package/src/geometrix_verification/svg/verify_point_p1x.svg +258 -0
- package/src/geometrix_verification/svg/verify_vector_p1x.svg +282 -0
- package/src/geometrix_verification/verify_contour_1.ts +94 -0
- package/src/geometrix_verification/verify_contour_2.ts +267 -0
- package/src/geometrix_verification/verify_contour_3.ts +409 -0
- package/src/geometrix_verification/verify_contour_4.ts +91 -0
- package/src/geometrix_verification/verify_exports_1.ts +95 -0
- package/src/geometrix_verification/verify_line.ts +76 -0
- package/src/geometrix_verification/verify_line_2.ts +76 -0
- package/src/geometrix_verification/verify_line_3.ts +64 -0
- package/src/geometrix_verification/verify_point.ts +62 -0
- package/src/geometrix_verification/verify_point_2.ts +66 -0
- package/src/geometrix_verification/verify_vector.ts +70 -0
- package/src/heliostat/base.ts +254 -0
- package/src/heliostat/heliostat.ts +317 -0
- package/src/heliostat/heliostat_2.ts +284 -0
- package/src/heliostat/pole_rotor.ts +165 -0
- package/src/heliostat/pole_static.ts +275 -0
- package/src/heliostat/rake.ts +486 -0
- package/src/heliostat/rake_stopper.ts +409 -0
- package/src/heliostat/rod.ts +200 -0
- package/src/heliostat/spider.ts +238 -0
- package/src/heliostat/surface.ts +320 -0
- package/src/heliostat/svg/base.svg +1367 -0
- package/src/heliostat/svg/base_cut.svg +459 -0
- package/src/heliostat/svg/base_hollow.svg +469 -0
- package/src/heliostat/svg/base_top.svg +338 -0
- package/src/heliostat/svg/heliostat.svg +8013 -0
- package/src/heliostat/svg/heliostat2_face_sizing.svg +1386 -0
- package/src/heliostat/svg/heliostat2_side_sizing.svg +984 -0
- package/src/heliostat/svg/heliostat_face_sizing.svg +1448 -0
- package/src/heliostat/svg/heliostat_overview.svg +1552 -0
- package/src/heliostat/svg/heliostat_side.svg +1470 -0
- package/src/heliostat/svg/heliostat_side_sizing.svg +1128 -0
- package/src/heliostat/svg/pole_rotor.svg +592 -0
- package/src/heliostat/svg/pole_rotor_cut.svg +287 -0
- package/src/heliostat/svg/pole_rotor_ends.svg +336 -0
- package/src/heliostat/svg/pole_stator.svg +1945 -0
- package/src/heliostat/svg/pole_stator_E2.svg +410 -0
- package/src/heliostat/svg/pole_stator_bottom.svg +330 -0
- package/src/heliostat/svg/pole_stator_cut.svg +465 -0
- package/src/heliostat/svg/pole_stator_face.svg +457 -0
- package/src/heliostat/svg/pole_stator_right.svg +357 -0
- package/src/heliostat/svg/rake.svg +4691 -0
- package/src/heliostat/svg/rake_door.svg +617 -0
- package/src/heliostat/svg/rake_face.svg +1211 -0
- package/src/heliostat/svg/rake_side.svg +809 -0
- package/src/heliostat/svg/rake_side_stopper.svg +596 -0
- package/src/heliostat/svg/rake_top.svg +514 -0
- package/src/heliostat/svg/rake_top_stopper.svg +565 -0
- package/src/heliostat/svg/rod.svg +1314 -0
- package/src/heliostat/svg/rod_cut.svg +265 -0
- package/src/heliostat/svg/rod_plate.svg +409 -0
- package/src/heliostat/svg/rod_top.svg +577 -0
- package/src/heliostat/svg/spider.svg +693 -0
- package/src/heliostat/svg/spider_lateral.svg +222 -0
- package/src/heliostat/svg/spider_profile.svg +429 -0
- package/src/heliostat/svg/surface.svg +3577 -0
- package/src/heliostat/svg/surface_crenel.svg +1335 -0
- package/src/heliostat/svg/surface_extremities.svg +510 -0
- package/src/heliostat/svg/surface_lz.svg +182 -0
- package/src/heliostat/svg/surface_main.svg +366 -0
- package/src/heliostat/svg/surface_power.svg +331 -0
- package/src/heliostat/svg/surface_space_evolution.svg +210 -0
- package/src/heliostat/svg/surface_space_shape.svg +98 -0
- package/src/heliostat/svg/swing.svg +3310 -0
- package/src/heliostat/svg/swing_face.svg +902 -0
- package/src/heliostat/svg/swing_side.svg +574 -0
- package/src/heliostat/svg/swing_top.svg +923 -0
- package/src/heliostat/svg/swing_with_rod.svg +547 -0
- package/src/heliostat/svg/trapeze.svg +1711 -0
- package/src/heliostat/svg/trapeze_rod.svg +122 -0
- package/src/heliostat/svg/trapeze_side.svg +361 -0
- package/src/heliostat/svg/trapeze_top.svg +1057 -0
- package/src/heliostat/swing.ts +246 -0
- package/src/heliostat/trapeze.ts +510 -0
- package/src/index.ts +33 -0
- package/src/svg/default_param_blank.svg +40 -0
- package/tsconfig.json +13 -0
- package/vitest.config.ts +7 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
width="221.74434"
|
|
6
|
+
height="254.70496"
|
|
7
|
+
viewBox="0 0 58.669856 67.390682"
|
|
8
|
+
version="1.1"
|
|
9
|
+
id="svg5"
|
|
10
|
+
inkscape:version="1.2.2 (1:1.2.2+202305151914+b0a8486541)"
|
|
11
|
+
sodipodi:docname="involute_of_circle.svg"
|
|
12
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
13
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
14
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
15
|
+
xmlns:svg="http://www.w3.org/2000/svg">
|
|
16
|
+
<sodipodi:namedview
|
|
17
|
+
id="namedview7"
|
|
18
|
+
pagecolor="#ffffff"
|
|
19
|
+
bordercolor="#666666"
|
|
20
|
+
borderopacity="1.0"
|
|
21
|
+
inkscape:showpageshadow="2"
|
|
22
|
+
inkscape:pageopacity="0.0"
|
|
23
|
+
inkscape:pagecheckerboard="0"
|
|
24
|
+
inkscape:deskcolor="#d1d1d1"
|
|
25
|
+
inkscape:document-units="px"
|
|
26
|
+
showgrid="false"
|
|
27
|
+
inkscape:zoom="1"
|
|
28
|
+
inkscape:cx="546.5"
|
|
29
|
+
inkscape:cy="2742.5"
|
|
30
|
+
inkscape:window-width="1366"
|
|
31
|
+
inkscape:window-height="836"
|
|
32
|
+
inkscape:window-x="0"
|
|
33
|
+
inkscape:window-y="0"
|
|
34
|
+
inkscape:window-maximized="1"
|
|
35
|
+
inkscape:current-layer="layer1" />
|
|
36
|
+
<defs
|
|
37
|
+
id="defs2">
|
|
38
|
+
<rect
|
|
39
|
+
x="129.105"
|
|
40
|
+
y="3243.9546"
|
|
41
|
+
width="257.10513"
|
|
42
|
+
height="29.938791"
|
|
43
|
+
id="rect3139" />
|
|
44
|
+
<rect
|
|
45
|
+
x="261.25525"
|
|
46
|
+
y="3152.5127"
|
|
47
|
+
width="59.789192"
|
|
48
|
+
height="20.682873"
|
|
49
|
+
id="rect3037" />
|
|
50
|
+
<rect
|
|
51
|
+
x="225.55602"
|
|
52
|
+
y="3188.9314"
|
|
53
|
+
width="71.829346"
|
|
54
|
+
height="27.439058"
|
|
55
|
+
id="rect2929" />
|
|
56
|
+
<rect
|
|
57
|
+
x="228.46289"
|
|
58
|
+
y="3183.7266"
|
|
59
|
+
width="73.394531"
|
|
60
|
+
height="25.300781"
|
|
61
|
+
id="rect1891" />
|
|
62
|
+
<rect
|
|
63
|
+
x="188.03516"
|
|
64
|
+
y="3206.2598"
|
|
65
|
+
width="75.541016"
|
|
66
|
+
height="32.636719"
|
|
67
|
+
id="rect1733" />
|
|
68
|
+
<rect
|
|
69
|
+
x="317.10938"
|
|
70
|
+
y="3176.2305"
|
|
71
|
+
width="120.82227"
|
|
72
|
+
height="40.15625"
|
|
73
|
+
id="rect852" />
|
|
74
|
+
<marker
|
|
75
|
+
style="overflow:visible"
|
|
76
|
+
id="marker1720"
|
|
77
|
+
refX="0"
|
|
78
|
+
refY="0"
|
|
79
|
+
orient="auto-start-reverse"
|
|
80
|
+
inkscape:stockid="Arrow1L"
|
|
81
|
+
markerWidth="8.75"
|
|
82
|
+
markerHeight="5"
|
|
83
|
+
viewBox="0 0 8.75 5"
|
|
84
|
+
inkscape:isstock="true"
|
|
85
|
+
inkscape:collect="always"
|
|
86
|
+
preserveAspectRatio="xMidYMid">
|
|
87
|
+
<path
|
|
88
|
+
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
|
|
89
|
+
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
|
90
|
+
id="path1718"
|
|
91
|
+
transform="scale(-0.5)" />
|
|
92
|
+
</marker>
|
|
93
|
+
</defs>
|
|
94
|
+
<g
|
|
95
|
+
inkscape:label="Layer 1"
|
|
96
|
+
inkscape:groupmode="layer"
|
|
97
|
+
id="layer1"
|
|
98
|
+
transform="translate(-32.014804,-796.24786)">
|
|
99
|
+
<rect
|
|
100
|
+
style="fill:#ffffff;stroke:#ffffff;stroke-width:0.264583"
|
|
101
|
+
id="rect3291"
|
|
102
|
+
width="58.405277"
|
|
103
|
+
height="67.126099"
|
|
104
|
+
x="32.147095"
|
|
105
|
+
y="796.38019" />
|
|
106
|
+
<path
|
|
107
|
+
style="fill:none;stroke:#808080;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
108
|
+
d="M 34.42477,854.01297 H 60.546175"
|
|
109
|
+
id="path582" />
|
|
110
|
+
<path
|
|
111
|
+
style="fill:none;stroke:#dd55ff;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
112
|
+
d="M 34.42477,854.01297 88.964529,809.61464"
|
|
113
|
+
id="path584"
|
|
114
|
+
sodipodi:nodetypes="cc" />
|
|
115
|
+
<path
|
|
116
|
+
style="fill:none;stroke:#ff0066;stroke-width:0.264582px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
117
|
+
d="m 34.482791,854.03294 4.84458,-38.19638"
|
|
118
|
+
id="path694" />
|
|
119
|
+
<path
|
|
120
|
+
style="fill:none;stroke:#afdde9;stroke-width:0.529167;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
121
|
+
d="m 54.296426,826.03588 c 0,0 1.512231,-4.07388 1.681551,-6.21255 0.208938,-2.63909 -0.368483,-5.29268 -0.842841,-7.89718 -0.374781,-2.05776 -0.708199,-4.17074 -1.576649,-6.07354 -0.648458,-1.42079 -2.654618,-3.86074 -2.654618,-3.86074"
|
|
122
|
+
id="path747"
|
|
123
|
+
sodipodi:nodetypes="caaac" />
|
|
124
|
+
<path
|
|
125
|
+
style="fill:none;stroke:#0066ff;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
126
|
+
d="m 51.561697,829.691 11.8608,-16.92577"
|
|
127
|
+
id="path696" />
|
|
128
|
+
<path
|
|
129
|
+
style="fill:none;stroke:#ff8080;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
130
|
+
d="m 49.393828,823.44991 8.067977,-16.75627"
|
|
131
|
+
id="path745" />
|
|
132
|
+
<text
|
|
133
|
+
xml:space="preserve"
|
|
134
|
+
transform="matrix(0.26458333,0,0,0.26458333,-36.578645,-43.321386)"
|
|
135
|
+
id="text850"
|
|
136
|
+
style="font-size:14.6667px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect852)"><tspan
|
|
137
|
+
x="317.10938"
|
|
138
|
+
y="3189.2071"
|
|
139
|
+
id="tspan4396">right profile</tspan></text>
|
|
140
|
+
<path
|
|
141
|
+
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1720)"
|
|
142
|
+
d="m 45.452788,854.01039 c 0,0 0.178801,-2.3053 -0.143913,-3.38893 -0.276277,-0.9277 -1.484146,-2.49598 -1.484146,-2.49598"
|
|
143
|
+
id="path856"
|
|
144
|
+
sodipodi:nodetypes="cac" />
|
|
145
|
+
<text
|
|
146
|
+
xml:space="preserve"
|
|
147
|
+
transform="matrix(0.26458333,0,0,0.26458333,-3.295406,-0.61856689)"
|
|
148
|
+
id="text1731"
|
|
149
|
+
style="font-size:14.6667px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect1733)"><tspan
|
|
150
|
+
x="188.03516"
|
|
151
|
+
y="3219.2364"
|
|
152
|
+
id="tspan4398">acc</tspan></text>
|
|
153
|
+
<path
|
|
154
|
+
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1720)"
|
|
155
|
+
d="m 45.892149,844.36183 c 0,0 -1.673127,-3.05278 -3.061688,-3.994 -1.335003,-0.90492 -4.657079,-1.31208 -4.657079,-1.31208"
|
|
156
|
+
id="path1883"
|
|
157
|
+
sodipodi:nodetypes="cac" />
|
|
158
|
+
<text
|
|
159
|
+
xml:space="preserve"
|
|
160
|
+
transform="matrix(0.26458333,0,0,0.26458333,-19.598287,-6.8026854)"
|
|
161
|
+
id="text1889"
|
|
162
|
+
style="font-size:14.6667px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect1891)"><tspan
|
|
163
|
+
x="228.46289"
|
|
164
|
+
y="3196.7032"
|
|
165
|
+
id="tspan4400">apr</tspan></text>
|
|
166
|
+
<path
|
|
167
|
+
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1720)"
|
|
168
|
+
d="m 38.288101,825.5682 c 0,0 4.714101,-0.38575 6.984589,0.13126 1.883663,0.42892 5.270479,2.41071 5.270479,2.41071"
|
|
169
|
+
id="path2909"
|
|
170
|
+
sodipodi:nodetypes="cac" />
|
|
171
|
+
<text
|
|
172
|
+
xml:space="preserve"
|
|
173
|
+
transform="matrix(0.26458333,0,0,0.26458333,-16.334814,-18.156005)"
|
|
174
|
+
id="text2927"
|
|
175
|
+
style="font-size:14.6667px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect2929)"><tspan
|
|
176
|
+
x="225.55664"
|
|
177
|
+
y="3201.9082"
|
|
178
|
+
id="tspan4402">u</tspan></text>
|
|
179
|
+
<path
|
|
180
|
+
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1720)"
|
|
181
|
+
d="m 60.942307,816.08185 c 0,0 -1.093943,-2.04351 -1.947987,-2.78987 -0.654539,-0.57201 -2.318878,-1.19305 -2.318878,-1.19305"
|
|
182
|
+
id="path3029"
|
|
183
|
+
sodipodi:nodetypes="cac" />
|
|
184
|
+
<text
|
|
185
|
+
xml:space="preserve"
|
|
186
|
+
transform="matrix(0.26458333,0,0,0.26458333,-10.923128,-26.069636)"
|
|
187
|
+
id="text3035"
|
|
188
|
+
style="font-size:14.6667px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect3037)"><tspan
|
|
189
|
+
x="261.25586"
|
|
190
|
+
y="3165.4883"
|
|
191
|
+
id="tspan4404">rup</tspan></text>
|
|
192
|
+
<text
|
|
193
|
+
xml:space="preserve"
|
|
194
|
+
transform="scale(0.26458333)"
|
|
195
|
+
id="text3137"
|
|
196
|
+
style="font-size:14.6667px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect3139)"><tspan
|
|
197
|
+
x="129.10547"
|
|
198
|
+
y="3256.9317"
|
|
199
|
+
id="tspan4406">right side angle kitchen</tspan></text>
|
|
200
|
+
</g>
|
|
201
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { describe, it, expect, expectTypeOf } from 'vitest';
|
|
2
|
+
//import type { tContour } from 'geometrix';
|
|
3
|
+
import * as welem from './wheelElements';
|
|
4
|
+
|
|
5
|
+
describe('wheelElements module', () => {
|
|
6
|
+
it('axisTorque', () => {
|
|
7
|
+
expectTypeOf(welem.axisTorque(0, 0, 10, 2, 4, 3, 1, 1, 0)).toBeObject();
|
|
8
|
+
});
|
|
9
|
+
it('hollowStraight', () => {
|
|
10
|
+
expect(welem.hollowStraightArea(0, 0, 20, 40, 1, 3, 1)).toBeCloseTo(65);
|
|
11
|
+
expectTypeOf(welem.hollowStraight(0, 0, 40, 20, 1, 3, 1, 0)).toBeArray();
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// wheelElements.ts
|
|
2
|
+
|
|
3
|
+
import type { tContour } from 'geometrix';
|
|
4
|
+
import { contour, contourCircle, point, ffix } from 'geometrix';
|
|
5
|
+
|
|
6
|
+
function axisTorque(
|
|
7
|
+
cx: number,
|
|
8
|
+
cy: number,
|
|
9
|
+
axisRadius: number,
|
|
10
|
+
ribNb: number,
|
|
11
|
+
ribWidth: number,
|
|
12
|
+
ribHeight: number,
|
|
13
|
+
ribRound1: number,
|
|
14
|
+
ribRound2: number,
|
|
15
|
+
initAngle: number
|
|
16
|
+
): tContour {
|
|
17
|
+
let rCtr: tContour = contourCircle(cx, cy, axisRadius);
|
|
18
|
+
if (ribNb > 0) {
|
|
19
|
+
if (ribWidth > 2 * axisRadius) {
|
|
20
|
+
throw `err383: axisTorque ribWidth ${ffix(ribWidth)} larger than 2x axisRadius ${ffix(
|
|
21
|
+
axisRadius
|
|
22
|
+
)}`;
|
|
23
|
+
}
|
|
24
|
+
const aRibW2 = Math.asin(ribWidth / (2 * axisRadius));
|
|
25
|
+
const aPeriod = (2 * Math.PI) / ribNb;
|
|
26
|
+
if (aPeriod - 2.5 * aRibW2 < 0) {
|
|
27
|
+
throw `err384: axisTorque ribWidth ${ffix(ribWidth)} or ribNb ${ribNb} are too large`;
|
|
28
|
+
}
|
|
29
|
+
if (ribRound1 > ribWidth / 2) {
|
|
30
|
+
throw `err385: axisTorque ribRound1 ${ffix(
|
|
31
|
+
ribRound1
|
|
32
|
+
)} too large compare to ribWidth ${ffix(ribWidth)}`;
|
|
33
|
+
}
|
|
34
|
+
if (ribRound1 + ribRound2 > ribHeight) {
|
|
35
|
+
throw `err386: axisTorque ribRound12 ${ffix(ribRound1)} ${ffix(
|
|
36
|
+
ribRound2
|
|
37
|
+
)} too large compare to ribHeight ${ffix(ribWidth)}`;
|
|
38
|
+
}
|
|
39
|
+
const arcLarge = aPeriod - 2 * aRibW2 > Math.PI ? true : false;
|
|
40
|
+
const pt0 = point(cx, cy);
|
|
41
|
+
const pt0z = pt0.translatePolar(initAngle, axisRadius + ribHeight);
|
|
42
|
+
const pt0b = pt0z.translatePolar(initAngle + Math.PI / 2, ribWidth / 2);
|
|
43
|
+
rCtr = contour(pt0b.cx, pt0b.cy);
|
|
44
|
+
for (let i = 0; i < ribNb; i++) {
|
|
45
|
+
const ribDir1 = initAngle + i * aPeriod;
|
|
46
|
+
const ribDir2 = ribDir1 + aPeriod;
|
|
47
|
+
const pt2 = pt0.translatePolar(ribDir1 + aRibW2, axisRadius);
|
|
48
|
+
const pt3 = pt0.translatePolar(ribDir2 - aRibW2, axisRadius);
|
|
49
|
+
const pt1z = pt0.translatePolar(ribDir1, axisRadius + ribHeight);
|
|
50
|
+
const pt1 = pt1z.translatePolar(ribDir1 + Math.PI / 2, ribWidth / 2);
|
|
51
|
+
const pt4z = pt0.translatePolar(ribDir2, axisRadius + ribHeight);
|
|
52
|
+
const pt4 = pt4z.translatePolar(ribDir2 - Math.PI / 2, ribWidth / 2);
|
|
53
|
+
rCtr.addSegStrokeA(pt1.cx, pt1.cy).addCornerRounded(ribRound1);
|
|
54
|
+
rCtr.addSegStrokeA(pt2.cx, pt2.cy).addCornerRounded(ribRound2);
|
|
55
|
+
rCtr.addPointA(pt3.cx, pt3.cy)
|
|
56
|
+
.addSegArc(axisRadius, arcLarge, true)
|
|
57
|
+
.addCornerRounded(ribRound2);
|
|
58
|
+
rCtr.addSegStrokeA(pt4.cx, pt4.cy).addCornerRounded(ribRound1);
|
|
59
|
+
}
|
|
60
|
+
rCtr.closeSegStroke();
|
|
61
|
+
}
|
|
62
|
+
return rCtr;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function hollowStraight(
|
|
66
|
+
cx: number,
|
|
67
|
+
cy: number,
|
|
68
|
+
hollowExt: number,
|
|
69
|
+
hollowInt: number,
|
|
70
|
+
spokeNb: number,
|
|
71
|
+
spokeWidth: number,
|
|
72
|
+
spokeRound: number,
|
|
73
|
+
initAngle: number
|
|
74
|
+
): tContour[] {
|
|
75
|
+
const aPeriod = (2 * Math.PI) / spokeNb;
|
|
76
|
+
const aW2Int = Math.asin(spokeWidth / (2 * hollowInt));
|
|
77
|
+
const aW2Ext = Math.asin(spokeWidth / (2 * hollowExt));
|
|
78
|
+
if (spokeWidth > 2 * hollowInt) {
|
|
79
|
+
throw `err905: hollowStraight spokeWidth ${ffix(spokeWidth)} too large for hollowInt ${ffix(
|
|
80
|
+
hollowInt
|
|
81
|
+
)}`;
|
|
82
|
+
}
|
|
83
|
+
if (hollowExt - hollowInt < 2.1 * spokeRound) {
|
|
84
|
+
throw `err906: hollowStraight hollowExt ${ffix(hollowExt)}, hollowInt ${ffix(
|
|
85
|
+
hollowInt
|
|
86
|
+
)} and spokeRound ${ffix(spokeRound)} do not fit`;
|
|
87
|
+
}
|
|
88
|
+
// the formula of the following condition is approximate
|
|
89
|
+
if (aPeriod - 2 * aW2Ext < 2.5 * Math.asin(spokeRound / hollowExt)) {
|
|
90
|
+
throw `err907: hollowStraight spokeNb ${spokeNb}, spokeWidth ${ffix(
|
|
91
|
+
spokeWidth
|
|
92
|
+
)} or spokeRound ${ffix(spokeRound)} are too large`;
|
|
93
|
+
}
|
|
94
|
+
const dist5 = spokeWidth / (2 * Math.sin(aPeriod / 2));
|
|
95
|
+
const triangle = aPeriod - 2 * aW2Int < 2.1 * Math.asin(spokeRound / hollowInt) ? true : false;
|
|
96
|
+
const arcLarge = aPeriod - 2 * aW2Ext > Math.PI ? true : false;
|
|
97
|
+
//console.log(`dbg908: triangle ${triangle}`);
|
|
98
|
+
const pt0 = point(cx, cy);
|
|
99
|
+
const rACtr: tContour[] = [];
|
|
100
|
+
for (let i = 0; i < spokeNb; i++) {
|
|
101
|
+
const aSpoke1 = initAngle + i * aPeriod;
|
|
102
|
+
const aSpoke2 = aSpoke1 + aPeriod;
|
|
103
|
+
const aSpoke5 = aSpoke1 + aPeriod / 2;
|
|
104
|
+
const pt1 = pt0.translatePolar(aSpoke1 + aW2Ext, hollowExt);
|
|
105
|
+
const pt2 = pt0.translatePolar(aSpoke2 - aW2Ext, hollowExt);
|
|
106
|
+
const pt3 = pt0.translatePolar(aSpoke2 - aW2Int, hollowInt);
|
|
107
|
+
const pt4 = pt0.translatePolar(aSpoke1 + aW2Int, hollowInt);
|
|
108
|
+
const pt5 = pt0.translatePolar(aSpoke5, dist5);
|
|
109
|
+
const ctr = contour(pt1.cx, pt1.cy);
|
|
110
|
+
ctr.addCornerRounded(spokeRound);
|
|
111
|
+
ctr.addPointA(pt2.cx, pt2.cy)
|
|
112
|
+
.addSegArc(hollowExt, arcLarge, true)
|
|
113
|
+
.addCornerRounded(spokeRound);
|
|
114
|
+
if (triangle) {
|
|
115
|
+
ctr.addSegStrokeA(pt5.cx, pt5.cy).addCornerRounded(spokeRound);
|
|
116
|
+
} else {
|
|
117
|
+
ctr.addSegStrokeA(pt3.cx, pt3.cy).addCornerRounded(spokeRound);
|
|
118
|
+
ctr.addPointA(pt4.cx, pt4.cy)
|
|
119
|
+
.addSegArc(hollowInt, arcLarge, false)
|
|
120
|
+
.addCornerRounded(spokeRound);
|
|
121
|
+
}
|
|
122
|
+
ctr.closeSegStroke();
|
|
123
|
+
rACtr.push(ctr);
|
|
124
|
+
}
|
|
125
|
+
return rACtr;
|
|
126
|
+
}
|
|
127
|
+
function hollowStraightArea(
|
|
128
|
+
cx: number,
|
|
129
|
+
cy: number,
|
|
130
|
+
hollowExt: number,
|
|
131
|
+
hollowInt: number,
|
|
132
|
+
spokeNb: number,
|
|
133
|
+
spokeWidth: number,
|
|
134
|
+
spokeRound: number
|
|
135
|
+
): number {
|
|
136
|
+
const rArea = cx + cy + hollowExt + hollowInt + spokeNb + spokeWidth + spokeRound;
|
|
137
|
+
return rArea;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function axisProfile(
|
|
141
|
+
wheelHeight: number,
|
|
142
|
+
wheelMidExtra: number,
|
|
143
|
+
wheelAxisLength: number,
|
|
144
|
+
wheelAxisRadius: number,
|
|
145
|
+
wheelMidRadius: number,
|
|
146
|
+
wheelRadius: number,
|
|
147
|
+
wheelAxisExtRound: number,
|
|
148
|
+
wheelAxisIntRound: number,
|
|
149
|
+
wheelExtraRound: number,
|
|
150
|
+
rightNLeft: boolean
|
|
151
|
+
): tContour {
|
|
152
|
+
const rln = rightNLeft ? 1 : -1;
|
|
153
|
+
const wheelHeightHalf = wheelHeight / 2;
|
|
154
|
+
const wheelHalfLength = wheelHeightHalf + wheelMidExtra;
|
|
155
|
+
const axisHalfLength = wheelHalfLength + wheelAxisLength;
|
|
156
|
+
const rCtr = contour(0, -axisHalfLength);
|
|
157
|
+
rCtr.addSegStrokeA(rln * wheelAxisRadius, -axisHalfLength)
|
|
158
|
+
.addCornerRounded(wheelAxisExtRound)
|
|
159
|
+
.addSegStrokeA(rln * wheelAxisRadius, -wheelHalfLength)
|
|
160
|
+
.addCornerRounded(wheelAxisIntRound)
|
|
161
|
+
.addSegStrokeA(rln * wheelMidRadius, -wheelHalfLength)
|
|
162
|
+
.addSegStrokeA(rln * wheelRadius, -wheelHeightHalf)
|
|
163
|
+
.addCornerRounded(wheelExtraRound)
|
|
164
|
+
.addSegStrokeA(rln * wheelRadius, wheelHeightHalf)
|
|
165
|
+
.addCornerRounded(wheelExtraRound)
|
|
166
|
+
.addSegStrokeA(rln * wheelMidRadius, wheelHalfLength)
|
|
167
|
+
.addSegStrokeA(rln * wheelAxisRadius, wheelHalfLength)
|
|
168
|
+
.addCornerRounded(wheelAxisIntRound)
|
|
169
|
+
.addSegStrokeA(rln * wheelAxisRadius, axisHalfLength)
|
|
170
|
+
.addCornerRounded(wheelAxisExtRound)
|
|
171
|
+
.addSegStrokeA(0, axisHalfLength)
|
|
172
|
+
.closeSegStroke();
|
|
173
|
+
return rCtr;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export { axisTorque, hollowStraight, hollowStraightArea, axisProfile };
|