大家给我看看下面的程序如何才能用呀!是关于把明细表导出来的一个程序,我看不大懂!有知道的兄弟给指点一下!
;;;本程序应以database.lsp命名
(defun EXTERNALDATA (/ datafile listitem) (setq datafile (getfiled "打开文件" (strcat path_F "extractdata//") "txt" 8 ) ) (setq datafile (open datafile "r")) (setq listitem (read-line datafile)) (start_list "Referlist" 2) (while (/= listitem nil) (add_list listitem) (setq listitem (read-line datafile)) ) (end_list) (close datafile) )
(defun DBASEDIA_ID (/ DBASEDIA_ID do_what) (setq DBASEDIA_ID (load_dialog (strcat path_F "database.dcl")))
(if (> DBASEDIA_ID 0) (progn (setq do_what 4) (while (> do_what 1) (if (new_dialog "database" DBASEDIA_ID) (action_tile "b_externaldata" "(EXTERNALDATA)") (action_tile "edb_Type" "(setq oftype $value)") (set_tile "DWGNAME" (strcat (getvar "DWGPREFIX") DWGNAME)) (set_tile "DWGNO" DWGNO) (action_tile "scale_val" (strcat "(progn" "(setq scale_valuetmp $value)" ")" ) ) (action_tile "typ_list" "(setq typlist (atoi $value))") (action_tile "database_pick" "(done_dialog 3)") (action_tile "database_ok" "(done_dialog 1)") (setq do_what (start_dialog)) (cond ( (= do_what 3) (progn (setq p0 (getpoint "请选择开始点:")) ) ) ) ) (setq do_what 0) ) (unload_dialog DBASEDIA_ID)
) ) )
)
(defun SELE_TYPE () (cond ((= typlist 0) (setq oftype "*" MyList "list" ) ) ((= typlist 1) (setq oftype "阀" MyList "valve" ) ) ((= typlist 2) (setq oftype "法兰" MyList "flange" ) ) ((= typlist 3) (setq oftype "管" MyList "pipe" ) ) ((= typlist 4) (setq oftype "座" MyList "support" ) ) ((= typlist 5) (setq oftype "接头" MyList "joint" ) ) ((= typlist 6) (setq oftype "三通" MyList "Tvalve" ) ) ((= typlist 7) (setq oftype "弯头" MyList "bendedpipe" ) ) ) )
(defun DBASE_LIST () (start_list "typ_list" 2) (add_list "全部") (add_list "阀") (add_list "法兰") (add_list "管") (add_list "座") (add_list "接头") (add_list "三通") (add_list "弯头") (end_list) )
(defun C:DBASE (/ p0 p1 cancel_rea s0 s1 s2 s3 s4 s5 s6 s7 ID ITEM DRAWING_NO NAME MATERIAL NUMBER SGL_WEIGHT GBL_WEIGHT ATTNOTE var_SS var_TEXT var_P0 var_P1 DWGNAME DWGNO len_DWGNAME num_ITEM typlist oftype MyList var_Filenum var_File path_F len_path LUNITS LUPREC DH scale_valuetmp str_Scale ) ;;; (setvar "CMDECHO" 0) (setvar "OSMODE" 1) (setq LUNITS (getvar "LUNITS")) (setq LUPREC (getvar "LUPREC")) (setvar "LUNITS" 2) (setvar "LUPREC" 4) (setq path_F (findfile "database.lsp")) (setq len_path (strlen path_F)) (setq path_F (substr path_F 1 (- len_path (strlen "database.lsp")))) (setq DWGNAME (getvar "DWGNAME")) (setq DH (getreal "\n请输入明细表行间距: ")) (setq len_DWGNAME (strlen DWGNAME))
(setq DWGNO (strcat "LISP" "-" (substr DWGNAME 1 3) "-" (substr DWGNAME 4 3) ) ) (if (>= len_DWGNAME 14) (setq DWGNO (strcat DWGNO "-" (substr DWGNAME 10 (- len_DWGNAME 13)) ) ) ) (setq scale_value (read scale_valuetmp))
(if (>= scale_value 1) (setq str_Scale (strcat "1:" (rtos scale_value 2 0))) (setq str_Scale (strcat (rtos (/ 1 scale_value) 2 0) ":1")) ) (setvar "MODEMACRO" DWGNO) (DBASEDIA_ID) (if (/= cancel_rea 1) (progn (setvar "CMDDIA" 0) (SELE_TYPE) (if (>= scale_value 1) (setq str_Scale (strcat "1:" (rtos scale_value 2 0))) (setq str_Scale (strcat (rtos (/ 1 scale_value) 2 0) ":1")) ) (if (= nil varFilenum)
(progn (setq varFilenum (getfiled "请选择明细表文件" (strcat path_F "extractdata\\") "txt" 1 ) ) ) ) ) (CREATEFILE varFilenum) (setq num_ITEM 0) (setq SYS_ID (substr DWGNAME 1 3)) (setq ID (strcat (substr DWGNAME 1 3) (rtos num_ITEM 2 0))) (setq p1 (polar p0 (* 0.5 pi) (* scale_value DH))) (GETITEM) (REPEATWRITE) (initget 1 "Yes No") (setq kwd (getkword "\n本图明细表完整了吗(Yes或No)? ")) (if (= kwd "No") (progn (setq p0 (getpoint "请选择开始点:")) (setq p1 (polar p0 (* 0.5 pi) (* scale_value DH))) (GETITEM) (REPEATWRITE) ) ) ;;; (command "zoom" "p") ) ) (setvar "LUNITS" LUNITS) (setvar "LUPREC" LUPREC) (setvar "CMDDIA" 1) (setvar "CMDECHO" 1) )
(defun GETITEM () (setq ITEM (EXTRACT 8 0)) (setq DRAWING_NO (EXTRACT 43 8)) (setq NAME (EXTRACT 103 43)) (setq MATERIAL (EXTRACT 123 103)) (setq NUMBER (EXTRACT 133 123)) (setq SGL_WEIGHT (EXTRACT 144.5 133)) (setq GBL_WEIGHT (EXTRACT 156 144.5)) (setq ATTNOTE (EXTRACT 180 156))
) (defun REPEATWRITE () (while (or (/= ITEM "") (/= DRAWING_NO "") (/= NAME "") (/= MATERIAL "") (/= NUMBER "") (/= SGL_WEIGHT "") (/= GBL_WEIGHT "") (/= ATTNOTE "") ) (setq ITEM (EXTRACT 8 0)) (setq DRAWING_NO (EXTRACT 43 8)) (setq NAME (EXTRACT 103 43)) (setq MATERIAL (EXTRACT 123 103)) (setq NUMBER (EXTRACT 133 123)) (setq SGL_WEIGHT (EXTRACT 144.5 133)) (setq GBL_WEIGHT (EXTRACT 156 144.5)) (setq ATTNOTE (EXTRACT 180 156)) (if (OR (wcmatch ITEM (strcat "*" oftype "*")) (wcmatch DRAWING_NO (strcat "*" oftype "*")) (wcmatch NAME (strcat "*" oftype "*")) (wcmatch MATERIAL (strcat "*" oftype "*")) (wcmatch NUMBER (strcat "*" oftype "*")) (wcmatch SGL_WEIGHT (strcat "*" oftype "*")) (wcmatch GBL_WEIGHT (strcat "*" oftype "*")) (wcmatch ATTNOTE (strcat "*" oftype "*"))
) (if (or (not (and (wcmatch NAME "*接头*") (= oftype "管"))) (not (and (wcmatch NAME "*电磁阀*") (= oftype "三通"))) ) (progn (APPENDFILE varFilenum) (setq num_ITEM (+ num_ITEM 1)) ) ) ) (setq p0 p1) (setq p1 (polar p0 (* 0.5 pi) (* scale_value DH))) )
)
(defun CREATEFILE (Fn / f_open) (setq f_open (open Fn "a")) (write-line " " f_open) (write-line (strcat DWGNAME " " DWGNO) f_open)
(write-line (strcat "序号" " " "图号或标准号" " " "名称" " " "材料" " " "数量" " " "单重" " " "总重" " " "附注" ) f_open ) (close f_open) )
(defun APPENDFILE (Fn / f_open) (setq f_open (open Fn "a")) (write-line (strcat ITEM " " DRAWING_NO " " (STRINGFUN (STRINGFUN NAME)) " " MATERIAL " " NUMBER " " SGL_WEIGHT " " GBL_WEIGHT " " ATTNOTE ) f_open ) (close f_open) (princ (strcat "\n" ITEM "\t" DRAWING_NO "\t" (STRINGFUN (STRINGFUN NAME)) "\t" MATERIAL "\t" NUMBER "\t" SGL_WEIGHT "\t" GBL_WEIGHT "\t" ATTNOTE ) ) )
(defun EXTRACT (DIS0 DIS1 / var_SS var_tmpText var_TEXT tmpInsX tmpTxt)
(if (/= (setq var_SS (ssget "w" (polar p1 0 (* scale_value DIS1)) (polar p0 0 (* scale_value DIS0)) ) ) nil ) (progn (setq intN 0) (setq intM 0) (while (< intM (sslength var_SS)) (if (or (= (cdr (assoc 0 (entget (ssname var_SS intM)))) "TEXT") (= (cdr (assoc 0 (entget (ssname var_SS intM)))) "MTEXT") ) (progn (set (read (strcat "varInsX[" (rtos intN) "]")) (cadr (assoc 10 (entget (ssname var_SS intM)))) )
(set (read (strcat "varText[" (rtos intN) "]")) (cdr (assoc 1 (entget (ssname var_SS intM)))) )
(setq intN (+ intN 1))
) ) (setq intM (+ intM 1))
) (if (>= intN 1) (progn (setq i intN) (setq k 0) (while (> i 1) (setq j 0) (while (< j (- i 1)) (if (> (eval (read (strcat "varInsX[" (rtos j) "]"))) (eval (read (strcat "varInsX[" (rtos (+ j 1)) "]")) ) ) (progn
(setq tmpInsX (eval (read (strcat "varInsX[" (rtos j) "]"))) ) (setq tmpTxt (eval (read (strcat "varText[" (rtos j) "]"))) ) (set (read (strcat "varInsX[" (rtos j) "]")) (eval (read (strcat "varInsx[" (rtos (+ j 1)) "]")) ) ) (set (read (strcat "varText[" (rtos j) "]")) (eval (read (strcat "varText[" (rtos (+ j 1)) "]")) ) )
(set (read (strcat "varInsX[" (rtos (+ j 1)) "]")) tmpInsX ) (set (read (strcat "varText[" (rtos (+ j 1)) "]")) tmpTxt )
) ) (setq j (+ j 1))
) (setq i (- i 1)) ) (setq i 0) (setq var_TEXT "") (while (< i intN) (setq var_TEXT (strcat var_TEXT (eval (read (strcat "varText[" (rtos i)))) ) ) (setq i (+ i 1))
) ) (setq var_TEXT varTEXT[0]) ) ) (setq var_TEXT "") ) (setq var_TEXT (STRINGFUN var_TEXT)) )
(defun STRINGFUN (varStrings / lenStrings lenString strString strA strB strC intII ) (if (or (wcmatch varStrings "*%%216*") (wcmatch varStrings "*%%[cCdDpP]*") ) (progn (setq lenStrings (strlen varStrings)) (cond ((wcmatch varStrings "*%%216*") (setq strString "%%216" strSymbol "δ" lenString (strlen strString) ) ) ((wcmatch varStrings "*%%c*") (setq strString "%%c" strSymbol "φ" lenString (strlen strString) ) ) ((wcmatch varStrings "*%%C*") (setq strString "%%C" strSymbol "φ" lenString (strlen strString) ) ) ((wcmatch varStrings "*%%D*") (setq strString "%%D" strSymbol "°" lenString (strlen strString) ) ) ((wcmatch varStrings "*%%d*") (setq strString "%%d" strSymbol "°" lenString (strlen strString) ) ) ((wcmatch varStrings "*%%p*") (setq strString "%%p" strSymbol "±" lenString (strlen strString) ) ) ((wcmatch varStrings "*%%P*") (setq strString "%%P" strSymbol "±" lenString (strlen strString) ) ) ) (if (wcmatch varStrings (strcat "*" strString "*")) ;strString =%%216、%%C、%%D、%%P ;strSymbol =δ、φ、°、± (progn (setq intII 1) (setq strB (substr varStrings intII (strlen strString))) (while (/= strB strString) (setq intII (+ intII 1)) (setq strB (substr varStrings intII (strlen strString))) ) (if (> intII 2) (setq strA (substr varStrings 1 (- intII 1) ) ) ) (if (< intII (strlen varStrings)) (setq strC (substr varStrings (+ intII (strlen strString)))) ) ;(setq strB strSymbol) (if (or (= nil strA) (= nil strC)) (progn (if (= nil strA) (setq varStrings (strcat strSymbol strC)) ) (if (= nil strC) (setq varStrings (strcat strA strSymbol)) )
(if (and (= nil strA) (= nil strC)) (setq varStrings strSymbol) ) ) (setq varStrings (strcat strA strSymbol strC))
) ) ) ) ) (setq varStrings varStrings) )
;;; 下面是对话框database.dcl database:dialog { label="明细表操作"; :list_box { label="明细表列表"; height=10; tabs="8 35 75 85 90 100 110"; fixed_height=true; width=140; fixed_width=true; key="Referlist"; } :boxed_row { label="零部件/设备类型"; :list_box { width=15; fixed_width=true; fixed_height=true; key="typ_list"; } :column { height=3;fixed_height=true;alignment=top; :text { label="输入类型"; } :edit_box { key="edb_Type"; } :edit_box { label="图名"; key="DWGNAME"; } :edit_box { label="图号"; key="DWGNO"; } } } :row { fixed_width=true; alignment=centered; :button { label="选点<& "; fixed_width=true; key="database_pick"; is_default=true; } :edit_box { label="比例"; fixed_width=true; value=1; key="scale_val"; } } :row { fixed_width=true;alignment=centered; :button { label="确定"; fixed_width=true; alignment=left; key="jn_ok"; action="(setq database_rea $reason)"; } :button { label="打开文件"; fixed_width=true; alignment=right; key="b_externaldata"; } :button { label="取消"; fixed_width=true; alignment=right; is_cancel=true; action="(setq cancel_rea $reason)"; } } }
|