明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: Real_King

GetParameterAtPoint在获取Polyline两点间点集合时该如何使用?

[复制链接]
 楼主| 发表于 2015-4-23 16:13:43 | 显示全部楼层
ivde 发表于 2015-4-23 15:59
拟合后就是 Polyline2d 了

ivide兄,我提到的多段线是通过另一条偏移Offset来的,出现X1,X2的值大于节点数还会缘于偏移对象受过拟合等处理吗?那么如何"取消拟合"?请指教,今天收获很多,谢谢大家的关注
发表于 2015-4-23 16:36:26 | 显示全部楼层
偏移应该不会出现你说的情况 最好贴上你的问题图
 楼主| 发表于 2015-4-23 16:43:38 | 显示全部楼层
雪山飞狐_lzh 发表于 2015-4-23 16:36
偏移应该不会出现你说的情况 最好贴上你的问题图



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

本帖子中包含更多资源

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

x
 楼主| 发表于 2015-4-23 17:18:35 | 显示全部楼层
本帖最后由 Real_King 于 2015-4-23 17:20 编辑
雪山飞狐_lzh 发表于 2015-4-23 16:36
偏移应该不会出现你说的情况 最好贴上你的问题图

飞狐老师!对不起!我闹乌龙了!!!我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());//西北
发表于 2015-4-23 17:25:56 | 显示全部楼层
是你的图问题吧,程序没有那么聪明
 楼主| 发表于 2015-4-23 17:29:34 | 显示全部楼层
ivde 发表于 2015-4-23 17:25
是你的图问题吧,程序没有那么聪明

代码写错了,给弄到里头那条线了。。。熬夜写晕了
发表于 2015-4-23 17:30:50 | 显示全部楼层
如果有3个点 可以考虑设置阈值过滤下点集
下面是我的测试代码
  1.         [CommandMethod("ttss")]
  2.         public void tt()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Editor ed = doc.Editor;
  6.             Database db = doc.Database;

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


  8.             if (res.Status == PromptStatus.OK)
  9.             {
  10.                 using (var tr = doc.TransactionManager.StartTransaction())
  11.                 {
  12.                     Curve c = tr.GetObject(res.ObjectId, OpenMode.ForRead) as Curve;
  13.                     ed.WriteMessage("\nTotal Knots:{0}", c.EndParam);
  14.                     var opts = new PromptPointOptions("\nSelect a Point:");
  15.                     opts.AllowNone = true;
  16.                     opts.AllowArbitraryInput = true;
  17.                     var res2 = ed.GetPoint(opts);
  18.                     while (res2.Status == PromptStatus.OK)
  19.                     {
  20.                         ed.WriteMessage("\nPoint:{0},Param:{1}", res2.Value, c.GetParameterAtPoint(res2.Value));
  21.                         res2 = ed.GetPoint(opts);
  22.                     }
  23.                 }
  24.             }

  25.         }
发表于 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);
 楼主| 发表于 2015-4-23 17:39:31 | 显示全部楼层
雪山飞狐_lzh 发表于 2015-4-23 17:35
另外double到int的转换,这样就行了
            double a = 1.034;
            int i = (int)a;

谢谢飞狐老师!你真是个高尚的人!
 楼主| 发表于 2015-4-23 17:40:02 | 显示全部楼层
ivde 发表于 2015-4-23 17:25
是你的图问题吧,程序没有那么聪明

谢谢ivde兄!感谢你的支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 11:36 , Processed in 0.180042 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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