原来有代码块功能,尴了个尬,以前不知道。。。
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using IFoxCAD.Cad;
using System;
namespace DYH.Action
{
public class _07画跑道
{
[CommandMethod("HPD")]
public void HPD()
{
var r1 = Env.Editor.GetPoint("\n选择插入点");//获取插入点
if (r1.Status != PromptStatus.OK) return;//如果用户没有正确输入则程序结束
var pt0 = r1.Value.Ucs2Wcs();//拿到坐标点
var pdo2 = new PromptDoubleOptions("\n输入中线长度") { AllowNone = true, AllowZero = false, AllowNegative = false };//设置实数获取选项,限值≥0
var r2 = Env.Editor.GetDouble(pdo2);//提示用户输入长度
if (r2.Status != PromptStatus.OK) return;//吐过用户没有正确输入长度则程序结束
var length = r2.Value;//拿到长度
var j1 = new JigEx((mp, de) =>//新建拖拽
{
var raidus = Math.Abs(mp.Y - pt0.Y);//半径等于Y的差值的绝对值
var width = (length - raidus * Math.PI * 2) * 0.5;//直段宽等于总长度减圆的周长再除以二//这个地方应该是乘0.5
if (width < 0) { width = 0;raidus = length / Math.PI / 2; }//直段长度<0时,图形是不成立的,这时候会是个圆,让width等于0,半径最大
var pt1 = new Point2d(pt0.X - width * 0.5, pt0.Y - raidus);//计算多段线4个角点位置,竖直的两边设置凸度变成半圆
var pt2 = new Point2d(pt1.X + width, pt1.Y);
var pt3 = new Point2d(pt2.X, pt0.Y + raidus);//
var pt4 = new Point2d(pt1.X, pt3.Y);
var pl = new Polyline();//新建多段线
pl.AddVertexAt(0, pt1, 0, 0, 0);
pl.AddVertexAt(1, pt2, 1, 0, 0);
pl.AddVertexAt(2, pt3, 0, 0, 0);
pl.AddVertexAt(3, pt4, 1, 0, 0);
pl.Closed = true;//曲线为闭合曲线
var dbc1 = pl.GetOffsetCurves(2);//将多段线往两边分别偏移2mm
var dbc2 = pl.GetOffsetCurves(-2);
//将所有线加入拖拽队列
foreach (var obj in dbc1)
{
if (obj is Entity ent) de.Enqueue(ent);
}
foreach (var obj in dbc2)
{
if (obj is Entity ent) de.Enqueue(ent);
}
pl.ColorIndex = 1;//中间线改为红色
de.Enqueue(pl);
});
j1.SetOptions(pt0.Ucs2Wcs(), msg: "\n选择拖拽点");//设置拖拽选项
var r3 = j1.Drag();//开始拖拽
if (r3.Status == PromptStatus.OK)//如果用户正确点击
{
using (var tr = new DBTrans())//建事务
{
tr.CurrentSpace.AddEntity(j1.Entitys);//将拖拽的图形加入图纸
}
}
else return;//其他情况程序结束
}
}
}