chpmould 发表于 2010-12-17 20:27:11

实现多条线一起合并

本帖最后由 chpmould 于 2010-12-17 20:27 编辑

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

雪山飞狐_lzh 发表于 2010-12-17 21:43:38

VBA版有这样的代码
http://bbs.mjtd.com/thread-84607-1-1.html
你可以试着改写

chpmould 发表于 2010-12-17 23:17:37

我不懂VBA,老师可以帮写个例子吗。。。

雪山飞狐_lzh 发表于 2010-12-17 23:23:36

你先试着写个两条直线连接的吧
看代码学不到什么东西的

chpmould 发表于 2010-12-18 12:37:15

老师指点一下吧,我目前感觉自己还没有入门,不知如何去写,今天我又搞了一天都没有头绪,以下是我写的获取线的端点,后续如何将点加入到数组和判断我不会...请指导...       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();
            }
      }

雪山飞狐_lzh 发表于 2010-12-18 13:36:36

简单的说下流程
1、判断共线,这个可以把直线先转换为LineSegment3d,再调用IsColinearTo函数判断
2、把共线的直线放到同一集合
3、获取直线的起点和终点放到一个集合
4、点集合按XYZ排序
5、找到排序后的第一点和最后一点,连接

chpmould 发表于 2010-12-18 13:49:40

看了老师的流程叙说,目前对我来说很复杂,我目前还不会这些操作,之前也一直没有学习到这方面的知识...请求老师你什么时候有空帮我写个例子吧,目前我还处在照着例子来练习的阶段,还不能写出自己的程序...

雪山飞狐_lzh 发表于 2010-12-18 13:54:42

那就先把简单的例子搞懂再做复杂的吧
推荐你先了解一个内容:计算机图形学

sieben 发表于 2010-12-18 14:09:25

既知很复杂,何苦为难自己。
给个建议,先不要想着多条直线,就两条直线吧,符合你的条件的进行你所说的连接。

chpmould 发表于 2010-12-18 14:14:52

谢谢老师的指点,后续自己还需要努力...
页: [1] 2 3
查看完整版本: 实现多条线一起合并