- 积分
- 254
- 明经币
- 个
- 注册时间
- 2011-3-25
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 盛麒毓 于 2011-4-5 16:55 编辑
各位大侠,我做了一个对话框驱动程序如下:
(defun c:liangsuan(/ sdt id a b c d n f)
(defun getdata();获取编辑框的最终数据
(setq n (get_tile "N"))
(setq f (atof(get_tile "F")))
)
(setq id(load_dialog "e:\\example\\dcl\\量算与编号"))
(if (not (new_dialog "liangsuan" id)) (exit))
(action_tile "accept" "(setq a(get_tile \"runaa\")) (setq b(get_tile \"runarea\")) (setq d(get_tile \"runs\")) (done_dialog 1)")
(action_tile "cancel" "(done_dialog -1)")
(setq sdt(start_dialog))
(unload_dialog id)
(if (= a "1") (aa))
(if (= b "1") (aream))
(if (= d "1") (bh))
(princ)
)
;下为自动量算总长度
(defun c:aa ()
(setvar "cmdecho" 1)
(setq en (ssget
(list '(0 . "spline,arc,circle,line,ellipse,LWPOLYLINE"))))
(setq i 0)
(setq ll 0)
(repeat (sslength en)
(setq ss (ssname en i))
(setq endata (entget ss));
(command "lengthen" ss "")
(setq dd (getvar "perimeter"))
(setq ll (+ dd ll))
(setq i (1+ i))
)
(princ "所选线条总长为:")(princ ll)(princ)
)
;下为自动量算面积
(defun c:aream (/ olderr oldcmdecho errexit undox restore ss1 nr en tot_area)
(defun errexit (s)
(restore)
)
(defun undox ()
(command "._undo" "_E")
(setvar "cmdecho" oldcmdecho)
(setq *error* olderr)
(princ)
)
(setq olderr *error*
restore undox
*error* errexit
)
(setq oldcmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "._UNDO" "_BE")
(if (setq ss1 (ssget '((-4 . "<OR")
(0 . "POLYLINE")
(0 . "LWPOLYLINE")
(0 . "CIRCLE")
(0 . "ELLIPSE")
(0 . "SPLINE")
(0 . "REGION")
(-4 . "OR>")
)
)
)
(progn
(setq nr 0)
(setq tot_area 0.0)
(setq en (ssname ss1 nr))
(while en
(command "._area" "_O" en)
(setq tot_area (+ tot_area (getvar "area")))
(setq nr (1+ nr))
(setq en (ssname ss1 nr))
)
(princ "\nTotal Area = ")
(princ tot_area)
)
)
(restore)
)
;自动选点编号程序
(defun c:bh (/ oce1 zn h1 sxh1 p1)
(setq oce1 (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "-style" "BG_ST" "宋体" 0 0.8 0 "n" "n")
(setq zn 1)
(setq h1 2.5)
(setq sxh1 (strcat n (itoa f)) p1 (getpoint "\n请指定插入点: "))
(while (/= p1 nil)
(command "text" "m" p1 h1 0 sxh1)
(setq f (+ f zn) sxh1 (strcat n (itoa f)) p1 (getpoint "\n请指定下一插入点: "))
)
(setvar "cmdecho" oce1)
(princ)
)
此程序按标注可分为四大部分,后面三个部分分别实现长度、面积量算、编号标注,
可是当我运行后,在对话框中,选择某个功能,系统提示我,并未定义此函数,但是我已经写出了这三个函数啊,为什么会没有定义呢?烦请各位帮忙,谢谢
|
|