UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

48 lines (42 loc) 1.89 kB
import type {OpenCascadeInstance, TopoDS_Vertex, gp_Pnt, CadGeometryType} from '../CadCommon'; import {BufferGeometry, BufferAttribute, Vector3} from 'three'; import {BaseSopOperation} from '../../../../../engine/operations/sop/_Base'; import {ObjectType} from '../../../Constant'; import {cadMaterialPoint} from '../CadConstant'; import {CadLoaderSync} from '../CadLoaderSync'; import {cadShapeClone} from './CadShapeCommon'; import {CadObject} from '../CadObject'; import {objectContentCopyProperties} from '../../../ObjectContent'; export function cadVertexToObject3D(cadObject: CadObject<CadGeometryType.VERTEX>) { const oc = CadLoaderSync.oc(); const vertex = cadObject.cadGeometry(); const point = oc.BRep_Tool.Pnt(vertex); const geo = new BufferGeometry(); const positions: number[] = [point.X(), point.Y(), point.Z()]; geo.setAttribute('position', new BufferAttribute(new Float32Array(positions), 3)); const object = BaseSopOperation.createObject(geo, ObjectType.POINTS, cadMaterialPoint()); objectContentCopyProperties(cadObject, object); return object; } export function cadVertexCreate(oc: OpenCascadeInstance, t: Vector3): TopoDS_Vertex { const point = new oc.gp_Pnt_3(t.x, t.y, t.z); return _vertexFromPoint(oc, point); } function _vertexFromPoint(oc: OpenCascadeInstance, point: gp_Pnt): TopoDS_Vertex { const api = new oc.BRepBuilderAPI_MakeVertex(point); const vertex = api.Vertex(); api.delete(); return vertex; } // export function cadVertexTransform(src: TopoDS_Vertex, t: Vector3) { // const oc = CadLoader.oc(); // const point = oc.BRep_Tool.Pnt(src); // point.SetX(point.X() + t.x); // point.SetY(point.Y() + t.y); // point.SetZ(point.Z() + t.z); // return _vertexFromPoint(oc, point); // } export function cadVertexClone(src: TopoDS_Vertex): TopoDS_Vertex { const oc = CadLoaderSync.oc(); return oc.TopoDS.Vertex_1(cadShapeClone(src)); }