@things-factory/figure-ui 10.1.153 → 10.1.155

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 (110) hide show
  1. package/client/modeller/canvas.ts +1 -1
  2. package/client/modeller/editor.ts +2 -2
  3. package/client/modeller/figure-capability-panel.ts +6 -24
  4. package/client/modeller/figure-carrier.ts +1 -1
  5. package/client/modeller/figure-clips.ts +1 -1
  6. package/client/modeller/figure-controls.ts +2 -2
  7. package/client/modeller/figure-face-mapping.ts +1 -1
  8. package/client/modeller/figure-links.ts +3 -2
  9. package/client/modeller/figure-material-panel.ts +1 -1
  10. package/client/modeller/figure-preview.ts +2 -2
  11. package/client/modeller/figure-properties.ts +1 -1
  12. package/client/modeller/figure-section-editor.ts +1 -1
  13. package/client/modeller/figure-section-panel.ts +1 -1
  14. package/client/modeller/figure-settings.ts +2 -2
  15. package/client/modeller/figure-verdict.ts +1 -1
  16. package/client/pages/figure-list-page.ts +7 -1
  17. package/client/viewparts/figure-detail-dock.ts +90 -41
  18. package/client/viewparts/figure-thumb.ts +2 -22
  19. package/dist-client/modeller/canvas.d.ts +1 -1
  20. package/dist-client/modeller/canvas.js +1 -1
  21. package/dist-client/modeller/canvas.js.map +1 -1
  22. package/dist-client/modeller/editor.js +2 -2
  23. package/dist-client/modeller/editor.js.map +1 -1
  24. package/dist-client/modeller/figure-capability-panel.d.ts +0 -3
  25. package/dist-client/modeller/figure-capability-panel.js +5 -18
  26. package/dist-client/modeller/figure-capability-panel.js.map +1 -1
  27. package/dist-client/modeller/figure-carrier.js +1 -1
  28. package/dist-client/modeller/figure-carrier.js.map +1 -1
  29. package/dist-client/modeller/figure-clips.js +1 -1
  30. package/dist-client/modeller/figure-clips.js.map +1 -1
  31. package/dist-client/modeller/figure-controls.js +2 -2
  32. package/dist-client/modeller/figure-controls.js.map +1 -1
  33. package/dist-client/modeller/figure-face-mapping.js +1 -1
  34. package/dist-client/modeller/figure-face-mapping.js.map +1 -1
  35. package/dist-client/modeller/figure-links.js +3 -2
  36. package/dist-client/modeller/figure-links.js.map +1 -1
  37. package/dist-client/modeller/figure-material-panel.js +1 -1
  38. package/dist-client/modeller/figure-material-panel.js.map +1 -1
  39. package/dist-client/modeller/figure-preview.d.ts +1 -1
  40. package/dist-client/modeller/figure-preview.js +2 -2
  41. package/dist-client/modeller/figure-preview.js.map +1 -1
  42. package/dist-client/modeller/figure-properties.js +1 -1
  43. package/dist-client/modeller/figure-properties.js.map +1 -1
  44. package/dist-client/modeller/figure-section-editor.js +1 -1
  45. package/dist-client/modeller/figure-section-editor.js.map +1 -1
  46. package/dist-client/modeller/figure-section-panel.js +1 -1
  47. package/dist-client/modeller/figure-section-panel.js.map +1 -1
  48. package/dist-client/modeller/figure-settings.d.ts +1 -1
  49. package/dist-client/modeller/figure-settings.js +1 -1
  50. package/dist-client/modeller/figure-settings.js.map +1 -1
  51. package/dist-client/modeller/figure-verdict.js +1 -1
  52. package/dist-client/modeller/figure-verdict.js.map +1 -1
  53. package/dist-client/pages/figure-list-page.d.ts +1 -0
  54. package/dist-client/pages/figure-list-page.js +11 -1
  55. package/dist-client/pages/figure-list-page.js.map +1 -1
  56. package/dist-client/tsconfig.tsbuildinfo +1 -1
  57. package/dist-client/viewparts/figure-detail-dock.d.ts +10 -1
  58. package/dist-client/viewparts/figure-detail-dock.js +93 -41
  59. package/dist-client/viewparts/figure-detail-dock.js.map +1 -1
  60. package/dist-client/viewparts/figure-thumb.d.ts +1 -0
  61. package/dist-client/viewparts/figure-thumb.js +2 -22
  62. package/dist-client/viewparts/figure-thumb.js.map +1 -1
  63. package/package.json +5 -4
  64. package/test/browser/detail-page.js +10 -2
  65. package/test/browser/product-page.check.mjs +1 -1
  66. package/test/browser/screen-page.js +1 -1
  67. package/test/browser/serve-detail.mjs +7 -2
  68. package/test/figure-controls-keys.test.ts +19 -0
  69. package/test/i18n-prefix-guard.test.ts +4 -1
  70. package/test/layout.test.ts +4 -3
  71. package/test/links.test.ts +5 -4
  72. package/test/properties.test.ts +2 -1
  73. package/test/refusals.test.ts +2 -1
  74. package/test/theme.test.ts +1 -1
  75. package/test/verdict.test.ts +2 -1
  76. package/test/words.ts +20 -0
  77. package/translations/en.json +2 -33
  78. package/translations/es.json +2 -33
  79. package/translations/ja.json +2 -33
  80. package/translations/ko.json +2 -33
  81. package/translations/ms.json +2 -33
  82. package/translations/zh.json +2 -33
  83. package/client/modeller/controls.ts +0 -54
  84. package/client/modeller/figure-view.ts +0 -151
  85. package/client/modeller/preview-model.ts +0 -89
  86. package/client/modeller/side-panel-styles.ts +0 -374
  87. package/client/viewparts/detail-motion.ts +0 -11
  88. package/client/viewparts/figure-asset-viewer.ts +0 -177
  89. package/dist-client/modeller/controls.d.ts +0 -28
  90. package/dist-client/modeller/controls.js +0 -28
  91. package/dist-client/modeller/controls.js.map +0 -1
  92. package/dist-client/modeller/figure-view.d.ts +0 -117
  93. package/dist-client/modeller/figure-view.js +0 -78
  94. package/dist-client/modeller/figure-view.js.map +0 -1
  95. package/dist-client/modeller/preview-model.d.ts +0 -54
  96. package/dist-client/modeller/preview-model.js +0 -79
  97. package/dist-client/modeller/preview-model.js.map +0 -1
  98. package/dist-client/modeller/side-panel-styles.d.ts +0 -27
  99. package/dist-client/modeller/side-panel-styles.js +0 -374
  100. package/dist-client/modeller/side-panel-styles.js.map +0 -1
  101. package/dist-client/viewparts/detail-motion.d.ts +0 -6
  102. package/dist-client/viewparts/detail-motion.js +0 -9
  103. package/dist-client/viewparts/detail-motion.js.map +0 -1
  104. package/dist-client/viewparts/figure-asset-viewer.d.ts +0 -31
  105. package/dist-client/viewparts/figure-asset-viewer.js +0 -198
  106. package/dist-client/viewparts/figure-asset-viewer.js.map +0 -1
  107. package/test/controls.test.ts +0 -60
  108. package/test/detail-motion.test.ts +0 -26
  109. package/test/preview.test.ts +0 -53
  110. package/test/view.test.ts +0 -13
@@ -15,8 +15,6 @@
15
15
  "figure.button.fix-position": "여기에 고정",
16
16
  "figure.button.scale-position": "크기에 비례",
17
17
  "figure.button.remeasure-range": "다시 재기",
18
- "figure.label.sizing-rule": "크기 변경 시 동작",
19
- "figure.label.sizing-uniform": "한 비율로 (세 축의 기하평균)",
20
18
  "figure.button.scale-uniformly": "한 비율로 키우기",
21
19
  "figure.text.sizing-uniform-proposed": "관절이 있는 도형입니다. 한 비율로 키우면 어떤 크기에서도 관절이 벌어지지 않습니다.",
22
20
  "figure.text.sizing-uniform-explained": "보드가 준 세 축 크기의 기하평균 비율로 도형 전체를 키웁니다. 발은 바닥에 두고, 상자 위가 남으면 그대로 비워 둡니다.",
@@ -121,7 +119,6 @@
121
119
  "figure.label.budgets": "한도",
122
120
  "figure.label.by-axis": "항목별 성숙도",
123
121
  "figure.label.cast-shadow": "그림자 드리우기",
124
- "figure.label.category": "분류",
125
122
  "figure.label.ceiling-height": "천장 높이 (mm)",
126
123
  "figure.label.clip-name": "clip 이름",
127
124
  "figure.label.clips": "애니메이션 (시간에 따라 재생)",
@@ -148,7 +145,6 @@
148
145
  "figure.label.environment-sunny": "맑음",
149
146
  "figure.label.environment-warehouse": "창고",
150
147
  "figure.label.figure": "Figure",
151
- "figure.label.figure-placement": "배치 기준",
152
148
  "figure.label.figure-released": "발행됨",
153
149
  "figure.label.figure-type": "타입",
154
150
  "figure.label.findings": "확인할 점",
@@ -158,7 +154,6 @@
158
154
  "figure.label.hemisphere-light": "헤미스피어 라이트",
159
155
  "figure.label.history": "이력",
160
156
  "figure.label.intensity": "세기",
161
- "figure.label.joint": "관절",
162
157
  "figure.label.joint-axis": "축",
163
158
  "figure.label.joint-limit-max": "최대",
164
159
  "figure.label.joint-limit-min": "최소",
@@ -176,7 +171,6 @@
176
171
  "figure.label.key-at": "시각(초)",
177
172
  "figure.label.key-at-value": "값 위치(0~1)",
178
173
  "figure.label.key-light": "키 라이트",
179
- "figure.label.maturity": "성숙도",
180
174
  "figure.label.mode-edit": "편집",
181
175
  "figure.label.mode-preview": "미리보기",
182
176
  "figure.label.motion-intent": "무엇을 움직일까요?",
@@ -312,11 +306,6 @@
312
306
  "figure.label.face-inside-right": "안쪽 오른쪽",
313
307
  "figure.label.face-inside-back": "안쪽 뒤",
314
308
  "figure.label.face-inside-front": "안쪽 앞",
315
- "figure.label.placement": "붙이기",
316
- "figure.label.placement-ceiling": "천장 기반 (ceiling)",
317
- "figure.label.placement-center": "중심 기반 (center)",
318
- "figure.label.placement-floor": "바닥 기반 (floor)",
319
- "figure.label.placement-limit": "배치 한도",
320
309
  "figure.label.playback-speed": "배속",
321
310
  "figure.label.preset": "프리셋",
322
311
  "figure.label.preset-ceramic": "도자",
@@ -344,9 +333,6 @@
344
333
  "figure.label.reuse-trend": "재사용 추이",
345
334
  "figure.label.instance-count": "인스턴스 수",
346
335
  "figure.label.rotation-degrees": "회전 (도)",
347
- "figure.label.rung-flow": "흐른다",
348
- "figure.label.rung-hold": "담는다",
349
- "figure.label.rung-none": "그리기만 한다",
350
336
  "figure.label.same-as-off": "꺼진 색과 같게",
351
337
  "figure.label.scene-floor": "바닥",
352
338
  "figure.label.scene-reference": "씬 좌표 기준",
@@ -362,14 +348,12 @@
362
348
  "figure.label.status-colors": "켜진 색 (램프 · 표시등)",
363
349
  "figure.label.tab-capability": "능력",
364
350
  "figure.label.tab-environment": "환경",
365
- "figure.label.tags": "태그",
366
351
  "figure.label.tools": "맞추기",
367
352
  "figure.label.transparent": "투명",
368
353
  "figure.label.triangles": "삼각형",
369
354
  "figure.label.unit-none": "단위 없음",
370
355
  "figure.label.unit-type-it": "직접 적기…",
371
356
  "figure.label.weight": "그리는 비용",
372
- "figure.label.what-this-does": "이 Figure 가 하는 일",
373
357
  "figure.text.accepts-anything": "비우면 아무거나",
374
358
  "figure.text.accepts-explained": "이 슬롯에 놓을 수 있는 타입입니다. 쉼표로 구분하고, 비우면 제한이 없습니다.",
375
359
  "figure.text.add-a-shape": "클릭하면 부품이 추가됩니다",
@@ -475,7 +459,6 @@
475
459
  "figure.text.no-figure-yet": "아직 만든 Figure 가 없습니다",
476
460
  "figure.text.no-findings": "확인할 점이 없습니다.",
477
461
  "figure.text.not-measurable-yet": "측정 불가",
478
- "figure.text.not-measured-yet": "미측정",
479
462
  "figure.text.nothing-released-yet": "아직 발행한 버전이 없습니다.",
480
463
  "figure.text.on-by-default-explained": "도면에 놓았을 때의 처음 상태입니다. 인스턴스에서 켜고 끈 값이 우선합니다.",
481
464
  "figure.text.other-segment-count": "직접 입력",
@@ -486,7 +469,6 @@
486
469
  "figure.text.placement-explained": "3D 씬에서 객체의 기준면을 정합니다 (바닥: AGV/컨베이어, 천장: OHT/호이스트, 중심: 센서/드론).",
487
470
  "figure.text.pose-as-default-explained": "지금 세운 자세를 파라미터의 기본값으로 적습니다. 아무도 값을 주지 않을 때 도형이 이 자세로 섭니다.",
488
471
  "figure.text.preview-blocked-by-errors": "형식 오류로 미리보기를 표시할 수 없습니다. 성숙도 탭에서 사유를 확인하세요.",
489
- "figure.text.preview-needs-a-part": "부품을 추가하면 도면에 놓았을 때의 모습이 표시됩니다.",
490
472
  "figure.text.put-on-floor": "지금 위치만 바닥(Y=0)에 맞춥니다. 크기가 바뀌면 따라가지 않습니다. 계속 붙어 있게 하려면 ‘바닥에 붙여 크기 따라가기’를 쓰세요.",
491
473
  "figure.text.range-needs-room": "최대가 최소보다 커야 합니다.",
492
474
  "figure.text.release-needs-a-save-first": "저장하지 않은 변경이 있습니다. 먼저 저장하세요.",
@@ -533,7 +515,6 @@
533
515
  "figure.label.follows-nothing": "고정",
534
516
  "figure.label.follows-instance": "인스턴스 크기",
535
517
  "figure.label.follows-instance-share": "크기에 비례",
536
- "figure.label.instance-range": "놓일 수 있는 크기",
537
518
  "figure.label.follows-part": "다른 부품",
538
519
  "figure.label.times": "배",
539
520
  "figure.label.plus": "더하기 (mm)",
@@ -588,7 +569,6 @@
588
569
  "figure.label.face-top": "윗면",
589
570
  "figure.label.face-back": "뒷면",
590
571
  "figure.label.face-front": "앞면",
591
- "figure.label.motion": "움직임",
592
572
  "figure.text.motion-explained": "이 부품이 어떻게 움직이는지 정합니다. 붙어 있는 관계는 그대로 두고 그 위에 더합니다.",
593
573
  "figure.label.motion-none": "움직이지 않음",
594
574
  "figure.label.motion-slide": "미끄러짐",
@@ -627,11 +607,7 @@
627
607
  "figure.label.design-inputs": "설계 입력",
628
608
  "figure.text.release-blocked": "발행이 막힙니다 — {count}건",
629
609
  "figure.text.release-ready": "발행할 수 있습니다",
630
- "figure.label.places": "자리",
631
610
  "figure.text.places-need-a-box": "자리는 상자 모양 부품의 면에 둡니다.",
632
- "figure.label.place-grip": "집는 자리",
633
- "figure.label.place-seat": "놓는 자리",
634
- "figure.label.place-holds": "{count}개까지",
635
611
  "figure.button.remove-place": "자리 없애기",
636
612
  "figure.text.place-explained": "보드에서 물건을 이 부품의 어느 면에 놓거나 집을지 정합니다. 부품이 움직이면 물건도 따라갑니다.",
637
613
  "figure.text.place-needs-holding": "이 도형은 물건을 담는다고 선언하지 않아서, 자리를 만들어도 보드가 여기에 물건을 넘기지 않습니다.",
@@ -758,7 +734,6 @@
758
734
  "figure.button.follow-size-in-proportion": "모든 부품이 따라가게",
759
735
  "figure.text.proportion-kept": "자기 숫자로 남는 것: {what}",
760
736
  "figure.text.preview-clamped": "{axis} {asked} → {used}",
761
- "figure.label.placement-wall": "벽 기반 (wall)",
762
737
  "figure.text.placement-plane-refused": "{parts} 가 장착 평면에 붙은 면으로는 {placement} 에 붙일 수 없습니다. 떼거나 {faces} 면으로 다시 붙인 뒤 바꾸세요.",
763
738
  "figure.label.face-centre": "가운데",
764
739
  "figure.label.budget-moving": "매 프레임 다시 계산하는 부품",
@@ -995,13 +970,6 @@
995
970
  "figure.label.detail-saved": "저장본",
996
971
  "figure.text.detail-unreleased": "아직 발행되지 않았습니다. 저장된 초안을 보여줍니다.",
997
972
  "figure.button.detail-edit": "편집 화면 열기",
998
- "figure.label.detail-size": "배치 크기",
999
- "figure.button.detail-reset": "기준 크기와 자세로",
1000
- "figure.text.detail-transient": "크기와 움직임은 여기서만 시험합니다. 저장된 모델은 바뀌지 않습니다.",
1001
- "figure.text.detail-no-motion": "등록된 움직임이 없습니다.",
1002
- "figure.text.detail-playing": "재생 중",
1003
- "figure.label.detail-summary": "선택한 모델의 그리기 비용",
1004
- "figure.text.detail-paused": "일시정지",
1005
973
  "figure.button.download-package": "꾸러미 내려받기",
1006
974
  "figure.label.group-carrier": "캐리어",
1007
975
  "figure.label.carrier-type": "캐리어 유형",
@@ -1055,5 +1023,6 @@
1055
1023
  "figure.label.slot-preset-param-upperElevation": "위층 높이 (mm)",
1056
1024
  "figure.label.slot-preset-param-rows": "행",
1057
1025
  "figure.label.slot-preset-param-cols": "열",
1058
- "figure.label.slot-preset-param-stackLimit": "쌓는 단 수"
1026
+ "figure.label.slot-preset-param-stackLimit": "쌓는 단 수",
1027
+ "figure.label.placement": "붙이기"
1059
1028
  }
@@ -15,8 +15,6 @@
15
15
  "figure.button.fix-position": "tetapkan di sini",
16
16
  "figure.button.scale-position": "berkadar",
17
17
  "figure.button.remeasure-range": "ukur semula",
18
- "figure.label.sizing-rule": "when the size changes",
19
- "figure.label.sizing-uniform": "satu nisbah (min geometri tiga paksi)",
20
18
  "figure.button.scale-uniformly": "besarkan dengan satu nisbah",
21
19
  "figure.text.sizing-uniform-proposed": "figura ini mempunyai sendi. membesarkannya dengan satu nisbah memastikan sendi tidak terpisah pada sebarang saiz.",
22
20
  "figure.text.sizing-uniform-explained": "membesarkan seluruh figura dengan min geometri tiga saiz yang diberi papan. kaki kekal di lantai; ruang di atas figura dibiarkan kosong.",
@@ -121,7 +119,6 @@
121
119
  "figure.label.budgets": "budgets",
122
120
  "figure.label.by-axis": "kematangan mengikut item",
123
121
  "figure.label.cast-shadow": "cast shadow",
124
- "figure.label.category": "kategori",
125
122
  "figure.label.ceiling-height": "ketinggian siling (mm)",
126
123
  "figure.label.clip-name": "nama clip",
127
124
  "figure.label.clips": "animasi (dimainkan mengikut masa)",
@@ -148,7 +145,6 @@
148
145
  "figure.label.environment-sunny": "sunny",
149
146
  "figure.label.environment-warehouse": "warehouse",
150
147
  "figure.label.figure": "figure",
151
- "figure.label.figure-placement": "penempatan",
152
148
  "figure.label.figure-released": "diterbitkan",
153
149
  "figure.label.figure-type": "type",
154
150
  "figure.label.findings": "findings",
@@ -158,7 +154,6 @@
158
154
  "figure.label.hemisphere-light": "hemisphere light",
159
155
  "figure.label.history": "sejarah",
160
156
  "figure.label.intensity": "intensity",
161
- "figure.label.joint": "sendi",
162
157
  "figure.label.joint-axis": "paksi",
163
158
  "figure.label.joint-limit-max": "maks",
164
159
  "figure.label.joint-limit-min": "min",
@@ -176,7 +171,6 @@
176
171
  "figure.label.key-at": "masa (s)",
177
172
  "figure.label.key-at-value": "kedudukan (0–1)",
178
173
  "figure.label.key-light": "key light",
179
- "figure.label.maturity": "maturity",
180
174
  "figure.label.mode-edit": "edit",
181
175
  "figure.label.mode-preview": "preview",
182
176
  "figure.label.motion-intent": "apa yang patut bergerak?",
@@ -312,11 +306,6 @@
312
306
  "figure.label.face-inside-right": "inside right",
313
307
  "figure.label.face-inside-back": "inside back",
314
308
  "figure.label.face-inside-front": "inside front",
315
- "figure.label.placement": "lekatan",
316
- "figure.label.placement-ceiling": "berasaskan siling (ceiling)",
317
- "figure.label.placement-center": "berasaskan pusat (center)",
318
- "figure.label.placement-floor": "berasaskan lantai (floor)",
319
- "figure.label.placement-limit": "had penempatan",
320
309
  "figure.label.playback-speed": "kelajuan",
321
310
  "figure.label.preset": "preset",
322
311
  "figure.label.preset-ceramic": "ceramic",
@@ -344,9 +333,6 @@
344
333
  "figure.label.reuse-trend": "reuse trend",
345
334
  "figure.label.instance-count": "bilangan instans",
346
335
  "figure.label.rotation-degrees": "rotation (degrees)",
347
- "figure.label.rung-flow": "barang mengalir melalui",
348
- "figure.label.rung-hold": "memegang barang",
349
- "figure.label.rung-none": "lukis sahaja",
350
336
  "figure.label.same-as-off": "same as unlit",
351
337
  "figure.label.scene-floor": "floor",
352
338
  "figure.label.scene-reference": "rujukan adegan",
@@ -362,14 +348,12 @@
362
348
  "figure.label.status-colors": "lit colors (lamps · indicators)",
363
349
  "figure.label.tab-capability": "keupayaan",
364
350
  "figure.label.tab-environment": "persekitaran",
365
- "figure.label.tags": "tag",
366
351
  "figure.label.tools": "align",
367
352
  "figure.label.transparent": "transparent",
368
353
  "figure.label.triangles": "triangles",
369
354
  "figure.label.unit-none": "tiada unit",
370
355
  "figure.label.unit-type-it": "taip sendiri…",
371
356
  "figure.label.weight": "kos lukisan",
372
- "figure.label.what-this-does": "apa yang dilakukan figure ini",
373
357
  "figure.text.accepts-anything": "kosong bermaksud apa sahaja",
374
358
  "figure.text.accepts-explained": "jenis yang dibenarkan dalam slot ini. pisahkan dengan koma; biarkan kosong untuk tiada had.",
375
359
  "figure.text.add-a-shape": "click to add a part",
@@ -475,7 +459,6 @@
475
459
  "figure.text.no-figure-yet": "no figures yet",
476
460
  "figure.text.no-findings": "nothing to report.",
477
461
  "figure.text.not-measurable-yet": "not measurable",
478
- "figure.text.not-measured-yet": "not measured",
479
462
  "figure.text.nothing-released-yet": "belum ada yang diterbitkan.",
480
463
  "figure.text.on-by-default-explained": "keadaan permulaan apabila diletakkan pada lukisan. nilai yang ditetapkan pada instans diutamakan.",
481
464
  "figure.text.other-segment-count": "enter a value",
@@ -486,7 +469,6 @@
486
469
  "figure.text.placement-explained": "menetapkan satah rujukan dalam adegan 3D (lantai: AGV/penghantar, siling: OHT/hois, pusat: sensor/dron).",
487
470
  "figure.text.pose-as-default-explained": "Menulis postur semasa sebagai nilai lalai parameter, supaya figura berdiri begini apabila tiada nilai diberi.",
488
471
  "figure.text.preview-blocked-by-errors": "pratonton tidak dapat dipaparkan kerana ralat format. lihat tab kematangan untuk sebabnya.",
489
- "figure.text.preview-needs-a-part": "tambah bahagian untuk melihat rupanya apabila diletakkan pada lukisan.",
490
472
  "figure.text.put-on-floor": "Mengalihkan bahagian sekali supaya bahagian bawahnya di lantai (Y=0). Ia tidak kekal di situ apabila saiz berubah; untuk itu, gunakan “Ikut saiz, dilekatkan pada lantai”.",
491
473
  "figure.text.range-needs-room": "maksimum mesti melebihi minimum.",
492
474
  "figure.text.release-needs-a-save-first": "terdapat perubahan yang belum disimpan. simpan dahulu.",
@@ -533,7 +515,6 @@
533
515
  "figure.label.follows-nothing": "fixed",
534
516
  "figure.label.follows-instance": "instance size",
535
517
  "figure.label.follows-instance-share": "berkadar dengan saiz",
536
- "figure.label.instance-range": "saiz yang boleh diletakkan",
537
518
  "figure.label.follows-part": "another part",
538
519
  "figure.label.times": "times",
539
520
  "figure.label.plus": "plus (mm)",
@@ -588,7 +569,6 @@
588
569
  "figure.label.face-top": "top",
589
570
  "figure.label.face-back": "back",
590
571
  "figure.label.face-front": "front",
591
- "figure.label.motion": "Motion",
592
572
  "figure.text.motion-explained": "How this part moves. Added on top of its fastening, never instead of it.",
593
573
  "figure.label.motion-none": "does not move",
594
574
  "figure.label.motion-slide": "slide",
@@ -627,11 +607,7 @@
627
607
  "figure.label.design-inputs": "design inputs",
628
608
  "figure.text.release-blocked": "Release is blocked — {count}",
629
609
  "figure.text.release-ready": "Ready to release",
630
- "figure.label.places": "Tempat",
631
610
  "figure.text.places-need-a-box": "Tempat diletakkan pada muka bahagian berbentuk kotak.",
632
- "figure.label.place-grip": "Tempat cengkam",
633
- "figure.label.place-seat": "Tempat letak",
634
- "figure.label.place-holds": "sehingga {count}",
635
611
  "figure.button.remove-place": "Buang tempat",
636
612
  "figure.text.place-explained": "Tentukan muka bahagian ini tempat papan meletakkan atau memegang barang. Apabila bahagian bergerak, barang ikut bergerak.",
637
613
  "figure.text.place-needs-holding": "Rajah ini tidak mengisytiharkan bahawa ia memegang barang, jadi papan tidak menyerahkan apa-apa ke tempatnya.",
@@ -758,7 +734,6 @@
758
734
  "figure.button.follow-size-in-proportion": "jadikan semua bahagian mengikut",
759
735
  "figure.text.proportion-kept": "kekal dengan nombor sendiri: {what}",
760
736
  "figure.text.preview-clamped": "{axis} {asked} → {used}",
761
- "figure.label.placement-wall": "dinding (wall)",
762
737
  "figure.text.placement-plane-refused": "{parts} tidak boleh dipasang pada {placement} dengan muka yang dipasang pada satah pemasangan. tanggalkan atau pasang semula dengan muka {faces} dahulu.",
763
738
  "figure.label.face-centre": "tengah",
764
739
  "figure.label.budget-moving": "bahagian dikira semula setiap bingkai",
@@ -995,13 +970,6 @@
995
970
  "figure.label.detail-saved": "Versi disimpan",
996
971
  "figure.text.detail-unreleased": "Belum diterbitkan. Draf yang disimpan dipaparkan.",
997
972
  "figure.button.detail-edit": "Buka editor",
998
- "figure.label.detail-size": "Saiz penempatan",
999
- "figure.button.detail-reset": "Pulihkan saiz dan posisi asal",
1000
- "figure.text.detail-transient": "Saiz dan gerakan hanya diuji di sini. Model yang disimpan tidak berubah.",
1001
- "figure.text.detail-no-motion": "Tiada gerakan didaftarkan.",
1002
- "figure.text.detail-playing": "Sedang dimainkan",
1003
- "figure.label.detail-summary": "Kos lukisan model yang dipilih",
1004
- "figure.text.detail-paused": "Dijeda",
1005
973
  "figure.button.download-package": "muat turun pakej",
1006
974
  "figure.label.group-carrier": "Pembawa",
1007
975
  "figure.label.carrier-type": "Jenis pembawa",
@@ -1055,5 +1023,6 @@
1055
1023
  "figure.label.slot-preset-param-upperElevation": "ketinggian tingkat atas (mm)",
1056
1024
  "figure.label.slot-preset-param-rows": "baris",
1057
1025
  "figure.label.slot-preset-param-cols": "lajur",
1058
- "figure.label.slot-preset-param-stackLimit": "had susunan"
1026
+ "figure.label.slot-preset-param-stackLimit": "had susunan",
1027
+ "figure.label.placement": "lekatan"
1059
1028
  }
@@ -15,8 +15,6 @@
15
15
  "figure.button.fix-position": "固定在此",
16
16
  "figure.button.scale-position": "按比例",
17
17
  "figure.button.remeasure-range": "重新测量",
18
- "figure.label.sizing-rule": "when the size changes",
19
- "figure.label.sizing-uniform": "单一比例 (三轴几何平均)",
20
18
  "figure.button.scale-uniformly": "按单一比例放大",
21
19
  "figure.text.sizing-uniform-proposed": "这是带关节的图形。按单一比例放大,任何尺寸下关节都不会分开。",
22
20
  "figure.text.sizing-uniform-explained": "按看板给出的三轴尺寸的几何平均比例放大整个图形。底部保持在地面,盒子上方多出的空间保持空着。",
@@ -121,7 +119,6 @@
121
119
  "figure.label.budgets": "budgets",
122
120
  "figure.label.by-axis": "按项目的成熟度",
123
121
  "figure.label.cast-shadow": "cast shadow",
124
- "figure.label.category": "分类",
125
122
  "figure.label.ceiling-height": "天花板高度 (mm)",
126
123
  "figure.label.clip-name": "clip 名称",
127
124
  "figure.label.clips": "动画 (随时间播放)",
@@ -148,7 +145,6 @@
148
145
  "figure.label.environment-sunny": "sunny",
149
146
  "figure.label.environment-warehouse": "warehouse",
150
147
  "figure.label.figure": "Figure",
151
- "figure.label.figure-placement": "放置基准",
152
148
  "figure.label.figure-released": "已发布",
153
149
  "figure.label.figure-type": "类型",
154
150
  "figure.label.findings": "findings",
@@ -158,7 +154,6 @@
158
154
  "figure.label.hemisphere-light": "hemisphere light",
159
155
  "figure.label.history": "历史",
160
156
  "figure.label.intensity": "intensity",
161
- "figure.label.joint": "关节",
162
157
  "figure.label.joint-axis": "轴",
163
158
  "figure.label.joint-limit-max": "最大",
164
159
  "figure.label.joint-limit-min": "最小",
@@ -176,7 +171,6 @@
176
171
  "figure.label.key-at": "时间 (秒)",
177
172
  "figure.label.key-at-value": "值位置 (0–1)",
178
173
  "figure.label.key-light": "key light",
179
- "figure.label.maturity": "maturity",
180
174
  "figure.label.mode-edit": "edit",
181
175
  "figure.label.mode-preview": "preview",
182
176
  "figure.label.motion-intent": "要移动什么?",
@@ -312,11 +306,6 @@
312
306
  "figure.label.face-inside-right": "inside right",
313
307
  "figure.label.face-inside-back": "inside back",
314
308
  "figure.label.face-inside-front": "inside front",
315
- "figure.label.placement": "附着",
316
- "figure.label.placement-ceiling": "天花板基准 (ceiling)",
317
- "figure.label.placement-center": "中心基准 (center)",
318
- "figure.label.placement-floor": "地面基准 (floor)",
319
- "figure.label.placement-limit": "布置上限",
320
309
  "figure.label.playback-speed": "播放速度",
321
310
  "figure.label.preset": "preset",
322
311
  "figure.label.preset-ceramic": "ceramic",
@@ -344,9 +333,6 @@
344
333
  "figure.label.reuse-trend": "reuse trend",
345
334
  "figure.label.instance-count": "实例数",
346
335
  "figure.label.rotation-degrees": "rotation (degrees)",
347
- "figure.label.rung-flow": "流经",
348
- "figure.label.rung-hold": "承载",
349
- "figure.label.rung-none": "仅绘制",
350
336
  "figure.label.same-as-off": "same as unlit",
351
337
  "figure.label.scene-floor": "floor",
352
338
  "figure.label.scene-reference": "场景坐标基准",
@@ -362,14 +348,12 @@
362
348
  "figure.label.status-colors": "lit colors (lamps · indicators)",
363
349
  "figure.label.tab-capability": "能力",
364
350
  "figure.label.tab-environment": "环境",
365
- "figure.label.tags": "标签",
366
351
  "figure.label.tools": "align",
367
352
  "figure.label.transparent": "transparent",
368
353
  "figure.label.triangles": "triangles",
369
354
  "figure.label.unit-none": "无单位",
370
355
  "figure.label.unit-type-it": "直接输入…",
371
356
  "figure.label.weight": "绘制成本",
372
- "figure.label.what-this-does": "此 Figure 的作用",
373
357
  "figure.text.accepts-anything": "留空表示不限",
374
358
  "figure.text.accepts-explained": "可放入此槽位的类型。用逗号分隔,留空表示不限。",
375
359
  "figure.text.add-a-shape": "click to add a part",
@@ -475,7 +459,6 @@
475
459
  "figure.text.no-figure-yet": "no figures yet",
476
460
  "figure.text.no-findings": "nothing to report.",
477
461
  "figure.text.not-measurable-yet": "not measurable",
478
- "figure.text.not-measured-yet": "not measured",
479
462
  "figure.text.nothing-released-yet": "还没有已发布的版本。",
480
463
  "figure.text.on-by-default-explained": "放置到图面时的初始状态。实例上设置的值优先。",
481
464
  "figure.text.other-segment-count": "enter a value",
@@ -486,7 +469,6 @@
486
469
  "figure.text.placement-explained": "设置 3D 场景中的基准面 (地面: AGV/输送机,天花板: OHT/吊车,中心: 传感器/无人机)。",
487
470
  "figure.text.pose-as-default-explained": "把当前姿态写为参数默认值。没有给值时,图形以此姿态站立。",
488
471
  "figure.text.preview-blocked-by-errors": "由于格式错误无法显示预览。请在成熟度标签页查看原因。",
489
- "figure.text.preview-needs-a-part": "添加部件后会显示放置到图面上的效果。",
490
472
  "figure.text.put-on-floor": "只把当前位置的底面对齐到地面(Y=0)。尺寸变化时不会跟随。若要保持附着,请使用“附着地面并跟随尺寸”。",
491
473
  "figure.text.range-needs-room": "最大值必须大于最小值。",
492
474
  "figure.text.release-needs-a-save-first": "有未保存的更改。请先保存。",
@@ -533,7 +515,6 @@
533
515
  "figure.label.follows-nothing": "fixed",
534
516
  "figure.label.follows-instance": "instance size",
535
517
  "figure.label.follows-instance-share": "按尺寸比例",
536
- "figure.label.instance-range": "可放置的尺寸",
537
518
  "figure.label.follows-part": "another part",
538
519
  "figure.label.times": "times",
539
520
  "figure.label.plus": "plus (mm)",
@@ -588,7 +569,6 @@
588
569
  "figure.label.face-top": "top",
589
570
  "figure.label.face-back": "back",
590
571
  "figure.label.face-front": "front",
591
- "figure.label.motion": "Motion",
592
572
  "figure.text.motion-explained": "How this part moves. Added on top of its fastening, never instead of it.",
593
573
  "figure.label.motion-none": "does not move",
594
574
  "figure.label.motion-slide": "slide",
@@ -627,11 +607,7 @@
627
607
  "figure.label.design-inputs": "design inputs",
628
608
  "figure.text.release-blocked": "Release is blocked — {count}",
629
609
  "figure.text.release-ready": "Ready to release",
630
- "figure.label.places": "位置",
631
610
  "figure.text.places-need-a-box": "位置设在方盒形部件的面上。",
632
- "figure.label.place-grip": "夹持位置",
633
- "figure.label.place-seat": "放置位置",
634
- "figure.label.place-holds": "最多 {count} 个",
635
611
  "figure.button.remove-place": "删除位置",
636
612
  "figure.text.place-explained": "决定在看板上物品放在或夹在这个部件的哪个面上。部件移动时,物品也随之移动。",
637
613
  "figure.text.place-needs-holding": "这个图形没有声明可以容纳物品,所以即使设了位置,看板也不会把物品交给它。",
@@ -758,7 +734,6 @@
758
734
  "figure.button.follow-size-in-proportion": "让所有部件跟随",
759
735
  "figure.text.proportion-kept": "保留自身数值: {what}",
760
736
  "figure.text.preview-clamped": "{axis} {asked} → {used}",
761
- "figure.label.placement-wall": "墙面基准 (wall)",
762
737
  "figure.text.placement-plane-refused": "{parts} 贴在安装平面上的面不能用于 {placement}。请先拆下或改用 {faces} 面贴合后再更改。",
763
738
  "figure.label.face-centre": "中心",
764
739
  "figure.label.budget-moving": "每帧重新计算的部件",
@@ -995,13 +970,6 @@
995
970
  "figure.label.detail-saved": "已保存版本",
996
971
  "figure.text.detail-unreleased": "尚未发布。显示已保存的草稿。",
997
972
  "figure.button.detail-edit": "打开编辑页面",
998
- "figure.label.detail-size": "放置尺寸",
999
- "figure.button.detail-reset": "恢复基准尺寸与姿态",
1000
- "figure.text.detail-transient": "尺寸和动作仅在此处试用,不会修改已保存的模型。",
1001
- "figure.text.detail-no-motion": "没有已注册的动作。",
1002
- "figure.text.detail-playing": "播放中",
1003
- "figure.label.detail-summary": "所选模型的绘制成本",
1004
- "figure.text.detail-paused": "已暂停",
1005
973
  "figure.button.download-package": "下载包",
1006
974
  "figure.label.group-carrier": "载具",
1007
975
  "figure.label.carrier-type": "载具类型",
@@ -1055,5 +1023,6 @@
1055
1023
  "figure.label.slot-preset-param-upperElevation": "上层高度 (mm)",
1056
1024
  "figure.label.slot-preset-param-rows": "行",
1057
1025
  "figure.label.slot-preset-param-cols": "列",
1058
- "figure.label.slot-preset-param-stackLimit": "堆叠层数"
1026
+ "figure.label.slot-preset-param-stackLimit": "堆叠层数",
1027
+ "figure.label.placement": "附着"
1059
1028
  }
@@ -1,54 +0,0 @@
1
- import type { FigureAsset } from '@hatiolab/figure-model'
2
-
3
- /*
4
- * The figure's controls -- its state inputs: the values a board or a connector sets to pose
5
- * the figure (a lift height, a joint angle, a gripper opening). Kept apart from the element so the reading is tested
6
- * without a browser.
7
- */
8
- export interface Control {
9
- id: string
10
- /** The name a person reads, or the id when none is given. */
11
- label: string
12
- named: boolean
13
- unit: string
14
- min: number
15
- max: number
16
- /** Where it stands in the editor now -- the pose being looked at, not yet the default. */
17
- value: number
18
- /** Where it starts when the figure is placed: the default pose. */
19
- start: number
20
- /** Seconds to travel the whole range, 0 when it moves at once. */
21
- sweep: number
22
- /** A slider step: one degree for an angle, else a hundredth of the range. */
23
- step: number
24
- }
25
-
26
- export function controlsOf(asset: FigureAsset, values: Record<string, number> = {}): Control[] {
27
- return asset.document.model.inputs
28
- .filter(input => input.role === 'state')
29
- .map(input => {
30
- const policy = asset.stateInputs?.[input.id]
31
- const start = asset.stateDefaults[input.id] ?? input.min
32
- return {
33
- id: input.id,
34
- label: policy?.label ?? input.id,
35
- named: !!policy?.label,
36
- unit: input.unit,
37
- min: input.min,
38
- max: input.max,
39
- value: values[input.id] ?? start,
40
- start,
41
- sweep: policy?.sweep ?? 0,
42
- step: input.unit === 'deg' ? 1 : (input.max - input.min) / 100
43
- }
44
- })
45
- }
46
-
47
- /** Whether the pose being looked at differs from the default pose -- only then is there a pose to keep. */
48
- export const poseDiffers = (controls: readonly Control[]) => controls.some(c => c.value !== c.start)
49
-
50
- /** The current pose as the defaults: one `set-state-defaults` edit. */
51
- export const poseAsDefault = (controls: readonly Control[]) => ({
52
- kind: 'set-state-defaults' as const,
53
- values: Object.fromEntries(controls.map(c => [c.id, c.value]))
54
- })
@@ -1,151 +0,0 @@
1
- /**
2
- * 저작 화면의 **보기 설정**.
3
- *
4
- * ## 저장되지 않는다
5
- *
6
- * 이것은 자산이 아니라 **작업대**다. 조명을 밝게 하고 바닥을 켠 것은 그 사람이 지금
7
- * 보기 편한 상태일 뿐, 그 자산의 성질이 아니다. 그래서 자산에 안 들어가고, 보는 사람의
8
- * 브라우저에 남는다.
9
- *
10
- * 다른 사람이 같은 자산을 열면 자기 설정으로 본다. 그것이 맞다.
11
- *
12
- * ## 씬이 아는 이름을 그대로 쓴다
13
- *
14
- * 여기 이름은 전부 `model-layer` 의 상태 이름이다. 옮겨 적는 표를 두지 않는다 — 표를
15
- * 두면 씬이 새 설정을 받아도 이쪽이 모른다.
16
- *
17
- * 값이 바뀌면 씬이 스스로 반영한다(`three-capability` 의 `onchange`). 다만 `grid` 는
18
- * 한동안 3D 를 세울 때만 읽혔다 — things-scene 10.1.5 에서 고쳤다.
19
- */
20
- export interface ViewSettings {
21
- /**
22
- * 어떤 도면에 놓인 것으로 보나 — 씬 전체의 좌표 모드.
23
- *
24
- * **도형의 `placement` 와 다른 것이다.** 도형의 것은 「이 종류는 바닥에 서나, 천장에
25
- * 매달리나」이고, 이것은 「지금 보고 있는 도면이 어느 쪽을 기준으로 재나」다. 바닥
26
- * 기준 도면에 천정 기반 OHT 를 놓으면 도면은 안 뒤집히고 OHT 가 천장 높이에 매달린다.
27
- *
28
- * 한동안 도형의 `placement` 를 이 자리에 흘려 넣었다. 모델러에 도형이 하나뿐이라
29
- * 그럴듯해 보였지만, 그러면 도형의 성질이 씬 전체를 뒤집는다 — 도면에서는 성립할 수가
30
- * 없고(도면에는 도형이 여럿이다), 저작 중에는 배치를 고를 때마다 저작자가 적어 둔
31
- * 높이가 전부 다른 숫자로 보였다.
32
- *
33
- * 씬의 낱말 그대로다: `floor` 바닥 기준 · `space` 중심 기준(바닥 없음) · `inverted`
34
- * 천장 기준. **미리보기에만 먹인다** — 편집 캔버스의 `zPos` 는 저작자가 직접 적는
35
- * 숫자라 그 뜻이 보기 설정에 따라 바뀌면 안 된다.
36
- */
37
- placement: 'floor' | 'space' | 'inverted'
38
- /**
39
- * 천장 높이 (mm). 천정 기반 도형을 미리보기에서 어디에 매달 것인가.
40
- *
41
- * 도형은 제가 놓일 방의 높이를 모른다. 도면은 알지만 미리보기에는 도면이 없으므로,
42
- * 저작자가 가정할 값을 여기서 정한다.
43
- */
44
- ceilingHeight: number
45
- /** 좌표 바탕(축 가이드). 원점과 눈금을 보인다. */
46
- grid: boolean
47
- /** 축 이름표(X · Y · Z). 눈금만 두고 글자를 끌 수 있다. */
48
- gridLabels: boolean
49
- /** 판의 바닥면. 좌표 바탕과 겹치므로 기본은 끈다. */
50
- floor: boolean
51
- /** Environment — 반사(IBL). 금속 재질이 무엇을 비출지 정한다. */
52
- environment: EnvironmentName
53
- /** Sky Color — 배경색. */
54
- skyColor: string
55
- /** Key Light Intensity. */
56
- dirLightIntensity: number
57
- /** Key Light — Follow Camera. 끄면 그림자 방향이 고정된다. */
58
- dirLightFollowCamera: boolean
59
- /** Key Light — Cast Shadow. */
60
- dirShadowEnabled: boolean
61
- /** Hemisphere Light Intensity — 그늘진 면을 들어올린다. */
62
- hemiIntensity: number
63
- }
64
-
65
- /**
66
- * 환경 프리셋 — **`scene-manager` 의 `SkyPreset` 과 같은 여덟이다.**
67
- *
68
- * 한동안 다섯만 적었다. 씬은 여덟을 다 받는데 이쪽이 셋을 몰라서 고를 수 없었다.
69
- * operato-board 의 3D 씬 속성 패널도 같은 여덟을 보인다.
70
- */
71
- export const ENVIRONMENTS = [
72
- 'studio',
73
- 'warehouse',
74
- 'factory',
75
- 'office',
76
- 'home',
77
- 'sunny',
78
- 'cloudy',
79
- 'rainy'
80
- ] as const
81
- export type EnvironmentName = (typeof ENVIRONMENTS)[number]
82
-
83
- /**
84
- * 씬에 그대로 넣는 보기 설정 — **좌표 기준과 천장 높이는 빼고.**
85
- *
86
- * 나머지는 전부 `model-layer` 의 상태 이름이라 그대로 넣으면 씬이 알아서 반응한다.
87
- * 그런데 `placement` 는 편집 캔버스에 들어가면 안 되고(거기는 늘 상자 기준이다),
88
- * `ceilingHeight` 는 씬이 모르는 이름이다.
89
- *
90
- * **rest spread 로 넘기지 않으려고 이 함수가 있다.** 캔버스가 한동안
91
- * `const { grid, ..., ...light } = view` 로 나머지를 통째로 넘겼는데, 그러면 설정을
92
- * 하나 더할 때마다 그것이 두 화면에 **말없이** 실린다. 새로 더한 좌표 기준이 바로
93
- * 그 길로 캔버스에 들어갈 뻔했다.
94
- */
95
- export function sceneLook(view: ViewSettings): Record<string, unknown> {
96
- const { placement, ceilingHeight, ...look } = view
97
- return look
98
- }
99
-
100
- /**
101
- * 씬의 좌표 기준 — **씬의 낱말 그대로 셋이다.**
102
- *
103
- * 형식의 `floor` · `center` · `ceiling` 과 짝이 맞지만 철자가 다르다. 옮겨 적는 표를 두지
104
- * 않는 것이 이 파일의 규칙이므로 씬 쪽을 쓴다. 화면에는 둘 다 보인다 — 「천장 기준
105
- * (inverted)」.
106
- */
107
- export const SCENE_REFERENCES = ['floor', 'space', 'inverted'] as const
108
-
109
- /** 배경색 기본값. 회색이라 부품 색이 제 색으로 보인다. */
110
- export const WORKBENCH = '#7c7c7c'
111
-
112
- /**
113
- * 처음 값.
114
- *
115
- * **지금 저작 화면이 실제로 쓰던 값 그대로다.** 설정을 만들면서 화면이 달라지면
116
- * 무엇이 설정 때문이고 무엇이 원래 그랬는지 갈리지 않는다.
117
- */
118
- export const DEFAULT_VIEW: ViewSettings = {
119
- placement: 'floor',
120
- /* 공장 천장의 흔한 높이. 반도체 fab 의 OHT 레일이 대체로 이 언저리다. */
121
- ceilingHeight: 4000,
122
- grid: true,
123
- gridLabels: true,
124
- floor: false,
125
- environment: 'studio',
126
- skyColor: WORKBENCH,
127
- dirLightIntensity: 2.0,
128
- dirLightFollowCamera: true,
129
- dirShadowEnabled: true,
130
- hemiIntensity: 4.0
131
- }
132
-
133
- /**
134
- * How tall the preview board is: enough room for the tallest instance where the figure actually stands.
135
- *
136
- * A floor or center figure stands on the floor, so the tallest instance is the whole height. Only a
137
- * ceiling figure needs the room up to the ceiling. The board used to reach the ceiling for every figure,
138
- * which made a 920 tall AGV preview 4400 tall.
139
- *
140
- * This is an envelope, not a placement rule: where each instance goes is still the scene's
141
- * (`FigureRealObject.effectiveZPos`), and the camera fits what the scene drew.
142
- */
143
- export function previewBoardDepth(
144
- figure: { placement?: 'floor' | 'ceiling' | 'center' | 'wall'; base: { y: number } },
145
- ceilingHeight: number,
146
- factor: number
147
- ): number {
148
- const tallest = figure.base.y * factor
149
- const reach = figure.placement === 'ceiling' ? Math.max(ceilingHeight, tallest) : tallest
150
- return Math.round(reach * 1.1)
151
- }