hao3ren
发表于 2012-10-31 10:24:09
(defun c:qm 一般C:后面的就是执行命令,另外我觉得没什么必要啊,cad自身的格式刷可以输入S进行设置
自贡黄明儒
发表于 2012-12-19 08:40:24
本帖最后由 自贡黄明儒 于 2012-12-19 11:51 编辑
;;发现本论坛一个格式刷,看看是不是你需要的
;;本程序是类似于R14应用程序中经常用的格式刷的功能
(defun c:ddbrush (/ #SPIN AA BJ BLK C CC DCLID EE
F FN FNAME ID JT JZXZLEN LENGLIN
MC MONAME MOTHER MX MXX MY MYY
N NAMENN1 NN2 NN3 NN4 OK PT3 QX
RATE SCJDSF SS SSS STANDARD STR TC
TNAME TT1 TT2 TT3 TT4 TTT1TTT2TTT3TTT4
TX TXX TY TYY WZLX WZNRXX XXBLYC
YESNO ZG ZTJDZXBL
)
(defun spin (wh)
(prompt (strcat "\r"
wh
(cond ((= #spin "|") (setq #spin "/"))
((= #spin "/") (setq #spin "-"))
((= #spin "-") (setq #spin "\\"))
(T (setq #spin "|"))
)
)
)
(princ)
)
(defun modim (/ exmo exmo3 exch)
(setq exmo (entget (car sss) '("ACAD")))
(setq exmo3 (assoc -3 exmo))
(setq exch (entget ee '("ACAD")))
(princ "\nsecond\n\n")
(princ exch)
(princ "\n\n first\n")
(princ exmo3)
(if (not (or (NULL (assoc -3 exch)) (NULL exmo3)))
(setq exch (subst exmo3 (assoc -3 exch) exch))
)
(if (NULL (assoc -3 exch))
(setq exch (append exch (list exmo3)))
)
(if (NULL exmo3)
(setq exch (subst standard (assoc -3 exch) exch))
)
(princ "\n\nstart newsecond\n")
(princ exch)
(princ "\n\nend\n")
(entmod exch)
)
(defun myreplace (attrib / variey1 variey2 variety xxxx yyyy)
(if (NULL variey1)
(setq variey1 (assoc attrib aa))
)
(setq variey2 (cdr (assoc attrib mother)))
(if (NULL variey2)
(setq variey2 (assoc attrib mother))
)
(if (and (not (null variey1)) (not (null variey2)))
(progn (setq aa
(subst (cons attrib variey2) (assoc attrib aa) aa)
)
(entmod aa)
)
)
(if (and (null variey1) (not (null variey2)))
(setq aa (append aa (list (assoc attrib mother))))
)
;;以下,母没有子有,即母属性随层,但子属性不随层,分三种情况。。。。。(不知何故cond总是有问题,故用三个if的拙法完
(if (= scjd 1)
(setq xxxx mxx
yyyy myy
)
(setq xxxx "BYLAYER"
yyyy 256
)
) ;用于色层绝对
(if (and (not (null variey1)) (null variey2) (= attrib 6))
(setq aa (subst (cons attrib xxxx) (assoc attrib aa) aa))
) ;线型
(if (and (not (null variey1)) (null variey2) (= attrib 62))
(setq aa (subst (cons attrib yyyy) (assoc attrib aa) aa))
) ;颜色,注:随层为256;随块为0
;;以下是母子都没有的情况
(if (and (null variey1) (null variey2) (= attrib 6))
(setq aa (append aa (list (cons attrib xxxx))))
)
(if (and (null variey1) (null variey2) (= attrib 62))
(setq aa (append aa (list (cons attrib yyyy))))
)
(if (and (not (null variey1)) (null variey2) (= attrib 48))
(progn (setq aa (subst (cons attrib 1) (assoc attrib aa) aa))
(princ "ok")
(princ aa)
)
) ;线型比例
(entmod aa)
)
(defun mysol (/ ll pt0 pt1) ;该函数用于修改箭头的大小
(setq ll (distance (cdr (assoc 10 mother)) (cdr (assoc 13 mother))))
(setq pt0 (cdr (assoc 10 aa))
pt1 (cdr (assoc 11 aa))
pt3 (cdr (assoc 13 aa))
)
(setq rate (/ ll (distance pt0 pt3)))
(setq pt0 (snpt pt3 pt0 rate)
pt1 (snpt pt3 pt1 rate)
)
(setq aa
(subst (cons 10 pt0) (assoc 10 aa) aa)
)
(setq aa
(subst (cons 11 pt1) (assoc 11 aa) aa)
)
(entmod aa)
)
(defun snpt (p1 p2 rate / sx1 sx2 sx3 sy1 sy2 sy3)
(setq sx1 (car p1)
sy1 (cadr p1)
sx2 (car p2)
sy2 (cadr p2)
)
(setq sx3 (+ (* rate (- sx2 sx1)) sx1))
(setq sy3 (+ (* rate (- sy2 sy1)) sy1))
(list sx3 sy3 0.0)
)
(defun do_set ()
(setq sf (atoi (get_tile "sf")))
(setq jzxz (atoi (get_tile "jzxz")))
(if (= sf 1)
(setq n 1)
(setq n 0)
)
(setq xx (+ (atoi (get_tile "xx")) n))
(setq xxbl (+ (atoi (get_tile "xxbl")) n))
(setq yc (+ (atoi (get_tile "yc")) n))
(setq wzlx (+ (atoi (get_tile "wzlx")) n))
(setq zg (+ (atoi (get_tile "zg")) n))
(setq zxbl (+ (atoi (get_tile "zxbl")) n))
(setq wznr (+ (atoi (get_tile "wznr")) n))
(setq cc (+ (atoi (get_tile "cc")) n))
(setq c (+ (atoi (get_tile "c")) n))
(setq jt (+ (atoi (get_tile "jt")) n))
(setq ztjd (+ (atoi (get_tile "ztjd")) n))
(setq bj (+ (atoi (get_tile "bj")) n))
(setq scjd (+ (atoi (get_tile "scjd")) n))
(setq tt1 (atoi (get_tile "tt1")))
(setq tt2 (atoi (get_tile "tt2")))
(setq tt3 (atoi (get_tile "tt3")))
(setq tt4 (atoi (get_tile "tt4")))
(setq qx (atoi (get_tile "qx")))
(setq ok 1)
)
(defun init ()
(set_tile "jzxz" (itoa jzxz))
(if (= sf 1)
(setq n 1)
(setq n 0)
)
(set_tile "sf" (itoa sf))
(set_tile "xx" (itoa (- xx n)))
(set_tile "xxbl" (itoa (- xxbl n)))
(set_tile "yc" (itoa (- yc n)))
(set_tile "wzlx" (itoa (- wzlx n)))
(set_tile "zg" (itoa (- zg n)))
(set_tile "zxbl" (itoa (- zxbl n)))
(set_tile "wznr" (itoa (- wznr n)))
(set_tile "cc" (itoa (- cc n)))
(set_tile "c" (itoa (- c n)))
(set_tile "jt" (itoa (- jt n)))
(set_tile "ztjd" (itoa (- ztjd n)))
(set_tile "bj" (itoa (- bj n)))
(set_tile "scjd" (itoa (- scjd n)))
(set_tile "qx" (itoa qx))
)
(defun initl ()
(setq nn1 '()
nn2 '()
nn3 '()
nn4 '("LINE" "PLINE" "CIRCLE" "ARC"
"TEXT" "MTEXT" "ATTDEF" "DIMENSION"
"INSERT" "SOLID"
)
n 0
)
(start_list "tt1" 3)
(add_list "过滤层(不过滤)")
(setq blk (tblnext "LAYER" 1))
(while (not (NULL blk))
(setq n (1+ n))
(setq tname (cdr (nth 1 blk)))
(setq nn1
(append nn1
(list (list tname (cdr (nth 3 blk)) (cdr (nth 4 blk))))
)
)
(add_list tname)
(setq blk (tblnext "LAYER" NIL))
)
(end_list)
(start_list "tt2" 3)
(add_list "过滤线型(不过滤)")
(setq blk (tblnext "LTYPE" 1))
(while (not (NULL blk))
(setq tname (cdr (nth 1 blk)))
(setq nn2 (append nn2 (list tname)))
(add_list tname)
(setq blk (tblnext "LTYPE" NIL))
)
(end_list)
(start_list "tt3" 3)
(add_list "过滤颜色(不过滤)")
(setq n 0)
(repeat 255
(setq n (1+ n))
(add_list (itoa n))
)
(end_list)
(start_list "tt4" 3)
(add_list "过滤实体(不过滤)")
(setq n 0)
(setq len (length nn4))
(repeat len
(add_list (nth n nn4))
(setq n (1+ n))
)
(end_list)
)
(defun ok_do ()
(print "请选择要修改的实体")
(if (= qx 1)
(setq ss (ssget "x"))
(setq ss (ssget))
)
(setq leng (sslength ss)
n 0
str""
)
(repeat leng
(spin "请您耐心等待,程序正在处理......")
(setq ee (ssname ss n))
(setq aa (entget ee))
(setq name (cdr (assoc 0 aa)))
(setq yesno f)
(if (and (= tt1 0) (= tt2 0) (= tt3 0) (= tt4 0))
(setq yesno t)
(progn
(setq tc (assoc 8 aa)
tx (assoc 6 aa)
ty (assoc 62 aa)
)
(setq tyy (cadr (assoc (cdr tc) nn1))
txx (caddr (assoc (cdr tc) nn1))
)
(setq ttt1 f)
(if (= tt1 0)
(setq ttt1 t)
)
(if (and (not (= tt1 0))
(= (car (nth (1- tt1) nn1)) (cdr tc))
)
(setq ttt1 t)
)
;;处理层
(setq ttt2 f)
(if (= tt2 0)
(setq ttt2 t) ;处理线型
(if (NULL tx)
(if (= (nth (1- tt2) nn2) txx)
(setq ttt2 t)
)
(if (= (nth (1- tt2) nn2) (cdr tx))
(setq ttt2 t)
)
)
)
(setq ttt3 f) ;处理颜色
(if (= tt3 0)
(setq ttt3 t)
(if (NULL ty)
(if (= tt3 tyy)
(setq ttt3 t)
)
(if (= tt3 (cdr ty))
(setq ttt3 t)
)
)
)
(setq ttt4 f) ;处理实体
(if (= tt4 0)
(setq ttt4 t)
(if (= (nth (1- tt4) nn4) name)
(setq ttt4 t)
)
)
(setq yesno (and ttt1 ttt2 ttt3 ttt4))
)
)
(if (= yesno t)
(progn
(if (and (or (= moname "DIMEMSION")
(= moname "CIRCLE")
(= moname "ARC")
(= moname "INSERT")
(= moname "LINE")
(= moname "PLINE")
(= moname "LEADER")
)
(or (= name "DIMEMSION")
(= name "INSERT")
(= name "LINE")
(= name "CIRCLE")
(= name "ARC")
(= name "PLINE")
(= name "LEADER")
)
)
(progn
(if (= xx 1)
(myreplace 6)
)
(if (= xxbl 1)
(myreplace 48)
)
)
)
(if
(and
(or (= name "TEXT")
(= name "MTEXT")
(= name "ATTDEF")
)
(or (= moname "TEXT")
(= moname "MTEXT")
(= moname "ATTDEF")
)
)
(progn
(if (= wzlx 1)
(myreplace 7)
) ;自设系统变量,如果sss不为空,一切字体类型都要更换
(if (= zxbl 1)
(if (or (= moname "MTEXT") (= name "MTEXT"))
()
(myreplace 41)
)
) ;字宽比
(if (= zg 1)
(myreplace 40)
) ;字高
(if (= ztjd 1)
(myreplace 50)
) ;逆时针弧度值
(if (= ztjd 1)
(myreplace 51)
) ;斜体斜角弧度值
)
)
(if
(and (or (= name "TEXT")
(= name "MTEXT")
(= name "DIMENSION")
)
(or (= moname "TEXT")
(= moname "MTEXT")
(= moname "DIMENSION")
)
)
(if (= wznr 1)
(myreplace 1)
) ;文字内容
)
;;以下两项为专属修改
(if (and (= moname "DIMENSION") (= "DIMENSION" name))
(if (= cc 1)
(progn
(modim)
(myreplace 3) ;改变尺寸的标注风格
) ;改变尺寸
)
)
(if (and (= moname "SOLID") (= name "SOLID") (= jt 1))
(mysol)
) ;改变箭头的大小
(if (and (or (= moname "CIRCLE") (= moname "ARC"))
(or (= name "CIRCLE") (= name "ARC"))
(= bj 1)
)
(myreplace 40)
) ;半径
;;以下两项为基本属性修改
(if (= c 1)
(myreplace 8)
) ;层
(if (= yc 1)
(myreplace 62)
) ;颜色
)
)
(setq n (1+ n))
)
)
;;本程序主程序
(if (setq sss (entsel "\n 拾取刷子原形:"))
(progn
(command "UNDO" "Begin")
(setq mother (entget (car sss)))
(setq moname (cdr (assoc 0 mother)))
(setq standard
(list -3
'("ACAD" (1000 . "DSTYLE") (1002 . "{") (1002 . "}"))
)
)
(setq fname (vl-filename-mktemp nil nil ".dcl"))
(setq fn (open fname "w"))
(write-line
"brush : dialog { label = \"分类格式刷 欢迎使用!HUIHL\"; : boxed_column { label = \"要刷取的项目\"; : row { : column { : toggle { label = \"线型\"; key = \"xx\"; mnemonic = \"E\"; fixed_width = true; } : toggle { label = \"线型比例\"; key = \"xxbl\"; mnemonic = \"M\"; fixed_width = true; }"
fn
)
(write-line " : toggle {" fn)
(write-line " label = \"颜色\";" fn)
(write-line " key =\"yc\";" fn)
(write-line " width=16;" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line " : toggle {" fn)
(write-line " label = \"文字类型\";" fn)
(write-line " key = \"wzlx\";" fn)
(write-line " mnemonic = \"N\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line " : toggle {" fn)
(write-line " label = \"字高\";" fn)
(write-line " key = \"zg\";" fn)
(write-line " mnemonic = \"Q\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line " : toggle {" fn)
(write-line " label = \"字形比例\";" fn)
(write-line " key = \"zxbl\";" fn)
(write-line " mnemonic = \"I\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line " : toggle {" fn)
(write-line " label = \"文字内容\";" fn)
(write-line " key = \"wznr\";" fn)
(write-line " mnemonic = \"I\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line "" fn)
(write-line " }" fn)
(write-line " : column {" fn)
(write-line " : toggle {" fn)
(write-line " label = \"尺寸\";" fn)
(write-line " key = \"cc\";" fn)
(write-line " mnemonic = \"s\";" fn)
(write-line " width=15;" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line " : toggle {" fn)
(write-line " label = \"层\";" fn)
(write-line " key = \"c\";" fn)
(write-line " mnemonic = \"d\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line " : toggle {" fn)
(write-line " label = \"箭头(散)\";" fn)
(write-line " key = \"jt\";" fn)
(write-line " mnemonic = \"T\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line " : toggle {" fn)
(write-line " label = \"字体角度\";" fn)
(write-line " key = \"ztjd\";" fn)
(write-line " mnemonic = \"a\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line " " fn)
(write-line "" fn)
(write-line "" fn)
(write-line "" fn)
(write-line " : toggle {" fn)
(write-line " label = \"圆、弧半径\";" fn)
(write-line " key = \"bj\";" fn)
(write-line " mnemonic = \"p\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line " : toggle {" fn)
(write-line
" label = \"色、层绝对\";"
fn
)
(write-line " key = \"scjd\";" fn)
(write-line " mnemonic = \"u\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line "" fn)
(write-line " " fn)
(write-line "" fn)
(write-line "" fn)
(write-line "" fn)
(write-line "" fn)
(write-line " } //column" fn)
(write-line "" fn)
(write-line "" fn)
(write-line "" fn)
(write-line " } //row " fn)
(write-line "" fn)
(write-line ":text{" fn)
(write-line "value=\"Email//:huihl@netease.com\";" fn)
(write-line "is_bold=false;" fn)
(write-line "height=1;} " fn)
(write-line "" fn)
(write-line ":row{ : toggle {" fn)
(write-line " label = \"反向选中\";" fn)
(write-line " key = sf;" fn)
(write-line " mnemonic = \"u\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " }" fn)
(write-line "" fn)
(write-line " : toggle {" fn)
(write-line " label = \"记住选择\";" fn)
(write-line " key = jzxz;" fn)
(write-line " mnemonic = \"u\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " } " fn)
(write-line "}" fn)
(write-line "" fn)
(write-line " } //box" fn)
(write-line "" fn)
(write-line "" fn)
(write-line ":row{" fn)
(write-line "" fn)
(write-line ":text{" fn)
(write-line
"value=\"下列是对象选择过滤器(与型,色层绝对)\";"
fn
)
(write-line "is_bold=false;" fn)
(write-line "height=1;} " fn)
(write-line " : toggle {" fn)
(write-line " label = \"全选/框选\";" fn)
(write-line " key = qx;" fn)
(write-line " mnemonic = \"u\";" fn)
(write-line " fixed_width = true;" fn)
(write-line " } " fn)
(write-line "" fn)
(write-line "" fn)
(write-line "}//endrow" fn)
(write-line "" fn)
(write-line "" fn)
(write-line ":boxed_row{" fn)
(write-line ":column{" fn)
(write-line ":popup_list{" fn)
(write-line " key=\"tt1\";" fn)
(write-line " width=10;" fn)
(write-line " list=\"\";" fn)
(write-line " }" fn)
(write-line "" fn)
(write-line ":popup_list{" fn)
(write-line " key=\"tt2\";" fn)
(write-line " width=10;" fn)
(write-line " list=\"\";" fn)
(write-line " }" fn)
(write-line "}" fn)
(write-line "" fn)
(write-line "" fn)
(write-line ":column{" fn)
(write-line ":popup_list{" fn)
(write-line " key=\"tt3\";" fn)
(write-line " width=10;" fn)
(write-line " list=\"\";" fn)
(write-line " }" fn)
(write-line "" fn)
(write-line ":popup_list{" fn)
(write-line " key=\"tt4\";" fn)
(write-line " width=10;" fn)
(write-line " list=\"\";" fn)
(write-line " }" fn)
(write-line "}" fn)
(write-line "}//endrow" fn)
(write-line "ok_cancel;" fn)
(write-line "} //dialog" fn)
(close fn)
(setq fn (open fname "r"))
(setq dclid (load_dialog fname))
(while
(or (eq (substr (setq lin
(vl-string-right-trim
"\" fn)"
(vl-string-left-trim "(write-line \"" (read-line fn))
)
)
1
2
)
"//"
)
(eq (substr lin 1 (vl-string-search " " lin)) "")
(not (eq (substr lin (+ (vl-string-search " " lin) 1) 9)
" : dialog"
)
)
)
)
(new_dialog (substr lin 1 (vl-string-search " " lin)) dclid)
(if (= jzxz 1)
(init)
)
(initl)
(setq mc (assoc 8 mother)
mx (assoc 6 mother)
my (assoc 62 mother)
)
(setq myy (cadr (assoc (cdr mc) nn1))
mxx (caddr (assoc (cdr mc) nn1))
)
(action_tile "accept" "(do_set)(done_dialog 1)")
(setq return# (start_dialog))
(unload_dialog dclid)
(close fn)
(vl-file-delete fname)
(if (= return# 1)
(ok_do)
)
(command "UNDO" "End")
)
)
(princ)
)
chleiwu
发表于 2012-12-19 09:27:38
wudechao 发表于 2012-10-21 18:31 static/image/common/back.gif
(defun ef:undobegin ()
(setvar "CMDECHO" 0)
(command "_.undo" "_group")
字高、颜色修改都有效
但是比例因子改不过来