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.
Files changed (237) hide show
  1. package/.eslintignore +17 -0
  2. package/.eslintrc.cjs +24 -0
  3. package/.prettierignore +15 -0
  4. package/.prettierrc +8 -0
  5. package/README.md +27 -0
  6. package/export_svg/base.svg +1 -0
  7. package/export_svg/base_cut.svg +1 -0
  8. package/export_svg/base_hollow.svg +1 -0
  9. package/export_svg/base_top.svg +1 -0
  10. package/export_svg/calculation_of_initAngle2.svg +1 -0
  11. package/export_svg/circles.svg +1 -0
  12. package/export_svg/circles_amplitude-offset.svg +1 -0
  13. package/export_svg/circles_amplitude-scale.svg +1 -0
  14. package/export_svg/circles_angle.svg +1 -0
  15. package/export_svg/default_param_blank.svg +1 -0
  16. package/export_svg/dummy_pole_static.svg +1 -0
  17. package/export_svg/dummy_pole_static_face.svg +1 -0
  18. package/export_svg/gear_addendeum_dedendum_sizes.svg +9 -0
  19. package/export_svg/gear_addendum_and_dedendum.svg +1 -0
  20. package/export_svg/gear_adherence_replaced_by_teeth.svg +1 -0
  21. package/export_svg/gear_base_circle_for_involute.svg +2 -0
  22. package/export_svg/gear_base_left_circle_for_involute.svg +2 -0
  23. package/export_svg/gear_base_right_circle_for_involute.svg +2 -0
  24. package/export_svg/gear_inter_axis_maximum_distance.svg +1 -0
  25. package/export_svg/gear_inter_axis_minimum_distance.svg +1 -0
  26. package/export_svg/gear_large_base_radius.svg +5 -0
  27. package/export_svg/gear_module_and_tooth_thickness.svg +3 -0
  28. package/export_svg/gear_optimum_base_radius.svg +5 -0
  29. package/export_svg/gear_optimum_base_radius_with_longer_inter_axis.svg +5 -0
  30. package/export_svg/gear_right_left_base_circles.svg +1 -0
  31. package/export_svg/gear_small_base_radius.svg +5 -0
  32. package/export_svg/gear_wheel_circles.svg +2 -0
  33. package/export_svg/gears.svg +71 -0
  34. package/export_svg/gears_motion_transmission_via_adherence.svg +1 -0
  35. package/export_svg/heliostat.svg +1 -0
  36. package/export_svg/heliostat2_face_sizing.svg +1 -0
  37. package/export_svg/heliostat2_side_sizing.svg +1 -0
  38. package/export_svg/heliostat_face_sizing.svg +1 -0
  39. package/export_svg/heliostat_overview.svg +1 -0
  40. package/export_svg/heliostat_side.svg +1 -0
  41. package/export_svg/heliostat_side_sizing.svg +1 -0
  42. package/export_svg/involute_of_circle.svg +19 -0
  43. package/export_svg/involute_of_circle_R0.svg +1 -0
  44. package/export_svg/involute_of_circle_Ri1_u0.svg +1 -0
  45. package/export_svg/involute_of_circle_Ri2_u2.svg +1 -0
  46. package/export_svg/left_side_angle_kitchen.svg +1 -0
  47. package/export_svg/negative_involute_of_circle_R0.svg +1 -0
  48. package/export_svg/point_c_position_and_speed_negative.svg +1 -0
  49. package/export_svg/point_c_position_and_speed_positive.svg +1 -0
  50. package/export_svg/pole_rotor.svg +1 -0
  51. package/export_svg/pole_rotor_cut.svg +1 -0
  52. package/export_svg/pole_rotor_ends.svg +1 -0
  53. package/export_svg/pole_stator.svg +3 -0
  54. package/export_svg/pole_stator_E2.svg +3 -0
  55. package/export_svg/pole_stator_bottom.svg +1 -0
  56. package/export_svg/pole_stator_cut.svg +1 -0
  57. package/export_svg/pole_stator_face.svg +1 -0
  58. package/export_svg/pole_stator_right.svg +1 -0
  59. package/export_svg/rake.svg +1 -0
  60. package/export_svg/rake_door.svg +1 -0
  61. package/export_svg/rake_face.svg +1 -0
  62. package/export_svg/rake_side.svg +1 -0
  63. package/export_svg/rake_side_stopper.svg +1 -0
  64. package/export_svg/rake_top.svg +1 -0
  65. package/export_svg/rake_top_stopper.svg +1 -0
  66. package/export_svg/rectangle.svg +1 -0
  67. package/export_svg/rectangle_height.svg +1 -0
  68. package/export_svg/rectangle_width.svg +1 -0
  69. package/export_svg/right_side_angle_kitchen.svg +1 -0
  70. package/export_svg/rod.svg +1 -0
  71. package/export_svg/rod_cut.svg +1 -0
  72. package/export_svg/rod_plate.svg +1 -0
  73. package/export_svg/rod_top.svg +1 -0
  74. package/export_svg/spider.svg +1 -0
  75. package/export_svg/spider_lateral.svg +1 -0
  76. package/export_svg/spider_profile.svg +1 -0
  77. package/export_svg/surface.svg +3 -0
  78. package/export_svg/surface_crenel.svg +1 -0
  79. package/export_svg/surface_extremities.svg +2 -0
  80. package/export_svg/surface_lz.svg +1 -0
  81. package/export_svg/surface_main.svg +1 -0
  82. package/export_svg/surface_power.svg +2 -0
  83. package/export_svg/surface_space_evolution.svg +1 -0
  84. package/export_svg/surface_space_shape.svg +1 -0
  85. package/export_svg/swing.svg +1 -0
  86. package/export_svg/swing_face.svg +1 -0
  87. package/export_svg/swing_side.svg +1 -0
  88. package/export_svg/swing_top.svg +1 -0
  89. package/export_svg/swing_with_rod.svg +1 -0
  90. package/export_svg/trapeze.svg +1 -0
  91. package/export_svg/trapeze_rod.svg +1 -0
  92. package/export_svg/trapeze_side.svg +1 -0
  93. package/export_svg/trapeze_top.svg +1 -0
  94. package/export_svg/verify_contour_1.svg +1 -0
  95. package/export_svg/verify_contour_1_l1.svg +1 -0
  96. package/export_svg/verify_contour_1_r1.svg +1 -0
  97. package/export_svg/verify_line.svg +1 -0
  98. package/export_svg/verify_line_2_l1cx.svg +1 -0
  99. package/export_svg/verify_line_p1x.svg +1 -0
  100. package/export_svg/verify_point.svg +1 -0
  101. package/export_svg/verify_point_p1x.svg +1 -0
  102. package/export_svg/verify_vector_p1x.svg +1 -0
  103. package/package.json +76 -0
  104. package/src/dummy/circles.ts +65 -0
  105. package/src/dummy/pole_static.ts +86 -0
  106. package/src/dummy/rectangle.ts +55 -0
  107. package/src/dummy/svg/circles.svg +288 -0
  108. package/src/dummy/svg/circles_amplitude-offset.svg +109 -0
  109. package/src/dummy/svg/circles_amplitude-scale.svg +122 -0
  110. package/src/dummy/svg/circles_angle.svg +110 -0
  111. package/src/dummy/svg/dummy_pole_static.svg +192 -0
  112. package/src/dummy/svg/dummy_pole_static_face.svg +176 -0
  113. package/src/dummy/svg/rectangle.svg +131 -0
  114. package/src/dummy/svg/rectangle_height.svg +82 -0
  115. package/src/dummy/svg/rectangle_width.svg +81 -0
  116. package/src/gears/gearWheelProfile.test.ts +25 -0
  117. package/src/gears/gearWheelProfile.ts +753 -0
  118. package/src/gears/gear_wheel_wheel.ts +335 -0
  119. package/src/gears/involute.test.ts +21 -0
  120. package/src/gears/involute.ts +113 -0
  121. package/src/gears/simplified_gear_wheel.ts +242 -0
  122. package/src/gears/svg/calculation_of_initAngle2.svg +376 -0
  123. package/src/gears/svg/gear_addendeum_dedendum_sizes.svg +471 -0
  124. package/src/gears/svg/gear_addendum_and_dedendum.svg +269 -0
  125. package/src/gears/svg/gear_adherence_replaced_by_teeth.svg +168 -0
  126. package/src/gears/svg/gear_base_circle_for_involute.svg +376 -0
  127. package/src/gears/svg/gear_base_left_circle_for_involute.svg +556 -0
  128. package/src/gears/svg/gear_base_right_circle_for_involute.svg +516 -0
  129. package/src/gears/svg/gear_inter_axis_maximum_distance.svg +218 -0
  130. package/src/gears/svg/gear_inter_axis_minimum_distance.svg +218 -0
  131. package/src/gears/svg/gear_large_base_radius.svg +199 -0
  132. package/src/gears/svg/gear_module_and_tooth_thickness.svg +319 -0
  133. package/src/gears/svg/gear_optimum_base_radius.svg +232 -0
  134. package/src/gears/svg/gear_optimum_base_radius_with_longer_inter_axis.svg +344 -0
  135. package/src/gears/svg/gear_right_left_base_circles.svg +295 -0
  136. package/src/gears/svg/gear_small_base_radius.svg +163 -0
  137. package/src/gears/svg/gear_wheel_circles.svg +348 -0
  138. package/src/gears/svg/gears.svg +4726 -0
  139. package/src/gears/svg/gears_motion_transmission_via_adherence.svg +178 -0
  140. package/src/gears/svg/involute_of_circle.svg +2745 -0
  141. package/src/gears/svg/involute_of_circle_R0.svg +334 -0
  142. package/src/gears/svg/involute_of_circle_Ri1_u0.svg +297 -0
  143. package/src/gears/svg/involute_of_circle_Ri2_u2.svg +386 -0
  144. package/src/gears/svg/left_side_angle_kitchen.svg +207 -0
  145. package/src/gears/svg/negative_involute_of_circle_R0.svg +381 -0
  146. package/src/gears/svg/point_c_position_and_speed_negative.svg +343 -0
  147. package/src/gears/svg/point_c_position_and_speed_positive.svg +339 -0
  148. package/src/gears/svg/right_side_angle_kitchen.svg +201 -0
  149. package/src/gears/wheelElements.test.ts +13 -0
  150. package/src/gears/wheelElements.ts +176 -0
  151. package/src/geometrix_verification/svg/verify_contour_1.svg +320 -0
  152. package/src/geometrix_verification/svg/verify_contour_1_l1.svg +102 -0
  153. package/src/geometrix_verification/svg/verify_contour_1_r1.svg +170 -0
  154. package/src/geometrix_verification/svg/verify_line.svg +845 -0
  155. package/src/geometrix_verification/svg/verify_line_2_l1cx.svg +274 -0
  156. package/src/geometrix_verification/svg/verify_line_p1x.svg +261 -0
  157. package/src/geometrix_verification/svg/verify_point.svg +350 -0
  158. package/src/geometrix_verification/svg/verify_point_p1x.svg +258 -0
  159. package/src/geometrix_verification/svg/verify_vector_p1x.svg +282 -0
  160. package/src/geometrix_verification/verify_contour_1.ts +94 -0
  161. package/src/geometrix_verification/verify_contour_2.ts +267 -0
  162. package/src/geometrix_verification/verify_contour_3.ts +409 -0
  163. package/src/geometrix_verification/verify_contour_4.ts +91 -0
  164. package/src/geometrix_verification/verify_exports_1.ts +95 -0
  165. package/src/geometrix_verification/verify_line.ts +76 -0
  166. package/src/geometrix_verification/verify_line_2.ts +76 -0
  167. package/src/geometrix_verification/verify_line_3.ts +64 -0
  168. package/src/geometrix_verification/verify_point.ts +62 -0
  169. package/src/geometrix_verification/verify_point_2.ts +66 -0
  170. package/src/geometrix_verification/verify_vector.ts +70 -0
  171. package/src/heliostat/base.ts +254 -0
  172. package/src/heliostat/heliostat.ts +317 -0
  173. package/src/heliostat/heliostat_2.ts +284 -0
  174. package/src/heliostat/pole_rotor.ts +165 -0
  175. package/src/heliostat/pole_static.ts +275 -0
  176. package/src/heliostat/rake.ts +486 -0
  177. package/src/heliostat/rake_stopper.ts +409 -0
  178. package/src/heliostat/rod.ts +200 -0
  179. package/src/heliostat/spider.ts +238 -0
  180. package/src/heliostat/surface.ts +320 -0
  181. package/src/heliostat/svg/base.svg +1367 -0
  182. package/src/heliostat/svg/base_cut.svg +459 -0
  183. package/src/heliostat/svg/base_hollow.svg +469 -0
  184. package/src/heliostat/svg/base_top.svg +338 -0
  185. package/src/heliostat/svg/heliostat.svg +8013 -0
  186. package/src/heliostat/svg/heliostat2_face_sizing.svg +1386 -0
  187. package/src/heliostat/svg/heliostat2_side_sizing.svg +984 -0
  188. package/src/heliostat/svg/heliostat_face_sizing.svg +1448 -0
  189. package/src/heliostat/svg/heliostat_overview.svg +1552 -0
  190. package/src/heliostat/svg/heliostat_side.svg +1470 -0
  191. package/src/heliostat/svg/heliostat_side_sizing.svg +1128 -0
  192. package/src/heliostat/svg/pole_rotor.svg +592 -0
  193. package/src/heliostat/svg/pole_rotor_cut.svg +287 -0
  194. package/src/heliostat/svg/pole_rotor_ends.svg +336 -0
  195. package/src/heliostat/svg/pole_stator.svg +1945 -0
  196. package/src/heliostat/svg/pole_stator_E2.svg +410 -0
  197. package/src/heliostat/svg/pole_stator_bottom.svg +330 -0
  198. package/src/heliostat/svg/pole_stator_cut.svg +465 -0
  199. package/src/heliostat/svg/pole_stator_face.svg +457 -0
  200. package/src/heliostat/svg/pole_stator_right.svg +357 -0
  201. package/src/heliostat/svg/rake.svg +4691 -0
  202. package/src/heliostat/svg/rake_door.svg +617 -0
  203. package/src/heliostat/svg/rake_face.svg +1211 -0
  204. package/src/heliostat/svg/rake_side.svg +809 -0
  205. package/src/heliostat/svg/rake_side_stopper.svg +596 -0
  206. package/src/heliostat/svg/rake_top.svg +514 -0
  207. package/src/heliostat/svg/rake_top_stopper.svg +565 -0
  208. package/src/heliostat/svg/rod.svg +1314 -0
  209. package/src/heliostat/svg/rod_cut.svg +265 -0
  210. package/src/heliostat/svg/rod_plate.svg +409 -0
  211. package/src/heliostat/svg/rod_top.svg +577 -0
  212. package/src/heliostat/svg/spider.svg +693 -0
  213. package/src/heliostat/svg/spider_lateral.svg +222 -0
  214. package/src/heliostat/svg/spider_profile.svg +429 -0
  215. package/src/heliostat/svg/surface.svg +3577 -0
  216. package/src/heliostat/svg/surface_crenel.svg +1335 -0
  217. package/src/heliostat/svg/surface_extremities.svg +510 -0
  218. package/src/heliostat/svg/surface_lz.svg +182 -0
  219. package/src/heliostat/svg/surface_main.svg +366 -0
  220. package/src/heliostat/svg/surface_power.svg +331 -0
  221. package/src/heliostat/svg/surface_space_evolution.svg +210 -0
  222. package/src/heliostat/svg/surface_space_shape.svg +98 -0
  223. package/src/heliostat/svg/swing.svg +3310 -0
  224. package/src/heliostat/svg/swing_face.svg +902 -0
  225. package/src/heliostat/svg/swing_side.svg +574 -0
  226. package/src/heliostat/svg/swing_top.svg +923 -0
  227. package/src/heliostat/svg/swing_with_rod.svg +547 -0
  228. package/src/heliostat/svg/trapeze.svg +1711 -0
  229. package/src/heliostat/svg/trapeze_rod.svg +122 -0
  230. package/src/heliostat/svg/trapeze_side.svg +361 -0
  231. package/src/heliostat/svg/trapeze_top.svg +1057 -0
  232. package/src/heliostat/swing.ts +246 -0
  233. package/src/heliostat/trapeze.ts +510 -0
  234. package/src/index.ts +33 -0
  235. package/src/svg/default_param_blank.svg +40 -0
  236. package/tsconfig.json +13 -0
  237. 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 };