|
|
|
@ -17,7 +17,7 @@ import { equaln, equalv2, equalv3, isIntersect, isParallelTo, MoveMatrix, ZeroVe
|
|
|
|
|
import { ScaleUV } from "../../Geometry/UVUtils";
|
|
|
|
|
import { RenderType } from "../../GraphicsSystem/RenderType";
|
|
|
|
|
import { BlockTableRecord } from "../BlockTableRecord";
|
|
|
|
|
import { Factory } from "../CADFactory";
|
|
|
|
|
import { Factory, CADFactory } from "../CADFactory";
|
|
|
|
|
import { CADFiler } from "../CADFiler";
|
|
|
|
|
import { Contour } from "../Contour";
|
|
|
|
|
import { Shape } from "../Shape";
|
|
|
|
@ -28,7 +28,7 @@ import { Polyline } from "./Polyline";
|
|
|
|
|
import { Region } from "./Region";
|
|
|
|
|
|
|
|
|
|
export type ExtureContourCurve = Polyline | Circle;
|
|
|
|
|
export type ExtureContour = Polyline | Circle | ExtureSolid | Region;
|
|
|
|
|
export type ExtureContour = Polyline | Circle | ExtrudeSolid | Region;
|
|
|
|
|
|
|
|
|
|
enum DragPointType
|
|
|
|
|
{
|
|
|
|
@ -37,7 +37,7 @@ enum DragPointType
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Factory
|
|
|
|
|
export class ExtureSolid extends Entity
|
|
|
|
|
export class ExtrudeSolid extends Entity
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
------------
|
|
|
|
@ -71,7 +71,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
/**
|
|
|
|
|
* 正面和反面的凹槽造型
|
|
|
|
|
*/
|
|
|
|
|
protected grooves: ExtureSolid[] = [];
|
|
|
|
|
protected grooves: ExtrudeSolid[] = [];
|
|
|
|
|
|
|
|
|
|
protected knifeRadius: number = 3;
|
|
|
|
|
protected groovesAddLength: number = 0;
|
|
|
|
@ -346,7 +346,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
// [ + ] 产生网洞.
|
|
|
|
|
for (let hole of unionShapes[0].Holes)
|
|
|
|
|
{
|
|
|
|
|
let g = new ExtureSolid();
|
|
|
|
|
let g = new ExtrudeSolid();
|
|
|
|
|
g.thickness = this.thickness;
|
|
|
|
|
g.ContourCurve = hole.Curve;
|
|
|
|
|
g.ApplyMatrix(this.OCS);
|
|
|
|
@ -393,7 +393,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
return Status.False;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AppendGroove(groove: ExtureSolid)
|
|
|
|
|
AppendGroove(groove: ExtrudeSolid)
|
|
|
|
|
{
|
|
|
|
|
this.WriteAllObjectRecord();
|
|
|
|
|
if (this.GrooveCheckPosition(groove) === Status.True)
|
|
|
|
@ -695,7 +695,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
* @param target 该对象可能被修改(内部不拷贝该实体)
|
|
|
|
|
* @param useClone 转换后的实体是目标实体拷贝后修改的
|
|
|
|
|
*/
|
|
|
|
|
ConverToLocalGroove(target: this, useClone = false): ExtureSolid[]
|
|
|
|
|
ConverToLocalGroove(target: this, useClone = false): ExtrudeSolid[]
|
|
|
|
|
{
|
|
|
|
|
if (isParallelTo(this.Normal, target.Normal))
|
|
|
|
|
{
|
|
|
|
@ -715,7 +715,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
|
|
|
|
|
let interBSP = this.CSG.intersect(target.CSG.transform1(this.OCSInv.multiply(target.OCS)));
|
|
|
|
|
let topology = new BSPGroupParse(interBSP);
|
|
|
|
|
let grooves: ExtureSolid[] = [];
|
|
|
|
|
let grooves: ExtrudeSolid[] = [];
|
|
|
|
|
for (let pts of topology.Parse())
|
|
|
|
|
{
|
|
|
|
|
for (let p of pts)
|
|
|
|
@ -723,7 +723,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
let box = new Box3().setFromPoints(pts);
|
|
|
|
|
let size = box.getSize(new Vector3());
|
|
|
|
|
|
|
|
|
|
let ext = useClone ? target.Clone() : new ExtureSolid();
|
|
|
|
|
let ext = useClone ? target.Clone() : new ExtrudeSolid();
|
|
|
|
|
if (useClone)
|
|
|
|
|
ext.grooves.length = 0;
|
|
|
|
|
ext.ConverToRectSolid(size.x, size.y, size.z);
|
|
|
|
@ -740,7 +740,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
* (步骤2)
|
|
|
|
|
* 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集)
|
|
|
|
|
*/
|
|
|
|
|
GrooveCheckPosition(target: ExtureSolid): Status
|
|
|
|
|
GrooveCheckPosition(target: ExtrudeSolid): Status
|
|
|
|
|
{
|
|
|
|
|
if (target.thickness <= 1e-3)
|
|
|
|
|
return Status.False;
|
|
|
|
@ -770,7 +770,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
*/
|
|
|
|
|
GrooveCheckMerge()
|
|
|
|
|
{
|
|
|
|
|
let thicknessMap = new Map<string, Array<ExtureSolid>>();
|
|
|
|
|
let thicknessMap = new Map<string, Array<ExtrudeSolid>>();
|
|
|
|
|
|
|
|
|
|
for (let groove of this.grooves)
|
|
|
|
|
{
|
|
|
|
@ -781,7 +781,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
thicknessMap.get(thicknessStr).push(groove);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let gs: ExtureSolid[] = [];
|
|
|
|
|
let gs: ExtrudeSolid[] = [];
|
|
|
|
|
for (let [, grooves] of thicknessMap)
|
|
|
|
|
{
|
|
|
|
|
while (grooves.length > 0)
|
|
|
|
@ -819,7 +819,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
* @param target 不拷贝修改
|
|
|
|
|
* @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个)
|
|
|
|
|
*/
|
|
|
|
|
GrooveCheckContour(target: ExtureSolid): ExtureSolid[]
|
|
|
|
|
GrooveCheckContour(target: ExtrudeSolid): ExtrudeSolid[]
|
|
|
|
|
{
|
|
|
|
|
if (equaln(target.thickness, this.thickness))
|
|
|
|
|
return [target];
|
|
|
|
@ -841,7 +841,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
let grooves: ExtureSolid[] = [];
|
|
|
|
|
let grooves: ExtrudeSolid[] = [];
|
|
|
|
|
for (let contour of inters)
|
|
|
|
|
{
|
|
|
|
|
let ext = target.Clone();
|
|
|
|
@ -866,7 +866,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
);
|
|
|
|
|
let subtractShape = new ShapeManager();
|
|
|
|
|
|
|
|
|
|
let grooves: ExtureSolid[] = [];
|
|
|
|
|
let grooves: ExtrudeSolid[] = [];
|
|
|
|
|
arrayRemoveIf(this.grooves, groove =>
|
|
|
|
|
{
|
|
|
|
|
if (equaln(groove.thickness, this.thickness))
|
|
|
|
@ -904,7 +904,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
|
|
|
|
|
for (let hole of shape.Holes)
|
|
|
|
|
{
|
|
|
|
|
let groove = new ExtureSolid();
|
|
|
|
|
let groove = new ExtrudeSolid();
|
|
|
|
|
groove.ContourCurve = hole.Curve;
|
|
|
|
|
groove.thickness = this.thickness;
|
|
|
|
|
groove.OCS = this.OCS;
|
|
|
|
@ -922,7 +922,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
this.ContourCurve = shape.Outline.Curve;
|
|
|
|
|
for (let hole of shape.Holes)
|
|
|
|
|
{
|
|
|
|
|
let groove = new ExtureSolid();
|
|
|
|
|
let groove = new ExtrudeSolid();
|
|
|
|
|
groove.OCS = this.OCS;
|
|
|
|
|
groove.ContourCurve = hole.Curve;
|
|
|
|
|
groove.thickness = this.thickness;
|
|
|
|
@ -1175,7 +1175,7 @@ export class ExtureSolid extends Entity
|
|
|
|
|
for (let i = 0; i < grooveCount; i++)
|
|
|
|
|
{
|
|
|
|
|
if (this.grooves[i] === undefined)
|
|
|
|
|
this.grooves[i] = new ExtureSolid();
|
|
|
|
|
this.grooves[i] = new ExtrudeSolid();
|
|
|
|
|
|
|
|
|
|
this.grooves[i].ReadFileLite(file);
|
|
|
|
|
}
|
|
|
|
@ -1228,3 +1228,6 @@ function FastMeshGeometry(width: number, height: number, thickness: number)
|
|
|
|
|
geo.translate(width * 0.5, height * 0.5, thickness * 0.5);
|
|
|
|
|
return geo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CADFactory.RegisterObjectAlias(ExtrudeSolid, "ExtureSolid");
|
|
|
|
|