From 88b57be5073446ff443f583ddb1dc097bedde9e3 Mon Sep 17 00:00:00 2001 From: ChenX Date: Tue, 17 Mar 2020 20:22:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=E5=B8=A6=E6=A7=BD=E7=9A=84?= =?UTF-8?q?=E6=9D=BF=E4=BB=B6=E5=88=87=E5=89=B2=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DatabaseServices/Entity/Entity.ts | 1 + src/DatabaseServices/Entity/Extrude.ts | 10 +++++++--- src/Geometry/ExtrudeEdgeGeometry2.ts | 2 ++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/DatabaseServices/Entity/Entity.ts b/src/DatabaseServices/Entity/Entity.ts index 4051adda1..4c038bb5f 100644 --- a/src/DatabaseServices/Entity/Entity.ts +++ b/src/DatabaseServices/Entity/Entity.ts @@ -222,6 +222,7 @@ export class Entity extends CADObject for (let [, obj] of this._CacheDrawObject) DisposeThreeObj(obj); this._CacheDrawObject.clear(); + return this; } ClearDrawOfJig() { diff --git a/src/DatabaseServices/Entity/Extrude.ts b/src/DatabaseServices/Entity/Extrude.ts index 761a074ea..e33b1c36c 100644 --- a/src/DatabaseServices/Entity/Extrude.ts +++ b/src/DatabaseServices/Entity/Extrude.ts @@ -814,7 +814,7 @@ export class ExtrudeSolid extends Entity let n2 = target.Normal; if (isParallelTo(n1, n2)) { - target = target.Clone(); + target = target.Clone().ClearDraw(); if (!equalv3(n1, n2)) { let mtx = target._Matrix; @@ -880,7 +880,7 @@ export class ExtrudeSolid extends Entity let projection2SideMatrix4 = new Matrix4().makeBasis(xv, yv, zv); for (let c of contours) { - let g = target.Clone(); + let g = target.Clone().ClearDraw(); let gs = [g]; g.ContourCurve = c.Curve; g.GrooveCheckAll(gs); @@ -1005,7 +1005,7 @@ export class ExtrudeSolid extends Entity let grooves: ExtrudeSolid[] = []; for (let contour of inters) { - let ext = target.Clone(); + let ext = target.Clone().ClearDraw(); ext.ContourCurve = contour.Outline.Curve; ext.GrooveCheckAll(grooves); grooves.push(ext); @@ -1280,6 +1280,10 @@ export class ExtrudeSolid extends Entity return this._MeshGeometry; this.csg = undefined; + + if (this.thickness <= 0) + return new BufferGeometry(); + let grooves = this.Grooves; if (grooves.every(g => equaln(g.thickness, this.thickness))) { diff --git a/src/Geometry/ExtrudeEdgeGeometry2.ts b/src/Geometry/ExtrudeEdgeGeometry2.ts index b39f0c796..0b24fded4 100644 --- a/src/Geometry/ExtrudeEdgeGeometry2.ts +++ b/src/Geometry/ExtrudeEdgeGeometry2.ts @@ -1082,6 +1082,8 @@ function UnionRange(a: number, b: number, c: number, d: number, end: number): [n function SubtractRange(a: number, b: number, c: number, d: number, end: number): Range[] { + if (a < 0 || b < 0) return []; + if (a > b) return [...SubtractRange(a, end, c, d, end), ...SubtractRange(0, b, c, d, end)]; if (c > d)