本帖最后由 自贡黄明儒 于 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))
- )
- (setq sArray (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
- )
|