明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 939|回复: 1

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

[复制链接]
发表于 2013-12-30 23:19 | 显示全部楼层 |阅读模式
本帖最后由 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,这条线不能被选中!!能否让这个选择的精度,精确到小数点后四位!!



发表于 2014-3-12 09:19 | 显示全部楼层
楼主是否可以换个思路

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

是否可以选择  如  1.01-1。02之间
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-20 08:22 , Processed in 0.270909 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表