明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6517|回复: 10

[公告] ssget得到的选择集,转为vla集合,谁有好办法?------总结

[复制链接]
发表于 2013-6-15 14:00 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2013-6-21 14:14 编辑

根据各位高手的帮忙,现总结如下:
  1. ;;161.1 [功能] 选择集->VlaSS集合
  2. ;;(vlax-map-Collection (ss->vlass ss) 'vla-delete)
  3. (defun ss->vlass (ss)
  4.   (command "_.select" ss "")
  5.   (vla-get-activeselectionset
  6.     (vla-get-ActiveDocument (vlax-get-acad-object))
  7.   )
  8. )
  9. ;;161.2 [功能] lisp选择集或图元转为vla选择集 By namezg
  10. ;;(vlax-map-Collection (SS->vlaSS ss) 'vla-delete)
  11. (defun SS->vlaSS1 (ss / *DOC* I OBJLST SARRAY SSET VLA)
  12.   (setq *DOC* (vla-get-ActiveDocument (vlax-get-acad-object)))
  13.   (setq SSet (vla-get-ActiveSelectionSet *DOC*))
  14.   (vla-Clear SSet)      ;清空选择集
  15.   ;;得到VLA物体列表
  16.   (repeat (setq i (sslength ss))
  17.     (setq vla (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
  18.     (setq objlst (cons vla objlst))
  19.   )
  20.   (setq  sArray (vlax-make-safearray
  21.      vlax-vbobject
  22.      (cons 0 (1- (length objlst)))
  23.          )
  24.   )          ;在数组 SArray 的元素中存储数据
  25.   (vlax-safearray-fill sArray objlst)
  26.   (vla-AddItems SSet sArray)  
  27.   SSet
  28. )

  29. ;;161.3 [功能] 将一个选择集转化为VLA选择集 By 裸奔的花猫
  30. (defun ss->vlass2 (ss / *DOC* I OBJLST SSET VLA)
  31.   (setq  *DOC*  (vla-get-activedocument (vlax-get-acad-object))
  32.   sset (vla-get-SelectionSets *DOC*)
  33.   )
  34.   ;;有选择集$Set,则先删除,或者(vla-Clear $Set)
  35.   (if (vl-catch-all-error-p
  36.   (vl-catch-all-apply 'vla-item (list sset "$Set"))
  37.       )
  38.     nil
  39.     (vla-delete (vla-item sset "$Set"))
  40.   )
  41.   (setq SSet (vla-add sset "$Set"))  ;新建一个VLA选择集
  42.   ;;得到VLA物体列表
  43.   (repeat (setq i (sslength ss))
  44.     (setq vla (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
  45.     (setq objlst (cons vla objlst))
  46.   )
  47.   (vlax-invoke SSet 'additems objlst)
  48.   SSet
  49. )

点评

反过来怎么办呢  发表于 2015-8-19 16:45
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-6-15 14:47 | 显示全部楼层
转集合没必要吧,真的想的话,我知道的只能用AddLine AddCircle...等等
就想在模型空间里添加图元一样,模型空间就是一个集合

点评

办法多一些总是好事  发表于 2013-6-15 14:56
发表于 2013-6-16 15:53 | 显示全部楼层
本帖最后由 namezg 于 2013-6-16 15:55 编辑
  1. ;lisp选择集或图元转为vla选择集
  2. ;ss--lisp选择集或图元
  3. ;(setq SSet (zg-SS->vla-SSet (ssget)));#<VLA-OBJECT IAcadSelectionSet 0e697004>
  4. ;方法一
  5. (defun zg-SS->vla-SSet (ss / AcadObject AcadDocument SSet)
  6.         (command "_.select" ss "")
  7.         (setq AcadObject (vlax-get-acad-object))
  8.         (setq AcadDocument (vla-get-ActiveDocument Acadobject))
  9.         (setq SSet (vla-get-ActiveSelectionSet AcadDocument))
  10.         ;(vla-Highlight SSet "true")  ;亮显选择集
  11.         SSet
  12. )
发表于 2013-6-16 15:55 | 显示全部楼层
本帖最后由 namezg 于 2013-6-16 15:56 编辑
  1. ;lisp选择集或图元转为vla选择集
  2. ;ss--lisp选择集或图元
  3. ;(setq SSet (zg-SS->vla-SSet (ssget)))
  4. ;方法二
  5. (defun zg-SS->vla-SSet (ss / AcadObject AcadDocument SelectionSets SSet SSetName objlst sArray index item)
  6.         ;功能:lisp选择集或图元转换为vla对象列表
  7.         ;参数:ss--lisp选择集或图元
  8.         ;返回:vla对象列表,ss为nil时,返回nil
  9.         ;(setq objlst (zg-ss->vla-objectlist (ssget)))
  10.         ;(#<VLA-OBJECT IAcadLine 1fab0e04> #<VLA-OBJECT IAcadLine 1fab0e64> #<VLA-OBJECT IAcadLine 1fab1b84> #<VLA-OBJECT IAcadLine 1fab1044> #<VLA-OBJECT IAcadLine 1fab1164>)
  11.         (defun zg-ss->vla-objectlist (ss / i objlst)
  12.                 (setq objlst '())
  13.                 (cond
  14.                         ((= (type ss) 'ENAME)
  15.                                 (setq objlst (cons (vlax-ename->vla-object ss) objlst))
  16.                         )
  17.                         ((= (type ss) 'PICKSET)
  18.                                 (setq i -1)
  19.                                 (repeat (sslength ss)
  20.                                         (setq objlst (cons (vlax-ename->vla-object (ssname ss (setq i (1+ i)))) objlst))
  21.                                 )
  22.                         )
  23.                 )
  24.                 objlst
  25.         )
  26.         (setq AcadObject (vlax-get-acad-object))
  27.         (setq AcadDocument (vla-get-ActiveDocument Acadobject))
  28.         ;建立一个选择集
  29.         (setq SSet (vla-get-ActiveSelectionSet AcadDocument))
  30.         (vla-Clear SSet);清空选择集
  31.         (setq objlst (zg-ss->vla-objectlist ss))
  32.         (setq sArray (vlax-make-safearray vlax-vbobject (cons 0 (1- (length objlst)))))
  33.         ;在数组 SArray 的元素中存储数据
  34.         (vlax-safearray-fill sArray objlst)
  35.         (vla-AddItems SSet sArray)
  36.         SSet
  37. )

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 很给力!

查看全部评分

发表于 2014-5-16 23:19 来自手机 | 显示全部楼层
今天在考虑这个问题。如果是vLa阵列选择集用这个就好]。来取经了。
发表于 2014-5-16 23:21 来自手机 | 显示全部楼层
今天在考虑这个问题。如果是vLa阵列选择集用这个就好]。来取经了。
发表于 2014-8-29 12:59 | 显示全部楼层
做个记号,;lisp选择集或图元转为vla选择集
发表于 2014-11-2 11:02 | 显示全部楼层
不错的程序  做个记号 用得到
发表于 2014-11-15 23:44 | 显示全部楼层
想知道转了之后的好处
发表于 2015-1-24 20:53 | 显示全部楼层
如何不用ssget直接构建VLA选择集呢?最好是也能带有过滤功能的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 09:16 , Processed in 0.418158 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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