求一個將圖塊變色程序
请问大大,可以编个程序将要变色的图块像<1>: "这样调用吗?该怎么写呢?而当选择改顏色时会调用顏色功能表,选择改层时则调用图层管理员功能表呢? <b><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: SimSun; mso-bidi-font-family: SimSun; mso-fareast-language: ZH-CN"><SPAN style="mso-list: Ignore">1.<SPAN style="FONT: 7pt 'Times New Roman'"> </SPAN></SPAN>变色的图块-----到底是改甚么物件的顏色??? / 改甚么物件的层???<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><SPAN style="mso-list: Ignore">2.<SPAN style="FONT: 7pt 'Times New Roman'"> </SPAN></SPAN>图层管理员功能表能改物件图层吗?????<o:p></o:p>
</b></SPAN> 小弟的意思是要将图块变色!以下这个是我在网上下载的程序,它可以选择要改层或改色!但却必须使用接口,大大能帮我解决不用接口也可使用吗?另外当它选择改色时会跳出选择顏色的功能表,但选择改层时却得自已输入 ,可以在选择改层时也跳出功能表吗?(假设图层管理员里已有需要的图层了)
;;命令:dwgblack <BR>;;将图中所有实体(包括块,嵌套块,尺寸中的无名块)变色 <BR>(defun #chg_color (e cnum0 cnum / tf e blkna)<BR> (xdrx_setenttodb e) <BR> (setq tf (xdrx_getentdxf 0))<BR> (cond<BR> ((or<BR> (= tf "INSERT")<BR> (= tf "DIMENSION")<BR> )<BR> (setq blkna (xdrx_getentdxf 2))<BR> (setq blkna (tblsearch "block" blkna))<BR> (setq e (cdr (assoc -2 blkna)))<BR> (while e<BR> (xdrx_setenttodb e)<BR> (setq tf (xdrx_getentdxf 0))<BR> (if (or<BR> (= tf "INSERT")<BR> (= tf "DIMENSION")<BR> )<BR> (progn<BR> (#chg_color e cnum0 cnum)<BR> )<BR> (progn<BR> (xdrx_setenttodb e)<BR> (xdrx_modent cnum0 cnum)<BR> )<BR> )<BR> (setq e (entnext e))<BR> )<BR> )<BR> (t<BR> (xdrx_modent cnum0 cnum)<BR> )<BR> )<BR>)<BR>;;地形图处理步骤二<BR>(defun c:dwgblack (/ ss key num num0 n e) <BR> (xdrx_begin)<BR> (prompt "\n请选取要变色的实体<全选>:")<BR> (if (not (setq ss (ssget)))<BR> (setq ss (ssget "x"))<BR> )<BR> (initget "1 2")<BR> (setq key (getstring "\n<1>: "))<BR> (if (or (= key "1")<BR> (= key "")<BR> )<BR> (progn<BR> (setq num (acad_colordlg 7))<BR> (setq num0 62)<BR> )<BR> (progn<BR> (setq num (getstring "\n图层名称: "))<BR> (setq num0 8)<BR> )<BR> )<BR> (setq n 0)<BR> (xdrx_setsstodb ss 0)<BR> (xdrx_pbarbegin "已经完成:" (sslength ss))<BR> (while (setq e (xdrx_getentdata 0))<BR> (xdrx_pbarsetpos n)<BR> (setq n (1+ n))<BR> (#chg_color e num0 num)<BR> (entupd e)<BR> )<BR> (xdrx_pbarend)<BR> (setvar "osmode" 4261)<BR> (xdrx_end) <BR> (princ)<BR>) 你要改图块内物件or 改图块本身??? 基本上 这个程序几乎对任何物件都能修改耶,至少小弟目前试用是如此! ;;不知你会多少编程???<BR>;;dwgblack程序还不能改属性&几何公差&引线的顏色(看谁有空补上)<BR>;;By 龙龙仔(LUCAS)<BR>;;命令:dwgblack <BR>;;将图中所有实体(包括块,嵌套块,尺寸中的无名块)变色 <BR>(defun #CHG_COLOR (E CNUM0 CNUM / TF E1 BLKNA)<BR> (setq TF (DXF 0 E))<BR> (cond<BR> ((or (= TF "INSERT")<BR> (= TF "DIMENSION")<BR> )<BR> (MODENT E CNUM0 CNUM)<BR> (setq BLKNA (DXF 2 E))<BR> (setq BLKNA (tblsearch "block" BLKNA))<BR> (setq E (cdr (assoc -2 BLKNA)))<BR> (while E<BR> (setq TF (DXF 0 E))<BR> (if (or (= TF "INSERT")<BR> (= TF "DIMENSION")<BR> )<BR> (#CHG_COLOR E CNUM0 CNUM)<BR> (MODENT E CNUM0 CNUM)<BR> )<BR> (setq E (entnext E))<BR> )<BR> )<BR> (t (MODENT E CNUM0 CNUM))<BR> )<BR>)
(defun TABLE (S / D R)<BR> (while (setq D (tblnext S (null D)))<BR> (setq R (cons (cdr (assoc 2 D)) R))<BR> )<BR>)
(defun SEL_LAY (/ LAY LAY1 ID)<BR> (setq LAY (acad_strlsort (TABLE "Layer")))<BR> (setq ID (load_dialog "lay.dcl"))<BR> (new_dialog "lay" ID)<BR> (start_list "lay")<BR> (mapcar 'add_list LAY)<BR> (end_list)<BR> (action_tile<BR> "lay"<BR> "(setq lay1 (nth (atoi $value) lay))"<BR> )<BR> (start_dialog)<BR> (unload_dialog ID)<BR> LAY1<BR>)
(defun MODENT (E EE COL)<BR> (setq E (entget E))<BR> (if (= (assoc EE E) NIL)<BR> (setq E (append E (list (cons EE COL))))<BR> (setq E (subst (cons EE COL) (assoc EE E) E))<BR> )<BR> (entmod E)<BR>)
(defun DXF (CODE ENT) (cdr (assoc CODE (entget ENT))))
(defun C:DWGBLACK (/ SS KEY NUM NUM0 N E LEN)<BR> (arxload "acetutil.arx" NIL)<BR> (prompt "\n请选取要变色的实体<全选>:")<BR> (if (not (setq SS (ssget)))<BR> (setq SS (ssget "x"))<BR> )<BR> (initget "1 2")<BR> (setq KEY (getstring "\n<1>: "))<BR> (if (or (= KEY "1")<BR> (= KEY "")<BR> )<BR> (setq NUM (acad_colordlg 7) ; (acad_truecolordlg 7)<BR> NUM0 62 ;真色彩很少用,程序留给你写吧!<BR> )<BR> (setq NUM (SEL_LAY)<BR> NUM0 8<BR> )<BR> )<BR> (setq N 0)<BR> (acet-ui-progress "已经完成:" (setq LEN (sslength SS)))<BR> (setq N 0)<BR> (repeat LEN<BR> (#CHG_COLOR (setq E (ssname SS N)) NUM0 NUM)<BR> (entupd E)<BR> (acet-ui-progress -1)<BR> (setq N (1+ N))<BR> )<BR> (acet-ui-progress)<BR> (princ)<BR>)
;|<BR>;;----lay.dcl档<BR>lay : dialog {label="选取图层";<BR> : list_box {<BR> key = "lay"; <BR> height = 20;<BR> width = 40; <BR> fixed_width_font = true;<BR> fixed_width = true;<BR> }<BR> ok_cancel;<BR> }<BR>|;<BR> 为何会出现错误: no function definition: ACET-UI-PROGRESS?
不好意思!小弟一点都不会耶,因为小弟只能从网下下载一些教学文件,可遇到问题又无人解答,所以不时麻烦大大您,再从大大解答的程序中和原程序对照,以求解答,真是麻烦大大您了 要配合expresstool (大部份的人都会安装----autocad 内含的工具软体)
(arxload "acetutil.arx" NIL)
;;没有就不要用,修改如下
(setq N 0)<BR>;; (acet-ui-progress "已经完成:" (setq LEN (sslength SS)))
(setq LEN (sslength SS))<BR> (setq N 0)<BR> (repeat LEN<BR> (#CHG_COLOR (setq E (ssname SS N)) NUM0 NUM)<BR> (entupd E)<BR> ;; (acet-ui-progress -1)<BR> (setq N (1+ N))<BR> )<BR> ;;(acet-ui-progress)<BR> (princ)<BR>) 请教龙大大,小弟在网上找到了个程序,但还差了一点,就符合了小弟的需求,不知大大能不能帮帮小弟改成之前小弟所希望的程序,但这个程序得先选择顏色再选择物件,不知道能否先选择物件再选择顏色或图层
(defun C:FIXBLOCK (/ COL SS CNT IDX BLKNAME DONELIST)<BR> (defun GRP (GCC EL) (cdr (assoc GCC EL)))<BR> (defun UPDATE (BNAME COL / ENAME ELIST)<BR> (setq ENAME (tblobjname "BLOCK" BNAME))<BR> (if<BR> (and ENAME<BR> (zerop (logand 52 (GRP 70 (entget ENAME '("*")))))<BR> )<BR> (progn<BR> (while ENAME<BR> (if (or (= "INSERT" (GRP 0 (entget ENAME)))<BR> (= "DIMENSION" (GRP 0 (entget ENAME)))<BR> )<BR> (UPDATE (GRP 2 (entget ENAME)) COL)<BR> )<BR> (setq ELIST (entget ENAME '("*"))<BR> ELIST (subst '(8 . "0") (assoc 8 ELIST) ELIST)<BR> ELIST (if (assoc 62 ELIST)<BR> (subst (cons 62 COL) (assoc 62 ELIST) ELIST)<BR> (append ELIST (list (cons 62 COL)))<BR> )<BR> )<BR> (entmod ELIST)<BR> (setq ENAME (entnext ENAME))<BR> )<BR> 't<BR> )<BR> )<BR> )<BR> (if (> (logand (GRP 70 (tblsearch "layer" "0")) 1) 0)<BR> (princ "\nLayer 0 must be thawed before running FIXBLOCK!\n"<BR> )<BR> (progn<BR> (if<BR> (progn<BR> (setq COL (acad_colordlg 7))<BR> (princ "\nPress to fix all Blocks New Color\n")<BR> (setq CNT 0<BR> SS (ssget '((0 . "INSERT,DIMENSION")))<BR> )<BR> )<BR> (progn<BR> (setq IDX (sslength SS))<BR> (while (>= (setq IDX (1- IDX)) 0)<BR> (if<BR> (not<BR> (member (setq BLKNAME (GRP 2 (entget (ssname SS IDX))))<BR> DONELIST<BR> )<BR> )<BR> (progn<BR> (if (UPDATE BLKNAME COL)<BR> (setq CNT (1+ CNT))<BR> )<BR> (setq DONELIST (cons BLKNAME DONELIST))<BR> )<BR> )<BR> )<BR> )<BR> (while (setq BLKNAME (GRP 2 (tblnext "BLOCK" (not BLKNAME))))<BR> (if (UPDATE BLKNAME COL)<BR> (setq CNT (1+ CNT))<BR> )<BR> )<BR> )<BR> (princ (strcat "\n"<BR> (itoa CNT)<BR> " block"<BR> (if (= CNT 1)<BR> ""<BR> "s"<BR> )<BR> " redefined New Color\n"<BR> )<BR> )<BR> )<BR> )<BR> (command "_.REGEN")<BR> (princ)<BR>)<BR>
页:
[1]