hai20110730 发表于 2018-1-1 22:41:55

vla-intersectwith的bug(竟然没有交点)

本帖最后由 hai20110730 于 2018-1-2 17:10 编辑

我在用下面的代码求交点,较长的那条多段线(基准对象)和较短的多线相交,但是没有求出交点来,vla-intersectwith的模式为acextendotherentity。我是在2018版上做的测试。哪位大神能给出原因。

(defun pdjd (pdjd_en1 pdjd_en2 mode / pdjd_jdvapdjd_d pdjd_i pdjd_lt
       pdjd_ls)
(vl-load-com)
(setqpdjd_jdva (vlax-variant-value
      (vla-intersectwith pdjd_en1 pdjd_en2 mode)
      )
)
(if (not (minusp (vlax-safearray-get-u-bound pdjd_jdva 1)))
    (setq pdjd_d (vlax-safearray->list pdjd_jdva))
)
(setq pdjd_i 0)
(setq pdjd_ls nil)
(repeat (/ (length pdjd_d) 3)
    (setq pdjd_lt nil)
    (setq pdjd_lt (cons (nth pdjd_i pdjd_d) pdjd_lt))
    (setq pdjd_lt (cons (nth (+ pdjd_i 1) pdjd_d) pdjd_lt))
    (setq pdjd_lt (cons (nth (+ pdjd_i 2) pdjd_d) pdjd_lt))
    (setq pdjd_ls (cons (reverse pdjd_lt) pdjd_ls))
    (setq pdjd_i (+ pdjd_i 3))
)
pdjd_ls
)
(defun C:TEST()
      (pdjd (vlax-ename->vla-object (car(entsel"\n较长线")))
               (vlax-ename->vla-object (car(entsel"\n较短线")))
               acextendotherentity)
)

首先谢谢大家的回复,用2018版返回值为nil,2014版返回是成功的。这说明2018的内部的交点算法极有可能改变了,出现了bug。但是不是也可能是我的2018版系统变量设置有问题?有哪位大神能出来解答下吗?

llsheng_73 发表于 2018-1-2 09:40:57

本帖最后由 llsheng_73 于 2018-1-2 09:42 编辑

pengfei2010 发表于 2018-1-2 09:28
这种笔误不应该啊actexendotherentity在test中误为ctexendotherentity   ,写程序最怕这种笔误
我也没发现他这个问题,直到运行出错才发现
_$ (C:TEST)
; 错误: ActiveX 服务器返回错误: 非选择性的参数。
然后才想到应该是mode写错了
其实这些模式一般都可以直接用数值,这样就很难拼写错误了
_$ acextendotherentity
2

hai20110730 发表于 2018-1-2 11:32:10

llsheng_73 发表于 2018-1-2 08:41
actexendotherentity在test中误为ctexendotherentity,纠正后交点为((583845.0 3.44798e+006 0.0))

如果把模式改为acextendnone(两个对象都不延伸),acextendboth(两个对象都延伸),acextendthisentity(延伸基准对象)三种都能得到交点,唯独actexendotherentity不可以,但是我的算法里要求用这个模式。

hai20110730 发表于 2018-1-2 00:31:19

ntwison 发表于 2018-1-1 23:31
是不是mode没给值?0-3?

mode的值为acextendnone(两个对象都不延伸),acextendboth(两个对象都延伸),acextendthisentity(延伸基准对象),actexendotherentity(延伸后一个对象),我在主程序C:TEST中用的是actexendotherentity模式,但是没有交点,但是实际上长的多段线的那个顶点是那条短多段线的交点。

ntwison 发表于 2018-1-1 23:31:30

是不是mode没给值?0-3?

llsheng_73 发表于 2018-1-2 08:41:52

本帖最后由 llsheng_73 于 2018-1-2 08:45 编辑


actexendotherentity在test中误为ctexendotherentity,纠正后交点为((583845.0 3.44798e+006 0.0))

pengfei2010 发表于 2018-1-2 09:28:50

这种笔误不应该啊actexendotherentity在test中误为ctexendotherentity   ,写程序最怕这种笔误

hai20110730 发表于 2018-1-2 11:20:12

pengfei2010 发表于 2018-1-2 09:28
这种笔误不应该啊actexendotherentity在test中误为ctexendotherentity   ,写程序最怕这种笔误

这个是在lisp编辑器中是亮显的,我在明经的主题里手写的,写错了。

hai20110730 发表于 2018-1-2 11:23:03

本帖最后由 hai20110730 于 2018-1-2 19:08 编辑

llsheng_73 发表于 2018-1-2 09:40
我也没发现他这个问题,直到运行出错才发现
_$ (C:TEST)
; 错误: ActiveX 服务器返回错误: 非选择性的 ...
主要想是容易理解的,所以都用英文了。我改成数字再试试。谢谢你的回复。

hai20110730 发表于 2018-1-2 11:29:15

llsheng_73 发表于 2018-1-2 09:40
我也没发现他这个问题,直到运行出错才发现
_$ (C:TEST)
; 错误: ActiveX 服务器返回错误: 非选择性的 ...

我把上面代码从新发了下,测试结果交点返回值还是为nil
页: [1] 2
查看完整版本: vla-intersectwith的bug(竟然没有交点)