分离 arc join 的状态

pull/80/head
ChenX 6 years ago
parent c08309a140
commit e8b6e85804

@ -1,4 +1,7 @@
import { app } from "../ApplicationServices/Application";
import { Status } from "../Common/Status";
import { Arc } from "../DatabaseServices/Arc";
import { Circle } from "../DatabaseServices/Circle";
import { Curve } from '../DatabaseServices/Curve';
import { Command } from "../Editor/CommandMachine";
import { PromptStatus } from "../Editor/PromptResult";
@ -17,11 +20,36 @@ export class Command_Join implements Command
{
if (cu2Res.Entity instanceof Curve)
{
let bIsOK = cu1Res.Entity.Join(cu2Res.Entity);
if (bIsOK)
let status = cu1Res.Entity.Join(cu2Res.Entity);
if (status === Status.True)
{
cu2Res.Entity.Erase();
}
else if (status === Status.ConverToCircle)
{
let keyRes = await app.m_Editor.GetKeyWords({
Msg: "合并的圆弧段组成了一个圆。要转换为圆吗?",
KeyWordList: [
{ msg: "是", key: "Y" },
{ msg: "否", key: "N" }
]
});
if (keyRes.StringResult === "Y")
{
cu1Res.Entity.Erase();
cu2Res.Entity.Erase();
let arc = cu1Res.Entity as Arc;
let c = new Circle(arc.Center, arc.Radius);
app.m_Database.ModelSpace.Append(c);
}
}
else
{
app.m_Editor.Prompt("合并失败!");
}
}
}
}

@ -9,6 +9,7 @@ import { SelectBox } from '../Editor/SelectBox';
import { SelectSet } from '../Editor/SelectSet';
import { RenderType } from '../GraphicsSystem/Enum';
import { IntersectOption } from '../GraphicsSystem/IntersectWith';
import { Status } from '../Common/Status';
/**
* trim.
@ -68,7 +69,7 @@ export class Command_Trim implements Command
//正向遍历
for (; i < splitCus.length; i++)
{
if (cuStart.Join(splitCus[i]) != true)
if (cuStart.Join(splitCus[i]) != Status.True)
break;
}
splitCus.splice(0, i);//移除0->(i-1)的元素

@ -0,0 +1,11 @@
export enum Status
{
False = 0,
True = 1,
Canel = -1,
ConverToCircle = 101,
}

@ -12,6 +12,7 @@ import { Circle } from './Circle';
import { Curve } from './Curve';
import { Line } from './Line';
import { Polyline } from './Polyline';
import { Status } from '../Common/Status';
/**
*
* ACAD,,.
@ -292,7 +293,7 @@ export class Arc extends Curve
this.Update();
}
Join(cu: Curve): boolean
Join(cu: Curve): Status
{
if (cu instanceof Arc)
{
@ -312,43 +313,49 @@ export class Arc extends Curve
if (eaAllan > allAn)
this.EndAngle = ea;
return true;
return Status.True;
}
else if (equaln(sa, this.m_EndAngle))//this终点对起点
{
if (eaAllan < allAn || equaln(ea, this.m_StartAngle))
this.ConverToCircle();//圆
{
return Status.ConverToCircle;
}
else
this.EndAngle = ea;
return true;
return Status.True;
}
else if (equaln(ea, this.StartAngle))//this起点对终点
{
if (saAllan < allAn)
this.ConverToCircle();//圆
{
return Status.ConverToCircle;
}
else
this.StartAngle = sa;
return true;
return Status.True;
}
else if (equaln(ea, this.m_EndAngle))//this终点对终点
{
if (saAllan > allAn)
this.StartAngle = sa;
return true;
return Status.True;
}
else if (this.ParamOnCurve(this.GetParamAtAngle(sa)))
{
if (eaAllan < saAllan)
this.ConverToCircle();
{
return Status.ConverToCircle;
}
else if (eaAllan > allAn)
this.EndAngle = ea;
return true;
return Status.True;
}
else if (this.ParamOnCurve(this.GetParamAtAngle(ea)))
{
this.StartAngle = sa;
return true;
return Status.True;
}
//使用按负方向去计算它的参数
@ -373,11 +380,11 @@ export class Arc extends Curve
this.StartAngle = sa;
if (eaParam > 1)
this.EndAngle = ea;
return true;
return Status.True;
}
}
}
return false;
return Status.False;
}
private ConverToCircle()

@ -6,6 +6,7 @@ import { RenderType } from '../GraphicsSystem/Enum';
import { IntersectOption } from '../GraphicsSystem/IntersectWith';
import { Factory } from './CADFactory';
import { Entity } from './Entity';
import { Status } from '../Common/Status';
export enum ExtendType
{
@ -115,7 +116,7 @@ export abstract class Curve extends Entity
* @returns {boolean}
* @memberof Curve
*/
Join(cu: Curve): boolean { return false };
Join(cu: Curve): Status { return Status.False };
//翻转曲线.首尾调换.
Reverse(): this { return this; };

@ -12,6 +12,7 @@ import { Circle } from './Circle';
import { Curve } from './Curve';
import { Polyline } from './Polyline';
import { Vec3DTo2D } from '../Common/CurveUtils';
import { Status } from '../Common/Status';
@Factory
export class Line extends Curve
@ -223,13 +224,13 @@ export class Line extends Curve
}
}
Join(cu: Curve): boolean
Join(cu: Curve): Status
{
if (cu instanceof Line)
{
//如果不平行
if (!isParallelTo(this.GetFistDeriv(0), cu.GetFistDeriv(0)))
return false;
return Status.False;
let [param1, param2] = arraySortByNumber([this.GetParamAtPoint(cu.StartPoint), this.GetParamAtPoint(cu.EndPoint)]);
@ -241,10 +242,10 @@ export class Line extends Curve
this.Extend(param1);
if (param2 > 1)
this.Extend(param2);
return true;
return Status.False;
}
}
return false;
return Status.False;
};
Reverse(): this

@ -5,8 +5,9 @@ import { arrayLast, arrayRemoveDuplicateBySort } from '../Common/ArrayExt';
import { ColorMaterial } from '../Common/ColorPalette';
import { getDeterminantFor2V, Vec2DTo3D, Vec3DTo2D } from '../Common/CurveUtils';
import { matrixAlignCoordSys } from '../Common/Matrix4Utils';
import { Status } from '../Common/Status';
import { FixIndex } from '../Common/Utils';
import { equalv3, equaln, updateGeometry } from '../Geometry/GeUtils';
import { equaln, equalv3, updateGeometry } from '../Geometry/GeUtils';
import { RenderType } from '../GraphicsSystem/Enum';
import { IntersectOption, IntersectPolylineAndCurve } from '../GraphicsSystem/IntersectWith';
import { PolyOffsetUtil } from '../GraphicsSystem/OffsetPolyline';
@ -540,10 +541,10 @@ export class Polyline extends Curve
this.Update();
}
Join(cu: Curve, fuzz = 1e-5): boolean
Join(cu: Curve, fuzz = 1e-5)
{
if (this.m_ClosedMark)
return false;
return Status.False;
let [sp, ep, cuSp, cuEp] = [this.StartPoint, this.EndPoint, cu.StartPoint, cu.EndPoint];
@ -569,7 +570,7 @@ export class Polyline extends Curve
this.ReadFile(f);
}
else
return false;
return Status.False;
}
else
{
@ -592,7 +593,7 @@ export class Polyline extends Curve
this.m_LineData.push({ pt: cuSp2, bul: 0 });
}
else
return false;
return Status.False;
}
else if (cu instanceof Arc)
{
@ -616,11 +617,11 @@ export class Polyline extends Curve
this.m_LineData.push({ pt: cuSp2, bul: 0 });
}
else
return false;
return Status.False;
}
else if (cu instanceof Polyline)
{
if (cu.CloseMark) return false;
if (cu.CloseMark) return Status.False;
let { pts, buls } = this.PtsBuls;
@ -667,7 +668,7 @@ export class Polyline extends Curve
buls = buls.concat(cuPtsBul.buls);
}
else
return false;
return Status.False;
this.m_LineData.length = 0;
for (let i = 0; i < pts.length; i++)
@ -676,12 +677,12 @@ export class Polyline extends Curve
}
}
else
return false;
return Status.False;
}
//在上面的其他分支已经返回了假 所以这里直接返回真.
this.Update();
return true;
return Status.True;
};
PtOnCurve(pt: Vector3): boolean

Loading…
Cancel
Save