找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 582|回复: 6

[求助] 编写一段lisp程序,老是出问题,请帮忙看看,谢谢!

[复制链接]
发表于 2018-11-23 17:32:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
      问题:1、使用的是popup_list控件,选定和显示内容不一致,如选“3“,显示的是“5”或“7”。
               2、为什么n和psj_wz1的数据类型为字符串,而psj_wz2的类型为数值。
     代码如下:
(defun C:SBFmain ()

  ;; 设置系统变量
  (setvar "cmdecho" 0)        ; 执行过程中命令行不响应
  (setvar "blipmode" 0)

  ;; 预设对话框出现在界面的中央
  (if (null dcl_pt)
    (setq dcl_pt '(-1 -1))
  )

  ;; 加载SBFdcl.dcl文件
  (setq dcl_id (load_dialog "sbfdcl.dcl"))

  ;; 激活DCL对话框
  (if (not (new_dialog "sbf" dcl_id))
    (exit)
  )

  ;; 设定初值
  (set_tile "n" "3")
  (set_tile "psj_wz1" "1")
  (set_tile "psj_wz2" "1")

  ;;给poppup_list控件赋值
  (setq n_list (list "3" "4" "5" "6" "7"))
  (setq psj_wz1_list (list "1" "2" "3" "4" "5" "6" "7"))
  (setq psj_wz2_list (list "1" "2" "3" "4" "5" "6" "7"))
  ;;显示poppup_list的值
  (show_list "n" n_list)
  (show_list "psj_wz1" psj_wz1_list)
  (show_list "psj_wz2" psj_wz2_list)

  (action_tile "n" "(get_n $value)")
  (action_tile "psj_wz1" "(get_psj_wz1 $value)")
  (action_tile "psj_wz2" "(get_psj_wz2 $value)")

  (action_tile "accept" "(setq dcl_pt  (done_dialog 1))") ; 确定按钮激活新对话框定义
  (action_tile "cancel" "(setq dcl_pt  (done_dialog 0))") ; 取消按钮关闭对框


  (setq dd (start_dialog))               ; dd值=done_dialog后的自变量值;将控制权交给DCL
  (cond
    ((= dd 1)
       (done_dialog)
    )                                       ; princ "按确定<OK>按钮",执行get_value函数
    ((= dd 0)
      ( progn (unload_dialog 0) (exit))
    )                                       ; princ "按取消<Cancel>按钮,释放对话框,退出程序"
  )


  (command "line" '(10 10) '(100 100) "")
  (main)  ;;执行画图程序

  (prin1)
) ;;SBFmain()结束


;;定义显示下拉框popup_list值的子程序
(defun show_list(key newlist)
   (start_list key)
   (mapcar 'add_list newlist)
   (end_list)
);;show_list()结束

;;获取下拉框值子程序
(defun get_n(vn)
   (set_tile "n" (nth (atoi vn) n_list))
   (setq n  (get_tile "n"))
);;get_n()结束
(defun get_psj_wz1(vpsj1)
   (set_tile "psj_wz1" (nth (atoi vpsj1) psj_wz1_list))
   (setq psj_wz1  (get_tile "psj_wz1"))
);;get_psj_wz1()结束
(defun get_psj_wz2(vpsj2)
   (set_tile "psj_wz2" (nth (atoi vpsj2) psj_wz2_list))
   (setq psj_wz2  (atoi (get_tile  "psj_wz2")))
);;get_psj_wz2()结束


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-11-23 18:01:23 | 显示全部楼层
DCL文件呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2018-11-24 15:20:05 | 显示全部楼层
DCL文件
//

//
sbf:dialog{
            label="绘图参数输入";                      //对话框标签
            :popuplist{                                //下拉列表
                 label="台数:";
                 key=n;                           //key值=>DCL对象名称
                 edit_width=8;
                 list="3\n4\n5\n\6\n7";
            }
                                                  //框列
                 :boxed_radio_column{
                    label="布置型式";
                    :radio_button{ label="集中布置";
                                   key="psj_jz";
                                   value="1";}
                    :radio_button{ label="分散布置";
                                   key="psj_fs";
                                   value="2";}
                    :popuplist{
                         label="第一个位置";
                         key="psj_wz1";
                         edit_width=8;
                         list="1\n2\n3\n4\n5\n6\n7";
                    }
                    :popuplist{
                         label="第二个位置";
                         key="psj_wz2";
                         edit_width=8;
                         list="1\n2\n3\n4\n5\n6\n7";
                    }
                 }

          spacer_1;
          ok_cancel;

          }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-24 15:23:12 | 显示全部楼层
后来,去掉“list”列表,也不行
//

//
sbf:dialog{
            label="绘图参数输入";                      //对话框标签
            :popuplist{                                //下拉列表
                 label="台数:";
                 key=n;                           //key值=>DCL对象名称
                 edit_width=8;
                 ;
            }
                                                  //框列
                 :boxed_radio_column{
                    label="布置型式";
                    :radio_button{ label="集中布置";
                                   key="psj_jz";
                                   value="1";}
                    :radio_button{ label="分散布置";
                                   key="psj_fs";
                                   value="2";}
                    :popuplist{
                         label="第一个位置";
                         key="psj_wz1";
                         edit_width=8;

                    }
                    :popuplist{
                         label="第二个位置";
                         key="psj_wz2";
                         edit_width=8;

                    }
                 }

          spacer_1;
          ok_cancel;

          }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-25 15:10:57 | 显示全部楼层
请高手指点一下啦,谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2018-12-15 10:39:04 | 显示全部楼层
对话框是不是如图片所示。
SBF.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2018-12-15 10:46:21 | 显示全部楼层
sbf:dialog{
            label="绘图参数输入";                      //对话框标签
            :popuplist{                                //下拉列表
                 label="台数:";
                key=n;                           //key值=>DCL对象名称   
                 edit_width=8;
                 ;
            }
                                                  //框列
                 :boxed_radio_column{
                    label="布置型式";
                    :radio_button{ label="集中布置";
                                   key="psj_jz";
                                   value="1";}
                    :radio_button{ label="分散布置";
                                   key="psj_fs";
                                   value="2";}
                    :popuplist{
                         label="第一个位置";
                         key="psj_wz1";
                         edit_width=8;

                    }
                    :popuplist{                              
                         label="第二个位置";
                         key="psj_wz2";
                         edit_width=8;

                    }
                 }

          spacer_1;
          ok_cancel;

          }

;书写有问题,更改的在以下:
sbf:dialog{
          label="绘图参数输入";                      //对话框标签
           :popup_list{                                //下拉列表
           label="台数:";
           key="n";                           //key值=>DCL对象名称
           edit_width=8;

            }
                                                  //框列
            :boxed_radio_column{
            label="布置型式";
            :radio_button{ label="集中布置";
                     key="psj_jz";
                     value="1";
                     }
                    :radio_button{ label="分散布置";
                                   key="psj_fs";
                                   value="2";
                                   }
                    :popup_list{
                         label="第一个位置";
                         key="psj_wz1";
                         edit_width=8;

                    }
                    :popup_list{
                         label="第二个位置";
                         key="psj_wz2";
                         edit_width=8;

                    }
                 }

          spacer_1;
          ok_cancel;

          }

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-26 12:09 , Processed in 0.382169 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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