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

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 (78) hide show
  1. package/package.json +18 -8
  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 +55 -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 +127 -0
  27. package/src/components/robots/AxisConfig.ts +3 -0
  28. package/src/components/robots/DHRobot.tsx +128 -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 +171 -0
  32. package/src/components/robots/FANUC_CRX25iA.tsx +171 -0
  33. package/src/components/robots/FANUC_CRX25iAL.tsx +182 -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/Robot.tsx +42 -0
  37. package/src/components/robots/RobotAnimator.tsx +82 -0
  38. package/src/components/robots/SupportedRobot.tsx +144 -0
  39. package/src/components/robots/UniversalRobots_UR10.tsx +112 -0
  40. package/src/components/robots/UniversalRobots_UR10e.tsx +275 -0
  41. package/src/components/robots/UniversalRobots_UR3.tsx +112 -0
  42. package/src/components/robots/UniversalRobots_UR3e.tsx +112 -0
  43. package/src/components/robots/UniversalRobots_UR5.tsx +111 -0
  44. package/src/components/robots/UniversalRobots_UR5e.tsx +280 -0
  45. package/src/components/robots/Yaskawa_AR1440.tsx +156 -0
  46. package/src/components/robots/Yaskawa_AR1730.tsx +169 -0
  47. package/src/components/robots/Yaskawa_AR2010.tsx +163 -0
  48. package/src/components/robots/Yaskawa_AR3120.tsx +164 -0
  49. package/src/components/robots/Yaskawa_AR900.tsx +125 -0
  50. package/src/components/utils/converters.ts +23 -0
  51. package/src/components/utils/errorHandling.ts +30 -0
  52. package/src/components/utils/hooks.tsx +54 -0
  53. package/src/components/utils/robotTreeQuery.ts +27 -0
  54. package/src/components/wandelscript-editor/WandelscriptEditor.stories.tsx +45 -0
  55. package/src/components/wandelscript-editor/WandelscriptEditor.tsx +114 -0
  56. package/src/components/wandelscript-editor/wandelscript.tmLanguage.ts +62 -0
  57. package/src/declarations.d.ts +10 -0
  58. package/src/i18n/config.ts +27 -0
  59. package/src/i18n/locales/de/translations.json +12 -0
  60. package/src/i18n/locales/en/translations.json +12 -0
  61. package/src/icons/arrowForwardFilled.tsx +7 -0
  62. package/src/icons/axis-x.svg +3 -0
  63. package/src/icons/axis-y.svg +3 -0
  64. package/src/icons/axis-z.svg +3 -0
  65. package/src/icons/expandFilled.tsx +11 -0
  66. package/src/icons/home.tsx +12 -0
  67. package/src/icons/index.ts +6 -0
  68. package/src/icons/infoOutlined.tsx +10 -0
  69. package/src/icons/jogging.svg +3 -0
  70. package/src/icons/robot.svg +3 -0
  71. package/src/icons/robot.tsx +14 -0
  72. package/src/icons/rotation.svg +4 -0
  73. package/src/icons/wbLogo.tsx +21 -0
  74. package/src/index.ts +8 -0
  75. package/src/themes/color.tsx +74 -0
  76. package/src/themes/theme.ts +150 -0
  77. package/src/themes/wbTheme.stories.tsx +64 -0
  78. 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
+ rapidlyChangingMotionState,
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
+ rapidlyChangingMotionState={rapidlyChangingMotionState}
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
+ rapidlyChangingMotionState,
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
+ rapidlyChangingMotionState={rapidlyChangingMotionState}
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
+ rapidlyChangingMotionState,
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
+ rapidlyChangingMotionState={rapidlyChangingMotionState}
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,156 @@
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({
8
+ modelURL,
9
+ rapidlyChangingMotionState,
10
+ ...props
11
+ }: RobotProps) {
12
+ const gltf = useGLTF(modelURL) as any
13
+
14
+ const nodes = gltf.nodes
15
+ const materials = gltf.materials
16
+ const rotationOffsets = [0, -Math.PI / 2, 0, 0, 0, 0]
17
+ const rotationSign = [1, -1, 1, 1, 1, 1]
18
+
19
+ function setRotation(jointObjects: THREE.Object3D[], jointValues: number[]) {
20
+ jointObjects.forEach(
21
+ (object, index) =>
22
+ (object.rotation.y =
23
+ rotationSign[index]! * jointValues[index]! + rotationOffsets[index]!),
24
+ )
25
+ }
26
+
27
+ return (
28
+ <>
29
+ <RobotAnimator
30
+ rapidlyChangingMotionState={rapidlyChangingMotionState}
31
+ robotRootObjectName="Scene"
32
+ onRotationChanged={setRotation}
33
+ />
34
+ <group {...props} dispose={null}>
35
+ <group name="Scene">
36
+ <group name="AR1440" rotation={[Math.PI / 2, 0, 0]}>
37
+ <animated.group name="AR1440_J01" rotation={[-Math.PI / 2, 0, 0]}>
38
+ <animated.group
39
+ name="AR1440_J02"
40
+ position={[0.155, 0, 0]}
41
+ rotation={[Math.PI / 2, 0, Math.PI]}
42
+ >
43
+ <animated.group
44
+ name="AR1440_J03"
45
+ position={[0.614, 0, 0]}
46
+ rotation={[Math.PI, 0, 0]}
47
+ >
48
+ <animated.group
49
+ name="AR1440_J04"
50
+ position={[0.2, 0, 0]}
51
+ rotation={[-Math.PI / 2, 0, 0]}
52
+ >
53
+ <animated.group
54
+ name="AR1440_J05"
55
+ position={[0, -0.64, 0]}
56
+ rotation={[Math.PI / 2, 0, 0]}
57
+ >
58
+ <animated.group
59
+ name="AR1440_J06"
60
+ rotation={[-Math.PI / 2, 0, 0]}
61
+ >
62
+ <group
63
+ name="AR1440_FLG"
64
+ position={[0, -0.1, 0]}
65
+ rotation={[-Math.PI, 0, 0]}
66
+ ></group>
67
+ <mesh
68
+ name="AR1440_L06_CAD"
69
+ castShadow
70
+ receiveShadow
71
+ geometry={nodes.AR1440_L06_CAD.geometry}
72
+ material={materials.metall}
73
+ />
74
+ </animated.group>
75
+ <mesh
76
+ name="AR1440_L05_CAD"
77
+ castShadow
78
+ receiveShadow
79
+ geometry={nodes.AR1440_L05_CAD.geometry}
80
+ material={materials.yaskawaBlueMetall}
81
+ />
82
+ </animated.group>
83
+ <group name="AR1440_L04_CAD">
84
+ <mesh
85
+ name="AR1440_L04_CAD001"
86
+ castShadow
87
+ receiveShadow
88
+ geometry={nodes.AR1440_L04_CAD001.geometry}
89
+ material={materials.yaskawaBlueMetall}
90
+ />
91
+ <mesh
92
+ name="AR1440_L04_CAD001_1"
93
+ castShadow
94
+ receiveShadow
95
+ geometry={nodes.AR1440_L04_CAD001_1.geometry}
96
+ material={materials.white}
97
+ />
98
+ </group>
99
+ </animated.group>
100
+ <group name="AR1440_L03_CAD">
101
+ <mesh
102
+ name="AR1440_L03_CAD001"
103
+ castShadow
104
+ receiveShadow
105
+ geometry={nodes.AR1440_L03_CAD001.geometry}
106
+ material={materials.yaskawaBlueMetall}
107
+ />
108
+ <mesh
109
+ name="AR1440_L03_CAD001_1"
110
+ castShadow
111
+ receiveShadow
112
+ geometry={nodes.AR1440_L03_CAD001_1.geometry}
113
+ material={materials.blackMetall}
114
+ />
115
+ </group>
116
+ </animated.group>
117
+ <mesh
118
+ name="AR1440_L02_CAD"
119
+ castShadow
120
+ receiveShadow
121
+ geometry={nodes.AR1440_L02_CAD.geometry}
122
+ material={materials.yaskawaBlueMetall}
123
+ />
124
+ </animated.group>
125
+ <group name="AR1440_L01_CAD">
126
+ <mesh
127
+ name="AR1440_L01_CAD001"
128
+ castShadow
129
+ receiveShadow
130
+ geometry={nodes.AR1440_L01_CAD001.geometry}
131
+ material={materials.yaskawaBlueMetall}
132
+ />
133
+ <mesh
134
+ name="AR1440_L01_CAD001_1"
135
+ castShadow
136
+ receiveShadow
137
+ geometry={nodes.AR1440_L01_CAD001_1.geometry}
138
+ material={materials.blackMetall}
139
+ />
140
+ </group>
141
+ </animated.group>
142
+ <mesh
143
+ name="AR1440_L00_CAD"
144
+ castShadow
145
+ receiveShadow
146
+ geometry={nodes.AR1440_L00_CAD.geometry}
147
+ material={materials.yaskawaBlueMetall}
148
+ position={[0, 0, 0.45]}
149
+ rotation={[-Math.PI / 2, 0, 0]}
150
+ />
151
+ </group>
152
+ </group>
153
+ </group>
154
+ </>
155
+ )
156
+ }