@itwin/core-common
Version:
iTwin.js components common to frontend and backend
73 lines • 3.69 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
/** @packageDocumentation
* @module DisplayStyles
*/
/** Describes how to draw a plan projection model. A plan projection model is a [GeometricModel3d]($backend) whose geometry all lies in
* a single XY plane, wherein the Z coordinate of the plane may be arbitrary or flexible. Multiple plan projection models can be combined into one view
* and drawn as "layers" with relative priorities.
* @see [[DisplayStyle3dSettings.setPlanProjectionSettings]] to define plan projection settings for a [DisplayStyle3dState]($frontend).
* @see [GeometricModel3d.isPlanProjection]($backend).
* @public
*/
export class PlanProjectionSettings {
/** See [[PlanProjectionSettingsProps.elevation]] */
elevation;
/** See [[PlanProjectionSettingsProps.transparency]] */
transparency;
/** See [[PlanProjectionSettingsProps.overlay]] */
overlay;
/** See [[PlanProjectionSettingsProps.enforceDisplayPriority]] */
enforceDisplayPriority;
toJSON() {
return {
elevation: this.elevation,
transparency: this.transparency,
overlay: true === this.overlay ? true : undefined,
enforceDisplayPriority: true === this.enforceDisplayPriority ? true : undefined,
};
}
static fromJSON(props) {
if (undefined === props)
return undefined;
if (undefined === props.elevation && undefined === props.transparency && undefined === props.overlay && undefined === props.enforceDisplayPriority)
return undefined;
return new PlanProjectionSettings(props);
}
constructor(props) {
this.elevation = props.elevation;
this.overlay = true === props.overlay;
this.enforceDisplayPriority = true === props.enforceDisplayPriority;
let transparency = props.transparency;
if (undefined !== transparency)
transparency = Math.max(0, Math.min(1, transparency));
this.transparency = transparency;
}
/** Create a copy of this PlanProjectionSettings, optionally modifying some of its properties.
* @param changedProps JSON representation of the properties to change.
* @returns A PlanProjectionSettings with all of its properties set to match those of `this`, except those explicitly defined in `changedProps`.
*/
clone(changedProps) {
if (undefined === changedProps)
return this;
const props = this.toJSON();
if (undefined !== changedProps.elevation)
props.elevation = changedProps.elevation;
if (undefined !== changedProps.transparency)
props.transparency = changedProps.transparency;
if (undefined !== changedProps.overlay)
props.overlay = changedProps.overlay;
if (undefined !== changedProps.enforceDisplayPriority)
props.enforceDisplayPriority = changedProps.enforceDisplayPriority;
return new PlanProjectionSettings(props);
}
/** Return true if these settings are equivalent to the specified settings. */
equals(other) {
if (this === other)
return true;
return this.elevation === other.elevation && this.transparency === other.transparency && this.overlay === other.overlay && this.enforceDisplayPriority === other.enforceDisplayPriority;
}
}
//# sourceMappingURL=PlanProjectionSettings.js.map