找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1427|回复: 10

[已解决] 求助关于vla函数的问题【已解决】

[复制链接]

已领礼包: 201个

财富等级: 日进斗金

发表于 2021-1-7 15:29:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 a117034423 于 2021-1-9 10:48 编辑

  1. (defun c:dbb (/ );dis1 pt1 ss1 ss2 i en)
  2.   (setvar "cmdecho" 0)
  3.   (setq dis1 (getint "请输入板搭墙尺寸,默认为15mm: "))
  4.   (if (= dis1 nil) (setq dis1 15))
  5.   (setq pt1 0)
  6.   (setq ss2 (ssadd))
  7.   (while pt1
  8.   (setq pt1 (getpoint "\n拾取房间内部点<退出>:"))
  9.   (if ss1
  10.   (if (not (pntisin pt1 (vl-remove nil (mapcar  '(lambda (x) (if (= (car x) 10) (cdr x))) (entget ss1)))))
  11.   (vl-cmdf "_.-boundary" "_a" "_island" "_no" "" "" pt1 ""))
  12.   (vl-cmdf "_.-boundary" "_a" "_island" "_no" "" "" pt1 "")
  13.     )
  14.   (setq ss1 (entlast))
  15.   (redraw ss1 3)
  16.   (ssadd ss1 ss2)
  17.   )
  18. (setq i 0
  19.         AcadObj (vlax-get-acad-object)
  20.         AcadDoc (vla-get-ActiveDocument Acadobj)
  21.         mSpace(vla-get-ModelSpace Acaddoc)
  22.         )
  23.   (repeat (sslength ss2)
  24.   (setq en (vlax-ename->vla-object (ssname ss2 i))
  25.         i  (1+ i)
  26.         )
  27.   (vl-load-com)
  28.   (vla-put-Layer en "板轮廓线") ;不能设定图层
  29.   (vla-offset en dis1) ;不能偏移对象
  30.   (vla-erase en) ;不能删除对象
  31.   )
  32.   (redraw)
  33.   (princ "<完成>")
  34.   )

后面用vla设定图元图层、偏移、删除都不能用,请问是不是有哪里操作漏了,初试VL错误代码:
Application Error: 0 :- 参数类型错误: 二维/三维点: nilADS 请求错误



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2021-1-7 16:31:41 | 显示全部楼层
本帖最后由 lijiao 于 2021-1-7 16:33 编辑

1、你得先确定当前文档中是否有指定的图层
2、ss2选择集中的图元是否都具有offset方法
3、确认构成ss2选择集的过程中是否有错(错误很可能在这个部分)
4、(VL-LOAD-COM)应放在程序前面

点评

您说的四个地方,我检索是没问题的,因为是用boundary生成的封闭多段线,生成才能放入选择集,而且已经考虑了去重,我觉得是封装的问题,程序单独测试执行都没问题,就是加载代码提示错误  详情 回复 发表于 2021-1-7 18:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2021-1-7 17:03:05 | 显示全部楼层
本帖最后由 marting 于 2021-1-7 17:04 编辑

执行VLA函数,最好用
vl-catch-all-apply 封装起来
去看下开源函数库论坛

(XD::CatchApply)封装 vl-catch-all-error-p,vl-catch-all-apply
0 个回复 - 220 次查看

2017-5-9 13:09 - Lispboy - 开源函数库

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2021-1-7 17:09:10 | 显示全部楼层
dcl1214的办法是:不管3721,所有函数 统统用vl-catch-all-apply 封装起来
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2021-1-7 18:00:21 | 显示全部楼层
谢谢黄大师和马大师,我一会就试试
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2021-1-7 18:03:05 | 显示全部楼层
lijiao 发表于 2021-1-7 16:31
1、你得先确定当前文档中是否有指定的图层
2、ss2选择集中的图元是否都具有offset方法
3、确认构成ss2选 ...

您说的四个地方,我检索是没问题的,因为是用boundary生成的封闭多段线,生成才能放入选择集,而且已经考虑了去重,我觉得是封装的问题,程序单独测试执行都没问题,就是加载代码提示错误

点评

跟踪下,看看 en 有值没? 另外,用VL函数操作对象,多加判断语句,判断下是否支持该方法 条件不满足,加调试打印语句,你就知道哪里出问题了 比如: (if (vlax-method-applicable-p o 'offset) (vla-  详情 回复 发表于 2021-1-7 18:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2021-1-7 18:19:40 | 显示全部楼层
a117034423 发表于 2021-1-7 18:03
您说的四个地方,我检索是没问题的,因为是用boundary生成的封闭多段线,生成才能放入选择集,而且已经考 ...

跟踪下,看看 en 有值没?

另外,用VL函数操作对象,多加判断语句,判断下是否支持该方法

条件不满足,加调试打印语句,你就知道哪里出问题了

比如:
(if (vlax-method-applicable-p en 'offset)
   (vla-offset en dis1)
   (princ "\n不支持偏移")
)

或者:
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-offset (list en dist1))))
   (princ "\n不支持偏移对象")
)

点评

谢谢n大,学习了  详情 回复 发表于 2021-1-8 06:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2021-1-8 06:28:47 | 显示全部楼层
newer 发表于 2021-1-7 18:19
跟踪下,看看 en 有值没?

另外,用VL函数操作对象,多加判断语句,判断下是否支持该方法

谢谢n大,学习了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 756个

财富等级: 财运亨通

发表于 2021-1-8 09:02:39 | 显示全部楼层
我所知的调试方法都体现出来了,还有没有其它调试的好方法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2021-1-8 09:38:07 | 显示全部楼层
把(vl-cmdf "_.-boundary" "_a" "_island" "_no" "" "" pt1 "")
改为(command "boundary" "a" "i" "n" "" "" pt1 "")

你再看看效果

点评

谢谢,我试试 这步没问题 是后面offset和put-layer有问题  详情 回复 发表于 2021-1-8 11:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2021-1-8 11:14:07 | 显示全部楼层
lijiao 发表于 2021-1-8 09:38
把(vl-cmdf "_.-boundary" "_a" "_island" "_no" "" "" pt1 "")
改为(command "boundary" "a" "i" "n" ""  ...

谢谢,我试试
这步没问题 是后面offset和put-layer有问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 08:44 , Processed in 0.420930 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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