尘缘一生 发表于 2013-1-25 17:02:48

lisp,dcl编译成VLX不能显示DCL

本帖最后由 尘缘一生 于 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,遇到困难!!!



尘缘一生 发表于 2013-1-25 21:29:06

本帖最后由 尘缘一生 于 2013-1-25 22:48 编辑

我是在CAD2004下整合的,难道版本低吗?

alwtyp 发表于 2013-1-25 22:17:16

应该没有问题才对

ZZXXQQ 发表于 2013-1-25 22:28:48

1、对话框错误。
dcl_settings:default_dcl_settings{audit_level=3;}
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;
}

尘缘一生 发表于 2013-1-25 22:44:28

本帖最后由 尘缘一生 于 2013-1-25 22:55 编辑

ZZXXQQ 发表于 2013-1-25 22:28 http://bbs.mjtd.com/static/image/common/back.gif
1、对话框错误。

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

尘缘一生 发表于 2013-1-25 23:08:53

本帖最后由 尘缘一生 于 2013-1-25 23:15 编辑

尘缘一生 发表于 2013-1-25 22:44 http://bbs.mjtd.com/static/image/common/back.gif
对话框哪里错?,缺少最上面一句话是吗?原先运行正常的;
编译整合后 ,DCL文件不能删除,保留运行正 ...

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

yjr111 发表于 2013-1-25 23:14:40

这程序做嘛用的?看得我眼花

尘缘一生 发表于 2013-1-25 23:17:43

本帖最后由 尘缘一生 于 2013-1-25 23:55 编辑

yjr111 发表于 2013-1-25 23:14 http://bbs.mjtd.com/static/image/common/back.gif
这程序做嘛用的?看得我眼花

干嘛用?

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

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

            

ZZXXQQ 发表于 2013-1-25 23:35:58


这是编译好的,试下看

尘缘一生 发表于 2013-1-25 23:45:51

本帖最后由 尘缘一生 于 2013-1-26 00:01 编辑

ZZXXQQ 发表于 2013-1-25 23:35 http://bbs.mjtd.com/static/image/common/back.gif
这是编译好的,试下看

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

可是问题来啦:

    1:我怎么就编译不成功!DCL直接写进LISP也正在学,我也需要学会,再说,我很多啊,
         这工作大了去啦。我用的CAD是自己开发的一套系统。

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

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

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


页: [1] 2 3
查看完整版本: lisp,dcl编译成VLX不能显示DCL