@pascal-app/viewer 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +157 -0
- package/dist/components/viewer/drone-controller.d.ts.map +1 -1
- package/dist/components/viewer/drone-controller.js +1 -5
- package/dist/components/viewer/first-person/build-collider-world.d.ts +14 -0
- package/dist/components/viewer/first-person/build-collider-world.d.ts.map +1 -0
- package/dist/components/viewer/first-person/build-collider-world.js +426 -0
- package/dist/components/viewer/first-person/ground-holes.d.ts +22 -0
- package/dist/components/viewer/first-person/ground-holes.d.ts.map +1 -0
- package/dist/components/viewer/first-person/ground-holes.js +116 -0
- package/dist/components/viewer/first-person/mechanism-targets.d.ts +27 -0
- package/dist/components/viewer/first-person/mechanism-targets.d.ts.map +1 -0
- package/dist/components/viewer/first-person/mechanism-targets.js +79 -0
- package/dist/components/viewer/first-person/terrain-collider.d.ts +32 -0
- package/dist/components/viewer/first-person/terrain-collider.d.ts.map +1 -0
- package/dist/components/viewer/first-person/terrain-collider.js +175 -0
- package/dist/components/viewer/glb-walkthrough-controller.d.ts +1 -1
- package/dist/components/viewer/glb-walkthrough-controller.d.ts.map +1 -1
- package/dist/components/viewer/glb-walkthrough-controller.js +3 -4
- package/dist/components/viewer/live-walkthrough-controller.d.ts +17 -0
- package/dist/components/viewer/live-walkthrough-controller.d.ts.map +1 -0
- package/dist/components/viewer/live-walkthrough-controller.js +1449 -0
- package/dist/components/viewer/post-processing.d.ts.map +1 -1
- package/dist/components/viewer/post-processing.js +22 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/lib/daylight/room-map.d.ts +29 -4
- package/dist/lib/daylight/room-map.d.ts.map +1 -1
- package/dist/lib/daylight/room-map.js +219 -36
- package/dist/lib/daylight/room-scene.d.ts.map +1 -1
- package/dist/lib/daylight/room-scene.js +9 -3
- package/dist/lib/daylight/rooms.d.ts +15 -6
- package/dist/lib/daylight/rooms.d.ts.map +1 -1
- package/dist/lib/daylight/rooms.js +49 -9
- package/dist/lib/measurement-presentation.d.ts +2 -0
- package/dist/lib/measurement-presentation.d.ts.map +1 -1
- package/dist/lib/measurement-presentation.js +6 -0
- package/dist/lib/typing-target.d.ts +2 -0
- package/dist/lib/typing-target.d.ts.map +1 -0
- package/dist/lib/typing-target.js +7 -0
- package/dist/lib/viewer-config.d.ts +6 -0
- package/dist/lib/viewer-config.d.ts.map +1 -1
- package/dist/lib/viewer-config.js +2 -0
- package/dist/sfx/audio-settings.d.ts +81 -0
- package/dist/sfx/audio-settings.d.ts.map +1 -0
- package/dist/sfx/audio-settings.js +166 -0
- package/dist/sfx/index.d.ts +6 -0
- package/dist/sfx/index.d.ts.map +1 -0
- package/dist/sfx/index.js +5 -0
- package/dist/sfx/interaction-sounds.d.ts +7 -0
- package/dist/sfx/interaction-sounds.d.ts.map +1 -0
- package/dist/sfx/interaction-sounds.js +39 -0
- package/dist/sfx/player.d.ts +31 -0
- package/dist/sfx/player.d.ts.map +1 -0
- package/dist/sfx/player.js +255 -0
- package/dist/sfx/sounds.d.ts +60 -0
- package/dist/sfx/sounds.d.ts.map +1 -0
- package/dist/sfx/sounds.js +25 -0
- package/dist/sfx/use-viewer-ui-sounds.d.ts +8 -0
- package/dist/sfx/use-viewer-ui-sounds.d.ts.map +1 -0
- package/dist/sfx/use-viewer-ui-sounds.js +42 -0
- package/dist/store/use-first-person-hud.d.ts +13 -0
- package/dist/store/use-first-person-hud.d.ts.map +1 -0
- package/dist/store/use-first-person-hud.js +21 -0
- package/dist/systems/roof/roof-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-system.js +27 -13
- package/dist/ui/components/action-button.d.ts +14 -0
- package/dist/ui/components/action-button.d.ts.map +1 -0
- package/dist/ui/components/action-button.js +21 -0
- package/dist/ui/components/action-menu-placement.d.ts +7 -0
- package/dist/ui/components/action-menu-placement.d.ts.map +1 -0
- package/dist/ui/components/action-menu-placement.js +10 -0
- package/dist/ui/components/floorplan-compass-button.d.ts +10 -0
- package/dist/ui/components/floorplan-compass-button.d.ts.map +1 -0
- package/dist/ui/components/floorplan-compass-button.js +22 -0
- package/dist/ui/components/follow-pascal-toggle.d.ts +6 -0
- package/dist/ui/components/follow-pascal-toggle.d.ts.map +1 -0
- package/dist/ui/components/follow-pascal-toggle.js +21 -0
- package/dist/ui/components/localized-html.d.ts +9 -0
- package/dist/ui/components/localized-html.d.ts.map +1 -0
- package/dist/ui/components/localized-html.js +16 -0
- package/dist/ui/components/render-settings-menu.d.ts +9 -0
- package/dist/ui/components/render-settings-menu.d.ts.map +1 -0
- package/dist/ui/components/render-settings-menu.js +145 -0
- package/dist/ui/components/rooms/room-highlight.d.ts +10 -0
- package/dist/ui/components/rooms/room-highlight.d.ts.map +1 -0
- package/dist/ui/components/rooms/room-highlight.js +56 -0
- package/dist/ui/components/rooms/room-labels.d.ts +278 -0
- package/dist/ui/components/rooms/room-labels.d.ts.map +1 -0
- package/dist/ui/components/rooms/room-labels.js +1295 -0
- package/dist/ui/components/rooms/viewer-rooms.d.ts +14 -0
- package/dist/ui/components/rooms/viewer-rooms.d.ts.map +1 -0
- package/dist/ui/components/rooms/viewer-rooms.js +123 -0
- package/dist/ui/components/scene-loader.d.ts +18 -0
- package/dist/ui/components/scene-loader.d.ts.map +1 -0
- package/dist/ui/components/scene-loader.js +29 -0
- package/dist/ui/components/sky-control.d.ts +37 -0
- package/dist/ui/components/sky-control.d.ts.map +1 -0
- package/dist/ui/components/sky-control.js +382 -0
- package/dist/ui/components/use-viewer-camera-navigation-sync.d.ts +4 -0
- package/dist/ui/components/use-viewer-camera-navigation-sync.d.ts.map +1 -0
- package/dist/ui/components/use-viewer-camera-navigation-sync.js +117 -0
- package/dist/ui/components/viewer-controls-bar.d.ts +20 -0
- package/dist/ui/components/viewer-controls-bar.d.ts.map +1 -0
- package/dist/ui/components/viewer-controls-bar.js +130 -0
- package/dist/ui/components/viewer-hover-label.d.ts +14 -0
- package/dist/ui/components/viewer-hover-label.d.ts.map +1 -0
- package/dist/ui/components/viewer-hover-label.js +28 -0
- package/dist/ui/components/viewer-scene-header.d.ts +34 -0
- package/dist/ui/components/viewer-scene-header.d.ts.map +1 -0
- package/dist/ui/components/viewer-scene-header.js +92 -0
- package/dist/ui/components/viewer-selection-manager.d.ts +7 -0
- package/dist/ui/components/viewer-selection-manager.d.ts.map +1 -0
- package/dist/ui/components/viewer-selection-manager.js +116 -0
- package/dist/ui/components/viewer-stage-modes.d.ts +7 -0
- package/dist/ui/components/viewer-stage-modes.d.ts.map +1 -0
- package/dist/ui/components/viewer-stage-modes.js +42 -0
- package/dist/ui/components/viewer-stage-switcher.d.ts +10 -0
- package/dist/ui/components/viewer-stage-switcher.d.ts.map +1 -0
- package/dist/ui/components/viewer-stage-switcher.js +16 -0
- package/dist/ui/components/viewer-stage.d.ts +25 -0
- package/dist/ui/components/viewer-stage.d.ts.map +1 -0
- package/dist/ui/components/viewer-stage.js +107 -0
- package/dist/ui/components/walkthrough-hud.d.ts +29 -0
- package/dist/ui/components/walkthrough-hud.d.ts.map +1 -0
- package/dist/ui/components/walkthrough-hud.js +55 -0
- package/dist/ui/floorplan/floorplan-camera-sync.d.ts +22 -0
- package/dist/ui/floorplan/floorplan-camera-sync.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-camera-sync.js +157 -0
- package/dist/ui/floorplan/floorplan-dimension-renderer.d.ts +61 -0
- package/dist/ui/floorplan/floorplan-dimension-renderer.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-dimension-renderer.js +280 -0
- package/dist/ui/floorplan/floorplan-geometry-renderer.d.ts +54 -0
- package/dist/ui/floorplan/floorplan-geometry-renderer.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-geometry-renderer.js +317 -0
- package/dist/ui/floorplan/floorplan-label-angle.d.ts +24 -0
- package/dist/ui/floorplan/floorplan-label-angle.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-label-angle.js +60 -0
- package/dist/ui/floorplan/floorplan-navigation-sync.d.ts +18 -0
- package/dist/ui/floorplan/floorplan-navigation-sync.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-navigation-sync.js +41 -0
- package/dist/ui/floorplan/floorplan-preview-geometry.d.ts +26 -0
- package/dist/ui/floorplan/floorplan-preview-geometry.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-preview-geometry.js +173 -0
- package/dist/ui/floorplan/floorplan-preview-navigation.d.ts +22 -0
- package/dist/ui/floorplan/floorplan-preview-navigation.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-preview-navigation.js +41 -0
- package/dist/ui/floorplan/floorplan-preview-visibility.d.ts +8 -0
- package/dist/ui/floorplan/floorplan-preview-visibility.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-preview-visibility.js +21 -0
- package/dist/ui/floorplan/floorplan-preview.d.ts +19 -0
- package/dist/ui/floorplan/floorplan-preview.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-preview.js +700 -0
- package/dist/ui/hooks/use-mobile.d.ts +2 -0
- package/dist/ui/hooks/use-mobile.d.ts.map +1 -0
- package/dist/ui/hooks/use-mobile.js +14 -0
- package/dist/ui/index.d.ts +49 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +48 -0
- package/dist/ui/lib/below-grade.d.ts +38 -0
- package/dist/ui/lib/below-grade.d.ts.map +1 -0
- package/dist/ui/lib/below-grade.js +102 -0
- package/dist/ui/lib/camera-pose.d.ts +19 -0
- package/dist/ui/lib/camera-pose.d.ts.map +1 -0
- package/dist/ui/lib/camera-pose.js +113 -0
- package/dist/ui/lib/cn.d.ts +3 -0
- package/dist/ui/lib/cn.d.ts.map +1 -0
- package/dist/ui/lib/cn.js +5 -0
- package/dist/ui/lib/level-name.d.ts +10 -0
- package/dist/ui/lib/level-name.d.ts.map +1 -0
- package/dist/ui/lib/level-name.js +33 -0
- package/dist/ui/lib/node-display-label.d.ts +8 -0
- package/dist/ui/lib/node-display-label.d.ts.map +1 -0
- package/dist/ui/lib/node-display-label.js +36 -0
- package/dist/ui/lib/room-area.d.ts +3 -0
- package/dist/ui/lib/room-area.d.ts.map +1 -0
- package/dist/ui/lib/room-area.js +8 -0
- package/dist/ui/lib/room-assembly-overlay.d.ts +46 -0
- package/dist/ui/lib/room-assembly-overlay.d.ts.map +1 -0
- package/dist/ui/lib/room-assembly-overlay.js +222 -0
- package/dist/ui/lib/room-name-messages.d.ts +28 -0
- package/dist/ui/lib/room-name-messages.d.ts.map +1 -0
- package/dist/ui/lib/room-name-messages.js +112 -0
- package/dist/ui/lib/room-selection.d.ts +58 -0
- package/dist/ui/lib/room-selection.d.ts.map +1 -0
- package/dist/ui/lib/room-selection.js +297 -0
- package/dist/ui/lib/scene-theme-name.d.ts +4 -0
- package/dist/ui/lib/scene-theme-name.d.ts.map +1 -0
- package/dist/ui/lib/scene-theme-name.js +22 -0
- package/dist/ui/lib/selection-modifiers.d.ts +20 -0
- package/dist/ui/lib/selection-modifiers.d.ts.map +1 -0
- package/dist/ui/lib/selection-modifiers.js +15 -0
- package/dist/ui/lib/viewer-selection.d.ts +132 -0
- package/dist/ui/lib/viewer-selection.d.ts.map +1 -0
- package/dist/ui/lib/viewer-selection.js +462 -0
- package/dist/ui/lib/zone-content.d.ts +6 -0
- package/dist/ui/lib/zone-content.d.ts.map +1 -0
- package/dist/ui/lib/zone-content.js +96 -0
- package/dist/ui/primitives/button.d.ts +11 -0
- package/dist/ui/primitives/button.d.ts.map +1 -0
- package/dist/ui/primitives/button.js +35 -0
- package/dist/ui/primitives/dropdown-menu.d.ts +26 -0
- package/dist/ui/primitives/dropdown-menu.d.ts.map +1 -0
- package/dist/ui/primitives/dropdown-menu.js +53 -0
- package/dist/ui/primitives/popover.d.ts +8 -0
- package/dist/ui/primitives/popover.d.ts.map +1 -0
- package/dist/ui/primitives/popover.js +17 -0
- package/dist/ui/primitives/switch.d.ts +5 -0
- package/dist/ui/primitives/switch.d.ts.map +1 -0
- package/dist/ui/primitives/switch.js +8 -0
- package/dist/ui/primitives/tooltip.d.ts +8 -0
- package/dist/ui/primitives/tooltip.d.ts.map +1 -0
- package/dist/ui/primitives/tooltip.js +17 -0
- package/dist/ui/store/camera-pose-store.d.ts +17 -0
- package/dist/ui/store/camera-pose-store.d.ts.map +1 -0
- package/dist/ui/store/camera-pose-store.js +15 -0
- package/dist/ui/store/navigation-sync-pose-store.d.ts +26 -0
- package/dist/ui/store/navigation-sync-pose-store.d.ts.map +1 -0
- package/dist/ui/store/navigation-sync-pose-store.js +16 -0
- package/dist/ui/store/use-follow-pascal.d.ts +30 -0
- package/dist/ui/store/use-follow-pascal.d.ts.map +1 -0
- package/dist/ui/store/use-follow-pascal.js +28 -0
- package/dist/ui/theme.css +339 -0
- package/package.json +34 -7
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { createElement as _createElement } from "react";
|
|
3
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { createContext, useContext } from 'react';
|
|
5
|
+
import { resolveFloorplanLabelAngle } from './floorplan-label-angle';
|
|
6
|
+
const EXTENSION_START_GAP = 0.075;
|
|
7
|
+
const TICK_HALF_LENGTH = 0.09;
|
|
8
|
+
const LABEL_FONT_SIZE = 0.15;
|
|
9
|
+
const LABEL_BASELINE_OFFSET = 0.12;
|
|
10
|
+
const LABEL_CHARACTER_WIDTH_RATIO = 0.62;
|
|
11
|
+
const LABEL_END_GAP = 0.075;
|
|
12
|
+
const DOCUMENT_EXTENSION_START_GAP_PT = 3;
|
|
13
|
+
const DOCUMENT_EXTENSION_OVERSHOOT_PT = 4;
|
|
14
|
+
const DOCUMENT_TICK_HALF_LENGTH_PT = 4.5;
|
|
15
|
+
const DOCUMENT_LABEL_FONT_SIZE_PT = 8;
|
|
16
|
+
const DOCUMENT_LABEL_BASELINE_OFFSET_PT = 5;
|
|
17
|
+
const DOCUMENT_LABEL_END_GAP_PT = 3;
|
|
18
|
+
const LINE_STROKE_WIDTH_PX = 0.9;
|
|
19
|
+
const TICK_STROKE_WIDTH_PX = 1.35;
|
|
20
|
+
const PDF_LINE_STROKE_WIDTH_PT = 0.5;
|
|
21
|
+
const PDF_TICK_STROKE_WIDTH_PT = 0.75;
|
|
22
|
+
const SQRT_ONE_HALF = Math.SQRT1_2;
|
|
23
|
+
/**
|
|
24
|
+
* Click-to-type dimensions (WS3).
|
|
25
|
+
*
|
|
26
|
+
* On screen, under an editing host (`FloorplanDimensionHitsProvider` set to
|
|
27
|
+
* true), the label plate carries an invisible hit rect plus the data the
|
|
28
|
+
* editing layer needs to drive geometry from a typed value. The editor's
|
|
29
|
+
* layer picks it up by DOM delegation, so every producer of `dimension` /
|
|
30
|
+
* `dimension-string` geometry — wall automatic dimensions, contextual
|
|
31
|
+
* dimensions, manual construction-dimension nodes — becomes editable without
|
|
32
|
+
* each one wiring up a callback. Read-only plans carry no hit rects.
|
|
33
|
+
*
|
|
34
|
+
* Witness points are the measured feature points in level-plan metres; the
|
|
35
|
+
* value is the length the label actually reads (dimension-line points when
|
|
36
|
+
* the producer supplied them, witness points otherwise).
|
|
37
|
+
*/
|
|
38
|
+
export const FLOORPLAN_DIMENSION_HIT_ATTRIBUTE = 'data-floorplan-dimension-hit';
|
|
39
|
+
const DimensionHitsContext = createContext(false);
|
|
40
|
+
/** Whether the dimension labels below it carry typeable hit rects; off unless a host sets it. */
|
|
41
|
+
export const FloorplanDimensionHitsProvider = DimensionHitsContext.Provider;
|
|
42
|
+
export function floorplanDimensionAnnotationPriority(offsetDistance) {
|
|
43
|
+
return 100 + Math.round(Math.abs(offsetDistance) * 100);
|
|
44
|
+
}
|
|
45
|
+
export function computeArchitecturalDimensionLayout(geometry, sceneRotationDeg, annotationUnitsPerPoint) {
|
|
46
|
+
const extensionStartGap = annotationUnitsPerPoint
|
|
47
|
+
? DOCUMENT_EXTENSION_START_GAP_PT * annotationUnitsPerPoint
|
|
48
|
+
: (geometry.extensionStartGap ?? EXTENSION_START_GAP);
|
|
49
|
+
const extensionOvershoot = annotationUnitsPerPoint
|
|
50
|
+
? DOCUMENT_EXTENSION_OVERSHOOT_PT * annotationUnitsPerPoint
|
|
51
|
+
: geometry.extensionOvershoot;
|
|
52
|
+
const tickHalfLength = annotationUnitsPerPoint
|
|
53
|
+
? DOCUMENT_TICK_HALF_LENGTH_PT * annotationUnitsPerPoint
|
|
54
|
+
: TICK_HALF_LENGTH;
|
|
55
|
+
const labelFontSize = annotationUnitsPerPoint
|
|
56
|
+
? DOCUMENT_LABEL_FONT_SIZE_PT * annotationUnitsPerPoint
|
|
57
|
+
: LABEL_FONT_SIZE;
|
|
58
|
+
const labelEndGap = annotationUnitsPerPoint
|
|
59
|
+
? DOCUMENT_LABEL_END_GAP_PT * annotationUnitsPerPoint
|
|
60
|
+
: LABEL_END_GAP;
|
|
61
|
+
const offsetX = geometry.offsetNormal[0] * geometry.offsetDistance;
|
|
62
|
+
const offsetY = geometry.offsetNormal[1] * geometry.offsetDistance;
|
|
63
|
+
const dimensionStart = geometry.dimensionStart ?? [
|
|
64
|
+
geometry.start[0] + offsetX,
|
|
65
|
+
geometry.start[1] + offsetY,
|
|
66
|
+
];
|
|
67
|
+
const dimensionEnd = geometry.dimensionEnd ?? [
|
|
68
|
+
geometry.end[0] + offsetX,
|
|
69
|
+
geometry.end[1] + offsetY,
|
|
70
|
+
];
|
|
71
|
+
const dx = dimensionEnd[0] - dimensionStart[0];
|
|
72
|
+
const dy = dimensionEnd[1] - dimensionStart[1];
|
|
73
|
+
const length = Math.hypot(dx, dy);
|
|
74
|
+
if (length < 1e-6)
|
|
75
|
+
return null;
|
|
76
|
+
const dirX = dx / length;
|
|
77
|
+
const dirY = dy / length;
|
|
78
|
+
const startOffsetDistance = dot(subtract(dimensionStart, geometry.start), geometry.offsetNormal);
|
|
79
|
+
const endOffsetDistance = dot(subtract(dimensionEnd, geometry.end), geometry.offsetNormal);
|
|
80
|
+
const startExtensionGap = Math.min(extensionStartGap, Math.max(0, startOffsetDistance - 0.01));
|
|
81
|
+
const endExtensionGap = Math.min(extensionStartGap, Math.max(0, endOffsetDistance - 0.01));
|
|
82
|
+
// A 45-degree architectural slash. Every terminator within one string uses
|
|
83
|
+
// this same vector instead of rotating independently around its endpoint.
|
|
84
|
+
const tickHalfVector = [
|
|
85
|
+
(dirX + dirY) * tickHalfLength * SQRT_ONE_HALF,
|
|
86
|
+
(dirY - dirX) * tickHalfLength * SQRT_ONE_HALF,
|
|
87
|
+
];
|
|
88
|
+
const labelWidth = Math.max(labelFontSize, geometry.text.length * labelFontSize * LABEL_CHARACTER_WIDTH_RATIO);
|
|
89
|
+
const labelPlacement = length >= labelWidth + labelEndGap * 2 ? 'inside' : 'outside-end';
|
|
90
|
+
const direction = [dirX, dirY];
|
|
91
|
+
const labelPoint = labelPlacement === 'inside'
|
|
92
|
+
? [
|
|
93
|
+
(dimensionStart[0] + dimensionEnd[0]) / 2,
|
|
94
|
+
(dimensionStart[1] + dimensionEnd[1]) / 2,
|
|
95
|
+
]
|
|
96
|
+
: addScaled(dimensionEnd, direction, labelEndGap + labelWidth / 2);
|
|
97
|
+
const dimensionLineEnd = labelPlacement === 'inside'
|
|
98
|
+
? dimensionEnd
|
|
99
|
+
: addScaled(dimensionEnd, direction, labelEndGap * 2 + labelWidth);
|
|
100
|
+
const outsideStartLabelPoint = labelPlacement === 'outside-end'
|
|
101
|
+
? addScaled(dimensionStart, direction, -(labelEndGap + labelWidth / 2))
|
|
102
|
+
: undefined;
|
|
103
|
+
const outsideStartDimensionLineStart = labelPlacement === 'outside-end'
|
|
104
|
+
? addScaled(dimensionStart, direction, -(labelEndGap * 2 + labelWidth))
|
|
105
|
+
: undefined;
|
|
106
|
+
return {
|
|
107
|
+
dimensionStart,
|
|
108
|
+
dimensionEnd,
|
|
109
|
+
dimensionLineStart: dimensionStart,
|
|
110
|
+
dimensionLineEnd,
|
|
111
|
+
extensionStart: addScaled(geometry.start, geometry.offsetNormal, startExtensionGap),
|
|
112
|
+
extensionEnd: addScaled(geometry.end, geometry.offsetNormal, endExtensionGap),
|
|
113
|
+
extensionStartTip: addScaled(dimensionStart, geometry.offsetNormal, extensionOvershoot),
|
|
114
|
+
extensionEndTip: addScaled(dimensionEnd, geometry.offsetNormal, extensionOvershoot),
|
|
115
|
+
tickHalfVector,
|
|
116
|
+
labelPoint,
|
|
117
|
+
labelAngleDeg: resolveFloorplanLabelAngle(Math.atan2(dy, dx), sceneRotationDeg),
|
|
118
|
+
labelPlacement,
|
|
119
|
+
outsideStartLabelPoint,
|
|
120
|
+
outsideStartDimensionLineStart,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function subtract(left, right) {
|
|
124
|
+
return [left[0] - right[0], left[1] - right[1]];
|
|
125
|
+
}
|
|
126
|
+
function dot(left, right) {
|
|
127
|
+
return left[0] * right[0] + left[1] * right[1];
|
|
128
|
+
}
|
|
129
|
+
function addScaled(point, direction, distance) {
|
|
130
|
+
return [point[0] + direction[0] * distance, point[1] + direction[1] * distance];
|
|
131
|
+
}
|
|
132
|
+
export function FloorplanDimensionRenderer({ geometry, sceneRotationDeg = 0, stroke = geometry.stroke ?? '#334155', annotationUnitsPerPoint, renderMode = 'screen', onSelect, }) {
|
|
133
|
+
const layout = computeArchitecturalDimensionLayout(geometry, sceneRotationDeg, annotationUnitsPerPoint);
|
|
134
|
+
if (!layout)
|
|
135
|
+
return null;
|
|
136
|
+
const labelFontSize = annotationUnitsPerPoint
|
|
137
|
+
? DOCUMENT_LABEL_FONT_SIZE_PT * annotationUnitsPerPoint
|
|
138
|
+
: LABEL_FONT_SIZE;
|
|
139
|
+
const labelBaselineOffset = annotationUnitsPerPoint
|
|
140
|
+
? DOCUMENT_LABEL_BASELINE_OFFSET_PT * annotationUnitsPerPoint
|
|
141
|
+
: LABEL_BASELINE_OFFSET;
|
|
142
|
+
const labelY = geometry.textPosition === 'centered' ? labelFontSize * 0.35 : -labelBaselineOffset;
|
|
143
|
+
const lineProps = {
|
|
144
|
+
stroke,
|
|
145
|
+
strokeLinecap: 'butt',
|
|
146
|
+
strokeWidth: renderMode === 'pdf' ? PDF_LINE_STROKE_WIDTH_PT : LINE_STROKE_WIDTH_PX,
|
|
147
|
+
vectorEffect: 'non-scaling-stroke',
|
|
148
|
+
};
|
|
149
|
+
const tickStrokeWidth = renderMode === 'pdf' ? PDF_TICK_STROKE_WIDTH_PT : TICK_STROKE_WIDTH_PX;
|
|
150
|
+
const terminator = geometry.terminator ?? 'architectural-tick';
|
|
151
|
+
const labelTransform = `translate(${layout.labelPoint[0]} ${layout.labelPoint[1]}) rotate(${layout.labelAngleDeg})`;
|
|
152
|
+
const outsideStartLocalShift = layout.outsideStartLabelPoint
|
|
153
|
+
? rotateVector(subtract(layout.outsideStartLabelPoint, layout.labelPoint), (-layout.labelAngleDeg * Math.PI) / 180)
|
|
154
|
+
: undefined;
|
|
155
|
+
return (_jsxs("g", { "data-floorplan-dimension": "", onClick: onSelect
|
|
156
|
+
? (event) => {
|
|
157
|
+
event.stopPropagation();
|
|
158
|
+
onSelect();
|
|
159
|
+
}
|
|
160
|
+
: undefined, pointerEvents: onSelect ? 'auto' : 'none', children: [_jsx("line", { ...lineProps, x1: layout.extensionStart[0], x2: layout.extensionStartTip[0], y1: layout.extensionStart[1], y2: layout.extensionStartTip[1] }), _jsx("line", { ...lineProps, x1: layout.extensionEnd[0], x2: layout.extensionEndTip[0], y1: layout.extensionEnd[1], y2: layout.extensionEndTip[1] }), _jsx("line", { ...lineProps, "data-floorplan-dimension-default-x1": layout.dimensionLineStart[0], "data-floorplan-dimension-default-x2": layout.dimensionLineEnd[0], "data-floorplan-dimension-default-y1": layout.dimensionLineStart[1], "data-floorplan-dimension-default-y2": layout.dimensionLineEnd[1], "data-floorplan-dimension-line": "", "data-floorplan-dimension-outside-start-x1": layout.outsideStartDimensionLineStart?.[0], "data-floorplan-dimension-outside-start-x2": layout.dimensionEnd[0], "data-floorplan-dimension-outside-start-y1": layout.outsideStartDimensionLineStart?.[1], "data-floorplan-dimension-outside-start-y2": layout.dimensionEnd[1], x1: layout.dimensionLineStart[0], x2: layout.dimensionLineEnd[0], y1: layout.dimensionLineStart[1], y2: layout.dimensionLineEnd[1] }), renderTerminator(terminator, layout.dimensionStart, layout.dimensionEnd, layout, lineProps, tickStrokeWidth), renderTerminator(terminator, layout.dimensionEnd, layout.dimensionStart, layout, lineProps, tickStrokeWidth), layout.labelPlacement === 'outside-end' && annotationUnitsPerPoint !== undefined ? (_jsx("line", { ...lineProps, "data-floorplan-dimension-leader": "", visibility: "hidden", x1: layout.dimensionEnd[0], x2: layout.labelPoint[0], y1: layout.dimensionEnd[1], y2: layout.labelPoint[1] })) : null, _jsx("g", { "data-floorplan-annotation-angle-radians": Math.atan2(geometry.end[1] - geometry.start[1], geometry.end[0] - geometry.start[0]), "data-floorplan-annotation-default-transform": labelTransform, "data-floorplan-annotation-label": "", "data-floorplan-annotation-priority": floorplanDimensionAnnotationPriority(geometry.offsetDistance), "data-floorplan-annotation-transform-before-rotation": `translate(${layout.labelPoint[0]} ${layout.labelPoint[1]})`, "data-floorplan-dimension-label-placement": layout.labelPlacement, "data-floorplan-dimension-outside-start-local-x": outsideStartLocalShift?.[0], "data-floorplan-dimension-outside-start-local-y": outsideStartLocalShift?.[1], "data-floorplan-dimension-start-x": layout.dimensionStart[0], "data-floorplan-dimension-start-y": layout.dimensionStart[1], "data-floorplan-dimension-end-x": layout.dimensionEnd[0], "data-floorplan-dimension-end-y": layout.dimensionEnd[1], "data-floorplan-dimension-text": geometry.text, "data-floorplan-dimension-value": dimensionLabelValue(layout), "data-floorplan-dimension-witness-start-x": geometry.start[0], "data-floorplan-dimension-witness-start-y": geometry.start[1], "data-floorplan-dimension-witness-end-x": geometry.end[0], "data-floorplan-dimension-witness-end-y": geometry.end[1], transform: labelTransform, children: _jsx(DimensionLabel, { fontSize: labelFontSize,
|
|
161
|
+
// `overridden` is declared on the geometry union in
|
|
162
|
+
// packages/core/src/registry/types.ts; the cast keeps this file
|
|
163
|
+
// compiling against a core dist built before that field landed.
|
|
164
|
+
overridden: geometry.overridden === true, renderMode: renderMode, stroke: stroke, text: geometry.text, y: labelY }) })] }));
|
|
165
|
+
}
|
|
166
|
+
export function FloorplanDimensionStringRenderer({ geometry, sceneRotationDeg = 0, stroke = geometry.stroke ?? '#334155', annotationUnitsPerPoint, renderMode = 'screen', }) {
|
|
167
|
+
const segmentLayouts = geometry.segments.flatMap((segment, index) => {
|
|
168
|
+
const segmentGeometry = {
|
|
169
|
+
kind: 'dimension',
|
|
170
|
+
start: segment.start,
|
|
171
|
+
end: segment.end,
|
|
172
|
+
dimensionStart: segment.dimensionStart,
|
|
173
|
+
dimensionEnd: segment.dimensionEnd,
|
|
174
|
+
offsetNormal: geometry.offsetNormal,
|
|
175
|
+
offsetDistance: geometry.offsetDistance,
|
|
176
|
+
extensionOvershoot: geometry.extensionOvershoot,
|
|
177
|
+
extensionStartGap: geometry.extensionStartGap,
|
|
178
|
+
terminator: geometry.terminator,
|
|
179
|
+
textPosition: geometry.textPosition,
|
|
180
|
+
text: segment.text,
|
|
181
|
+
stroke: geometry.stroke,
|
|
182
|
+
};
|
|
183
|
+
const layout = computeArchitecturalDimensionLayout(segmentGeometry, sceneRotationDeg, annotationUnitsPerPoint);
|
|
184
|
+
return layout ? [{ index, layout, segment: segmentGeometry }] : [];
|
|
185
|
+
});
|
|
186
|
+
if (segmentLayouts.length === 0)
|
|
187
|
+
return null;
|
|
188
|
+
const labelFontSize = annotationUnitsPerPoint
|
|
189
|
+
? DOCUMENT_LABEL_FONT_SIZE_PT * annotationUnitsPerPoint
|
|
190
|
+
: LABEL_FONT_SIZE;
|
|
191
|
+
const labelBaselineOffset = annotationUnitsPerPoint
|
|
192
|
+
? DOCUMENT_LABEL_BASELINE_OFFSET_PT * annotationUnitsPerPoint
|
|
193
|
+
: LABEL_BASELINE_OFFSET;
|
|
194
|
+
const labelY = geometry.textPosition === 'centered' ? labelFontSize * 0.35 : -labelBaselineOffset;
|
|
195
|
+
const lineProps = {
|
|
196
|
+
stroke,
|
|
197
|
+
strokeLinecap: 'butt',
|
|
198
|
+
strokeWidth: renderMode === 'pdf' ? PDF_LINE_STROKE_WIDTH_PT : LINE_STROKE_WIDTH_PX,
|
|
199
|
+
vectorEffect: 'non-scaling-stroke',
|
|
200
|
+
};
|
|
201
|
+
const tickStrokeWidth = renderMode === 'pdf' ? PDF_TICK_STROKE_WIDTH_PT : TICK_STROKE_WIDTH_PX;
|
|
202
|
+
const extensionLines = new Map();
|
|
203
|
+
const ticks = new Map();
|
|
204
|
+
for (const { layout } of segmentLayouts) {
|
|
205
|
+
extensionLines.set(pointKey(layout.dimensionStart), {
|
|
206
|
+
start: layout.extensionStart,
|
|
207
|
+
tip: layout.extensionStartTip,
|
|
208
|
+
});
|
|
209
|
+
extensionLines.set(pointKey(layout.dimensionEnd), {
|
|
210
|
+
start: layout.extensionEnd,
|
|
211
|
+
tip: layout.extensionEndTip,
|
|
212
|
+
});
|
|
213
|
+
ticks.set(pointKey(layout.dimensionStart), {
|
|
214
|
+
point: layout.dimensionStart,
|
|
215
|
+
toward: layout.dimensionEnd,
|
|
216
|
+
tickHalfVector: layout.tickHalfVector,
|
|
217
|
+
});
|
|
218
|
+
ticks.set(pointKey(layout.dimensionEnd), {
|
|
219
|
+
point: layout.dimensionEnd,
|
|
220
|
+
toward: layout.dimensionStart,
|
|
221
|
+
tickHalfVector: layout.tickHalfVector,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
const terminator = geometry.terminator ?? 'architectural-tick';
|
|
225
|
+
return (_jsxs("g", { "data-floorplan-dimension-string": "", pointerEvents: "none", children: [[...extensionLines.values()].map((line, index) => (_createElement("line", { ...lineProps, key: `extension-${index}`, x1: line.start[0], x2: line.tip[0], y1: line.start[1], y2: line.tip[1] }))), segmentLayouts.map(({ index, layout }) => (_createElement("line", { ...lineProps, "data-floorplan-dimension-default-x1": layout.dimensionLineStart[0], "data-floorplan-dimension-default-x2": layout.dimensionLineEnd[0], "data-floorplan-dimension-default-y1": layout.dimensionLineStart[1], "data-floorplan-dimension-default-y2": layout.dimensionLineEnd[1], "data-floorplan-dimension-line": "", "data-floorplan-dimension-outside-start-x1": layout.outsideStartDimensionLineStart?.[0], "data-floorplan-dimension-outside-start-x2": layout.dimensionEnd[0], "data-floorplan-dimension-outside-start-y1": layout.outsideStartDimensionLineStart?.[1], "data-floorplan-dimension-outside-start-y2": layout.dimensionEnd[1], key: `dimension-line-${index}`, x1: layout.dimensionLineStart[0], x2: layout.dimensionLineEnd[0], y1: layout.dimensionLineStart[1], y2: layout.dimensionLineEnd[1] }))), [...ticks.values()].map(({ point, toward, tickHalfVector }, index) => renderTerminator(terminator, point, toward, { tickHalfVector }, lineProps, tickStrokeWidth, `tick-${index}`)), segmentLayouts.map(({ index, layout, segment }) => {
|
|
226
|
+
const labelTransform = `translate(${layout.labelPoint[0]} ${layout.labelPoint[1]}) rotate(${layout.labelAngleDeg})`;
|
|
227
|
+
const outsideStartLocalShift = layout.outsideStartLabelPoint
|
|
228
|
+
? rotateVector(subtract(layout.outsideStartLabelPoint, layout.labelPoint), (-layout.labelAngleDeg * Math.PI) / 180)
|
|
229
|
+
: undefined;
|
|
230
|
+
return (_jsxs("g", { children: [layout.labelPlacement === 'outside-end' && annotationUnitsPerPoint !== undefined ? (_jsx("line", { ...lineProps, "data-floorplan-dimension-leader": "", visibility: "hidden", x1: layout.dimensionEnd[0], x2: layout.labelPoint[0], y1: layout.dimensionEnd[1], y2: layout.labelPoint[1] })) : null, _jsx("g", { "data-floorplan-annotation-angle-radians": Math.atan2(segment.end[1] - segment.start[1], segment.end[0] - segment.start[0]), "data-floorplan-annotation-default-transform": labelTransform, "data-floorplan-annotation-label": "", "data-floorplan-annotation-priority": floorplanDimensionAnnotationPriority(geometry.offsetDistance), "data-floorplan-annotation-transform-before-rotation": `translate(${layout.labelPoint[0]} ${layout.labelPoint[1]})`, "data-floorplan-dimension-label-placement": layout.labelPlacement, "data-floorplan-dimension-outside-start-local-x": outsideStartLocalShift?.[0], "data-floorplan-dimension-outside-start-local-y": outsideStartLocalShift?.[1], "data-floorplan-dimension-start-x": layout.dimensionStart[0], "data-floorplan-dimension-start-y": layout.dimensionStart[1], "data-floorplan-dimension-end-x": layout.dimensionEnd[0], "data-floorplan-dimension-end-y": layout.dimensionEnd[1], "data-floorplan-dimension-text": segment.text, "data-floorplan-dimension-value": dimensionLabelValue(layout), "data-floorplan-dimension-witness-start-x": segment.start[0], "data-floorplan-dimension-witness-start-y": segment.start[1], "data-floorplan-dimension-witness-end-x": segment.end[0], "data-floorplan-dimension-witness-end-y": segment.end[1], transform: labelTransform, children: _jsx(DimensionLabel, { fontSize: labelFontSize, renderMode: renderMode, stroke: stroke, text: segment.text, y: labelY }) })] }, `label-${index}`));
|
|
231
|
+
})] }));
|
|
232
|
+
}
|
|
233
|
+
/** The length the label reads — the dimension-line span, offset cancels out. */
|
|
234
|
+
function dimensionLabelValue(layout) {
|
|
235
|
+
return Math.hypot(layout.dimensionEnd[0] - layout.dimensionStart[0], layout.dimensionEnd[1] - layout.dimensionStart[1]);
|
|
236
|
+
}
|
|
237
|
+
function rotateVector(vector, radians) {
|
|
238
|
+
const cosine = Math.cos(radians);
|
|
239
|
+
const sine = Math.sin(radians);
|
|
240
|
+
return [vector[0] * cosine - vector[1] * sine, vector[0] * sine + vector[1] * cosine];
|
|
241
|
+
}
|
|
242
|
+
function DimensionLabel({ text, y, fontSize, stroke, renderMode, overridden = false, }) {
|
|
243
|
+
const width = Math.max(fontSize, text.length * fontSize * LABEL_CHARACTER_WIDTH_RATIO);
|
|
244
|
+
const plateWidth = width + fontSize * 0.5;
|
|
245
|
+
const plateHeight = fontSize * 1.2;
|
|
246
|
+
const plateY = y - fontSize * 0.82;
|
|
247
|
+
const editable = useContext(DimensionHitsContext);
|
|
248
|
+
return (_jsxs(_Fragment, { children: [renderMode === 'pdf' ? (_jsx("rect", { "data-floorplan-dimension-label-plate": "", fill: "#ffffff", height: plateHeight, rx: fontSize * 0.12, ry: fontSize * 0.12, width: plateWidth, x: -plateWidth / 2, y: plateY })) : null, _jsx("text", { fill: stroke, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontSize: fontSize, fontWeight: 500, paintOrder: renderMode === 'pdf' ? undefined : 'stroke', stroke: renderMode === 'pdf' ? undefined : '#ffffff', strokeLinejoin: renderMode === 'pdf' ? undefined : 'round', strokeWidth: renderMode === 'pdf' ? undefined : 3, textAnchor: "middle", vectorEffect: renderMode === 'pdf' ? undefined : 'non-scaling-stroke', x: 0, y: y, children: text }), overridden && renderMode !== 'pdf' ? (_jsx("text", { fill: stroke, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontSize: fontSize * 0.62, opacity: 0.75, paintOrder: "stroke", stroke: "#ffffff", strokeLinejoin: "round", strokeWidth: 2, textAnchor: "middle", vectorEffect: "non-scaling-stroke", x: 0, y: y + fontSize * 0.86, children: "override" })) : null, renderMode === 'pdf' || !editable ? null : (_jsx("rect", { [FLOORPLAN_DIMENSION_HIT_ATTRIBUTE]: '', cursor: "text", fill: "transparent", height: plateHeight, pointerEvents: "all", width: plateWidth, x: -plateWidth / 2, y: plateY }))] }));
|
|
249
|
+
}
|
|
250
|
+
function renderTerminator(terminator, point, toward, layout, lineProps, tickStrokeWidth, key) {
|
|
251
|
+
const direction = normalized(point, toward);
|
|
252
|
+
if (!direction)
|
|
253
|
+
return null;
|
|
254
|
+
const tickHalfLength = Math.hypot(layout.tickHalfVector[0], layout.tickHalfVector[1]);
|
|
255
|
+
if (terminator === 'dot') {
|
|
256
|
+
return (_jsx("circle", { fill: lineProps.stroke, r: tickHalfLength * 0.45, vectorEffect: "non-scaling-stroke", cx: point[0], cy: point[1] }, key));
|
|
257
|
+
}
|
|
258
|
+
if (terminator === 'filled-arrow' || terminator === 'open-arrow') {
|
|
259
|
+
const base = addScaled(point, direction, tickHalfLength * 1.7);
|
|
260
|
+
const normal = [-direction[1], direction[0]];
|
|
261
|
+
const wing = tickHalfLength * 0.65;
|
|
262
|
+
const left = [base[0] + normal[0] * wing, base[1] + normal[1] * wing];
|
|
263
|
+
const right = [base[0] - normal[0] * wing, base[1] - normal[1] * wing];
|
|
264
|
+
if (terminator === 'filled-arrow') {
|
|
265
|
+
return (_jsx("polygon", { fill: lineProps.stroke, points: `${point[0]},${point[1]} ${left[0]},${left[1]} ${right[0]},${right[1]}`, vectorEffect: "non-scaling-stroke" }, key));
|
|
266
|
+
}
|
|
267
|
+
return (_jsxs("g", { children: [_jsx("line", { ...lineProps, strokeWidth: tickStrokeWidth, x1: point[0], x2: left[0], y1: point[1], y2: left[1] }), _jsx("line", { ...lineProps, strokeWidth: tickStrokeWidth, x1: point[0], x2: right[0], y1: point[1], y2: right[1] })] }, key));
|
|
268
|
+
}
|
|
269
|
+
const [tickX, tickY] = layout.tickHalfVector;
|
|
270
|
+
return (_createElement("line", { ...lineProps, key: key, strokeWidth: tickStrokeWidth, x1: point[0] - tickX, x2: point[0] + tickX, y1: point[1] - tickY, y2: point[1] + tickY }));
|
|
271
|
+
}
|
|
272
|
+
function normalized(start, end) {
|
|
273
|
+
const dx = end[0] - start[0];
|
|
274
|
+
const dy = end[1] - start[1];
|
|
275
|
+
const magnitude = Math.hypot(dx, dy);
|
|
276
|
+
return magnitude <= 1e-6 ? null : [dx / magnitude, dy / magnitude];
|
|
277
|
+
}
|
|
278
|
+
function pointKey(point) {
|
|
279
|
+
return `${point[0].toFixed(6)},${point[1].toFixed(6)}`;
|
|
280
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type FloorplanGeometry } from '@pascal-app/core';
|
|
2
|
+
type FloorplanRenderMode = 'screen' | 'pdf';
|
|
3
|
+
/**
|
|
4
|
+
* Pure-data → SVG converter. Walks a `FloorplanGeometry` tree returned by
|
|
5
|
+
* `def.floorplan(node, ctx)` and emits the matching React-SVG nodes.
|
|
6
|
+
*
|
|
7
|
+
* Coordinates are level-local meters. The wrapping floor-plan panel
|
|
8
|
+
* applies the world→SVG transform via its viewBox, so kinds emit
|
|
9
|
+
* geometry in the same units they reason about in 3D.
|
|
10
|
+
*
|
|
11
|
+
* Group transforms compose: `transform={translate(x y) rotate(deg)}`.
|
|
12
|
+
* Rotations are radians at the data layer (consistent with three.js
|
|
13
|
+
* conventions used by `def.geometry`) and converted to degrees for SVG
|
|
14
|
+
* here — kinds never touch units.
|
|
15
|
+
*
|
|
16
|
+
* Styling props map straight onto SVG attributes. Builders that need
|
|
17
|
+
* theme colors should declare them inline or expose them as registry
|
|
18
|
+
* tokens later (deferred until a real need surfaces — AI-authored kinds
|
|
19
|
+
* can pick safe defaults today).
|
|
20
|
+
*/
|
|
21
|
+
export declare const FloorplanGeometryRenderer: import("react").MemoExoticComponent<({ geometry, pointerEventsOverride, sceneRotationDeg, annotationUnitsPerPoint, screenUnitsPerPixel, renderMode, }: {
|
|
22
|
+
geometry: FloorplanGeometry;
|
|
23
|
+
pointerEventsOverride?: string;
|
|
24
|
+
sceneRotationDeg?: number;
|
|
25
|
+
annotationUnitsPerPoint?: number;
|
|
26
|
+
screenUnitsPerPixel?: number;
|
|
27
|
+
renderMode?: FloorplanRenderMode;
|
|
28
|
+
}) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | null>;
|
|
29
|
+
export declare function resolveDocumentFloorplanAnnotationStyle(geometry: FloorplanGeometry & {
|
|
30
|
+
kind: Exclude<FloorplanGeometry['kind'], 'group'>;
|
|
31
|
+
}, annotationUnitsPerPoint?: number): {
|
|
32
|
+
fill?: string;
|
|
33
|
+
stroke?: string;
|
|
34
|
+
strokeWidth?: number;
|
|
35
|
+
vectorEffect?: 'non-scaling-stroke';
|
|
36
|
+
};
|
|
37
|
+
export declare function documentRectGeometryAttrs(geometry: Extract<FloorplanGeometry, {
|
|
38
|
+
kind: 'rect';
|
|
39
|
+
}>, annotationUnitsPerPoint?: number): {
|
|
40
|
+
x: number;
|
|
41
|
+
y: number;
|
|
42
|
+
width: number;
|
|
43
|
+
height: number;
|
|
44
|
+
rx: number | undefined;
|
|
45
|
+
ry: number | undefined;
|
|
46
|
+
};
|
|
47
|
+
export declare function documentCircleGeometryAttrs(geometry: Extract<FloorplanGeometry, {
|
|
48
|
+
kind: 'circle';
|
|
49
|
+
}>, annotationUnitsPerPoint?: number): {
|
|
50
|
+
r: number;
|
|
51
|
+
};
|
|
52
|
+
export declare function resolveDocumentAnnotationGroupChildren(children: FloorplanGeometry[], annotationUnitsPerPoint?: number): FloorplanGeometry[];
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=floorplan-geometry-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floorplan-geometry-renderer.d.ts","sourceRoot":"","sources":["../../../src/ui/floorplan/floorplan-geometry-renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,iBAAiB,EAKvB,MAAM,kBAAkB,CAAA;AAmBzB,KAAK,mBAAmB,GAAG,QAAQ,GAAG,KAAK,CAAA;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,yBAAyB,yJAOnC;IACD,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,UAAU,CAAC,EAAE,mBAAmB,CAAA;CACjC,uGAUC,CAAA;AAyDF,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,iBAAiB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;CAAE,EACnF,uBAAuB,CAAC,EAAE,MAAM,GAC/B;IACD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,oBAAoB,CAAA;CACpC,CA6BA;AAiCD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACtD,uBAAuB,CAAC,EAAE,MAAM;;;;;;;EAyBjC;AAMD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,EACxD,uBAAuB,CAAC,EAAE,MAAM;;EAMjC;AAMD,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,uBAAuB,CAAC,EAAE,MAAM,GAC/B,iBAAiB,EAAE,CA0BrB"}
|