lzgxklable 发表于 2011-9-5 21:46:26

(vlax-curve-getDistAtPoint) 函数

(vlax-curve-getDistAtPoint m_ent1 p2)函数有时候返回的曲线长度为nil,不知道什么原因

望高手们帮忙

lzgxklable 发表于 2011-9-5 21:56:04

下面是我的函数,作用是把曲线按照到某点的距离排序

(if (and p1
         ss
      )
    (progn
      (setq i      -1
         lst      '()
   )
   (while (setq s1 (ssname ss (setq i (1+ i))))
      (setq p2 ( vlax-safearray->list (vlax-variant-value (vla-intersectwith(vlax-ename->vla-object m_ent1)
                                        (vlax-ename->vla-object s1)acExtendnone)))
               
            ;(command ".ucs" "")
             ;(command "_.ucs" m_ent1 "")
            dist (vlax-curve-getDistAtPoint m_ent1 p2)
                ;dist (distance p1 p2)
             lst(cons (list dist s1) lst)
      )
      )
(princ lst)
(gc)
      (if lst
      (progn
          (setq      lst (vl-sort lst '(lambda (a b) (< (car a) (car b))))
                lst (mapcar 'cadr lst)
          )
          (princ "\n!lst = ")
          (princ lst)
       )
      )
    )
)
有时候返回的距离为nil

caoyin 发表于 2011-9-6 08:40:53

参考:http://bbs.mjtd.com/thread-72429-1-1.html
有2种可能导致第二个参数(点)不在曲线上:
1.UCS的原因。
2.ENTSEL,getpoint等函数得到的点存在误差。
还有一种出错的可能:对象不是曲线

lzgxklable 发表于 2011-9-6 13:20:22

谢谢caoyin,ucs加上程序编译通不过,对象是曲线,给定的点起点是曲线的起点,另外一点是该曲线和另外一条曲线的交点
有高手帮忙看看吗

小菜123 发表于 2011-9-6 13:37:49

这个函数有出错可能的,不是程序的问题,是CAD本身有问题

lzgxklable 发表于 2011-9-6 20:58:55

高版本的CAD是否要好点,我用的04和08都是这样的

小菜123 发表于 2011-9-6 21:49:23

我用的02和08,也遇到过多次了,同一曲线,并不会因为采用高版本CAD就能得到正确结果

七七0707 发表于 2011-9-6 22:34:33

lzgxklable 发表于 2011-9-6 20:58 static/image/common/back.gif
高版本的CAD是否要好点,我用的04和08都是这样的

一般这样就不会返回nil了
(vlax-curve-getDistAtPoint m_ent1 (vlax-curve-getclosestpointto m_ent1 p2))

小菜123 发表于 2011-9-7 14:32:39

遇到出错的曲线,上面的方法也无效

血司 发表于 2018-2-23 17:26:24

本帖最后由 血司 于 2018-2-26 11:22 编辑

小菜123 发表于 2011-9-7 14:32
遇到出错的曲线,上面的方法也无效
应该是其他函数的问题,我遇到一次是,vlax-curve-getDistAtPoint的返回值作为参数传递给我的自定义函数,这个自定义函数的问题,导致返回值都为空,然后我重写了我的自定义函数,就好了
页: [1]
查看完整版本: (vlax-curve-getDistAtPoint) 函数