6 Commits

Author SHA1 Message Date
xief
eb736bce84 更新配置 2022-03-04 10:27:23 +08:00
xief
40258eeaf4 Merge branch 'v2' into upgrade 2022-02-16 14:18:01 +08:00
xief
623fa9ac9a 使用新的webcad api进行建模 2022-02-16 13:48:57 +08:00
xief
c586096fe0 更新版本号 2021-04-08 14:56:48 +08:00
xief
0aa70fdb14 新增鼠标选择回调事件 2021-03-17 15:53:32 +08:00
xief
93ac737777 支持材质自定义 2021-03-03 15:07:59 +08:00
14 changed files with 5485 additions and 158 deletions

31
.vscode/settings.json vendored
View File

@@ -3,8 +3,10 @@
"typescript.tsdk": "node_modules\\typescript\\lib",
//格式化设置
"editor.tabSize": 4,
"editor.formatOnPaste": true,
"editor.formatOnPaste": false,
"editor.formatOnSave": true,
"editor.insertSpaces": true,
"editor.detectIndentation": false,
//格式设置
"typescript.format.placeOpenBraceOnNewLineForFunctions": true,
"typescript.format.placeOpenBraceOnNewLineForControlBlocks": true,
@@ -12,5 +14,30 @@
"javascript.format.placeOpenBraceOnNewLineForFunctions": true,
"javascript.format.enable": true,
"files.insertFinalNewline": true,
"editor.detectIndentation": true,
"typescript.format.semicolons": "insert",
"files.trimFinalNewlines": true,
"files.trimTrailingWhitespace": true,
//保存时
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
"gitlens.remotes": [
{
"domain": "gitee.com",
"type": "Custom",
"name": "码云",
"protocol": "https",
"urls": {
"repository": "https://gitee.com/cf-fz/${repoPath}",
"branches": "https://gitee.com/cf-fz/${repoPath}/branches",
"branch": "https://gitee.com/cf-fz/${repoPath}/commits/${branch}",
"commit": "https://gitee.com/cf-fz/${repoPath}/commit/${id}",
"file": "https://gitee.com/cf-fz/${repoPath}?path=${file}${line}",
"fileInBranch": "https://gitee.com/cf-fz/${repoPath}/blob/${branch}/${file}${line}",
"fileInCommit": "https://gitee.com/cf-fz/${repoPath}/blob/${id}/${file}${line}",
"fileLine": "#L${line}",
"fileRange": "#L${start}-L${end}"
}
}
],
}

View File

@@ -1,3 +1,6 @@
# 显示板件的控件
使用例子请参照项目:[CADViewSample](http://git.cf/cx/CADViewSample)
删除"@types/webpack-merge" 下的 node_modules/webpack 定义 坑爹导致项目跑不起来

View File

@@ -1,6 +1,4 @@
import * as HardSourceWebpackPlugin from 'hard-source-webpack-plugin';
import * as webpack from 'webpack';
import ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
const TS_LOADER = [
{ loader: 'cache-loader', options: { cacheDirectory: "node_modules/.cache_loader" } },
@@ -33,8 +31,6 @@ const config: webpack.Configuration = {
},
plugins: [
new HardSourceWebpackPlugin(),
new ForkTsCheckerWebpackPlugin({ checkSyntacticErrors: true }),
]
}

View File

@@ -1,7 +1,7 @@
import path from 'path';
import * as webpack from 'webpack';
import * as merge from 'webpack-merge';
import merge from 'webpack-merge';
import common from './webpack.common';
import * as path from 'path';
const config: webpack.Configuration = merge(
common,

View File

@@ -1,7 +1,7 @@
import * as webpack from 'webpack';
import * as merge from 'webpack-merge';
import merge from 'webpack-merge';
import common from './webpack.common';
import * as HtmlWebPackPlugin from "html-webpack-plugin";
import HtmlWebPackPlugin from "html-webpack-plugin";
const config: webpack.Configuration = merge(
common,

158
package-lock.json generated
View File

@@ -113,6 +113,12 @@
"@types/node": "*"
}
},
"@types/json-schema": {
"version": "7.0.7",
"resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.7.tgz?cache=0&sync_timestamp=1613378919536&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.7.tgz",
"integrity": "sha1-mKmTUWyFnrDVxMjwmDF6nqaNua0=",
"dev": true
},
"@types/mime": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/@types/mime/download/@types/mime-2.0.1.tgz?cache=0&sync_timestamp=1588201894076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fmime%2Fdownload%2F%40types%2Fmime-2.0.1.tgz",
@@ -1002,6 +1008,12 @@
"integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=",
"dev": true
},
"buffer-json": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/buffer-json/download/buffer-json-2.0.0.tgz",
"integrity": "sha1-9z4TseQvGW/i/WfQAcfXEH7dfCM=",
"dev": true
},
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
@@ -1068,6 +1080,152 @@
"unset-value": "^1.0.0"
}
},
"cache-loader": {
"version": "4.1.0",
"resolved": "https://registry.npm.taobao.org/cache-loader/download/cache-loader-4.1.0.tgz",
"integrity": "sha1-mUjK41OuwKH8ser9ojAIFuyFOH4=",
"dev": true,
"requires": {
"buffer-json": "^2.0.0",
"find-cache-dir": "^3.0.0",
"loader-utils": "^1.2.3",
"mkdirp": "^0.5.1",
"neo-async": "^2.6.1",
"schema-utils": "^2.0.0"
},
"dependencies": {
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz",
"integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1608059984992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz",
"integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=",
"dev": true
},
"big.js": {
"version": "5.2.2",
"resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz",
"integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=",
"dev": true
},
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz",
"integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=",
"dev": true
},
"find-cache-dir": {
"version": "3.3.1",
"resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz",
"integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=",
"dev": true,
"requires": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
"pkg-dir": "^4.1.0"
}
},
"find-up": {
"version": "4.1.0",
"resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169884679&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
"integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
"dev": true,
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
}
},
"json5": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-1.0.1.tgz",
"integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
"dev": true,
"requires": {
"minimist": "^1.2.0"
}
},
"loader-utils": {
"version": "1.4.0",
"resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz",
"integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=",
"dev": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^1.0.1"
}
},
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz",
"integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
"dev": true,
"requires": {
"p-locate": "^4.1.0"
}
},
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz",
"integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
"dev": true,
"requires": {
"semver": "^6.0.0"
}
},
"p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz",
"integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
"dev": true,
"requires": {
"p-limit": "^2.2.0"
}
},
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz",
"integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
"dev": true
},
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1602859056682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz",
"integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=",
"dev": true,
"requires": {
"find-up": "^4.0.0"
}
},
"schema-utils": {
"version": "2.7.1",
"resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz",
"integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.5",
"ajv": "^6.12.4",
"ajv-keywords": "^3.5.2"
}
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1606852064928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
"integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
"dev": true
}
}
},
"camel-case": {
"version": "4.1.1",
"resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-4.1.1.tgz",

View File

@@ -1,6 +1,6 @@
{
"name": "cadview",
"version": "1.2.3",
"version": "1.1.9",
"description": "",
"main": "src/index.ts",
"private": true,
@@ -8,7 +8,8 @@
"t": "tsc --noEmit -w",
"build": "tsc",
"umd": "webpack --config ./config/webpack.umd.ts",
"dev": "webpack-dev-server --config ./config/webpack.view.ts"
"dev": "webpack-dev-server --config ./config/webpack.view.ts",
"rmtype": "ts-node ./utils/rmtype.ts"
},
"repository": {
"type": "git",
@@ -18,29 +19,31 @@
"license": "ISC",
"devDependencies": {
"@types/hard-source-webpack-plugin": "^1.0.1",
"@types/node": "^13.13.4",
"@types/node": "^13.13.52",
"@types/three": "^0.103.2",
"@types/uglifyjs-webpack-plugin": "^1.1.0",
"@types/webpack": "^4.41.12",
"@types/webpack-dev-server": "^3.10.1",
"@types/webpack": "^4.41.32",
"@types/webpack-dev-server": "^3.11.6",
"@types/webpack-env": "^1.15.2",
"@types/webpack-merge": "^4.1.5",
"awesome-typescript-loader": "^5.2.1",
"cache-loader": "^4.1.0",
"fork-ts-checker-webpack-plugin": "^4.1.3",
"fork-ts-checker-webpack-plugin": "^4.1.6",
"hard-source-webpack-plugin": "^0.13.1",
"html-webpack-plugin": "^4.2.1",
"ts-loader": "^7.0.2",
"ts-node": "^8.9.1",
"typescript": "^3.8.3",
"html-webpack-plugin": "^4.5.2",
"ts-loader": "^7.0.5",
"ts-node": "^8.10.2",
"typescript": "^4.5.5",
"uglifyjs-webpack-plugin": "^2.2.0",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"webpack-dev-server": "^3.10.3",
"webpack": "^4.46.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.3",
"webpack-merge": "^4.2.2"
},
"dependencies": {
"three": "^0.120.1",
"wolfy87-eventemitter": "^5.2.9"
"@jscad/modeling": "^2.7.1",
"flatbush": "^3.3.0",
"three": "^0.115.0",
"webcad_ue4_api": "http://gitea.cf/cx/webcad-ue4-api/archive/0.2.3.tar.gz"
}
}

View File

@@ -1,5 +1,5 @@
import { Object3D, Mesh } from "three";
import { createTemplateBoard, DrawDimension, Viewer, selectMaterial } from ".";
import { createTemplateBoard, DrawDimension, Viewer } from ".";
function dispose(m: Object3D)
{
@@ -21,7 +21,7 @@ export function LoadBoard(view: Viewer, data: any[], clear: boolean = true)
if (data.length === 0) return;
//加板
let { meshs, edgesa, relations } = createTemplateBoard(data);
let { meshs, edgesa, relations } = createTemplateBoard(data, view._Settings.boardMaterial);
//加标注
let dims = DrawDimension(meshs);

View File

@@ -1,22 +1,21 @@
// import { Color, Face3, MeshBasicMaterial, Object3D, Vector2, Vector3 } from "three";
// import "./style.css";
import { Vector3 } from "three";
import { Color, MeshBasicMaterial, Vector3 } from "three";
import { CameraControlState } from "../CameraControls";
import { data } from "../data";
import { GetBox } from "../GeUtils";
import { LoadBoard } from "../Utils";
import { Viewer } from "../Viewer";
let btn = document.createElement("button");
btn.innerHTML = "载入"
btn.innerHTML = "载入";
document.body.appendChild(btn);
let btn2 = document.createElement("button");
btn2.innerHTML = "清理"
btn2.innerHTML = "清理";
document.body.appendChild(btn2);
let btn3 = document.createElement("button");
btn3.innerHTML = "爆炸图"
btn3.innerHTML = "爆炸图";
document.body.appendChild(btn3);
let el = document.createElement("canvas");
@@ -25,7 +24,17 @@ el.style.width = "80%";
el.style.height = "80%";
document.body.appendChild(el);
let view = new Viewer(el);
let view = new Viewer(el, (settings) =>
{
settings.boardMaterial = new MeshBasicMaterial({
color: new Color(0.8, 0.8, 0.8),
polygonOffset: true,
polygonOffsetFactor: 1, // positive value pushes polygon further away
polygonOffsetUnits: 1,
transparent: true,
opacity: 0.5
});
});
//修改这个顺序 改变1 2 3 个触摸点时的触发状态.
view.m_CameraCtrl.m_TouthTypeList = [CameraControlState.Rotate, CameraControlState.Scale, CameraControlState.Pan];
@@ -36,15 +45,16 @@ view.m_CameraCtrl.m_TouthTypeList = [CameraControlState.Pan, CameraControlState.
btn.onclick = () =>
{
console.time();
let data = require("./data.json");
for (let i = 0; i < 1; i++)
LoadBoard(view, data);
console.timeEnd();
}
};
btn2.onclick = () =>
{
// LoadBoard(view, []);
}
};
btn3.onclick = () =>
{
@@ -91,5 +101,5 @@ btn3.onclick = () =>
if (count === 60)
clearInterval(t);
}, 16)
}
}, 16);
};

View File

@@ -1,11 +1,18 @@
import { Mesh, Raycaster, Scene, Vector3, WebGLRenderer, WebGLRendererParameters } from "three";
import { Mesh, MeshBasicMaterial, Raycaster, Scene, Vector3, WebGLRenderer, WebGLRendererParameters } from "three";
import { boardMaterial, CameraControls, PointPick, selectMaterial } from ".";
import { CameraUpdate } from "./CameraUpdate";
import { ColorMaterial } from "./ColorPalette";
import { cZeroVec, GetBox, GetBoxArr } from "./GeUtils";
import { PlaneExt } from "./PlaneExt";
export class ViewerSettings
{
boardMaterial: MeshBasicMaterial = boardMaterial;
selectMaterial: MeshBasicMaterial = selectMaterial;
selectByPointCallback: (meshId: number) => void = () => { };
}
export class Viewer
{
m_LookTarget: any;
@@ -20,13 +27,19 @@ export class Viewer
m_Scene: Scene = new Scene();
_Settings = new ViewerSettings();
/**
*
* @param {HTMLElement} canvasContainer 可以传入一个div或者一个画布
* @memberof Viewer
*/
constructor(canvasContainer: HTMLElement)
constructor(canvasContainer: HTMLElement, setupAction: (settings: ViewerSettings) => void = null)
{
if (setupAction)
{
setupAction(this._Settings);
}
this.m_DomEl = canvasContainer;
this.initRender(canvasContainer);
this.OnSize();
@@ -193,11 +206,15 @@ export class Viewer
{
let mesh = PointPick(this, x, y);
if (this.oldMesh)
this.oldMesh.material = boardMaterial;
this.oldMesh.material = this._Settings.boardMaterial;
if (mesh && mesh.material !== ColorMaterial.GetBasicMaterial(1))
{
this.oldMesh = mesh;
mesh.material = selectMaterial;
mesh.material = this._Settings.selectMaterial;
if (this._Settings.selectByPointCallback)
{
this._Settings.selectByPointCallback(mesh.id);
}
}
this.m_bNeedUpdate = true;
}
@@ -207,7 +224,7 @@ export class Viewer
{
let meshId = blockMeshMap.get(dataID);
if (this.oldMesh)
this.oldMesh.material = boardMaterial;
this.oldMesh.material = this._Settings.boardMaterial;
this.m_Scene.children.forEach(obj =>
{
if (obj instanceof Mesh)
@@ -215,7 +232,7 @@ export class Viewer
if (obj.id == meshId)
{
this.oldMesh = obj;
obj.material = selectMaterial;
obj.material = this._Settings.selectMaterial;
this.m_bNeedUpdate = true;
}
}

View File

@@ -1,9 +1,8 @@
import { CylinderGeometry, Geometry, LineSegments, Mesh, Shape, Vector2, Vector3, Matrix4, ExtrudeGeometry, EdgesGeometry } from 'three';
import { CylinderGeometry, EdgesGeometry, Geometry, LineSegments, Matrix4, Mesh, MeshBasicMaterial, Shape, Vector2, Vector3 } from 'three';
import { boardUVGenerator2, ExtrudeSolid, Polyline } from 'webcad_ue4_api';
import { ColorMaterial } from './ColorPalette';
import { equalv3, polar } from './GeUtils';
import { boardMaterial, edgeMaterial } from './Material';
import { RotateUVs } from './RotateUV';
import { ThreeBSP } from './ThreeCSG';
import { polar } from './GeUtils';
import { edgeMaterial } from './Material';
//解析二维圆弧类.
export class Arc2d
{
@@ -56,7 +55,7 @@ export function createPath(pts: Vector2[], buls: number[], shapeOut?: Shape): Sh
let nextPt = pts[i + 1];
if (buls[i] == 0)
{
shape.lineTo(nextPt.x, nextPt.y)
shape.lineTo(nextPt.x, nextPt.y);
}
else
{
@@ -76,8 +75,7 @@ export function getVec(data: object): Vector3
return new Vector3(data["x"], data["y"], data["z"]);
}
//创建板件 暂时这么写
export function createBoard(boardData: object)
function Conver2Ext(boardData: object): ExtrudeSolid
{
let pts: Vector2[] = [];
let buls: number[] = [];
@@ -93,6 +91,7 @@ export function createBoard(boardData: object)
let yD = getVec(boardData["YVec"]);
let ZD = getVec(boardData["ZVec"]);
let pBase = getVec(boardData["BasePoint"]);
pBase.add(ZD.clone().multiplyScalar(-boardHeight));
boardMat.makeBasis(xD, yD, ZD);
boardMat.setPosition(pBase);
@@ -111,7 +110,6 @@ export function createBoard(boardData: object)
{
let length = boardData["L"];
let width = boardData["W"];
let height = boardData["H"];
pts.push(new Vector2(0, 0),
new Vector2(width, 0),
new Vector2(width, length),
@@ -121,45 +119,42 @@ export function createBoard(boardData: object)
buls.push(0, 0, 0, 0, 0);
}
let sp = createPath(pts, buls);
let extrudeSettings = {
steps: 1,
bevelEnabled: false,
depth: boardHeight
};
let ext = new ExtrudeSolid();
ext.OCSNoClone.copy(boardMat);
let pl = new Polyline(pts.map((p, i) => { return { pt: p, bul: buls[i] }; }));
ext.Thickness = boardHeight;
ext.ContourCurve = pl;
let ext = new ExtrudeGeometry(sp, extrudeSettings) as Geometry;
ext.computeBoundingSphere();
ext.computeBoundingBox();
ext.translate(0, 0, -boardHeight)
ext.applyMatrix4(boardMat);
if (!equalv3(xD.clone().cross(yD), ZD))
{
for (let f of ext.faces)
[f.a, f.c] = [f.c, f.a];
if (checkObjectArray(boardData, "SubBoardLocal"))
ext.Grooves.push(...boardData["SubBoardLocal"].map(Conver2Ext));
return ext;
}
//外边.
let edges: (LineSegments | Mesh)[] = [createEdge(ext)];
//创建板件 暂时这么写
export function createBoard(boardData: object, boardMaterial: MeshBasicMaterial)
{
let ext = Conver2Ext(boardData);
if (boardData["BoardName"] === "地脚线")
Object.defineProperty(ext, "UCGenerator",
{
get: function ()
{
return boardUVGenerator2;
},
});
//差集
if (checkObjectArray(boardData, "SubBoardLocal")
|| checkObjectArray(boardData, "Drillings"))
{
let thisCsg = new ThreeBSP(ext);
//板件被镜像时.
// if (!equalv3(xD.clone().cross(yD), ZD))
// {
// for (let f of ext.faces)
// [f.a, f.c] = [f.c, f.a];
// }
if (boardData["SubBoardLocal"])
{
let subBoardList = boardData["SubBoardLocal"].map(d => createBoard(d));
for (let br of subBoardList)
{
edges.push(...br.edges);
let subCsg = new ThreeBSP(br.mesh);
thisCsg = thisCsg.subtract(subCsg);
}
}
if (boardData["Drillings"])
//边
let edges: (LineSegments | Mesh)[] = [new LineSegments(ext.EdgeGeometry, edgeMaterial)];
edges[0].applyMatrix4(ext.OCSNoClone);
if (checkObjectArray(boardData, "Drillings"))
{
let dris = boardData["Drillings"];
for (let dri of dris)
@@ -168,31 +163,22 @@ export function createBoard(boardData: object)
geo.rotateX(Math.PI * 0.5);
if (dri.f === 0) //0正
geo.translate(dri.x, dri.y, -dri.h * 0.5);
geo.translate(dri.x, dri.y, -dri.h * 0.5 + boardData["H"]);
else //1反
geo.translate(dri.x, dri.y, dri.h * 0.5 - boardData["H"]);
geo.translate(dri.x, dri.y, dri.h * 0.5);
geo.applyMatrix4(boardMat);
geo.applyMatrix4(ext.OCSNoClone);
let mesh = new Mesh(geo, ColorMaterial.GetBasicMaterial(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();
}
if (boardData["BoardName"] === "地脚线")
RotateUVs(ext);
let mesh = new Mesh(ext, boardMaterial);
mesh.userData = ZD;
edges.forEach(e => e.userData = ZD);
let mesh = new Mesh(ext.MeshGeometry, boardMaterial);
mesh.userData = ext.Normal;
edges.forEach(e => e.userData = ext.Normal);
mesh.applyMatrix4(ext.OCSNoClone);
mesh.updateWorldMatrix(false, true);
return { mesh, edges };
}
@@ -201,7 +187,7 @@ function checkObjectArray(obj: any, key: string)
return obj[key] && obj[key].length > 0;
}
export function createTemplateBoard(brDataList: any[])
export function createTemplateBoard(brDataList: any[], material: MeshBasicMaterial)
{
let meshs = [];
let edgesa = [];
@@ -212,7 +198,7 @@ export function createTemplateBoard(brDataList: any[])
};
for (let d of brDataList)
{
let { mesh, edges } = createBoard(d);
let { mesh, edges } = createBoard(d, material);
meshs.push(mesh);
edgesa.push(...edges);

View File

@@ -1,10 +1,13 @@
{
"compileOnSave": true,
"compilerOptions": {
"sourceMap": true,
"declaration": true,
"outDir": "./dist",
"target": "esnext",
"sourceMap": true,
"module": "commonjs",
"target": "es2020",
"noLib": false,
"moduleResolution": "node",
"skipLibCheck": true,
"esModuleInterop": true,
"lib": [
"esnext",
"dom"
@@ -12,13 +15,13 @@
"types": [
"node",
"webpack-env",
"webpack-dev-server"
"webpack-dev-server",
],
"module": "commonjs",
"jsx": "react",
"experimentalDecorators": true
},
"include": [
"./src/**/*",
// "./config/**/*"
"./config/**/*"
]
}

7
utils/rmtype.ts Normal file
View File

@@ -0,0 +1,7 @@
import fs from "fs";
fs.rmdir(".\\node_modules\\@types\\webpack-merge\\node_modules\\webpack", { recursive: true }, (err) =>
{
console.log("删除webpack目录");
if (err) console.log(err);
});

5117
yarn.lock Normal file

File diff suppressed because it is too large Load Diff