明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2667|回复: 4

[基础] [求助]为什么vla-IntersectWith得出的交点不在曲线上

[复制链接]
发表于 2010-2-8 10:53 | 显示全部楼层 |阅读模式


测试命令 Test
程序作用 :求出曲线交点  并求交点在直线上的位置
AutoCAD2008中 先选直线 再选矩形 princ的第二个交点距离总是 nil  移动一下直线或矩形又可以得出正确结果
在AutoCAD2004中 测试又可以正确运行
不知为何?
谁有比较好的 求曲线交点到曲线起点距离的函数?
  1. ;取得两曲线交点
  2. ;op_Extend: 0 两个对象均不延伸; 1 延伸 ent1 ;2 延伸 ent2 ;3延伸 ent1 ent2
  3. (defun EF:Curve-inters (ent1 ent2 op_Extend
  4.    / obj1 obj2 i
  5.    pt ptlst lst_pt)
  6.   (setq obj1 (vlax-ename->vla-object ent1)
  7. obj2 (vlax-ename->vla-object ent2)
  8. )
  9.   (cond ((= op_Extend 0)
  10.   (setq ptlst (vla-IntersectWith obj1 obj2 acExtendNone))
  11.   )
  12. ((= op_Extend 1)
  13.   (setq ptlst (vla-IntersectWith obj1 obj2 acExtendThisEntity))
  14.   )
  15. ((= op_Extend 2)
  16.   (setq ptlst (vla-IntersectWith obj1 obj2 acExtendOtherEntity))
  17.   )
  18. ((= op_Extend 3)
  19.   (setq ptlst (vla-IntersectWith obj1 obj2 acExtendBoth))
  20.   )
  21. (T
  22.   (prompt "error:ef-inters 参数3: op_Extend")
  23.   )
  24. )
  25.   (setq ptlst (vlax-variant-value ptlst))
  26.   (if (> (vlax-safearray-get-u-bound ptlst 1) 0)
  27.     (setq ptlst (vlax-safearray->list ptlst))
  28.     (setq ptlst nil)
  29.     )
  30.   (setq i 0)
  31.   (foreach e ptlst
  32.     (if (< i 2)
  33.       (progn
  34. (setq pt (cons e pt))
  35. (setq i (1+ i))
  36. )
  37.       (progn
  38. (setq pt (reverse (cons e pt)))
  39. (setq lst_pt (cons pt lst_pt))
  40. (setq pt nil)
  41. (setq i 0)
  42. )
  43.       )
  44.     )
  45.   (reverse lst_pt)
  46.   )
  47. (defun C:Test ( )
  48.   (princ "\n选择曲线")
  49.   (setq eTest (car (entsel)))
  50.   (setq objTest (vlax-ename->vla-object eTest))
  51.   (princ "\n选择相交曲线")
  52.   (if (setq ss (ssget))
  53.     (progn
  54.       (setq i -1)
  55.       (while (< (setq i (1+ i)) (sslength ss))
  56. (setq ename (ssname ss i))
  57. (setq ptList (EF:Curve-inters eTest ename 0))
  58. (setq ptList (mapcar '(lambda (e)
  59.     (princ "\n交点:") (princ e)
  60.     (princ "距离:") (princ (vlax-curve-getDistAtPoint objTest e))
  61.     )
  62.         ptList
  63.         )
  64.        )
  65. )
  66.       )
  67.     )
  68.   (princ)
  69.   )

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2010-2-8 22:57 | 显示全部楼层

有人知道原因么?

发表于 2010-2-9 17:06 | 显示全部楼层
elitefish发表于2010-2-8 22:57:00有人知道原因么?

暂时没有测试出为什么。

我一直感觉到vlax-curve-函数有些精度上的BUG。。。

存在于不同的CAD版本。

至今未找到好的解决办法。

发表于 2010-2-9 17:11 | 显示全部楼层

在CAD2004下测试是OK的。。。就不多说了。

(defun C:Test ()
  (princ "\n选择曲线")
  (setq eTest (car (entsel)))
  (setq objTest (vlax-ename->vla-object eTest))
  (or eTest (alert "未选中eTest"))
  (princ "\n选择相交曲线")
  (if (setq ss (ssget))
    (progn
      (setq i -1)
      (while (< (setq i (1+ i)) (sslength ss))
 (setq ename (ssname ss i))
 (setq ptList (EF:Curve-inters eTest ename 0))
 (setq ptList
        (mapcar '(lambda (e)
     (princ "\n交点: ")
     (princ e)
     (princ "\n最近点: ")
     (princ (vlax-curve-getClosestPointTo objTest e))
     (princ "距离(交点): ")
     (princ
       (vlax-curve-getDistAtPoint
         objTest
         e
       )
     )
     (princ "距离(最近点): ")
     (princ
       (vlax-curve-getDistAtPoint
         objTest
         (vlax-curve-getClosestPointTo objTest e)
       )
     )
   )
         ptList
        )
 )
      )
    )
  )
  (princ)
)

测试CAD2008情况:

一、初始状态:

交点: (1.76562e+006 -1.36126e+006 0.0)
最近点: (1.76562e+006 -1.36126e+006 0.0)距离(交点): 312780.0距离(最近点): 312780.0
交点: (1.7519e+006 -1.34938e+006 0.0)
最近点: (1.7519e+006 -1.34938e+006 0.0)距离(交点): nil距离(最近点): nil

二、以矩形的左下角点为基点,将line和矩形移到0,0,0点:

交点: (13724.2 0.0 0.0)
最近点: (13724.2 0.0 0.0)距离(交点): 312780.0距离(最近点): 312780.0
交点: (0.0 11873.8 0.0)
最近点: (2.91038e-011 11873.8 0.0)距离(交点): 294632.0距离(最近点): nil

三、在初始图形状态下,移动LINE之后:

交点: (1.79347e+006 -1.36126e+006 0.0)
最近点: (1.79347e+006 -1.36126e+006 0.0)距离(交点): 326504.0距离(最近点): 326504.0
交点: (1.7519e+006 -1.32529e+006 0.0)
最近点: (1.7519e+006 -1.32529e+006 0.0)距离(交点): 271534.0距离(最近点): 271534.0

发表于 2010-7-15 10:07 | 显示全部楼层

因为可能在延长线上,看你的模式设定为是都延长还是都不延长,因为有的可能不延长不相交

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 18:39 , Processed in 0.177480 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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