明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3912|回复: 17

[提问] vla-intersectwith的bug(竟然没有交点)

[复制链接]
发表于 2018-1-1 22:41 | 显示全部楼层 |阅读模式
本帖最后由 hai20110730 于 2018-1-2 17:10 编辑

我在用下面的代码求交点,较长的那条多段线(基准对象)和较短的多线相交,但是没有求出交点来,vla-intersectwith的模式为acextendotherentity。我是在2018版上做的测试。哪位大神能给出原因。
  1. (defun pdjd (pdjd_en1 pdjd_en2 mode / pdjd_jdva  pdjd_d pdjd_i pdjd_lt
  2.        pdjd_ls)
  3.   (vl-load-com)
  4.   (setq  pdjd_jdva (vlax-variant-value
  5.         (vla-intersectwith pdjd_en1 pdjd_en2 mode)
  6.       )
  7.   )
  8.   (if (not (minusp (vlax-safearray-get-u-bound pdjd_jdva 1)))
  9.     (setq pdjd_d (vlax-safearray->list pdjd_jdva))
  10.   )
  11.   (setq pdjd_i 0)
  12.   (setq pdjd_ls nil)
  13.   (repeat (/ (length pdjd_d) 3)
  14.     (setq pdjd_lt nil)
  15.     (setq pdjd_lt (cons (nth pdjd_i pdjd_d) pdjd_lt))
  16.     (setq pdjd_lt (cons (nth (+ pdjd_i 1) pdjd_d) pdjd_lt))
  17.     (setq pdjd_lt (cons (nth (+ pdjd_i 2) pdjd_d) pdjd_lt))
  18.     (setq pdjd_ls (cons (reverse pdjd_lt) pdjd_ls))
  19.     (setq pdjd_i (+ pdjd_i 3))
  20.   )
  21.   pdjd_ls
  22. )
  23. (defun C:TEST()
  24.       (pdjd (vlax-ename->vla-object (car(entsel"\n较长线")))
  25.                (vlax-ename->vla-object (car(entsel"\n较短线")))
  26.                acextendotherentity)
  27. )

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

本帖子中包含更多资源

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

x
发表于 2018-1-2 09:40 | 显示全部楼层
本帖最后由 llsheng_73 于 2018-1-2 09:42 编辑
pengfei2010 发表于 2018-1-2 09:28
这种笔误不应该啊actexendotherentity在test中误为ctexendotherentity   ,写程序最怕这种笔误

我也没发现他这个问题,直到运行出错才发现
_$ (C:TEST)
; 错误: ActiveX 服务器返回错误: 非选择性的参数。
然后才想到应该是mode写错了
其实这些模式一般都可以直接用数值,这样就很难拼写错误了
_$ acextendotherentity
2

 楼主| 发表于 2018-1-2 11:32 | 显示全部楼层
llsheng_73 发表于 2018-1-2 08:41
actexendotherentity在test中误为ctexendotherentity,纠正后交点为((583845.0 3.44798e+006 0.0))

如果把模式改为acextendnone(两个对象都不延伸),acextendboth(两个对象都延伸),acextendthisentity(延伸基准对象)三种都能得到交点,唯独actexendotherentity不可以,但是我的算法里要求用这个模式。
 楼主| 发表于 2018-1-2 00:31 | 显示全部楼层
ntwison 发表于 2018-1-1 23:31
是不是mode没给值?0-3?

mode的值为acextendnone(两个对象都不延伸),acextendboth(两个对象都延伸),acextendthisentity(延伸基准对象),actexendotherentity(延伸后一个对象),我在主程序C:TEST中用的是actexendotherentity模式,但是没有交点,但是实际上长的多段线的那个顶点是那条短多段线的交点。
发表于 2018-1-1 23:31 | 显示全部楼层
是不是mode没给值?0-3?
发表于 2018-1-2 08:41 | 显示全部楼层
本帖最后由 llsheng_73 于 2018-1-2 08:45 编辑


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

本帖子中包含更多资源

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

x
发表于 2018-1-2 09:28 | 显示全部楼层
这种笔误不应该啊actexendotherentity在test中误为ctexendotherentity   ,写程序最怕这种笔误
 楼主| 发表于 2018-1-2 11:20 | 显示全部楼层
pengfei2010 发表于 2018-1-2 09:28
这种笔误不应该啊actexendotherentity在test中误为ctexendotherentity   ,写程序最怕这种笔误

这个是在lisp编辑器中是亮显的,我在明经的主题里手写的,写错了。
 楼主| 发表于 2018-1-2 11:23 | 显示全部楼层
本帖最后由 hai20110730 于 2018-1-2 19:08 编辑
llsheng_73 发表于 2018-1-2 09:40
我也没发现他这个问题,直到运行出错才发现
_$ (C:TEST)
; 错误: ActiveX 服务器返回错误: 非选择性的 ...

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

我把上面代码从新发了下,测试结果交点返回值还是为nil
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 09:46 , Processed in 0.283676 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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