Real_King 发表于 2015-4-23 16:13:43

ivde 发表于 2015-4-23 15:59 static/image/common/back.gif
拟合后就是 Polyline2d 了

ivide兄,我提到的多段线是通过另一条偏移Offset来的,出现X1,X2的值大于节点数还会缘于偏移对象受过拟合等处理吗?那么如何"取消拟合"?请指教,今天收获很多,谢谢大家的关注

雪山飞狐_lzh 发表于 2015-4-23 16:36:26

偏移应该不会出现你说的情况 最好贴上你的问题图

Real_King 发表于 2015-4-23 16:43:38

雪山飞狐_lzh 发表于 2015-4-23 16:36 static/image/common/back.gif
偏移应该不会出现你说的情况 最好贴上你的问题图


白色线为生成的偏移线,对角线与白色线有四个交点,我想获取两两交点间节点坐标的集合,于是有了今天的问题

Real_King 发表于 2015-4-23 17:18:35

本帖最后由 Real_King 于 2015-4-23 17:20 编辑

雪山飞狐_lzh 发表于 2015-4-23 16:36 static/image/common/back.gif
偏移应该不会出现你说的情况 最好贴上你的问题图
飞狐老师!对不起!我闹乌龙了!!!我GetParameterAtPoint到红色线(CBDK_PL)上了,当然和偏移线的节点数不同!现在发现问题了,唉,熬夜写代码伤神啊!太乌龙了!简直浪费您的时间!不过你提到的东西也让我学到了新东西,衷心感谢您!
在此还有个问题,我的交点是用IntersectWith()获取的,但我发现一条对角线穿过的偏移线,本应只有两个交点,但有的会有三个交点,其中两个X坐标相差极少,这是因为IntersectWith的精度问题吗?在AutoCAD VBA&VB.NET第二版我看过这方面介绍

下面是正确的代码
int X1 = int.Parse(Math.Floor(Offset_PL.GetParameterAtPoint(Offset_PL.GetClosestPointTo(NEpoint, false))).ToString());//东北
            ed.WriteMessage(X1.ToString() + "***");
            int X2 = int.Parse(Math.Floor(Offset_PL.GetParameterAtPoint(Offset_PL.GetClosestPointTo(SEpoint, false))).ToString());//东南
            ed.WriteMessage(X2.ToString() + "***");
            int X3 = int.Parse(Math.Floor(Offset_PL.GetParameterAtPoint(Offset_PL.GetClosestPointTo(SWpoint, false))).ToString());//西南
            ed.WriteMessage(X3.ToString() + "***");
            int X4 = int.Parse(Math.Floor(Offset_PL.GetParameterAtPoint(Offset_PL.GetClosestPointTo(NWpoint, false))).ToString());//西北

ivde 发表于 2015-4-23 17:25:56

是你的图问题吧,程序没有那么聪明

Real_King 发表于 2015-4-23 17:29:34

ivde 发表于 2015-4-23 17:25 static/image/common/back.gif
是你的图问题吧,程序没有那么聪明

代码写错了,给弄到里头那条线了。。。熬夜写晕了

雪山飞狐_lzh 发表于 2015-4-23 17:30:50

如果有3个点 可以考虑设置阈值过滤下点集
下面是我的测试代码
      
      public void tt()
      {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            Database db = doc.Database;

            var res = ed.GetEntity("\nSelect a Curve:");


            if (res.Status == PromptStatus.OK)
            {
                using (var tr = doc.TransactionManager.StartTransaction())
                {
                  Curve c = tr.GetObject(res.ObjectId, OpenMode.ForRead) as Curve;
                  ed.WriteMessage("\nTotal Knots:{0}", c.EndParam);
                  var opts = new PromptPointOptions("\nSelect a Point:");
                  opts.AllowNone = true;
                  opts.AllowArbitraryInput = true;
                  var res2 = ed.GetPoint(opts);
                  while (res2.Status == PromptStatus.OK)
                  {
                        ed.WriteMessage("\nPoint:{0},Param:{1}", res2.Value, c.GetParameterAtPoint(res2.Value));
                        res2 = ed.GetPoint(opts);
                  }
                }
            }

      }

雪山飞狐_lzh 发表于 2015-4-23 17:35:32

另外double到int的转换,这样就行了
            double a = 1.034;
            int i = (int)a;
或者
            double a = 1.034;
            int i = (int)Math.Floor(a);

Real_King 发表于 2015-4-23 17:39:31

雪山飞狐_lzh 发表于 2015-4-23 17:35 static/image/common/back.gif
另外double到int的转换,这样就行了
            double a = 1.034;
            int i = (int)a;


谢谢飞狐老师!你真是个高尚的人!

Real_King 发表于 2015-4-23 17:40:02

ivde 发表于 2015-4-23 17:25 static/image/common/back.gif
是你的图问题吧,程序没有那么聪明

谢谢ivde兄!感谢你的支持
页: 1 [2] 3
查看完整版本: GetParameterAtPoint在获取Polyline两点间点集合时该如何使用?