xiangjinglai 发表于 2015-3-17 17:15:16

程序有问题 我是按书打的 但是不知道为什么错误

有没有大神能帮忙看下

(Defun C:DrawRect()
(setq return_value (load_dialog"rect.dcl"))
(setq m_x 0)
(setq m_y 0)
(setq pt'(0 0))
(setq what_next 2)
(while(>= what_next 2)
    (if (null (new_dialog"rect"return_value))
      (exit)
    )
    (dispos)
    (action_tile"accept" "(getdata)(done_dialog 1)")
    (action_tile"key_selpos" "(done_dialog 4)")
    (action_tile"cancael" "(done_dialog -1)")
    (setq what_next (start_dialog))
    (cond
      ((= what_next 1)
         (FuncDrawRect)
       )
       ((= what_next 4)
         (setq pt(getpoint"\n Getpoint"))
       )
       ((= what_next 0)
         (prompt"\n用户禁用对话:")
       )
      )
    )
(unload_dialog return_value)
(princ)
)
;初始化
(defun dispos()
    (show)
    (setq m_x (car pt))
    (setq m_y (cadr pt))
    (set_tile"key_x"(rtos m_x 2 2))
    (set_tile"key_y"(rtos m_y 2 2))
)
;绘制矩形框
(defun FuncDrawRect()
    (command"rectang"(list m_x m_y)
          (list (+ m_x m_length) (+ m_y m_width)))
          )
    ;获取数据
    (defun getdata()
      (setq m_x (atof(get_tile "key_x")))
      (setq m_y (atof(get_tile "key_y")))
      (setq m_length (atof(get_tile "key_length")))
      (setq m_width (atof(get_tile "key_width")))
   )
    ;显示幻灯片
    (defun show()
      (setq x1 (dimx_tile "img_rect"))
      (setq y1 (dimy_tile "img_rect"))
      (start_image "img_rect")
      (slide_image 0 0 x1 y1 "rectangle.sld")
      (end_image)
      )

/*DCL文件/
rect : dialog{
   label = "绘制矩形图";
   :row{
            :image
            {
            width=30;
            heigth=2;
         //aspect_ratio=0.1;
            key="img_rect";
            color=-2;
            }
         :boxed_column{
                label="参数";
                :row{
                        :column{
                        :edit_box
                        {
                        label="起始位置X坐标:        ";
                        key="key_x";
                        width=8;
                        value="0";
                        }
                        :edit_box
                        {
                        label="起始位置Y坐标:        ";
                        key="key_y";
                        width=8;
                        value="0";
                        }
                        :button
                        {
                        label="选择屏幕坐标:        ";
                        key="key_selpos";
                        }
                              }
                   }
               :edit_box
               {
               label="长度:";
               key="key_length";
               width=8;
               value="0";
               }
               :edit_box
               {
               label="宽度:";
               key="key_width";
               width=8;
               value="0";
               }
          }
      }
    ok_cancel;
    }


newbuser 发表于 2015-3-17 18:33:42

你程序的开头就告诉你了
(setq return_value (load_dialog"rect.dcl"))
把你的后面的/*DCL文件/另存为 rect.dcl。OK?

xiangjinglai 发表于 2015-3-17 18:54:22

newbuser 发表于 2015-3-17 18:33 static/image/common/back.gif
你程序的开头就告诉你了
(setq return_value (load_dialog"rect.dcl"))
把你的后面的/*DCL文件/另存为 re ...

名字也要这样? 而不是说改下文件类型?

xiangjinglai 发表于 2015-3-17 19:11:30

newbuser 发表于 2015-3-17 18:33 static/image/common/back.gif
你程序的开头就告诉你了
(setq return_value (load_dialog"rect.dcl"))
把你的后面的/*DCL文件/另存为 re ...

试过了还是有问题。。。

newbuser 发表于 2015-3-18 09:22:07

xiangjinglai 发表于 2015-3-17 19:11 static/image/common/back.gif
试过了还是有问题。。。

Lisp文件应这么写,(Load_dialog "d:\\rect.dcl")这句是带地址的,意思是运行d盘的rect.dcl文件,注意路径,可以自己任意修改
现复制抄送你的LISP文件如下(Defun C:DrawRect()
(setq return_value (load_dialog"d:\\rect.dcl"))
(setq m_x 0)
(setq m_y 0)
(setq pt'(0 0))
(setq what_next 2)
(while(>= what_next 2)
    (if (null (new_dialog"rect"return_value))
      (exit)
    )
    (dispos)
    (action_tile"accept" "(getdata)(done_dialog 1)")
    (action_tile"key_selpos" "(done_dialog 4)")
    (action_tile"cancael" "(done_dialog -1)")
    (setq what_next (start_dialog))
    (cond
      ((= what_next 1)
         (FuncDrawRect)
       )
       ((= what_next 4)
         (setq pt(getpoint"\n Getpoint"))
       )
       ((= what_next 0)
         (prompt"\n用户禁用对话:")
       )
      )
    )
(unload_dialog return_value)
(princ)
)
;初始化
(defun dispos()
    (show)
    (setq m_x (car pt))
    (setq m_y (cadr pt))
    (set_tile"key_x"(rtos m_x 2 2))
    (set_tile"key_y"(rtos m_y 2 2))
)
;绘制矩形框
(defun FuncDrawRect()
    (command"rectang"(list m_x m_y)
            (list (+ m_x m_length) (+ m_y m_width)))
            )
    ;获取数据
    (defun getdata()
      (setq m_x (atof(get_tile "key_x")))
      (setq m_y (atof(get_tile "key_y")))
      (setq m_length (atof(get_tile "key_length")))
      (setq m_width (atof(get_tile "key_width")))
   )
    ;显示幻灯片
    (defun show()
      (setq x1 (dimx_tile "img_rect"))
      (setq y1 (dimy_tile "img_rect"))
      (start_image "img_rect")
      (slide_image 0 0 x1 y1 "rectangle.sld")
      (end_image)
      )
以下是扩展名为dcl的rect文件
运行效果如下图

xiangjinglai 发表于 2015-3-18 09:35:47

newbuser 发表于 2015-3-18 09:22 static/image/common/back.gif
Lisp文件应这么写,(Load_dialog "d:\\rect.dcl")这句是带地址的,意思是运行d盘的rect.dcl文件,注意路径 ...

恩啦 ,,谢谢
还有个问题就是img_rect要怎么修改才能显示出来 或者说加载我自己的图片

newbuser 发表于 2015-3-18 10:06:34

xiangjinglai 发表于 2015-3-18 09:35 static/image/common/back.gif
恩啦 ,,谢谢
还有个问题就是img_rect要怎么修改才能显示出来 或者说加载我自己的图片

这个需要制作幻灯片,调用SLD文件。我没做过,不懂这个领域的。关于dcl我也是一知半解的,没有太多的经验。请谅解。

xiangjinglai 发表于 2015-3-18 10:11:38

newbuser 发表于 2015-3-18 10:06
这个需要制作幻灯片,调用SLD文件。我没做过,不懂这个领域的。关于dcl我也是一知半解的,没有太多的经验 ...
还是很感谢你 。。只能用SLD这个办法吗
页: [1]
查看完整版本: 程序有问题 我是按书打的 但是不知道为什么错误