求助:关于另类的循环(标公差与标注的循环)
这是我用的标注程序,我稍微改了一下标公差的程序,本想让标完公差后自动循标尺寸,结果不会搞了。望大师帮整合一下,可以实现以下功能:1:第一类是标尺寸的程序,可能是标线性标注或对齐标注或其它lsp标注程序,是非固定的某一程序
2:第二类是标公差的程序,有不同参数,但有公用程序
问:能否在运行完公用程序后自动循环第一类的程序(标尺寸的程序)?
例1:现在是运行标尺寸A程序,之后,自动运行标公差,公差标完后,再自动运行标尺寸A程序...............
例2:现在是运行标尺寸B程序,之后,自动运行标公差,公差标完后,再自动运行标尺寸B程序...............
......................
不知道这样是否表达清楚了
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;标注类
(defun c:w1();线性
(defun bz()
(command"dimlinear"pause))
(bzz))
(defun c:w2();对齐
(defun bz()
(command"dimaligned"pause))
(bzz))
(defun c:w3();半径
(defun bz()
(command"dimradius"pause))
(bzz))
(defun c:w4();直径
(defun bz()
(command"dimdiameter"pause))
(bzz))
(defun c:w5();角度
(defun bz()
(command"dimangular"pause))
(bzz))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun bzz();标注
(setvar"autosnap"63)
(setvar"osmode"6079)
(setq la (getvar"clayer"))
(command "layer" "m" "7标注" "c" "3" "" "lw" "0.13" "" "l" "Continuous" "" "" "clayer" la)
(bz)
(while (> (getvar "CMDACTIVE") 0)(command pause))
(ssgc))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ssgc()
(setq ss (ssadd))
(setq ss (ssadd (entlast) ss))
(command "Select" ss "")
(setq ss (ssget "p" '((8 . "7标注")(0 . "DIMENSION"))))
(sssetfirst nil ss))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;公差类
(defun +-()
(setvar "cmdecho" 0)
(if (= n nil) (setq n 0))
(if (= m nil) (setq m 0))
(setq k 0)
(while (<= k 5)
(setq a (fix (* (EXPT 10 (- 5 K)) n)))
(setq b (* 10 (fix (* (expt 10 (- 4 k)) n))))
(setq k1 (- 5 k))
(IF (= a b) (SETQ K (+ K 1)) (setq K 6)))
(setq k 0)
(while (<= k 5)
(setq a (fix (* (EXPT 10 (- 5 K)) M)))
(setq b (* 10 (fix (* (expt 10 (- 4 K )) M))))
(SETQ K2 (- 5 k))
(IF (= a b) (SETQ K (+ K 1)) (setq K 6)))
(setQ d2 (max K1 K2))
(if (= n m) (setq c 1) (setq c 0.6))
(if (and (= n 0)(= m 0)) (COMMAND "_DIMOVERRIDE" "dimtol" "off" "")
(COMMAND "_DIMOVERRIDE" "DIMTP" N "DIMTM" M "DIMTOL" "ON" "DIMTFAC" c "DIMTDEC" D2 ""))
(PRINC ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:+-()
(prompt "\n+")(setq n (getreal""))
(prompt "\n-")(setq m (getreal""))
(+-))
(defun c:00()
(setq n 0)
(setq m 0)
(+-))
(defun c:+15()
(setq n 0.015)
(setq m 0)
(+-))
(defun c:-15()
(setq n 0)
(setq m 0.015)
(+-))
(defun c:+2()
(setq n 0.02)
(setq m 0)
(+-))
(defun c:-2()
(setq n 0)
(setq m 0.02)
(+-))
(defun c:+4()
(setq n 0.04)
(setq m 0)
(+-))
(defun c:-4()
(setq n 0)
(setq m 0.04)
(+-))
(defun c:+10()
(setq n 0.1)
(setq m 0)
(+-))
(defun c:-10()
(setq n 0)
(setq m 0.1)
(+-))
(defun c:++1()
(setq n 0.1)
(setq m 0.1)
(+-))
(defun c:+20()
(setq n 0.2)
(setq m 0)
(+-))
(defun c:-20()
(setq n 0)
(setq m 0.2)
(+-))
(defun c:++20()
(setq n 0.2)
(setq m 0.2)
(+-))
(defun c:+50()
(setq n 0.5)
(setq m 0)
(+-))
(defun c:-50()
(setq n 0)
(setq m 0.5)
(+-))
(defun c:++5()
(setq n 0.5)
(setq m 0.5)
(+-))
(defun c:+11()
(setq n 1)
(setq m 0)
(+-))
(defun c:-11()
(setq n 0)
(setq m 1)
(+-))
(defun c:++11()
(setq n 1)
(setq m 1)
(+-))
真可怜,连个回复都没有 本帖最后由 ZZXXQQ 于 2013-7-13 12:50 编辑
(defun c:tt ()
(setq bz T bgc T)
(while (or bz bgc)
(while (progn (initget "w1 w2 w3 w4 w5 ")
(setq bz (getkword "\n输入标尺寸项: ")))
(eval (read (strcat "(c:" bz ")")))
)
(while (progn (initget "+- +15 00 -15 +2 -2 +4 -4 +10 -10 ++1 +20 -20 ++20 +50 -50 ++5 +11 -11 ++11 ")
(setq bgc (getkword "\n输入公差: ")))
(eval (read (strcat "(c:" bgc ")")))
)
)
(princ)
)
ZZXXQQ 发表于 2013-7-11 23:43 static/image/common/back.gif
首先非常感谢Z版的关注。就使用情况反馈以下:
如果加入您的程序后顺利的运行:
1:总程序开始,要先按 tt (只要没退出总程序,只按一次 tt),再按尺寸项,这可以算是一步,
如果程序 完全退出,则要两步,
2:按公差项
3:按尺寸项
这 1、2、3 步必不可少(或加一步 tt)
未加如之前:
1:按尺寸项
2:按公差项
3:按尺寸项
也是 3 步,所以.......................
其次,我会在 cui 里设 shift+z,shift+x,shift+c,shift+r,shift+v分别与 w1、w2、w3、w4、w5 对应,
省去按空格键,更快捷。
想:(defun +-() 是最后运行的,是否能在这里想办法,让它自动识别或记住第 1 步里运行的命令(cad命令行里有记录,但有时会多一个“自动保存到 ......”)
不知是否异想天开...........
Z版,加您的程序后,会卡在标公差里:
命令: tt
输入标尺寸项: 1w
输入标尺寸项: +2
无效的选项关键字。
输入标尺寸项: +4
无效的选项关键字。
输入标尺寸项: *取消*
; 错误: 函数被取消
命令: *取消*
程序改了,没死循环了。 本帖最后由 669423907 于 2013-7-13 11:37 编辑
ZZXXQQ 发表于 2013-7-12 19:58 static/image/common/back.gif
程序改了,没死循环了。
Z版,程序还是卡在那了。
我改了一下,可以自动循环任何标注命令了,但有了新的问题:
1:在 “(defun +-()
(ssgc)
........ ”
中,(ssgc) 无效了,必须重新选,且须右键确定
2:命令行一大堆未知命令提示(这个也无大碍)
不知 Z版是否方便帮解决一下第 1 项的问题呢?实在是太感谢您了!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;标注类
;φ,M,R 智能标注(ZZXXQQ)2011.5.28
(defun c:cmr()
(setq la (getvar"clayer"))
(command "layer" "m" "7标注" "c" "3" "" "lw" "0.13" "" "l" "Continuous" "" "")
(while (and (setq s1 (entsel "\n选择圆或圆弧 :"))
(setq ent (entget (car s1)))
(wcmatch (setq tn (cdr(assoc 0 ent))) "ARC,CIRCLE"))
(setq pt1 (cadr s1))
(setq qztxt (if (setq qz (getint "\n个数 :")) (strcat (itoa qz) "-") ""))
(if (= tn "ARC") (progn
(setq r (cdr(assoc 40 ent)))
(command ".LENGTHEN" (car s1) "")
(if (>= (/ (getvar "PERIMETER") r) (* 1.49 pi)) (progn
(setq qztxt (strcat qztxt "M" (rtos (+ r r) 2)))
(command "DIMDIAMETER" pt1 "T" qztxt PAUSE))
(command "DIMRADIUS" pt1 "T" (strcat qztxt "<>") PAUSE)))
(command "DIMDIAMETER" pt1 "T" (strcat qztxt "<>") PAUSE)))
(setvar "clayer"la)
(defun bzzz()
(c:cmr)))
(defun c:bxx();线性
(defun bzzz()
(command"dimlinear")(bzz))
(defun bz()
(command"dimlinear"))
(bzz))
(defun c:bdq();对齐
(defun bzzz()
(command"dimaligned")(bzz))
(defun bz()
(command"dimaligned"))
(bzz))
(defun c:bbj();半径
(defun bzzz()
(command"dimradius")(bzz))
(defun bz()
(command"dimradius"))
(bzz))
(defun c:bzj();直径
(defun bzzz()
(command"dimdiameter")(bzz))
(defun bz()
(command"dimdiameter"))
(bzz))
(defun c:bjd();角度
(defun bzzz()
(command"dimangular")(bzz))
(defun bz()
(command"dimangular"))
(bzz))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun bzz();标注
(setvar"autosnap"63)
(setvar"osmode"6079)
(setq la (getvar"clayer"))
(command "layer" "m" "7标注" "c" "3" "" "lw" "0.13" "" "l" "Continuous" "" "" "clayer" la)
(bz)
(while (> (getvar "CMDACTIVE") 0)(command pause))
(command "change" (entlast) "" "P" "la" "7标注" ""))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ssgc()
(setq ss (ssadd))
(setq ss (ssadd (entlast) ss))
(command "Select" ss "")
(setq ss (ssget "p" '((8 . "7标注")(0 . "DIMENSION"))))
(sssetfirst nil ss))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;公差类
(defun +-()
(ssgc)
(setvar "cmdecho" 0)
(if (= n nil) (setq n 0))
(if (= m nil) (setq m 0))
(setq k 0)
(while (<= k 5)
(setq a (fix (* (EXPT 10 (- 5 K)) n)))
(setq b (* 10 (fix (* (expt 10 (- 4 k)) n))))
(setq k1 (- 5 k))
(IF (= a b) (SETQ K (+ K 1)) (setq K 6)))
(setq k 0)
(while (<= k 5)
(setq a (fix (* (EXPT 10 (- 5 K)) M)))
(setq b (* 10 (fix (* (expt 10 (- 4 K )) M))))
(SETQ K2 (- 5 k))
(IF (= a b) (SETQ K (+ K 1)) (setq K 6)))
(setQ d2 (max K1 K2))
(if (= n m) (setq c 1) (setq c 0.6))
(if (and (= n 0)(= m 0)) (COMMAND "_DIMOVERRIDE" "dimtol" "off" "")
(COMMAND "_DIMOVERRIDE" "DIMTP" N "DIMTM" M "DIMTOL" "ON" "DIMTFAC" c "DIMTDEC" D2 ""))
(while (> (getvar "CMDACTIVE") 0)(command pause))
(bzzz)
(PRINC))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:+-()
(prompt "\n+")(setq n (getreal""))
(prompt "\n-")(setq m (getreal""))
(+-))
(defun c:00()
(setq n 0)
(setq m 0)
(+-))
(defun c:+15()
(setq n 0.015)
(setq m 0)
(+-))
(defun c:-15()
(setq n 0)
(setq m 0.015)
(+-))
(defun c:+2()
(setq n 0.02)
(setq m 0)
(+-))
(defun c:-2()
(setq n 0)
(setq m 0.02)
(+-))
(defun c:+4()
(setq n 0.04)
(setq m 0)
(+-))
(defun c:-4()
(setq n 0)
(setq m 0.04)
(+-))
(defun c:+10()
(setq n 0.1)
(setq m 0)
(+-))
(defun c:-10()
(setq n 0)
(setq m 0.1)
(+-))
(defun c:++1()
(setq n 0.1)
(setq m 0.1)
(+-))
(defun c:+20()
(setq n 0.2)
(setq m 0)
(+-))
(defun c:-20()
(setq n 0)
(setq m 0.2)
(+-))
(defun c:++20()
(setq n 0.2)
(setq m 0.2)
(+-))
(defun c:+50()
(setq n 0.5)
(setq m 0)
(+-))
(defun c:-50()
(setq n 0)
(setq m 0.5)
(+-))
(defun c:++5()
(setq n 0.5)
(setq m 0.5)
(+-))
(defun c:+11()
(setq n 1)
(setq m 0)
(+-))
(defun c:-11()
(setq n 0)
(setq m 1)
(+-))
(defun c:++11()
(setq n 1)
(setq m 1)
(+-)) 修正了一个错误。再试试 ZZXXQQ 发表于 2013-7-13 12:51 static/image/common/back.gif
修正了一个错误。再试试
Z版,还是老问题吖,也许智能从(defun +-()入手了 我想是不是把标公差的程序改为自动选择最后生成的标注就有个可以了,但不懂怎么改 唉,看来是没法子了...
页:
[1]