|
|
|
@ -3,7 +3,9 @@ import { app } from "../../ApplicationServices/Application";
|
|
|
|
|
import { DiameterDimension } from "../../DatabaseServices/Dimension/DiameterDimension";
|
|
|
|
|
import { RadiusDimension } from "../../DatabaseServices/Dimension/RadiusDimension";
|
|
|
|
|
import { Arc } from "../../DatabaseServices/Entity/Arc";
|
|
|
|
|
import { Board } from "../../DatabaseServices/Entity/Board";
|
|
|
|
|
import { Circle } from "../../DatabaseServices/Entity/Circle";
|
|
|
|
|
import { Polyline } from "../../DatabaseServices/Entity/Polyline";
|
|
|
|
|
import { Command } from "../../Editor/CommandMachine";
|
|
|
|
|
import { JigUtils } from "../../Editor/JigUtils";
|
|
|
|
|
import { PromptStatus } from "../../Editor/PromptResult";
|
|
|
|
@ -14,6 +16,20 @@ export enum RadOrDia
|
|
|
|
|
Dia = 1,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetBoardCurve(ent: Board, p: Vector3): Arc | Circle | undefined
|
|
|
|
|
{
|
|
|
|
|
if (ent.ContourCurve instanceof Circle) return ent.ContourCurve;
|
|
|
|
|
|
|
|
|
|
let cu = ent.ContourCurve.Clone().ApplyMatrix(ent.OCSNoClone) as Polyline;
|
|
|
|
|
p = cu.GetClosestPointTo(p, false);
|
|
|
|
|
if (!p) return undefined;
|
|
|
|
|
|
|
|
|
|
let param = cu.GetParamAtPoint(p);
|
|
|
|
|
let ccu = cu.GetCurveAtParam(param);
|
|
|
|
|
if (ccu instanceof Arc)
|
|
|
|
|
return ccu;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class DrawRadiusDim implements Command
|
|
|
|
|
{
|
|
|
|
|
protected type: RadOrDia = RadOrDia.Rad;
|
|
|
|
@ -24,17 +40,34 @@ export class DrawRadiusDim implements Command
|
|
|
|
|
{
|
|
|
|
|
let enRes = await app.Editor.GetEntity({
|
|
|
|
|
Msg: "选择圆或者圆弧",
|
|
|
|
|
Filter: { filterTypes: [Circle, Arc] }
|
|
|
|
|
Filter: {
|
|
|
|
|
filterFunction: (obj, ent) =>
|
|
|
|
|
{
|
|
|
|
|
if (ent instanceof Arc || ent instanceof Circle) return true;
|
|
|
|
|
|
|
|
|
|
if (ent instanceof Board)
|
|
|
|
|
{
|
|
|
|
|
let ccu = GetBoardCurve(ent, app.Editor.MouseCtrl._CurMousePointWCS.clone());
|
|
|
|
|
return ccu !== undefined;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (enRes.Status === PromptStatus.Cancel)
|
|
|
|
|
return;
|
|
|
|
|
else if (enRes.Entity)
|
|
|
|
|
{
|
|
|
|
|
cu = enRes.Entity as Arc | Circle;
|
|
|
|
|
if (enRes.Entity instanceof Board)
|
|
|
|
|
cu = GetBoardCurve(enRes.Entity, enRes.Point);
|
|
|
|
|
else
|
|
|
|
|
cu = enRes.Entity as Arc | Circle;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!cu) return;
|
|
|
|
|
|
|
|
|
|
let rad = cu.Radius;
|
|
|
|
|
let oldUCS = app.Editor.UCSMatrix;
|
|
|
|
|
app.Editor.UCSMatrix = new Matrix4().extractRotation(cu.OCS);
|
|
|
|
|