xiaolong1487 发表于 2014-9-21 11:06:10

命令循环执行大集合!

大师们不要说我是标题党哦!
我想做一个集合贴,对我们新手很有帮助!希望大师们不吝赐教!谢谢!
例1:画圆
先输入命令:circle→指定点→输半径→结束
那么我们要画同样直径的圆就要重复执行上面3步,通过LISP简化,我们可以省去两步,指定点就好了!(defun c:tt1 (/ os ce dd b pt rr)
(setq os (getvar "osmode")
      ce (getvar "cmdecho")
)
(setvar "osmode" 39)
(setvar "cmdecho" 0)
(setq dd (getreal "\n输入圆直径<1>:"))
(if (= dd nil)
    (setq dd 1.0)
)
(setq rr (/ dd 2))
(setq b 1)
(while (<= b 100)
    (setq pt (getpoint "\n选择放置点,空格退出:"))
    (if (not (null pt))
      (progn
      (command "circle" pt rr)
      (setq b (+ 1 b))
      (princ)
      )
      (setq b 101)
    )
)
(princ "\n程序退出!")
(setvar "osmode" os)
(setvar "cmdecho" ce)
(princ)
)

wline 发表于 2024-7-12 00:01:08

虽然不会用到,但是还是点个赞

冒个烟圈 发表于 2018-4-25 07:58:05

来晚了也要标记下

xvjiex 发表于 2019-8-23 16:58:36

学习了,谢谢楼主!

xiaolong1487 发表于 2014-9-21 11:07:28

本帖最后由 xiaolong1487 于 2014-9-21 11:12 编辑

例2. 再来一个,重复执行对齐标注的!
引用“http://bbs.mjtd.com/thread-111429-1-1.html”
在这里感谢SunSpring 琴剑江山_10184 两位朋友的帮助(defun c:dli ( / bpt ent f str)
(prompt "创建线性标注")
(setq f t)
(setq str "或 <选择对象>")
(while (setq bpt (getpoint (strcat "\n指定第一条尺寸界线原点" str ":")))
    (setq f nil)
    (setq str "")
    (command ".dimlinear")
    (setvar "cmdecho" 1)
    (command bpt)
    (while (> (getvar "cmdactive") 0)
      (command pause)
    )
    (setvar "cmdecho" 0)
)
(while (and f (setq ent (entsel "\n选择标注对象:")))
    (command ".dimlinear" "")
    (setvar "cmdecho" 1)
    (command (cadr ent))
    (while (> (getvar "cmdactive") 0)
      (command pause)
    )
    (setvar "cmdecho" 0)
)
(princ)
)

xiaolong1487 发表于 2014-9-21 11:13:30

本帖最后由 xiaolong1487 于 2014-9-21 11:26 编辑

这个是在群里请教时,llsheng_73 兄弟教我的,我运用的还不是很好!例3. 连续坐标标注(defun c:tt3()
(while t
    (command "_dimordinate"(setq pt(getpoint))(getpoint pt))
    (command "_dimordinate"pt(getpoint pt)))
)

xiaolong1487 发表于 2014-9-21 11:16:12

方法应该有很多,而且更简单,可是我都不知道,欢迎各位大大指教!

spp_wall 发表于 2014-9-21 11:38:33

还不错!!!!由帮助

琴剑江山_10184 发表于 2014-9-21 16:34:01

又来学会一招

zkq1212 发表于 2014-9-24 08:17:12

我也发一个,论坛上谁写的我不记得了,很早以前下的
(defun c:mdimlinear ();;线性标注
(setq      ent (entlast)
      key t
)
(if ent
    (setq jb (cdr (assoc 5 (entget ent))))
)
(while key
    (command "dimlinear" pause pause pause)
    (command "chprop" (entlast) "" "c" "BYLAYER" "lt" "BYLAYER" "la" "03-标注层" "")
   (if      (setq ent1 (entlast))
   (progn
      (if (/= (cdr (assoc 5 (entget ent1))) jb)
          (progn
            (setq key t)
            (setq jb (cdr (assoc 5 (entget ent1))))
          )
          (setq key nil)
      )
   )
   (setq key nil)
    )
)
(princ)
)

xiaolong1487 发表于 2014-9-24 09:22:45

zkq1212 发表于 2014-9-24 08:17 static/image/common/back.gif
我也发一个,论坛上谁写的我不记得了,很早以前下的
(defun c:mdimlinear ();;线性标注
(setq      en ...

很好,谢谢!

feng582304 发表于 2014-10-8 00:37:42

其实这种效果cad自带的就有了,根本不用去编个lisp实现。
圆:指定一次半径之后,再次画圆就会有一个默认半径,直接确定就行。
标注:命令-->>确定-->>点你要标注的线

xiaolong1487 发表于 2014-10-11 19:43:54

好吧,可能是我多此一举了!
页: [1] 2
查看完整版本: 命令循环执行大集合!