@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
|
@@ -235,6 +235,12 @@ const ViewerPinTool = class {
|
|
|
235
235
|
var _a;
|
|
236
236
|
(_a = this.pinController) === null || _a === void 0 ? void 0 : _a.setToolMode(this.mode);
|
|
237
237
|
this.setupInteractionHandler();
|
|
238
|
+
if (this.mode === 'edit') {
|
|
239
|
+
this.setFeatureMaps();
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
this.resetFeatureMaps();
|
|
243
|
+
}
|
|
238
244
|
}
|
|
239
245
|
/**
|
|
240
246
|
* @ignore
|
|
@@ -266,9 +272,11 @@ const ViewerPinTool = class {
|
|
|
266
272
|
watchPinsChange() {
|
|
267
273
|
if (this.pins.length > 0) {
|
|
268
274
|
this.setDepthBuffers();
|
|
275
|
+
this.setFeatureMaps();
|
|
269
276
|
}
|
|
270
277
|
else {
|
|
271
278
|
this.resetDepthBuffers();
|
|
279
|
+
this.resetFeatureMaps();
|
|
272
280
|
}
|
|
273
281
|
}
|
|
274
282
|
/**
|
|
@@ -277,6 +285,7 @@ const ViewerPinTool = class {
|
|
|
277
285
|
connectedCallback() {
|
|
278
286
|
this.setupInteractionHandler();
|
|
279
287
|
this.setDepthBuffers();
|
|
288
|
+
this.setFeatureMaps();
|
|
280
289
|
}
|
|
281
290
|
/**
|
|
282
291
|
* @ignore
|
|
@@ -286,6 +295,7 @@ const ViewerPinTool = class {
|
|
|
286
295
|
this.setupController();
|
|
287
296
|
this.setupInteractionHandler();
|
|
288
297
|
this.setDepthBuffers();
|
|
298
|
+
this.setFeatureMaps();
|
|
289
299
|
this.pinModel.onEntitiesChanged((entities) => {
|
|
290
300
|
this.pins = entities;
|
|
291
301
|
});
|
|
@@ -305,6 +315,7 @@ const ViewerPinTool = class {
|
|
|
305
315
|
this.clearInteractionHandler();
|
|
306
316
|
this.clearModelListeners();
|
|
307
317
|
this.resetDepthBuffers();
|
|
318
|
+
this.resetFeatureMaps();
|
|
308
319
|
}
|
|
309
320
|
/**
|
|
310
321
|
* @ignore
|
|
@@ -312,6 +323,7 @@ const ViewerPinTool = class {
|
|
|
312
323
|
handleViewerChanged(newViewer, oldViewer) {
|
|
313
324
|
this.setupInteractionHandler();
|
|
314
325
|
this.setDepthBuffers();
|
|
326
|
+
this.setFeatureMaps();
|
|
315
327
|
if (oldViewer != null) {
|
|
316
328
|
oldViewer.removeEventListener('frameDrawn', this.handleSetProjectionMatrix);
|
|
317
329
|
}
|
|
@@ -378,6 +390,20 @@ const ViewerPinTool = class {
|
|
|
378
390
|
this.stateMap.shouldClearDepthBuffers = undefined;
|
|
379
391
|
}
|
|
380
392
|
}
|
|
393
|
+
setFeatureMaps() {
|
|
394
|
+
if ((this.pins.length > 0 || this.mode === 'edit') &&
|
|
395
|
+
this.viewer != null &&
|
|
396
|
+
this.viewer.featureMaps == null) {
|
|
397
|
+
this.stateMap.shouldClearFeatureMaps = true;
|
|
398
|
+
this.viewer.featureMaps = 'final';
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
resetFeatureMaps() {
|
|
402
|
+
if (this.stateMap.shouldClearFeatureMaps && this.viewer != null) {
|
|
403
|
+
this.viewer.featureMaps = undefined;
|
|
404
|
+
this.stateMap.shouldClearFeatureMaps = undefined;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
381
407
|
get hostEl() { return getElement(this); }
|
|
382
408
|
static get watchers() { return {
|
|
383
409
|
"mode": ["watchModeChange"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"vertex-viewer-pin-tool.entry.js","mappings":"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","names":["Point","UUID"],"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.js","mappings":"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","names":["Point","UUID"],"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}
|
|
@@ -465,7 +465,7 @@ const mapOvalItem2d = mapper.defineMapper(mapper.read(mapper.mapRequiredProp('to
|
|
|
465
465
|
strokeStyle,
|
|
466
466
|
fillStyle,
|
|
467
467
|
}));
|
|
468
|
-
const mapFreeformItem2d = mapper.defineMapper(mapper.read(mapper.mapRequiredProp('positionsList', mapper.mapArray(fromPbVector2d)), mapper.mapProp('strokeStyle', mapper.ifDefined(mapStrokeStyle)), mapper.mapProp('fillStyle', mapper.ifDefined(mapFillStyle))), ([positions,
|
|
468
|
+
const mapFreeformItem2d = mapper.defineMapper(mapper.read(mapper.mapRequiredProp('positionsList', mapper.mapArray(fromPbVector2d)), mapper.mapProp('strokeStyle', mapper.ifDefined(mapStrokeStyle)), mapper.mapProp('fillStyle', mapper.ifDefined(mapFillStyle))), ([positions, strokeStyle, fillStyle]) => ({
|
|
469
469
|
type: 'freeform-2d',
|
|
470
470
|
positions,
|
|
471
471
|
strokeStyle,
|