明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9512|回复: 25

[已解答] lisp,dcl编译成VLX不能显示DCL

  [复制链接]
发表于 2013-1-25 17:02:48 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2013-1-25 17:24 编辑

LISP与DCL合编成VLX后不能显示DCL,请教高手,这问题出在哪里?

一:我的LISP文件:LL.LSP

(defun sset ()
  (setvar "CMDECHO" 0)
  (setvar "TEXTEVAL" 1)
)
(defun sset1 ()
  (setvar "CMDECHO" 1)
)
(defun c:ll (/ s p n a pt0 pt00 pt1 pt2 pt3 pt4 pt5 pt6 ang x1 x2 y1 y2 p1
        dis ang1 nam e pt10 pt11 f bl ptp0 pt01
     )
  (sset)
  (if (or
(not dcl_id)
(< (setq dcl_id (load_dialog "ll-b.dcl"))
    0
)
      )
    (setq dcl_id (load_dialog "ll-b.dcl"))
  )
  (if (not (new_dialog "ll1" dcl_id))
    (exit)
  )
  (action_tile "tile0" "(setq pt1 $value)")
  (action_tile "tile00" "(setq pt1 $value)(set_tile \"tile0\" $value)")
  (action_tile "tile1"
        "(setq pt1 100)(set_tile \"tile0\" \"100\")(done_dialog 1)"
  )
  (action_tile "tile2"
        "(setq pt1 150)(set_tile \"tile0\" \"150\")(done_dialog 1)"
  )
  (action_tile "tile3"
        "(setq pt1 200)(set_tile \"tile0\" \"200\")(done_dialog 1)"
  )
  (action_tile "tile4"
        "(setq pt1 50)(set_tile \"tile0\" \"50\")(done_dialog 1)"
  )
  (action_tile "tile5"
        "(setq pt1 40)(set_tile \"tile0\" \"40\")(done_dialog 1)"
  )
  (action_tile "tile6"
        "(setq pt1 30)(set_tile \"tile0\" \"30\")(done_dialog 1)"
  )
  (action_tile "tile7"
        "(setq pt1 20)(set_tile \"tile0\" \"20\")(done_dialog 1)"
  )
  (action_tile "tile8"
        "(setq pt1 10)(set_tile \"tile0\" \"10\")(done_dialog 1)"
  )
  (action_tile "tile9"
        "(setq pt1 5)(set_tile \"tile0\" \"5\")(done_dialog 1)"
  )
  (action_tile "accept" "(setq pt1 100)(done_dialog 1)")
  (start_dialog)
  (unload_dialog dcl_id)
  (setvar "DIMLFAC" pt1)
  (setq s (ssget))
  (while (/= s nil)
    (setq p (- (sslength s) 1))
    (setq n 0)
    (setq a (ssadd))
    (while (<= n p)
      (setq pt1 (entget (ssname s n)))
      (if (or
     (= "LINE" (cdr (assoc 0 pt1)))
     (= "LWPOLYLINE" (cdr (assoc 0 pt1)))
   )
(ssadd (ssname s n) a)
      )
      (setq n (+ n 1))
    )
    (setq p (- (sslength a) 1))
    (setq n 0)
    (while (<= n p)
      (setq pt1 (entget (setq nam (ssname a n))))
      (if (= n 0)
(progn
   (if (= "LINE" (cdr (assoc 0 pt1)))
     (progn
       (setq pt2 (cdr (assoc 10 pt1)))
       (setq pt3 (cdr (assoc 11 pt1)))
     )
   )
   (if (= "LWPOLYLINE" (cdr (assoc 0 pt1)))
     (progn
       (setq pt2 (entnext nam))
       (setq pt3 (entnext pt2))
       (setq pt2 (entget pt2))
       (setq pt3 (entget pt3))
       (setq pt2 (cdr (assoc 10 pt2)))
       (setq pt3 (cdr (assoc 10 pt3)))
     )
   )
   (setq ang1 (angle pt2 pt3))
   (setvar "SNAPANG" ang1)
   (setq ang (+ ang1 (/ pi 2)))
   (setq pt4 (polar pt2 ang 3))
   (setq e (list pt2))
)
      )
      (if (> n 0)
(progn
   (if (= "LINE" (cdr (assoc 0 pt1)))
     (progn
       (setq pt10 (cdr (assoc 10 pt1)))
       (setq pt11 (cdr (assoc 11 pt1)))
     )
   )
   (if (= "LWPOLYLINE" (cdr (assoc 0 pt1)))
     (progn
       (setq pt10 (entnext nam))
       (setq pt11 (entnext pt10))
       (setq pt10 (entget pt10))
       (setq pt11 (entget pt11))
       (setq pt10 (cdr (assoc 10 pt10)))
       (setq pt11 (cdr (assoc 10 pt11)))
     )
   )
   (setq ang1 (angle pt10 pt11))
   (if (and
  (/= (abs (- ang ang1)) 0.0)
  (/= (abs (- ang ang1)) pi)
       )
     (progn
       (setq pt10 (inters
      pt2
      pt4
      pt10
      pt11
      nil
    )
       )
       (setq e (append
   (list pt10)
   e
        )
       )
     )
   )
)
      )
      (setq n (+ n 1))
    )
    (setq p (- (length e) 1))
    (setq n 0)
    (setq f (ssadd))
    (while (< n p)
      (setq pt0 (nth n e))
      (setq pt1 (nth (+ n 1) e))
      (setq pt5 (polar pt0 (- ang1 (* 0.25 pi)) 0.71))
      (setq pt6 (polar pt0 (+ ang1 (* 0.75 pi)) 0.71))
      (command "PLINE" pt5 "W" 0.45 "" pt6 "")
      (ssadd (entlast) f)
      (setq pt5 (polar pt0 ang1 10))
      (setq pt6 (polar pt0 (+ ang1 pi) 4))
      (command "PLINE" pt5 "W" 0 "" pt6 "")
      (ssadd (entlast) f)
      (if (= n 0)
(setq pt00 pt0)
      )
      (if (= n (- p 1))
(progn
   (setq pt1 (nth p e))
   (setq pt5 (polar pt1 (- ang1 (* 0.25 pi)) 0.71))
   (setq pt6 (polar pt1 (+ ang1 (* 0.75 pi)) 0.71))
   (command "PLINE" pt5 "W" 0.45 "" pt6 "")
   (ssadd (entlast) f)
   (setq pt5 (polar pt1 ang1 10))
   (setq pt6 (polar pt1 (+ ang1 pi) 4))
   (command "PLINE" pt5 "W" 0 "" pt6 "")
   (ssadd (entlast) f)
   (setq ptp0 pt1)
   (command "PLINE" pt00 "W" 0 "" ptp0 "")
   (ssadd (entlast) f)
)
      )
      (setq dis (distance pt1 pt0))
      (setq y1 (nth 1 pt0))
      (setq y2 (nth 1 pt1))
      (setq x1 (nth 0 pt0))
      (setq x2 (nth 0 pt1))
      (if (> y1 y2)
(progn
   (setq ang (angle pt1 pt0))
   (setq pt01 (polar pt1 ang (/ dis 2)))
)
      )
      (if (< y1 y2)
(progn
   (setq ang (angle pt0 pt1))
   (setq pt01 (polar pt0 ang (/ dis 2)))
)
      )
      (if (= y1 y2)
(progn
   (if (> x1 x2)
     (progn
       (setq ang (angle pt1 pt0))
       (setq pt01 (polar pt1 ang (/ dis 2)))
     )
   )
   (if (< x1 x2)
     (progn
       (setq ang (angle pt0 pt1))
       (setq pt01 (polar pt0 ang (/ dis 2)))
     )
   )
)
      )
      (setq pt01 (polar pt01 (+ ang (/ pi 2)) 1))
      (setq bl (getvar "DIMLFAC"))
      (setq dis (rtos (* bl dis)))
      (setq p1 (strlen dis))
      (setq pt4 (polar pt01 ang p1))
      (setq pt3 (polar pt01 (+ ang pi) p1))
      (setvar "TEXTSTYLE" "STANDARD")
      (command "TEXT" "J" "F" pt3 pt4 3.0 dis)
      (ssadd (entlast) f)
      (setq n (+ n 1))
    )
    (setvar "ORTHOMODE" 1)
    (command "MOVE" f "" pt00 pause "")
    (setvar "ORTHOMODE" 0)
    (setvar "SNAPANG" 0)
    (sset1)
    (setq s (ssget))
  )
)

二:我的DCL文件:LL-B.DCL

ll1:dialog {
label="Please give the scale num:?";
initial_focus=tile0;
:boxed_row {
   label="The num = :";
    :edit_box {
      key="tile0";
      value="100";
      allow_accept=true;
    }
    :slider {
      key="tile00";
      fixed_widht=true;
      width=16;
      max_value=100;
      min_value=1;
    }
  }
:boxed_radio_row {
  label="Select";
   :radio_button {
   label="100";
   key="tile1";
   }
   :radio_button {
   label="150";
   key="tile2";
   }
   :radio_button {
   label="200";
   key="tile3";
   }
   :radio_button {
   label="50";
   key="tile4";
   }
  }
:boxed_radio_row {
   :radio_button {
   label="40";
   key="tile5";
   }
   :radio_button {
   label="30";
   key="tile6";
   }
   :radio_button {
   label="20";
   key="tile7";
   }
   :radio_button {
   label="10";
   key="tile8";
   }
   :radio_button {
   label="5";
   key="tile9";
   }
  }
  ok_only;
}

希望高手加我QQ:15290049  我有一大堆LISP,DCL,目前想整合VLX,遇到困难!!!



本帖子中包含更多资源

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

x

点评

程序写的太烂  发表于 2013-1-25 22:36
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2013-1-25 21:29:06 | 显示全部楼层
本帖最后由 尘缘一生 于 2013-1-25 22:48 编辑

我是在CAD2004下整合的,难道版本低吗?
发表于 2013-1-25 22:17:16 | 显示全部楼层
应该没有问题才对
发表于 2013-1-25 22:28:48 | 显示全部楼层
1、对话框错误。

  1. dcl_settings:default_dcl_settings{audit_level=3;}
  2. ll1:dialog{
  3. label="Please give the scale num:?";
  4. initial_focus="tile0";
  5. :boxed_row{
  6.   label="The num=:";
  7.   :edit_box{key="tile0";value="100";allow_accept=true;}
  8.   :slider{key="tile00";fixed_widht=true;width=16;max_value=100;min_value=1;}
  9. }
  10. :boxed_radio_row{
  11.   label="Select";
  12.   :radio_button{label="100";key="tile1";}
  13.   :radio_button{label="150";key="tile2";}
  14.   :radio_button{label="200";key="tile3";}
  15.   :radio_button{label="50";key="tile4";}
  16. }
  17. :boxed_radio_row{
  18.   :radio_button{label="40";key="tile5";}
  19.   :radio_button{label="30";key="tile6";}
  20.   :radio_button{label="20";key="tile7";}
  21.   :radio_button{label="10";key="tile8";}
  22.   :radio_button{label="5";key="tile9";}
  23. }
  24. ok_only;
  25. }
 楼主| 发表于 2013-1-25 22:44:28 | 显示全部楼层
本帖最后由 尘缘一生 于 2013-1-25 22:55 编辑
ZZXXQQ 发表于 2013-1-25 22:28
1、对话框错误。


对话框哪里错?,缺少最上面一句话是吗?原先运行正常的;
编译整合后 ,DCL文件不能删除,保留运行正常,删除就缺少DCL。

点评

在2004下调试报错。4楼是改过的代码。  发表于 2013-1-25 22:55
 楼主| 发表于 2013-1-25 23:08:53 | 显示全部楼层
本帖最后由 尘缘一生 于 2013-1-25 23:15 编辑
尘缘一生 发表于 2013-1-25 22:44
对话框哪里错?,缺少最上面一句话是吗?原先运行正常的;
编译整合后 ,DCL文件不能删除,保留运行正 ...


我用改过的代码,编译仍然不成功。DCL文件加上绝对路径,可以编译成功运行,但是不能删除DCL文件LL.VLX独立运行。奇怪个事!!!!

点评

第一行代码是调试时加上的。这样可以生成错误文件。  发表于 2013-1-26 08:08
发表于 2013-1-25 23:14:40 | 显示全部楼层
这程序做嘛用的?看得我眼花
 楼主| 发表于 2013-1-25 23:17:43 | 显示全部楼层
本帖最后由 尘缘一生 于 2013-1-25 23:55 编辑
yjr111 发表于 2013-1-25 23:14
这程序做嘛用的?看得我眼花


干嘛用?

看了一下是【标注平行线之间间距尺寸】的:

             1:对话框输入标注的尺寸数值。
             2:选择平行的2根或多根线。
             3:拉动到旁边,自动出来标注,带着你输入的数值。


            

本帖子中包含更多资源

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

x

点评

把DCL直接写进lsp不就可以了?  发表于 2013-1-25 23:28
发表于 2013-1-25 23:35:58 | 显示全部楼层

这是编译好的,试下看

本帖子中包含更多资源

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

x
 楼主| 发表于 2013-1-25 23:45:51 | 显示全部楼层
本帖最后由 尘缘一生 于 2013-1-26 00:01 编辑
ZZXXQQ 发表于 2013-1-25 23:35
这是编译好的,试下看


感谢:
   
很成功,哪么你是在CAD哪个版本下整合的呢?

可是问题来啦:

    1:我怎么就编译不成功!DCL直接写进LISP也正在学,我也需要学会,再说,我很多啊,

         这工作大了去啦。我用的CAD是自己开发的一套系统。

    2:自己写过很多LISP,DCL程序,我都使用19年,是与PKPM配合严密的,最近要整合VLX。

    3:问题之所在到底在哪里?我不能一直麻烦大家吧?

    4:如果是CAD2004版本的VLISP不行,哪么我要升级,关键是这个问题吗?   
   


点评

偶用的就是2004编译的。用专业模式,将DCL打包进去。一编译有向导……  发表于 2013-1-26 08:04
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 15:35 , Processed in 0.224325 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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