ipse 发表于 2022-7-6 06:22:58

dim舍入选择lisp

大家好,
我正在搜索一种方法来选择(过滤)尺寸,尺寸舍入值不同于0。知道吗?Ssget或如何?谢谢

marko_ribar 发表于 2022-7-6 06:46:29

也许这个,如果我理解正确的话。。。
 
 

(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。

ipse 发表于 2022-7-6 06:55:50

我有一个44毫米的尺寸,然后我四舍五入到45(使用dim舍入5)。我想过滤这种维度。

Stefan BMR 发表于 2022-7-6 07:01:13

(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)
)

ipse 发表于 2022-7-6 07:22:26

谢谢Stefan,太好了!

marko_ribar 发表于 2022-7-6 07:23:05

试试这个:

(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]
查看完整版本: dim舍入选择lisp