找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 9870|回复: 24

[原创] 使用纯VLA写程序

[复制链接]
发表于 2013-6-8 12:39:58 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 snsj 于 2013-6-16 23:53 编辑

现在好些程序都是在LISP和VLISP之间的切换完成的,这样会经常在ENAME和VLA实体间的转化,影响效率,纯VLA编程很多老autoLISP的爱好者不太适应,因为VLA像VB的编程方式,纯LISP靠组码解决问题,一堆数字代表某种信息,而VLA更直观懂英文的更能很好的理解,而不用通过组码表去查找。希望通过这个帖子高手们能搜集齐所有VLA的技巧方法。

1、首先说一下ENTGET,LISP里很容易实现了 (entsel msg)就可以了,VLA实现起来比较麻烦一点,因为VLA主要要应对错误的处理,如果ENTSEL选择不到物体会返回NIL,但是VLA则会出现错误,必须在程序里截取错误,才能获得ENTSEL的效果
;;;取得文档的Utility对象
[pcode=lisp,true]
;;;得到CAD活动文档
(defun apple-act()
  (vla-get-activedocument (vlax-get-acad-object))
  )
(defun apple-util()
  (vla-get-utility(apple-act))
)
[/pcode]

如果我们直接用

[pcode=lisp,true](vla-getentity(apple-util) 'obj 'ip "\nSelect Object: ")[/pcode]

来获取,则当空选时就会出错
VLA需要靠VL-CATCH-ALL-APPLY来截取错误
所有的互动函数都要靠这个函数来截取错误
不说废话直接上函数
一个跟ENTSEL等效的VLA的方法

[pcode=lisp,true]
(defun apple-vla-entsel (msg /)
   (if(null(vl-catch-all-error-p(vl-catch-all-apply 'vla-getentity (list(apple-util) 'obj 'ip msg))))
       (list obj ip)
        nil
   )
)
[/pcode]

这个就可以返回VLA的信息列表了
;;;VLA方法得到一个点PT为参照点,如果为NIL则直接获取一个点
;;;成功则返回一个VLA点,否则返回nil
[pcode=lisp,true]
(defun apple-vla-gpt (pt msg / ptt)
  (if(null(vl-catch-all-error-p
    (setq ptt(vl-catch-all-apply 'vla-getpoint(list(apple-util) pt msg)))))
     ptt nil
  )
)
[/pcode]

;;;橡皮筋获取点效果
  (setq ip (vla-gpt (vla-gpt nil nil) "\nInsertion Point: "))
[pcode=lisp,true]
;;;vla的方法得到CORNER,VLAPT参照点,msg:提示信息
(defun apple-vla-getcorn (vlapt msg /)
(if(null(vl-catch-all-error-p
  (setq corn(vl-catch-all-apply 'vla-GetCorner(list(apple-util)vlapt msg)))))
  corn nil
  )
)
[/pcode]

;配合apple-vla-gpt得到动态效果

[pcode=lisp,true](apple-vla-getcorn(apple-vla-gpt nil nil)"")[/pcode]
[pcode=lisp,true]
;;;相当于polar函数
;;;vlapt 一个VLA的点,ang为一个角度,DIS距离
(defun apple-vla-polar (vlapt ang dis / por)
(if(null(vl-catch-all-error-p
   (setq por(vl-catch-all-apply 'vla-polarpoint(list(apple-util)vlapt ang dis)))))
   por nil
  )
  )
[/pcode]
[pcode=lisp,true]
;;;|变体转化
(defun LstToArray (Typ Lst)
(vlax-make-variant(vlax-safearray-fill
   (vlax-make-safearray Typ (cons 0 (1- (length Lst))))
   Lst))
)
;;;VLA选择,带过滤,作者:SNSJ 2013.6.16
;;;fillist '((0 . "LINE")(8 . "0")...)
(defun apple-vla-select (fillist / a b zm1 zm2 sss ss newss)
(setq a(mapcar 'car fillist)
      b(mapcar 'cdr fillist)
      zm1(LstToArray vlax-vbInteger a)
      zm2(LstToArray vlax-vbVariant b)
      sss(vla-get-selectionsets(apple-act))
      newss nil
      )
(if(vl-catch-all-error-p(setq ss(vl-catch-all-apply 'vla-item (list sss "appless"))))
   (setq newss (vla-add sss "appless"))
   (progn(vla-delete ss)(setq newss (vla-add sss "appless")))
  )
(vla-selectOnScreen newss zm1 zm2)
newss
  )
[/pcode]






评分

参与人数 3D豆 +20 贡献 +1 收起 理由
炫翔 + 5 很给力!经验;技术要点;资料分享奖!
XDSoft + 10 + 1 好主题奖!
xshrimp + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 394个

财富等级: 日进斗金

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-8 19:47:08 | 显示全部楼层
支持楼主下,以前只听说 “纯LISP”,还第一次听说“纯VLISP”。希望楼主给出更多的"纯VLISP“代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

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

使用道具 举报

已领礼包: 3913个

财富等级: 富可敌国

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

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2013-6-12 21:34:45 | 显示全部楼层
纯VLISP的程式好像不多哦,混合的倒是不少。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-15 21:59:20 来自手机 | 显示全部楼层
有些编辑是vla办不到的,必须结合用来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1632个

财富等级: 堆金积玉

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

使用道具 举报

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

使用道具 举报

已领礼包: 3913个

财富等级: 富可敌国

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 05:21 , Processed in 0.471720 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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