Skip to content

editor › Globals › IPositionableElement

Interface: IPositionableElement

If a model element can be localized, e.g. one can say that the element has a position rotation etc, it should implement this interface.

ToDo: This could also be more conveniently done with an abstract class - so we could do run-time type checking ToDo: and implement the event logic here to easily enforce the behavior specified in comments

Hierarchy

↳ IPositionableElement

Implemented by

Index

Methods

Methods

destroy

▸ destroy(): void

Inherited from IModelElement.destroy

Defined in src/model/data/Concepts/IModelElement.ts:64

This method should be called right before the model element's subgraph is removed from the assembly. In it, the ModelElement should destroy all anchors and deregister from any events to prevent memory leaks.

Returns: void


Optional disable

▸ disable(realizer1: any): void

Inherited from IModelElement.disable

Defined in src/model/data/Concepts/IModelElement.ts:70

Do not realize and undo realization. Used to disable realization persistently (eg a parametric hole disables other ornaments).

Parameters:

Name Type
realizer1 any

Returns: void


Optional enable

▸ enable(): void

Inherited from IModelElement.enable

Defined in src/model/data/Concepts/IModelElement.ts:75

Enable realization again and emit a change event.

Returns: void


getAssembly

▸ getAssembly(): Assembly

Inherited from IModelElement.getAssembly

Defined in src/model/data/Concepts/IModelElement.ts:47

Get the assembly this concept belongs to

Returns: Assembly


getChangeEventEmitter

▸ getChangeEventEmitter(): IPublicEventEmitterInterface‹IModelElementEvent›

Inherited from IModelElement.getChangeEventEmitter

Defined in src/model/data/Concepts/IModelElement.ts:42

Should be emitted when the model element changes, so that the realization can be updated. As invalidity should not cause destructive actions, the event should not be emitted if the model element became invalid.

Returns: IPublicEventEmitterInterface‹IModelElementEvent›


getElementsThisDependsOn

▸ getElementsThisDependsOn(): IModelElement[]

Inherited from IModelElement.getElementsThisDependsOn

Defined in src/model/data/Concepts/IModelElement.ts:35

A model element may depend on other model elements, i.e. if a model element A links to another ModelElement B with an anchor (and B being the anchor's target), A depends on B.

Such dependencies should make sense semantically, e.g. an Ornament depends on a Mesh via an anchor that points to a specific place on the mesh. They are used to determine the order in which model elements are realized.

ToDo: for the sake of consistency, one could refactor this to getModelElementDependencyDefiners, as with ToDo: IPositionableElement.getTransformsDefiner()

Returns: IModelElement[]


getIsValid

▸ getIsValid(): boolean

Inherited from IModelElement.getIsValid

Defined in src/model/data/Concepts/IModelElement.ts:58

Returns: boolean

whether the model element currently is valid or not. As with IAnchor.getIsValid(), this should be lazily evaluated and no destructive action should be automatically performed if a ModelElement is invalid.


getParent

▸ getParent(): ITransformable | null

Inherited from ITransformable.getParent

Defined in src/util/Transforms.ts:27

The parent of the coordinate system (where global points to). The graph connecting all transforms has to be a tree.

Returns: ITransformable | null

parent in next higher space (global) or null if at root space


getTransforms

▸ getTransforms(): IReadOnlyTransforms

Inherited from ITransformable.getTransforms

Defined in src/util/Transforms.ts:20

Returns: IReadOnlyTransforms

the transform from next higher space (global) to local space


getTransformsChangeEventEmitter

▸ getTransformsChangeEventEmitter(): IPublicEventEmitterInterface‹ITransformsChangeEvent›

Inherited from IPositionable.getTransformsChangeEventEmitter

Defined in src/model/data/Concepts/IPositionable.ts:31

If the IPositionable changes it transforms because the transforms defining anchor changed them, it must emit this event. Other anchors pointing to this element or external listeners may subscribe to this event.

see TransformsChangeEvent to check what fields have to be provided

The elements's getChangeEventEmitter() event must not be fired if only the transforms changed.

Returns: IPublicEventEmitterInterface‹ITransformsChangeEvent›


getTransformsDefiner

▸ getTransformsDefiner(): IPositionableElementTransformsDefiner

Inherited from IPositionable.getTransformsDefiner

Defined in src/model/data/Concepts/IPositionable.ts:18

The IPositionable must always be able to specify one anchor that determines its transforms.

Changes in the transforms defined by this IPositionableElementTransformsDefiner must be propagated via the IPositionableElement.getTransformsChangeEventEmitter() event.

WARNING: If you want an anchor / other element to depend on this element's transforms, never directly listen to events emitted by its transformsDefiner but instead listen to getTransformsChangeEventEmitter of the model element itself, as it may replace its transformsDefiner at any time. Use the @see PositionableElementAnchor as a basic implementation.

Returns: IPositionableElementTransformsDefiner


Optional isEnabled

▸ isEnabled(): boolean

Inherited from IModelElement.isEnabled

Defined in src/model/data/Concepts/IModelElement.ts:80

Whether the realization is enabled.

Returns: boolean


setAssembly

▸ setAssembly(assembly: Assembly): any

Inherited from IModelElement.setAssembly

Defined in src/model/data/Concepts/IModelElement.ts:52

Change the assembly this element belongs to. This should only be called by assemblies themselves.

Parameters:

Name Type
assembly Assembly

Returns: any


setTransformsDefiner

▸ setTransformsDefiner(transformsDefiner: IPositionableElementTransformsDefiner): this

Inherited from IPositionable.setTransformsDefiner

Defined in src/model/data/Concepts/IPositionable.ts:20

Parameters:

Name Type
transformsDefiner IPositionableElementTransformsDefiner

Returns: this