@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.
Files changed (68) hide show
  1. package/README.md +22 -25
  2. package/TODO.md +58 -0
  3. package/dist/editors/index.d.ts +7 -0
  4. package/dist/editors/index.js +12 -1
  5. package/dist/editors/index.js.map +1 -1
  6. package/dist/editors/property-editor-urdf-joints.d.ts +54 -0
  7. package/dist/editors/property-editor-urdf-joints.js +246 -0
  8. package/dist/editors/property-editor-urdf-joints.js.map +1 -0
  9. package/dist/editors/property-editor-urdf-preset.d.ts +8 -0
  10. package/dist/editors/property-editor-urdf-preset.js +114 -0
  11. package/dist/editors/property-editor-urdf-preset.js.map +1 -0
  12. package/dist/index.d.ts +8 -2
  13. package/dist/index.js +22 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/joint-controller.d.ts +35 -0
  16. package/dist/joint-controller.js +34 -0
  17. package/dist/joint-controller.js.map +1 -0
  18. package/dist/real-object-urdf.d.ts +106 -0
  19. package/dist/real-object-urdf.js +527 -0
  20. package/dist/real-object-urdf.js.map +1 -0
  21. package/dist/smoothing-controller.d.ts +15 -0
  22. package/dist/smoothing-controller.js +88 -0
  23. package/dist/smoothing-controller.js.map +1 -0
  24. package/dist/templates/index.d.ts +3 -0
  25. package/dist/templates/index.js +2 -3
  26. package/dist/templates/index.js.map +1 -1
  27. package/dist/templates/{urdf-controller.d.ts → urdf.d.ts} +3 -0
  28. package/dist/templates/urdf.js +19 -0
  29. package/dist/templates/urdf.js.map +1 -0
  30. package/dist/urdf-object.d.ts +264 -0
  31. package/dist/urdf-object.js +190 -0
  32. package/dist/urdf-object.js.map +1 -0
  33. package/dist/urdf-presets.d.ts +22 -0
  34. package/dist/urdf-presets.js +176 -0
  35. package/dist/urdf-presets.js.map +1 -0
  36. package/icons/urdf.png +0 -0
  37. package/package.json +5 -4
  38. package/translations/en.json +10 -16
  39. package/translations/ja.json +10 -16
  40. package/translations/ko.json +10 -16
  41. package/translations/ms.json +10 -16
  42. package/translations/zh.json +10 -16
  43. package/dist/elements/drag-n-drop.d.ts +0 -2
  44. package/dist/elements/drag-n-drop.js +0 -126
  45. package/dist/elements/drag-n-drop.js.map +0 -1
  46. package/dist/elements/urdf-controller-element.d.ts +0 -12
  47. package/dist/elements/urdf-controller-element.js +0 -283
  48. package/dist/elements/urdf-controller-element.js.map +0 -1
  49. package/dist/elements/urdf-drag-controls.d.ts +0 -32
  50. package/dist/elements/urdf-drag-controls.js +0 -197
  51. package/dist/elements/urdf-drag-controls.js.map +0 -1
  52. package/dist/elements/urdf-manipulator-element.d.ts +0 -15
  53. package/dist/elements/urdf-manipulator-element.js +0 -112
  54. package/dist/elements/urdf-manipulator-element.js.map +0 -1
  55. package/dist/elements/urdf-viewer-element.d.ts +0 -53
  56. package/dist/elements/urdf-viewer-element.js +0 -414
  57. package/dist/elements/urdf-viewer-element.js.map +0 -1
  58. package/dist/templates/urdf-controller.js +0 -16
  59. package/dist/templates/urdf-controller.js.map +0 -1
  60. package/dist/templates/urdf-viewer.d.ts +0 -14
  61. package/dist/templates/urdf-viewer.js +0 -16
  62. package/dist/templates/urdf-viewer.js.map +0 -1
  63. package/dist/urdf-controller.d.ts +0 -15
  64. package/dist/urdf-controller.js +0 -70
  65. package/dist/urdf-controller.js.map +0 -1
  66. package/dist/urdf-viewer.d.ts +0 -16
  67. package/dist/urdf-viewer.js +0 -202
  68. 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.2",
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.10.4",
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": "350ece104754d007967cf8e3f54d0d157465e94a"
69
+ "gitHead": "f48e52f4f5fdc30ec06af9da7cf253f6e29cfb0e"
69
70
  }
@@ -1,18 +1,12 @@
1
1
  {
2
- "component.urdf-viewer": "URDF viewer",
3
- "component.urdf-controller": "URDF controller",
4
- "label.package": "package",
5
- "label.urdf": "URDF",
6
- "label.urdf-reference": "URDF viewer",
7
- "label.up": "up axis",
8
- "label.display-shadow": "display shadow",
9
- "label.ambient-color": "ambient color",
10
- "label.highlight-color": "highlight color",
11
- "label.ignore-limits": "ignore limits",
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
  }
@@ -1,18 +1,12 @@
1
1
  {
2
- "component.urdf-viewer": "URDFビューア",
3
- "component.urdf-controller": "URDFコントローラ",
4
- "label.package": "パッケージ",
5
- "label.urdf": "URDF",
6
- "label.urdf-reference": "URDFビューア",
7
- "label.up": "上軸",
8
- "label.display-shadow": "影の表示",
9
- "label.ambient-color": "環境色",
10
- "label.highlight-color": "ハイライト色",
11
- "label.ignore-limits": "リミットを無視",
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,18 +1,12 @@
1
1
  {
2
- "component.urdf-viewer": "URDF 뷰어",
3
- "component.urdf-controller": "URDF 컨트롤러",
4
- "label.package": "패키지 URL",
5
- "label.urdf": "URDF URL",
6
- "label.urdf-reference": "URDF 뷰어",
7
- "label.up": "위방항 ",
8
- "label.display-shadow": "그림자 보이기",
9
- "label.ambient-color": "ambient 색상",
10
- "label.highlight-color": "강조 색상",
11
- "label.ignore-limits": "각도제한 무시",
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
  }
@@ -1,18 +1,12 @@
1
1
  {
2
- "component.urdf-viewer": "paparan URDF",
3
- "component.urdf-controller": "pemacu URDF",
4
- "label.package": "pakej",
5
- "label.urdf": "URDF",
6
- "label.urdf-reference": "paparan URDF",
7
- "label.up": "paksi atas",
8
- "label.display-shadow": "paparan bayangan",
9
- "label.ambient-color": "warna ambien",
10
- "label.highlight-color": "warna sorotan",
11
- "label.ignore-limits": "abaikan had",
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
  }
@@ -1,18 +1,12 @@
1
1
  {
2
- "component.urdf-viewer": "URDF查看器",
3
- "component.urdf-controller": "URDF控制器",
4
- "label.package": "软件包",
5
- "label.urdf": "URDF",
6
- "label.urdf-reference": "URDF查看器",
7
- "label.up": "上轴",
8
- "label.display-shadow": "显示阴影",
9
- "label.ambient-color": "环境颜色",
10
- "label.highlight-color": "高亮颜色",
11
- "label.ignore-limits": "忽略限制",
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,2 +0,0 @@
1
- import URDFViewerElement from './urdf-viewer-element.js';
2
- export declare function registerDragEvents(viewer: URDFViewerElement, callback: () => void): void;
@@ -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
- }