@snaptrude/plugin-core 0.0.0-bimsvg-20260928124803
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/AGENTS.md +231 -0
- package/CHANGELOG.md +341 -0
- package/CLAUDE.md +11 -0
- package/api-manifest.json +9120 -0
- package/dist/api/analysis/daylight.d.ts +603 -0
- package/dist/api/analysis/daylight.d.ts.map +1 -0
- package/dist/api/analysis/heatmaps.d.ts +658 -0
- package/dist/api/analysis/heatmaps.d.ts.map +1 -0
- package/dist/api/analysis/illuminance.d.ts +145 -0
- package/dist/api/analysis/illuminance.d.ts.map +1 -0
- package/dist/api/analysis/index.d.ts +59 -0
- package/dist/api/analysis/index.d.ts.map +1 -0
- package/dist/api/analysis/shadows.d.ts +165 -0
- package/dist/api/analysis/shadows.d.ts.map +1 -0
- package/dist/api/analysis/solar.d.ts +249 -0
- package/dist/api/analysis/solar.d.ts.map +1 -0
- package/dist/api/analysis/sunlightHours.d.ts +208 -0
- package/dist/api/analysis/sunlightHours.d.ts.map +1 -0
- package/dist/api/analysis/sunpath.d.ts +80 -0
- package/dist/api/analysis/sunpath.d.ts.map +1 -0
- package/dist/api/analysis/weather.d.ts +193 -0
- package/dist/api/analysis/weather.d.ts.map +1 -0
- package/dist/api/core/buildings.d.ts +427 -0
- package/dist/api/core/buildings.d.ts.map +1 -0
- package/dist/api/core/camera/index.d.ts +261 -0
- package/dist/api/core/camera/index.d.ts.map +1 -0
- package/dist/api/core/comment/index.d.ts +333 -0
- package/dist/api/core/comment/index.d.ts.map +1 -0
- package/dist/api/core/geom/create/index.d.ts +1073 -0
- package/dist/api/core/geom/create/index.d.ts.map +1 -0
- package/dist/api/core/geom/delete/index.d.ts +78 -0
- package/dist/api/core/geom/delete/index.d.ts.map +1 -0
- package/dist/api/core/geom/index.d.ts +33 -0
- package/dist/api/core/geom/index.d.ts.map +1 -0
- package/dist/api/core/geom/query/arc.d.ts +169 -0
- package/dist/api/core/geom/query/arc.d.ts.map +1 -0
- package/dist/api/core/geom/query/brep.d.ts +514 -0
- package/dist/api/core/geom/query/brep.d.ts.map +1 -0
- package/dist/api/core/geom/query/circle.d.ts +378 -0
- package/dist/api/core/geom/query/circle.d.ts.map +1 -0
- package/dist/api/core/geom/query/contour.d.ts +450 -0
- package/dist/api/core/geom/query/contour.d.ts.map +1 -0
- package/dist/api/core/geom/query/curve.d.ts +918 -0
- package/dist/api/core/geom/query/curve.d.ts.map +1 -0
- package/dist/api/core/geom/query/edge.d.ts +128 -0
- package/dist/api/core/geom/query/edge.d.ts.map +1 -0
- package/dist/api/core/geom/query/face.d.ts +363 -0
- package/dist/api/core/geom/query/face.d.ts.map +1 -0
- package/dist/api/core/geom/query/halfedge.d.ts +206 -0
- package/dist/api/core/geom/query/halfedge.d.ts.map +1 -0
- package/dist/api/core/geom/query/index.d.ts +61 -0
- package/dist/api/core/geom/query/index.d.ts.map +1 -0
- package/dist/api/core/geom/query/profile.d.ts +410 -0
- package/dist/api/core/geom/query/profile.d.ts.map +1 -0
- package/dist/api/core/geom/query/vertex.d.ts +187 -0
- package/dist/api/core/geom/query/vertex.d.ts.map +1 -0
- package/dist/api/core/geom/update/contour.d.ts +272 -0
- package/dist/api/core/geom/update/contour.d.ts.map +1 -0
- package/dist/api/core/geom/update/curve.d.ts +180 -0
- package/dist/api/core/geom/update/curve.d.ts.map +1 -0
- package/dist/api/core/geom/update/index.d.ts +27 -0
- package/dist/api/core/geom/update/index.d.ts.map +1 -0
- package/dist/api/core/geom/update/profile.d.ts +329 -0
- package/dist/api/core/geom/update/profile.d.ts.map +1 -0
- package/dist/api/core/groups.d.ts +485 -0
- package/dist/api/core/groups.d.ts.map +1 -0
- package/dist/api/core/handles/index.d.ts +210 -0
- package/dist/api/core/handles/index.d.ts.map +1 -0
- package/dist/api/core/history/index.d.ts +78 -0
- package/dist/api/core/history/index.d.ts.map +1 -0
- package/dist/api/core/index.d.ts +97 -0
- package/dist/api/core/index.d.ts.map +1 -0
- package/dist/api/core/io/export/index.d.ts +134 -0
- package/dist/api/core/io/export/index.d.ts.map +1 -0
- package/dist/api/core/io/import/index.d.ts +455 -0
- package/dist/api/core/io/import/index.d.ts.map +1 -0
- package/dist/api/core/io/index.d.ts +40 -0
- package/dist/api/core/io/index.d.ts.map +1 -0
- package/dist/api/core/io/job/index.d.ts +139 -0
- package/dist/api/core/io/job/index.d.ts.map +1 -0
- package/dist/api/core/io/query/index.d.ts +74 -0
- package/dist/api/core/io/query/index.d.ts.map +1 -0
- package/dist/api/core/io/terrain/index.d.ts +341 -0
- package/dist/api/core/io/terrain/index.d.ts.map +1 -0
- package/dist/api/core/io/underlay/index.d.ts +805 -0
- package/dist/api/core/io/underlay/index.d.ts.map +1 -0
- package/dist/api/core/layers.d.ts +402 -0
- package/dist/api/core/layers.d.ts.map +1 -0
- package/dist/api/core/math/index.d.ts +18 -0
- package/dist/api/core/math/index.d.ts.map +1 -0
- package/dist/api/core/math/quat.d.ts +170 -0
- package/dist/api/core/math/quat.d.ts.map +1 -0
- package/dist/api/core/math/vec3.d.ts +174 -0
- package/dist/api/core/math/vec3.d.ts.map +1 -0
- package/dist/api/core/mode/index.d.ts +111 -0
- package/dist/api/core/mode/index.d.ts.map +1 -0
- package/dist/api/core/project/index.d.ts +466 -0
- package/dist/api/core/project/index.d.ts.map +1 -0
- package/dist/api/core/proposals/index.d.ts +531 -0
- package/dist/api/core/proposals/index.d.ts.map +1 -0
- package/dist/api/core/storeys/index.d.ts +265 -0
- package/dist/api/core/storeys/index.d.ts.map +1 -0
- package/dist/api/core/tags.d.ts +860 -0
- package/dist/api/core/tags.d.ts.map +1 -0
- package/dist/api/core/units/index.d.ts +175 -0
- package/dist/api/core/units/index.d.ts.map +1 -0
- package/dist/api/core/user.d.ts +44 -0
- package/dist/api/core/user.d.ts.map +1 -0
- package/dist/api/core/zoom/index.d.ts +49 -0
- package/dist/api/core/zoom/index.d.ts.map +1 -0
- package/dist/api/design/boolean/index.d.ts +168 -0
- package/dist/api/design/boolean/index.d.ts.map +1 -0
- package/dist/api/design/create/bulk-items.d.ts +185 -0
- package/dist/api/design/create/bulk-items.d.ts.map +1 -0
- package/dist/api/design/create/grids.d.ts +132 -0
- package/dist/api/design/create/grids.d.ts.map +1 -0
- package/dist/api/design/create/index.d.ts +1747 -0
- package/dist/api/design/create/index.d.ts.map +1 -0
- package/dist/api/design/create/opening-fields.d.ts +37 -0
- package/dist/api/design/create/opening-fields.d.ts.map +1 -0
- package/dist/api/design/delete/index.d.ts +70 -0
- package/dist/api/design/delete/index.d.ts.map +1 -0
- package/dist/api/design/dimensions.d.ts +427 -0
- package/dist/api/design/dimensions.d.ts.map +1 -0
- package/dist/api/design/doors/index.d.ts +470 -0
- package/dist/api/design/doors/index.d.ts.map +1 -0
- package/dist/api/design/edit/index.d.ts +49 -0
- package/dist/api/design/edit/index.d.ts.map +1 -0
- package/dist/api/design/erase/index.d.ts +160 -0
- package/dist/api/design/erase/index.d.ts.map +1 -0
- package/dist/api/design/family.d.ts +611 -0
- package/dist/api/design/family.d.ts.map +1 -0
- package/dist/api/design/furniture/index.d.ts +296 -0
- package/dist/api/design/furniture/index.d.ts.map +1 -0
- package/dist/api/design/grids.d.ts +237 -0
- package/dist/api/design/grids.d.ts.map +1 -0
- package/dist/api/design/index.d.ts +260 -0
- package/dist/api/design/index.d.ts.map +1 -0
- package/dist/api/design/lock.d.ts +67 -0
- package/dist/api/design/lock.d.ts.map +1 -0
- package/dist/api/design/materials/index.d.ts +551 -0
- package/dist/api/design/materials/index.d.ts.map +1 -0
- package/dist/api/design/query/geometry/index.d.ts +252 -0
- package/dist/api/design/query/geometry/index.d.ts.map +1 -0
- package/dist/api/design/query/grids.d.ts +287 -0
- package/dist/api/design/query/grids.d.ts.map +1 -0
- package/dist/api/design/query/index.d.ts +1318 -0
- package/dist/api/design/query/index.d.ts.map +1 -0
- package/dist/api/design/query/referenceLines.d.ts +45 -0
- package/dist/api/design/query/referenceLines.d.ts.map +1 -0
- package/dist/api/design/query/spaces.d.ts +394 -0
- package/dist/api/design/query/spaces.d.ts.map +1 -0
- package/dist/api/design/selection/index.d.ts +282 -0
- package/dist/api/design/selection/index.d.ts.map +1 -0
- package/dist/api/design/shared.d.ts +38 -0
- package/dist/api/design/shared.d.ts.map +1 -0
- package/dist/api/design/transform/index.d.ts +249 -0
- package/dist/api/design/transform/index.d.ts.map +1 -0
- package/dist/api/design/types/index.d.ts +181 -0
- package/dist/api/design/types/index.d.ts.map +1 -0
- package/dist/api/design/update/index.d.ts +803 -0
- package/dist/api/design/update/index.d.ts.map +1 -0
- package/dist/api/design/visibility.d.ts +126 -0
- package/dist/api/design/visibility.d.ts.map +1 -0
- package/dist/api/design/windows/index.d.ts +300 -0
- package/dist/api/design/windows/index.d.ts.map +1 -0
- package/dist/api/entity/buildableEnvelope.d.ts +265 -0
- package/dist/api/entity/buildableEnvelope.d.ts.map +1 -0
- package/dist/api/entity/department.d.ts +1 -0
- package/dist/api/entity/department.d.ts.map +1 -0
- package/dist/api/entity/index.d.ts +28 -0
- package/dist/api/entity/index.d.ts.map +1 -0
- package/dist/api/entity/referenceLine.d.ts +210 -0
- package/dist/api/entity/referenceLine.d.ts.map +1 -0
- package/dist/api/entity/space.d.ts +846 -0
- package/dist/api/entity/space.d.ts.map +1 -0
- package/dist/api/entity/story.d.ts +476 -0
- package/dist/api/entity/story.d.ts.map +1 -0
- package/dist/api/index.d.ts +45 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/presentation/aiInspiration.d.ts +2400 -0
- package/dist/api/presentation/aiInspiration.d.ts.map +1 -0
- package/dist/api/presentation/annotate.d.ts +483 -0
- package/dist/api/presentation/annotate.d.ts.map +1 -0
- package/dist/api/presentation/diagrams.d.ts +184 -0
- package/dist/api/presentation/diagrams.d.ts.map +1 -0
- package/dist/api/presentation/drawings.d.ts +2900 -0
- package/dist/api/presentation/drawings.d.ts.map +1 -0
- package/dist/api/presentation/export.d.ts +126 -0
- package/dist/api/presentation/export.d.ts.map +1 -0
- package/dist/api/presentation/import.d.ts +164 -0
- package/dist/api/presentation/import.d.ts.map +1 -0
- package/dist/api/presentation/index.d.ts +114 -0
- package/dist/api/presentation/index.d.ts.map +1 -0
- package/dist/api/presentation/placedViews.d.ts +1232 -0
- package/dist/api/presentation/placedViews.d.ts.map +1 -0
- package/dist/api/presentation/shapes.d.ts +481 -0
- package/dist/api/presentation/shapes.d.ts.map +1 -0
- package/dist/api/presentation/sheets.d.ts +643 -0
- package/dist/api/presentation/sheets.d.ts.map +1 -0
- package/dist/api/presentation/slideshow.d.ts +125 -0
- package/dist/api/presentation/slideshow.d.ts.map +1 -0
- package/dist/api/presentation/tables.d.ts +81 -0
- package/dist/api/presentation/tables.d.ts.map +1 -0
- package/dist/api/presentation/viewPresets.d.ts +70 -0
- package/dist/api/presentation/viewPresets.d.ts.map +1 -0
- package/dist/api/presentation/views.d.ts +741 -0
- package/dist/api/presentation/views.d.ts.map +1 -0
- package/dist/api/program/adjacency.d.ts +155 -0
- package/dist/api/program/adjacency.d.ts.map +1 -0
- package/dist/api/program/areas.d.ts +450 -0
- package/dist/api/program/areas.d.ts.map +1 -0
- package/dist/api/program/classification.d.ts +135 -0
- package/dist/api/program/classification.d.ts.map +1 -0
- package/dist/api/program/cores.d.ts +78 -0
- package/dist/api/program/cores.d.ts.map +1 -0
- package/dist/api/program/departments.d.ts +487 -0
- package/dist/api/program/departments.d.ts.map +1 -0
- package/dist/api/program/index.d.ts +71 -0
- package/dist/api/program/index.d.ts.map +1 -0
- package/dist/api/program/labels.d.ts +355 -0
- package/dist/api/program/labels.d.ts.map +1 -0
- package/dist/api/program/layout.d.ts +398 -0
- package/dist/api/program/layout.d.ts.map +1 -0
- package/dist/api/program/metadata.d.ts +328 -0
- package/dist/api/program/metadata.d.ts.map +1 -0
- package/dist/api/program/metrics.d.ts +108 -0
- package/dist/api/program/metrics.d.ts.map +1 -0
- package/dist/api/program/site.d.ts +823 -0
- package/dist/api/program/site.d.ts.map +1 -0
- package/dist/api/program/spreadsheet.d.ts +2628 -0
- package/dist/api/program/spreadsheet.d.ts.map +1 -0
- package/dist/api/workspace/index.d.ts +552 -0
- package/dist/api/workspace/index.d.ts.map +1 -0
- package/dist/errors/codes.d.ts +34 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/envelope.d.ts +56 -0
- package/dist/errors/envelope.d.ts.map +1 -0
- package/dist/errors/index.d.ts +6 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/plugin-error.d.ts +69 -0
- package/dist/errors/plugin-error.d.ts.map +1 -0
- package/dist/handles.d.ts +229 -0
- package/dist/handles.d.ts.map +1 -0
- package/dist/host-utils.d.ts +47 -0
- package/dist/host-utils.d.ts.map +1 -0
- package/dist/index.cjs +8836 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7568 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +41 -0
- package/scripts/generate-manifest.mjs +238 -0
- package/scripts/generate-manifest.test.mjs +292 -0
- package/src/api/analysis/daylight.ts +470 -0
- package/src/api/analysis/heatmaps.ts +683 -0
- package/src/api/analysis/illuminance.ts +155 -0
- package/src/api/analysis/index.ts +61 -0
- package/src/api/analysis/shadows.ts +183 -0
- package/src/api/analysis/solar.ts +237 -0
- package/src/api/analysis/sunlightHours.ts +211 -0
- package/src/api/analysis/sunpath.ts +83 -0
- package/src/api/analysis/weather.ts +179 -0
- package/src/api/core/buildings.ts +485 -0
- package/src/api/core/camera/index.ts +268 -0
- package/src/api/core/comment/index.ts +376 -0
- package/src/api/core/geom/create/index.ts +1204 -0
- package/src/api/core/geom/delete/index.ts +84 -0
- package/src/api/core/geom/index.ts +35 -0
- package/src/api/core/geom/query/arc.ts +169 -0
- package/src/api/core/geom/query/brep.ts +563 -0
- package/src/api/core/geom/query/circle.ts +404 -0
- package/src/api/core/geom/query/contour.ts +540 -0
- package/src/api/core/geom/query/curve.ts +1078 -0
- package/src/api/core/geom/query/edge.ts +130 -0
- package/src/api/core/geom/query/face.ts +403 -0
- package/src/api/core/geom/query/halfedge.ts +210 -0
- package/src/api/core/geom/query/index.ts +63 -0
- package/src/api/core/geom/query/profile.ts +473 -0
- package/src/api/core/geom/query/vertex.ts +205 -0
- package/src/api/core/geom/update/contour.ts +315 -0
- package/src/api/core/geom/update/curve.ts +209 -0
- package/src/api/core/geom/update/index.ts +29 -0
- package/src/api/core/geom/update/profile.ts +377 -0
- package/src/api/core/groups.ts +521 -0
- package/src/api/core/handles/index.ts +233 -0
- package/src/api/core/history/index.ts +84 -0
- package/src/api/core/index.ts +99 -0
- package/src/api/core/io/export/index.ts +126 -0
- package/src/api/core/io/import/index.ts +504 -0
- package/src/api/core/io/index.ts +42 -0
- package/src/api/core/io/job/index.ts +140 -0
- package/src/api/core/io/query/index.ts +71 -0
- package/src/api/core/io/terrain/index.ts +360 -0
- package/src/api/core/io/underlay/index.ts +705 -0
- package/src/api/core/layers.ts +333 -0
- package/src/api/core/math/index.ts +20 -0
- package/src/api/core/math/quat.ts +172 -0
- package/src/api/core/math/vec3.ts +179 -0
- package/src/api/core/mode/index.ts +108 -0
- package/src/api/core/project/index.ts +479 -0
- package/src/api/core/proposals/index.ts +569 -0
- package/src/api/core/storeys/index.ts +294 -0
- package/src/api/core/tags.ts +911 -0
- package/src/api/core/units/index.ts +164 -0
- package/src/api/core/user.ts +46 -0
- package/src/api/core/zoom/index.ts +51 -0
- package/src/api/design/boolean/index.ts +179 -0
- package/src/api/design/create/bulk-items.ts +186 -0
- package/src/api/design/create/grids.ts +137 -0
- package/src/api/design/create/index.ts +1954 -0
- package/src/api/design/create/opening-fields.ts +37 -0
- package/src/api/design/delete/index.ts +74 -0
- package/src/api/design/dimensions.ts +453 -0
- package/src/api/design/doors/index.ts +500 -0
- package/src/api/design/edit/index.ts +54 -0
- package/src/api/design/erase/index.ts +151 -0
- package/src/api/design/family.ts +646 -0
- package/src/api/design/furniture/index.ts +319 -0
- package/src/api/design/grids.ts +237 -0
- package/src/api/design/index.ts +274 -0
- package/src/api/design/lock.ts +69 -0
- package/src/api/design/materials/index.ts +608 -0
- package/src/api/design/query/geometry/index.ts +288 -0
- package/src/api/design/query/grids.ts +197 -0
- package/src/api/design/query/index.ts +1176 -0
- package/src/api/design/query/referenceLines.ts +52 -0
- package/src/api/design/query/spaces.ts +275 -0
- package/src/api/design/selection/index.ts +273 -0
- package/src/api/design/shared.ts +40 -0
- package/src/api/design/transform/index.ts +254 -0
- package/src/api/design/types/index.ts +156 -0
- package/src/api/design/update/index.ts +798 -0
- package/src/api/design/visibility.ts +143 -0
- package/src/api/design/windows/index.ts +333 -0
- package/src/api/entity/buildableEnvelope.ts +322 -0
- package/src/api/entity/department.ts +0 -0
- package/src/api/entity/index.ts +30 -0
- package/src/api/entity/referenceLine.ts +235 -0
- package/src/api/entity/space.ts +612 -0
- package/src/api/entity/story.ts +517 -0
- package/src/api/index.ts +47 -0
- package/src/api/presentation/aiInspiration.ts +1116 -0
- package/src/api/presentation/annotate.ts +417 -0
- package/src/api/presentation/diagrams.ts +194 -0
- package/src/api/presentation/drawings.ts +529 -0
- package/src/api/presentation/export.ts +133 -0
- package/src/api/presentation/import.ts +159 -0
- package/src/api/presentation/index.ts +129 -0
- package/src/api/presentation/placedViews.ts +1203 -0
- package/src/api/presentation/shapes.ts +274 -0
- package/src/api/presentation/sheets.ts +616 -0
- package/src/api/presentation/slideshow.ts +134 -0
- package/src/api/presentation/tables.ts +84 -0
- package/src/api/presentation/viewPresets.ts +83 -0
- package/src/api/presentation/views.ts +698 -0
- package/src/api/program/adjacency.ts +164 -0
- package/src/api/program/areas.ts +408 -0
- package/src/api/program/classification.ts +138 -0
- package/src/api/program/cores.ts +83 -0
- package/src/api/program/departments.ts +517 -0
- package/src/api/program/index.ts +73 -0
- package/src/api/program/labels.ts +332 -0
- package/src/api/program/layout.ts +422 -0
- package/src/api/program/metadata.ts +364 -0
- package/src/api/program/metrics.ts +120 -0
- package/src/api/program/site.ts +748 -0
- package/src/api/program/spreadsheet.ts +2698 -0
- package/src/api/workspace/index.ts +612 -0
- package/src/errors/codes.ts +136 -0
- package/src/errors/envelope.ts +75 -0
- package/src/errors/index.ts +21 -0
- package/src/errors/plugin-error.ts +134 -0
- package/src/handles.ts +282 -0
- package/src/host-utils.ts +68 -0
- package/src/index.ts +5 -0
- package/src/types.ts +16 -0
- package/test/errors.test.mjs +184 -0
- package/tsconfig.json +22 -0
- package/tsup.config.ts +12 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
import { PluginApiReturn } from "../../../types";
|
|
3
|
+
import { ComponentHandle } from "../../../handles";
|
|
4
|
+
import { PluginDesignChangeResult } from "../lock";
|
|
5
|
+
/**
|
|
6
|
+
* The entity kinds {@linkcode PluginDesignSelectionApi.setByFilter} can select —
|
|
7
|
+
* the union of the editor's "Filter selection" menus (Design tab + BIM tab).
|
|
8
|
+
* Tokens mirror {@linkcode PluginEntityType} where a kind exists on the query
|
|
9
|
+
* surface; the rest are selection-only kinds the query surface cannot reach
|
|
10
|
+
* (layer-backed and annotation objects).
|
|
11
|
+
*
|
|
12
|
+
* | Value | Entity (menu label) |
|
|
13
|
+
* |---|---|
|
|
14
|
+
* | `"wall"` | Wall |
|
|
15
|
+
* | `"slab"` | Floor slab |
|
|
16
|
+
* | `"floor"` | Flooring |
|
|
17
|
+
* | `"door"` | Door |
|
|
18
|
+
* | `"window"` | Window |
|
|
19
|
+
* | `"beam"` | Beam |
|
|
20
|
+
* | `"column"` | Column |
|
|
21
|
+
* | `"ceiling"` | Ceiling |
|
|
22
|
+
* | `"roof"` | Roof |
|
|
23
|
+
* | `"staircase"` | Staircase |
|
|
24
|
+
* | `"furniture"` | Furniture |
|
|
25
|
+
* | `"pergola"` | Pergola |
|
|
26
|
+
* | `"sunshade"` | Sunshade |
|
|
27
|
+
* | `"referenceLine"` | Reference line |
|
|
28
|
+
* | `"space"` | Space (room mass) |
|
|
29
|
+
* | `"site"` | Site |
|
|
30
|
+
* | `"terrain"` | Terrain |
|
|
31
|
+
* | `"cad"` | CAD import |
|
|
32
|
+
* | `"pdf"` | PDF import |
|
|
33
|
+
* | `"image"` | Image import |
|
|
34
|
+
* | `"dimensionLine"` | Dimension line |
|
|
35
|
+
* | `"model3d"` | Imported 3D model |
|
|
36
|
+
* | `"neighborhoodBuilding"` | Neighborhood building |
|
|
37
|
+
* | `"programBlock"` | Program block (department mass) |
|
|
38
|
+
*/
|
|
39
|
+
export declare const PluginSelectionEntityType: z.ZodEnum<{
|
|
40
|
+
terrain: "terrain";
|
|
41
|
+
floor: "floor";
|
|
42
|
+
wall: "wall";
|
|
43
|
+
ceiling: "ceiling";
|
|
44
|
+
image: "image";
|
|
45
|
+
cad: "cad";
|
|
46
|
+
pdf: "pdf";
|
|
47
|
+
door: "door";
|
|
48
|
+
window: "window";
|
|
49
|
+
furniture: "furniture";
|
|
50
|
+
space: "space";
|
|
51
|
+
slab: "slab";
|
|
52
|
+
roof: "roof";
|
|
53
|
+
column: "column";
|
|
54
|
+
beam: "beam";
|
|
55
|
+
staircase: "staircase";
|
|
56
|
+
referenceLine: "referenceLine";
|
|
57
|
+
pergola: "pergola";
|
|
58
|
+
sunshade: "sunshade";
|
|
59
|
+
site: "site";
|
|
60
|
+
dimensionLine: "dimensionLine";
|
|
61
|
+
model3d: "model3d";
|
|
62
|
+
neighborhoodBuilding: "neighborhoodBuilding";
|
|
63
|
+
programBlock: "programBlock";
|
|
64
|
+
}>;
|
|
65
|
+
export type PluginSelectionEntityType = z.infer<typeof PluginSelectionEntityType>;
|
|
66
|
+
/**
|
|
67
|
+
* The filter for {@linkcode PluginDesignSelectionApi.setByFilter}. At least one
|
|
68
|
+
* field must be non-empty (to empty the selection use
|
|
69
|
+
* {@linkcode PluginDesignSelectionApi.clear}). Fields **AND**-combine; values
|
|
70
|
+
* within a field **OR**-combine — `{ storeys: [2], types: ["furniture"] }`
|
|
71
|
+
* selects only the furniture on storey 2.
|
|
72
|
+
*
|
|
73
|
+
* | Field | Type | Selects entities where |
|
|
74
|
+
* |---|---|---|
|
|
75
|
+
* | `storeys` | `number[]` | storey/floor level ∈ `storeys` (negative = basement) |
|
|
76
|
+
* | `types` | {@linkcode PluginSelectionEntityType}`[]` | entity kind ∈ `types` |
|
|
77
|
+
*/
|
|
78
|
+
export declare const PluginSelectionFilter: z.ZodObject<{
|
|
79
|
+
storeys: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
80
|
+
types: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
81
|
+
terrain: "terrain";
|
|
82
|
+
floor: "floor";
|
|
83
|
+
wall: "wall";
|
|
84
|
+
ceiling: "ceiling";
|
|
85
|
+
image: "image";
|
|
86
|
+
cad: "cad";
|
|
87
|
+
pdf: "pdf";
|
|
88
|
+
door: "door";
|
|
89
|
+
window: "window";
|
|
90
|
+
furniture: "furniture";
|
|
91
|
+
space: "space";
|
|
92
|
+
slab: "slab";
|
|
93
|
+
roof: "roof";
|
|
94
|
+
column: "column";
|
|
95
|
+
beam: "beam";
|
|
96
|
+
staircase: "staircase";
|
|
97
|
+
referenceLine: "referenceLine";
|
|
98
|
+
pergola: "pergola";
|
|
99
|
+
sunshade: "sunshade";
|
|
100
|
+
site: "site";
|
|
101
|
+
dimensionLine: "dimensionLine";
|
|
102
|
+
model3d: "model3d";
|
|
103
|
+
neighborhoodBuilding: "neighborhoodBuilding";
|
|
104
|
+
programBlock: "programBlock";
|
|
105
|
+
}>>>;
|
|
106
|
+
}, z.core.$strip>;
|
|
107
|
+
export type PluginSelectionFilter = z.infer<typeof PluginSelectionFilter>;
|
|
108
|
+
/**
|
|
109
|
+
* `snaptrude.design.selection` — read and mutate the current scene selection.
|
|
110
|
+
*
|
|
111
|
+
* Selection targets are {@linkcode ComponentHandle}s. `get` is the one sanctioned
|
|
112
|
+
* `get`-returns-array accessor (§4.1(3)). The mutators (`set`/`add`/`remove`/`clear`)
|
|
113
|
+
* change the live selection and return the resulting selection snapshot — they are
|
|
114
|
+
* **not undoable** (the engine fires a selection listener, no command), so the
|
|
115
|
+
* returned {@linkcode PluginDesignChangeResult} is a committed-state snapshot.
|
|
116
|
+
*/
|
|
117
|
+
export declare abstract class PluginDesignSelectionApi {
|
|
118
|
+
constructor();
|
|
119
|
+
/**
|
|
120
|
+
* Read the current scene selection — the entities the user (or a previous
|
|
121
|
+
* call) has selected, returned as handles you can pass straight into other
|
|
122
|
+
* API calls.
|
|
123
|
+
*
|
|
124
|
+
* @returns The selection as {@linkcode ComponentHandle}`[]` (`[]` when nothing is selected)
|
|
125
|
+
*
|
|
126
|
+
* @examplePrompt What do I have selected right now?
|
|
127
|
+
* @examplePrompt List the currently selected objects
|
|
128
|
+
* @examplePrompt Which rooms are selected in the scene?
|
|
129
|
+
* @examplePrompt Get the ids of everything I've selected
|
|
130
|
+
* @examplePrompt Is anything selected?
|
|
131
|
+
*
|
|
132
|
+
* # Example
|
|
133
|
+
* ```ts
|
|
134
|
+
* // Selection handles feed straight into other API calls
|
|
135
|
+
* const selection = await snaptrude.design.selection.get()
|
|
136
|
+
* if (selection.length > 0) {
|
|
137
|
+
* const props = await snaptrude.design.query.getProperties(selection[0])
|
|
138
|
+
* }
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
abstract get(): PluginApiReturn<ComponentHandle[]>;
|
|
142
|
+
/**
|
|
143
|
+
* Replace the selection with exactly the given entities — anything
|
|
144
|
+
* previously selected is deselected first, so afterwards only these
|
|
145
|
+
* entities are selected.
|
|
146
|
+
*
|
|
147
|
+
* @param components The entities to select
|
|
148
|
+
* @returns The resulting selection snapshot
|
|
149
|
+
*
|
|
150
|
+
* @examplePrompt Select these three walls
|
|
151
|
+
* @examplePrompt Select only the kitchen and deselect everything else
|
|
152
|
+
* @examplePrompt Change the selection to just these rooms
|
|
153
|
+
* @examplePrompt Highlight the spaces on the second storey
|
|
154
|
+
*
|
|
155
|
+
* # Example
|
|
156
|
+
* ```ts
|
|
157
|
+
* // Select only the ground-storey walls (replaces the previous selection)
|
|
158
|
+
* const walls = await snaptrude.design.query.listWalls({ storeys: [1] })
|
|
159
|
+
* const { affected } = await snaptrude.design.selection.set(walls)
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
abstract set(components: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>;
|
|
163
|
+
/**
|
|
164
|
+
* Add entities to the current selection without deselecting anything — the
|
|
165
|
+
* selection grows to include the given entities alongside whatever was
|
|
166
|
+
* already selected.
|
|
167
|
+
*
|
|
168
|
+
* @param components The entities to add to the selection
|
|
169
|
+
* @returns The resulting selection snapshot
|
|
170
|
+
*
|
|
171
|
+
* @examplePrompt Add the corridor to my current selection
|
|
172
|
+
* @examplePrompt Select these columns too, keeping what's already selected
|
|
173
|
+
* @examplePrompt Also select the roof
|
|
174
|
+
* @examplePrompt Extend the selection to include all the doors on this floor
|
|
175
|
+
*
|
|
176
|
+
* # Example
|
|
177
|
+
* ```ts
|
|
178
|
+
* // Grow the selection to include every roof, keeping what's already selected
|
|
179
|
+
* const roofs = await snaptrude.design.query.listRoofs()
|
|
180
|
+
* await snaptrude.design.selection.add(roofs)
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
abstract add(components: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>;
|
|
184
|
+
/**
|
|
185
|
+
* Remove entities from the current selection — the given entities are
|
|
186
|
+
* deselected while everything else stays selected.
|
|
187
|
+
*
|
|
188
|
+
* @param components The entities to remove from the selection
|
|
189
|
+
* @returns The resulting selection snapshot
|
|
190
|
+
*
|
|
191
|
+
* @examplePrompt Deselect the stair core but keep the rest selected
|
|
192
|
+
* @examplePrompt Remove these walls from my selection
|
|
193
|
+
* @examplePrompt Take the furniture out of the current selection
|
|
194
|
+
* @examplePrompt Unselect the two smaller rooms
|
|
195
|
+
*
|
|
196
|
+
* # Example
|
|
197
|
+
* ```ts
|
|
198
|
+
* // Deselect the furniture while keeping everything else selected
|
|
199
|
+
* const furniture = await snaptrude.design.query.listFurniture({ isSelected: true })
|
|
200
|
+
* await snaptrude.design.selection.remove(furniture)
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
abstract remove(components: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>;
|
|
204
|
+
/**
|
|
205
|
+
* Clear the selection so nothing is selected (equivalent to `set([])`).
|
|
206
|
+
*
|
|
207
|
+
* @returns The resulting (empty) selection snapshot
|
|
208
|
+
*
|
|
209
|
+
* @examplePrompt Deselect everything
|
|
210
|
+
* @examplePrompt Clear my current selection
|
|
211
|
+
* @examplePrompt Unselect all objects in the scene
|
|
212
|
+
* @examplePrompt Make sure nothing is selected before we start
|
|
213
|
+
*
|
|
214
|
+
* # Example
|
|
215
|
+
* ```ts
|
|
216
|
+
* const { affected } = await snaptrude.design.selection.clear()
|
|
217
|
+
* // affected is the resulting selection — always [] here
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
abstract clear(): PluginApiReturn<PluginDesignChangeResult>;
|
|
221
|
+
/**
|
|
222
|
+
* Replace the selection with every visible entity of the active building that
|
|
223
|
+
* matches the filter — the programmatic equivalent of the editor's
|
|
224
|
+
* **Story selection** (`storeys`) and **Filter selection** (`types`) menus
|
|
225
|
+
* under the select tool, including their combination (fields AND, values
|
|
226
|
+
* within a field OR). Reaches selection-only kinds the query surface cannot
|
|
227
|
+
* (sites, terrain, CAD/PDF/image imports, dimension lines, 3D models,
|
|
228
|
+
* neighborhood buildings) and selects whole groups the way the editor does.
|
|
229
|
+
*
|
|
230
|
+
* This is a one-shot bulk select, not a persistent mode: the user's next
|
|
231
|
+
* canvas click resets the underlying filter state (the selection it made
|
|
232
|
+
* stays until changed). Results honor the ambient view — active building,
|
|
233
|
+
* hidden objects/buckets, and in 2D the active storey.
|
|
234
|
+
*
|
|
235
|
+
* @param filter Which entities to select — {@linkcode PluginSelectionFilter};
|
|
236
|
+
* at least one field must be non-empty
|
|
237
|
+
* @returns The resulting selection snapshot
|
|
238
|
+
*
|
|
239
|
+
* @examplePrompt Select everything on storey 2
|
|
240
|
+
* @examplePrompt Select all the walls and doors
|
|
241
|
+
* @examplePrompt Story selection: select the ground floor and first floor
|
|
242
|
+
* @examplePrompt Filter selection: select all furniture in the model
|
|
243
|
+
* @examplePrompt Select only the furniture on the second storey
|
|
244
|
+
* @examplePrompt Select all the spaces so I can recolor them
|
|
245
|
+
*
|
|
246
|
+
* # Example
|
|
247
|
+
* ```ts
|
|
248
|
+
* // "Story selection": everything on storeys 1 and 2
|
|
249
|
+
* await snaptrude.design.selection.setByFilter({ storeys: [1, 2] })
|
|
250
|
+
*
|
|
251
|
+
* // "Filter selection": all walls and doors
|
|
252
|
+
* await snaptrude.design.selection.setByFilter({ types: ["wall", "door"] })
|
|
253
|
+
*
|
|
254
|
+
* // Combined: only the furniture on storey 2
|
|
255
|
+
* const { affected } = await snaptrude.design.selection.setByFilter({
|
|
256
|
+
* storeys: [2],
|
|
257
|
+
* types: ["furniture"],
|
|
258
|
+
* })
|
|
259
|
+
* ```
|
|
260
|
+
*/
|
|
261
|
+
abstract setByFilter(filter: PluginSelectionFilter): PluginApiReturn<PluginDesignChangeResult>;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Arguments for {@linkcode PluginDesignSelectionApi.set}.
|
|
265
|
+
*
|
|
266
|
+
* | Property | Type | Description |
|
|
267
|
+
* |---|---|---|
|
|
268
|
+
* | `components` | {@linkcode ComponentHandle}`[]` | The entities to select |
|
|
269
|
+
*/
|
|
270
|
+
export declare const PluginDesignSelectionSetArgs: z.ZodObject<{
|
|
271
|
+
components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
272
|
+
}, z.core.$strip>;
|
|
273
|
+
export type PluginDesignSelectionSetArgs = z.infer<typeof PluginDesignSelectionSetArgs>;
|
|
274
|
+
export declare const PluginDesignSelectionAddArgs: z.ZodObject<{
|
|
275
|
+
components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
276
|
+
}, z.core.$strip>;
|
|
277
|
+
export type PluginDesignSelectionAddArgs = z.infer<typeof PluginDesignSelectionAddArgs>;
|
|
278
|
+
export declare const PluginDesignSelectionRemoveArgs: z.ZodObject<{
|
|
279
|
+
components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
280
|
+
}, z.core.$strip>;
|
|
281
|
+
export type PluginDesignSelectionRemoveArgs = z.infer<typeof PluginDesignSelectionRemoveArgs>;
|
|
282
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/design/selection/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;EAyBpC,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEjF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ9B,CAAA;AACJ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;;;GAQG;AACH,8BAAsB,wBAAwB;;IAG5C;;;;;;;;;;;;;;;;;;;;;OAqBG;aACa,GAAG,IAAI,eAAe,CAAC,eAAe,EAAE,CAAC;IAEzD;;;;;;;;;;;;;;;;;;;OAmBG;aACa,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC,wBAAwB,CAAC;IAE7F;;;;;;;;;;;;;;;;;;;OAmBG;aACa,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC,wBAAwB,CAAC;IAE7F;;;;;;;;;;;;;;;;;;OAkBG;aACa,MAAM,CACpB,UAAU,EAAE,eAAe,EAAE,GAC5B,eAAe,CAAC,wBAAwB,CAAC;IAE5C;;;;;;;;;;;;;;;OAeG;aACa,KAAK,IAAI,eAAe,CAAC,wBAAwB,CAAC;IAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;aACa,WAAW,CACzB,MAAM,EAAE,qBAAqB,GAC5B,eAAe,CAAC,wBAAwB,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B;;iBAEvC,CAAA;AACF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF,eAAO,MAAM,4BAA4B;;iBAA+B,CAAA;AACxE,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF,eAAO,MAAM,+BAA+B;;iBAA+B,CAAA;AAC3E,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
import { ComponentHandle } from "../../handles";
|
|
3
|
+
/**
|
|
4
|
+
* Shared `design.*` operation return records (LLD Part A.3).
|
|
5
|
+
*
|
|
6
|
+
* `PluginDesignChangeResult` (`{ affected }`) is NOT here — it already lives in
|
|
7
|
+
* `./lock` and is reused verbatim by the transform/delete mutators.
|
|
8
|
+
*
|
|
9
|
+
* NOTE: `PluginMirrorAxis` currently lives in `./doors`; its relocation into this
|
|
10
|
+
* shared module is deferred to the transform wave (avoids a doors edit + a
|
|
11
|
+
* double-export while `design.transform` is unwired).
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Result of a CSG boolean op (`design.boolean.union/subtract/intersect`). Grounded
|
|
15
|
+
* in the engine `Boolean3dOperation.resultComponents { toCreate; toDelete }`:
|
|
16
|
+
* `created` are the result masses, `deleted` is every consumed input (for
|
|
17
|
+
* `subtract` this includes BOTH the target AND the tools). Errors throw (RPC
|
|
18
|
+
* rejects); no `Result<>` crosses the boundary.
|
|
19
|
+
*/
|
|
20
|
+
export declare const BooleanOutcome: z.ZodObject<{
|
|
21
|
+
created: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
22
|
+
deleted: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
export type BooleanOutcome = z.infer<typeof BooleanOutcome>;
|
|
25
|
+
/**
|
|
26
|
+
* Result of `design.edit.offsetSplit` (migrated from `tools.offset`). `createdIds`
|
|
27
|
+
* are the components the offset produced; `deletedIds` are those a split-style
|
|
28
|
+
* offset removed. `offsetValue` is the engine's POST-clamp / post-sign applied
|
|
29
|
+
* distance — the only way a caller learns the actually-applied clamped distance
|
|
30
|
+
* (the shipped `tools.offset` result dropped it).
|
|
31
|
+
*/
|
|
32
|
+
export declare const OffsetSplitOutcome: z.ZodObject<{
|
|
33
|
+
createdIds: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
34
|
+
deletedIds: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
35
|
+
offsetValue: z.ZodNumber;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
export type OffsetSplitOutcome = z.infer<typeof OffsetSplitOutcome>;
|
|
38
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/api/design/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;;;iBAGzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;;iBAI7B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
import { PluginApiReturn } from "../../../types";
|
|
3
|
+
import { ComponentHandle, Vec3Handle } from "../../../handles";
|
|
4
|
+
import { PluginDesignChangeResult } from "../lock";
|
|
5
|
+
/**
|
|
6
|
+
* `snaptrude.design.transform` — rigid transforms on scene entities.
|
|
7
|
+
*
|
|
8
|
+
* `move` / `rotate` migrated from the removed `tools.transform.*`; `align` snaps a
|
|
9
|
+
* set of components' bounding-box edges to each other (or to a reference); `mirror`
|
|
10
|
+
* flips components in place about a horizontal axis. All ops are undoable and return
|
|
11
|
+
* {@linkcode PluginDesignChangeResult} `{ affected }`; failures throw (RPC rejects).
|
|
12
|
+
*
|
|
13
|
+
* `getPosition` / `setPosition` (and `scale`, an engine gap) are NOT in this surface
|
|
14
|
+
* yet — they are a later pass.
|
|
15
|
+
*/
|
|
16
|
+
export declare abstract class PluginDesignTransformApi {
|
|
17
|
+
constructor();
|
|
18
|
+
/**
|
|
19
|
+
* Translate entities by a **relative** displacement vector (added to the first
|
|
20
|
+
* component's absolute position as the anchor). Undoable.
|
|
21
|
+
*
|
|
22
|
+
* @param components - Entities to move
|
|
23
|
+
* @param displacement - Relative translation as a {@linkcode Vec3Handle}
|
|
24
|
+
* @param options - `is2D`, `trackParentChange`
|
|
25
|
+
* @returns {@linkcode PluginDesignChangeResult}
|
|
26
|
+
*
|
|
27
|
+
* @examplePrompt Move the selected room 5 metres to the right
|
|
28
|
+
* @examplePrompt Shift these walls 3m along the x axis
|
|
29
|
+
* @examplePrompt Nudge this space 500mm north
|
|
30
|
+
* @examplePrompt Translate the furniture block by (10, 0, 5)
|
|
31
|
+
* @examplePrompt Move these masses up one storey
|
|
32
|
+
*
|
|
33
|
+
* @performance Array API — one host round-trip for the whole set. Pass every target in a
|
|
34
|
+
* single call; never loop `design.transform.move` per entity.
|
|
35
|
+
*
|
|
36
|
+
* # Example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const { vec3 } = snaptrude.core.math
|
|
39
|
+
* await snaptrude.design.transform.move(["space-id"], vec3.new(10, 0, 0))
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
abstract move(components: ComponentHandle[], displacement: Vec3Handle, options?: {
|
|
43
|
+
is2D?: boolean;
|
|
44
|
+
trackParentChange?: boolean;
|
|
45
|
+
}): PluginApiReturn<PluginDesignChangeResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Rotate entities by a **signed angle in DEGREES** (positive = CCW about +Y).
|
|
48
|
+
* The pivot defaults to the combined bounding-box centre; pass `options.pivot`
|
|
49
|
+
* to rotate about an explicit world-space point instead. NOTE: unlike the
|
|
50
|
+
* removed `tools.transform.rotate` (radians), this canonical form takes
|
|
51
|
+
* DEGREES. Undoable.
|
|
52
|
+
*
|
|
53
|
+
* @param components - Entities to rotate
|
|
54
|
+
* @param angleInDegrees - Signed rotation angle in degrees
|
|
55
|
+
* @param options - `axis` (defaults to world +Y), `pivot` (world-space rotation
|
|
56
|
+
* centre as a {@linkcode Vec3Handle}; defaults to the combined bbox centre),
|
|
57
|
+
* `is2D`
|
|
58
|
+
* @returns {@linkcode PluginDesignChangeResult}
|
|
59
|
+
*
|
|
60
|
+
* @examplePrompt Rotate the selected building 90 degrees
|
|
61
|
+
* @examplePrompt Turn this room 45 degrees clockwise
|
|
62
|
+
* @examplePrompt Spin the furniture block 180 degrees about its centre
|
|
63
|
+
* @examplePrompt Rotate these masses 30 degrees around the vertical axis
|
|
64
|
+
* @examplePrompt Rotate these walls 90 degrees about the origin
|
|
65
|
+
*
|
|
66
|
+
* @performance Array API — one host round-trip for the whole set. Pass every target in a
|
|
67
|
+
* single call; never loop `design.transform.rotate` per entity.
|
|
68
|
+
*
|
|
69
|
+
* # Example
|
|
70
|
+
* ```ts
|
|
71
|
+
* await snaptrude.design.transform.rotate(["space-id"], 90)
|
|
72
|
+
* // …or rotate about an explicit pivot point
|
|
73
|
+
* const { vec3 } = snaptrude.core.math
|
|
74
|
+
* await snaptrude.design.transform.rotate(["space-id"], 90, { pivot: vec3.new(0, 0, 0) })
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
abstract rotate(components: ComponentHandle[], angleInDegrees: number, options?: {
|
|
78
|
+
axis?: Vec3Handle;
|
|
79
|
+
pivot?: Vec3Handle;
|
|
80
|
+
is2D?: boolean;
|
|
81
|
+
}): PluginApiReturn<PluginDesignChangeResult>;
|
|
82
|
+
/**
|
|
83
|
+
* Align a set of components by snapping one bounding-box edge to a common value
|
|
84
|
+
* — the classic Left/Center/Right/Top/Middle/Bottom align. Purely **world-axis**
|
|
85
|
+
* (deterministic and headless — the UI's camera-relative remap is bypassed):
|
|
86
|
+
*
|
|
87
|
+
* - `left` / `right` / `center` → world **X** min / max / mid
|
|
88
|
+
* - `top` / `bottom` / `middle` → world **Z** max / min / mid
|
|
89
|
+
*
|
|
90
|
+
* There is **no vertical (Y) alignment** in v1 (the UI only reaches it via a
|
|
91
|
+
* side-elevation camera remap, which this API does not replicate). Doors and
|
|
92
|
+
* windows are **rejected** in v1 — if any component in `components` (or the
|
|
93
|
+
* `reference`) is a door or window, the whole call **throws**; nothing is
|
|
94
|
+
* silently dropped. A group aligns as **one rigid body** (its whole-group
|
|
95
|
+
* bounding box moves together). Undoable.
|
|
96
|
+
*
|
|
97
|
+
* Requires **at least 2 components** unless a `reference` is supplied; with a
|
|
98
|
+
* reference, every component aligns to that reference's edge (the reference does
|
|
99
|
+
* not move) and a single component is allowed. Y (height) is preserved.
|
|
100
|
+
*
|
|
101
|
+
* @param components - Entities to align (≥2 without a `reference`)
|
|
102
|
+
* @param edge - Which bounding-box edge to snap ({@linkcode PluginAlignEdge})
|
|
103
|
+
* @param options - `reference`: a component whose edge is the fixed target
|
|
104
|
+
* @returns {@linkcode PluginDesignChangeResult}
|
|
105
|
+
*
|
|
106
|
+
* @examplePrompt Align the selected rooms to the left
|
|
107
|
+
* @examplePrompt Line up these masses along their top edges
|
|
108
|
+
* @examplePrompt Center these columns horizontally
|
|
109
|
+
* @examplePrompt Align all the walls to the left edge of this reference wall
|
|
110
|
+
* @examplePrompt Snap the bottom edges of these spaces together
|
|
111
|
+
*
|
|
112
|
+
* @performance Array API — one host round-trip for the whole set. Pass every target in a
|
|
113
|
+
* single call; never loop `design.transform.align` per entity.
|
|
114
|
+
*
|
|
115
|
+
* # Example
|
|
116
|
+
* ```ts
|
|
117
|
+
* const rooms = await snaptrude.design.selection.get()
|
|
118
|
+
* // align every room's left (world -X) edge to a common minimum
|
|
119
|
+
* await snaptrude.design.transform.align(rooms, "left")
|
|
120
|
+
* // …or align them to a fixed reference component's left edge
|
|
121
|
+
* const [anchor] = await snaptrude.design.query.listWalls({ storeys: [1] })
|
|
122
|
+
* await snaptrude.design.transform.align(rooms, "left", { reference: anchor })
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
abstract align(components: ComponentHandle[], edge: PluginAlignEdge, options?: {
|
|
126
|
+
reference?: ComponentHandle;
|
|
127
|
+
}): PluginApiReturn<PluginDesignChangeResult>;
|
|
128
|
+
/**
|
|
129
|
+
* Mirror components **in place** about a horizontal axis, flipping their geometry
|
|
130
|
+
* across that axis through the combined bounding-box centre (the mesh's
|
|
131
|
+
* world-matrix flip + brep inversion + CAD/dimension-line/parametric handling
|
|
132
|
+
* commit atomically). Nothing moves off-centre — this is the toolbar "flip", not
|
|
133
|
+
* a translate-and-reflect. Undoable.
|
|
134
|
+
*
|
|
135
|
+
* `axis` names the axis the geometry mirrors **across** (world axes, Y is up):
|
|
136
|
+
* - `'x'` — mirror across world X (a front↔back flip in plan; reflects the Z coord)
|
|
137
|
+
* - `'z'` — mirror across world Z (a left↔right flip in plan; reflects the X coord)
|
|
138
|
+
*
|
|
139
|
+
* Vertical (`'y'`) mirroring is intentionally not exposed. Locked, bucket-locked
|
|
140
|
+
* and ineligible entries (terrain, plinths, reference/dimension lines,
|
|
141
|
+
* neighbourhood buildings) are **silently dropped**; the call only throws if
|
|
142
|
+
* nothing mirrorable remains. `affected` echoes the supplied handles.
|
|
143
|
+
*
|
|
144
|
+
* @param components - Entities to mirror (≥1)
|
|
145
|
+
* @param axis - Axis to mirror across ({@linkcode PluginTransformMirrorAxis})
|
|
146
|
+
* @returns {@linkcode PluginDesignChangeResult}
|
|
147
|
+
*
|
|
148
|
+
* @examplePrompt Mirror the selected building across the x axis
|
|
149
|
+
* @examplePrompt Flip these rooms left to right
|
|
150
|
+
* @examplePrompt Mirror this furniture block horizontally
|
|
151
|
+
* @examplePrompt Flip the selected walls front to back
|
|
152
|
+
* @examplePrompt Create a mirror image of these masses about the z axis
|
|
153
|
+
*
|
|
154
|
+
* @performance Array API — one host round-trip for the whole set. Pass every target in a
|
|
155
|
+
* single call; never loop `design.transform.mirror` per entity.
|
|
156
|
+
*
|
|
157
|
+
* # Example
|
|
158
|
+
* ```ts
|
|
159
|
+
* const rooms = await snaptrude.design.selection.get()
|
|
160
|
+
* await snaptrude.design.transform.mirror(rooms, "x")
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
abstract mirror(components: ComponentHandle[], axis: PluginTransformMirrorAxis): PluginApiReturn<PluginDesignChangeResult>;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The horizontal axis a {@linkcode PluginDesignTransformApi.mirror} flips **across**
|
|
167
|
+
* (world axes, Y up): `'x'` mirrors across world X (front↔back in plan; reflects Z),
|
|
168
|
+
* `'z'` mirrors across world Z (left↔right in plan; reflects X). Vertical (`'y'`)
|
|
169
|
+
* mirroring is not exposed.
|
|
170
|
+
*/
|
|
171
|
+
export declare const PluginTransformMirrorAxis: z.ZodEnum<{
|
|
172
|
+
x: "x";
|
|
173
|
+
z: "z";
|
|
174
|
+
}>;
|
|
175
|
+
export type PluginTransformMirrorAxis = z.infer<typeof PluginTransformMirrorAxis>;
|
|
176
|
+
/**
|
|
177
|
+
* The bounding-box edge an {@linkcode PluginDesignTransformApi.align} snaps to.
|
|
178
|
+
* Mirrors the engine's align `DirectionType`. World-axis mapping: `left`/`right`/`center`
|
|
179
|
+
* → world X min/max/mid; `top`/`bottom`/`middle` → world Z max/min/mid.
|
|
180
|
+
*/
|
|
181
|
+
export declare const PluginAlignEdge: z.ZodEnum<{
|
|
182
|
+
center: "center";
|
|
183
|
+
top: "top";
|
|
184
|
+
left: "left";
|
|
185
|
+
right: "right";
|
|
186
|
+
bottom: "bottom";
|
|
187
|
+
middle: "middle";
|
|
188
|
+
}>;
|
|
189
|
+
export type PluginAlignEdge = z.infer<typeof PluginAlignEdge>;
|
|
190
|
+
/**
|
|
191
|
+
* Arguments for {@linkcode PluginDesignTransformApi.move} (options flattened).
|
|
192
|
+
*/
|
|
193
|
+
export declare const PluginDesignMoveArgs: z.ZodObject<{
|
|
194
|
+
components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
195
|
+
displacement: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
|
|
196
|
+
is2D: z.ZodOptional<z.ZodBoolean>;
|
|
197
|
+
trackParentChange: z.ZodOptional<z.ZodBoolean>;
|
|
198
|
+
}, z.core.$strip>;
|
|
199
|
+
export type PluginDesignMoveArgs = z.infer<typeof PluginDesignMoveArgs>;
|
|
200
|
+
/**
|
|
201
|
+
* Arguments for {@linkcode PluginDesignTransformApi.rotate} (options flattened).
|
|
202
|
+
*/
|
|
203
|
+
export declare const PluginDesignRotateArgs: z.ZodObject<{
|
|
204
|
+
components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
205
|
+
angleInDegrees: z.ZodNumber;
|
|
206
|
+
axis: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
207
|
+
is2D: z.ZodOptional<z.ZodBoolean>;
|
|
208
|
+
pivot: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
209
|
+
}, z.core.$strip>;
|
|
210
|
+
export type PluginDesignRotateArgs = z.infer<typeof PluginDesignRotateArgs>;
|
|
211
|
+
/**
|
|
212
|
+
* Arguments for {@linkcode PluginDesignTransformApi.align} (options flattened).
|
|
213
|
+
*
|
|
214
|
+
* | Property | Type | Description |
|
|
215
|
+
* |---|---|---|
|
|
216
|
+
* | `components` | {@linkcode ComponentHandle}`[]` | Entities to align (≥2 unless `reference` is set — host-enforced) |
|
|
217
|
+
* | `edge` | {@linkcode PluginAlignEdge} | Which bounding-box edge to snap |
|
|
218
|
+
* | `reference` | {@linkcode ComponentHandle} | A fixed component whose edge is the target (optional) |
|
|
219
|
+
*/
|
|
220
|
+
export declare const PluginDesignAlignArgs: z.ZodObject<{
|
|
221
|
+
components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
222
|
+
edge: z.ZodEnum<{
|
|
223
|
+
center: "center";
|
|
224
|
+
top: "top";
|
|
225
|
+
left: "left";
|
|
226
|
+
right: "right";
|
|
227
|
+
bottom: "bottom";
|
|
228
|
+
middle: "middle";
|
|
229
|
+
}>;
|
|
230
|
+
reference: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
231
|
+
}, z.core.$strip>;
|
|
232
|
+
export type PluginDesignAlignArgs = z.infer<typeof PluginDesignAlignArgs>;
|
|
233
|
+
/**
|
|
234
|
+
* Arguments for {@linkcode PluginDesignTransformApi.mirror}.
|
|
235
|
+
*
|
|
236
|
+
* | Property | Type | Description |
|
|
237
|
+
* |---|---|---|
|
|
238
|
+
* | `components` | {@linkcode ComponentHandle}`[]` | Entities to mirror (≥1) |
|
|
239
|
+
* | `axis` | {@linkcode PluginTransformMirrorAxis} | Horizontal axis to mirror across (`'x'` \| `'z'`) |
|
|
240
|
+
*/
|
|
241
|
+
export declare const PluginDesignMirrorArgs: z.ZodObject<{
|
|
242
|
+
components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
|
|
243
|
+
axis: z.ZodEnum<{
|
|
244
|
+
x: "x";
|
|
245
|
+
z: "z";
|
|
246
|
+
}>;
|
|
247
|
+
}, z.core.$strip>;
|
|
248
|
+
export type PluginDesignMirrorArgs = z.infer<typeof PluginDesignMirrorArgs>;
|
|
249
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/design/transform/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAElD;;;;;;;;;;GAUG;AACH,8BAAsB,wBAAwB;;IAG5C;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACa,IAAI,CAClB,UAAU,EAAE,eAAe,EAAE,EAC7B,YAAY,EAAE,UAAU,EACxB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GACxD,eAAe,CAAC,wBAAwB,CAAC;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;aACa,MAAM,CACpB,UAAU,EAAE,eAAe,EAAE,EAC7B,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,UAAU,CAAC;QAAC,KAAK,CAAC,EAAE,UAAU,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAClE,eAAe,CAAC,wBAAwB,CAAC;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;aACa,KAAK,CACnB,UAAU,EAAE,eAAe,EAAE,EAC7B,IAAI,EAAE,eAAe,EACrB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,GACxC,eAAe,CAAC,wBAAwB,CAAC;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;aACa,MAAM,CACpB,UAAU,EAAE,eAAe,EAAE,EAC7B,IAAI,EAAE,yBAAyB,GAC9B,eAAe,CAAC,wBAAwB,CAAC;CAC7C;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB;;;EAAqB,CAAA;AAC3D,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,yBAAyB,CACjC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;EAO1B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;iBAK/B,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;iBAMjC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;iBAIhC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB;;;;;;iBAGjC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA"}
|