功能:dli和半径标注,直径标注可以直接标注板

pull/1502/MERGE
ChenX 3 years ago
parent 125ebca5b6
commit 60066345d9

@ -1,9 +1,10 @@
import { Vector3, Matrix4 } from 'three';
import { Matrix4, Vector3 } from 'three';
import { app } from '../../ApplicationServices/Application';
import { Circle } from '../../DatabaseServices/Entity/Circle';
import { Curve } from '../../DatabaseServices/Entity/Curve';
import { AlignedDimension } from '../../DatabaseServices/Dimension/AlignedDimension';
import { LinearDimension } from '../../DatabaseServices/Dimension/LinearDimension';
import { Board } from '../../DatabaseServices/Entity/Board';
import { Circle } from '../../DatabaseServices/Entity/Circle';
import { Curve } from '../../DatabaseServices/Entity/Curve';
import { Line } from '../../DatabaseServices/Entity/Line';
import { Polyline } from '../../DatabaseServices/Entity/Polyline';
import { Command } from '../../Editor/CommandMachine';
@ -53,7 +54,7 @@ export class DrawAlignedDimension implements Command
{
let enRes = await app.Editor.GetEntity({
Msg: "选择对象",
Filter: { filterTypes: [Curve] }
Filter: { filterTypes: [Curve, Board] }
});
if (enRes.Status !== PromptStatus.OK)
return;
@ -61,6 +62,10 @@ export class DrawAlignedDimension implements Command
let en = enRes.Entity as Curve;
let footPt1: Vector3;
let footPt2: Vector3;
if (en instanceof Board)
en = en.ContourCurve.Clone().ApplyMatrix(en.OCSNoClone);
if (en instanceof Polyline || en instanceof Circle)
{
let cp = en.GetClosestPointTo(enRes.Point, false);

@ -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)
{
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);

Loading…
Cancel
Save