修复:带槽的板件切割错误

pull/823/head
ChenX 5 years ago
parent 4b581e7153
commit 88b57be507

@ -222,6 +222,7 @@ export class Entity extends CADObject
for (let [, obj] of this._CacheDrawObject) for (let [, obj] of this._CacheDrawObject)
DisposeThreeObj(obj); DisposeThreeObj(obj);
this._CacheDrawObject.clear(); this._CacheDrawObject.clear();
return this;
} }
ClearDrawOfJig() ClearDrawOfJig()
{ {

@ -814,7 +814,7 @@ export class ExtrudeSolid extends Entity
let n2 = target.Normal; let n2 = target.Normal;
if (isParallelTo(n1, n2)) if (isParallelTo(n1, n2))
{ {
target = target.Clone(); target = target.Clone().ClearDraw();
if (!equalv3(n1, n2)) if (!equalv3(n1, n2))
{ {
let mtx = target._Matrix; let mtx = target._Matrix;
@ -880,7 +880,7 @@ export class ExtrudeSolid extends Entity
let projection2SideMatrix4 = new Matrix4().makeBasis(xv, yv, zv); let projection2SideMatrix4 = new Matrix4().makeBasis(xv, yv, zv);
for (let c of contours) for (let c of contours)
{ {
let g = target.Clone(); let g = target.Clone().ClearDraw();
let gs = [g]; let gs = [g];
g.ContourCurve = c.Curve; g.ContourCurve = c.Curve;
g.GrooveCheckAll(gs); g.GrooveCheckAll(gs);
@ -1005,7 +1005,7 @@ export class ExtrudeSolid extends Entity
let grooves: ExtrudeSolid[] = []; let grooves: ExtrudeSolid[] = [];
for (let contour of inters) for (let contour of inters)
{ {
let ext = target.Clone(); let ext = target.Clone().ClearDraw();
ext.ContourCurve = contour.Outline.Curve; ext.ContourCurve = contour.Outline.Curve;
ext.GrooveCheckAll(grooves); ext.GrooveCheckAll(grooves);
grooves.push(ext); grooves.push(ext);
@ -1280,6 +1280,10 @@ export class ExtrudeSolid extends Entity
return this._MeshGeometry; return this._MeshGeometry;
this.csg = undefined; this.csg = undefined;
if (this.thickness <= 0)
return new BufferGeometry();
let grooves = this.Grooves; let grooves = this.Grooves;
if (grooves.every(g => equaln(g.thickness, this.thickness))) if (grooves.every(g => equaln(g.thickness, this.thickness)))
{ {

@ -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[] function SubtractRange(a: number, b: number, c: number, d: number, end: number): Range[]
{ {
if (a < 0 || b < 0) return [];
if (a > b) if (a > b)
return [...SubtractRange(a, end, c, d, end), ...SubtractRange(0, b, c, d, end)]; return [...SubtractRange(a, end, c, d, end), ...SubtractRange(0, b, c, d, end)];
if (c > d) if (c > d)

Loading…
Cancel
Save