明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6552|回复: 20

[几何] 实现多条线一起合并

  [复制链接]
发表于 2010-12-17 20:27:11 | 显示全部楼层 |阅读模式
本帖最后由 chpmould 于 2010-12-17 20:27 编辑

请教老师:不知能否实现多条线一起合并,如下图片...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2010-12-17 21:43:38 | 显示全部楼层
VBA版有这样的代码
http://bbs.mjtd.com/thread-84607-1-1.html
你可以试着改写
 楼主| 发表于 2010-12-17 23:17:37 | 显示全部楼层
我不懂VBA,老师可以帮写个例子吗。。。
发表于 2010-12-17 23:23:36 | 显示全部楼层
你先试着写个两条直线连接的吧
看代码学不到什么东西的
 楼主| 发表于 2010-12-18 12:37:15 | 显示全部楼层
老师指点一下吧,我目前感觉自己还没有入门,不知如何去写,今天我又搞了一天都没有头绪,以下是我写的获取线的端点,后续如何将点加入到数组和判断我不会...请指导...
  1.        public void CLine()
  2.         {
  3.             Document doc = Application.DocumentManager.MdiActiveDocument;
  4.             Editor ed = doc.Editor;
  5.             Database db = HostApplicationServices.WorkingDatabase;
  6.             SelectionFilter sf = new SelectionFilter(new TypedValue[] { new TypedValue(0, "Line") });
  7.             PromptSelectionResult psr = ed.GetSelection(sf);
  8.             if (psr.Status != PromptStatus.OK)
  9.                 return;

  10.             Point3d[] Sptsum = new Point3d[0];
  11.             Point3d[] Eptsum = new Point3d[0];
  12.             int i = 0;
  13.             using (Transaction tr = db.TransactionManager.StartTransaction())
  14.             {
  15.                  BlockTableRecord curSpace=tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
  16.                  foreach (ObjectId id in psr.Value.GetObjectIds())
  17.                  {
  18.                      Entity ent = tr.GetObject(id, OpenMode.ForRead) as Entity;

  19.                      if (ent.GetType() == typeof(Line))
  20.                      {
  21.                          Line ls = ent as Line;
  22.                          Point3d Spt = ls.StartPoint;
  23.                          Point3d Ept = ls.EndPoint;
  24.                         
  25.                          //Sptsum[i] = AddPoint3d(i, Spt[i], 0, 0, 0);
  26.                          //Eptsum[i] = AddPoint3d(i, Ept[i], 0, 0, 0);
  27.                          //i++;
  28.                          //Line len = new Line(Spt, Ept);
  29.                          //curSpace.AppendEntity(len);
  30.                          //tr.AddNewlyCreatedDBObject(len, true);                        
  31.                      }
  32.                  }
  33.                  
  34.                 tr.Commit();
  35.             }
  36.         }
发表于 2010-12-18 13:36:36 | 显示全部楼层
简单的说下流程
1、判断共线,这个可以把直线先转换为LineSegment3d,再调用IsColinearTo函数判断
2、把共线的直线放到同一集合
3、获取直线的起点和终点放到一个集合
4、点集合按XYZ排序
5、找到排序后的第一点和最后一点,连接
 楼主| 发表于 2010-12-18 13:49:40 | 显示全部楼层
看了老师的流程叙说,目前对我来说很复杂,我目前还不会这些操作,之前也一直没有学习到这方面的知识...请求老师你什么时候有空帮我写个例子吧,目前我还处在照着例子来练习的阶段,还不能写出自己的程序...
发表于 2010-12-18 13:54:42 | 显示全部楼层
那就先把简单的例子搞懂再做复杂的吧
推荐你先了解一个内容:计算机图形学
发表于 2010-12-18 14:09:25 | 显示全部楼层
既知很复杂,何苦为难自己。
给个建议,先不要想着多条直线,就两条直线吧,符合你的条件的进行你所说的连接。
 楼主| 发表于 2010-12-18 14:14:52 | 显示全部楼层
谢谢老师的指点,后续自己还需要努力...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 14:53 , Processed in 0.177476 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表