dim舍入选择lisp
大家好,我正在搜索一种方法来选择(过滤)尺寸,尺寸舍入值不同于0。知道吗?Ssget或如何?谢谢 也许这个,如果我理解正确的话。。。
(defun c:ssfiltdimdecimal ( / sss ss i dim d )
(setq sss (ssadd))
(setq ss (ssget "_:L" '((0 . "DIMENSION"))))
(if ss
(repeat (setq i (sslength ss))
(setq dim (ssname ss (setq i (1- i))))
(if (not (equal (fix (setq d (cdr (assoc 42 (entget dim))))) d))
(ssadd dim sss)
)
)
(prompt "\nEmpty selection set - restart routine")
)
(prompt "\nDimensions with decimal places are highlighted")
(sssetfirst nil sss)
(princ)
)
(defun c:ssfdd nil (c:ssfiltdimdecimal))
(prompt "\nInvoke with : ssfdd")
(princ)
M、 R。 我有一个44毫米的尺寸,然后我四舍五入到45(使用dim舍入5)。我想过滤这种维度。 (defun filter_round_distance (ss r / ss1 e o)
(setq ss1 (ssadd))
(repeat (setq i (sslength ss))
(if
(and
(vlax-property-available-p (setq o (vlax-ename->vla-object (setq e (ssname ss (setq i (1- i)))))) 'RoundDistance)
(equal (vla-get-RoundDistance o) r 1e-
)
(setq ss1 (ssadd e ss1))
)
)
ss1
)
(defun C:TEST ( / s n)
(if
(and
(setq s (ssget '((0 . "*DIM*"))))
(setq n (getreal "\nRoundoff value: "))
)
(sssetfirst nil (filter_round_distance s n))
)
(princ)
) 谢谢Stefan,太好了! 试试这个:
(defun c:ssfiltdimround ( / _round sss ss i dim round d )
(vl-load-com)
(defun _round ( n d )
(if (< (- n (* (fix (/ n d)) d)) (/ d 2.0))
(* (fix (/ n d)) d)
(* (+ 1.0 (fix (/ n d))) d)
)
)
(setq sss (ssadd))
(setq ss (ssget "_:L" '((0 . "DIMENSION"))))
(if ss
(repeat (setq i (sslength ss))
(setq dim (ssname ss (setq i (1- i))))
(if (vlax-property-available-p (vlax-ename->vla-object dim) 'rounddistance)
(progn
(setq round (vla-get-rounddistance (vlax-ename->vla-object dim)))
(if (not (equal (setq d (vla-get-measurement (vlax-ename->vla-object dim))) (vl-catch-all-apply '_round (list d round))))
(if (/= round 0.0) (ssadd dim sss))
)
)
)
)
(prompt "\nEmpty selection set - restart routine")
)
(prompt "\nDimensions witch are rounded and have rounddistance are highlighted")
(sssetfirst nil sss)
(princ)
)
(defun c:ssfdr nil (c:ssfiltdimround))
(prompt "\nInvoke with : ssfdr")
(princ)
M、 R。
页:
[1]