@novorender/api / View
Class: View<CameraControllerTypes, CameraControllerKind>
Defined in: @novorender/src/web_app/view.ts:90
A view base class for Novorender content.
Template
Types of camera controllers used by this view.
Remarks
The view class wraps the complexities of the Core3D
module into a high-level abstraction.
Notably, it implements a render loop in the run function, which deals with a number of issues, such as:
- Camera controllers.
- Rendering after state changes, saving energy and battery life.
- Adjust to resizing of canvas element.
- Managing idle vs active rendering, i.e. lower fidelity rendering while the camera is moving for better frame rates.
- Adaptive performance adjustment to maintain a target frame rate target.
- Post effects.
In the likely event that you want to change or extend some of the default behaviour, you should make a derived View class of your own and override the methods you need.
Type Parameters
Type Parameter | Default type | Description |
---|---|---|
CameraControllerTypes extends CameraControllers | BuiltinCameraControllerType | - |
CameraControllerKind extends string | Extract <keyof CameraControllerTypes , string > | The inferred camera controller kind string union. |
Implements
Disposable
Accessors
activeController
Get Signature
get activeController(): BaseController;
Defined in: @novorender/src/web_app/view.ts:248
Returns
convert
Get Signature
get convert(): ScreenSpaceConversions;
Defined in: @novorender/src/web_app/view.ts:291
Convert between different spaces like world, view and screen.
Returns
data
Get Signature
get data(): undefined | DataContext;
Defined in: @novorender/src/web_app/view.ts:235
Get the current data context, or undefined if no scene has been loaded or has no meta data.
See
loadSceneFromURL.
Returns
undefined
| DataContext
deviceProfile
Get Signature
get deviceProfile(): DeviceProfile;
Defined in: @novorender/src/web_app/view.ts:278
The current device profile.
Remarks
Setting a new device profile will force a recreation of the entire render context and should generally be avoided. Valid cases for doing so might be users manually overriding the GPU profile of their device, or for testing/diagnostics purposes.
Returns
Set Signature
set deviceProfile(value): void;
Defined in: @novorender/src/web_app/view.ts:281
Parameters
Parameter | Type |
---|---|
value | DeviceProfile |
Returns
void
measure
Get Signature
get measure(): undefined | MeasureView;
Defined in: @novorender/src/web_app/view.ts:227
Get the current measure view, or undefined if no scene has been loaded or has no measurement data.
See
loadSceneFromURL.
Returns
undefined
| MeasureView
offline
Get Signature
get offline(): undefined | OfflineContext;
Defined in: @novorender/src/web_app/view.ts:243
Get the current offline context, or undefined if no scene has been loaded.
See
loadSceneFromURL.
Returns
undefined
| OfflineContext
prevRenderState
Get Signature
get prevRenderState(): undefined | RenderState;
Defined in: @novorender/src/web_app/view.ts:263
Returns
undefined
| RenderState
renderContext
Get Signature
get renderContext(): undefined | RenderContext;
Defined in: @novorender/src/web_app/view.ts:253
Returns
undefined
| RenderContext
renderState
Get Signature
get renderState(): RenderState;
Defined in: @novorender/src/web_app/view.ts:258
Returns
statistics
Get Signature
get statistics():
| undefined
| {
render: RenderStatistics;
view: ViewStatistics;
};
Defined in: @novorender/src/web_app/view.ts:268
Returns
| undefined
| {
render
: RenderStatistics
;
view
: ViewStatistics
;
}
Constructors
Constructor
new View<CameraControllerTypes, CameraControllerKind>(
canvas,
deviceProfile,
controllersFactory,
__namedParameters): View<CameraControllerTypes, CameraControllerKind>;
Defined in: @novorender/src/web_app/view.ts:156
Parameters
Parameter | Type | Description |
---|---|---|
canvas | HTMLCanvasElement | The HtmlCanvasElement used for rendering. |
deviceProfile | DeviceProfile | The device profile describing the host device's GPU performance characteristics and limitations. |
controllersFactory | CameraControllersFactory <CameraControllerTypes > | - |
__namedParameters | { listenToDocumentEvents? : boolean ; showWatermark? : boolean ; } | - |
__namedParameters.listenToDocumentEvents? | boolean | - |
__namedParameters.showWatermark? | boolean | - |
Returns
View
<CameraControllerTypes
, CameraControllerKind
>
Remarks
Your browser must run in a secure and cross-origin isolated context.
Methods
[dispose]()
dispose: void;
Defined in: @novorender/src/web_app/view.ts:212
Dispose of the view's GPU resources.
Returns
void
Implementation of
Disposable.[dispose]
animate()?
optional animate(time): void;
Defined in: @novorender/src/web_app/view.ts:1370
Override this in a derived class to modify render state just prior to rendering.
Parameters
Parameter | Type | Description |
---|---|---|
time | number | The frame render timestamp in millisecond. |
Returns
void
assignTextureSlot()
assignTextureSlot(texture): TextureSlot;
Defined in: @novorender/src/web_app/view.ts:1400
Helper function for assigning an index to the specified texture reference.
Parameters
Parameter | Type | Description |
---|---|---|
texture | RenderStateTextureReference | Texture reference to assign index to. |
Returns
A valid texture index slot and a flag indictating whether the slot existed or not.
Remarks
This function check if the reference object already exists in the current render state and if so, return the existing index. If not, it will find the first available slot that currently has no references, i.e. no highlight groups referring to it. In the latter case, it will update the render state to reflect the new texture reference. If the maximum amount of textures MaxActiveTextures are exceeded, this function will throw an exception.
availableEnvironments()
availableEnvironments(indexUrl): Promise<readonly EnvironmentDescription[]>;
Defined in: @novorender/src/web_app/view.ts:384
Parameters
Parameter | Type |
---|---|
indexUrl | URL |
Returns
Promise
<readonly EnvironmentDescription
[]>
Deprecated
Use static View.availableEnvironments instead.
availableTextures()
availableTextures(indexUrl): Promise<readonly TextureDescription[]>;
Defined in: @novorender/src/web_app/view.ts:417
Retrieve list of available textures.
Parameters
Parameter | Type | Description |
---|---|---|
indexUrl | URL | The absolute url of the index.json file. |
Returns
Promise
<readonly TextureDescription
[]>
A promise of a list of environments.
dispose()
dispose(): void;
Defined in: @novorender/src/web_app/view.ts:217
Dispose of the view's GPU resources.
Returns
void
exit()
exit(): void;
Defined in: @novorender/src/web_app/view.ts:1332
Signal the render loop to exit.
Returns
void
See
run.
Deprecated
Use run abortSignal
instead.
getNonParametricEdgeDirAtPoints()
getNonParametricEdgeDirAtPoints(points, tolerance): Promise<undefined | (null | ReadonlyVec3)[]>;
Defined in: @novorender/src/web_app/view.ts:971
For each point find an edge nearby:
- If point is close to an edge of object with the same objectId - return that edge direction.
- If point is close to another triangle - return cross product of that triangle's normal and the point's normal. Function can be used to find edge directions for points on the surface of a mesh e.g. to have nice laser line endings.
Parameters
Parameter | Type | Description |
---|---|---|
points | object [] | points to query, each point should contain a position, normal and objectId |
tolerance | number | maximum distance to the edge or other triangle |
Returns
Promise
<undefined
| (null
| ReadonlyVec3
)[]>
array of edge directions or nulls, same size as points
getObjectsOutlinePlaneBoundingRectInWorld()
getObjectsOutlinePlaneBoundingRectInWorld(
planeType,
planeIndex,
objectIds): undefined | AABB;
Defined in: @novorender/src/web_app/view.ts:852
Find bounding rectangle on the given plane for the selected objects, converted to world coordinates.
Parameters
Parameter | Type | Description |
---|---|---|
planeType | "clipping" | "outline" | choose if planes under clipping or outlines should be used |
planeIndex | number | the index of the plane to look up |
objectIds | Set <number > | set of object IDs to check |
Returns
undefined
| AABB
bounding rectangle of all the selected object ID vertices lying on the give plane. Bounds are calculated in plane coordinates and returned in world coordinates
getOfflineViewState()
getOfflineViewState(): Promise<undefined | OfflineViewState>;
Defined in: @novorender/src/web_app/view.ts:299
Manage offline storage.
Returns
Promise
<undefined
| OfflineViewState
>
An offline view state context used for offline storage management UI.
getOutlineDrawObjects()
getOutlineDrawObjects(
planeType,
planeIndex,
drawContext?,
settings?,
filter?): DrawProduct[];
Defined in: @novorender/src/web_app/view.ts:740
Get current outline drawable objects.
Parameters
Parameter | Type | Description |
---|---|---|
planeType | "clipping" | "outline" | choose if planes under clipping or outlines should be used |
planeIndex | number | the index of the plane to look up |
drawContext? | DrawContext | Option to convert the 2d positions to another draw context |
settings? | LinesDrawSetting | - |
filter? | Set <number > | - |
Returns
Outlines as drawable objects for the 2d egnine.
getOutlineObjectsOnScreen()
getOutlineObjectsOnScreen(): Set<number>;
Defined in: @novorender/src/web_app/view.ts:942
Get all object ids currently on screen
Returns
Set
<number
>
returns a set of all object ids on the screen
inspectDeviations()
inspectDeviations(settings): Promise<
| undefined
| DeviationInspections>;
Defined in: @novorender/src/web_app/view.ts:587
Inspect the deviations that is on screen
Parameters
Parameter | Type | Description |
---|---|---|
settings | DeviationInspectionSettings | Deviation settings, |
Returns
Promise
<
| undefined
| DeviationInspections
>
Spaced out labels prioritizing the smallest or highest deviation values based on settings. Also returns a line trough the points if it is able to project the points on a line and the option is given.
isSceneResolved()
isSceneResolved(): boolean;
Defined in: @novorender/src/web_app/view.ts:318
The scene is considered resolved when it is done loading all nodes for the current render state.
Returns
boolean
if the scene is currently resolved
isTopDown()
isTopDown(): boolean;
Defined in: @novorender/src/web_app/view.ts:306
Determine if camera is looking straight down.
Returns
boolean
loadScene()
loadScene(
baseUrl,
sceneId,
version,
abortSignal?): Promise<SceneConfig>;
Defined in: @novorender/src/web_app/view.ts:468
Load a scene.
Parameters
Parameter | Type | Description |
---|---|---|
baseUrl | URL | The absolute base url to the folder containing the scenes with optional sas-key, e.g. https://blobs.novorender.com/?sv=... . |
sceneId | string | The scene id/guid. |
version | string | The hash of the desired scene version. |
abortSignal? | AbortSignal | Optional abort controller. |
Returns
Promise
<SceneConfig
>
Remarks
The url typically contains the scene id as the latter part of the path, i.e. https://.../<scene_guid>/
.
modifyRenderState()
modifyRenderState(changes): void;
Defined in: @novorender/src/web_app/view.ts:1341
Accumulate render state changes.
Parameters
Parameter | Type | Description |
---|---|---|
changes | RenderStateChanges | The changes to apply to the current view render state. |
Returns
void
Remarks
These changes will be applied and a single call to the modifyRenderState function just prior to rendering each frame.
outlineLaser()
outlineLaser(
laserPosition,
planeType,
planeIndex,
rotation?,
autoAlign?): undefined | Intersection;
Defined in: @novorender/src/web_app/view.ts:660
Create a list of intersections between the x and y axis through the tracer position
Parameters
Parameter | Type | Description |
---|---|---|
laserPosition | ReadonlyVec3 | position where to calculate intersections, |
planeType | "clipping" | "outline" | choose if planes under clipping or outlines should be used |
planeIndex | number | The index of the plane where tracer should be placed, based on the list in render state |
rotation? | number | rotation of the lasers in the plane, if undefined then x,y will be used |
autoAlign? | "closest" | "model" | Auto align the lasers to the geometry, "model" will try to align to the highest number of lines it will intersect with while "closest" will align to the closest line it intersects with |
Returns
undefined
| Intersection
list of intersections (right, left, up ,down) results will be ordered from closest to furthest from the tracer point
pick()
pick(
x,
y,
options?): Promise<undefined | PickSampleExt>;
Defined in: @novorender/src/web_app/view.ts:1009
Query object and geometry information for given view coordinate.
Parameters
Parameter | Type | Description |
---|---|---|
x | number | Center x coordinate in css pixels. |
y | number | Center y coordinate in css pixels. |
options? | PickOptions | Extra options. |
Returns
Promise
<undefined
| PickSampleExt
>
The sample within the sample disc that is closest to the camera, if any.
pickMeasureEntity()
pickMeasureEntity(
x,
y,
options?): Promise<undefined | MeasureEntity>;
Defined in: @novorender/src/web_app/view.ts:988
Query parametric measure entity for the given coordinates
Parameters
Parameter | Type | Description |
---|---|---|
x | number | Center x coordinate in css pixels. |
y | number | Center y coordinate in css pixels. |
options? | PickOptions | Extra options. |
Returns
Promise
<undefined
| MeasureEntity
>
Parametric measure entity, if non exists in the current location, the poisiton will be retuned.
render()?
optional render(params): void;
Defined in: @novorender/src/web_app/view.ts:1387
Override this in a derived class for custom rendering of e.g. 2D content, such as text and lines etc.
Parameters
Parameter | Type |
---|---|
params | { cameraMoved : boolean ; isIdleFrame : boolean ; } |
params.cameraMoved | boolean |
params.isIdleFrame | boolean |
Returns
void
run()
run(abortSignal?): Promise<void>;
Defined in: @novorender/src/web_app/view.ts:1182
Start the main render loop for the view.
Parameters
Parameter | Type | Description |
---|---|---|
abortSignal? | AbortSignal | Signal to abort any pending downloads and exit render loop. |
Returns
Promise
<void
>
Remarks
This method will not exit until you signal the abortSignal.
screenSpaceLaser()
screenSpaceLaser(__namedParameters): undefined | Intersection;
Defined in: @novorender/src/web_app/view.ts:613
Create list of laser intersections based on information already on screen
Parameters
Parameter | Type |
---|---|
__namedParameters | { autoAlign? : boolean ; laserPosition : ReadonlyVec3 ; onlyOnOutlines : boolean ; xDir? : ReadonlyVec3 ; yDir? : ReadonlyVec3 ; zDir? : ReadonlyVec3 ; } |
__namedParameters.autoAlign? | boolean |
__namedParameters.laserPosition | ReadonlyVec3 |
__namedParameters.onlyOnOutlines | boolean |
__namedParameters.xDir? | ReadonlyVec3 |
__namedParameters.yDir? | ReadonlyVec3 |
__namedParameters.zDir? | ReadonlyVec3 |
Returns
undefined
| Intersection
list of intersections (right, left, up ,down, zUp, zDown) the lists will either contain a single intersection or none, the zDown will always be the laser position.
selectOutlinePoint()
selectOutlinePoint(position, threshold): undefined | vec3;
Defined in: @novorender/src/web_app/view.ts:908
Select outline point based on the proximity to the input point.
Parameters
Parameter | Type | Description |
---|---|---|
position | ReadonlyVec3 | Input position, outline points will be tested againts this. |
threshold | number | Threshold in meters, if no points are within this proxmitiy of the input point undefined will be returned |
Returns
undefined
| vec3
returns the closest point to the input position.
setRenderContext()
protected readonly setRenderContext(context): void;
Defined in: @novorender/src/web_app/view.ts:1445
Callback function to update render context.
Parameters
Parameter | Type | Description |
---|---|---|
context | RenderContext | A new render context. |
Returns
void
Remarks
A new render context may be set each time the underlying webgl context is lost and restored, or when certain state changes are made that forces a recreation of the context, such as setting a new deviceProfile.
switchCameraController()
switchCameraController<T>(
kind,
initialState?,
options?): Promise<CameraControllerTypes[T]>;
Defined in: @novorender/src/web_app/view.ts:1106
Switch to a new kind of camera controller.
Type Parameters
Type Parameter | Description |
---|---|
T extends string | Kind of camera controller. |
Parameters
Parameter | Type | Description |
---|---|---|
kind | T | The type of camera controller to switch to. |
initialState? | CameraControllerInitialValues | Optional initial state for the new camera controller. Undefined properties will be copied/adapted from the current render state. |
options? | CameraControllerOptions | Switch options. |
Returns
Promise
<CameraControllerTypes
[T
]>
The new camera controller.
Remarks
The function will also set the camera projection model.
validate()?
optional validate(newState, changes): void;
Defined in: @novorender/src/web_app/view.ts:1378
Override this in a derived class to handle render state validation.
Parameters
Parameter | Type | Description |
---|---|---|
newState | RenderState | The new render state about to be rendered |
changes | RenderStateChanges | The changes that went into the new render state. |
Returns
void
validateRenderState()
validateRenderState(changes?): readonly Error[];
Defined in: @novorender/src/web_app/view.ts:1357
Validate render state changes made since last rendered frame.
Parameters
Parameter | Type | Description |
---|---|---|
changes? | RecursivePartial <RenderState > | The render state changes to validate, or undefined to validate changes applied via View.modifyRenderState since last rendered frame. |
Returns
readonly Error
[]
An array of validation errors, if any.
See
Remarks
Validation is useful for catching potential bugs and problems early. It should not be performed in production code, however, since it is non-trivial in terms of performance, particularly on large sets of dynamic objects.
worldPositionFromPixelPosition()
worldPositionFromPixelPosition(x, y): undefined | vec3;
Defined in: @novorender/src/web_app/view.ts:329
Convert 2D pixel position to 3D position.
Parameters
Parameter | Type | Description |
---|---|---|
x | number | Pixel x coordinate, in CSS pixels. |
y | number | Pixel y coordinate, in CSS pixels. |
Returns
undefined
| vec3
Corresponding 3D position at the view plane in world space, or undefined if there is no active render context.
Deprecated
use view.convert.screenSpaceToWorldSpace instead
availableEnvironments()
static availableEnvironments(indexUrl): Promise<readonly EnvironmentDescription[]>;
Defined in: @novorender/src/web_app/view.ts:365
Retrieve list of available background/IBL environments.
Parameters
Parameter | Type | Description |
---|---|---|
indexUrl | URL | The absolute url of the index.json file. |
Returns
Promise
<readonly EnvironmentDescription
[]>
A promise of a list of environments.
environmentRequests()
static environmentRequests(...environments): readonly Request[];
Defined in: @novorender/src/web_app/view.ts:396
Retrieve list of network requests for given environment(s) for cache/offline purposes.
Parameters
Parameter | Type | Description |
---|---|---|
...environments | readonly EnvironmentDescription [] | The environment description objects. |
Returns
readonly Request
[]
Remarks
The returned requests are suitable for Cache API.
textureRequests()
static textureRequests(...textures): readonly Request[];
Defined in: @novorender/src/web_app/view.ts:447
Retrieve list of network requests for given texture(s) for cache/offline purposes.
Parameters
Parameter | Type |
---|---|
...textures | readonly TextureDescription [] |
Returns
readonly Request
[]
Remarks
The returned requests are suitable for Cache API.
Properties
canvas
readonly canvas: HTMLCanvasElement;
Defined in: @novorender/src/web_app/view.ts:158
The HTMLCanvasElement used for rendering.
controllers
controllers: CameraControllerTypes;
Defined in: @novorender/src/web_app/view.ts:102
Available camera controller types.
maxHighlightGroups
readonly static maxHighlightGroups: 250 = 250;
Defined in: @novorender/src/web_app/view.ts:99
terrainMaxId
readonly static terrainMaxId: 99 = 99;
Defined in: @novorender/src/web_app/view.ts:98