File

projects/atft/src/lib/object/connector/abstract-connector.ts

Extends

AbstractObject3D

Implements

OnDestroy

Index

Properties
Methods
Inputs
Outputs

Inputs

source
Type : AbstractObject3D<THREE.Object3D>
target
Type : AbstractObject3D<THREE.Object3D>
layer
Type : number
Default value : 0
Inherited from AbstractObject3D
name
Type : string
Default value : uuidv4()
Inherited from AbstractObject3D
rotateX
Type : number
Inherited from AbstractObject3D

Rotation in Euler angles (radians) with order X, Y, Z.

rotateY
Type : number
Inherited from AbstractObject3D
rotateZ
Type : number
Inherited from AbstractObject3D
scaleX
Type : number
Default value : 1
Inherited from AbstractObject3D
scaleY
Type : number
Default value : 1
Inherited from AbstractObject3D
scaleZ
Type : number
Default value : 1
Inherited from AbstractObject3D
translateX
Type : number
Inherited from AbstractObject3D

Translate the geometry. This is typically done as a one time operation, and not during a loop.

translateY
Type : number
Inherited from AbstractObject3D
translateZ
Type : number
Inherited from AbstractObject3D

Outputs

changed
Type : EventEmitter
Inherited from AbstractObject3D

Methods

Abstract createLineMesh
createLineMesh()

Create line mesh

Returns : T
Protected newObject3DInstance
newObject3DInstance()
Inherited from AbstractObject3D
Returns : THREE.Object3D
Public ngOnDestroy
ngOnDestroy()
Inherited from AbstractObject3D
Returns : void
Abstract updateLineGeometry
updateLineGeometry()

If at least one line end (source or target object) changed, then line geoetry should be updated as well // TODO: Calculate only when source/target positions were changed

Returns : void
Private watchObjects
watchObjects()
Returns : void
Public addChild
addChild(object: AbstractObject3D<any>)
Inherited from AbstractObject3D
Parameters :
Name Type Optional
object AbstractObject3D<any> No
Returns : void
Protected afterInit
afterInit()
Inherited from AbstractObject3D
Returns : void
Public applyRotation
applyRotation()
Inherited from AbstractObject3D
Returns : void
Public applyScale
applyScale()
Inherited from AbstractObject3D
Returns : void
Public applyTranslation
applyTranslation()
Inherited from AbstractObject3D
Returns : void
Public findByName
findByName(name: string)
Inherited from AbstractObject3D
Parameters :
Name Type Optional
name string No
Returns : any
Public getChildren
getChildren()
Inherited from AbstractObject3D
Public getObject
getObject()
Inherited from AbstractObject3D
Returns : T
Public ngAfterViewInit
ngAfterViewInit()
Inherited from AbstractObject3D
Returns : void
Public ngOnChanges
ngOnChanges(changes: SimpleChanges)
Inherited from AbstractObject3D
Parameters :
Name Type Optional
changes SimpleChanges No
Returns : void
Public ngOnInit
ngOnInit()
Inherited from AbstractObject3D
Returns : void
Protected recursionByName
recursionByName(currentNode: AbstractObject3D<any>, name: string)
Inherited from AbstractObject3D
Parameters :
Name Type Optional
currentNode AbstractObject3D<any> No
name string No
Returns : any
Public removeChild
removeChild(object: AbstractObject3D<any>)
Inherited from AbstractObject3D
Parameters :
Name Type Optional
object AbstractObject3D<any> No
Returns : void
Public removeChildByName
removeChildByName(name: string)
Inherited from AbstractObject3D
Parameters :
Name Type Optional
name string No
Returns : void
Public updateParent
updateParent()
Inherited from AbstractObject3D
Returns : void

Properties

Protected sourceSub
Type : Subscription
Protected targetSub
Type : Subscription
Protected childlren
Type : Array<AbstractObject3D<any>>
Default value : []
Inherited from AbstractObject3D
Protected object
Type : T
Inherited from AbstractObject3D
import {Directive, Input, OnDestroy} from '@angular/core';
import * as THREE from 'three';
import {AbstractObject3D} from '../abstract-object-3d';
import {Subscription} from 'rxjs';

@Directive()
export abstract class AbstractConnector<T extends THREE.Object3D> extends AbstractObject3D<THREE.Object3D> implements OnDestroy {

  @Input()
  source!: AbstractObject3D<THREE.Object3D>;

  @Input()
  target!: AbstractObject3D<THREE.Object3D>;

  protected sourceSub!: Subscription;
  protected targetSub!: Subscription;

  protected newObject3DInstance(): THREE.Object3D {
    const line = this.createLineMesh();
    if (this.source && this.target) {
      this.watchObjects();
    }
    return line;
  }

  private watchObjects() {
    this.sourceSub = this.source.changed.subscribe(() => {
      this.updateLineGeometry();
    });

    this.targetSub = this.target.changed.subscribe(() => {
      this.updateLineGeometry();
    });
  }

  public override ngOnDestroy() {
    super.ngOnDestroy();

    this.sourceSub?.unsubscribe();
    this.targetSub?.unsubscribe();
  }

  /**
   * Create line mesh
   */
  abstract createLineMesh(): T;

  /**
   * If at least one line end (source or target object)  changed, then line geoetry should be updated as well
   * // TODO: Calculate only when source/target positions were changed
   */
  abstract updateLineGeometry(): void;

}

results matching ""

    No results matching ""