如何使用ssget?
你好我想知道如何将(entsel函数)替换为(ssget函数)!!!
(vl-load-com)
(setq LINE (car (entsel "\n Select a Line: ")))
(setq Myline (vlax-ename->vla-object LINE))
(vla-get-length Myline)
非常感谢。
塔瓦特 对于单个选择,可能是这样的?
(ssget "_+.:E:S" '((0 . "LINE")))
对于多个,您需要逐步完成集合:
(if (setq i -1 ss (ssget '((0 . "LINE"))))
(while (setq e (ssname ss (setq i (1+ i))))
(print (vla-get-length (vlax-ename->vla-object e)))
)
)
或者可以使用vlax for单步遍历VL中的ActiveSelectionSet(或者实际上,您可以在VL中获取SelectionSet)。 谢谢李。
当你提到“也许”时,我很惊讶。
但是当你把剩下的加进去时,我深深地吸了一口气。因此,代码目前运行良好。
(vl-load-com)
(if (setq i -1
ss (ssget '((0 . "LINE"))))
(while
(setq e (ssname ss (setq i (1+ i))))
(setq obj (vlax-ename->vla-object e))
(setq len (vla-get-length obj))
))
为什么以下功能不能正确响应代码?
(setq start (vla-get-startpoint obj))
(setq end (vla-get-endpoint obj))
非常感谢。 请记住,vla get startpoint/endpoint返回变量需要转换为safearrays,然后列出是否计划将其用作普通数据类型,例如:
或者,为了避免这种转换:
(vlax-get <VLA-Object> 'StartPoint) 也许为了其他人的利益,您可以这样在VL中完全获得相同的选择集:
(defun c:test
( /
_SafearrayVariant
_GetUniqueKey
SelSet
SelSets
)
(vl-load-com)
;; © Lee Mac 2010
(defun _SafearrayVariant ( datatype data )
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray datatype (cons 0 (1- (length data))))
data
)
)
)
(defun _GetUniqueKey ( collection seed )
(
(lambda ( i / key )
(while
(not
(vl-catch-all-error-p
(vl-catch-all-apply 'vla-item
(list collection
(setq key
(strcat seed
(itoa
(setq i (1+ i))
)
)
)
)
)
)
)
)
key
)
0
)
)
(vla-SelectonScreen
(setq SelSet
(vla-Add
(setq SelSets
(vla-get-SelectionSets
(vla-get-ActiveDocument
(vlax-get-acad-object)
)
)
)
(_GetUniqueKey SelSets "SelSet")
)
)
(_SafearrayVariant vlax-vbinteger '(0))
(_SafearrayVariant vlax-vbvariant '("LINE"))
)
(if (< 0 (vla-get-Count SelSet))
(vlax-for o SelSet
(print (vla-get-length o))
)
)
(vla-delete SelSet)
(princ)
)
或所有AutoLISP。。。
(defun c:Test (/ ss)
(if (setq ss (ssget '((0 . "LINE"))))
(progn
(vlax-for x (setq ss (vla-get-activeselectionset
(vla-get-activedocument (vlax-get-acad-object))
)
)
(print (vla-get-length x))
)
(vla-delete ss)
)
)
(princ)
) 谢谢Alanjt。
请告诉我以下两种代码之间的区别是什么。。
第一
(defun c:Test (/ i ss e l)
(if (setq i-1
ss (ssget '((0 . "LINE")))
)
(while (setq e (ssname ss (setq i (1+ i))))
(print (distance (cdr (assoc 10 (setq l (entget e)))) (cdr (assoc 11 l))))
)
)
(princ)
)
第二
(vl-load-com)
(setq i -1
ss (ssget '((0 . "LINE"))))
(progn
(setq e (ssname ss (setq i (1+ i))))
(setq obj (vlax-ename->vla-object e))
(print (vla-get-length obj))
))
非常感谢
非常感谢。
假设我想得到起点和终点,我应该重复转换两次来得到这两个点吗?
示例。
(vl-load-com)
(setq ss (ssget '((0 . "LINE"))))
(progn
(vlax-for x (setq ss (vla-get-activeselectionset
(vla-get-activedocument (vlax-get-acad-object))
)
)
(print (vla-get-length x))
)
(vla-delete ss)
)
当做 如果您希望以这种方式继续,请在转换后设置变量,因此:
(vl-load-com)
(if (setq i -1 ss (ssget '((0 . "LINE"))))
(progn
(setq e (ssname ss (setq i (1+ i))))
(setq obj (vlax-ename->vla-object e))
(vlax-safearray->list
(vlax-variant-value
(setq start (vla-get-StartPoint obj))
)
)
(vlax-safearray->list
(vlax-variant-value
(setq end (vla-get-endPoint obj))
)
)
))
否则,您可以同样使用:
(setq start
(vlax-safearray->list
(vlax-variant-value
(vla-get-StartPoint obj)
)
)
)
李 你真了不起,李。
非常感谢你。这真的很吸引人。
塔瓦特
(setq Start (vlax-get obj 'StartPoint))
页:
[1]
2