/** @module MxDrawObject */ import MxCADObject from '../MxCADObject'; import MxDbDatabase from '../MxDbDatabase'; import MxDbEntity from '../MxDbEntity'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'; export interface MxDrawObjectType { renderer: THREE.WebGLRenderer; addEvent(arg0: string, arg1: (...parmes: any) => any): void; setIniset(arg0: { EnableOsnapFunction: boolean; }): void; getScene(): THREE.Scene; getCamera(): THREE.Camera; setMouseRightRotate(isRotate: boolean): void; getFullDisplayRange(): object; getCanvas(): HTMLCanvasElement; updateDisplay(): void; createCanvasImageData(fun: (imageData: string) => void, param?: object): void; setViewColor(color: number): void; setSize(width: number, height: number): void; getIntersectObjects(ptMouse: THREE.Vector2): THREE.Intersection[]; getViewWidth(): number; getViewHeight(): number; zoomInitialStates(): void; zoomScale(scale: number): void; zoomW(minPt: THREE.Vector3, maxPt: THREE.Vector3, isWorld?: boolean): void; zoomCenter(dCenX: number, dCenY: number): void; initZoomW(pt1Doc: THREE.Vector3, pt2Doc: THREE.Vector3): void; addMxEntity(ent: any): number; eraseMxEntity(id: number): boolean; screenCoord2World(x: number, y: number, z?: number): THREE.Vector3; worldCoord2Screen(x: number, y: number, z: number): THREE.Vector3; screenCoord2Doc(x: number, y: number, z: number): THREE.Vector3; worldCoordLong2Doc(l: number): number; docCoordLong2World(l: number): number; docCoord2World(x: number, y: number, z: number): THREE.Vector3; worldCoord2Doc(x: number, y: number, z: number): THREE.Vector3; docCoord2Screen(x: number, y: number, z: number): THREE.Vector3; screenCoordLong2Doc(l: number): number; docCoordLong2Screen(l: number): number; screenCoordLong2World(l: number): number; worldCoordLong2Screen(l: number): number; initRendererParam(param: object): void; getMxAllSelect(): Array; addMxCurrentSelect(id: number): void; clearMxCurrentSelect(): boolean; getMxEntityUserObject(id: number): MxDbEntity; findMxEntityAtPoint(ptMouse: THREE.Vector3, isDocCoord?: boolean, retWordDrawXDataCall?: (id: number, data: any) => void): Array; setMouseMiddlePan(isPan: boolean | number): void; resetThreeJSControls(): void; getAllMxEntity(): Array; enableZoom(isEnable: boolean): void; enablePan(isEnable: boolean): void; addObject(obj: THREE.Object3D | null, isAddToSelect?: boolean): void; addViewObject(obj: THREE.Object3D): void; removeViewObject(obj: THREE.Object3D): void; removeObject(obj: THREE.Object3D, isRemoveSelectObject?: boolean): void; saveMxEntityToJson(isSaveToDWG?: boolean): object; loadMxEntityFromJson(dataString: object): Promise; eraseAllMxEntity(): void; makeCurrent(): void; getViewCenterDocCoord(): THREE.Vector3; updateCanvasSize(): void; } /** * 引入mxdraw库不会挂载MxDrawObject 只能在以下特定函数中获取 * @function * {@link MxFun.createMxObject}中callback回调参数`mxDraw`的构造类 * @function * {@link MxFun.getCurrentDraw} 方法返回值的构造类 * @function * {@link MxFun.getCurrentMxCAD} 方法返回值的构造类 * */ export default class MxDrawObject { private _mxdrawObj; constructor(Mxdraw: MxDrawObjectType); /** * @instance */ renderer: THREE.WebGLRenderer; /** * 获取Three.js绘图场景 * @returns THREE.Scene */ getScene(): THREE.Scene; /** * 获取Three.js相机对象 * @returns THREE.Camera */ getCamera(): THREE.Camera; /** * 获取Three renderer渲染器 * @returns THREE.WebGLRenderer */ getRenderer(): THREE.WebGLRenderer; /** * 设置鼠标按下是否旋视区 * @param isRotate 是否旋视区 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().setMouseRightRotate(false) * ``` * */ setMouseRightRotate(isRotate?: boolean): void; /** * 得到全部显示所有图形所需要的显示的范围 ,Three.js的坐标系。world坐标。 * @returns {minPt: value,maxPt: value} * @example * ```typescript * Mx.MxFun.getCurrentDraw().getFullDisplayRange() * ``` */ getFullDisplayRange(): object; /** * 获取Canvas对象. * @returns HTMLCanvasElement */ getCanvas(): HTMLCanvasElement; /** * 通知Three.js更新显示 * @returns void */ updateDisplay(): void; /** * 通知Three.js生成ImgeData显示I数据. * @param fn 回调函数或者imageData * @param param 函数载荷 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().createCanvasImageData((imageData)=> { * console.log(imageData) * }) * ``` */ createCanvasImageData(fn: (imageData: string) => void, param?: object): void; /** * 设置视区背景色, * @param color 如0xFFFFFF 白色 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().setViewColor(0xFFFFFF) * ``` */ setViewColor(color: number): void; /** * 设置视区背景色, * @param width 宽度 * @param height 宽度 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().setSize(0xFFFFFF) * ``` */ setSize(width: number, height: number): void; /** * 获取某屏幕点下的绘制对象,ptMouse是., * @param ptMouse THREE.Vector2 屏幕坐标 * @returns THREE.Intersection[] * @example * ```typescript * Mx.MxFun.getCurrentDraw().getIntersectObjects(new THREE.Vector2(2, 3)) * ``` */ getIntersectObjects(ptMouse: THREE.Vector2): THREE.Intersection[]; /** * 添加THREE.Object3D对象到当前场景 * @param obj THREE.Object3D * @param isAddToSelect 默认值为true 是否把对象添加选择对象集中,调用 getIntersectObjects可以找到 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().addObject(new THREE.Object3D(), false) * ``` */ addObject(obj: THREE.Object3D, isAddToSelect?: boolean): void; /** * 添加THREE.Object3D对象到视区场景,对象坐标系是窗口视区坐标系。0,0点在左下角. * @param obj THREE.Object3D * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().addViewObject(new THREE.Object3D()) * ``` */ addViewObject(obj: THREE.Object3D): void; /** * 得到对象画布的宽度,单位屏幕像素 * @returns number * @example * ```typescript * Mx.MxFun.getCurrentDraw().getViewWidth() * ``` */ getViewWidth(): number; /** * 得到对象画布的高度,单位屏幕像素 * @returns number * @example * ```typescript * Mx.MxFun.getCurrentDraw().getViewHeight() * ``` */ getViewHeight(): number; /** * 删除addObject函数添加的THREE.Object3D对象 * @param obj THREE.Object3D * @param isRemoveSelectObject 默认值为true 删除选择集中的对象 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().removeObject(new THREE.Object3D(), false) * ``` */ removeObject(obj: THREE.Object3D, isRemoveSelectObject?: boolean): void; /** * 把视区显示范围恢复到初始显示范围. * @returns void */ zoomInitialStates(): void; /** * 缩放当前显示范围,它是相对于当前显示范围进行缩放 * @param scale scale缩放比例 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().zoomScale(0.8) * ``` */ zoomScale(scale: number): void; /** * 把当前显示范围移到指定的显示范围 * @param minPt 坐标1 THREE.Vector3 * @param maxPt 坐标2 THREE.Vector3 * @param isWorld 默认为felse DWG图纸坐标,设置为true是THREEJS坐标 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().zoomW(new THREE.Vector3(0,10,10), new THREE.Vector3(3,8,20), true) * ``` */ zoomW(minPt: THREE.Vector3, maxPt: THREE.Vector3, isWorld?: boolean): void; /** * 把当前显示范围移到指定的位置,dCenX,dCenY是DWG图纸坐标。 * @param minPt DWG图纸坐标1 THREE.Vector3 * @param maxPt DWG图纸坐标2 THREE.Vector3 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().zoomCenter(new THREE.Vector3(0,10,10), new THREE.Vector3(3,8,20)) * ``` */ zoomCenter(dCenX: number, dCenY: number): void; /** * 初始化控件默认加载后,显示视区范围,默认使用图纸转换时的显示范围。。 * @param minPt DWG文档坐标1显示区域的左下角 THREE.Vector3 * @param maxPt DWG文档坐标2显示区域的右上角 THREE.Vector3 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().initZoomW(new THREE.Vector3(0,10,10), new THREE.Vector3(3,8,20)) * * ``` */ initZoomW(pt1Doc: THREE.Vector3, pt2Doc: THREE.Vector3): void; /** * 初始化控件默认加载后,显示视区范围,默认使用图纸转换时的显示范围。。 * @param minPt DWG文档坐标1显示区域的左下角 THREE.Vector3 * @param maxPt DWG文档坐标2显示区域的右上角 THREE.Vector3 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().addEvent(new THREE.Vector3(0,10,10), new THREE.Vector3(3,8,20)) * * ``` */ /** * 控件对象的事件监听 * @param eventNaem 事件名称 * @param fun 回调函数 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().addEvent("addResizeEvent", ()=> {}) * Mx.MxFun.getCurrentDraw().addEvent("viewchange", ()=> {}) * 图纸加载完成 * Mx.MxFun.getCurrentDraw().addEvent("loadComplete", ()=> {}) * 视区重绘事件. * Mx.MxFun.getCurrentDraw().addEvent("render", (renderer)=> {}) * 视区大小被修改事件.,viewsize={viewWidth:viewWidth,viewHeight:viewHeight} * Mx.MxFun.getCurrentDraw().addEvent("viewsizechange", (viewsize)=> {}) * 实体选择状态发生改变的事件. * Mx.MxFun.getCurrentDraw().addEvent("MxEntitySelectChange", (aryId:Array)=> {}) * ``` */ addEvent(eventNaem: string, fun: (...parmes: any) => any): void; /** * 控件对象的事件监听 * @param eventNaem 事件名称 * @param fun 回调函数 * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().on("addResizeEvent", ()=> {}) * Mx.MxFun.getCurrentDraw().on("viewchange", ()=> {}) * 图纸加载完成 * Mx.MxFun.getCurrentDraw().on("loadComplete", ()=> {}) * 视区重绘事件. * Mx.MxFun.getCurrentDraw().on("render", (renderer)=> {}) * 视区大小被修改事件.,viewsize={viewWidth:viewWidth,viewHeight:viewHeight} * Mx.MxFun.getCurrentDraw().on("viewsizechange", (viewsize)=> {}) * 实体选择状态发生改变的事件. * Mx.MxFun.getCurrentDraw().on("MxEntitySelectChange", (aryId:Array)=> {}) * ``` */ on(eventNaem: string, fun: (...parmes: any) => any): void; /** * INI设置 * @param options { EnableOsnapFunction: boolean; } * @returns void * @example * ```typescript * Mx.MxFun.getCurrentDraw().setIniset(options: { EnableOsnapFunction: true }) * * ``` */ setIniset(options: { EnableOsnapFunction: boolean; }): void; /** * 屏幕坐标到ThreeJS坐标 * @returns THREE.Vector3 * @example * ```typescript * * * ``` */ screenCoord2World(x: number, y: number, z?: number): THREE.Vector3; /** * ThreeJS坐标到屏幕坐标,屏幕坐标的Y轴向下。坐标原点在左上角. * @returns THREE.Vector3 * @example * ```typescript * * * ``` */ worldCoord2Screen(x: number, y: number, z: number): THREE.Vector3; /** * 屏幕坐标到DWG文档坐标 * @returns THREE.Vector3 * @example * ```typescript * * * ``` */ screenCoord2Doc(x: number, y: number): THREE.Vector3; /** * ThreeJS坐标长度到DWG文档坐标长度 * @returns number * @example * ```typescript * * * ``` */ worldCoordLong2Doc(l: number): number; /** * DWG文档坐标长度到ThreeJS坐标长度 * @returns number * @example * ```typescript * * * ``` */ docCoordLong2World(l: number): number; /** * DWG文档坐标到ThreeJS坐标 * @returns number * @example * ```typescript * * * ``` */ docCoord2World(x: number, y: number, z: number): THREE.Vector3; /** * DWG文档坐标到ThreeJS坐标 * @returns THREE.Vector3 * @example * ```typescript * * * ``` */ docCoord2World2(pt: THREE.Vector3): THREE.Vector3; /** * ThreeJS坐标到DWG文档坐标 * @returns number * @example * ```typescript * * * ``` */ worldCoord2Doc(x: number, y: number, z: number): THREE.Vector3; /** * ThreeJS坐标到DWG文档坐标 * @returns THREE.Vector3 * @example * ```typescript * * * ``` */ worldCoord2Doc2(pt: THREE.Vector3): THREE.Vector3; /** * DWG文档坐标到屏幕坐标 * @returns number * @example * ```typescript * * * ``` */ docCoord2Screen(x: number, y: number): THREE.Vector3; /** * 屏幕坐标长度到DWG文档坐标长度 * @returns number * @example * ```typescript * * * ``` */ screenCoordLong2Doc(l: number): number; /** * DWG文档坐标长度到屏幕坐标长度 * @returns number * @example * ```typescript * * * ``` */ docCoordLong2Screen(l: number): number; /** * 屏幕坐标长度到ThreeJS坐标长度 * @returns number * @example * ```typescript * * * ``` */ screenCoordLong2World(l: number): number; /** * ThreeJS坐标长度到屏幕坐标长度 * @returns number * @example * ```typescript * * * ``` */ worldCoordLong2Screen(l: number): number; /** * 初始WebGL Renderer的创建参数,该函数在MxFun.createMxObject函数调用时,调用。 * @param param * @returns void * @example * ```typescript * mxObj.initRendererParam({preserveDrawingBuffer: true}) * * ``` */ initRendererParam(param: object): void; /** * 添加一个自定义实体到图上。 * @param ent 自定义实体对象 * @returns number 返回对象的id. * @example * ```typescript * * * ``` */ addMxEntity(ent: MxDbEntity): number; /** * 得到图上当前选择的对象. * @returns Array 返回对象的id数组. * @example * ```typescript * * * ``` */ getMxCurrentSelect(): Array; /** * 把对象添加到当前选择中. * @returns void * @example * ```typescript * * * ``` */ addMxCurrentSelect(id: number): void; /** * 清除当前所有选择 * @returns void * @example * ```typescript * * * ``` */ clearMxCurrentSelect(): boolean; /** *通过id获取绘制的对象. * @param id 返回对象的id * @returns MxDbEntity * @example * ```typescript * * * ``` */ getMxEntity(id: number): MxDbEntity; /** * 查找某点位置处的用户自绘对象. * @param ptMouse 查找的点位 THREE.Vector3,默认是文档坐标 * @returns MxDbEntity[] 返回用户自绘对象数组 * @example * ```typescript * * * ``` */ findMxEntityAtPoint(ptMouse: THREE.Vector3, isDocCoord?: boolean, retWordDrawXDataCall?: (id: number, data: any) => void): Array; /** *得到所有用户自绘对象. * @returns MxDbEntity[] 返回用户自绘对象数组 * @example * ```typescript * * * ``` */ getAllMxEntity(): Array; /** * 设置鼠标中键移动视区。 * @param iPan 设置是否可以鼠标中键移动视区, * iPan = 0,中键不移动视区,左键移动 * iPan = 1,中键移动视区,左键不移动 * iPan = 2,中键移动视区,左键移动视区 * @returns * @example * ```typescript * * * ``` */ setMouseMiddlePan(iPan: boolean | number): void; /** *重新设置ThreeJS Controls状态. * @returns * @example * ```typescript * * * ``` */ resetThreeJSControls(): void; /** * 启用或禁用鼠标中键滚动缩放视区 * @param isEnable 是否启用 * @returns * @example * ```typescript * * * ``` */ enableZoom(isEnable: boolean): void; /** * 启用或禁用鼠标移动视区 * @param isEnable 是否启用 * @returns * @example * ```typescript * * * ``` */ enablePan(isEnable: boolean): void; /** * 删除MxEntity * @param id 实体id. * @returns * @example * ```typescript * * * ``` */ eraseMxEntity(id: number): boolean; /** * 移除安视图坐标绘制的对象. * @param obj 对象. * @returns * @example * ```typescript * * * ``` */ removeViewObject(obj: THREE.Object3D): void; /** * 保存所有MxEntity的数据到json字符串. * @param * @returns json字符串 * @example * ```typescript * * * ``` */ saveMxEntityToJson(isSaveToDWG?: boolean): string; /** * 保存所有MxEntity的数据到js对象. * @param * @returns js对象 * @example * ```typescript * * * ``` */ saveMxEntityToObject(isSaveToDWG?: boolean): object; /** * 从json字符串恢复MxEntity * @param dataString json字符串. * @returns * @example * ```typescript * * * ``` */ loadMxEntityFromJson(dataString: string | object, aryPreloadSVG?: string[] | null): Promise; /** * 删除所有的MxEntity * @param * @returns * @example * ```typescript * * * ``` */ eraseAllMxEntity(): void; /** * 把该控件对象,设置成当前控件. * @param * @returns * @example * ```typescript * * * ``` */ makeCurrent(): void; /** * 得到视区中心的文档坐标. * @param * @returns * @example * ```typescript * * * ``` */ getViewCenterDocCoord(): THREE.Vector3; /** * 画布大小,自动修改到它父亲div大小。 * @param * @returns * @example * ```typescript * * * ``` */ updateCanvasSize(): void; /** * 新建图纸. * @param ptin1,ptin2新建图纸的显示范围. * @returns * @example * ```typescript * * * ``` */ newFile(ptin1: THREE.Vector3 | number, ptin2: THREE.Vector3 | number, x2?: number, y2?: number): boolean; /** * 停止当前加载 * @example * ```typescript * * ``` */ stopAllLoading(): void; /** * 得到Three.js的 OrbitControls对象. * @example * ```typescript * * ``` */ getOrbitControls(): OrbitControls; /** * 禁用或启用视区的移动,放大,缩小等操作. * @example * ```typescript * * ``` */ enableViewControls(isEnable: boolean): void; /** * 得到当前图形数据库对象 * @example * ```typescript * * ``` */ getMxDatabase(): MxDbDatabase; /** * 设置鼠标中键的滚动的缩放比例,在PC上,默认值4,手机上默认值,1.5 * 返回之前设置值。 * @example * ```typescript * * ``` */ setZoomSpeed(zoomSpeed: number): number; /** * 得到MxCAD对象. * @return MxCADObject * @example * ``` typescript * ``` */ getMxCAD(): MxCADObject; /** * 重新计数Renderer状态, this.renderer.info.reset(); * @return * @example * ``` typescript * ``` */ resetRenderer(): any; /** * 设置服务器发送文件请求时,需要带的参数.; * @return * @example * ``` typescript * ``` mxobj.setRequestHeader("{'data':'value1'}"); */ setRequestHeader(val: string): any; /** * 在MxCAD模式下,关闭与服务器的socket连接 。 * @return * @example */ closeWebSocket(): any; /** * CAD坐标到文档坐标. * 默认情况下,cad等于doc,当前m_isCorrectLargeCoordinates为true时,doc变成了把cad图纸修改到小范围坐标系下的坐标。 * @returns number * @example * ```typescript * * * ``` */ cadCoord2Doc(x: number, y: number, z: number): THREE.Vector3; /** * 文档坐标坐标到CAD. * 默认情况下,cad等于doc,当前m_isCorrectLargeCoordinates为true时,doc变成了把cad图纸修改到小范围坐标系下的坐标。 * @returns number * @example * ```typescript * * * ``` */ docCoord2Cad(x: number, y: number, z: number): THREE.Vector3; /** * 设置视区的旋转角度 * @example * ```typescript * * * ``` */ setViewAngle(ang: number): void; /** * 得到视区的旋转角度 * @example * ```typescript * * * ``` */ getViewAngle(): number; /** * 得到系统变量 * @example * ```typescript * * * ``` */ getSysVar(sName: string): any; /** * 设置系统变量 * @example * ```typescript * * * ``` */ setSysVar(sName: string, val: any): void; /** * 是否是MxCAD模式运行. * @example * ```typescript * * * ``` */ isMxCAD(): boolean; /** * 得执行的内部MxObject对象. * @example * ```typescript * * * ``` */ getMxObjectImplement(): any; /** * 得到所有布局名 * @example * ```typescript * * * ``` */ getAllLayoutName(): string[]; /** * 得到数据库Json字符串数据. * @example * ```typescript * * * ``` */ getDtabaseJsonString(): string; /** * 跳转另一个布局页面. * @example * ```typescript * * * ``` */ gotoLayout(layout: string): void; /** * 初始cpp对象. * @example * ```typescript * * * ``` */ initMxCpp(mcppObjectImp: any): void; /** * 当前是否支持 opengles3 * @example * ```typescript * * * ``` */ isWebgl2(): boolean; /** * 返回对象的ID. * @example * ```typescript * * * ``` */ getId(): number; }