@wandelbots/wandelbots-js-react-components 1.3.1 → 1.3.2

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 (77) hide show
  1. package/package.json +18 -7
  2. package/src/components/3d-viewport/CoordinateSystemTransform.tsx +44 -0
  3. package/src/components/3d-viewport/PresetEnvironment.tsx +78 -0
  4. package/src/components/3d-viewport/SafetyZonesRenderer.tsx +54 -0
  5. package/src/components/LoadingButton.stories.tsx +61 -0
  6. package/src/components/LoadingButton.tsx +19 -0
  7. package/src/components/LoadingCover.tsx +75 -0
  8. package/src/components/ThemeSelect.tsx +49 -0
  9. package/src/components/VelocitySlider.stories.tsx +32 -0
  10. package/src/components/VelocitySlider.tsx +52 -0
  11. package/src/components/jogging/JoggingCartesianAxisControl.stories.tsx +41 -0
  12. package/src/components/jogging/JoggingCartesianAxisControl.tsx +127 -0
  13. package/src/components/jogging/JoggingCartesianTab.tsx +265 -0
  14. package/src/components/jogging/JoggingCartesianValues.tsx +45 -0
  15. package/src/components/jogging/JoggingFreedriveTab.tsx +9 -0
  16. package/src/components/jogging/JoggingJointLimitDetector.tsx +51 -0
  17. package/src/components/jogging/JoggingJointRotationControl.stories.tsx +38 -0
  18. package/src/components/jogging/JoggingJointRotationControl.tsx +197 -0
  19. package/src/components/jogging/JoggingJointTab.tsx +93 -0
  20. package/src/components/jogging/JoggingJointValues.tsx +45 -0
  21. package/src/components/jogging/JoggingOptions.tsx +96 -0
  22. package/src/components/jogging/JoggingPanel.stories.tsx +26 -0
  23. package/src/components/jogging/JoggingPanel.tsx +148 -0
  24. package/src/components/jogging/JoggingStore.tsx +294 -0
  25. package/src/components/jogging/JoggingVelocitySlider.tsx +56 -0
  26. package/src/components/robots/ABB_1200_07_7.tsx +123 -0
  27. package/src/components/robots/AxisConfig.ts +3 -0
  28. package/src/components/robots/DHRobot.tsx +129 -0
  29. package/src/components/robots/FANUC_ARC_Mate_100iD.tsx +187 -0
  30. package/src/components/robots/FANUC_ARC_Mate_120iD.tsx +187 -0
  31. package/src/components/robots/FANUC_CRX10iA.tsx +167 -0
  32. package/src/components/robots/FANUC_CRX25iA.tsx +167 -0
  33. package/src/components/robots/FANUC_CRX25iAL.tsx +178 -0
  34. package/src/components/robots/KUKA_KR210_R2700.tsx +291 -0
  35. package/src/components/robots/KUKA_KR270_R2700.tsx +244 -0
  36. package/src/components/robots/RobotAnimator.tsx +83 -0
  37. package/src/components/robots/SupportedRobot.tsx +131 -0
  38. package/src/components/robots/UniversalRobots_UR10.tsx +112 -0
  39. package/src/components/robots/UniversalRobots_UR10e.tsx +275 -0
  40. package/src/components/robots/UniversalRobots_UR3.tsx +112 -0
  41. package/src/components/robots/UniversalRobots_UR3e.tsx +112 -0
  42. package/src/components/robots/UniversalRobots_UR5.tsx +111 -0
  43. package/src/components/robots/UniversalRobots_UR5e.tsx +280 -0
  44. package/src/components/robots/Yaskawa_AR1440.tsx +152 -0
  45. package/src/components/robots/Yaskawa_AR1730.tsx +165 -0
  46. package/src/components/robots/Yaskawa_AR2010.tsx +159 -0
  47. package/src/components/robots/Yaskawa_AR3120.tsx +160 -0
  48. package/src/components/robots/Yaskawa_AR900.tsx +121 -0
  49. package/src/components/utils/converters.ts +23 -0
  50. package/src/components/utils/errorHandling.ts +30 -0
  51. package/src/components/utils/hooks.tsx +54 -0
  52. package/src/components/utils/robotTreeQuery.ts +27 -0
  53. package/src/components/wandelscript-editor/WandelscriptEditor.stories.tsx +45 -0
  54. package/src/components/wandelscript-editor/WandelscriptEditor.tsx +114 -0
  55. package/src/components/wandelscript-editor/wandelscript.tmLanguage.ts +62 -0
  56. package/src/declarations.d.ts +10 -0
  57. package/src/i18n/config.ts +27 -0
  58. package/src/i18n/locales/de/translations.json +12 -0
  59. package/src/i18n/locales/en/translations.json +12 -0
  60. package/src/icons/arrowForwardFilled.tsx +7 -0
  61. package/src/icons/axis-x.svg +3 -0
  62. package/src/icons/axis-y.svg +3 -0
  63. package/src/icons/axis-z.svg +3 -0
  64. package/src/icons/expandFilled.tsx +11 -0
  65. package/src/icons/home.tsx +12 -0
  66. package/src/icons/index.ts +6 -0
  67. package/src/icons/infoOutlined.tsx +10 -0
  68. package/src/icons/jogging.svg +3 -0
  69. package/src/icons/robot.svg +3 -0
  70. package/src/icons/robot.tsx +14 -0
  71. package/src/icons/rotation.svg +4 -0
  72. package/src/icons/wbLogo.tsx +21 -0
  73. package/src/index.ts +7 -0
  74. package/src/themes/color.tsx +74 -0
  75. package/src/themes/theme.ts +150 -0
  76. package/src/themes/wbTheme.stories.tsx +64 -0
  77. package/src/themes/wbTheme.ts +186 -0
@@ -0,0 +1,112 @@
1
+ import { useGLTF } from "@react-three/drei"
2
+ import type * as THREE from "three"
3
+ import type { RobotProps } from "./SupportedRobot"
4
+ import { animated } from "@react-spring/three"
5
+ import RobotAnimator from "./RobotAnimator"
6
+
7
+ export function UniversalRobots_UR3e({
8
+ modelURL,
9
+ connectedMotionGroup,
10
+ ...props
11
+ }: RobotProps) {
12
+ const gltf = useGLTF(modelURL) as any
13
+ const nodes = gltf.nodes
14
+ const materials = gltf.materials
15
+
16
+ function setRotation(jointObjects: THREE.Object3D[], jointValues: number[]) {
17
+ jointObjects.forEach(
18
+ (object, index) => (object.rotation.y = jointValues[index]!),
19
+ )
20
+ }
21
+
22
+ return (
23
+ <>
24
+ <RobotAnimator
25
+ connectedMotionGroup={connectedMotionGroup}
26
+ robotRootObjectName="Scene"
27
+ onRotationChanged={setRotation}
28
+ />
29
+ <group {...props} dispose={null}>
30
+ <group name="Scene">
31
+ <animated.group name="UR3e" rotation={[Math.PI / 2, 0, 0]}>
32
+ <animated.group name="UR3e_J01" rotation={[-Math.PI / 2, 0, 0]}>
33
+ <animated.group
34
+ name="UR3e_J02"
35
+ position={[0, 0.152, 0]}
36
+ rotation={[Math.PI / 2, 0, 0]}
37
+ >
38
+ <animated.group name="UR3e_J03" position={[-0.244, 0, 0]}>
39
+ <animated.group name="UR3e_J04" position={[-0.213, 0, 0]}>
40
+ <animated.group
41
+ name="UR3e_J05"
42
+ position={[0, 0.131, 0]}
43
+ rotation={[Math.PI / 2, 0, 0]}
44
+ >
45
+ <animated.group
46
+ name="UR3e_J06"
47
+ position={[0, 0.085, 0]}
48
+ rotation={[-Math.PI / 2, 0, 0]}
49
+ >
50
+ <group name="UR3e_FLG" position={[0, 0.092, 0]} />
51
+ <mesh
52
+ name="UR3e_L06"
53
+ castShadow
54
+ receiveShadow
55
+ geometry={nodes.UR3e_L06.geometry}
56
+ material={materials.Standard}
57
+ />
58
+ </animated.group>
59
+ <mesh
60
+ name="UR3e_L05"
61
+ castShadow
62
+ receiveShadow
63
+ geometry={nodes.UR3e_L05.geometry}
64
+ material={materials.Standard}
65
+ />
66
+ </animated.group>
67
+ <mesh
68
+ name="UR3e_L04"
69
+ castShadow
70
+ receiveShadow
71
+ geometry={nodes.UR3e_L04.geometry}
72
+ material={materials.Standard}
73
+ />
74
+ </animated.group>
75
+ <mesh
76
+ name="UR3e_L03"
77
+ castShadow
78
+ receiveShadow
79
+ geometry={nodes.UR3e_L03.geometry}
80
+ material={materials.Standard}
81
+ />
82
+ </animated.group>
83
+ <mesh
84
+ name="UR3e_L02"
85
+ castShadow
86
+ receiveShadow
87
+ geometry={nodes.UR3e_L02.geometry}
88
+ material={materials.Standard}
89
+ />
90
+ </animated.group>
91
+ <mesh
92
+ name="UR3e_L01"
93
+ castShadow
94
+ receiveShadow
95
+ geometry={nodes.UR3e_L01.geometry}
96
+ material={materials.Standard}
97
+ />
98
+ </animated.group>
99
+ <mesh
100
+ name="UR3e_L00"
101
+ castShadow
102
+ receiveShadow
103
+ geometry={nodes.UR3e_L00.geometry}
104
+ material={materials.Standard}
105
+ rotation={[-Math.PI / 2, 0, 0]}
106
+ />
107
+ </animated.group>
108
+ </group>
109
+ </group>
110
+ </>
111
+ )
112
+ }
@@ -0,0 +1,111 @@
1
+ import { useGLTF } from "@react-three/drei"
2
+ import type * as THREE from "three"
3
+ import { animated } from "@react-spring/three"
4
+ import type { RobotProps } from "./SupportedRobot"
5
+ import RobotAnimator from "./RobotAnimator"
6
+
7
+ export function UniversalRobots_UR5({
8
+ modelURL,
9
+ connectedMotionGroup,
10
+ ...props
11
+ }: RobotProps) {
12
+ const gltf = useGLTF(modelURL) as any
13
+ const nodes = gltf.nodes
14
+
15
+ function setRotation(jointObjects: THREE.Object3D[], jointValues: number[]) {
16
+ jointObjects.forEach(
17
+ (object, index) => (object.rotation.y = jointValues[index]!),
18
+ )
19
+ }
20
+
21
+ return (
22
+ <>
23
+ <RobotAnimator
24
+ connectedMotionGroup={connectedMotionGroup}
25
+ robotRootObjectName="Scene"
26
+ onRotationChanged={setRotation}
27
+ />
28
+ <group {...props} dispose={null}>
29
+ <group name="Scene">
30
+ <group name="UR5" rotation={[Math.PI / 2, 0, 0]}>
31
+ <animated.group name="UR5_J01" rotation={[-Math.PI / 2, 0, 0]}>
32
+ <animated.group
33
+ name="UR5_J02"
34
+ position={[0, 0.089, 0]}
35
+ rotation={[Math.PI / 2, 0, 0]}
36
+ >
37
+ <animated.group name="UR5_J03" position={[-0.425, 0, 0]}>
38
+ <animated.group name="UR5_J04" position={[-0.392, 0, 0]}>
39
+ <animated.group
40
+ name="UR5_J05"
41
+ position={[0, 0.109, 0]}
42
+ rotation={[Math.PI / 2, 0, 0]}
43
+ >
44
+ <animated.group
45
+ name="UR5_J06"
46
+ position={[0, 0.095, 0]}
47
+ rotation={[-Math.PI / 2, 0, 0]}
48
+ >
49
+ <group name="UR5_FLG" position={[0, 0.082, 0]} />
50
+ <mesh
51
+ name="UR5_L06"
52
+ castShadow
53
+ receiveShadow
54
+ geometry={nodes.UR5_L06.geometry}
55
+ material={nodes.UR5_L06.material}
56
+ />
57
+ </animated.group>
58
+ <mesh
59
+ name="UR5_L05"
60
+ castShadow
61
+ receiveShadow
62
+ geometry={nodes.UR5_L05.geometry}
63
+ material={nodes.UR5_L05.material}
64
+ />
65
+ </animated.group>
66
+ <mesh
67
+ name="UR5_L04"
68
+ castShadow
69
+ receiveShadow
70
+ geometry={nodes.UR5_L04.geometry}
71
+ material={nodes.UR5_L04.material}
72
+ />
73
+ </animated.group>
74
+ <mesh
75
+ name="UR5_L03"
76
+ castShadow
77
+ receiveShadow
78
+ geometry={nodes.UR5_L03.geometry}
79
+ material={nodes.UR5_L03.material}
80
+ />
81
+ </animated.group>
82
+ <mesh
83
+ name="UR5_L02"
84
+ castShadow
85
+ receiveShadow
86
+ geometry={nodes.UR5_L02.geometry}
87
+ material={nodes.UR5_L02.material}
88
+ />
89
+ </animated.group>
90
+ <mesh
91
+ name="UR5_L01"
92
+ castShadow
93
+ receiveShadow
94
+ geometry={nodes.UR5_L01.geometry}
95
+ material={nodes.UR5_L01.material}
96
+ />
97
+ </animated.group>
98
+ <mesh
99
+ name="UR5_L00"
100
+ castShadow
101
+ receiveShadow
102
+ geometry={nodes.UR5_L00.geometry}
103
+ material={nodes.UR5_L00.material}
104
+ rotation={[-Math.PI / 2, 0, 0]}
105
+ />
106
+ </group>
107
+ </group>
108
+ </group>
109
+ </>
110
+ )
111
+ }
@@ -0,0 +1,280 @@
1
+ import { useGLTF } from "@react-three/drei"
2
+ import type * as THREE from "three"
3
+ import type { RobotProps } from "./SupportedRobot"
4
+ import { animated } from "@react-spring/three"
5
+ import RobotAnimator from "./RobotAnimator"
6
+
7
+ export function UniversalRobots_UR5e({
8
+ modelURL,
9
+ connectedMotionGroup,
10
+ ...props
11
+ }: RobotProps) {
12
+ const gltf = useGLTF(modelURL) as any
13
+ const nodes = gltf.nodes
14
+ const materials = gltf.materials
15
+
16
+ function setRotation(jointObjects: THREE.Object3D[], jointValues: number[]) {
17
+ jointObjects.forEach(
18
+ (object, index) => (object.rotation.y = jointValues[index]!),
19
+ )
20
+ }
21
+
22
+ return (
23
+ <>
24
+ <RobotAnimator
25
+ connectedMotionGroup={connectedMotionGroup}
26
+ robotRootObjectName="Scene"
27
+ onRotationChanged={setRotation}
28
+ />
29
+ <group {...props} dispose={null}>
30
+ <group name="Scene">
31
+ <group name="UR5e" rotation={[Math.PI / 2, 0, 0]}>
32
+ <animated.group name="UR5e_J01" rotation={[-Math.PI / 2, 0, 0]}>
33
+ <animated.group
34
+ name="UR5e_J02"
35
+ position={[0, 0.162, 0]}
36
+ rotation={[Math.PI / 2, 0, 0]}
37
+ >
38
+ <animated.group name="UR5e_J03" position={[-0.425, 0, 0]}>
39
+ <animated.group name="UR5e_J04" position={[-0.392, 0, 0]}>
40
+ <animated.group
41
+ name="UR5e_J05"
42
+ position={[0, 0.133, 0]}
43
+ rotation={[Math.PI / 2, 0, 0]}
44
+ >
45
+ <animated.group
46
+ name="UR5e_J06"
47
+ position={[0, 0.1, 0]}
48
+ rotation={[-Math.PI / 2, 0, 0]}
49
+ >
50
+ <group name="UR5e_FLG" position={[0, 0.1, 0]}></group>
51
+
52
+ <group
53
+ name="UR5e_L06"
54
+ position={[0, 0.1, 0]}
55
+ rotation={[0, 0, -Math.PI]}
56
+ >
57
+ <>
58
+ <mesh
59
+ name="C-1000255"
60
+ castShadow
61
+ receiveShadow
62
+ geometry={nodes["C-1000255"].geometry}
63
+ material={materials.Black}
64
+ />
65
+ <mesh
66
+ name="C-1000255_1"
67
+ castShadow
68
+ receiveShadow
69
+ geometry={nodes["C-1000255_1"].geometry}
70
+ material={materials.Metal}
71
+ />
72
+ </>
73
+ </group>
74
+ </animated.group>
75
+ <group
76
+ name="UR5e_L05"
77
+ rotation={[-Math.PI / 2, -Math.PI / 3, 0]}
78
+ >
79
+ <>
80
+ <mesh
81
+ name="C-1000253"
82
+ castShadow
83
+ receiveShadow
84
+ geometry={nodes["C-1000253"].geometry}
85
+ material={materials.Blue}
86
+ />
87
+ <mesh
88
+ name="C-1000253_1"
89
+ castShadow
90
+ receiveShadow
91
+ geometry={nodes["C-1000253_1"].geometry}
92
+ material={materials.Black}
93
+ />
94
+ <mesh
95
+ name="C-1000253_2"
96
+ castShadow
97
+ receiveShadow
98
+ geometry={nodes["C-1000253_2"].geometry}
99
+ material={materials.Metal}
100
+ />
101
+ <mesh
102
+ name="C-1000253_3"
103
+ castShadow
104
+ receiveShadow
105
+ geometry={nodes["C-1000253_3"].geometry}
106
+ material={materials.DarkGray}
107
+ />
108
+ </>
109
+ </group>
110
+ </animated.group>
111
+ <group name="UR5e_L04" rotation={[0, -Math.PI / 3, 0]}>
112
+ <>
113
+ <mesh
114
+ name="C-1000251"
115
+ castShadow
116
+ receiveShadow
117
+ geometry={nodes["C-1000251"].geometry}
118
+ material={materials.Blue}
119
+ />
120
+ <mesh
121
+ name="C-1000251_1"
122
+ castShadow
123
+ receiveShadow
124
+ geometry={nodes["C-1000251_1"].geometry}
125
+ material={materials.Black}
126
+ />
127
+ <mesh
128
+ name="C-1000251_2"
129
+ castShadow
130
+ receiveShadow
131
+ geometry={nodes["C-1000251_2"].geometry}
132
+ material={materials.Metal}
133
+ />
134
+ <mesh
135
+ name="C-1000251_3"
136
+ castShadow
137
+ receiveShadow
138
+ geometry={nodes["C-1000251_3"].geometry}
139
+ material={materials.DarkGray}
140
+ />
141
+ </>
142
+ </group>
143
+ </animated.group>
144
+ <group name="UR5e_L03">
145
+ <>
146
+ <mesh
147
+ name="C-1000250"
148
+ castShadow
149
+ receiveShadow
150
+ geometry={nodes["C-1000250"].geometry}
151
+ material={materials.Black}
152
+ />
153
+ <mesh
154
+ name="C-1000250_1"
155
+ castShadow
156
+ receiveShadow
157
+ geometry={nodes["C-1000250_1"].geometry}
158
+ material={materials.DarkGray}
159
+ />
160
+ <mesh
161
+ name="C-1000250_2"
162
+ castShadow
163
+ receiveShadow
164
+ geometry={nodes["C-1000250_2"].geometry}
165
+ material={materials.Blue}
166
+ />
167
+ <mesh
168
+ name="C-1000250_3"
169
+ castShadow
170
+ receiveShadow
171
+ geometry={nodes["C-1000250_3"].geometry}
172
+ material={materials.Metal}
173
+ />
174
+ <mesh
175
+ name="C-1000250_4"
176
+ castShadow
177
+ receiveShadow
178
+ geometry={nodes["C-1000250_4"].geometry}
179
+ material={materials.Metal}
180
+ />
181
+ </>
182
+ </group>
183
+ </animated.group>
184
+ <group name="UR5e_L02" rotation={[0, -Math.PI / 2, 0]}>
185
+ <>
186
+ <mesh
187
+ name="C-1000249"
188
+ castShadow
189
+ receiveShadow
190
+ geometry={nodes["C-1000249"].geometry}
191
+ material={materials.Metal}
192
+ />
193
+ <mesh
194
+ name="C-1000249_1"
195
+ castShadow
196
+ receiveShadow
197
+ geometry={nodes["C-1000249_1"].geometry}
198
+ material={materials.Black}
199
+ />
200
+ <mesh
201
+ name="C-1000249_2"
202
+ castShadow
203
+ receiveShadow
204
+ geometry={nodes["C-1000249_2"].geometry}
205
+ material={materials.DarkGray}
206
+ />
207
+ <mesh
208
+ name="C-1000249_3"
209
+ castShadow
210
+ receiveShadow
211
+ geometry={nodes["C-1000249_3"].geometry}
212
+ material={materials.Blue}
213
+ />
214
+ <mesh
215
+ name="C-1000249_4"
216
+ castShadow
217
+ receiveShadow
218
+ geometry={nodes["C-1000249_4"].geometry}
219
+ material={materials.Metal}
220
+ />
221
+ </>
222
+ </group>
223
+ </animated.group>
224
+ <group name="UR5e_L01" rotation={[Math.PI / 2, 0, 0]}>
225
+ <>
226
+ <mesh
227
+ name="C-1000248"
228
+ castShadow
229
+ receiveShadow
230
+ geometry={nodes["C-1000248"].geometry}
231
+ material={materials.DarkGray}
232
+ />
233
+ <mesh
234
+ name="C-1000248_1"
235
+ castShadow
236
+ receiveShadow
237
+ geometry={nodes["C-1000248_1"].geometry}
238
+ material={materials.Black}
239
+ />
240
+ <mesh
241
+ name="C-1000248_2"
242
+ castShadow
243
+ receiveShadow
244
+ geometry={nodes["C-1000248_2"].geometry}
245
+ material={materials.Blue}
246
+ />
247
+ <mesh
248
+ name="C-1000248_3"
249
+ castShadow
250
+ receiveShadow
251
+ geometry={nodes["C-1000248_3"].geometry}
252
+ material={materials.Metal}
253
+ />
254
+ </>
255
+ </group>
256
+ </animated.group>
257
+ <group name="UR5e_L00">
258
+ <>
259
+ <mesh
260
+ name="C-1000257"
261
+ castShadow
262
+ receiveShadow
263
+ geometry={nodes["C-1000257"].geometry}
264
+ material={materials.Black}
265
+ />
266
+ <mesh
267
+ name="C-1000257_1"
268
+ castShadow
269
+ receiveShadow
270
+ geometry={nodes["C-1000257_1"].geometry}
271
+ material={materials.Metal}
272
+ />
273
+ </>
274
+ </group>
275
+ </group>
276
+ </group>
277
+ </group>
278
+ </>
279
+ )
280
+ }
@@ -0,0 +1,152 @@
1
+ import { useGLTF } from "@react-three/drei"
2
+ import type * as THREE from "three"
3
+ import type { RobotProps } from "./SupportedRobot"
4
+ import { animated } from "@react-spring/three"
5
+ import RobotAnimator from "./RobotAnimator"
6
+
7
+ export function Yaskawa_AR1440({ modelURL, connectedMotionGroup, ...props }: RobotProps) {
8
+ const gltf = useGLTF(modelURL) as any
9
+
10
+ const nodes = gltf.nodes
11
+ const materials = gltf.materials
12
+ const rotationOffsets = [0, -Math.PI / 2, 0, 0, 0, 0]
13
+ const rotationSign = [1, -1, 1, 1, 1, 1]
14
+
15
+ function setRotation(jointObjects: THREE.Object3D[], jointValues: number[]) {
16
+ jointObjects.forEach(
17
+ (object, index) =>
18
+ (object.rotation.y =
19
+ rotationSign[index]! * jointValues[index]! + rotationOffsets[index]!),
20
+ )
21
+ }
22
+
23
+ return (
24
+ <>
25
+ <RobotAnimator
26
+ connectedMotionGroup={connectedMotionGroup}
27
+ robotRootObjectName="Scene"
28
+ onRotationChanged={setRotation}
29
+ />
30
+ <group {...props} dispose={null}>
31
+ <group name="Scene">
32
+ <group name="AR1440" rotation={[Math.PI / 2, 0, 0]}>
33
+ <animated.group name="AR1440_J01" rotation={[-Math.PI / 2, 0, 0]}>
34
+ <animated.group
35
+ name="AR1440_J02"
36
+ position={[0.155, 0, 0]}
37
+ rotation={[Math.PI / 2, 0, Math.PI]}
38
+ >
39
+ <animated.group
40
+ name="AR1440_J03"
41
+ position={[0.614, 0, 0]}
42
+ rotation={[Math.PI, 0, 0]}
43
+ >
44
+ <animated.group
45
+ name="AR1440_J04"
46
+ position={[0.2, 0, 0]}
47
+ rotation={[-Math.PI / 2, 0, 0]}
48
+ >
49
+ <animated.group
50
+ name="AR1440_J05"
51
+ position={[0, -0.64, 0]}
52
+ rotation={[Math.PI / 2, 0, 0]}
53
+ >
54
+ <animated.group
55
+ name="AR1440_J06"
56
+ rotation={[-Math.PI / 2, 0, 0]}
57
+ >
58
+ <group
59
+ name="AR1440_FLG"
60
+ position={[0, -0.1, 0]}
61
+ rotation={[-Math.PI, 0, 0]}
62
+ ></group>
63
+ <mesh
64
+ name="AR1440_L06_CAD"
65
+ castShadow
66
+ receiveShadow
67
+ geometry={nodes.AR1440_L06_CAD.geometry}
68
+ material={materials.metall}
69
+ />
70
+ </animated.group>
71
+ <mesh
72
+ name="AR1440_L05_CAD"
73
+ castShadow
74
+ receiveShadow
75
+ geometry={nodes.AR1440_L05_CAD.geometry}
76
+ material={materials.yaskawaBlueMetall}
77
+ />
78
+ </animated.group>
79
+ <group name="AR1440_L04_CAD">
80
+ <mesh
81
+ name="AR1440_L04_CAD001"
82
+ castShadow
83
+ receiveShadow
84
+ geometry={nodes.AR1440_L04_CAD001.geometry}
85
+ material={materials.yaskawaBlueMetall}
86
+ />
87
+ <mesh
88
+ name="AR1440_L04_CAD001_1"
89
+ castShadow
90
+ receiveShadow
91
+ geometry={nodes.AR1440_L04_CAD001_1.geometry}
92
+ material={materials.white}
93
+ />
94
+ </group>
95
+ </animated.group>
96
+ <group name="AR1440_L03_CAD">
97
+ <mesh
98
+ name="AR1440_L03_CAD001"
99
+ castShadow
100
+ receiveShadow
101
+ geometry={nodes.AR1440_L03_CAD001.geometry}
102
+ material={materials.yaskawaBlueMetall}
103
+ />
104
+ <mesh
105
+ name="AR1440_L03_CAD001_1"
106
+ castShadow
107
+ receiveShadow
108
+ geometry={nodes.AR1440_L03_CAD001_1.geometry}
109
+ material={materials.blackMetall}
110
+ />
111
+ </group>
112
+ </animated.group>
113
+ <mesh
114
+ name="AR1440_L02_CAD"
115
+ castShadow
116
+ receiveShadow
117
+ geometry={nodes.AR1440_L02_CAD.geometry}
118
+ material={materials.yaskawaBlueMetall}
119
+ />
120
+ </animated.group>
121
+ <group name="AR1440_L01_CAD">
122
+ <mesh
123
+ name="AR1440_L01_CAD001"
124
+ castShadow
125
+ receiveShadow
126
+ geometry={nodes.AR1440_L01_CAD001.geometry}
127
+ material={materials.yaskawaBlueMetall}
128
+ />
129
+ <mesh
130
+ name="AR1440_L01_CAD001_1"
131
+ castShadow
132
+ receiveShadow
133
+ geometry={nodes.AR1440_L01_CAD001_1.geometry}
134
+ material={materials.blackMetall}
135
+ />
136
+ </group>
137
+ </animated.group>
138
+ <mesh
139
+ name="AR1440_L00_CAD"
140
+ castShadow
141
+ receiveShadow
142
+ geometry={nodes.AR1440_L00_CAD.geometry}
143
+ material={materials.yaskawaBlueMetall}
144
+ position={[0, 0, 0.45]}
145
+ rotation={[-Math.PI / 2, 0, 0]}
146
+ />
147
+ </group>
148
+ </group>
149
+ </group>
150
+ </>
151
+ )
152
+ }