李毛毛 发表于 2010-12-14 10:10:53

一条开放边去切一个闭合的多段线

一条开放边去切一个闭合的多段线,找到交点了,如何知道一个交点交在闭合多段线的哪两个点之间??

李毛毛 发表于 2010-12-14 10:45:13


没人回答哎!!

sailorcwx 发表于 2010-12-14 12:37:42

用GetParameterAtPoint判断
int i =(int)pl.GetParameterAtPoint(pt);

李毛毛 发表于 2010-12-14 12:45:40

回复 sailorcwx 的帖子

这个交点不是原来闭合多段线上的点啊,我只是想知道交点的前后是多段线上的那个点。

sailorcwx 发表于 2010-12-14 12:49:37

不明白你的意思
你求得的交点不是多段线上的点,那是什么点

李毛毛 发表于 2010-12-14 13:11:46

回复 sailorcwx 的帖子

不是多段线上原有的点...比如这个多段线有29个点,交点在26和27点之间。那我怎样获得26,27这两个点?

sxpd 发表于 2010-12-14 13:49:29

一条开放边去切一个闭合的多段线,找到交点了,
这个交点肯定在多段线上面了,要不怎么叫交点
GetParameterAtPoint是获取曲线上某一点的参数值
多段线的参数值的特点是,节点的参数是递增的整数

sailorcwx 发表于 2010-12-14 15:39:53

本帖最后由 sailorcwx 于 2010-12-14 15:40 编辑

public void test()
      {
            Editor ed=Application.DocumentManager.MdiActiveDocument.Editor;
            PromptEntityOptions peo = new PromptEntityOptions("\n选择多段线");
            PromptEntityResult per = ed.GetEntity(peo);
            if (per.Status != PromptStatus.OK)
                return;
            ObjectId plid = per.ObjectId;
            using (Transaction tr = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
            {
                Polyline pl = tr.GetObject(plid, OpenMode.ForRead) as Polyline;
                while (true)
                {
                PromptPointOptions ppo = new PromptPointOptions("\n选择多段线上的点");
                ppo.AllowNone = true;
                PromptPointResult ppr = ed.GetPoint(ppo);
                if (ppr.Status != PromptStatus.OK)
                  return;
                Point3d pt = ppr.Value;
                int i =(int)pl.GetParameterAtPoint(pt);
                ed.WriteMessage("\n选择点介于{0}和{1}顶点之间",Convert.ToString(i+1),Convert.ToString(i+2));
                }
            }
      }
页: [1]
查看完整版本: 一条开放边去切一个闭合的多段线