File

projects/atft/src/lib/object/abstract-lazy-object-3d.ts

Extends

AbstractObject3D

Implements

OnDestroy

Index

Properties
Methods
Inputs
Outputs

Inputs

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

Protected afterInit
afterInit()
Inherited from AbstractObject3D
Returns : void
Protected Abstract loadLazyObject
loadLazyObject()

Abstract method for lazy loading

Returns : Promise<THREE.Object3D>
Protected newObject3DInstance
newObject3DInstance()
Inherited from AbstractObject3D
Returns : THREE.Object3D
ngOnDestroy
ngOnDestroy()
Inherited from AbstractObject3D
Returns : void
Protected startLoading
startLoading()
Returns : void
Public addChild
addChild(object: AbstractObject3D<any>)
Inherited from AbstractObject3D
Parameters :
Name Type Optional
object AbstractObject3D<any> No
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 lazyObject
Type : THREE.Object3D | undefined

This is reference to lazy loaded Object3D (async after init)

Private parentInitialized
Default value : false

Flag to signal whether the parentScene class instance AbstractObject3D called the overwritten method AbstractModelLoader yet.

Unless that method was called, no methods and properties of AbstractObject3D may be safely accessed, especially AbstractObject3D and AbstractObject3D.renderer.

Protected childlren
Type : Array<AbstractObject3D<any>>
Default value : []
Inherited from AbstractObject3D
Protected object
Type : T
Inherited from AbstractObject3D
import {Directive, OnDestroy} from '@angular/core';

import {AbstractObject3D} from './abstract-object-3d';

import * as THREE from 'three';

@Directive()
// eslint-disable-next-line @angular-eslint/directive-class-suffix
export abstract class AbstractLazyObject3D extends AbstractObject3D<THREE.Object3D> implements OnDestroy {

  /**
   * Flag to signal whether the parentScene class instance AbstractObject3D called the
   * overwritten method {@link AbstractModelLoader#afterInit} yet.
   *
   * Unless that method was called, no methods and properties of {@link AbstractObject3D}
   * may be safely accessed, especially {@link AbstractObject3D#addChild} and
   * {@link AbstractObject3D.renderer}.
   */
  private parentInitialized = false;

  /**
   * This is reference to lazy loaded Object3D (async after init)
   */
  protected lazyObject: THREE.Object3D | undefined;


  /**
   * Abstract method for lazy loading
   *
   */
  protected abstract loadLazyObject(): Promise<THREE.Object3D>;

  protected override afterInit() {
    super.afterInit();
    this.parentInitialized = true;
    this.startLoading();
  }

  protected startLoading() {
    // console.log('AbstractLazyObject3D.startLoading', this.name + ' / '+this.parentInitialized);
    // Trigger model acquisition now that the parentScene has been initialized.
    this.loadLazyObject().then(obj => {
      // console.log('AbstractLazyObject3D loaded');
      // remove old if exists
      if (this.lazyObject) {
        super.getObject().remove(this.lazyObject);
      }

      // add lazy object to scene
      this.lazyObject = obj;
      super.getObject().add(obj);

      this.rendererService.render();
      setTimeout(() => {
        this.rendererService.render();
      }, 10);
    }).catch(err => {
      console.error(err);
    });
  }

  override ngOnDestroy(): void {
    if (this.lazyObject) {
      super.getObject().remove(this.lazyObject);
    }
  }

  protected newObject3DInstance(): THREE.Object3D {
    // Just empty object (holder of lazy object)
    return new THREE.Object3D();
  }

}

results matching ""

    No results matching ""