From 5d95050069805c4538222e2c6411e8db41c6cd1e Mon Sep 17 00:00:00 2001 From: ChenX Date: Wed, 7 Aug 2019 18:30:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Add-on/BoardCutting/ReferenceCutting.ts | 5 ++--- src/Add-on/BoardEditor/Board2Regions.ts | 3 +-- src/Common/Matrix4Utils.ts | 10 ++++++++++ .../Dimension/2LineAngularDimension.ts | 12 ++++++------ src/DatabaseServices/Dimension/AlignedDimension.ts | 4 ++-- src/Geometry/BSPGroupParse.ts | 7 +------ src/Geometry/IVec3.ts | 7 +++++++ src/GraphicsSystem/ToolPath/VKnifToolPath.ts | 12 +++--------- src/UI/DynamicPrompt/AngleDynamicInput.ts | 2 +- src/UI/DynamicPrompt/DynamicInputBase.ts | 2 +- 10 files changed, 34 insertions(+), 30 deletions(-) create mode 100644 src/Geometry/IVec3.ts diff --git a/src/Add-on/BoardCutting/ReferenceCutting.ts b/src/Add-on/BoardCutting/ReferenceCutting.ts index 836f9af94..11edbb466 100644 --- a/src/Add-on/BoardCutting/ReferenceCutting.ts +++ b/src/Add-on/BoardCutting/ReferenceCutting.ts @@ -1,11 +1,10 @@ -import { Vector3 } from "three"; import { app } from "../../ApplicationServices/Application"; import { Board } from "../../DatabaseServices/Entity/Board"; import { Line } from "../../DatabaseServices/Entity/Line"; import { Polyline } from "../../DatabaseServices/Entity/Polyline"; import { Command } from "../../Editor/CommandMachine"; import { PromptStatus } from "../../Editor/PromptResult"; -import { equaln } from "../../Geometry/GeUtils"; +import { equaln, ZeroVec } from "../../Geometry/GeUtils"; import { RegionParse } from "../../Geometry/RegionParse"; import { IntersectOption } from "../../GraphicsSystem/IntersectWith"; import { ModalPosition, ModalState } from "../../UI/Components/Modal/ModalsManage"; @@ -92,7 +91,7 @@ export class ReferenceCutting implements Command } //切割刀线 方向的投影 - let cutLineDir = brNorm.cross(brKnifNorm).applyMatrix4(br.OCSInv.setPosition(new Vector3())); + let cutLineDir = brNorm.cross(brKnifNorm).applyMatrix4(br.OCSInv.setPosition(ZeroVec)); let brContour = br.ContourCurve; diff --git a/src/Add-on/BoardEditor/Board2Regions.ts b/src/Add-on/BoardEditor/Board2Regions.ts index 9a0b61891..4ca1c0a30 100644 --- a/src/Add-on/BoardEditor/Board2Regions.ts +++ b/src/Add-on/BoardEditor/Board2Regions.ts @@ -13,7 +13,6 @@ import { ZeroVec } from "../../Geometry/GeUtils"; export function Board2Regions(br: Board): Region[] { let ocs = br.OCS; - let ocsRotate = ocs.clone().setPosition(ZeroVec); let cu = br.ContourCurve.Clone(); @@ -40,7 +39,7 @@ export function Board2Regions(br: Board): Region[] let reg = Region.CreateFromCurves([rectPl]); let p = l.StartPoint.applyMatrix4(ocs); - let x = l.GetFistDeriv(0).normalize().applyMatrix4(ocsRotate); + let x = l.GetFistDeriv(0).transformDirection(ocs); let y = br.Normal; let z = new Vector3().crossVectors(x, y); diff --git a/src/Common/Matrix4Utils.ts b/src/Common/Matrix4Utils.ts index 7697d9bed..7d89278f0 100644 --- a/src/Common/Matrix4Utils.ts +++ b/src/Common/Matrix4Utils.ts @@ -103,3 +103,13 @@ export function GetMirrorMat(v: Vector3) mirrorMat.makeBasis(xAxis, yAxis, zAxis); return mirrorMat; } + +export function ApplyMatrix4IgnorePosition(vec: { x: number, y: number, z: number }, m: Matrix4) +{ + let { x, y, z } = vec; + let e = m.elements; + vec.x = e[0] * x + e[4] * y + e[8] * z; + vec.y = e[1] * x + e[5] * y + e[9] * z; + vec.z = e[2] * x + e[6] * y + e[10] * z; + return vec; +} diff --git a/src/DatabaseServices/Dimension/2LineAngularDimension.ts b/src/DatabaseServices/Dimension/2LineAngularDimension.ts index 7dbd92489..942fe27aa 100644 --- a/src/DatabaseServices/Dimension/2LineAngularDimension.ts +++ b/src/DatabaseServices/Dimension/2LineAngularDimension.ts @@ -1,18 +1,18 @@ -import { Math as TMath, Mesh, Object3D, Vector3, Line as TLine, BufferGeometry, Matrix3 } from "three"; +import { BufferGeometry, Line as TLine, Math as TMath, Matrix3, Mesh, Object3D, Vector3 } from "three"; import { arrayRemoveDuplicateBySort, arraySortByNumber } from "../../Common/ArrayExt"; import { ColorMaterial } from "../../Common/ColorPalette"; import { FixedNotZero, FixIndex } from "../../Common/Utils"; +import { ObjectSnapMode } from "../../Editor/ObjectSnapMode"; import { BufferGeometryUtils } from "../../Geometry/BufferGeometryUtils"; -import { angle, equalv3, equaln } from "../../Geometry/GeUtils"; -import { RenderType } from "../../GraphicsSystem/RenderType"; +import { angle, equaln, equalv3, ZeroVec } from "../../Geometry/GeUtils"; import { IntersectOption } from "../../GraphicsSystem/IntersectWith"; -import { Arc } from "../Entity/Arc"; +import { RenderType } from "../../GraphicsSystem/RenderType"; import { Factory } from "../CADFactory"; import { CADFiler } from "../CADFiler"; +import { Arc } from "../Entity/Arc"; import { Entity } from "../Entity/Entity"; import { Line } from "../Entity/Line"; import { Text, TextAligen } from "../Text/Text"; -import { ObjectSnapMode } from "../../Editor/ObjectSnapMode"; /** * 两条直线的标注 @@ -102,7 +102,7 @@ export class LineAngularDimension extends Entity this.m_L2EndPoint, this.m_DimPoint, ]; - let ocsinv = this.OCSInv.setPosition(new Vector3()); + let ocsinv = this.OCSInv.setPosition(ZeroVec); vec = vec.clone().applyMatrix4(ocsinv); diff --git a/src/DatabaseServices/Dimension/AlignedDimension.ts b/src/DatabaseServices/Dimension/AlignedDimension.ts index d652326b6..78d17f431 100644 --- a/src/DatabaseServices/Dimension/AlignedDimension.ts +++ b/src/DatabaseServices/Dimension/AlignedDimension.ts @@ -3,7 +3,7 @@ import { ColorMaterial } from "../../Common/ColorPalette"; import { FixedNotZero } from "../../Common/Utils"; import { ObjectSnapMode } from "../../Editor/ObjectSnapMode"; import { BufferGeometryUtils } from "../../Geometry/BufferGeometryUtils"; -import { angle, angleAndX, midPoint } from "../../Geometry/GeUtils"; +import { angle, angleAndX, midPoint, ZeroVec } from "../../Geometry/GeUtils"; import { RenderType } from "../../GraphicsSystem/RenderType"; import { Factory } from "../CADFactory"; import { CADFiler } from "../CADFiler"; @@ -231,7 +231,7 @@ export class AlignedDimension extends Entity } else { - vec = vec.clone().applyMatrix4(this.OCSInv.clone().setPosition(new Vector3())); + vec = vec.clone().applyMatrix4(this.OCSInv.clone().setPosition(ZeroVec)); if (i === 0) this.m_FootP1.add(vec); else diff --git a/src/Geometry/BSPGroupParse.ts b/src/Geometry/BSPGroupParse.ts index 8364138c1..79c979ad4 100644 --- a/src/Geometry/BSPGroupParse.ts +++ b/src/Geometry/BSPGroupParse.ts @@ -2,12 +2,7 @@ import { Vector3 } from "three"; import { ToFixed } from "../Common/Utils"; import { CSG } from "../csg/core/CSG"; import { Polygon } from "../csg/core/math/Polygon3"; -interface Vec3 -{ - x: number; - y: number; - z: number; -} +import { Vec3 } from "./IVec3"; /** * 解决 THREEBSP(CSG) 产生的结果没有办法得到分裂的个数. diff --git a/src/Geometry/IVec3.ts b/src/Geometry/IVec3.ts new file mode 100644 index 000000000..6302299d7 --- /dev/null +++ b/src/Geometry/IVec3.ts @@ -0,0 +1,7 @@ + +export interface Vec3 +{ + x: number; + y: number; + z: number; +} diff --git a/src/GraphicsSystem/ToolPath/VKnifToolPath.ts b/src/GraphicsSystem/ToolPath/VKnifToolPath.ts index 9d4dd9689..c68d16bca 100644 --- a/src/GraphicsSystem/ToolPath/VKnifToolPath.ts +++ b/src/GraphicsSystem/ToolPath/VKnifToolPath.ts @@ -1,16 +1,10 @@ -import { Polyline } from "../../DatabaseServices/Entity/Polyline"; import { arrayRemoveIf } from "../../Common/ArrayExt"; import { FixIndex } from "../../Common/Utils"; -import { IntersectOption } from "../IntersectWith"; import { Arc } from "../../DatabaseServices/Entity/Arc"; import { Line } from "../../DatabaseServices/Entity/Line"; - -interface Vec3 -{ - x: number; - y: number; - z: number; -} +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; +import { Vec3 } from "../../Geometry/IVec3"; +import { IntersectOption } from "../IntersectWith"; /** * V型刀走刀数据 diff --git a/src/UI/DynamicPrompt/AngleDynamicInput.ts b/src/UI/DynamicPrompt/AngleDynamicInput.ts index 4ac1801e7..679c562fa 100644 --- a/src/UI/DynamicPrompt/AngleDynamicInput.ts +++ b/src/UI/DynamicPrompt/AngleDynamicInput.ts @@ -53,7 +53,7 @@ export class AngleDynamicInput extends RealDynamicInput super.Destroy(); this.angleSymbolEl.remove(); } - SetPosition(x, y) + SetPosition(x: number, y: number) { super.SetPosition(x, y); this.angleSymbolEl.style.display = "block"; diff --git a/src/UI/DynamicPrompt/DynamicInputBase.ts b/src/UI/DynamicPrompt/DynamicInputBase.ts index b43fd61bc..3660066f8 100644 --- a/src/UI/DynamicPrompt/DynamicInputBase.ts +++ b/src/UI/DynamicPrompt/DynamicInputBase.ts @@ -154,7 +154,7 @@ export class DynamicInput this.Lock = false; } //设置位置 - SetPosition(x, y) + SetPosition(x: number, y: number) { if (DynamicInputManage.GetManage().IsInputing) return; this.container.style.left = `${x}px`;