12 Commits
1.0.4 ... 1.1.3

Author SHA1 Message Date
ChenX
fa20fa5f48 排钻显示改成实体显示. 2018-05-31 21:01:30 +08:00
ChenX
f72bb04ff5 取消排钻挖孔. 2018-05-31 15:57:24 +08:00
ChenX
ffd1404d12 修正排钻孔洞没有在正确的位置 2018-05-31 11:24:37 +08:00
ChenX
128b1bcf70 更新版本号 2018-05-31 11:13:05 +08:00
ChenX
cbe28efb08 分离选择材质,避免实体选中时,选中材质导致的内部拉槽显示问题.
修正未选中板件时,视图没有刷新的问题.
加入排钻显示.
2018-05-31 11:12:29 +08:00
ChenX
4f3d7a6388 增加用户缩放相机体验,扩大相机范围,并且限定用户的缩放范围,避免缩放后物体过小而对象找不到的问题. 2018-05-31 10:48:43 +08:00
ChenX
35443367f3 增加双击中键缩放到全部的特性. 2018-05-31 10:35:32 +08:00
ChenX
957107378e Merge branch 'master' of http://git.cf/cx/CADViewComponent 2018-05-30 18:32:45 +08:00
ChenX
2a17e619a2 清理代码格式 2018-05-30 18:32:42 +08:00
xf
5fc8d4b0f4 Merge branch 'master' of http://git.cf/cx/CADViewComponent 2018-05-30 11:20:29 +08:00
xf
2a209becbb 增加仓库地址配置 2018-05-30 11:20:10 +08:00
ChenX
e3c565a83d 将包设置为私有 2018-05-29 10:30:41 +08:00
26 changed files with 171 additions and 61 deletions

View File

@@ -31,6 +31,7 @@ export declare class CameraControls {
onTouchEnd: (event: TouchEvent) => void; onTouchEnd: (event: TouchEvent) => void;
onTouchMove: (event: TouchEvent) => void; onTouchMove: (event: TouchEvent) => void;
beginRotate(): void; beginRotate(): void;
lastMiddleClickTime: number;
onMouseDown: (event: MouseEvent) => void; onMouseDown: (event: MouseEvent) => void;
onMouseUp: (event: MouseEvent) => void; onMouseUp: (event: MouseEvent) => void;
onMouseMove: (event: MouseEvent) => void; onMouseMove: (event: MouseEvent) => void;

View File

@@ -93,6 +93,8 @@ class CameraControls {
this.m_StartClickPoint.copy(this.m_EndClickPoint); this.m_StartClickPoint.copy(this.m_EndClickPoint);
this.m_Viewer.m_bNeedUpdate = true; this.m_Viewer.m_bNeedUpdate = true;
}; };
//最后一次按中键的时间
this.lastMiddleClickTime = 0;
//鼠标 //鼠标
this.onMouseDown = (event) => { this.onMouseDown = (event) => {
event.preventDefault(); event.preventDefault();
@@ -109,6 +111,13 @@ class CameraControls {
} }
case KeyEnum_1.MouseKey.Middle: case KeyEnum_1.MouseKey.Middle:
{ {
let curTime = Date.now();
let t = curTime - this.lastMiddleClickTime;
this.lastMiddleClickTime = curTime;
if (t < 350) {
this.m_Viewer.ZoomAll();
return;
}
if (this.m_KeyDown.get(KeyEnum_1.KeyBoard.Control)) { if (this.m_KeyDown.get(KeyEnum_1.KeyBoard.Control)) {
this.beginRotate(); this.beginRotate();
} }

File diff suppressed because one or more lines are too long

View File

@@ -18,6 +18,8 @@ export declare class CameraUpdate {
private m_Target; private m_Target;
private m_Direction; private m_Direction;
private m_Orbit; private m_Orbit;
m_MinViewHeight: number;
m_MaxViewHeight: number;
constructor(); constructor();
readonly Aspect: number; readonly Aspect: number;
readonly Camera: THREE.Camera; readonly Camera: THREE.Camera;

View File

@@ -24,7 +24,9 @@ class CameraUpdate {
this.m_Direction = new THREE.Vector3(0, 0, -1); this.m_Direction = new THREE.Vector3(0, 0, -1);
//观察的轨道. //观察的轨道.
this.m_Orbit = new Orbit_1.Orbit(); this.m_Orbit = new Orbit_1.Orbit();
this.m_CameraArray.set(THREE.OrthographicCamera, new THREE.OrthographicCamera(-2, 2, 2, -2, -100000, 100000)); this.m_MinViewHeight = 10;
this.m_MaxViewHeight = 3e4;
this.m_CameraArray.set(THREE.OrthographicCamera, new THREE.OrthographicCamera(-2, 2, 2, -2, -1e6, 1e6));
this.m_CameraArray.set(THREE.PerspectiveCamera, new THREE.PerspectiveCamera(50, 1, 0.01, 10000)); this.m_CameraArray.set(THREE.PerspectiveCamera, new THREE.PerspectiveCamera(50, 1, 0.01, 10000));
this.m_CurCamera = this.m_CameraArray.get(THREE.OrthographicCamera); this.m_CurCamera = this.m_CameraArray.get(THREE.OrthographicCamera);
this.m_Orbit.UpdateRoValue(this.m_Direction); this.m_Orbit.UpdateRoValue(this.m_Direction);
@@ -41,7 +43,7 @@ class CameraUpdate {
return this.m_ViewHeight; return this.m_ViewHeight;
} }
set ViewHeight(height) { set ViewHeight(height) {
this.m_ViewHeight = THREE.Math.clamp(height, 1e-8, 1e8); this.m_ViewHeight = THREE.Math.clamp(height, this.m_MinViewHeight, this.m_MaxViewHeight);
} }
SetSize(width, height) { SetSize(width, height) {
this.m_Width = width; this.m_Width = width;
@@ -84,7 +86,7 @@ class CameraUpdate {
Zoom(scale, scaleCenter) { Zoom(scale, scaleCenter) {
if (this.Camera instanceof THREE.OrthographicCamera) { if (this.Camera instanceof THREE.OrthographicCamera) {
this.ViewHeight *= scale; this.ViewHeight *= scale;
if (scaleCenter) { if (scaleCenter && this.m_ViewHeight < this.m_MaxViewHeight) {
this.m_Target.sub(scaleCenter); this.m_Target.sub(scaleCenter);
this.m_Target.multiplyScalar(scale); this.m_Target.multiplyScalar(scale);
this.m_Target.add(scaleCenter); this.m_Target.add(scaleCenter);

File diff suppressed because one or more lines are too long

1
dist/Material.d.ts vendored
View File

@@ -1,3 +1,4 @@
import { MeshBasicMaterial, LineBasicMaterial } from "three"; import { MeshBasicMaterial, LineBasicMaterial } from "three";
export declare let boardMaterial: MeshBasicMaterial; export declare let boardMaterial: MeshBasicMaterial;
export declare let selectMaterial: MeshBasicMaterial;
export declare let edgeMaterial: LineBasicMaterial; export declare let edgeMaterial: LineBasicMaterial;

6
dist/Material.js vendored
View File

@@ -8,6 +8,12 @@ exports.boardMaterial = new three_1.MeshBasicMaterial({
polygonOffsetFactor: 1, polygonOffsetFactor: 1,
polygonOffsetUnits: 1 polygonOffsetUnits: 1
}); });
exports.selectMaterial = new three_1.MeshBasicMaterial({
color: new three_1.Color(0.1, 0.5, 0.5),
polygonOffset: true,
polygonOffsetFactor: 1,
polygonOffsetUnits: 1
});
//线框的材质 //线框的材质
exports.edgeMaterial = new three_1.LineBasicMaterial({ linewidth: 2, color: new three_1.Color(0, 0, 0) }); exports.edgeMaterial = new three_1.LineBasicMaterial({ linewidth: 2, color: new three_1.Color(0, 0, 0) });
//# sourceMappingURL=Material.js.map //# sourceMappingURL=Material.js.map

View File

@@ -1 +1 @@
{"version":3,"file":"Material.js","sourceRoot":"","sources":["../src/Material.ts"],"names":[],"mappings":";;AAAA,iCAAoE;AAEpE,uBAAuB;AACZ,QAAA,aAAa,GAAG,IAAI,yBAAiB,CAAC;IAC7C,KAAK,EAAE,IAAI,aAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/B,aAAa,EAAE,IAAI;IACnB,mBAAmB,EAAE,CAAC;IACtB,kBAAkB,EAAE,CAAC;CACxB,CAAC,CAAC;AAEH,OAAO;AACI,QAAA,YAAY,GAAG,IAAI,yBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,aAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC"} {"version":3,"file":"Material.js","sourceRoot":"","sources":["../src/Material.ts"],"names":[],"mappings":";;AAAA,iCAAoE;AAEpE,uBAAuB;AACZ,QAAA,aAAa,GAAG,IAAI,yBAAiB,CAAC;IAC7C,KAAK,EAAE,IAAI,aAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/B,aAAa,EAAE,IAAI;IACnB,mBAAmB,EAAE,CAAC;IACtB,kBAAkB,EAAE,CAAC;CACxB,CAAC,CAAC;AAEQ,QAAA,cAAc,GAAG,IAAI,yBAAiB,CAAC;IAC9C,KAAK,EAAE,IAAI,aAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/B,aAAa,EAAE,IAAI;IACnB,mBAAmB,EAAE,CAAC;IACtB,kBAAkB,EAAE,CAAC;CACxB,CAAC,CAAC;AAEH,OAAO;AACI,QAAA,YAAY,GAAG,IAAI,yBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,aAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC"}

4
dist/RotateUV.d.ts vendored
View File

@@ -1,2 +1,2 @@
import * as THREE from 'three'; import { Geometry } from 'three';
export declare function RotateUVs(geo: THREE.Geometry): void; export declare function RotateUVs(geo: Geometry): void;

4
dist/RotateUV.js vendored
View File

@@ -1,11 +1,11 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const Matrix2_1 = require("./Matrix2"); const Matrix2_1 = require("./Matrix2");
const THREE = require("three"); const three_1 = require("three");
function RotateUVs(geo) { function RotateUVs(geo) {
let roMat = new Matrix2_1.Matrix2(); let roMat = new Matrix2_1.Matrix2();
roMat.set(0, -1, 1, 0); roMat.set(0, -1, 1, 0);
let addV = new THREE.Vector2(1, 0); let addV = new three_1.Vector2(1, 0);
for (let uvs of geo.faceVertexUvs) { for (let uvs of geo.faceVertexUvs) {
for (let uv of uvs) { for (let uv of uvs) {
for (let v of uv) { for (let v of uv) {

View File

@@ -1 +1 @@
{"version":3,"file":"RotateUV.js","sourceRoot":"","sources":["../src/RotateUV.ts"],"names":[],"mappings":";;AAAA,uCAAoC;AACpC,+BAA+B;AAG/B,mBAA0B,GAAmB;IAEzC,IAAI,KAAK,GAAG,IAAI,iBAAO,EAAE,CAAC;IAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACX,CAAC,EAAE,CAAC,CAAC,CAAC;IAEV,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnC,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,EACjC;QACI,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;YACI,KAAK,IAAI,CAAC,IAAI,EAAE,EAChB;gBACI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACrB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACf;SACJ;KACJ;IACD,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;AAC7B,CAAC;AApBD,8BAoBC"} {"version":3,"file":"RotateUV.js","sourceRoot":"","sources":["../src/RotateUV.ts"],"names":[],"mappings":";;AAAA,uCAAoC;AACpC,iCAA0C;AAG1C,mBAA0B,GAAa;IAEnC,IAAI,KAAK,GAAG,IAAI,iBAAO,EAAE,CAAC;IAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACX,CAAC,EAAE,CAAC,CAAC,CAAC;IAEV,IAAI,IAAI,GAAG,IAAI,eAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7B,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,EACjC;QACI,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;YACI,KAAK,IAAI,CAAC,IAAI,EAAE,EAChB;gBACI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACrB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACf;SACJ;KACJ;IACD,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;AAC7B,CAAC;AApBD,8BAoBC"}

2
dist/Text.js.map vendored
View File

@@ -1 +1 @@
{"version":3,"file":"Text.js","sourceRoot":"","sources":["../src/Text.ts"],"names":[],"mappings":";;AAAA,iCAAuE;AACvE,iDAA+C;AAC/C,uCAAuC;AAEvC;IAEE,MAAM,CAAC,IAAI;QACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,MAAM,CAAC,GAAG,OAAO,CAAC,qDAAqD,CAAC,CAAC;YACzE,IAAI,MAAM,GAAG,IAAI,kBAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAChC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAED,YAAoB,SAAQ,YAAI;IAC9B;;;;;;OAMG;IACH,YAAY,GAAW,EAAE,SAAiB,CAAC;QACzC,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC;QAEjC,IAAI,MAAM,GAAkB,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,QAAQ,GAAG,IAAI,qBAAa,CAAC,MAAM,CAAC,CAAC;QAEzC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAE9B,KAAK,CAAC,QAAQ,EAAE,4BAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,IAAI,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,eAAO,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,oBAAU,CAAC,IAAI,eAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;CACF;AArBD,wBAqBC"} {"version":3,"file":"Text.js","sourceRoot":"","sources":["../src/Text.ts"],"names":[],"mappings":";;AAAA,iCAAuE;AACvE,iDAA+C;AAC/C,uCAAuC;AAEvC;IAGE,MAAM,CAAC,IAAI;QAET,IAAI,CAAC,IAAI,CAAC,OAAO,EACjB;YACE,MAAM,CAAC,GAAG,OAAO,CAAC,qDAAqD,CAAC,CAAC;YACzE,IAAI,MAAM,GAAG,IAAI,kBAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAChC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAED,YAAoB,SAAQ,YAAI;IAE9B;;;;;;OAMG;IACH,YAAY,GAAW,EAAE,SAAiB,CAAC;QAEzC,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC;QAEjC,IAAI,MAAM,GAAkB,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,QAAQ,GAAG,IAAI,qBAAa,CAAC,MAAM,CAAC,CAAC;QAEzC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAE9B,KAAK,CAAC,QAAQ,EAAE,4BAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,IAAI,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,eAAO,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,oBAAU,CAAC,IAAI,eAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;CACF;AAvBD,wBAuBC"}

10
dist/Viewer.js vendored
View File

@@ -5,7 +5,7 @@ const CameraUpdate_1 = require("./CameraUpdate");
const GeUtils_1 = require("./GeUtils"); const GeUtils_1 = require("./GeUtils");
const PlaneExt_1 = require("./PlaneExt"); const PlaneExt_1 = require("./PlaneExt");
const _1 = require("."); const _1 = require(".");
const three_1 = require("three"); const ColorPalette_1 = require("./ColorPalette");
class Viewer { class Viewer {
//构造 //构造
constructor(canvasContainer) { constructor(canvasContainer) {
@@ -38,18 +38,16 @@ class Viewer {
window.addEventListener("resize", () => { window.addEventListener("resize", () => {
this.OnSize(); this.OnSize();
}); });
//选中
let selectMaterial = new three_1.MeshBasicMaterial({ color: new three_1.Color(0.1, 0.5, 0.5) });
let oldMesh; let oldMesh;
this.m_Render.domElement.addEventListener("mousemove", (e) => { this.m_Render.domElement.addEventListener("mousemove", (e) => {
let mesh = _1.PointPick(this, e.offsetX, e.offsetY); let mesh = _1.PointPick(this, e.offsetX, e.offsetY);
if (oldMesh) if (oldMesh)
oldMesh.material = _1.boardMaterial; oldMesh.material = _1.boardMaterial;
if (mesh) { if (mesh && mesh.material !== ColorPalette_1.ColorMaterial.GetLineMaterial(1)) {
oldMesh = mesh; oldMesh = mesh;
mesh.material = selectMaterial; mesh.material = _1.selectMaterial;
this.m_bNeedUpdate = true;
} }
this.m_bNeedUpdate = true;
}); });
} }
//初始化render //初始化render

2
dist/Viewer.js.map vendored
View File

@@ -1 +1 @@
{"version":3,"file":"Viewer.js","sourceRoot":"","sources":["../src/Viewer.ts"],"names":[],"mappings":"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"} {"version":3,"file":"Viewer.js","sourceRoot":"","sources":["../src/Viewer.ts"],"names":[],"mappings":"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"}

View File

@@ -1,5 +1,5 @@
import * as THREE from 'three'; import * as THREE from 'three';
import { Geometry, LineSegments } from 'three'; import { Geometry, LineSegments, Shape, Vector2 } from 'three';
export declare class Arc2d { export declare class Arc2d {
m_StartAn: number; m_StartAn: number;
m_EndAn: number; m_EndAn: number;
@@ -9,11 +9,11 @@ export declare class Arc2d {
m_Radius: number; m_Radius: number;
constructor(p1: THREE.Vector2, p2: THREE.Vector2, bul: number); constructor(p1: THREE.Vector2, p2: THREE.Vector2, bul: number);
} }
export declare function createPath(pts: THREE.Vector2[], buls: number[], shapeOut?: THREE.Shape): THREE.Shape; export declare function createPath(pts: Vector2[], buls: number[], shapeOut?: Shape): Shape;
export declare function getVec(data: object): THREE.Vector3; export declare function getVec(data: object): THREE.Vector3;
export declare function createBoard(boardData: object): { export declare function createBoard(boardData: object): {
mesh: THREE.Mesh; mesh: THREE.Mesh;
edges: THREE.LineSegments[]; edges: (THREE.Mesh | THREE.LineSegments)[];
}; };
export declare function createTemplateBoard(brDataList: any[]): { export declare function createTemplateBoard(brDataList: any[]): {
meshs: any[]; meshs: any[];

40
dist/createBoard.js vendored
View File

@@ -2,6 +2,7 @@
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const THREE = require("three"); const THREE = require("three");
const three_1 = require("three"); const three_1 = require("three");
const ColorPalette_1 = require("./ColorPalette");
const GeUtils_1 = require("./GeUtils"); const GeUtils_1 = require("./GeUtils");
const Material_1 = require("./Material"); const Material_1 = require("./Material");
const RotateUV_1 = require("./RotateUV"); const RotateUV_1 = require("./RotateUV");
@@ -34,7 +35,7 @@ class Arc2d {
exports.Arc2d = Arc2d; exports.Arc2d = Arc2d;
//创建轮廓 通过点表和凸度 //创建轮廓 通过点表和凸度
function createPath(pts, buls, shapeOut) { function createPath(pts, buls, shapeOut) {
let shape = shapeOut || new THREE.Shape(); let shape = shapeOut || new three_1.Shape();
if (pts.length === 0) if (pts.length === 0)
return shape; return shape;
let firstPt = pts[0]; let firstPt = pts[0];
@@ -109,13 +110,35 @@ function createBoard(boardData) {
//外边. //外边.
let edges = [createEdge(ext)]; let edges = [createEdge(ext)];
//差集 //差集
if (boardData["SubBoardLocal"].length > 0) { if (checkObjectArray(boardData, "SubBoardLocal")
let subBoardList = boardData["SubBoardLocal"].map(d => createBoard(d)); || checkObjectArray(boardData, "Drillings")) {
let thisCsg = new ThreeCSG_1.ThreeBSP(ext); let thisCsg = new ThreeCSG_1.ThreeBSP(ext);
for (let br of subBoardList) { if (boardData["SubBoardLocal"]) {
edges.push(...br.edges); let subBoardList = boardData["SubBoardLocal"].map(d => createBoard(d));
let subCsg = new ThreeCSG_1.ThreeBSP(br.mesh); for (let br of subBoardList) {
thisCsg = thisCsg.subtract(subCsg); edges.push(...br.edges);
let subCsg = new ThreeCSG_1.ThreeBSP(br.mesh);
thisCsg = thisCsg.subtract(subCsg);
}
}
if (boardData["Drillings"]) {
let dris = boardData["Drillings"];
for (let dri of dris) {
let geo = new three_1.CylinderGeometry(dri.r, dri.r, dri.h, 8);
geo.rotateX(Math.PI * 0.5);
if (dri.f === 0) //0正
geo.translate(dri.x, dri.y, -dri.h * 0.5);
else //1反
geo.translate(dri.x, dri.y, dri.h * 0.5 - boardData["H"]);
geo.applyMatrix(boardMat);
let mesh = new three_1.Mesh(geo, ColorPalette_1.ColorMaterial.GetLineMaterial(1));
edges.push(mesh);
// let edge = createEdge(geo);
// edge.material = new LineBasicMaterial({ color: new Color(1, 0, 0) });
// edges.push(edge);
// let subCsg = new ThreeBSP(geo);
// thisCsg = thisCsg.subtract(subCsg);
}
} }
ext = thisCsg.toGeometry(); ext = thisCsg.toGeometry();
} }
@@ -125,6 +148,9 @@ function createBoard(boardData) {
return { mesh, edges }; return { mesh, edges };
} }
exports.createBoard = createBoard; exports.createBoard = createBoard;
function checkObjectArray(obj, key) {
return obj[key] && obj[key].length > 0;
}
function createTemplateBoard(brDataList) { function createTemplateBoard(brDataList) {
let meshs = []; let meshs = [];
let edgesa = []; let edgesa = [];

File diff suppressed because one or more lines are too long

View File

@@ -1,11 +1,17 @@
{ {
"name": "cadview", "name": "cadview",
"version": "1.0.4", "version": "1.1.3",
"description": "", "description": "",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"private": true,
"scripts": { "scripts": {
"build": "tsc" "build": "tsc",
"dev": "tsc -w"
},
"repository": {
"type": "git",
"url": "http://git.cf/cx/CADViewComponent.git"
}, },
"author": "cx", "author": "cx",
"license": "ISC", "license": "ISC",

View File

@@ -141,6 +141,9 @@ export class CameraControls
this.m_State = CameraControlState.Rotate; this.m_State = CameraControlState.Rotate;
this.m_Viewer.UpdateLockTarget(); this.m_Viewer.UpdateLockTarget();
} }
//最后一次按中键的时间
lastMiddleClickTime = 0;
//鼠标 //鼠标
onMouseDown = (event: MouseEvent) => onMouseDown = (event: MouseEvent) =>
{ {
@@ -161,6 +164,14 @@ export class CameraControls
} }
case MouseKey.Middle: case MouseKey.Middle:
{ {
let curTime = Date.now();
let t = curTime - this.lastMiddleClickTime;
this.lastMiddleClickTime = curTime;
if (t < 350)
{
this.m_Viewer.ZoomAll();
return;
}
if (this.m_KeyDown.get(KeyBoard.Control)) if (this.m_KeyDown.get(KeyBoard.Control))
{ {
this.beginRotate(); this.beginRotate();

View File

@@ -30,10 +30,13 @@ export class CameraUpdate
//观察的轨道. //观察的轨道.
private m_Orbit: Orbit = new Orbit(); private m_Orbit: Orbit = new Orbit();
m_MinViewHeight = 10;
m_MaxViewHeight = 3e4;
constructor() constructor()
{ {
this.m_CameraArray.set(THREE.OrthographicCamera, new THREE.OrthographicCamera(-2, 2, 2, -2, this.m_CameraArray.set(THREE.OrthographicCamera, new THREE.OrthographicCamera(-2, 2, 2, -2,
-100000, 100000)); -1e6, 1e6));
this.m_CameraArray.set(THREE.PerspectiveCamera, new THREE.PerspectiveCamera(50, 1, 0.01, 10000)); this.m_CameraArray.set(THREE.PerspectiveCamera, new THREE.PerspectiveCamera(50, 1, 0.01, 10000));
@@ -60,7 +63,7 @@ export class CameraUpdate
} }
set ViewHeight(height) set ViewHeight(height)
{ {
this.m_ViewHeight = THREE.Math.clamp(height, 1e-8, 1e8); this.m_ViewHeight = THREE.Math.clamp(height, this.m_MinViewHeight, this.m_MaxViewHeight);
} }
SetSize(width: number, height: number) SetSize(width: number, height: number)
@@ -114,7 +117,7 @@ export class CameraUpdate
if (this.Camera instanceof THREE.OrthographicCamera) if (this.Camera instanceof THREE.OrthographicCamera)
{ {
this.ViewHeight *= scale; this.ViewHeight *= scale;
if (scaleCenter) if (scaleCenter && this.m_ViewHeight < this.m_MaxViewHeight)
{ {
this.m_Target.sub(scaleCenter); this.m_Target.sub(scaleCenter);
this.m_Target.multiplyScalar(scale); this.m_Target.multiplyScalar(scale);

View File

@@ -8,6 +8,13 @@ export let boardMaterial = new MeshBasicMaterial({
polygonOffsetUnits: 1 polygonOffsetUnits: 1
}); });
export let selectMaterial = new MeshBasicMaterial({
color: new Color(0.1, 0.5, 0.5),
polygonOffset: true,
polygonOffsetFactor: 1, // positive value pushes polygon further away
polygonOffsetUnits: 1
});
//线框的材质 //线框的材质
export let edgeMaterial = new LineBasicMaterial({ linewidth: 2, color: new Color(0, 0, 0) }); export let edgeMaterial = new LineBasicMaterial({ linewidth: 2, color: new Color(0, 0, 0) });

View File

@@ -1,14 +1,14 @@
import { Matrix2 } from './Matrix2'; import { Matrix2 } from './Matrix2';
import * as THREE from 'three'; import { Geometry, Vector2 } from 'three';
export function RotateUVs(geo: THREE.Geometry) export function RotateUVs(geo: Geometry)
{ {
let roMat = new Matrix2(); let roMat = new Matrix2();
roMat.set(0, -1, roMat.set(0, -1,
1, 0); 1, 0);
let addV = new THREE.Vector2(1, 0); let addV = new Vector2(1, 0);
for (let uvs of geo.faceVertexUvs) for (let uvs of geo.faceVertexUvs)
{ {

View File

@@ -2,10 +2,13 @@ import { Font, FontLoader, Mesh, ShapeGeometry, Vector3 } from "three";
import { ColorMaterial } from "./ColorPalette"; import { ColorMaterial } from "./ColorPalette";
import { MoveMatrix } from "./GeUtils"; import { MoveMatrix } from "./GeUtils";
class FontLoaderUtil { class FontLoaderUtil
{
private static defFont: Font; private static defFont: Font;
static Load(): Font { static Load(): Font
if (!this.defFont) { {
if (!this.defFont)
{
const f = require("../resources/fonts/helvetiker_regular.typeface.json"); const f = require("../resources/fonts/helvetiker_regular.typeface.json");
let loader = new FontLoader(); let loader = new FontLoader();
this.defFont = loader.parse(f); this.defFont = loader.parse(f);
@@ -14,7 +17,8 @@ class FontLoaderUtil {
} }
} }
export class DbText extends Mesh { export class DbText extends Mesh
{
/** /**
* *
* 构造一个文本对象,8位点(中心点下面)在0点 * 构造一个文本对象,8位点(中心点下面)在0点
@@ -22,7 +26,8 @@ export class DbText extends Mesh {
* @param {number} height 文本高度 * @param {number} height 文本高度
* @memberof DbText * @memberof DbText
*/ */
constructor(str: string, height: number = 5) { constructor(str: string, height: number = 5)
{
let font = FontLoaderUtil.Load(); let font = FontLoaderUtil.Load();
let shapes: THREE.Shape[] = font.generateShapes(str, height, 0.1); let shapes: THREE.Shape[] = font.generateShapes(str, height, 0.1);

View File

@@ -1,10 +1,11 @@
import * as THREE from "three"; import * as THREE from "three";
import { Mesh } from "three";
import { CameraControls, PointPick, boardMaterial, selectMaterial } from ".";
import { CameraUpdate } from "./CameraUpdate"; import { CameraUpdate } from "./CameraUpdate";
import { ColorMaterial } from "./ColorPalette";
import { GetBox, GetBoxArr, cZeroVec } from "./GeUtils"; import { GetBox, GetBoxArr, cZeroVec } from "./GeUtils";
import { PlaneExt } from "./PlaneExt"; import { PlaneExt } from "./PlaneExt";
import { PointPick, boardMaterial, CameraControls } from ".";
import { MeshBasicMaterial, Color, Mesh } from "three";
export class Viewer export class Viewer
{ {
@@ -32,21 +33,18 @@ export class Viewer
this.OnSize(); this.OnSize();
}); });
//选中
let selectMaterial = new MeshBasicMaterial({ color: new Color(0.1, 0.5, 0.5) });
let oldMesh: Mesh; let oldMesh: Mesh;
this.m_Render.domElement.addEventListener("mousemove", (e: MouseEvent) => this.m_Render.domElement.addEventListener("mousemove", (e: MouseEvent) =>
{ {
let mesh = PointPick(this, e.offsetX, e.offsetY); let mesh = PointPick(this, e.offsetX, e.offsetY);
if (oldMesh) if (oldMesh)
oldMesh.material = boardMaterial; oldMesh.material = boardMaterial;
if (mesh) if (mesh && mesh.material !== ColorMaterial.GetLineMaterial(1))
{ {
oldMesh = mesh; oldMesh = mesh;
mesh.material = selectMaterial; mesh.material = selectMaterial;
this.m_bNeedUpdate = true;
} }
this.m_bNeedUpdate = true;
}) })
} }

View File

@@ -1,5 +1,6 @@
import * as THREE from 'three'; import * as THREE from 'three';
import { Geometry, LineSegments, Vector2 } from 'three'; import { CylinderGeometry, Geometry, LineSegments, Mesh, Shape, Vector2 } from 'three';
import { ColorMaterial } from './ColorPalette';
import { polar } from './GeUtils'; import { polar } from './GeUtils';
import { boardMaterial, edgeMaterial } from './Material'; import { boardMaterial, edgeMaterial } from './Material';
import { RotateUVs } from './RotateUV'; import { RotateUVs } from './RotateUV';
@@ -44,9 +45,9 @@ export class Arc2d
} }
//创建轮廓 通过点表和凸度 //创建轮廓 通过点表和凸度
export function createPath(pts: THREE.Vector2[], buls: number[], shapeOut?: THREE.Shape): THREE.Shape export function createPath(pts: Vector2[], buls: number[], shapeOut?: Shape): Shape
{ {
let shape = shapeOut || new THREE.Shape(); let shape = shapeOut || new Shape();
if (pts.length === 0) return shape; if (pts.length === 0) return shape;
let firstPt = pts[0]; let firstPt = pts[0];
@@ -90,7 +91,6 @@ export function createBoard(boardData: object)
let matInv: THREE.Matrix4 = new THREE.Matrix4(); let matInv: THREE.Matrix4 = new THREE.Matrix4();
//InitBoardMat //InitBoardMat
{ {
let xD = getVec(boardData["XVec"]); let xD = getVec(boardData["XVec"]);
let yD = getVec(boardData["YVec"]); let yD = getVec(boardData["YVec"]);
let ZD = getVec(boardData["ZVec"]); let ZD = getVec(boardData["ZVec"]);
@@ -138,18 +138,48 @@ export function createBoard(boardData: object)
ext.applyMatrix(boardMat); ext.applyMatrix(boardMat);
//外边. //外边.
let edges = [createEdge(ext)]; let edges: (LineSegments | Mesh)[] = [createEdge(ext)];
//差集 //差集
if (boardData["SubBoardLocal"].length > 0) if (checkObjectArray(boardData, "SubBoardLocal")
|| checkObjectArray(boardData, "Drillings"))
{ {
let subBoardList = boardData["SubBoardLocal"].map(d => createBoard(d));
let thisCsg = new ThreeBSP(ext); let thisCsg = new ThreeBSP(ext);
for (let br of subBoardList) if (boardData["SubBoardLocal"])
{ {
edges.push(...br.edges); let subBoardList = boardData["SubBoardLocal"].map(d => createBoard(d));
let subCsg = new ThreeBSP(br.mesh); for (let br of subBoardList)
thisCsg = thisCsg.subtract(subCsg); {
edges.push(...br.edges);
let subCsg = new ThreeBSP(br.mesh);
thisCsg = thisCsg.subtract(subCsg);
}
}
if (boardData["Drillings"])
{
let dris = boardData["Drillings"];
for (let dri of dris)
{
let geo = new CylinderGeometry(dri.r, dri.r, dri.h, 8);
geo.rotateX(Math.PI * 0.5);
if (dri.f === 0) //0正
geo.translate(dri.x, dri.y, -dri.h * 0.5);
else //1反
geo.translate(dri.x, dri.y, dri.h * 0.5 - boardData["H"]);
geo.applyMatrix(boardMat);
let mesh = new Mesh(geo, ColorMaterial.GetLineMaterial(1));
edges.push(mesh);
// let edge = createEdge(geo);
// edge.material = new LineBasicMaterial({ color: new Color(1, 0, 0) });
// edges.push(edge);
// let subCsg = new ThreeBSP(geo);
// thisCsg = thisCsg.subtract(subCsg);
}
} }
ext = thisCsg.toGeometry(); ext = thisCsg.toGeometry();
} }
@@ -161,6 +191,11 @@ export function createBoard(boardData: object)
return { mesh, edges }; return { mesh, edges };
} }
function checkObjectArray(obj: any, key: string)
{
return obj[key] && obj[key].length > 0;
}
export function createTemplateBoard(brDataList: any[]) export function createTemplateBoard(brDataList: any[])
{ {
let meshs = []; let meshs = [];