明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2051|回复: 11

谁帮忙把这程序改下吧?不会呀

  [复制链接]
发表于 2012-5-21 11:48 | 显示全部楼层 |阅读模式
(defun dia()
  (setq return_value (load_dialog "dia.dcl"))
  (setq what_next 2)
  (while (>= what_next 2)
    (setq cnt 1)
    (if (null (new_dialog "dia" return_value))
      (exit)
     );end if
    (initial)
    (action_tile "key_xzljbz" "(setq ljbz $value) (change1)")
    (action_tile "key_xzljdm" "(setq ljdm $value)")
    ;(action_tile "help" "showhelp")
    (setq what_next (start_dialog));
    ;(if(= what_next 4)(hide))
)
  (unload_dialog return_value)
  (princ)
)
(defun change1()
   (setq m_list (eval(read (strcat "xzlj" xzljbz "_list"))))
   (start_list "key_xzljdm")
   (mapcar 'add_list m_list)
   (end_list)
)
(defun initial()
(setq name '("零件1类" "零件2类"))
(setq xzlj0_list '("零件1_1" "零件1_2"))
(setq xzlj1_list '("零件2_1" "零件2_2"))
(setq xzljbz "-1")
;初始化
(start_list "key_xzljbz")
(mapcar 'add_list name )
;初始化型号
  (start_list "key_xzljdm")
  (mapcar 'add_list xzlj_list)
  (end_list)
  (setq xzljbz "0")
)


对话框:
dia:dialog{
label="绘制零件";
:boxed_row{
:column{
:popup_list{
     label="零件标准";
     key="key_xzljbz";
            }
:popup_list{
     label="零件代码";
     key="key_xzljdm";
            }
        }
        }
   ok_cancel;
  }
发表于 2012-5-21 16:24 | 显示全部楼层
(defun dia()
  (setq return_value (load_dialog "dia.dcl"))
  (setq what_next 2)
  (while (>= what_next 2)
    (setq cnt 1)
    (if (null (new_dialog "dia" return_value))
      (exit)
     );end if
    (initial)
    (action_tile "key_xzljbz" "(setq ljbz $value) (change1)")
    (action_tile "key_xzljdm" "(setq ljdm $value)")
    ;(action_tile "help" "showhelp")
    (setq what_next (start_dialog));
    ;(if(= what_next 4)(hide))
)
  (unload_dialog return_value)
  (princ)
)
(defun change1()
   (setq m_list (eval(read (strcat "xzlj" ljbz "_list"))))
   (start_list "key_xzljdm")
   (mapcar 'add_list m_list)
   (end_list)
)
(defun initial()
(setq name '("零件1类" "零件2类"))
(setq xzlj0_list '("零件1_1" "零件1_2"))
(setq xzlj1_list '("零件2_1" "零件2_2"))
(setq ljbz "-1")
;初始化
(start_list "key_xzljbz")
(mapcar 'add_list name )
(end_list)
;初始化型号
  (start_list "key_xzljdm")
  (mapcar 'add_list xzlj0_list)
  (end_list)
  (setq ljbz "0")
)
;(dia)可执行,少了一句(end_list),ljbz和xzljbz、ljdm和xzljdm变量名各保留一个。
 楼主| 发表于 2012-5-21 17:13 | 显示全部楼层
xyh 发表于 2012-5-21 16:24
(defun dia()
  (setq return_value (load_dialog "dia.dcl"))
  (setq what_next 2)

(end_list)在哪里加呀
 楼主| 发表于 2012-5-21 17:25 | 显示全部楼层
xyh 发表于 2012-5-21 16:24
(defun dia()
  (setq return_value (load_dialog "dia.dcl"))
  (setq what_next 2)

还不行呀?我生成vlx文件执行下来还是错误: no function definition: DIA1  ,
 楼主| 发表于 2012-5-21 17:33 | 显示全部楼层
xyh 发表于 2012-5-21 16:24
(defun dia()
  (setq return_value (load_dialog "dia.dcl"))
  (setq what_next 2)

执行下来是 quit / exit abort  ,怎么弄呀
 楼主| 发表于 2012-5-22 09:03 | 显示全部楼层
上面程序在生成vlx文件时会有 “警告: 运行时计算的表达式: (READ (STRCAT "xzlj" LJBZ "_list"))”怎么改啊
.
发表于 2012-5-22 09:03 | 显示全部楼层

dia:dialog{
label="绘制零件";
:boxed_row{
:column{
:popup_list{
     label="零件标准";
     key="key_xzljbz";
            }
:popup_list{
     label="零件代码";
     key="key_xzljdm";
            }
        }
        }
   ok_cancel;
  }
写到文件中并取名为dia.dcl,和lisp程序放在一起,最好在支持文件夹内,贴出的程序已改。
 楼主| 发表于 2012-5-22 09:25 | 显示全部楼层
xyh 发表于 2012-5-22 09:03

dia:dialog{
label="绘制零件";

我再试试看看
 楼主| 发表于 2012-5-22 09:32 | 显示全部楼层
xyh 发表于 2012-5-22 09:03

dia:dialog{
label="绘制零件";

好了,我还想在如“零件1_1" 等时出现一个子对话框,自对化框里将一些参数改变下如长度 ,宽度,高度等输入进去,我找到的都是按钮,那像这样的怎么弄
发表于 2012-5-22 10:59 | 显示全部楼层
在dia.dcl中的ok_cancel之前插入
      :boxed_column {
         label="参数(mm)";
         fixed_width=true;
         :edit_box {
            label="长度L:";
            key="L";
            edit_width=4;
         }
         :edit_box {
            label="宽W:";
            key="W";
            edit_width=4;
         }
         :edit_box {
            label="高H:";
            key="H";
            edit_width=4;
         }
      }
在lsp的
   (action_tile "key_xzljbz" "(setq ljbz $value) (change1)")
    (action_tile "key_xzljdm" "(setq ljdm $value)")
插入
  (action_tile "L" "(setq L (get_tile \"L\"))")
  (action_tile "H" "(setq H (get_tile \"H\"))")
  (action_tile "W" "(setq d0 (get_tile \"W\"))")
并修改
(action_tile "key_xzljdm" "(setq ljdm $value) (change2)")
编制change2函数
(defun change2()
;;根据ljdm值作相应处理,显示到编辑框中

;;中间省略
  (set_tile "L" l)
  (set_tile "W" W)
  (set_tile "H" H)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 03:21 , Processed in 0.367955 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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