找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1055|回复: 8

[原创]:提取单个块的所有属性值 !超级精简代码!

[复制链接]
发表于 2004-4-16 01:31:47 | 显示全部楼层 |阅读模式

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

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

×
[php]
;(getatt ) = 提取单个块的所有属性值--------vl方法-----by 陌生人.2004.4
;返回:所有属性值的列表。
;测试: (getatt (car(entsel "\n选择含属性的块:")))

(defun getatt (blk / attlst lst)
  (setq attlst (vlax-invoke (vlax-ename->vla-object blk) 'GetAttributes ))
  (mapcar '(lambda (x) (vlax-get x 'TextString)) attlst)
)
[/php]

------
编程要点分析:
用vlax返回值的特性,避免了过多的变体转换。
其中:vlax-invoke 得到的是 vla方法的列表 ,如果用vla-getattributes,将返回变体数组。
vlax-get,直接得到textsting的值,当然,一般vla能直接返回字符串,但是在这里,我把属性的属性单独拿出来,好处是什么?:)
换成‘TagString 试试,换成’Rotation 试试。如果是用vla-get-,你会怎么做呢?写很多个有重复代码的程序?还是将 函数名用字符串组合再转为完整的函数名?如:(eval (quote(read(strcat "vla-get-" (vl-symbol-name  attkey) ))))) ,都不如用vlax简单。
得了表之后处理用mapcar,foreach是常用方法。
------

不得不说的话:
这个程序仅仅提供一个框架,其实仅仅返回属性值列表往往不能满足需求,一般是和tag等其他一起组表才方便后面的提取。
但是你可以通过稍微一点的修改,而达到目的。能够发挥多少,就看你自己的本事了。呵呵:)

虽然程序不长,(比我见过的同样功能的程序要简洁),但是这体现了我编程经验的积淀,我相信(自信)这也不是一般爱好lsp编程的人能写出来的(当然,高手除外)。
完成一个功能,能用一句代码写出来,就不要用两句---这是我的编程原则之一。今天不才,拿出来与大家共勉。:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-4-16 07:36:03 | 显示全部楼层
陌生人,兄弟看来又想通了哈,更进了一步,佩服佩服。向你学习,瘦身运动一定要坚持:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-16 18:20:14 | 显示全部楼层
高手!
看来学无止境,我要继续努力才行呀!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-4-16 23:56:58 | 显示全部楼层
不是原创吧:)

不过很奇怪,帮助里说,vlax-invoke 是2000以前的。那时候好像没variant吧,只好是表了.
现在是vlax-invoke-method了,但实际上还是支持的,但返回是不同的.

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

使用道具 举报

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-4-17 01:41:52 | 显示全部楼层
VxGetAtts - Reads all attribute values from a block

[php]
;
; -- Function VxGetAtts
; Reads all attribute values from a block
; Copyright:
;   ?000 MENZI ENGINEERING GmbH, Switzerland
; Arguments [Typ]:
;   Obj = Object [VLA-OBJECT]
; Return [Typ]:
;   > Dotted pair list '(("Tag1" . "Val1")...) [LIST]
; Notes:
;   None
;
(defun VxGetAtts (Obj)
(mapcar
'(lambda (Att)
   (cons (vla-get-TagString Att)
         (vla-get-TextString Att)
   )
  )
  (vlax-invoke Obj "GetAttributes")
)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-17 11:27:15 | 显示全部楼层
我还真没见过上面这个程序,那也算英雄所见略同吧。
而且,对textstring的用法也不同
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-17 18:06:31 | 显示全部楼层
陌生人能写出这样的程序很正常,非常不错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-19 12:32:27 | 显示全部楼层
;;查看http://www.mjtd.com/bbs/dispbbs. ... 7&replyID=10014
;;vlax-get & vlax-invoke是向下相容
;;但以後不一定支持,能不用就不用

;;換成『TagString 試試,換成』Rotation 試試。如果是用vla-get-,你會怎麼做呢?
;;--->把VLA-GET-TEXTSTRING放到輸入來做!!

;;下列用很久了!(最近在明經的TABLE R2005 提取圖面中所有帶屬性圖塊值並表列)
;;甚麼是才算精簡代碼!要處理的放到輸入來處理!!
;;提取單個塊的所有屬性值vl方法---By 龍龍仔.200?
;;返回:所有屬性值的列表。
;;(GETATT <VOBJ> <VLA-GET-物件性質>)
;;(GETATT (vlax-ename->vla-object (car (entsel "\n選擇含屬性的塊:"))) VLA-GET-TEXTSTRING)
(defun GETATT (OBJ TAG)
  (mapcar '(lambda (ATT) (TAG ATT))
          (vlax-invoke OBJ "GetAttributes")
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 05:13 , Processed in 0.519403 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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