@things-factory/figure-ui 10.1.61 → 10.1.63
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/client/modeller/figure-v3-links.ts +4 -1
- package/client/modeller/figure-v3-properties.ts +3 -1
- package/client/modeller/figure-view.ts +1 -1
- package/client/modeller/v3-editor.ts +4 -2
- package/client/modeller/v3-figure-facts.ts +1 -1
- package/client/modeller/v3-links.ts +12 -1
- package/client/modeller/v3-occupancy.ts +1 -1
- package/client/modeller/v3-refusals.ts +12 -0
- package/dist-client/modeller/figure-v3-links.js +4 -2
- package/dist-client/modeller/figure-v3-links.js.map +1 -1
- package/dist-client/modeller/figure-v3-properties.js +3 -1
- package/dist-client/modeller/figure-v3-properties.js.map +1 -1
- package/dist-client/modeller/figure-view.d.ts +1 -1
- package/dist-client/modeller/figure-view.js.map +1 -1
- package/dist-client/modeller/v3-clips.d.ts +1 -1
- package/dist-client/modeller/v3-editor.js +4 -2
- package/dist-client/modeller/v3-editor.js.map +1 -1
- package/dist-client/modeller/v3-figure-facts.d.ts +1 -1
- package/dist-client/modeller/v3-figure-facts.js.map +1 -1
- package/dist-client/modeller/v3-links.d.ts +8 -0
- package/dist-client/modeller/v3-links.js +11 -2
- package/dist-client/modeller/v3-links.js.map +1 -1
- package/dist-client/modeller/v3-occupancy.d.ts +1 -1
- package/dist-client/modeller/v3-occupancy.js.map +1 -1
- package/dist-client/modeller/v3-refusals.d.ts +5 -0
- package/dist-client/modeller/v3-refusals.js +13 -0
- package/dist-client/modeller/v3-refusals.js.map +1 -1
- package/dist-client/tsconfig.fui.tsbuildinfo +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/test/v3-links.test.ts +11 -0
- package/test/v3-refusals.test.ts +16 -0
- package/translations/en.json +4 -2
- package/translations/ja.json +4 -2
- package/translations/ko.json +4 -2
- package/translations/ms.json +4 -2
- package/translations/zh.json +4 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/figure-ui",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.63",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"@things-factory:registry": "https://registry.npmjs.org"
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"clean": "npm run clean:server && npm run clean:client"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@hatiolab/figure-model": "^0.1.
|
|
31
|
-
"@hatiolab/things-scene": "^10.1.
|
|
30
|
+
"@hatiolab/figure-model": "^0.1.74",
|
|
31
|
+
"@hatiolab/things-scene": "^10.1.50",
|
|
32
32
|
"@material/web": "^2.0.0",
|
|
33
33
|
"@operato/data-grist": "^10.0.0",
|
|
34
34
|
"@operato/graphql": "^10.0.0",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"@operato/styles": "^10.0.0",
|
|
41
41
|
"@operato/utils": "^10.0.0",
|
|
42
42
|
"@things-factory/ai-assistant": "^10.1.58",
|
|
43
|
-
"@things-factory/figure-service": "^10.1.
|
|
43
|
+
"@things-factory/figure-service": "^10.1.63",
|
|
44
44
|
"three": "^0.185.1"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "9d23a04edc8129d7ab1b066e1fb7a2855b6a0df8"
|
|
47
47
|
}
|
package/test/v3-links.test.ts
CHANGED
|
@@ -517,3 +517,14 @@ test('바닥에 선 부품도 무엇에 붙어 있는지 읽는다 — 그래야
|
|
|
517
517
|
/* What the form then sends: a fastening that replaces the one there. */
|
|
518
518
|
assert.doesNotThrow(() => applyV3Authoring(asset, { kind: 'attach', part: 'jamb', face: 'bottom', to: { plane: 'mounting-plane' }, align: { x: { mm: -500 } }, replace: !!heldBy(asset, 'jamb') }))
|
|
519
519
|
})
|
|
520
|
+
|
|
521
|
+
test('벽 배치 — 장착 평면은 Z = 0, 등으로 붙이고 가로질러 X · Y 로 맞춘다(사용자 · 아키텍트 09-25)', async () => {
|
|
522
|
+
const { mountingPlaneOf, alignAxesOf } = await import('../client/modeller/v3-links.ts')
|
|
523
|
+
let a = addV3Box(createV3Asset('Lamp'), { id: 'plate', size: { x: 200, y: 300, z: 20 }, position: { x: 0, y: 0, z: 0 } })
|
|
524
|
+
assert.deepEqual(mountingPlaneOf(a), { normal: 'y', faces: ['bottom', 'top'] }, '배치 선언 전에는 바닥')
|
|
525
|
+
a = applyV3Authoring(a, { kind: 'declare-occupancy', proposal: (await import('@hatiolab/figure-model')).proposeV3Occupancy(a), placement: 'wall' as never })
|
|
526
|
+
assert.deepEqual(mountingPlaneOf(a), { normal: 'z', faces: ['back'] })
|
|
527
|
+
assert.deepEqual(alignAxesOf(a, 'plate', 'plane').map(x => x.axis), ['x', 'y'])
|
|
528
|
+
const form = read('../client/modeller/figure-v3-links.ts')
|
|
529
|
+
assert.ok(form.includes('(!f.toPlane || plane.faces.includes(face as V3Face))'), '평면에 붙일 때는 평면이 받는 면만')
|
|
530
|
+
})
|
package/test/v3-refusals.test.ts
CHANGED
|
@@ -101,3 +101,19 @@ test('공간 선언에 든 부품 — 지우고 공간을 남은 부품에 맞
|
|
|
101
101
|
assert.ok(editor.includes("if (!refitRoom && inDeclaredRoom(error)) this.retry = { label: i18next.t('figure.button.remove-and-refit-room', { part: id }), run: () => this.removePart(id, true) }"))
|
|
102
102
|
assert.ok(ko['figure.button.remove-and-refit-room'].includes('{part}'))
|
|
103
103
|
})
|
|
104
|
+
|
|
105
|
+
test('배치를 바꿀 수 없는 까닭 — 평면에 붙은 부품과 새 평면이 받는 면을 말한다(벽 배치, 09-25)', async () => {
|
|
106
|
+
const { placementRefusalOf } = await import('../client/modeller/v3-refusals.ts')
|
|
107
|
+
const fm = await import('@hatiolab/figure-model')
|
|
108
|
+
let a = fm.addV3Box(fm.createV3Asset('Post'), { id: 'post', size: { x: 100, y: 1000, z: 100 }, position: { x: 0, y: 0, z: 0 } })
|
|
109
|
+
a = fm.applyV3Authoring(a, { kind: 'attach', part: 'post', face: 'bottom', to: { plane: 'mounting-plane' } })
|
|
110
|
+
let refused: unknown
|
|
111
|
+
try {
|
|
112
|
+
fm.applyV3Authoring(a, { kind: 'declare-occupancy', proposal: fm.proposeV3Occupancy(a), placement: 'wall' as never })
|
|
113
|
+
} catch (e) {
|
|
114
|
+
refused = e
|
|
115
|
+
}
|
|
116
|
+
const said = placementRefusalOf(refused, say)!
|
|
117
|
+
assert.ok(said.includes('post (bottom)') && said.includes('벽 기반') && said.includes('back'), said)
|
|
118
|
+
assert.equal(placementRefusalOf(new Error('x'), say), null)
|
|
119
|
+
})
|
package/translations/en.json
CHANGED
|
@@ -722,7 +722,7 @@
|
|
|
722
722
|
"figure.text.link-needs-larger-range": "with this link the figure cannot be drawn when its {axis} is over {mm} mm, and the declared sizes go above that.",
|
|
723
723
|
"figure.button.narrow-range-to": "narrow {axis} to {mm} mm and under, and link",
|
|
724
724
|
"figure.text.part-holds-others": "'{part}' holds {others}; take them off first.",
|
|
725
|
-
"figure.text.part-in-declared-space": "'{part}' is in the declared space
|
|
725
|
+
"figure.text.part-in-declared-space": "'{part}' is in the declared space, so it cannot simply be deleted. it can be deleted with the space fitted to the parts left.",
|
|
726
726
|
"figure.text.part-is-followed": "{others} follow the size or place of '{part}'; make them their own numbers first.",
|
|
727
727
|
"figure.text.part-is-led": "{others} move with '{part}'; give them their own control first.",
|
|
728
728
|
"figure.button.change-motion": "change the motion",
|
|
@@ -733,5 +733,7 @@
|
|
|
733
733
|
"figure.button.follow-size-in-proportion": "make every part follow",
|
|
734
734
|
"figure.text.proportion-kept": "keeps its own number: {what}",
|
|
735
735
|
"figure.button.remove-and-refit-room": "delete {part} and fit the space to the parts left",
|
|
736
|
-
"figure.text.preview-clamped": "{axis} {asked} → {used}"
|
|
736
|
+
"figure.text.preview-clamped": "{axis} {asked} → {used}",
|
|
737
|
+
"figure.label.placement-wall": "wall (wall)",
|
|
738
|
+
"figure.text.placement-plane-refused": "{parts} cannot go on a {placement} by the face fastened to the mounting plane. detach it or fasten it by its {faces} first."
|
|
737
739
|
}
|
package/translations/ja.json
CHANGED
|
@@ -722,7 +722,7 @@
|
|
|
722
722
|
"figure.text.link-needs-larger-range": "この連結で図形の {axis} が {mm} mm を超えると描けません。宣言された置けるサイズはそれより大きくまで開いています。",
|
|
723
723
|
"figure.button.narrow-range-to": "{axis} を {mm} mm までに絞って連結",
|
|
724
724
|
"figure.text.part-holds-others": "'{part}' に {others} が付いているため削除できません。先に外してください。",
|
|
725
|
-
"figure.text.part-in-declared-space": "'{part}'
|
|
725
|
+
"figure.text.part-in-declared-space": "'{part}' は宣言された空間に含まれるため、そのままでは削除できません。削除と同時に空間を残りの部品に合わせ直せます。",
|
|
726
726
|
"figure.text.part-is-followed": "{others} が '{part}' のサイズか位置に従っているため削除できません。先に自分の数値に変えてください。",
|
|
727
727
|
"figure.text.part-is-led": "{others} が '{part}' に連動しているため削除できません。先に自分の操作値に変えてください。",
|
|
728
728
|
"figure.button.change-motion": "動きを直す",
|
|
@@ -733,5 +733,7 @@
|
|
|
733
733
|
"figure.button.follow-size-in-proportion": "すべての部品を追従させる",
|
|
734
734
|
"figure.text.proportion-kept": "固有の数値のまま: {what}",
|
|
735
735
|
"figure.button.remove-and-refit-room": "「{part}」を削除し、空間を残りの部品に合わせる",
|
|
736
|
-
"figure.text.preview-clamped": "{axis} {asked} → {used}"
|
|
736
|
+
"figure.text.preview-clamped": "{axis} {asked} → {used}",
|
|
737
|
+
"figure.label.placement-wall": "壁基準 (wall)",
|
|
738
|
+
"figure.text.placement-plane-refused": "{parts} は取付平面に付いている面では {placement} に付けられません。外すか {faces} 面で付け直してから変更してください。"
|
|
737
739
|
}
|
package/translations/ko.json
CHANGED
|
@@ -722,7 +722,7 @@
|
|
|
722
722
|
"figure.text.link-needs-larger-range": "이 연결로 도형 {axis} 가 {mm} mm 보다 크면 그릴 수 없습니다. 지금 선언된 놓일 수 있는 크기는 그보다 큰 데까지 열려 있습니다.",
|
|
723
723
|
"figure.button.narrow-range-to": "{axis} 를 {mm} mm 까지로 좁히고 연결",
|
|
724
724
|
"figure.text.part-holds-others": "'{part}' 에 {others} 이 매달려 있어 지울 수 없습니다. 먼저 떼어 주세요.",
|
|
725
|
-
"figure.text.part-in-declared-space": "'{part}' 는 선언된 공간에 들어 있어 지울 수 없습니다.
|
|
725
|
+
"figure.text.part-in-declared-space": "'{part}' 는 선언된 공간에 들어 있어 그냥 지울 수 없습니다. 지우면서 공간을 남은 부품에 다시 맞출 수 있습니다.",
|
|
726
726
|
"figure.text.part-is-followed": "{others} 이 '{part}' 의 크기나 자리를 따르고 있어 지울 수 없습니다. 먼저 그 부품을 제 숫자로 바꾸세요.",
|
|
727
727
|
"figure.text.part-is-led": "{others} 이 '{part}' 를 따라 움직여 지울 수 없습니다. 먼저 제 조작값으로 바꾸세요.",
|
|
728
728
|
"figure.button.change-motion": "움직임 고치기",
|
|
@@ -733,5 +733,7 @@
|
|
|
733
733
|
"figure.button.follow-size-in-proportion": "모든 부품이 따라가게",
|
|
734
734
|
"figure.text.proportion-kept": "자기 숫자로 남는 것: {what}",
|
|
735
735
|
"figure.button.remove-and-refit-room": "'{part}' 지우고 공간을 남은 부품에 맞추기",
|
|
736
|
-
"figure.text.preview-clamped": "{axis} {asked} → {used}"
|
|
736
|
+
"figure.text.preview-clamped": "{axis} {asked} → {used}",
|
|
737
|
+
"figure.label.placement-wall": "벽 기반 (wall)",
|
|
738
|
+
"figure.text.placement-plane-refused": "{parts} 가 장착 평면에 붙은 면으로는 {placement} 에 붙일 수 없습니다. 떼거나 {faces} 면으로 다시 붙인 뒤 바꾸세요."
|
|
737
739
|
}
|
package/translations/ms.json
CHANGED
|
@@ -722,7 +722,7 @@
|
|
|
722
722
|
"figure.text.link-needs-larger-range": "dengan pautan ini rajah tidak boleh dilukis apabila {axis} melebihi {mm} mm, dan saiz yang diisytihar pergi lebih tinggi.",
|
|
723
723
|
"figure.button.narrow-range-to": "sempitkan {axis} hingga {mm} mm dan pautkan",
|
|
724
724
|
"figure.text.part-holds-others": "'{part}' memegang {others}; tanggalkan dahulu.",
|
|
725
|
-
"figure.text.part-in-declared-space": "'{part}' berada dalam ruang yang diisytihar
|
|
725
|
+
"figure.text.part-in-declared-space": "'{part}' berada dalam ruang yang diisytihar, jadi ia tidak boleh dipadam begitu sahaja. ia boleh dipadam dengan ruang dimuatkan semula pada bahagian yang tinggal.",
|
|
726
726
|
"figure.text.part-is-followed": "{others} mengikut saiz atau tempat '{part}'; jadikan nombor sendiri dahulu.",
|
|
727
727
|
"figure.text.part-is-led": "{others} bergerak bersama '{part}'; beri kawalan sendiri dahulu.",
|
|
728
728
|
"figure.button.change-motion": "ubah gerakan",
|
|
@@ -733,5 +733,7 @@
|
|
|
733
733
|
"figure.button.follow-size-in-proportion": "jadikan semua bahagian mengikut",
|
|
734
734
|
"figure.text.proportion-kept": "kekal dengan nombor sendiri: {what}",
|
|
735
735
|
"figure.button.remove-and-refit-room": "padam '{part}' dan muatkan ruang pada bahagian yang tinggal",
|
|
736
|
-
"figure.text.preview-clamped": "{axis} {asked} → {used}"
|
|
736
|
+
"figure.text.preview-clamped": "{axis} {asked} → {used}",
|
|
737
|
+
"figure.label.placement-wall": "dinding (wall)",
|
|
738
|
+
"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."
|
|
737
739
|
}
|
package/translations/zh.json
CHANGED
|
@@ -722,7 +722,7 @@
|
|
|
722
722
|
"figure.text.link-needs-larger-range": "此连接下,图形 {axis} 大于 {mm} mm 时无法绘制,而声明的可放置尺寸高于此值。",
|
|
723
723
|
"figure.button.narrow-range-to": "将 {axis} 收窄为 {mm} mm 以内并连接",
|
|
724
724
|
"figure.text.part-holds-others": "'{part}' 上挂着 {others},无法删除。请先卸下。",
|
|
725
|
-
"figure.text.part-in-declared-space": "'{part}'
|
|
725
|
+
"figure.text.part-in-declared-space": "'{part}' 在已声明的空间内,不能直接删除。可以在删除的同时让空间重新适配剩余部件。",
|
|
726
726
|
"figure.text.part-is-followed": "{others} 跟随 '{part}' 的尺寸或位置,无法删除。请先改为自身数值。",
|
|
727
727
|
"figure.text.part-is-led": "{others} 跟随 '{part}' 运动,无法删除。请先改为自身控制值。",
|
|
728
728
|
"figure.button.change-motion": "修改运动",
|
|
@@ -733,5 +733,7 @@
|
|
|
733
733
|
"figure.button.follow-size-in-proportion": "让所有部件跟随",
|
|
734
734
|
"figure.text.proportion-kept": "保留自身数值: {what}",
|
|
735
735
|
"figure.button.remove-and-refit-room": "删除 '{part}' 并使空间适配剩余部件",
|
|
736
|
-
"figure.text.preview-clamped": "{axis} {asked} → {used}"
|
|
736
|
+
"figure.text.preview-clamped": "{axis} {asked} → {used}",
|
|
737
|
+
"figure.label.placement-wall": "墙面基准 (wall)",
|
|
738
|
+
"figure.text.placement-plane-refused": "{parts} 贴在安装平面上的面不能用于 {placement}。请先拆下或改用 {faces} 面贴合后再更改。"
|
|
737
739
|
}
|