@operato/scene-urdf 10.0.0-beta.2 → 10.0.0-beta.22
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/README.md +22 -25
- package/TODO.md +58 -0
- package/dist/editors/index.d.ts +7 -0
- package/dist/editors/index.js +12 -1
- package/dist/editors/index.js.map +1 -1
- package/dist/editors/property-editor-urdf-joints.d.ts +54 -0
- package/dist/editors/property-editor-urdf-joints.js +246 -0
- package/dist/editors/property-editor-urdf-joints.js.map +1 -0
- package/dist/editors/property-editor-urdf-preset.d.ts +8 -0
- package/dist/editors/property-editor-urdf-preset.js +114 -0
- package/dist/editors/property-editor-urdf-preset.js.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.js +22 -2
- package/dist/index.js.map +1 -1
- package/dist/joint-controller.d.ts +35 -0
- package/dist/joint-controller.js +34 -0
- package/dist/joint-controller.js.map +1 -0
- package/dist/real-object-urdf.d.ts +106 -0
- package/dist/real-object-urdf.js +527 -0
- package/dist/real-object-urdf.js.map +1 -0
- package/dist/smoothing-controller.d.ts +15 -0
- package/dist/smoothing-controller.js +88 -0
- package/dist/smoothing-controller.js.map +1 -0
- package/dist/templates/index.d.ts +3 -0
- package/dist/templates/index.js +2 -3
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/{urdf-controller.d.ts → urdf.d.ts} +3 -0
- package/dist/templates/urdf.js +19 -0
- package/dist/templates/urdf.js.map +1 -0
- package/dist/urdf-object.d.ts +264 -0
- package/dist/urdf-object.js +190 -0
- package/dist/urdf-object.js.map +1 -0
- package/dist/urdf-presets.d.ts +22 -0
- package/dist/urdf-presets.js +176 -0
- package/dist/urdf-presets.js.map +1 -0
- package/icons/urdf.png +0 -0
- package/package.json +5 -4
- package/translations/en.json +10 -16
- package/translations/ja.json +10 -16
- package/translations/ko.json +10 -16
- package/translations/ms.json +10 -16
- package/translations/zh.json +10 -16
- package/dist/elements/drag-n-drop.d.ts +0 -2
- package/dist/elements/drag-n-drop.js +0 -126
- package/dist/elements/drag-n-drop.js.map +0 -1
- package/dist/elements/urdf-controller-element.d.ts +0 -12
- package/dist/elements/urdf-controller-element.js +0 -283
- package/dist/elements/urdf-controller-element.js.map +0 -1
- package/dist/elements/urdf-drag-controls.d.ts +0 -32
- package/dist/elements/urdf-drag-controls.js +0 -197
- package/dist/elements/urdf-drag-controls.js.map +0 -1
- package/dist/elements/urdf-manipulator-element.d.ts +0 -15
- package/dist/elements/urdf-manipulator-element.js +0 -112
- package/dist/elements/urdf-manipulator-element.js.map +0 -1
- package/dist/elements/urdf-viewer-element.d.ts +0 -53
- package/dist/elements/urdf-viewer-element.js +0 -414
- package/dist/elements/urdf-viewer-element.js.map +0 -1
- package/dist/templates/urdf-controller.js +0 -16
- package/dist/templates/urdf-controller.js.map +0 -1
- package/dist/templates/urdf-viewer.d.ts +0 -14
- package/dist/templates/urdf-viewer.js +0 -16
- package/dist/templates/urdf-viewer.js.map +0 -1
- package/dist/urdf-controller.d.ts +0 -15
- package/dist/urdf-controller.js +0 -70
- package/dist/urdf-controller.js.map +0 -1
- package/dist/urdf-viewer.d.ts +0 -16
- package/dist/urdf-viewer.js +0 -202
- package/dist/urdf-viewer.js.map +0 -1
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* 공개된 URDF 프리셋 목록. 프리셋 선택 시 컴포넌트의 src 뿐 아니라 크기/축/
|
|
5
|
+
* 단위 스케일도 적절한 기본값으로 함께 설정한다. 모든 URL은 raw.githubusercontent
|
|
6
|
+
* .com 경유로 CORS 열려있음.
|
|
7
|
+
*/
|
|
8
|
+
export const URDF_PRESETS = [
|
|
9
|
+
{
|
|
10
|
+
id: 'ur5',
|
|
11
|
+
display: 'Universal Robots UR5 (6-DOF arm)',
|
|
12
|
+
category: 'arm',
|
|
13
|
+
src: 'https://raw.githubusercontent.com/mmatl/urdfpy/master/tests/data/ur5/ur5.urdf',
|
|
14
|
+
width: 200, height: 200, depth: 200,
|
|
15
|
+
upAxis: 'z',
|
|
16
|
+
unitScale: 1000
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'kuka-iiwa',
|
|
20
|
+
display: 'KUKA LBR iiwa (7-DOF arm)',
|
|
21
|
+
category: 'arm',
|
|
22
|
+
src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/kuka_iiwa/model.urdf',
|
|
23
|
+
width: 200, height: 200, depth: 200,
|
|
24
|
+
upAxis: 'z',
|
|
25
|
+
unitScale: 1000
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 'kuka-lwr',
|
|
29
|
+
display: 'KUKA LWR (7-DOF research arm)',
|
|
30
|
+
category: 'arm',
|
|
31
|
+
src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/kuka_lwr/kuka.urdf',
|
|
32
|
+
width: 200, height: 200, depth: 200,
|
|
33
|
+
upAxis: 'z',
|
|
34
|
+
unitScale: 1000
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 'widowx',
|
|
38
|
+
display: 'WidowX (6-DOF small arm)',
|
|
39
|
+
category: 'arm',
|
|
40
|
+
src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/widowx/widowx.urdf',
|
|
41
|
+
width: 200, height: 200, depth: 200,
|
|
42
|
+
upAxis: 'z',
|
|
43
|
+
unitScale: 1000
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: 'husky',
|
|
47
|
+
display: 'Clearpath Husky (4-wheel mobile)',
|
|
48
|
+
category: 'mobile',
|
|
49
|
+
src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/husky/husky.urdf',
|
|
50
|
+
width: 200, height: 200, depth: 200,
|
|
51
|
+
upAxis: 'z',
|
|
52
|
+
unitScale: 1000
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: 'minitaur',
|
|
56
|
+
display: 'Ghost Minitaur (quadruped)',
|
|
57
|
+
category: 'quadruped',
|
|
58
|
+
src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/quadruped/minitaur.urdf',
|
|
59
|
+
width: 200, height: 200, depth: 200,
|
|
60
|
+
upAxis: 'z',
|
|
61
|
+
unitScale: 1000
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: 'quadrotor',
|
|
65
|
+
display: 'Quadrotor (drone)',
|
|
66
|
+
category: 'aerial',
|
|
67
|
+
src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/Quadrotor/quadrotor.urdf',
|
|
68
|
+
width: 200, height: 200, depth: 200,
|
|
69
|
+
upAxis: 'z',
|
|
70
|
+
unitScale: 1000
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: 'nao',
|
|
74
|
+
display: 'Aldebaran NAO (humanoid)',
|
|
75
|
+
category: 'humanoid',
|
|
76
|
+
src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/humanoid/nao.urdf',
|
|
77
|
+
width: 200, height: 200, depth: 200,
|
|
78
|
+
upAxis: 'z',
|
|
79
|
+
unitScale: 1000
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: 'racecar',
|
|
83
|
+
display: 'Racecar (4-wheel)',
|
|
84
|
+
category: 'mobile',
|
|
85
|
+
src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/racecar/racecar.urdf',
|
|
86
|
+
width: 200, height: 200, depth: 200,
|
|
87
|
+
upAxis: 'z',
|
|
88
|
+
unitScale: 1000
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: 'differential',
|
|
92
|
+
display: 'Differential Drive (simple mobile)',
|
|
93
|
+
category: 'mobile',
|
|
94
|
+
src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/differential/diff_ring.urdf',
|
|
95
|
+
width: 200, height: 200, depth: 200,
|
|
96
|
+
upAxis: 'z',
|
|
97
|
+
unitScale: 1000
|
|
98
|
+
},
|
|
99
|
+
// --- Unitree Robotics 시리즈 (package:// 경로 사용) ---
|
|
100
|
+
{
|
|
101
|
+
id: 'unitree-a1',
|
|
102
|
+
display: 'Unitree A1 (mini quadruped)',
|
|
103
|
+
category: 'quadruped',
|
|
104
|
+
src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/a1_description/urdf/a1.urdf',
|
|
105
|
+
packages: {
|
|
106
|
+
a1_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/a1_description'
|
|
107
|
+
},
|
|
108
|
+
width: 200, height: 200, depth: 200,
|
|
109
|
+
upAxis: 'z',
|
|
110
|
+
unitScale: 1000
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
id: 'unitree-go1',
|
|
114
|
+
display: 'Unitree Go1 (quadruped)',
|
|
115
|
+
category: 'quadruped',
|
|
116
|
+
src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/go1_description/urdf/go1.urdf',
|
|
117
|
+
packages: {
|
|
118
|
+
go1_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/go1_description'
|
|
119
|
+
},
|
|
120
|
+
width: 200, height: 200, depth: 200,
|
|
121
|
+
upAxis: 'z',
|
|
122
|
+
unitScale: 1000
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
id: 'unitree-aliengo',
|
|
126
|
+
display: 'Unitree Aliengo (large quadruped)',
|
|
127
|
+
category: 'quadruped',
|
|
128
|
+
src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/aliengo_description/urdf/aliengo.urdf',
|
|
129
|
+
packages: {
|
|
130
|
+
aliengo_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/aliengo_description'
|
|
131
|
+
},
|
|
132
|
+
width: 200, height: 200, depth: 200,
|
|
133
|
+
upAxis: 'z',
|
|
134
|
+
unitScale: 1000
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: 'unitree-laikago',
|
|
138
|
+
display: 'Unitree Laikago (quadruped)',
|
|
139
|
+
category: 'quadruped',
|
|
140
|
+
src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/laikago_description/urdf/laikago.urdf',
|
|
141
|
+
packages: {
|
|
142
|
+
laikago_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/laikago_description'
|
|
143
|
+
},
|
|
144
|
+
width: 200, height: 200, depth: 200,
|
|
145
|
+
upAxis: 'z',
|
|
146
|
+
unitScale: 1000
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: 'unitree-z1',
|
|
150
|
+
display: 'Unitree Z1 (6-DOF arm)',
|
|
151
|
+
category: 'arm',
|
|
152
|
+
src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/z1_description/xacro/z1.urdf',
|
|
153
|
+
packages: {
|
|
154
|
+
z1_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/z1_description'
|
|
155
|
+
},
|
|
156
|
+
width: 200, height: 200, depth: 200,
|
|
157
|
+
upAxis: 'z',
|
|
158
|
+
unitScale: 1000
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
id: 'unitree-h1',
|
|
162
|
+
display: 'Unitree H1 (humanoid)',
|
|
163
|
+
category: 'humanoid',
|
|
164
|
+
src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/h1_description/urdf/h1.urdf',
|
|
165
|
+
packages: {
|
|
166
|
+
h1_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/h1_description'
|
|
167
|
+
},
|
|
168
|
+
width: 200, height: 200, depth: 200,
|
|
169
|
+
upAxis: 'z',
|
|
170
|
+
unitScale: 1000
|
|
171
|
+
}
|
|
172
|
+
];
|
|
173
|
+
export function findPreset(id) {
|
|
174
|
+
return URDF_PRESETS.find(p => p.id === id);
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=urdf-presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urdf-presets.js","sourceRoot":"","sources":["../src/urdf-presets.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n *\n * 공개된 URDF 프리셋 목록. 프리셋 선택 시 컴포넌트의 src 뿐 아니라 크기/축/\n * 단위 스케일도 적절한 기본값으로 함께 설정한다. 모든 URL은 raw.githubusercontent\n * .com 경유로 CORS 열려있음.\n */\n\nexport interface UrdfPreset {\n /** 고유 식별자 (select value) */\n id: string\n /** 표시 이름 */\n display: string\n /** 로봇 분류 (arm / mobile / aerial / humanoid / quadruped) */\n category: 'arm' | 'mobile' | 'aerial' | 'humanoid' | 'quadruped'\n /** URDF 파일 URL */\n src: string\n /** 컴포넌트 기본 dimension (mm). 로드 시 uniform best-fit scale 적용. */\n width: number\n height: number\n depth: number\n /** 좌표계 up 축 (URDF는 보통 'z') */\n upAxis: 'z' | 'y'\n /** URDF meter → 에디터 mm 스케일 (보통 1000) */\n unitScale: number\n /** ROS `package://<pkg>/...` prefix 해석 맵. 없으면 URDF 상대 경로만 지원. */\n packages?: Record<string, string>\n}\n\nexport const URDF_PRESETS: UrdfPreset[] = [\n {\n id: 'ur5',\n display: 'Universal Robots UR5 (6-DOF arm)',\n category: 'arm',\n src: 'https://raw.githubusercontent.com/mmatl/urdfpy/master/tests/data/ur5/ur5.urdf',\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'kuka-iiwa',\n display: 'KUKA LBR iiwa (7-DOF arm)',\n category: 'arm',\n src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/kuka_iiwa/model.urdf',\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'kuka-lwr',\n display: 'KUKA LWR (7-DOF research arm)',\n category: 'arm',\n src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/kuka_lwr/kuka.urdf',\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'widowx',\n display: 'WidowX (6-DOF small arm)',\n category: 'arm',\n src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/widowx/widowx.urdf',\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'husky',\n display: 'Clearpath Husky (4-wheel mobile)',\n category: 'mobile',\n src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/husky/husky.urdf',\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'minitaur',\n display: 'Ghost Minitaur (quadruped)',\n category: 'quadruped',\n src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/quadruped/minitaur.urdf',\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'quadrotor',\n display: 'Quadrotor (drone)',\n category: 'aerial',\n src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/Quadrotor/quadrotor.urdf',\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'nao',\n display: 'Aldebaran NAO (humanoid)',\n category: 'humanoid',\n src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/humanoid/nao.urdf',\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'racecar',\n display: 'Racecar (4-wheel)',\n category: 'mobile',\n src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/racecar/racecar.urdf',\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'differential',\n display: 'Differential Drive (simple mobile)',\n category: 'mobile',\n src: 'https://raw.githubusercontent.com/bulletphysics/bullet3/master/data/differential/diff_ring.urdf',\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n // --- Unitree Robotics 시리즈 (package:// 경로 사용) ---\n {\n id: 'unitree-a1',\n display: 'Unitree A1 (mini quadruped)',\n category: 'quadruped',\n src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/a1_description/urdf/a1.urdf',\n packages: {\n a1_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/a1_description'\n },\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'unitree-go1',\n display: 'Unitree Go1 (quadruped)',\n category: 'quadruped',\n src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/go1_description/urdf/go1.urdf',\n packages: {\n go1_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/go1_description'\n },\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'unitree-aliengo',\n display: 'Unitree Aliengo (large quadruped)',\n category: 'quadruped',\n src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/aliengo_description/urdf/aliengo.urdf',\n packages: {\n aliengo_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/aliengo_description'\n },\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'unitree-laikago',\n display: 'Unitree Laikago (quadruped)',\n category: 'quadruped',\n src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/laikago_description/urdf/laikago.urdf',\n packages: {\n laikago_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/laikago_description'\n },\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'unitree-z1',\n display: 'Unitree Z1 (6-DOF arm)',\n category: 'arm',\n src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/z1_description/xacro/z1.urdf',\n packages: {\n z1_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/z1_description'\n },\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n },\n {\n id: 'unitree-h1',\n display: 'Unitree H1 (humanoid)',\n category: 'humanoid',\n src: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/h1_description/urdf/h1.urdf',\n packages: {\n h1_description: 'https://raw.githubusercontent.com/unitreerobotics/unitree_ros/master/robots/h1_description'\n },\n width: 200, height: 200, depth: 200,\n upAxis: 'z',\n unitScale: 1000\n }\n]\n\nexport function findPreset(id: string): UrdfPreset | undefined {\n return URDF_PRESETS.find(p => p.id === id)\n}\n"]}
|
package/icons/urdf.png
ADDED
|
Binary file
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@operato/scene-urdf",
|
|
3
3
|
"description": "Scene module for manipulating robot simulation through URDF format",
|
|
4
4
|
"author": "heartyoh",
|
|
5
|
-
"version": "10.0.0-beta.
|
|
5
|
+
"version": "10.0.0-beta.22",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"module": "dist/index.js",
|
|
@@ -29,11 +29,12 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@hatiolab/things-scene": "^10.0.0-beta.1",
|
|
32
|
+
"@operato/i18n": "^10.0.0-beta.1",
|
|
33
|
+
"@operato/property-editor": "^10.0.0-beta.1",
|
|
32
34
|
"@operato/styles": "^10.0.0-beta.1",
|
|
33
35
|
"lit": "^3.1.2",
|
|
34
36
|
"three": "^0.183.0",
|
|
35
|
-
"urdf-loader": "^0.
|
|
36
|
-
"xacro-parser": "^0.3.9"
|
|
37
|
+
"urdf-loader": "^0.12.7"
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
39
40
|
"@hatiolab/prettier-config": "^1.0.0",
|
|
@@ -65,5 +66,5 @@
|
|
|
65
66
|
"prettier --write"
|
|
66
67
|
]
|
|
67
68
|
},
|
|
68
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "f48e52f4f5fdc30ec06af9da7cf253f6e29cfb0e"
|
|
69
70
|
}
|
package/translations/en.json
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"component.urdf
|
|
3
|
-
"
|
|
4
|
-
"label.
|
|
5
|
-
"label.
|
|
6
|
-
"label.
|
|
7
|
-
"label.
|
|
8
|
-
"label.
|
|
9
|
-
"label.
|
|
10
|
-
"label.
|
|
11
|
-
"label.
|
|
12
|
-
"label.no-auto-recenter": "no auto recenter",
|
|
13
|
-
"label.disable-dragging": "disable dragging",
|
|
14
|
-
"label.no-camera-control": "disable cam. control",
|
|
15
|
-
"label.init-camera-pos-x": "cam pos(x)",
|
|
16
|
-
"label.init-camera-pos-y": "cam pos(y)",
|
|
17
|
-
"label.init-camera-pos-z": "cam pos(z)"
|
|
2
|
+
"component.urdf": "URDF",
|
|
3
|
+
"label.preset": "preset",
|
|
4
|
+
"label.url": "URL",
|
|
5
|
+
"label.up-axis": "up axis",
|
|
6
|
+
"label.unit-scale": "unit scale",
|
|
7
|
+
"label.auto-animate": "auto animate",
|
|
8
|
+
"label.physics": "physics",
|
|
9
|
+
"label.joints": "joints",
|
|
10
|
+
"label.waiting-for-urdf-load": "waiting for URDF to load…",
|
|
11
|
+
"label.reset-all": "reset all"
|
|
18
12
|
}
|
package/translations/ja.json
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"component.urdf
|
|
3
|
-
"
|
|
4
|
-
"label.
|
|
5
|
-
"label.
|
|
6
|
-
"label.
|
|
7
|
-
"label.
|
|
8
|
-
"label.
|
|
9
|
-
"label.
|
|
10
|
-
"label.
|
|
11
|
-
"label.
|
|
12
|
-
"label.no-auto-recenter": "自動リセンタリングなし",
|
|
13
|
-
"label.disable-dragging": "ドラッグを無効にする",
|
|
14
|
-
"label.no-camera-control": "カメラコントロールを無効にする",
|
|
15
|
-
"label.init-camera-pos-x": "カメラ位置(x)",
|
|
16
|
-
"label.init-camera-pos-y": "カメラ位置(y)",
|
|
17
|
-
"label.init-camera-pos-z": "カメラ位置(z)"
|
|
2
|
+
"component.urdf": "URDF",
|
|
3
|
+
"label.preset": "プリセット",
|
|
4
|
+
"label.url": "URL",
|
|
5
|
+
"label.up-axis": "上軸",
|
|
6
|
+
"label.unit-scale": "単位スケール",
|
|
7
|
+
"label.auto-animate": "自動アニメーション",
|
|
8
|
+
"label.physics": "物理",
|
|
9
|
+
"label.joints": "関節",
|
|
10
|
+
"label.waiting-for-urdf-load": "URDFの読み込みを待っています…",
|
|
11
|
+
"label.reset-all": "すべてリセット"
|
|
18
12
|
}
|
package/translations/ko.json
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"component.urdf
|
|
3
|
-
"
|
|
4
|
-
"label.
|
|
5
|
-
"label.
|
|
6
|
-
"label.
|
|
7
|
-
"label.
|
|
8
|
-
"label.
|
|
9
|
-
"label.
|
|
10
|
-
"label.
|
|
11
|
-
"label.
|
|
12
|
-
"label.no-auto-recenter": "자동 센터링 않기",
|
|
13
|
-
"label.disable-dragging": "드래깅 불가",
|
|
14
|
-
"label.no-camera-control": "카메라 이동 불가",
|
|
15
|
-
"label.init-camera-pos-x": "Cam 위치(x)",
|
|
16
|
-
"label.init-camera-pos-y": "Cam 위치(y)",
|
|
17
|
-
"label.init-camera-pos-z": "Cam 위치(z)"
|
|
2
|
+
"component.urdf": "URDF",
|
|
3
|
+
"label.preset": "프리셋",
|
|
4
|
+
"label.url": "URL",
|
|
5
|
+
"label.up-axis": "위 축",
|
|
6
|
+
"label.unit-scale": "단위 스케일",
|
|
7
|
+
"label.auto-animate": "자동 애니메이션",
|
|
8
|
+
"label.physics": "물리",
|
|
9
|
+
"label.joints": "관절",
|
|
10
|
+
"label.waiting-for-urdf-load": "URDF 로드 대기 중…",
|
|
11
|
+
"label.reset-all": "모두 초기화"
|
|
18
12
|
}
|
package/translations/ms.json
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"component.urdf
|
|
3
|
-
"
|
|
4
|
-
"label.
|
|
5
|
-
"label.
|
|
6
|
-
"label.
|
|
7
|
-
"label.
|
|
8
|
-
"label.
|
|
9
|
-
"label.
|
|
10
|
-
"label.
|
|
11
|
-
"label.
|
|
12
|
-
"label.no-auto-recenter": "tiada auto-recenter",
|
|
13
|
-
"label.disable-dragging": "matikan seret",
|
|
14
|
-
"label.no-camera-control": "matikan kawalan kamera",
|
|
15
|
-
"label.init-camera-pos-x": "posisi kamera(x)",
|
|
16
|
-
"label.init-camera-pos-y": "posisi kamera(y)",
|
|
17
|
-
"label.init-camera-pos-z": "posisi kamera(z)"
|
|
2
|
+
"component.urdf": "URDF",
|
|
3
|
+
"label.preset": "pratetap",
|
|
4
|
+
"label.url": "URL",
|
|
5
|
+
"label.up-axis": "paksi atas",
|
|
6
|
+
"label.unit-scale": "skala unit",
|
|
7
|
+
"label.auto-animate": "animasi auto",
|
|
8
|
+
"label.physics": "fizik",
|
|
9
|
+
"label.joints": "sendi",
|
|
10
|
+
"label.waiting-for-urdf-load": "menunggu URDF dimuatkan…",
|
|
11
|
+
"label.reset-all": "tetapkan semula semua"
|
|
18
12
|
}
|
package/translations/zh.json
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"component.urdf
|
|
3
|
-
"
|
|
4
|
-
"label.
|
|
5
|
-
"label.
|
|
6
|
-
"label.
|
|
7
|
-
"label.
|
|
8
|
-
"label.
|
|
9
|
-
"label.
|
|
10
|
-
"label.
|
|
11
|
-
"label.
|
|
12
|
-
"label.no-auto-recenter": "不自动居中",
|
|
13
|
-
"label.disable-dragging": "禁用拖动",
|
|
14
|
-
"label.no-camera-control": "禁用相机控制",
|
|
15
|
-
"label.init-camera-pos-x": "相机位置(x)",
|
|
16
|
-
"label.init-camera-pos-y": "相机位置(y)",
|
|
17
|
-
"label.init-camera-pos-z": "相机位置(z)"
|
|
2
|
+
"component.urdf": "URDF",
|
|
3
|
+
"label.preset": "预设",
|
|
4
|
+
"label.url": "URL",
|
|
5
|
+
"label.up-axis": "上轴",
|
|
6
|
+
"label.unit-scale": "单位比例",
|
|
7
|
+
"label.auto-animate": "自动动画",
|
|
8
|
+
"label.physics": "物理",
|
|
9
|
+
"label.joints": "关节",
|
|
10
|
+
"label.waiting-for-urdf-load": "正在等待URDF加载…",
|
|
11
|
+
"label.reset-all": "全部重置"
|
|
18
12
|
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
// Converts a datatransfer structer into an object with all paths and files
|
|
2
|
-
// listed out. Returns a promise that resolves with the file structure.
|
|
3
|
-
function dataTransferToFiles(dataTransfer) {
|
|
4
|
-
if (!(dataTransfer instanceof DataTransfer)) {
|
|
5
|
-
throw new Error('Data must be of type "DataTransfer"');
|
|
6
|
-
}
|
|
7
|
-
const files = {};
|
|
8
|
-
// recurse down the webkit file structure resolving
|
|
9
|
-
// the paths to files names to store in the `files`
|
|
10
|
-
// object
|
|
11
|
-
function recurseDirectory(item) {
|
|
12
|
-
if (item.isFile) {
|
|
13
|
-
return new Promise(resolve => {
|
|
14
|
-
item.file((file) => {
|
|
15
|
-
files[item.fullPath] = file;
|
|
16
|
-
resolve();
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
const reader = item.createReader();
|
|
22
|
-
return new Promise(resolve => {
|
|
23
|
-
const promises = [];
|
|
24
|
-
// exhaustively read all the directory entries
|
|
25
|
-
function readNextEntries() {
|
|
26
|
-
reader.readEntries((et) => {
|
|
27
|
-
if (et.length === 0) {
|
|
28
|
-
Promise.all(promises).then(() => resolve());
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
et.forEach((e) => {
|
|
32
|
-
promises.push(recurseDirectory(e));
|
|
33
|
-
});
|
|
34
|
-
readNextEntries();
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
readNextEntries();
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return new Promise(resolve => {
|
|
43
|
-
// Traverse down the tree and add the files into the zip
|
|
44
|
-
// const dtitems = dataTransfer.items && [...dataTransfer.items]
|
|
45
|
-
// const dtfiles = [...dataTransfer.files]
|
|
46
|
-
var dtitems = [];
|
|
47
|
-
if (dataTransfer.items) {
|
|
48
|
-
for (let i = 0; i < dataTransfer.items.length; i++) {
|
|
49
|
-
dtitems.push(dataTransfer.items[i]);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
var dtfiles = [];
|
|
53
|
-
if (dataTransfer.files) {
|
|
54
|
-
for (let i = 0; i < dataTransfer.files.length; i++) {
|
|
55
|
-
dtfiles.push(dataTransfer.files[i]);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
if (dtitems.length && dtitems[0].webkitGetAsEntry) {
|
|
59
|
-
const promises = [];
|
|
60
|
-
for (let i = 0; i < dtitems.length; i++) {
|
|
61
|
-
const item = dtitems[i];
|
|
62
|
-
const entry = item.webkitGetAsEntry();
|
|
63
|
-
promises.push(recurseDirectory(entry));
|
|
64
|
-
}
|
|
65
|
-
Promise.all(promises).then(() => resolve(files));
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
// add a '/' prefix to math the file directory entry
|
|
69
|
-
// on webkit browsers
|
|
70
|
-
dtfiles.filter(f => f.size !== 0).forEach(f => (files['/' + f.name] = f));
|
|
71
|
-
resolve(files);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
export function registerDragEvents(viewer, callback) {
|
|
76
|
-
document.addEventListener('dragover', e => e.preventDefault());
|
|
77
|
-
document.addEventListener('dragenter', e => e.preventDefault());
|
|
78
|
-
document.addEventListener('drop', e => {
|
|
79
|
-
e.preventDefault();
|
|
80
|
-
// convert the files
|
|
81
|
-
dataTransferToFiles(e.dataTransfer).then((files) => {
|
|
82
|
-
// removes '..' and '.' tokens and normalizes slashes
|
|
83
|
-
const cleanFilePath = (path) => {
|
|
84
|
-
return path
|
|
85
|
-
.replace(/\\/g, '/')
|
|
86
|
-
.split(/\//g)
|
|
87
|
-
.reduce((acc, el) => {
|
|
88
|
-
if (el === '..')
|
|
89
|
-
acc.pop();
|
|
90
|
-
else if (el !== '.')
|
|
91
|
-
acc.push(el);
|
|
92
|
-
return acc;
|
|
93
|
-
}, [])
|
|
94
|
-
.join('/');
|
|
95
|
-
};
|
|
96
|
-
// set the loader url modifier to check the list
|
|
97
|
-
// of files
|
|
98
|
-
const fileNames = Object.keys(files).map(n => cleanFilePath(n));
|
|
99
|
-
viewer.urlModifierFunc = (url) => {
|
|
100
|
-
// find the matching file given the requested url
|
|
101
|
-
const cleaned = cleanFilePath(url.replace(viewer.package, ''));
|
|
102
|
-
const fileName = fileNames
|
|
103
|
-
.filter(name => {
|
|
104
|
-
// check if the end of file and url are the same
|
|
105
|
-
const len = Math.min(name.length, cleaned.length);
|
|
106
|
-
return cleaned.substr(cleaned.length - len) === name.substr(name.length - len);
|
|
107
|
-
})
|
|
108
|
-
.pop();
|
|
109
|
-
if (fileName !== undefined) {
|
|
110
|
-
// revoke the url after it's been used
|
|
111
|
-
const bloburl = URL.createObjectURL(files[fileName]);
|
|
112
|
-
requestAnimationFrame(() => URL.revokeObjectURL(bloburl));
|
|
113
|
-
return bloburl;
|
|
114
|
-
}
|
|
115
|
-
return url;
|
|
116
|
-
};
|
|
117
|
-
// set the source of the element to the most likely intended display model
|
|
118
|
-
const filesNames = Object.keys(files);
|
|
119
|
-
viewer.up = '+Z';
|
|
120
|
-
document.getElementById('up-select').value = viewer.up;
|
|
121
|
-
viewer.urdf = filesNames.filter(n => /urdf$/i.test(n)).shift();
|
|
122
|
-
});
|
|
123
|
-
callback();
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=drag-n-drop.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drag-n-drop.js","sourceRoot":"","sources":["../../src/elements/drag-n-drop.ts"],"names":[],"mappings":"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","sourcesContent":["// Converts a datatransfer structer into an object with all paths and files\n\nimport URDFViewerElement from './urdf-viewer-element.js'\n\n// listed out. Returns a promise that resolves with the file structure.\nfunction dataTransferToFiles(dataTransfer: DataTransfer) {\n if (!(dataTransfer instanceof DataTransfer)) {\n throw new Error('Data must be of type \"DataTransfer\"')\n }\n\n const files = {} as any\n\n // recurse down the webkit file structure resolving\n // the paths to files names to store in the `files`\n // object\n function recurseDirectory(item: any): Promise<void> {\n if (item.isFile) {\n return new Promise(resolve => {\n item.file((file: any) => {\n files[item.fullPath] = file\n resolve()\n })\n })\n } else {\n const reader = item.createReader()\n\n return new Promise(resolve => {\n const promises = [] as any\n\n // exhaustively read all the directory entries\n function readNextEntries() {\n reader.readEntries((et: any) => {\n if (et.length === 0) {\n Promise.all(promises).then(() => resolve())\n } else {\n et.forEach((e: any) => {\n promises.push(recurseDirectory(e))\n })\n readNextEntries()\n }\n })\n }\n\n readNextEntries()\n })\n }\n }\n\n return new Promise(resolve => {\n // Traverse down the tree and add the files into the zip\n // const dtitems = dataTransfer.items && [...dataTransfer.items]\n // const dtfiles = [...dataTransfer.files]\n var dtitems = [] as DataTransferItem[]\n if (dataTransfer.items) {\n for (let i = 0; i < dataTransfer.items.length; i++) {\n dtitems.push(dataTransfer.items[i])\n }\n }\n\n var dtfiles = [] as File[]\n if (dataTransfer.files) {\n for (let i = 0; i < dataTransfer.files.length; i++) {\n dtfiles.push(dataTransfer.files[i])\n }\n }\n\n if (dtitems.length && (dtitems[0].webkitGetAsEntry as any)) {\n const promises = []\n for (let i = 0; i < dtitems.length; i++) {\n const item = dtitems[i]\n const entry = item.webkitGetAsEntry()\n\n promises.push(recurseDirectory(entry))\n }\n Promise.all(promises).then(() => resolve(files))\n } else {\n // add a '/' prefix to math the file directory entry\n // on webkit browsers\n dtfiles.filter(f => f.size !== 0).forEach(f => (files['/' + f.name] = f))\n\n resolve(files)\n }\n })\n}\n\nexport function registerDragEvents(viewer: URDFViewerElement, callback: () => void) {\n document.addEventListener('dragover', e => e.preventDefault())\n document.addEventListener('dragenter', e => e.preventDefault())\n document.addEventListener('drop', e => {\n e.preventDefault()\n\n // convert the files\n dataTransferToFiles(e.dataTransfer!).then((files: any) => {\n // removes '..' and '.' tokens and normalizes slashes\n const cleanFilePath = (path: string) => {\n return path\n .replace(/\\\\/g, '/')\n .split(/\\//g)\n .reduce((acc, el) => {\n if (el === '..') acc.pop()\n else if (el !== '.') acc.push(el)\n return acc\n }, [] as string[])\n .join('/')\n }\n\n // set the loader url modifier to check the list\n // of files\n const fileNames = Object.keys(files).map(n => cleanFilePath(n))\n viewer.urlModifierFunc = (url: string) => {\n // find the matching file given the requested url\n const cleaned = cleanFilePath(url.replace(viewer.package, ''))\n const fileName = fileNames\n .filter(name => {\n // check if the end of file and url are the same\n const len = Math.min(name.length, cleaned.length)\n return cleaned.substr(cleaned.length - len) === name.substr(name.length - len)\n })\n .pop()\n\n if (fileName !== undefined) {\n // revoke the url after it's been used\n const bloburl = URL.createObjectURL(files[fileName])\n requestAnimationFrame(() => URL.revokeObjectURL(bloburl))\n\n return bloburl\n }\n\n return url\n }\n\n // set the source of the element to the most likely intended display model\n const filesNames = Object.keys(files)\n viewer.up = '+Z'\n ;(document.getElementById('up-select') as any)!.value = viewer.up\n\n viewer.urdf = filesNames.filter(n => /urdf$/i.test(n)).shift()!\n })\n\n callback()\n })\n}\n"]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { LitElement, PropertyValues } from 'lit';
|
|
2
|
-
import { URDFRobot } from 'urdf-loader';
|
|
3
|
-
import URDFManipulatorElement from './urdf-manipulator-element.js';
|
|
4
|
-
export default class URDFControllerElement extends LitElement {
|
|
5
|
-
static styles: import("lit").CSSResult[];
|
|
6
|
-
viewer?: URDFManipulatorElement;
|
|
7
|
-
robot?: URDFRobot;
|
|
8
|
-
render(): import("lit-html").TemplateResult<1>;
|
|
9
|
-
updated(changes: PropertyValues<this>): void;
|
|
10
|
-
_setupViewer(viewer?: URDFManipulatorElement): void;
|
|
11
|
-
setColor(color: string): void;
|
|
12
|
-
}
|