275437962 发表于 2013-12-30 23:19:03

大家帮忙看看,这个问题不会太麻烦!!!

本帖最后由 275437962 于 2013-12-30 23:22 编辑

(defun c:tt ()
(setvar "CMDECHO" 0)
(if (and (setq bnm (getstring "\n图块名 :"))
         (/= bnm "")
         (princ "\n选择圆 :")
         (setq ss (ssget '((0 . "CIRCLE")(40 . xxxx))))) ;;xxxx换成你需要的圆的半径
(progn
   (setq i 0)
   (repeat (sslength ss)
    (setq pc (cdr(assoc 10 (entget (ssname ss i)))))
    (setq ely (cdr(assoc 8 (entget (ssname ss i)))))
    (command "-insert" bnm pc "" "" "")
    (command "change" (entlast) "" "p" "la" ely "co" "byl" "")
    (setq i (1+ i))
   )
;; (command ".erase" ss "");删去此句就保留圆
))
(setvar "CMDECHO" 1)
(princ)
)

上面的程序只能针对半径是整数的圆,能否提高精度也可针对,如圆的半径为0.2345,即小数点后保留4位!!!



还有下面这个:

(defun myss (minl maxl / e len n obj ss)
(if (setq ss (ssget '((0 . "LINE"))))
    (repeat (setq n (sslength ss))
      (setq e (ssname ss (setq n (1- n))))
      (setq obj (vlax-ename->vla-object e))
      (setq len (vlax-get obj 'length))
      (if (or
            (< len minl)
            (> len maxl)
          )
      (ssdel e ss)
      )
    )
)
ss
)

(defun c:sss (/ a b ss)
(if (not (setq a (getdist "\n请指定最小长度<0.01>:")))
    (setq a 0.5)
)
(if (not (setq b (getdist "\n请指定最大长度<0.08>:")))
    (setq b 2.5)
)
(if (and
      a
      b
      )
    (if (setq ss (myss a b))
      (command "._select" ss "" "._pselect" ss "")
    )
)
(princ)
)

如何提高这个程序快速选择的精度,如我要选择的直线是0.0798,那么按上面程序的最小长度0.01和最大长度0.08,这条线不能被选中!!能否让这个选择的精度,精确到小数点后四位!!



freehand8008 发表于 2014-3-12 09:19:12

楼主是否可以换个思路

精确到小数点后4位和后8位区别不是很大

是否可以选择如1.01-1。02之间
页: [1]
查看完整版本: 大家帮忙看看,这个问题不会太麻烦!!!