@inweb/viewer-visualize
Version:
JavaScript library for rendering CAD and BIM files in a browser using VisualizeJS
147 lines (126 loc) • 4.26 kB
text/typescript
///////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2002-2025, Open Design Alliance (the "Alliance").
// All rights reserved.
//
// This software and its documentation and related materials are owned by
// the Alliance. The software may only be incorporated into application
// programs owned by members of the Alliance, subject to a signed
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable
// trade secrets of the Alliance and its suppliers. The software is also
// protected by copyright law and international treaty provisions. Application
// programs incorporating this software must include the following statement
// with their copyright notices:
//
// This application incorporates Open Design Alliance software pursuant to a
// license agreement with Open Design Alliance.
// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.
// All rights reserved.
//
// By use of this software, its documentation or related materials, you
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
import { Matrix3d, OdTvPlane, Point3d, Vector3d } from "./Geometry";
export type ViewParams = {
position: number[];
target: number[];
upVector: number[];
viewFieldWidth: number;
viewFieldHeight: number;
perspective: boolean;
};
export class OdaGeAction {
protected m_module;
constructor(module: any) {
this.m_module = module;
}
protected getViewer(): any {
return this.m_module.getViewer();
}
protected getModel(): any {
return this.getViewer().getMarkupModel();
}
protected copyPoint(point: Point3d): Point3d {
const p: Point3d = new this.m_module.Point3d();
p.set(point.x, point.y, point.z);
return p;
}
protected createVector3d(): Vector3d {
return new this.m_module.Vector3d();
}
protected createPoint3d(): Point3d {
return new this.m_module.Point3d();
}
protected createMatrix3d(): Matrix3d {
return new this.m_module.Matrix3d();
}
protected createPlane(): OdTvPlane {
return new this.m_module.OdTvPlane();
}
protected toVector(geVector): Vector3d {
return this.m_module.Vector3d.createFromArray(geVector);
}
protected toGeVector(v: Vector3d): number[] {
return [v.x, v.y, v.z];
}
protected toGePoint(point: Point3d): number[] {
return [point.x, point.y, point.z];
}
protected toPoint(gePoint: number[]): Point3d {
return this.m_module.Point3d.createFromArray(gePoint);
}
protected screenToWorld(x: number, y: number): Point3d {
return this.toPoint(this.m_module.getViewer().screenToWorld(x, y));
}
protected toDoubleArray(points: Point3d[]): number[] {
const p: number[] = [];
for (let i = 0; i < points.length; i++) {
p.push(points[i].x);
p.push(points[i].y);
p.push(points[i].z);
}
return p;
}
protected correctCameraTarget(): void {
const params = this.getViewParams();
const ext = this.m_module.getViewer().getActiveExtents();
const { min, max } = ext;
const target = this.toPoint(params.target);
const contains =
target.x >= min.x &&
target.y >= min.y &&
target.z >= min.z &&
target.x <= max.x &&
target.y <= max.y &&
target.z <= max.z;
if (!contains) {
params.target = ext.center();
this.setViewParams(params);
}
}
protected setViewParams = (params: ViewParams) => {
const extView = this.m_module.getViewer().getActiveTvExtendedView();
extView.setView(
params.position,
params.target,
params.upVector,
params.viewFieldWidth,
params.viewFieldHeight,
params.perspective
);
extView.delete?.();
};
protected getViewParams = () => {
const view = this.m_module.getViewer().activeView;
const obj = {
position: view.viewPosition,
target: view.viewTarget,
upVector: view.upVector,
viewFieldWidth: view.viewFieldWidth,
viewFieldHeight: view.viewFieldHeight,
perspective: view.perspective,
} as ViewParams;
view.delete?.();
return obj;
};
}