使用工具==CAD2019+VS2022
主要作用==通过图层选择多条直线,将直线的长度进行求和统计,将统计的结果绘制在CAD表格中
代码示例:
[CommandMethod("Test")]
public void Test()
{
//数据库
Database db =HostApplicationServices.WorkingDatabase;
//命令行
Editor ed = AutoCad.Application.DocumentManager.MdiActiveDocument.Editor;
//直线
Line lines = new Line();
//直线长度集合
List<double> lineLenth = new List<double>();
//选择的直线个数
int nums = lineLenth.Count;
//选择的直线长度总合
double allLength = 0;
//组过滤器
TypedValue[] values = new TypedValue[]
{
//按图层过滤
new TypedValue((int)DxfCode.LayerName,"污水管道"),
new TypedValue((int)DxfCode.Start,"LINE"),//按类型过滤
};
//按过滤器选择
SelectionFilter filter = new SelectionFilter(values);
//通过 过滤器 选择实体
PromptSelectionResult psResult = ed.GetSelection(filter);
//如果选择成功
if (psResult.Status == PromptStatus.OK)
{
//获取实体的id
ObjectId[] ids = psResult.Value.GetObjectIds();
//开启事务
using(Transaction trans = db.TransactionManager.StartTransaction())
{
foreach (ObjectId item in ids)
{
//获取实体对象
Entity ents = trans.GetObject(item,OpenMode.ForRead) as Entity;
//如果选择的是直线类型
if(ents is Line)
{
//把选择的实体转换为直线
lines = ents as Line;
//添加到直线长度集合
lineLenth.Add(lines.Length);
}
//选择的不是直线
else
{
wind.MessageBox.Show("选择的不是直线类型");
}
}
//计算直线长度并相加
allLength = CalculateSum(lineLenth);
//提交事务
trans.Commit();
}
//表格
Table tab = new Table();
PromptPointResult psPoint = ed.GetPoint("选择表格插入位置");
tab.Position =psPoint.Value;//表格位置
tab.SetSize(3, 2);//表格行列总数
tab.Width = 60;//表格的宽度
//表格内容
tab.Cells[0, 0].TextString = "统计";
tab.Cells[1, 0].TextString = "总数";
tab.Cells[1, 1].TextString = "总长";
tab.Cells[1, 0].TextString = nums.ToString();
tab.Cells[1, 1].TextString = allLength.ToString("0.00");
//将表格绘制到CAD
Tools.AddToModelSpace(db,tab);
}
//没有选择
else
{
wind.MessageBox.Show("选择不能为空");
}
}//Test
//------------------以上为主要代码^^^^^^^^^^^
//计算直线总和函数
public static double CalculateSum(List<double> lianLenth)
{
double sums = 0;
for (int i = 0; i <lianLenth.Count ; i++)
{
sums = sums + lianLenth[i];
}
return sums;
}
//Tools.AddToModelSpace(db,tab) 这个是添加数据到CAD模型空间的函数,比较简单就写源码了