明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1141|回复: 2

求教一个对话框驱动问题

[复制链接]
发表于 2011-4-5 16:53:48 | 显示全部楼层 |阅读模式
本帖最后由 盛麒毓 于 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)
)
此程序按标注可分为四大部分,后面三个部分分别实现长度、面积量算、编号标注,
可是当我运行后,在对话框中,选择某个功能,系统提示我,并未定义此函数,但是我已经写出了这三个函数啊,为什么会没有定义呢?烦请各位帮忙,谢谢
发表于 2011-4-5 20:14:23 | 显示全部楼层
对话框怎么写的?
 楼主| 发表于 2011-4-5 22:41:18 | 显示全部楼层
本帖最后由 盛麒毓 于 2011-4-5 22:41 编辑

回复 ZZXXQQ 的帖子

liangsuan:dialog{
  label="自动编号与量算";
  :column{
   :row{
      :column{
         :toggle{label="长度量算";key="runaa";value=0;}
         :toggle{label="面积量算";key="runarea";value=0;}
         :toggle{label="土方量计算";key="runv";value=0;}
         :toggle{label="标注";key="runs";value=0;}
         }
      :column{
         :popup_list
            {label="选择图层:";
             width=20;
             list="圆柱直齿\n圆柱斜齿\n";
             key="layer_list";
            }
         :edit_box
         { key="N";label="编号名称:";width=10;}
         :edit_box
         { key="F";label="编号起始:";value=1;width=10;}
         }
      }
   ok_cancel;
}
}
      
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-10 13:28 , Processed in 0.242361 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表