自贡黄明儒 发表于 2013-6-15 14:00:33

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

本帖最后由 自贡黄明儒 于 2013-6-21 14:14 编辑

根据各位高手的帮忙,现总结如下:
;;161.1 [功能] 选择集->VlaSS集合
;;(vlax-map-Collection (ss->vlass ss) 'vla-delete)
(defun ss->vlass (ss)
(command "_.select" ss "")
(vla-get-activeselectionset
    (vla-get-ActiveDocument (vlax-get-acad-object))
)
)
;;161.2 [功能] lisp选择集或图元转为vla选择集 By namezg
;;(vlax-map-Collection (SS->vlaSS ss) 'vla-delete)
(defun SS->vlaSS1 (ss / *DOC* I OBJLST SARRAY SSET VLA)
(setq *DOC* (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq SSet (vla-get-ActiveSelectionSet *DOC*))
(vla-Clear SSet)      ;清空选择集
;;得到VLA物体列表
(repeat (setq i (sslength ss))
    (setq vla (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
    (setq objlst (cons vla objlst))
)
(setqsArray (vlax-make-safearray
   vlax-vbobject
   (cons 0 (1- (length objlst)))
         )
)          ;在数组 SArray 的元素中存储数据
(vlax-safearray-fill sArray objlst)
(vla-AddItems SSet sArray)
SSet
)

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

nzl1116 发表于 2013-6-15 14:47:55

转集合没必要吧,真的想的话,我知道的只能用AddLine AddCircle...等等
就想在模型空间里添加图元一样,模型空间就是一个集合

namezg 发表于 2013-6-16 15:53:25

本帖最后由 namezg 于 2013-6-16 15:55 编辑

;lisp选择集或图元转为vla选择集
;ss--lisp选择集或图元
;(setq SSet (zg-SS->vla-SSet (ssget)));#<VLA-OBJECT IAcadSelectionSet 0e697004>
;方法一
(defun zg-SS->vla-SSet (ss / AcadObject AcadDocument SSet)
      (command "_.select" ss "")
      (setq AcadObject (vlax-get-acad-object))
      (setq AcadDocument (vla-get-ActiveDocument Acadobject))
      (setq SSet (vla-get-ActiveSelectionSet AcadDocument))
      ;(vla-Highlight SSet "true");亮显选择集
      SSet
)

namezg 发表于 2013-6-16 15:55:00

本帖最后由 namezg 于 2013-6-16 15:56 编辑

;lisp选择集或图元转为vla选择集
;ss--lisp选择集或图元
;(setq SSet (zg-SS->vla-SSet (ssget)))
;方法二
(defun zg-SS->vla-SSet (ss / AcadObject AcadDocument SelectionSets SSet SSetName objlst sArray index item)
      ;功能:lisp选择集或图元转换为vla对象列表
      ;参数:ss--lisp选择集或图元
      ;返回:vla对象列表,ss为nil时,返回nil
      ;(setq objlst (zg-ss->vla-objectlist (ssget)))
      ;(#<VLA-OBJECT IAcadLine 1fab0e04> #<VLA-OBJECT IAcadLine 1fab0e64> #<VLA-OBJECT IAcadLine 1fab1b84> #<VLA-OBJECT IAcadLine 1fab1044> #<VLA-OBJECT IAcadLine 1fab1164>)
      (defun zg-ss->vla-objectlist (ss / i objlst)
                (setq objlst '())
                (cond
                        ((= (type ss) 'ENAME)
                              (setq objlst (cons (vlax-ename->vla-object ss) objlst))
                        )
                        ((= (type ss) 'PICKSET)
                              (setq i -1)
                              (repeat (sslength ss)
                                        (setq objlst (cons (vlax-ename->vla-object (ssname ss (setq i (1+ i)))) objlst))
                              )
                        )
                )
                objlst
      )
      (setq AcadObject (vlax-get-acad-object))
      (setq AcadDocument (vla-get-ActiveDocument Acadobject))
      ;建立一个选择集
      (setq SSet (vla-get-ActiveSelectionSet AcadDocument))
      (vla-Clear SSet);清空选择集
      (setq objlst (zg-ss->vla-objectlist ss))
      (setq sArray (vlax-make-safearray vlax-vbobject (cons 0 (1- (length objlst)))))
      ;在数组 SArray 的元素中存储数据
      (vlax-safearray-fill sArray objlst)
      (vla-AddItems SSet sArray)
      SSet
)

434939575 发表于 2014-5-16 23:19:37

今天在考虑这个问题。如果是vLa阵列选择集用这个就好]。来取经了。

434939575 发表于 2014-5-16 23:21:06

今天在考虑这个问题。如果是vLa阵列选择集用这个就好]。来取经了。

bbswen 发表于 2014-8-29 12:59:58

做个记号,;lisp选择集或图元转为vla选择集

jicqj 发表于 2014-11-2 11:02:15

不错的程序做个记号 用得到

yx5277 发表于 2014-11-15 23:44:01

想知道转了之后的好处

springwillow 发表于 2015-1-24 20:53:51

如何不用ssget直接构建VLA选择集呢?最好是也能带有过滤功能的
页: [1] 2
查看完整版本: ssget得到的选择集,转为vla集合,谁有好办法?------总结