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 22:48 编辑
我是在CAD2004下整合的,难道版本低吗?
应该没有问题才对
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:55 编辑
ZZXXQQ 发表于 2013-1-25 22:28 http://bbs.mjtd.com/static/image/common/back.gif
1、对话框错误。
对话框哪里错?,缺少最上面一句话是吗?原先运行正常的;
编译整合后 ,DCL文件不能删除,保留运行正常,删除就缺少DCL。
本帖最后由 尘缘一生 于 2013-1-25 23:15 编辑
尘缘一生 发表于 2013-1-25 22:44 http://bbs.mjtd.com/static/image/common/back.gif
对话框哪里错?,缺少最上面一句话是吗?原先运行正常的;
编译整合后 ,DCL文件不能删除,保留运行正 ...
我用改过的代码,编译仍然不成功。DCL文件加上绝对路径,可以编译成功运行,但是不能删除DCL文件LL.VLX独立运行。奇怪个事!!!! 这程序做嘛用的?看得我眼花 本帖最后由 尘缘一生 于 2013-1-25 23:55 编辑
yjr111 发表于 2013-1-25 23:14 http://bbs.mjtd.com/static/image/common/back.gif
这程序做嘛用的?看得我眼花
干嘛用?
看了一下是【标注平行线之间间距尺寸】的:
1:对话框输入标注的尺寸数值。
2:选择平行的2根或多根线。
3:拉动到旁边,自动出来标注,带着你输入的数值。
这是编译好的,试下看
本帖最后由 尘缘一生 于 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不行,哪么我要升级,关键是这个问题吗?