From 8e924f0baac5a9e6276494190ac878fe5db130cc Mon Sep 17 00:00:00 2001 From: ZoeLeeFZ Date: Tue, 30 Jul 2019 07:57:41 +0800 Subject: [PATCH] =?UTF-8?q?!434=20fix=20#IZQJT=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=8E=92=E9=92=BB=E5=9C=A8=E9=80=A0=E5=9E=8B=E9=87=8C=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Add-on/DrawDrilling/DrawDrillingTool.ts | 12 +++++++++++- src/Common/KeyEnum.ts | 1 + src/Editor/UserConfig.ts | 4 ++++ .../Components/Modal/OptionModal/DrawConfigPanel.tsx | 10 ++++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/Add-on/DrawDrilling/DrawDrillingTool.ts b/src/Add-on/DrawDrilling/DrawDrillingTool.ts index 50a7ac7ba..521370fb4 100644 --- a/src/Add-on/DrawDrilling/DrawDrillingTool.ts +++ b/src/Add-on/DrawDrilling/DrawDrillingTool.ts @@ -16,6 +16,8 @@ import { equaln, MoveMatrix, ZAxis } from "../../Geometry/GeUtils"; import { FaceDirection } from "../../UI/Store/BoardInterface"; import { DrillingOption, SpacingType } from "../../UI/Store/drillInterface"; import { begin } from "xaop"; +import { IsPointInPolyLine } from "../../DatabaseServices/PointInPolyline"; +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; export class DrawDrillingTool extends Singleton @@ -231,7 +233,9 @@ export class DrawDrillingTool extends Singleton { if (this.CheckModelingCollision(this.m_Face.m_InterBoard, this.drillEnts[0], dist)) continue; - + //检测排钻是否在板件内 + if (userConfig.openExactDrill && !this.CheckDrillInBoard(this.m_Face.m_InterBoard, this.drillEnts[0], dist)) + continue; if (this.drillEnts.length === 3) { if (this.CheckModelingCollision(this.m_Face.m_LocalBoard, this.drillEnts[2], dist)) @@ -273,6 +277,12 @@ export class DrawDrillingTool extends Singleton } return false; } + private CheckDrillInBoard(br: Board, en: GangDrill, dist: number) + { + let cu = br.ContourCurve; + let p = en.Position.setX(dist).applyMatrix4(this.m_Face.OCS).applyMatrix4(br.OCSInv); + return IsPointInPolyLine(cu as Polyline, p); + } // 分析当前排钻 private ParseDrillList(drills: ObjectId[][]) { diff --git a/src/Common/KeyEnum.ts b/src/Common/KeyEnum.ts index 106ee4809..8c7dbcbf0 100644 --- a/src/Common/KeyEnum.ts +++ b/src/Common/KeyEnum.ts @@ -329,4 +329,5 @@ export enum StoreageKeys PlatSession = "platSession", UserName = "userName", RenderType = "renderType", + ExactDrill = "openExactDrill", } diff --git a/src/Editor/UserConfig.ts b/src/Editor/UserConfig.ts index f4ea12f2d..73fc07f1f 100644 --- a/src/Editor/UserConfig.ts +++ b/src/Editor/UserConfig.ts @@ -16,6 +16,8 @@ export class UserConfig @observable private _drillConfigs: Map = new Map(); @observable openDrillingReactor = true; @observable openAutoCuttingReactor = true; + /**打开将检测排钻是否在板件内*/ + @observable openExactDrill = true; winerackConfig: IWineRackOption; constructor() { @@ -26,6 +28,8 @@ export class UserConfig let type = sessionStorage.getItem(StoreageKeys.RenderType); if (type) this._renderType = parseFloat(type); + + this.openExactDrill = localStorage.getItem(StoreageKeys.ExactDrill) === "true"; } set RenderType(t: RenderType) { diff --git a/src/UI/Components/Modal/OptionModal/DrawConfigPanel.tsx b/src/UI/Components/Modal/OptionModal/DrawConfigPanel.tsx index 1298ae511..b5c7f36dd 100644 --- a/src/UI/Components/Modal/OptionModal/DrawConfigPanel.tsx +++ b/src/UI/Components/Modal/OptionModal/DrawConfigPanel.tsx @@ -3,6 +3,7 @@ import { observer } from 'mobx-react'; import * as React from 'react'; import { app } from '../../../../ApplicationServices/Application'; import { UserConfig } from '../../../../Editor/UserConfig'; +import { StoreageKeys } from '../../../../Common/KeyEnum'; interface IConfigProps { @@ -35,6 +36,15 @@ export class DrawConfigPanel extends React.Component { checked={userConfig.openDrillingReactor} onChange={this.toggleDrillingReactor} /> + + { + userConfig.openExactDrill = !userConfig.openExactDrill; + localStorage.setItem(StoreageKeys.ExactDrill, String(userConfig.openExactDrill)) + }} + />
板件绘图配置