@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
100 lines (93 loc) • 3.36 kB
text/typescript
import {Matrix4, Box3, Sphere, Vector3} from 'three';
import {BaseCoreObject} from '../../entities/object/BaseCoreObject';
import {CoreObjectType, MergeCompactOptions, ObjectContent} from '../../ObjectContent';
import {TransformTargetType} from '../../../Transform';
import {ObjectTransformMode, ObjectTransformSpace} from '../../../TransformSpace';
import {TetObject} from './TetObject';
import {TetVertex} from './TetVertex';
import {ObjectData} from '../../Constant';
import {objectData} from '../../entities/object/BaseCoreObjectUtils';
const _bbox = new Box3();
export class TetCoreObject extends BaseCoreObject<CoreObjectType.TET> {
protected override _object: TetObject;
constructor(_object: TetObject, index: number) {
super(_object, index);
this._object = _object;
}
static override position(object: TetObject, target: Vector3) {
object.boundingBox(_bbox);
_bbox.getCenter(target);
}
override boundingBox(target: Box3) {
this._object.boundingBox(target);
}
override boundingSphere(target: Sphere) {
this._object.boundingSphere(target);
}
static override objectData<T extends CoreObjectType>(object: ObjectContent<T>): ObjectData {
const data = objectData(object);
const tetObject = object as any as TetObject;
data.pointsCount = tetObject.geometry.pointsCount();
data.verticesCount = TetVertex.entitiesCount(object);
data.primitivesCount = tetObject.geometry.tetsCount();
data.primitiveName = 'tetrahedron';
return data;
}
static override applyMatrix(
object: TetObject,
matrix: Matrix4,
transformTargetType: TransformTargetType,
transformSpace: ObjectTransformSpace,
transformMode: ObjectTransformMode
) {
object.applyMatrix4(matrix);
// switch (transformTargetType) {
// case TransformTargetType.GEOMETRY: {
// return csgApplyMatrix4(object.csgGeometry(), matrix);
// }
// case TransformTargetType.OBJECT: {
// return object.applyMatrix4(matrix);
// }
// }
// TypeAssert.unreachable(transformTargetType);
}
static override mergeCompact(options: MergeCompactOptions) {
console.warn('mergeCompact not implemented');
// const {objects, material, mergedObjects, onError} = options;
// try {
// const csgObjects = objects as TetObject[];
// const firstObject = csgObjects[0];
// if (!firstObject) {
// return;
// }
// const geometries = csgObjects.map((o) => o.csgGeometry());
// const geom2s: geometries.geom2.Geom2[] = [];
// const geom3s: geometries.geom3.Geom3[] = [];
// for (let geometry of geometries) {
// if (csgIsGeom2(geometry)) {
// geom2s.push(geometry);
// }
// if (csgIsGeom3(geometry)) {
// geom3s.push(geometry);
// }
// }
// const _merge = (typedGeometries: Array<geometries.geom2.Geom2> | Array<geometries.geom3.Geom3>) => {
// if (typedGeometries.length == 0) {
// return;
// }
// typedGeometries.forEach(csgApplyTransform);
// const mergedGeom = union(typedGeometries as Array<geometries.geom2.Geom2>);
// const newObject = new CsgObject(mergedGeom);
// objectContentCopyProperties(firstObject, newObject);
// if (material) {
// newObject.material = material;
// }
// mergedObjects.push(newObject);
// };
// _merge(geom2s);
// _merge(geom3s);
// } catch (e) {
// onError((e as Error).message || 'unknown error');
// }
}
}