- UID
- 145707
- 积分
- 181
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-6-2
- 最后登录
- 1970-1-1
|
发表于 2006-5-6 20:17:17
|
显示全部楼层
;;; Design BY Ayungerstudio 2006.05.07
;;; Template: AutoCAD 2002 为浙江网友定制
;;;**************************************
;;; No.1 DWG对象输出到 *.dat 函数
;;;**************************************
(defun C:DWGDAT(/ FLTR ss1 n i DATfile fp entName entData entType Pt0 Pt1 Pt2 R string aa cc ll)
(setvar "cmdecho" 0)
(GRAPHSCR)
(setq FLTR '((-4 . "<OR")
(0 . "ARC")
(0 . "CIRCLE")
(0 . "LINE")
(-4 . "OR>")
);end_list
);end_seqt
(setq ss1 (ssget FLTR))
(if (= ss1 nil) (exit))
(setq n (sslength ss1))
(if (= n 0) (exit))
(if (= #AY_DWGDATCURPATH nil) (setq #AY_DWGDATCURPATH ""))
(setq DATFile (getfiled "输出LINE-ARC-CIRCLE对象数据到*.DAT文件" #AY_DWGDATCURPATH "DAT" 1))
(if (= DATFile nil) (progn (princ "\n错误: 没有选取DAT文件,程序退出!") (exit)))
(setq #AY_DWGDATCURPATH (strcat (vl-filename-directory DATfile) "\\"))
(setq fp (open DATfile "W"))
(setq oldDimZin (getvar "DIMZIN"))
(setvar "DIMZIN" 1)
(setq oldLupRec (getvar "LUPREC"))
(setvar "LUPREC" 6)
;;output the "LINE" object information.
(setq ll 1)
(setq i 0)
(while (< i n)
(setq entName (ssname ss1 i))
(setq entData (entget entName))
(setq entType (cdr (assoc 0 entData)))
(if (= entType "LINE")
(progn
(setq Pt0 (cdr (assoc 10 entData)))
(setq Pt1 (cdr (assoc 11 entData)))
(setq string1 (strcat (if (< ll 100) "L " "L") (itoa ll) "= " (rtos (car Pt0) 2) ", " (rtos (cadr Pt0) 2) ", "
(rtos (car Pt1) 2) ", " (rtos (cadr Pt1) 2)))
(setq ll (+ ll 1))
(write-line string1 fp)
);end_progn
);end_if
(setq i (+ i 1))
);end_while
;;output the "CIRCLE" object information.
(setq cc 1)
(setq i 0)
(while (< i n)
(setq entName (ssname ss1 i))
(setq entData (entget entName))
(setq entType (cdr (assoc 0 entData)))
(if (= entType "CIRCLE")
(progn
(setq Pt0 (cdr (assoc 10 entData)))
(setq R (cdr (assoc 40 entData)))
(setq string1 (strcat (if (< cc 100) "C " "C") (itoa cc) "= " (rtos (car Pt0) 2) ", " (rtos (cadr Pt0) 2) ", " (rtos R 2)))
(setq cc (+ cc 1))
(write-line string1 fp)
);end_progn
);end_if
(setq i (+ i 1))
);end_while
;;output the "ARC" object information.
(setq aa 1)
(setq i 0)
(while (< i n)
(setq entName (ssname ss1 i))
(setq entData (entget entName))
(setq entType (cdr (assoc 0 entData)))
(if (= entType "ARC")
(progn
(setq Pt0 (cdr (assoc 10 entData)))
(setq R (cdr (assoc 40 entData)))
(setq sAngle (cdr (assoc 50 entData)))
(setq eAngle (cdr (assoc 51 entData)))
(setq Pt1 (polar Pt0 sAngle R))
(setq Pt2 (polar Pt0 eAngle R))
(setq string1 (strcat (if (< aa 100) "A " "A") (itoa aa) "= " (rtos (car Pt0) 2) ", " (rtos (cadr Pt0) 2) ", "
(rtos (car Pt1) 2) ", " (rtos (cadr Pt1) 2) ", "
(rtos (car Pt2) 2) ", " (rtos (cadr Pt2) 2) ", N"))
(setq aa (+ aa 1))
(write-line string1 fp)
);end_progn
);end_if
(setq i (+ i 1))
);end_while
(close fp)
(princ "/n LINE-ARC-CIRCLE对象输出结束!")
(setvar "DIMZIN" oldDimZin)
(setvar "LUPREC" oldLupRec)
(princ)
);end_defun
;;;**********************************
;;; No.2 DAT文件输入到CAD对象 函数
;;;**********************************
(defun C:DATDWG(/ DATfile fp xRec xRecList entType Pt1 Pt2 Pt3 R Dirct)
(setvar "cmdecho" 0)
(GRAPHSCR)
(if (= #AY_DATDWGCURPATH nil) (setq #AY_DATDWGCURPATH ""))
(setq DATFile (getfiled "打开数据*.DAT文件" #AY_DATDWGCURPATH "DAT" 8))
(if (= DATFile nil) (progn (princ "\n错误: 没有选取DAT文件,程序退出!") (exit)))
(if (= (findfile DATFile) nil) (progn (princ "\n错误: 该DAT文件不存在,程序退出!") (exit)))
(setq #AY_DATDWGCURPATH (strcat (vl-filename-directory DATfile) "\\"))
(setq fp (open DATFile "R"))
(setq #AY_ErrorSnapObject (getvar "osmode"))
(setvar "osmode" 0)
(while (setq xRec (read-line fp))
(while (vl-string-position (ascii ",") xRec)
(setq xRec (vl-string-subst " " "," xRec))
);end_while
(setq xRecList (read (strcat "(" xRec ")")))
(setq entType (nth 0 xRecList))
(if (= (type entType) 'SYM) (setq entType (strcat (vl-symbol-name entType))));用来改变读入的字符串不在需要文件中保存为带引号的字符。
(if (= entType (substr entType 1 1)) (setq k 0) (setq k 1))
(setq entType (substr entType 1 1))
(cond
((= entType "L")
(setq Pt1 (list (nth (- 2 k) xRecList) (nth (- 3 k) xRecList) 0.000))
(setq Pt2 (list (nth (- 4 k) xRecList) (nth (- 5 k) xRecList) 0.000))
(command "_Line" Pt1 Pt2 "")
);end_switch
((= entType "C")
(setq Pt1 (list (nth (- 2 k) xRecList) (nth (- 3 k) xRecList) 0.000))
(setq R (nth (- 4 k) xRecList))
(command "_Circle" Pt1 R )
);end_switch
((= entType "A")
(setq Pt1 (list (nth (- 2 k) xRecList) (nth (- 3 k) xRecList) 0.000))
(setq Pt2 (list (nth (- 4 k) xRecList) (nth (- 5 k) xRecList) 0.000))
(setq Pt3 (list (nth (- 6 k) xRecList) (nth (- 7 k) xRecList) 0.000))
(setq Dirct (nth (- 8 k) xRecList))
(if (= (type Dirct) 'SYM) (setq Dirct (strcat (vl-symbol-name Dirct))));用来改变读入的字符串不在需要文件中保存为带引号的字符串。
(if (= Dirct "N")
(command "_Arc" "C" Pt1 Pt2 Pt3);then 顺时针.
(command "_Arc" "C" Pt1 Pt3 Pt2);then 逆时针.
);end_if
);end_switch
);end_cond
);end_while
(close fp)
(command "_zoom" "E")
(setvar "osmode" #AY_ErrorSnapObject)
(princ (strcat "\n数据文件 " DATfile " 输入结束!"))
(princ)
);end_defun
;;;本程序为2005-05-07修改后的最新版本,也就是你拿到的最新
;;;版,在这里更新的目的,仅为你以后使用和共享方便!
;;; ------ By Ayungerstudio FSDI of CRCC Xi'AN 2006 |
|