@vertexvis/viewer 0.24.3 → 0.24.4-canary.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/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +26 -0
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
- package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js +26 -0
- package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js.map +1 -1
- package/dist/collection/lib/canvases/mapper.js +1 -1
- package/dist/collection/lib/canvases/mapper.js.map +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +26 -0
- package/dist/components/vertex-viewer-pin-tool.js.map +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/components/vertex-viewer.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js +26 -0
- package/dist/esm/vertex-viewer-pin-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer.entry.js +1 -1
- package/dist/esm/vertex-viewer.entry.js.map +1 -1
- package/dist/types/components/viewer-pin-tool/viewer-pin-tool.d.ts +2 -0
- package/dist/viewer/{p-ac6de78d.entry.js → p-70dec719.entry.js} +2 -2
- package/dist/viewer/{p-ac6de78d.entry.js.map → p-70dec719.entry.js.map} +1 -1
- package/dist/viewer/{p-856aecc5.entry.js → p-c6a12963.entry.js} +2 -2
- package/dist/viewer/p-c6a12963.entry.js.map +1 -0
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/dist/viewer/p-856aecc5.entry.js.map +0 -1
|
@@ -239,6 +239,12 @@ const ViewerPinTool = class {
|
|
|
239
239
|
var _a;
|
|
240
240
|
(_a = this.pinController) === null || _a === void 0 ? void 0 : _a.setToolMode(this.mode);
|
|
241
241
|
this.setupInteractionHandler();
|
|
242
|
+
if (this.mode === 'edit') {
|
|
243
|
+
this.setFeatureMaps();
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
this.resetFeatureMaps();
|
|
247
|
+
}
|
|
242
248
|
}
|
|
243
249
|
/**
|
|
244
250
|
* @ignore
|
|
@@ -270,9 +276,11 @@ const ViewerPinTool = class {
|
|
|
270
276
|
watchPinsChange() {
|
|
271
277
|
if (this.pins.length > 0) {
|
|
272
278
|
this.setDepthBuffers();
|
|
279
|
+
this.setFeatureMaps();
|
|
273
280
|
}
|
|
274
281
|
else {
|
|
275
282
|
this.resetDepthBuffers();
|
|
283
|
+
this.resetFeatureMaps();
|
|
276
284
|
}
|
|
277
285
|
}
|
|
278
286
|
/**
|
|
@@ -281,6 +289,7 @@ const ViewerPinTool = class {
|
|
|
281
289
|
connectedCallback() {
|
|
282
290
|
this.setupInteractionHandler();
|
|
283
291
|
this.setDepthBuffers();
|
|
292
|
+
this.setFeatureMaps();
|
|
284
293
|
}
|
|
285
294
|
/**
|
|
286
295
|
* @ignore
|
|
@@ -290,6 +299,7 @@ const ViewerPinTool = class {
|
|
|
290
299
|
this.setupController();
|
|
291
300
|
this.setupInteractionHandler();
|
|
292
301
|
this.setDepthBuffers();
|
|
302
|
+
this.setFeatureMaps();
|
|
293
303
|
this.pinModel.onEntitiesChanged((entities) => {
|
|
294
304
|
this.pins = entities;
|
|
295
305
|
});
|
|
@@ -309,6 +319,7 @@ const ViewerPinTool = class {
|
|
|
309
319
|
this.clearInteractionHandler();
|
|
310
320
|
this.clearModelListeners();
|
|
311
321
|
this.resetDepthBuffers();
|
|
322
|
+
this.resetFeatureMaps();
|
|
312
323
|
}
|
|
313
324
|
/**
|
|
314
325
|
* @ignore
|
|
@@ -316,6 +327,7 @@ const ViewerPinTool = class {
|
|
|
316
327
|
handleViewerChanged(newViewer, oldViewer) {
|
|
317
328
|
this.setupInteractionHandler();
|
|
318
329
|
this.setDepthBuffers();
|
|
330
|
+
this.setFeatureMaps();
|
|
319
331
|
if (oldViewer != null) {
|
|
320
332
|
oldViewer.removeEventListener('frameDrawn', this.handleSetProjectionMatrix);
|
|
321
333
|
}
|
|
@@ -382,6 +394,20 @@ const ViewerPinTool = class {
|
|
|
382
394
|
this.stateMap.shouldClearDepthBuffers = undefined;
|
|
383
395
|
}
|
|
384
396
|
}
|
|
397
|
+
setFeatureMaps() {
|
|
398
|
+
if ((this.pins.length > 0 || this.mode === 'edit') &&
|
|
399
|
+
this.viewer != null &&
|
|
400
|
+
this.viewer.featureMaps == null) {
|
|
401
|
+
this.stateMap.shouldClearFeatureMaps = true;
|
|
402
|
+
this.viewer.featureMaps = 'final';
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
resetFeatureMaps() {
|
|
406
|
+
if (this.stateMap.shouldClearFeatureMaps && this.viewer != null) {
|
|
407
|
+
this.viewer.featureMaps = undefined;
|
|
408
|
+
this.stateMap.shouldClearFeatureMaps = undefined;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
385
411
|
get hostEl() { return index.getElement(this); }
|
|
386
412
|
static get watchers() { return {
|
|
387
413
|
"mode": ["watchModeChange"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"vertex-viewer-pin-tool.entry.cjs.js","mappings":"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","names":["ElementRectObserver","EntityType","getMouseClientPosition","Point","UUID","translatePointToRelative","pinCursor","labelPinCursor","PinModel","h","Host","PinController","getMarkupBoundingClientRect"],"sources":["./src/lib/pins/interactions.ts","./src/components/viewer-pin-tool/viewer-pin-tool.css?tag=vertex-viewer-pin-tool&encapsulation=shadow","./src/components/viewer-pin-tool/viewer-pin-tool.tsx"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Disposable, UUID } from '@vertexvis/utils';\n\nimport { translatePointToRelative } from '../../components/viewer-pin-tool/utils';\nimport { Cursor, labelPinCursor, pinCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport { InteractionApi, InteractionHandler } from '../interactions';\nimport { EntityType } from '../types/entities';\nimport { Draggable, PinController } from './controller';\nimport { Pin } from './model';\n\nexport class PinsInteractionHandler implements InteractionHandler {\n private controller: PinController;\n private element?: HTMLElement;\n private api?: InteractionApi;\n\n private cursor?: Disposable;\n\n private xOffset?: number;\n private yOffset?: number;\n\n private rectObserver = new ElementRectObserver();\n\n private droppableSurfaces: EntityType[] = [\n EntityType.PRECISE_SURFACE,\n EntityType.IMPRECISE_SURFACE,\n EntityType.GENERIC_GEOMETRY,\n ];\n\n private get elementRect(): DOMRect | undefined {\n return this.rectObserver.rect;\n }\n\n public constructor(\n controller: PinController,\n xOffset: number,\n yOffset: number\n ) {\n this.controller = controller;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n this.rectObserver.observe(element);\n\n element.addEventListener('pointermove', this.handlePointerMove);\n element.addEventListener('pointerdown', this.handlePointerDown);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n public dispose(): void {\n this.rectObserver.disconnect();\n this.clearCursor();\n this.element?.removeEventListener('pointermove', this.handlePointerMove);\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n window.removeEventListener('pointerup', this.handlePointerUp);\n\n this.element = undefined;\n this.api = undefined;\n }\n\n public async getWorldPositionForPoint(\n pt: Point.Point\n ): Promise<Vector3.Vector3 | undefined> {\n return this.ifInitialized(async ({ api }) => {\n const vector3 = await api.getWorldPointFromViewport(pt);\n\n return vector3;\n });\n }\n\n public async handlePlacePin(\n pt: Point.Point,\n existingPin?: Pin\n ): Promise<void> {\n this.ifInitialized(async ({ api }) => {\n const [hit] = await api.hitItems(pt);\n\n if (hit?.hitPoint != null && this.elementRect != null) {\n if (\n hit?.hitPoint != null &&\n hit?.hitPoint.x != null &&\n hit?.hitPoint.y != null &&\n hit?.hitPoint.z != null\n ) {\n const pinId = existingPin != null ? existingPin.id : UUID.create();\n\n const attributes =\n this.controller.getStyleAttributes() != null\n ? {\n style: this.controller.getStyleAttributes(),\n }\n : undefined;\n\n switch (this.controller.getToolType()) {\n case 'pin-icon':\n this.controller.setPin({\n type: 'icon',\n id: pinId,\n worldPosition: {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n partId: hit?.itemId?.hex ?? undefined,\n attributes,\n });\n break;\n case 'pin-text':\n const isNewPin = existingPin == null;\n const relativePoint = translatePointToRelative(\n pt,\n this.elementRect,\n isNewPin,\n this.xOffset,\n this.yOffset\n );\n this.controller.setPin({\n type: 'text',\n id: pinId,\n worldPosition: {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n partId: hit?.itemId?.hex ?? undefined,\n label: {\n point: relativePoint,\n },\n attributes,\n });\n this.controller.setSelectedPinId(pinId);\n break;\n }\n }\n } else {\n this.controller.setSelectedPinId();\n }\n });\n }\n\n private handlePointerMove = async (event: PointerEvent): Promise<void> => {\n const isDroppableSurface = await this.isDroppableSurface(event);\n const draggable = this.controller.getDraggable();\n if (draggable != null && isDroppableSurface) {\n this.handleDrag(draggable, event);\n }\n\n if (\n this.controller.getDraggable() == null &&\n this.controller.getToolMode() === 'edit' &&\n isDroppableSurface\n ) {\n this.addCursor(this.getCursorType());\n } else {\n this.clearCursor();\n }\n };\n\n private getCursorType(): Cursor {\n switch (this.controller.getToolType()) {\n case 'pin-icon':\n return pinCursor;\n case 'pin-text':\n return labelPinCursor;\n }\n }\n\n private handleDrag = async (\n draggable: Draggable,\n event: PointerEvent\n ): Promise<void> => {\n const pt = getMouseClientPosition(event, this.elementRect);\n const worldPosition = await this.getWorldPositionForPoint(pt);\n\n if (worldPosition != null) {\n this.controller.updateDraggable(\n {\n ...draggable,\n lastPoint: pt,\n },\n worldPosition\n );\n }\n };\n\n private handlePointerDown = async (\n pointerDown: PointerEvent\n ): Promise<Disposable> => {\n const pointerUp = (pointerUp: PointerEvent): void => {\n const distanceBetweenStartAndEndPoint = Point.distance(\n Point.create(pointerDown.clientX, pointerUp.clientY),\n Point.create(pointerUp.clientX, pointerUp.clientY)\n );\n\n if (distanceBetweenStartAndEndPoint <= 2 && pointerDown.buttons !== 2) {\n if (this.controller.getToolMode() === 'edit') {\n const pt = getMouseClientPosition(pointerDown, this.elementRect);\n\n this.handlePlacePin(pt);\n }\n }\n\n dispose();\n };\n\n const dispose = (): void => {\n window.removeEventListener('pointerup', pointerUp);\n };\n\n window.addEventListener('pointerup', pointerUp);\n\n return {\n dispose,\n };\n };\n\n private handlePointerUp = async (): Promise<void> => {\n const draggable = this.controller.getDraggable();\n const lastPoint = draggable?.lastPoint;\n\n this.controller.setDraggable(undefined);\n\n if (lastPoint != null && draggable != null) {\n this.ifInitialized(async ({ api }) => {\n const [hit] = await api.hitItems(lastPoint);\n\n if (\n hit?.hitPoint != null &&\n hit?.hitPoint?.x != null &&\n hit?.hitPoint?.y != null &&\n hit?.hitPoint?.z != null\n ) {\n this.controller.updateDraggable(\n {\n ...draggable,\n lastPoint,\n },\n {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n hit?.partId?.hex ?? undefined\n );\n }\n });\n }\n };\n\n private addCursor(cursor: Cursor): void {\n this.clearCursor();\n this.cursor = this.ifInitialized(({ api }) => api.addCursor(cursor));\n }\n\n private async isDroppableSurface(event: PointerEvent): Promise<boolean> {\n const pt = getMouseClientPosition(event, this.elementRect);\n const type = await this.api?.getEntityTypeAtPoint(pt);\n\n return type != null && this.droppableSurfaces.includes(type);\n }\n\n protected ifInitialized<R>(\n f: (data: { element: HTMLElement; api: InteractionApi }) => R\n ): R {\n if (this.element != null && this.api != null) {\n return f({ element: this.element, api: this.api });\n } else {\n throw new Error('Pins interaction handler not initialized.');\n }\n }\n\n private clearCursor(): void {\n this.cursor?.dispose();\n this.cursor = undefined;\n }\n}\n",":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n\n /**\n * @prop --viewer-pin-tool-initial-label-offset-x: The number of pixels to offset\n the label in the x direction. Defaults to 20.\n */\n --viewer-pin-tool-initial-label-offset-x: 20;\n\n /**\n * @prop --viewer-pin-tool-initial-label-offset-y: The number of pixels to offset\n the label in the y direction. Defaults to 20.\n */\n --viewer-pin-tool-initial-label-offset-y: 20;\n}\n","import {\n Component,\n Element,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Matrix4 } from '@vertexvis/geometry';\nimport { Color, Disposable } from '@vertexvis/utils';\n\nimport { PinController } from '../../lib/pins/controller';\nimport { PinsInteractionHandler } from '../../lib/pins/interactions';\nimport {\n Pin,\n PinModel,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from '../../lib/pins/model';\nimport { getMarkupBoundingClientRect } from '../viewer-markup/dom';\n\ninterface StateMap {\n shouldClearDepthBuffers?: boolean;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-tool',\n styleUrl: 'viewer-pin-tool.css',\n shadow: true,\n})\nexport class ViewerPinTool {\n /**\n * The controller that is responsible for drawing pins and updating the model\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * The model that contains the entities and outcomes from performing pin annotations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The type of pin.\n *\n * This property will automatically be set.\n */\n @Prop({ mutable: true })\n public tool: ViewerPinToolType = 'pin-icon';\n\n /**\n * The mode of the pin tool\n */\n @Prop({ mutable: true })\n public mode: ViewerPinToolMode = 'view';\n\n /**\n * The primary color for new pins. Setting this will override the primary template color, and will be used for any new\n * pins created with this `vertex-viewer-pin-tool`. This styling applies to pin anchors, and borders, etc.\n */\n @Prop({ mutable: true })\n public primaryColor: Color.Color | string | undefined;\n\n /**\n * The accent color for new pins. Setting this will override the accent template color, and will be used for any new\n * pins created with this `vertex-viewer-pin-tool`. This styling applies to some background colors, etc\n */\n @Prop({ mutable: true })\n public accentColor: Color.Color | string | undefined;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private pins: Pin[] = [];\n\n @State()\n private selectedPinId?: string;\n\n @State()\n private elementBounds?: DOMRect;\n\n @State()\n private projectionViewMatrix?: Matrix4.Matrix4;\n\n private registeredInteractionHandler?: Promise<Disposable>;\n private onEntitiesChangedHandler?: Disposable;\n\n private resizeObserver?: ResizeObserver;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected watchModeChange(): void {\n this.pinController?.setToolMode(this.mode);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('tool')\n protected watchTypeChange(): void {\n this.pinController?.setToolType(this.tool);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('accentColor')\n protected watchAccentColorChange(): void {\n this.pinController?.setAccentColor(this.accentColor);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('primaryColor')\n protected watchPrimaryColorChange(): void {\n this.pinController?.setPrimaryColor(this.primaryColor);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('pins')\n protected watchPinsChange(): void {\n if (this.pins.length > 0) {\n this.setDepthBuffers();\n } else {\n this.resetDepthBuffers();\n }\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateViewport();\n this.setupController();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n\n this.pinModel.onEntitiesChanged((entities) => {\n this.pins = entities;\n });\n\n this.pinModel.onSelectionChange((selectedId) => {\n this.selectedPinId = selectedId;\n });\n\n this.handleViewerChanged(this.viewer, undefined);\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => this.updateViewport());\n this.resizeObserver.observe(this.hostEl);\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.clearModelListeners();\n this.resetDepthBuffers();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement\n ): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n\n if (oldViewer != null) {\n oldViewer.removeEventListener(\n 'frameDrawn',\n this.handleSetProjectionMatrix\n );\n }\n\n if (newViewer != null) {\n newViewer.addEventListener('frameDrawn', this.handleSetProjectionMatrix);\n }\n\n this.handleSetProjectionMatrix();\n }\n\n private handleSetProjectionMatrix = (): void => {\n this.projectionViewMatrix =\n this.viewer?.frame?.scene.camera.projectionViewMatrix;\n };\n\n protected render(): JSX.Element {\n return (\n <Host>\n <vertex-viewer-dom-renderer viewer={this.viewer} drawMode=\"2d\">\n {this.pins.map((pin) => {\n return (\n <vertex-viewer-pin-group\n id={`pin-group-${pin.id}`}\n data-is-dom-group-element={true}\n pin={pin}\n elementBounds={this.elementBounds}\n pinModel={this.pinModel}\n pinController={this.pinController}\n projectionViewMatrix={this.projectionViewMatrix}\n selected={this.selectedPinId === pin.id}\n ></vertex-viewer-pin-group>\n );\n })}\n </vertex-viewer-dom-renderer>\n </Host>\n );\n }\n\n private setupController(): void {\n const attributes =\n this.accentColor || this.primaryColor\n ? {\n accentColor: this.accentColor,\n primaryColor: this.primaryColor,\n }\n : undefined;\n this.pinController = new PinController(\n this.pinModel,\n this.mode,\n this.tool,\n attributes\n );\n }\n\n private clearInteractionHandler(): void {\n this.registeredInteractionHandler?.then((handler) => handler.dispose());\n this.registeredInteractionHandler = undefined;\n }\n\n private setupInteractionHandler(): void {\n const hostStyles = window.getComputedStyle(this.hostEl);\n const xOffset = hostStyles\n .getPropertyValue('--viewer-pin-tool-initial-label-offset-x')\n .trim();\n const yOffset = hostStyles\n .getPropertyValue('--viewer-pin-tool-initial-label-offset-y')\n .trim();\n\n this.clearInteractionHandler();\n\n if (this.pinController != null) {\n this.registeredInteractionHandler =\n this.viewer?.registerInteractionHandler(\n new PinsInteractionHandler(\n this.pinController,\n parseInt(xOffset),\n parseInt(yOffset)\n )\n );\n }\n }\n\n private clearModelListeners(): void {\n this.onEntitiesChangedHandler?.dispose();\n this.onEntitiesChangedHandler = undefined;\n this.resizeObserver?.disconnect();\n }\n\n private updateViewport(): void {\n const rect = getMarkupBoundingClientRect(this.hostEl);\n this.elementBounds = rect;\n }\n\n private setDepthBuffers(): void {\n if (\n this.pins.length > 0 &&\n this.viewer != null &&\n this.viewer.depthBuffers == null\n ) {\n this.stateMap.shouldClearDepthBuffers = true;\n this.viewer.depthBuffers = 'final';\n }\n }\n\n private resetDepthBuffers(): void {\n if (this.stateMap.shouldClearDepthBuffers && this.viewer != null) {\n this.viewer.depthBuffers = undefined;\n this.stateMap.shouldClearDepthBuffers = undefined;\n }\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"vertex-viewer-pin-tool.entry.cjs.js","mappings":"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","names":["ElementRectObserver","EntityType","getMouseClientPosition","Point","UUID","translatePointToRelative","pinCursor","labelPinCursor","PinModel","h","Host","PinController","getMarkupBoundingClientRect"],"sources":["./src/lib/pins/interactions.ts","./src/components/viewer-pin-tool/viewer-pin-tool.css?tag=vertex-viewer-pin-tool&encapsulation=shadow","./src/components/viewer-pin-tool/viewer-pin-tool.tsx"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Disposable, UUID } from '@vertexvis/utils';\n\nimport { translatePointToRelative } from '../../components/viewer-pin-tool/utils';\nimport { Cursor, labelPinCursor, pinCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport { InteractionApi, InteractionHandler } from '../interactions';\nimport { EntityType } from '../types/entities';\nimport { Draggable, PinController } from './controller';\nimport { Pin } from './model';\n\nexport class PinsInteractionHandler implements InteractionHandler {\n private controller: PinController;\n private element?: HTMLElement;\n private api?: InteractionApi;\n\n private cursor?: Disposable;\n\n private xOffset?: number;\n private yOffset?: number;\n\n private rectObserver = new ElementRectObserver();\n\n private droppableSurfaces: EntityType[] = [\n EntityType.PRECISE_SURFACE,\n EntityType.IMPRECISE_SURFACE,\n EntityType.GENERIC_GEOMETRY,\n ];\n\n private get elementRect(): DOMRect | undefined {\n return this.rectObserver.rect;\n }\n\n public constructor(\n controller: PinController,\n xOffset: number,\n yOffset: number\n ) {\n this.controller = controller;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n this.rectObserver.observe(element);\n\n element.addEventListener('pointermove', this.handlePointerMove);\n element.addEventListener('pointerdown', this.handlePointerDown);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n public dispose(): void {\n this.rectObserver.disconnect();\n this.clearCursor();\n this.element?.removeEventListener('pointermove', this.handlePointerMove);\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n window.removeEventListener('pointerup', this.handlePointerUp);\n\n this.element = undefined;\n this.api = undefined;\n }\n\n public async getWorldPositionForPoint(\n pt: Point.Point\n ): Promise<Vector3.Vector3 | undefined> {\n return this.ifInitialized(async ({ api }) => {\n const vector3 = await api.getWorldPointFromViewport(pt);\n\n return vector3;\n });\n }\n\n public async handlePlacePin(\n pt: Point.Point,\n existingPin?: Pin\n ): Promise<void> {\n this.ifInitialized(async ({ api }) => {\n const [hit] = await api.hitItems(pt);\n\n if (hit?.hitPoint != null && this.elementRect != null) {\n if (\n hit?.hitPoint != null &&\n hit?.hitPoint.x != null &&\n hit?.hitPoint.y != null &&\n hit?.hitPoint.z != null\n ) {\n const pinId = existingPin != null ? existingPin.id : UUID.create();\n\n const attributes =\n this.controller.getStyleAttributes() != null\n ? {\n style: this.controller.getStyleAttributes(),\n }\n : undefined;\n\n switch (this.controller.getToolType()) {\n case 'pin-icon':\n this.controller.setPin({\n type: 'icon',\n id: pinId,\n worldPosition: {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n partId: hit?.itemId?.hex ?? undefined,\n attributes,\n });\n break;\n case 'pin-text':\n const isNewPin = existingPin == null;\n const relativePoint = translatePointToRelative(\n pt,\n this.elementRect,\n isNewPin,\n this.xOffset,\n this.yOffset\n );\n this.controller.setPin({\n type: 'text',\n id: pinId,\n worldPosition: {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n partId: hit?.itemId?.hex ?? undefined,\n label: {\n point: relativePoint,\n },\n attributes,\n });\n this.controller.setSelectedPinId(pinId);\n break;\n }\n }\n } else {\n this.controller.setSelectedPinId();\n }\n });\n }\n\n private handlePointerMove = async (event: PointerEvent): Promise<void> => {\n const isDroppableSurface = await this.isDroppableSurface(event);\n const draggable = this.controller.getDraggable();\n if (draggable != null && isDroppableSurface) {\n this.handleDrag(draggable, event);\n }\n\n if (\n this.controller.getDraggable() == null &&\n this.controller.getToolMode() === 'edit' &&\n isDroppableSurface\n ) {\n this.addCursor(this.getCursorType());\n } else {\n this.clearCursor();\n }\n };\n\n private getCursorType(): Cursor {\n switch (this.controller.getToolType()) {\n case 'pin-icon':\n return pinCursor;\n case 'pin-text':\n return labelPinCursor;\n }\n }\n\n private handleDrag = async (\n draggable: Draggable,\n event: PointerEvent\n ): Promise<void> => {\n const pt = getMouseClientPosition(event, this.elementRect);\n const worldPosition = await this.getWorldPositionForPoint(pt);\n\n if (worldPosition != null) {\n this.controller.updateDraggable(\n {\n ...draggable,\n lastPoint: pt,\n },\n worldPosition\n );\n }\n };\n\n private handlePointerDown = async (\n pointerDown: PointerEvent\n ): Promise<Disposable> => {\n const pointerUp = (pointerUp: PointerEvent): void => {\n const distanceBetweenStartAndEndPoint = Point.distance(\n Point.create(pointerDown.clientX, pointerUp.clientY),\n Point.create(pointerUp.clientX, pointerUp.clientY)\n );\n\n if (distanceBetweenStartAndEndPoint <= 2 && pointerDown.buttons !== 2) {\n if (this.controller.getToolMode() === 'edit') {\n const pt = getMouseClientPosition(pointerDown, this.elementRect);\n\n this.handlePlacePin(pt);\n }\n }\n\n dispose();\n };\n\n const dispose = (): void => {\n window.removeEventListener('pointerup', pointerUp);\n };\n\n window.addEventListener('pointerup', pointerUp);\n\n return {\n dispose,\n };\n };\n\n private handlePointerUp = async (): Promise<void> => {\n const draggable = this.controller.getDraggable();\n const lastPoint = draggable?.lastPoint;\n\n this.controller.setDraggable(undefined);\n\n if (lastPoint != null && draggable != null) {\n this.ifInitialized(async ({ api }) => {\n const [hit] = await api.hitItems(lastPoint);\n\n if (\n hit?.hitPoint != null &&\n hit?.hitPoint?.x != null &&\n hit?.hitPoint?.y != null &&\n hit?.hitPoint?.z != null\n ) {\n this.controller.updateDraggable(\n {\n ...draggable,\n lastPoint,\n },\n {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n hit?.partId?.hex ?? undefined\n );\n }\n });\n }\n };\n\n private addCursor(cursor: Cursor): void {\n this.clearCursor();\n this.cursor = this.ifInitialized(({ api }) => api.addCursor(cursor));\n }\n\n private async isDroppableSurface(event: PointerEvent): Promise<boolean> {\n const pt = getMouseClientPosition(event, this.elementRect);\n const type = await this.api?.getEntityTypeAtPoint(pt);\n\n return type != null && this.droppableSurfaces.includes(type);\n }\n\n protected ifInitialized<R>(\n f: (data: { element: HTMLElement; api: InteractionApi }) => R\n ): R {\n if (this.element != null && this.api != null) {\n return f({ element: this.element, api: this.api });\n } else {\n throw new Error('Pins interaction handler not initialized.');\n }\n }\n\n private clearCursor(): void {\n this.cursor?.dispose();\n this.cursor = undefined;\n }\n}\n",":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n\n /**\n * @prop --viewer-pin-tool-initial-label-offset-x: The number of pixels to offset\n the label in the x direction. Defaults to 20.\n */\n --viewer-pin-tool-initial-label-offset-x: 20;\n\n /**\n * @prop --viewer-pin-tool-initial-label-offset-y: The number of pixels to offset\n the label in the y direction. Defaults to 20.\n */\n --viewer-pin-tool-initial-label-offset-y: 20;\n}\n","import {\n Component,\n Element,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Matrix4 } from '@vertexvis/geometry';\nimport { Color, Disposable } from '@vertexvis/utils';\n\nimport { PinController } from '../../lib/pins/controller';\nimport { PinsInteractionHandler } from '../../lib/pins/interactions';\nimport {\n Pin,\n PinModel,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from '../../lib/pins/model';\nimport { getMarkupBoundingClientRect } from '../viewer-markup/dom';\n\ninterface StateMap {\n shouldClearDepthBuffers?: boolean;\n shouldClearFeatureMaps?: boolean;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-tool',\n styleUrl: 'viewer-pin-tool.css',\n shadow: true,\n})\nexport class ViewerPinTool {\n /**\n * The controller that is responsible for drawing pins and updating the model\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * The model that contains the entities and outcomes from performing pin annotations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The type of pin.\n *\n * This property will automatically be set.\n */\n @Prop({ mutable: true })\n public tool: ViewerPinToolType = 'pin-icon';\n\n /**\n * The mode of the pin tool\n */\n @Prop({ mutable: true })\n public mode: ViewerPinToolMode = 'view';\n\n /**\n * The primary color for new pins. Setting this will override the primary template color, and will be used for any new\n * pins created with this `vertex-viewer-pin-tool`. This styling applies to pin anchors, and borders, etc.\n */\n @Prop({ mutable: true })\n public primaryColor: Color.Color | string | undefined;\n\n /**\n * The accent color for new pins. Setting this will override the accent template color, and will be used for any new\n * pins created with this `vertex-viewer-pin-tool`. This styling applies to some background colors, etc\n */\n @Prop({ mutable: true })\n public accentColor: Color.Color | string | undefined;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private pins: Pin[] = [];\n\n @State()\n private selectedPinId?: string;\n\n @State()\n private elementBounds?: DOMRect;\n\n @State()\n private projectionViewMatrix?: Matrix4.Matrix4;\n\n private registeredInteractionHandler?: Promise<Disposable>;\n private onEntitiesChangedHandler?: Disposable;\n\n private resizeObserver?: ResizeObserver;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected watchModeChange(): void {\n this.pinController?.setToolMode(this.mode);\n this.setupInteractionHandler();\n\n if (this.mode === 'edit') {\n this.setFeatureMaps();\n } else {\n this.resetFeatureMaps();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('tool')\n protected watchTypeChange(): void {\n this.pinController?.setToolType(this.tool);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('accentColor')\n protected watchAccentColorChange(): void {\n this.pinController?.setAccentColor(this.accentColor);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('primaryColor')\n protected watchPrimaryColorChange(): void {\n this.pinController?.setPrimaryColor(this.primaryColor);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('pins')\n protected watchPinsChange(): void {\n if (this.pins.length > 0) {\n this.setDepthBuffers();\n this.setFeatureMaps();\n } else {\n this.resetDepthBuffers();\n this.resetFeatureMaps();\n }\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateViewport();\n this.setupController();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n\n this.pinModel.onEntitiesChanged((entities) => {\n this.pins = entities;\n });\n\n this.pinModel.onSelectionChange((selectedId) => {\n this.selectedPinId = selectedId;\n });\n\n this.handleViewerChanged(this.viewer, undefined);\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => this.updateViewport());\n this.resizeObserver.observe(this.hostEl);\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.clearModelListeners();\n this.resetDepthBuffers();\n this.resetFeatureMaps();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement\n ): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n\n if (oldViewer != null) {\n oldViewer.removeEventListener(\n 'frameDrawn',\n this.handleSetProjectionMatrix\n );\n }\n\n if (newViewer != null) {\n newViewer.addEventListener('frameDrawn', this.handleSetProjectionMatrix);\n }\n\n this.handleSetProjectionMatrix();\n }\n\n private handleSetProjectionMatrix = (): void => {\n this.projectionViewMatrix =\n this.viewer?.frame?.scene.camera.projectionViewMatrix;\n };\n\n protected render(): JSX.Element {\n return (\n <Host>\n <vertex-viewer-dom-renderer viewer={this.viewer} drawMode=\"2d\">\n {this.pins.map((pin) => {\n return (\n <vertex-viewer-pin-group\n id={`pin-group-${pin.id}`}\n data-is-dom-group-element={true}\n pin={pin}\n elementBounds={this.elementBounds}\n pinModel={this.pinModel}\n pinController={this.pinController}\n projectionViewMatrix={this.projectionViewMatrix}\n selected={this.selectedPinId === pin.id}\n ></vertex-viewer-pin-group>\n );\n })}\n </vertex-viewer-dom-renderer>\n </Host>\n );\n }\n\n private setupController(): void {\n const attributes =\n this.accentColor || this.primaryColor\n ? {\n accentColor: this.accentColor,\n primaryColor: this.primaryColor,\n }\n : undefined;\n this.pinController = new PinController(\n this.pinModel,\n this.mode,\n this.tool,\n attributes\n );\n }\n\n private clearInteractionHandler(): void {\n this.registeredInteractionHandler?.then((handler) => handler.dispose());\n this.registeredInteractionHandler = undefined;\n }\n\n private setupInteractionHandler(): void {\n const hostStyles = window.getComputedStyle(this.hostEl);\n const xOffset = hostStyles\n .getPropertyValue('--viewer-pin-tool-initial-label-offset-x')\n .trim();\n const yOffset = hostStyles\n .getPropertyValue('--viewer-pin-tool-initial-label-offset-y')\n .trim();\n\n this.clearInteractionHandler();\n\n if (this.pinController != null) {\n this.registeredInteractionHandler =\n this.viewer?.registerInteractionHandler(\n new PinsInteractionHandler(\n this.pinController,\n parseInt(xOffset),\n parseInt(yOffset)\n )\n );\n }\n }\n\n private clearModelListeners(): void {\n this.onEntitiesChangedHandler?.dispose();\n this.onEntitiesChangedHandler = undefined;\n this.resizeObserver?.disconnect();\n }\n\n private updateViewport(): void {\n const rect = getMarkupBoundingClientRect(this.hostEl);\n this.elementBounds = rect;\n }\n\n private setDepthBuffers(): void {\n if (\n this.pins.length > 0 &&\n this.viewer != null &&\n this.viewer.depthBuffers == null\n ) {\n this.stateMap.shouldClearDepthBuffers = true;\n this.viewer.depthBuffers = 'final';\n }\n }\n\n private resetDepthBuffers(): void {\n if (this.stateMap.shouldClearDepthBuffers && this.viewer != null) {\n this.viewer.depthBuffers = undefined;\n this.stateMap.shouldClearDepthBuffers = undefined;\n }\n }\n\n private setFeatureMaps(): void {\n if (\n (this.pins.length > 0 || this.mode === 'edit') &&\n this.viewer != null &&\n this.viewer.featureMaps == null\n ) {\n this.stateMap.shouldClearFeatureMaps = true;\n this.viewer.featureMaps = 'final';\n }\n }\n\n private resetFeatureMaps(): void {\n if (this.stateMap.shouldClearFeatureMaps && this.viewer != null) {\n this.viewer.featureMaps = undefined;\n this.stateMap.shouldClearFeatureMaps = undefined;\n }\n }\n}\n"],"version":3}
|
|
@@ -469,7 +469,7 @@ const mapOvalItem2d = browser_esm.mapper.defineMapper(browser_esm.mapper.read(br
|
|
|
469
469
|
strokeStyle,
|
|
470
470
|
fillStyle,
|
|
471
471
|
}));
|
|
472
|
-
const mapFreeformItem2d = browser_esm.mapper.defineMapper(browser_esm.mapper.read(browser_esm.mapper.mapRequiredProp('positionsList', browser_esm.mapper.mapArray(streamAttributes.fromPbVector2d)), browser_esm.mapper.mapProp('strokeStyle', browser_esm.mapper.ifDefined(mapStrokeStyle)), browser_esm.mapper.mapProp('fillStyle', browser_esm.mapper.ifDefined(mapFillStyle))), ([positions,
|
|
472
|
+
const mapFreeformItem2d = browser_esm.mapper.defineMapper(browser_esm.mapper.read(browser_esm.mapper.mapRequiredProp('positionsList', browser_esm.mapper.mapArray(streamAttributes.fromPbVector2d)), browser_esm.mapper.mapProp('strokeStyle', browser_esm.mapper.ifDefined(mapStrokeStyle)), browser_esm.mapper.mapProp('fillStyle', browser_esm.mapper.ifDefined(mapFillStyle))), ([positions, strokeStyle, fillStyle]) => ({
|
|
473
473
|
type: 'freeform-2d',
|
|
474
474
|
positions,
|
|
475
475
|
strokeStyle,
|