Skip to content

editorGlobalsMirrorTool

Class: MirrorTool

The mirror tool takes an assembly as input, clones it and then mirrors the mesh points by modifying their implementation in which we pass the mirror information for anchors to re-find themselves inside of the appropriate findByMirror methods:

see PointOnSurfaceAnchor._findByMirror

see MeshEdgeAnchor._findByMirror

Hierarchy

MirrorTool

Index

Constructors

Properties

Methods

Constructors

constructor

+ new MirrorTool(chosenUiManifestation: IToolManifestation, options: IToolOptions): MirrorTool

Inherited from BoxelTool.constructor

Defined in src/tools/Tool.ts:162

Parameters:

Name Type Description
chosenUiManifestation IToolManifestation the manifestation object as chosen by the user
options IToolOptions -

Returns: MirrorTool

Properties

Protected Readonly accessUiComponent

accessUiComponent: any = null

Inherited from BoxelTool.accessUiComponent

Defined in src/tools/Tool.ts:151


Protected Readonly animationFunction

animationFunction: function = null

Inherited from BoxelTool.animationFunction

Defined in src/tools/Tool.ts:147

Type declaration:

▸ (animation: any): void

Parameters:

Name Type
animation any

Protected Readonly chosenUiManifestation

chosenUiManifestation: IToolManifestation

Inherited from BoxelTool.chosenUiManifestation

Defined in src/tools/Tool.ts:162


Private clonedAssembly

clonedAssembly: Assembly

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:116


Protected Readonly compositeModel

compositeModel: CompositeModel | null = null

Inherited from BoxelTool.compositeModel

Defined in src/tools/Tool.ts:141


Protected Readonly continueInteractionOnAnimate

continueInteractionOnAnimate: boolean = false

Inherited from BoxelTool.continueInteractionOnAnimate

Defined in src/tools/Tool.ts:133


Protected Readonly editor

editor: Editor | null = null

Inherited from BoxelTool.editor

Defined in src/tools/Tool.ts:145


Protected Readonly hintManager

hintManager: HintManager = null

Inherited from BoxelTool.hintManager

Defined in src/tools/Tool.ts:153


Private mirrorTransform

mirrorTransform: Matrix4

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:115


Protected Readonly parameters

parameters: any = null

Inherited from BoxelTool.parameters

Defined in src/tools/Tool.ts:160


Protected Readonly pauseFidelityControl

pauseFidelityControl: boolean = true

Inherited from BoxelTool.pauseFidelityControl

Defined in src/tools/Tool.ts:137


Protected Readonly pausePhysicsSimulation

pausePhysicsSimulation: boolean = false

Inherited from AssemblePlateTool.pausePhysicsSimulation

Defined in src/tools/Tool.ts:135


Protected Readonly renderContext

renderContext: RenderContext | null = null

Inherited from BoxelTool.renderContext

Defined in src/tools/Tool.ts:143


Protected Readonly threeNode

threeNode: Object3D = null

Inherited from BoxelTool.threeNode

Defined in src/tools/Tool.ts:139


Protected Readonly undoEngine

undoEngine: UndoEngine | null = null

Inherited from BoxelTool.undoEngine

Defined in src/tools/Tool.ts:155


Protected Readonly userMessageEventEmitter

userMessageEventEmitter: EventEmitter‹string› = new EventEmitter()

Inherited from BoxelTool.userMessageEventEmitter

Defined in src/tools/Tool.ts:126


Protected Readonly userProgressCancelEventEmitter

userProgressCancelEventEmitter: EventEmitter‹number› = new EventEmitter()

Inherited from BoxelTool.userProgressCancelEventEmitter

Defined in src/tools/Tool.ts:129


Protected Readonly userProgressEventEmitter

userProgressEventEmitter: EventEmitterIToolUserProgressEvent = new EventEmitter()

Inherited from BoxelTool.userProgressEventEmitter

Defined in src/tools/Tool.ts:127


Protected Readonly userProgressFinishEventEmitter

userProgressFinishEventEmitter: EventEmitter‹number› = new EventEmitter()

Inherited from BoxelTool.userProgressFinishEventEmitter

Defined in src/tools/Tool.ts:128


Protected Readonly visualizationManager

visualizationManager: VisualizationManager | null = null

Inherited from BoxelTool.visualizationManager

Defined in src/tools/Tool.ts:157


Protected Readonly wakeUpCallback

wakeUpCallback: function = null

Inherited from BoxelTool.wakeUpCallback

Defined in src/tools/Tool.ts:149

Type declaration:

▸ (): void


Static Private Readonly xOffset

xOffset: 10 = 10

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:33

Methods

Private _createMirrorMeshPointMap

_createMirrorMeshPointMap(mesh: Mesh): Map‹MeshPoint, MeshPoint

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:318

Creates a new map of old to mirrored mesh points.

Parameters:

Name Type Description
mesh Mesh -

Returns: Map‹MeshPoint, MeshPoint

map of old to mirrored mesh points


Private _linkTwinsInCycle

_linkTwinsInCycle(cycle: MeshHalfEdge[], twinMap: TwinMap): void

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:294

Links all twin edges for a given cycle.

Parameters:

Name Type Description
cycle MeshHalfEdge[] -
twinMap TwinMap map that contains edges of previous cycles if these are twin-less

Returns: void


Private _mirrorCycle

_mirrorCycle(cycle: MeshHalfEdge[], mirrorMeshPointMap: Map‹MeshPoint, MeshPoint›): MeshHalfEdge[]

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:274

Mirrors an outline or hole cycle, adding edges to the twin map.

Parameters:

Name Type Description
cycle MeshHalfEdge[] outline or hole cycle
mirrorMeshPointMap Map‹MeshPoint, MeshPoint map of old to mirrored mesh points

Returns: MeshHalfEdge[]

first edge of cycle


Private _mirrorMesh

_mirrorMesh(mesh: Mesh): IMeshOperationResult

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:220

Mirrors a given mesh by mirroring all it's points and setting up twin relationship.

Parameters:

Name Type Description
mesh Mesh -

Returns: IMeshOperationResult

the operation result


Private _mirrorMeshPoint

_mirrorMeshPoint(point: MeshPoint, modelElement: Mesh): MeshPoint

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:329

Mirrors a mesh point using this.mirrorTransform.

Parameters:

Name Type Description
point MeshPoint mesh point to be mirrored
modelElement Mesh model element for transformation purposes

Returns: MeshPoint

the mirrored mesh point


Private _mirrorModelElement

_mirrorModelElement(modelElement: IModelElement): void

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:165

Mirrors model elements of an assembly. Mirror cycle: mesh -> surface(s) -> edge(s) -> point(s) -> mirror point(s) -> edge(s) -> surface(s) -> mesh

Parameters:

Name Type Description
modelElement IModelElement model elements to mirror

Returns: void


Private _mirrorOrnamentDescriptor

_mirrorOrnamentDescriptor(ornament: OrnamentDescriptor): void

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:340

Mirrors the ornament by flipping it's y-direction.

Parameters:

Name Type Description
ornament OrnamentDescriptor gets flipped

Returns: void


Private _mirrorSingleSurfaceDescriptor

_mirrorSingleSurfaceDescriptor(ssd: SingleSurfaceDescriptor): IMeshOperationResult

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:188

Mirrors a single surface descriptor by mirroring the corner points and then building a new surface.

Parameters:

Name Type Description
ssd SingleSurfaceDescriptor -

Returns: IMeshOperationResult

the operation result


cancel

cancel(): void

Inherited from MirrorTool.cancel

Defined in src/tools/Tool.ts:403

Abstract method that should be implemented: Called when the user selects another tool or the InteractionManager throws away this instance or when the InteractionHandler throws it away on mapping change. Note that the content of the three node and modifications on the composite model get cleared automatically.

Returns: void


cancelUserProgress

cancelUserProgress(id: number): void

Inherited from BoxelTool.cancelUserProgress

Defined in src/tools/Tool.ts:234

Parameters:

Name Type
id number

Returns: void


clickInteraction

clickInteraction(mappingResult: IMapping, interactionData: IInteractionData): Promise‹boolean› | void

Inherited from BoxelTool.clickInteraction

Defined in src/tools/Tool.ts:371

Called when tool interaction is finished and the user performed a first click interaction, not a drag interaction. This method is called after startInteraction was called. It is also called by consecutiveClick if no custom implementation has been created. Implementing this method is optional, but the default is to forward the call to Tool.finishInteraction.

Parameters:

Name Type Description
mappingResult IMapping object returned from the InteractionMapping specified in startInteraction() or null
interactionData IInteractionData -

Returns: Promise‹boolean› | void

Same as Tool.finishInteraction


consecutiveClick

consecutiveClick(mappingResult: IMapping, interactionData: IInteractionData, n: number): Promise‹boolean› | void

Inherited from BoxelTool.consecutiveClick

Defined in src/tools/Tool.ts:386

Called after start, continue when there has been a consecutive click, signaling that there has been a double or triple etc. click. It never signals the first click! No new tool instance will be created, consecutiveClick will be called on the same instance that already received the click. It will only be called if the tool specifies worksWithConsecutiveClick as true in the toolManifestations Defaults to forwarding the interaction to Tool.clickInteraction

Parameters:

Name Type Default Description
mappingResult IMapping - object returned from the InteractionMapping specified in startInteraction() or null
interactionData IInteractionData - -
n number 2 the in in this is the nTh click. The first click (consumed by clickInteraction) would have n=1, so the lowest value in consecutiveClick is 2.

Returns: Promise‹boolean› | void

Same as Tool.finishInteraction


continueInteraction

continueInteraction(): void

Overrides Tool.continueInteraction

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:144

Returns: void


displayUserMessage

displayUserMessage(message: string): void

Inherited from BoxelTool.displayUserMessage

Defined in src/tools/Tool.ts:216

Parameters:

Name Type
message string

Returns: void


displayUserProgress

displayUserProgress(id: number, progress: number, message: string, type: string, cancelFunction: function): void

Inherited from BoxelTool.displayUserProgress

Defined in src/tools/Tool.ts:220

Parameters:

id: number

progress: number

message: string

type: string

cancelFunction: function

▸ (): void

Returns: void


equals

equals(otherTool: Tool): boolean

Inherited from BoxelTool.equals

Defined in src/tools/Tool.ts:410

Parameters:

Name Type
otherTool Tool

Returns: boolean

whether otherTool is the same kind of tool as this one


finishInteraction

finishInteraction(): Promise‹boolean›

Overrides Tool.finishInteraction

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:148

Returns: Promise‹boolean›


finishUserProgress

finishUserProgress(id: number): void

Inherited from BoxelTool.finishUserProgress

Defined in src/tools/Tool.ts:230

Parameters:

Name Type
id number

Returns: void


getAnimationFunction

getAnimationFunction(): function

Inherited from BoxelTool.getAnimationFunction

Defined in src/tools/Tool.ts:284

Returns: function

the addAnimation function of the render context

▸ (animation: any): void

Parameters:

Name Type
animation any

getCanHandleMultipleInteractions

getCanHandleMultipleInteractions(): boolean

Inherited from BoxelTool.getCanHandleMultipleInteractions

Defined in src/tools/Tool.ts:242

Returns: boolean


getCanWorkWithHints

getCanWorkWithHints(): boolean

Inherited from BoxelTool.getCanWorkWithHints

Defined in src/tools/Tool.ts:238

Returns: boolean


getChosenUiManifestation

getChosenUiManifestation(): IToolManifestation

Inherited from BoxelTool.getChosenUiManifestation

Defined in src/tools/Tool.ts:258

Returns: IToolManifestation


getCompositeModel

getCompositeModel(): CompositeModel | null

Inherited from BoxelTool.getCompositeModel

Defined in src/tools/Tool.ts:307

Returns: CompositeModel | null


getEditor

getEditor(): Editor | null

Inherited from BoxelTool.getEditor

Defined in src/tools/Tool.ts:288

Returns: Editor | null


getHintManager

getHintManager(): HintManager

Inherited from BoxelTool.getHintManager

Defined in src/tools/Tool.ts:311

Returns: HintManager


getInteractionCancelled

getInteractionCancelled(): object

Inherited from BoxelTool.getInteractionCancelled

Defined in src/tools/Tool.ts:188

Returns: object


getInteractionStarted

getInteractionStartedT›(mappings: T): object

Inherited from BoxelTool.getInteractionStarted

Defined in src/tools/Tool.ts:176

Type parameters:

T: AbstractInteractionMapping[]

Parameters:

Name Type Default
mappings T [] as T

Returns: object


getInternalName

getInternalName(): string

Inherited from BoxelTool.getInternalName

Defined in src/tools/Tool.ts:433

Get tool name from the instance

Returns: string


getManifestationParameters

getManifestationParameters(): any

Inherited from BoxelTool.getManifestationParameters

Defined in src/tools/Tool.ts:269

Returns: any

the parameters that were specified in the tool manifestation


getParameters

getParameters(): any

Inherited from BoxelTool.getParameters

Defined in src/tools/Tool.ts:262

Returns: any


getPauseFidelityControl

getPauseFidelityControl(): boolean

Inherited from BoxelTool.getPauseFidelityControl

Defined in src/tools/Tool.ts:254

Returns: boolean


getPausePhysicsSimulation

getPausePhysicsSimulation(): boolean

Inherited from BoxelTool.getPausePhysicsSimulation

Defined in src/tools/Tool.ts:250

Returns: boolean


getRenderContext

getRenderContext(): RenderContext

Inherited from BoxelTool.getRenderContext

Defined in src/tools/Tool.ts:273

Returns: RenderContext


getReproduceInfo

getReproduceInfo(): ISerializableObject

Inherited from BoxelTool.getReproduceInfo

Defined in src/tools/Tool.ts:426

returns information to reproduce the current state of the tool on error. Can essentially be any object, should be human-readable and enable you to understand the error when looking at a log.

Returns: ISerializableObject


getRequiresContinuousModelIntersection

getRequiresContinuousModelIntersection(): boolean

Inherited from BoxelTool.getRequiresContinuousModelIntersection

Defined in src/tools/Tool.ts:246

Returns: boolean


getThreeNode

getThreeNode(): Object3D

Inherited from BoxelTool.getThreeNode

Defined in src/tools/Tool.ts:303

Returns the reference to the THREE node

Returns: Object3D


getUiComponentAccessMethod

getUiComponentAccessMethod(): any

Inherited from BoxelTool.getUiComponentAccessMethod

Defined in src/tools/Tool.ts:296

Returns: any


getUndoEngine

getUndoEngine(): UndoEngine

Inherited from BoxelTool.getUndoEngine

Defined in src/tools/Tool.ts:277

Returns: UndoEngine


getUserMessageEventEmitter

getUserMessageEventEmitter(): IPublicEventEmitterInterface‹string›

Inherited from BoxelTool.getUserMessageEventEmitter

Defined in src/tools/Tool.ts:200

Returns: IPublicEventEmitterInterface‹string›


getUserProgressCancelEventEmitter

getUserProgressCancelEventEmitter(): IPublicEventEmitterInterface‹number›

Inherited from BoxelTool.getUserProgressCancelEventEmitter

Defined in src/tools/Tool.ts:212

Returns: IPublicEventEmitterInterface‹number›


getUserProgressEventEmitter

getUserProgressEventEmitter(): IPublicEventEmitterInterfaceIToolUserProgressEvent

Inherited from BoxelTool.getUserProgressEventEmitter

Defined in src/tools/Tool.ts:204

Returns: IPublicEventEmitterInterfaceIToolUserProgressEvent


getUserProgressFinishEventEmitter

getUserProgressFinishEventEmitter(): IPublicEventEmitterInterface‹number›

Inherited from BoxelTool.getUserProgressFinishEventEmitter

Defined in src/tools/Tool.ts:208

Returns: IPublicEventEmitterInterface‹number›


getVisualizationManager

getVisualizationManager(): VisualizationManager

Inherited from BoxelTool.getVisualizationManager

Defined in src/tools/Tool.ts:315

Returns: VisualizationManager


getWakeUpCallback

getWakeUpCallback(): function

Inherited from BoxelTool.getWakeUpCallback

Defined in src/tools/Tool.ts:292

Returns: function

▸ (): void


getWorksInEmptySpace

getWorksInEmptySpace(): boolean

Inherited from BoxelTool.getWorksInEmptySpace

Defined in src/tools/Tool.ts:192

Returns: boolean


getWorksWithConsecutiveClicks

getWorksWithConsecutiveClicks(): boolean

Inherited from BoxelTool.getWorksWithConsecutiveClicks

Defined in src/tools/Tool.ts:196

Returns: boolean


needsReset

needsReset(): boolean

Inherited from BoxelTool.needsReset

Defined in src/tools/Tool.ts:394

If the model should be reset when another tool takes over. Only used to declare no need for resets on non-sticky multiclicks with the moveTool as the default tool.

Returns: boolean


startInteraction

startInteraction(interactionData: IInteractionData): object

Overrides Tool.startInteraction

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:118

Parameters:

Name Type
interactionData IInteractionData

Returns: object


Static Private _cloneAssembly

_cloneAssembly(assembly: Assembly): Assembly

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:82

Clones a given assembly.

Parameters:

Name Type Description
assembly Assembly to clone

Returns: Assembly

the cloned assembly


Static Private _createMirrorPlane

_createMirrorPlane(assemblyAABB: AABB): Plane

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:46

Creates the mirror plane in world coordinates using the assemblies AABB and positioning the plane right next to it in x direction.

Parameters:

Name Type Description
assemblyAABB AABB in world coordinates

Returns: Plane

mirror plane in world coordinates


Static Private _createMirroredEdgeMapping

_createMirroredEdgeMapping(outlineCycle: MeshHalfEdge[], mirroredOutlineCycle: MeshHalfEdge[], holeCycles: MeshHalfEdge[][], mirroredHoleCycles: MeshHalfEdge[][]): Array‹[MeshHalfEdge, MeshHalfEdge]›

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:63

Zips all given edges in each cycle into one big mapping from old to mirrored edge.

Parameters:

Name Type Description
outlineCycle MeshHalfEdge[] -
mirroredOutlineCycle MeshHalfEdge[] -
holeCycles MeshHalfEdge[][] -
mirroredHoleCycles MeshHalfEdge[][] -

Returns: Array‹[MeshHalfEdge, MeshHalfEdge]›

the zipped cycles


Static Private _orderMirroredCycles

_orderMirroredCycles(cycle: MeshHalfEdge[]): MeshHalfEdge[]

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:108

Changes the order of a mirrored cycle so that the edge of the original mesh corresponds to the edge on the mirrored mesh.

2 1 │ 4 3 As we know the original points get mirrored desired output x◄─────────x │ x◄─────────x and afterwards reversed to preserve the normal │ │ 0 ▲ │ │ 2 ▲ direction. Therefore we need to first reverse x◄──────x │ x◄─────x │ │ │ │ │ order of edges by reversing the mirrored cycle │ 0 ▲ │ │ 0 ▲ │1 3 │ │ │3 1 │ array and then also rotate the edges in CW │1 3 │ │ │3 1│ │ │ │ │ │ direction to have the top edge for both as 0, ▼ 2 │ │ ▼ 2 │ ▼ 2 │ │ ▼ 0 │ then the left in original as 1 and the right in x──────►x │ x──────►x x─────────►x │ x─────────►x mirror as 1, the bottom for both as 2 and the right original │ mirror 3 4 │ 1 2 in original and left as 3. That way the order of edges original │ mirror gets mirrored correctly and we can zip them together.

Parameters:

Name Type Description
cycle MeshHalfEdge[] mirrored cycle in wrong order

Returns: MeshHalfEdge[]

the new cycle in correct order


Static canHandleInteraction

canHandleInteraction(interactionData: IInteractionData, parameters?: any): CanHandleInteractionResult

Inherited from BoxelTool.canHandleInteraction

Defined in src/tools/Tool.ts:113

Checks whether the tool is able to do something meaningful with the given interaction data. This method is guaranteed to be called before startInteraction, so null checks should only happen here. It can provide a resultObject which will get passed to startInteraction (eg for found model elements).

Parameters:

Name Type Description
interactionData IInteractionData -
parameters? any additional parameters to configure behavior (eg when not triggered from the menu))

Returns: CanHandleInteractionResult

a quality and an optional resultObject if the tool wants to handle the interaction itself. A quality with a delegation object and optional resultObject if the tool knows where to delegate the interaction for sure. null when the interaction cannot be handled or delegated by the tool.


Static getInternalName

getInternalName(): string

Overrides BoxelTool.getInternalName

Defined in src/modules/kyub.core.mirror/src/MirrorTool.ts:35

Returns: string


Static keepLastBoxelUnMerged

keepLastBoxelUnMerged(): boolean

Inherited from AssemblePlateTool.keepLastBoxelUnMerged

Defined in src/tools/Tool.ts:122

When the tool is selected and this returns true, the last boxel in the boxelqueue will stay unconnected to the base mesh so we can apply rotations to it.

Returns: boolean


Static onSelected

onSelected(editorInstance: Editor, toolManifestation?: IToolManifestation, parameters?: any): boolean

Inherited from BoxelTool.onSelected

Defined in src/tools/Tool.ts:87

Parameters:

Name Type
editorInstance Editor
toolManifestation? IToolManifestation
parameters? any

Returns: boolean

whether the tool requires rendering the scene after it was selected.


Static onUserDeselected

onUserDeselected(editorInstance: Editor): void

Inherited from BoxelTool.onUserDeselected

Defined in src/tools/Tool.ts:92

Parameters:

Name Type
editorInstance Editor

Returns: void


Static requiresHintReset

requiresHintReset(): boolean

Inherited from BoxelTool.requiresHintReset

Defined in src/tools/Tool.ts:100

Defines whether any hints added by previous tools used should be cleared.

Returns: boolean