修正内存泄漏,提供增量加载.

This commit is contained in:
ChenX 2018-07-02 12:07:16 +08:00
parent fcf2a1eb73
commit c1e9aac48b
12 changed files with 46 additions and 28 deletions

View File

@ -112,7 +112,7 @@ var CameraUpdate = /** @class */ (function () {
this.Update(); this.Update();
}; };
CameraUpdate.prototype.ZoomExtensBox3 = function (box3) { CameraUpdate.prototype.ZoomExtensBox3 = function (box3) {
if (!box3) if (!box3 || box3.isEmpty())
return; return;
this.Camera.updateMatrixWorld(false); this.Camera.updateMatrixWorld(false);
//变换到相机坐标系 //变换到相机坐标系

File diff suppressed because one or more lines are too long

2
dist/Utils.d.ts vendored
View File

@ -1,2 +1,2 @@
import { Viewer } from "."; import { Viewer } from ".";
export declare function LoadBoard(view: Viewer, data: any[]): void; export declare function LoadBoard(view: Viewer, data: any[], clear?: boolean): void;

22
dist/Utils.js vendored
View File

@ -1,13 +1,21 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
var _1 = require("."); var _1 = require(".");
function LoadBoard(view, data) { function dispose(m) {
view.m_Scene.children.forEach(function (obj) { //@ts-ignore
var geo = obj["geometry"]; if (m.geometry)
if (geo) //@ts-ignore
geo.dispose(); m.geometry.dispose();
}); m.children.forEach(function (o) { return dispose(o); });
view.m_Scene.children.length = 0; }
function LoadBoard(view, data, clear) {
if (clear === void 0) { clear = true; }
if (clear) {
dispose(view.m_Scene);
view.m_Scene.children.length = 0;
}
if (data.length === 0)
return;
//加板 //加板
var _a = _1.createTemplateBoard(data), meshs = _a.meshs, edgesa = _a.edgesa; var _a = _1.createTemplateBoard(data), meshs = _a.meshs, edgesa = _a.edgesa;
//加标注 //加标注

2
dist/Utils.js.map vendored
View File

@ -1 +1 @@
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":";;AAAA,sBAA2E;AAG3E,mBAA0B,IAAY,EAAE,IAAW;IAE/C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,GAAG;QAE7B,IAAI,GAAG,GAAG,GAAG,CAAC,UAAU,CAAa,CAAC;QACtC,IAAI,GAAG;YAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjC,IAAI;IACA,IAAA,iCAA6C,EAA3C,gBAAK,EAAE,kBAAM,CAA+B;IAClD,KAAK;IACL,IAAI,IAAI,GAAG,gBAAa,CAAC,KAAK,CAAC,CAAC;IAEhC,CAAA,KAAA,IAAI,CAAC,OAAO,CAAA,CAAC,GAAG,WAAI,KAAK,EAAE;IAC3B,CAAA,KAAA,IAAI,CAAC,OAAO,CAAA,CAAC,GAAG,WAAI,MAAM,EAAE;IAC5B,CAAA,KAAA,IAAI,CAAC,OAAO,CAAA,CAAC,GAAG,WAAI,IAAI,EAAE;IAE1B,IAAI,CAAC,WAAW,EAAE,CAAC;IACnB,IAAI,CAAC,OAAO,EAAE,CAAC;IACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AACnB,CAAC;AArBD,8BAqBC"} {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":";;AACA,sBAA+D;AAE/D,iBAAiB,CAAW;IAExB,YAAY;IACZ,IAAI,CAAC,CAAC,QAAQ;QACV,YAAY;QACZ,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAEzB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,OAAO,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;AACxC,CAAC;AAED,mBAA0B,IAAY,EAAE,IAAW,EAAE,KAAqB;IAArB,sBAAA,EAAA,YAAqB;IAEtE,IAAI,KAAK,EACT;QACI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;KACpC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,IAAI;IACA,IAAA,iCAA6C,EAA3C,gBAAK,EAAE,kBAAM,CAA+B;IAClD,KAAK;IACL,IAAI,IAAI,GAAG,gBAAa,CAAC,KAAK,CAAC,CAAC;IAEhC,CAAA,KAAA,IAAI,CAAC,OAAO,CAAA,CAAC,GAAG,WAAI,KAAK,EAAE;IAC3B,CAAA,KAAA,IAAI,CAAC,OAAO,CAAA,CAAC,GAAG,WAAI,MAAM,EAAE;IAC5B,CAAA,KAAA,IAAI,CAAC,OAAO,CAAA,CAAC,GAAG,WAAI,IAAI,EAAE;IAE1B,IAAI,CAAC,WAAW,EAAE,CAAC;IACnB,IAAI,CAAC,OAAO,EAAE,CAAC;IACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AACnB,CAAC;AArBD,8BAqBC"}

4
dist/createBoard.js vendored
View File

@ -65,8 +65,8 @@ function getVec(data) {
exports.getVec = getVec; exports.getVec = getVec;
//创建板件 暂时这么写 //创建板件 暂时这么写
function createBoard(boardData) { function createBoard(boardData) {
var pts = new Array(); var pts = [];
var buls = new Array(); var buls = [];
var boardPts = boardData["Pts"]; var boardPts = boardData["Pts"];
var boardBuls = boardData["Buls"]; var boardBuls = boardData["Buls"];
var boardHeight = boardData["H"]; var boardHeight = boardData["H"];

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{ {
"name": "cadview", "name": "cadview",
"version": "1.1.7", "version": "1.1.8",
"description": "", "description": "",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",

View File

@ -134,7 +134,7 @@ export class CameraUpdate
} }
ZoomExtensBox3(box3: THREE.Box3) ZoomExtensBox3(box3: THREE.Box3)
{ {
if (!box3) return; if (!box3 || box3.isEmpty()) return;
this.Camera.updateMatrixWorld(false); this.Camera.updateMatrixWorld(false);
//变换到相机坐标系 //变换到相机坐标系
box3.applyMatrix4(this.Camera.matrixWorldInverse); box3.applyMatrix4(this.Camera.matrixWorldInverse);

View File

@ -1,15 +1,25 @@
import { Viewer, createTemplateBoard, createEdge, DrawDimension } from "."; import { Object3D } from "three";
import { Geometry } from "three"; import { createTemplateBoard, DrawDimension, Viewer } from ".";
export function LoadBoard(view: Viewer, data: any[]) function dispose(m: Object3D)
{ {
view.m_Scene.children.forEach(obj => //@ts-ignore
{ if (m.geometry)
let geo = obj["geometry"] as Geometry; //@ts-ignore
if (geo) geo.dispose(); m.geometry.dispose();
})
view.m_Scene.children.length = 0;
m.children.forEach(o => dispose(o));
}
export function LoadBoard(view: Viewer, data: any[], clear: boolean = true)
{
if (clear)
{
dispose(view.m_Scene);
view.m_Scene.children.length = 0;
}
if (data.length === 0) return;
//加板 //加板
let { meshs, edgesa } = createTemplateBoard(data); let { meshs, edgesa } = createTemplateBoard(data);
//加标注 //加标注

View File

@ -80,8 +80,8 @@ export function getVec(data: object): THREE.Vector3
//创建板件 暂时这么写 //创建板件 暂时这么写
export function createBoard(boardData: object) export function createBoard(boardData: object)
{ {
let pts: THREE.Vector2[] = new Array(); let pts: THREE.Vector2[] = [];
let buls: number[] = new Array(); let buls: number[] = [];
let boardPts = boardData["Pts"]; let boardPts = boardData["Pts"];
let boardBuls = boardData["Buls"]; let boardBuls = boardData["Buls"];

File diff suppressed because one or more lines are too long