|
|
|
@ -143,55 +143,43 @@ export class DrawLine implements Command
|
|
|
|
|
if (ptRes.Status === PromptStatus.OK)
|
|
|
|
|
{
|
|
|
|
|
//第一个是切点 第二个也是选切点
|
|
|
|
|
if (ptRes.SnapMode === ObjectSnapMode.Tan && firstSnapModeIsTan && firstTangeCircle && pts.length === 1)
|
|
|
|
|
if (ptRes.SnapMode === ObjectSnapMode.Tan && firstSnapModeIsTan && firstTangeCircle && pts.length === 1 && ptRes.SnapEntity)
|
|
|
|
|
{
|
|
|
|
|
if (!ptRes.SnapEntity)
|
|
|
|
|
let secondTangeCircle = ptRes.SnapEntity as Circle;
|
|
|
|
|
//计算最优切线
|
|
|
|
|
let lines = CircleInternalTangentLines(firstTangeCircle as Circle, secondTangeCircle).concat(CircleOuterTangentLines(firstTangeCircle as Circle, secondTangeCircle as Circle));
|
|
|
|
|
if (!lines?.length)
|
|
|
|
|
{
|
|
|
|
|
AppToaster.show({
|
|
|
|
|
message: "程序错误!无法获取捕捉圆,请重试!",
|
|
|
|
|
message: "选择的点位无法构成切线",
|
|
|
|
|
timeout: 3000,
|
|
|
|
|
intent: Intent.WARNING,
|
|
|
|
|
});
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
let secondTangeCircle = ptRes.SnapEntity as Circle;
|
|
|
|
|
//计算最优切线
|
|
|
|
|
let lines = CircleInternalTangentLines(firstTangeCircle as Circle, secondTangeCircle).concat(CircleOuterTangentLines(firstTangeCircle as Circle, secondTangeCircle as Circle));
|
|
|
|
|
if (!lines?.length)
|
|
|
|
|
{
|
|
|
|
|
AppToaster.show({
|
|
|
|
|
message: "选择的点位无法构成切线",
|
|
|
|
|
timeout: 3000,
|
|
|
|
|
intent: Intent.WARNING,
|
|
|
|
|
});
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let minDistance = Infinity;
|
|
|
|
|
let distance = Infinity;
|
|
|
|
|
let nearestObjectIndex = -1;
|
|
|
|
|
let minDistance = Infinity;
|
|
|
|
|
let distance = Infinity;
|
|
|
|
|
let nearestObjectIndex = -1;
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < lines.length; i++)
|
|
|
|
|
for (let i = 0; i < lines.length; i++)
|
|
|
|
|
{
|
|
|
|
|
distance = line.StartPoint.distanceTo(lines[i].StartPoint);
|
|
|
|
|
if (distance < minDistance)
|
|
|
|
|
{
|
|
|
|
|
distance = line.StartPoint.distanceTo(lines[i].StartPoint);
|
|
|
|
|
if (distance < minDistance)
|
|
|
|
|
{
|
|
|
|
|
minDistance = distance;
|
|
|
|
|
nearestObjectIndex = i;
|
|
|
|
|
}
|
|
|
|
|
minDistance = distance;
|
|
|
|
|
nearestObjectIndex = i;
|
|
|
|
|
}
|
|
|
|
|
line = lines[nearestObjectIndex];
|
|
|
|
|
}
|
|
|
|
|
line = lines[nearestObjectIndex];
|
|
|
|
|
|
|
|
|
|
app.LayoutTool.AppendDatabaseSpace(line);
|
|
|
|
|
app.LayoutTool.AppendDatabaseSpace(line);
|
|
|
|
|
|
|
|
|
|
drawLines.push(line);
|
|
|
|
|
ptLast = line.EndPoint;
|
|
|
|
|
pts.push(ptLast);
|
|
|
|
|
JigUtils.Destroy();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
drawLines.push(line);
|
|
|
|
|
ptLast = line.EndPoint;
|
|
|
|
|
pts.push(ptLast);
|
|
|
|
|
JigUtils.Destroy();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
//正常画线
|
|
|
|
|
line.EndPoint = ptRes.Point;
|
|
|
|
|