找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4986|回复: 17

[求助] 为什么这个函数总显示 错误: 参数类型错误: VLA-OBJECT nil

[复制链接]

已领礼包: 3198个

财富等级: 富可敌国

发表于 2014-11-18 16:24:01 | 显示全部楼层 |阅读模式

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

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

×

eachy 站长的函数
为什么总是 错误: 参数类型错误: VLA-OBJECT nil   CAD2007测试
  1. (defun ybvl-Clearcset (/ cset)
  2.   (if (not (vl-catch-all-error-p
  3.              (setq cset
  4.                     (vl-catch-all-apply
  5.                       'vla-item
  6.                       (list
  7.                         (vlax-get-property
  8.                           *AcDocumnet*
  9.                           'selectionsets
  10.                         )
  11.                         "CURRENT"
  12.                       )
  13.                     )
  14.              )
  15.            )
  16.       )
  17.     (vla-delete cset)
  18.   )
  19.   (princ)
  20. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-18 16:39:12 | 显示全部楼层
你把屏幕内的实体夹点显示出来,在运行这个函数看看。

点评

回版主, 是选中一个对象后再运行吗? 选择了一条line ,测试结果一样 错误: 参数类型错误: VLA-OBJECT nil  详情 回复 发表于 2014-11-18 16:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-11-18 16:42:52 | 显示全部楼层
newer 发表于 2014-11-18 16:39
你把屏幕内的实体夹点显示出来,在运行这个函数看看。

回版主, 是选中一个对象后再运行吗? 选择了一条line ,测试结果一样 错误: 参数类型错误: VLA-OBJECT nil

点评

他这个应该是其他程序的一部分,这个里面用了 *AcDocumnet* 这个变量,没赋值,你把它赋值就行了,文档对象。  详情 回复 发表于 2014-11-18 16:48
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-18 16:48:48 | 显示全部楼层
lucas3 发表于 2014-11-18 16:42
回版主, 是选中一个对象后再运行吗? 选择了一条line ,测试结果一样 错误: 参数类型错误: VLA-OBJECT ni ...

他这个应该是其他程序的一部分,这个里面用了 *AcDocumnet* 这个变量,没赋值,你把它赋值就行了,文档对象。

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-18 17:07:44 | 显示全部楼层
(vlax-get-property   *AcDocumnet*      'selectionsets         )
=>
(vla-get-selectionsets (vla-get-activedocurment (vlax-get-acad-object)))

点评

st 大师, vla-get-activedocurment 里多了一个字母r 吧 ,去掉r 可以运行,但是没有效果啊  详情 回复 发表于 2014-11-18 17:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-11-18 17:17:44 | 显示全部楼层
st788796 发表于 2014-11-18 17:07
(vlax-get-property   *AcDocumnet*      'selectionsets         )
=>
(vla-get-selectionsets (vla-ge ...

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-18 17:25:37 | 显示全部楼层
lucas3 发表于 2014-11-18 17:17
st 大师, vla-get-activedocurment 里多了一个字母r 吧 ,去掉r 可以运行,但是没有效果啊

这个本来运行就没有效果,只有你后面使用 ActiveSelectionSet 才有效果
  1. (defun Clearcset (/ cset)
  2.   (if (not (vl-catch-all-error-p
  3.              (setq cset
  4.                     (vl-catch-all-apply
  5.                       'vla-item
  6.                       (list
  7.                         (vla-get-selectionsets
  8.                           (vla-get-activedocument
  9.                             (vlax-get-acad-object)
  10.                           )
  11.                         )
  12.                         "CURRENT"
  13.                       )
  14.                     )
  15.              )
  16.            )
  17.       )
  18.     (vla-delete cset)
  19.   )
  20.   t
  21. )

点评

st大师,调试时中断在这个函数这里,又是跟*AcDocument* 有关, 这里该怎么改呢?[/backcolor]  详情 回复 发表于 2014-11-18 18:41
回st大师,看看下面这个, 运行Ea:GroupMake 还是不成功呢?  详情 回复 发表于 2014-11-18 17:37
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-11-18 17:37:35 | 显示全部楼层
st788796 发表于 2014-11-18 17:25
这个本来运行就没有效果,只有你后面使用 ActiveSelectionSet 才有效果

回st大师,看看下面这个, 运行Ea:GroupMake 还是不成功呢?

  1. (vl-load-com)
  2. ;;清除前一选择集
  3. (defun ybvl-Clearcset (/ cset)
  4.   (if (not (vl-catch-all-error-p
  5.              (setq cset
  6.                     (vl-catch-all-apply
  7.                       'vla-item
  8.                       (list
  9.                         (vla-get-selectionsets
  10.                           (vla-get-activedocument
  11.                             (vlax-get-acad-object)
  12.                           )
  13.                         )
  14.                         "CURRENT"
  15.                       )
  16.                     )
  17.              )
  18.            )
  19.       )
  20.     (vla-delete cset)
  21.   )
  22.   t
  23. )

  24. (defun c:Ea:GroupMake (/ ss gname gn)
  25.   (ybvl-clearcset)
  26.   (prompt "\n请选取要组成组的实体<退出>:")
  27.   (if (setq ss (ssget))
  28.     (progn
  29.       (setq gName (getstring "\n请输入组名<制匿名组>:"))
  30.       (if (not (setq gn        (ybvl-MkGroup
  31.                           ss
  32.                           (if (or (= gname "")
  33.                                   (= gname "*")
  34.                               )
  35.                             "*"
  36.                             gname
  37.                           )
  38.                         )
  39.                )
  40.           )
  41.         (prompt        (strcat        "\n已经把选择的实体制成组,组名是 "
  42.                         gn
  43.                         "."
  44.                 )
  45.         )
  46.         (princ (strcat "\n所选实体已经属于 " gName " 组."))
  47.       )
  48.     )
  49.   )
  50.   (princ)
  51. )

  52. (defun ybvl-MkGroup (ss gname / group lst group_obj)
  53.   (setq group (ybvl-addgroup gname))
  54.   (if (/= (vla-get-count group) 0)
  55.     (progn
  56.       (vlax-for        i group
  57.         (setq group_obj (cons i group_obj))
  58.       )
  59.       (setq group_obj (reverse group_obj))
  60.     )
  61.   )
  62.   (vlax-for ent        (activesset)
  63.     (if        group_obj
  64.       (if (not (member ent group_obj))
  65.         (setq lst (cons ent lst))
  66.       )
  67.       (setq lst (cons ent lst))
  68.     )
  69.   )
  70.   (if lst
  71.     (progn
  72.       (vla-AppendItems
  73.         group
  74.         (vlax-safearray-fill
  75.           (vlax-make-safearray
  76.             vlax-vbObject
  77.             (cons 0 (1- (length lst)))
  78.           )
  79.           lst
  80.         )
  81.       )
  82.       (vla-get-name group)
  83.     )
  84.   )
  85. )

  86. (defun ybvl-addgroup (groupname)
  87.   (if (not
  88.         (vl-catch-all-error-p
  89.           (setq        tf (vl-catch-all-apply
  90.                      'vla-item
  91.                      (list (vla-get-groups *AcDocument*) groupname)
  92.                    )
  93.           )
  94.         )
  95.       )
  96.     tf
  97.     (vla-add
  98.       (vla-get-groups *AcDocument*)
  99.       groupname
  100.     )
  101.   )
  102. )

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

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-11-18 18:41:12 | 显示全部楼层
st788796 发表于 2014-11-18 17:25
这个本来运行就没有效果,只有你后面使用 ActiveSelectionSet 才有效果

st大师,调试时中断在这个函数这里,又是跟*AcDocument* 有关, 这里该怎么改呢?
  1. (defun ybvl-addgroup (groupname)
  2.   (if (not
  3.         (vl-catch-all-error-p
  4.           (setq        tf (vl-catch-all-apply
  5.                      'vla-item
  6.                      (list (vla-get-groups *AcDocument*) groupname)
  7.                    )
  8.           )
  9.         )
  10.       )
  11.     tf
  12.     (vla-add
  13.       (vla-get-groups *AcDocument*)
  14.       groupname
  15.     )
  16.   )
  17. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-18 18:58:10 | 显示全部楼层
本帖最后由 st788796 于 2014-11-18 18:59 编辑

(setq *AcDocument* (vla-get-activedocument (vlax-get-acad-object)))

用 xdrx_group_make 吧,省事

功      能: 创建组
调用格式:  (xdrx_group_make <"组名"> <实体名 or 选择集>...<实体名 or 选择集>)
返      回: 成功返回组名
说      明: 若“组名”是"*",则创建匿名组



点评

先newer版主说的给*AcDocument* 赋值,应改就是这个意思, 这样函数ybvl-Clearcset 里的就不用替换了! 谢谢ST大师的无私帮助!!!  详情 回复 发表于 2014-11-18 19:13

评分

参与人数 1D豆 +5 收起 理由
lucas3 + 5 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-11-18 19:13:08 | 显示全部楼层
st788796 发表于 2014-11-18 18:58
(setq *AcDocument* (vla-get-activedocument (vlax-get-acad-object)))

用 xdrx_group_make 吧,省事

先newer版主说的给*AcDocument* 赋值,应改就是这个意思, 这样函数ybvl-Clearcset 里的就不用替换了!
谢谢ST大师的无私帮助!!!

点评

这应该是截取的片段,每个写就太累了 (setq *AcDocument* (vla-get-activedocument (vlax-get-acad-object))) (fy:acdoc)  详情 回复 发表于 2014-11-18 19:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-11-18 19:17:26 | 显示全部楼层
lucas3 发表于 2014-11-18 19:13
先newer版主说的给*AcDocument* 赋值,应改就是这个意思, 这样函数ybvl-Clearcset 里的就不用替换了!
...


这应该是截取的片段,每个写就太累了

(setq *AcDocument* (vla-get-activedocument (vlax-get-acad-object))) <=> (fy:acdoc)

点评

大师的意是这个跟您的(fy:acdoc) 函数功能一样吧  详情 回复 发表于 2014-11-18 19:28

评分

参与人数 1D豆 +5 收起 理由
lucas3 + 5 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-11-18 19:28:03 | 显示全部楼层
Free-Lancer 发表于 2014-11-18 19:17
这应该是截取的片段,每个写就太累了

(setq *AcDocument* (vla-get-activedocument (vlax-get-acad- ...

大师的意是这个跟您的(fy:acdoc) 函数功能一样吧

点评

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

使用道具 举报

发表于 2014-11-18 19:31:46 | 显示全部楼层
lucas3 发表于 2014-11-18 19:28
大师的意是这个跟您的(fy:acdoc) 函数功能一样吧

一试便知     

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 06:50 , Processed in 0.297062 second(s), 68 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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