@twinfinity/core
    Preparing search index...

    Class TwinfinityViewer

    Represents a TwinfinityViewer, which is responsible for rendering and interacting with a 3D scene. There can only be one TwinfinityViewer.

    Index

    Properties

    addOrUpdateProductOptions: {
        meshMerge: { deadline: number; sleepInMs: number };
    } = ...
    canvas: HTMLCanvasElement
    grid: GridOptions = ...
    keyboard: Keyboard
    onPointerObservable: Observable<DeepImmutableObject<PointerInfoWithTimings>> = ...

    Subscribe to get access to pointer events (mouse, touchpad etc) and to determine what (if anything) a mouse click interacted with (what object was 'picked' in the 3D scene).

    Performance options.

    scene: Scene
    statistics: {
        addOrUpdateProducts: {
            meshAllocateMemoryTime: number;
            meshCreationTime: number;
            meshMergeTime: number;
            totalTime: PerfCounter;
        };
        mesh: {
            count: PerfCounter;
            triangleCount: PerfCounter;
            verticeCount: PerfCounter;
        };
    } = ...
    visualSettings: PictureSettings

    Controls the visual settings of the viewer. See VisualSettings for more information.

    Visual settings are things like global lightning but also how transparency is handled for IFC objects etc.

    Accessors

    • get adaptiveMinZ(): boolean

      Controls wheter to automatically adapt the near plane of the camera to preserve precision when viewing far away IFC objects when there are no close IFC objects

      Returns boolean

    • set adaptiveMinZ(enabled: boolean): void

      Parameters

      • enabled: boolean

      Returns void

    • get axes(): boolean

      Returns boolean

    • set axes(isEnabled: boolean): void

      Parameters

      • isEnabled: boolean

      Returns void

    • get engine(): Engine

      Returns Engine

    • get globalLight(): HemisphericLight

      Returns HemisphericLight

      Should not be used, there should exist a API method for changing lighting Should this be removed? Is it used by Jaxel? Otherwise normal constructor injection should be used

    • get ifcRootNode(): TransformNode

      Returns TransformNode

    • get isSkyboxEnabled(): boolean

      Returns boolean

    • set isSkyboxEnabled(enabled: boolean): void

      Parameters

      • enabled: boolean

      Returns void

    • get isTouch(): boolean

      Returns boolean

    Methods

    • Adds a mesh to the scene based on the provided geometry. If a mesh with the same ID already exists, it will be removed and replaced with the new one.

      Parameters

      Returns Mesh

      Babylon mesh that was added

    • Adds or updates the environment settings for the viewer.

      Parameters

      • boundingInfo: BoundingInfo

        AABB. This method calculates the starting position for the camera based on the provided boundingInfo. It ensures that the entire boundingInfo is visible and sets the maximum z-coordinate of the camera to a value that allows everything to be visible. Additionally, it creates a skybox and sets its position and scaling based on the boundingInfo. The skybox is only visible if the isSkyboxEnabled property is set to true.

      Returns void

    • Adds or updates the environment settings for the viewer.

      Parameters

      • options: AddOrUpdateEnvironmentOptions

        The options for the environment settings. This method calculates the starting position for the camera based on the provided boundingInfo. It ensures that the entire boundingInfo is visible and sets the maximum z-coordinate of the camera to a value that allows everything to be visible. Additionally, it creates a skybox and sets its position and scaling based on the boundingInfo. The skybox is only visible if the isSkyboxEnabled property is set to true.

      Returns void

    • Returns IterableIterator<Mesh>

    • Returns void

    • Internal

      Returns void

    • Creates a renderer that that writes out the scenes depth to a render target texture which can be sampled for various uses like SSAO and line detection. Unlike Babylonjs standard depth renderer, this renderer applies a custom depth material to the IFC meshes to be able to dicard the depth writes for fragments that are invisible

      Parameters

      • storeNonLinearDepth: boolean

        Wheter or not the custom depth renderer material should write the depth linearly or logarithmic

      Returns ShortFrustumDepthRenderer

      The depth renderer

    • Enables or disables the debug layer. Will only be available if the module 'import "@twinfinity/core/internal/Debug' has also been added to the application. Adding it will generate extra .js files during bundling (which are quite large) and will increase build times. The extra files are loaded on demand though (when debug layer becomes enabled for the first time).

      Parameters

      • OptionalisEnabled: boolean

        true to enable. Otherwise false. If Not specified then current state of debug layer is returned.

      Returns Promise<boolean>

      Promise which when resolved is true if layer is enabled. Otherwise false

    • Diagnostic method to measure actual GPU buffer memory usage. Call from browser console: viewer.measureGpuBufferMemory()

      Returns { bufferCount: number; meshCount: number; totalBytes: number }

    • Parameters

      • pickingCamera: TargetCamera
      • textureSizePow2: number = 16
      • doIntersectionTestOnGeometry: boolean = false
      • saveRenderedGpuPickingSceneTexture: boolean = false

      Returns PickResult

      Use ViewerCamera.pick instead.

    • Enables or disables a clip plane, indexed from 1 to 6. Enabling a clip plane means that all geometry inside the clip plane will not be rendered. Note that this is only clipping for the IFC models, regular Babylon meshes needs to have clipping applied through the clip planes in Babylons scene Like this: https://doc.babylonjs.com/features/featuresDeepDive/scene/clipPlanes, the docs says that only 4 planes are available, but there are 6

      Parameters

      • clipPlaneOptions: ClipPlaneOptions

        An object with the options for enabling or disabling clip planes.

      Returns void

    • Set the currently used dither mode for solid objects that are dithered, never for transparent objects, even if the transparency mode is dithering

      Parameters

      • ditherDiscardDepth: boolean

        Wheter or not to discard fragments in the depth shader that are dithered, this is needed for transparent objects to not write to the depth buffer

      Returns void

    • Set the dither mode and animated frames used for dithering

      Parameters

      • ditherMode: DitheringTextureMode

        What dithering mode to use, bayer uses a bayer matrix to determine which pixels to render opaque, blue noise uses a blue noise texture

      • animatedFrames: number

        How many frames to use for the dithering animation when moving the camera, if 1 then no animation is used. Works best with Blue Noise

      Returns void

    • Changes how transparency is handled for transparent IFC objects

      Parameters

      • transparencyMode: TransparencyMode

        The type of rendering that will be used for all transparent IFC objects, dithering means that pixels are rendered opaque but skipping every few pixels in a screen pattern depending on the opacity Seethrough is normal alpha blending

      Returns void

    • Forces render loop to temporarily wake up if it is sleeping

      Returns void