a-saber 发表于 2021-1-30 18:51:07

重新编号点

此代码自动为点编号,但我需要控制从左上角开始排列点编号,以及如何根据位置x对点集合进行排序
公共无效tpoint()
{
Document doc=Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
数据库db=doc.Database
编辑器ed=doc.Editor
使用(Transaction trans=db.TransactionManager.StartTransaction())
{
BlockTable bt=trans.GetObject(db.BlockTableId,OpenMode.ForRead)作为BlockTable
BlockTableRecord btr=trans.GetObject(bt,OpenMode.ForWrite)作为blockTable记录
int-num=1
TypedValue[]tv=新的TypedValue
tv.SetValue(新类型dValue((int)DxfCode)。开始,“点”),0)
SelectionFilter=新的selectionfiller(电视)
PromptSelectionResult:ssPrompt
ssPrompt=ed.GetSelection(过滤器)
如果(ssPrompt.Status==PromptStatus.OK)
{
SelectionSet ss=ssPrompt.Value
foreach(在ss中选择对象sObj)
{
DBPoint spoint=trans.GetObject(sObj.ObjectId,OpenMode.ForWrite)作为DBPoint
DBText.txt=new DBText()
txt.SetDatabaseDefaults()
txt。TextString=num.ToString()
txt。位置=新点3d(点位置X,点位置Y,点位置Z)
txt。旋转=0
txt。高度=2
btr.AppendEntity(txt)
trans。AddNewlyCreatedDBObject(txt,true)
num++
}
trans.Commit()
}
}
}

例如,我附上图片

**** Hidden Message *****

MickD 发表于 2021-1-30 20:46:34

只是在这里吐出球,但你能用Linq对物体进行分类吗?创建实际点实体的列表,然后对其进行排序。类似:var sortedPointsList = pointsList.OrderBy(p => p.X).ThenBy(p => p.Y);。
然后在新列表上预先添加您的编号?。

gile 发表于 2021-1-31 03:07:44

嗨,
假设点是垂直和地平线

a-saber 发表于 2021-2-2 10:09:39


谢谢您,先生

a-saber 发表于 2021-2-2 10:11:27

谢谢你先生
页: [1]
查看完整版本: 重新编号点