实现多条线一起合并
本帖最后由 chpmould 于 2010-12-17 20:27 编辑请教老师:不知能否实现多条线一起合并,如下图片...
VBA版有这样的代码
http://bbs.mjtd.com/thread-84607-1-1.html
你可以试着改写 我不懂VBA,老师可以帮写个例子吗。。。 你先试着写个两条直线连接的吧
看代码学不到什么东西的 老师指点一下吧,我目前感觉自己还没有入门,不知如何去写,今天我又搞了一天都没有头绪,以下是我写的获取线的端点,后续如何将点加入到数组和判断我不会...请指导... public void CLine()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Database db = HostApplicationServices.WorkingDatabase;
SelectionFilter sf = new SelectionFilter(new TypedValue[] { new TypedValue(0, "Line") });
PromptSelectionResult psr = ed.GetSelection(sf);
if (psr.Status != PromptStatus.OK)
return;
Point3d[] Sptsum = new Point3d;
Point3d[] Eptsum = new Point3d;
int i = 0;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTableRecord curSpace=tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
foreach (ObjectId id in psr.Value.GetObjectIds())
{
Entity ent = tr.GetObject(id, OpenMode.ForRead) as Entity;
if (ent.GetType() == typeof(Line))
{
Line ls = ent as Line;
Point3d Spt = ls.StartPoint;
Point3d Ept = ls.EndPoint;
//Sptsum = AddPoint3d(i, Spt, 0, 0, 0);
//Eptsum = AddPoint3d(i, Ept, 0, 0, 0);
//i++;
//Line len = new Line(Spt, Ept);
//curSpace.AppendEntity(len);
//tr.AddNewlyCreatedDBObject(len, true);
}
}
tr.Commit();
}
} 简单的说下流程
1、判断共线,这个可以把直线先转换为LineSegment3d,再调用IsColinearTo函数判断
2、把共线的直线放到同一集合
3、获取直线的起点和终点放到一个集合
4、点集合按XYZ排序
5、找到排序后的第一点和最后一点,连接 看了老师的流程叙说,目前对我来说很复杂,我目前还不会这些操作,之前也一直没有学习到这方面的知识...请求老师你什么时候有空帮我写个例子吧,目前我还处在照着例子来练习的阶段,还不能写出自己的程序... 那就先把简单的例子搞懂再做复杂的吧
推荐你先了解一个内容:计算机图形学 既知很复杂,何苦为难自己。
给个建议,先不要想着多条直线,就两条直线吧,符合你的条件的进行你所说的连接。 谢谢老师的指点,后续自己还需要努力...