请问幻灯片如何与按钮关联
<p></p><p></p><p>以上是对话框文件,请问如何才能实现点击按钮"左上"时在幻灯片显示的地方显示名为"左上"的幻灯片,点击按钮"右上"时在幻灯片显示的地方就切换为"右上"的幻灯片,以此类推......</p> 本帖最后由 作者 于 2008-6-30 8:22:24 编辑hjwt:dialog{
label="绘制虾壳弯头程序:M6";
:cluster {
:row { //建立横列元件
:image{key="img";width=36;height=12;color=-3;} //建立影象元件
} //关闭横列元件
: boxed_column { //带注释框的列,框名:"绘图数据:"
label="绘图数据:";
: edit_box {label="输入虾壳弯管外径:";key="DW";edit_width=6;}
: edit_box {label="输入虾接弯曲半径:";key="R";edit_width=6;}
: edit_box {label="输入虾接弯角角度:";key="V";edit_width=6;}
: edit_box {label="输入虾接切分数量:";key="N";edit_width=6;}
: button {label="(原点绘图)/拾取>>";key="pick";}
}
}
: radio_row {
key="htfx";
value="0°";
spacer;
:radio_button {label="左上";key="0°";}
spacer;
:radio_button {label="右上";key="90°";}
spacer;
:radio_button {label="右下";key="180°";}
spacer;
:radio_button {label="左下";key="270°";}
:toggle{label="标注";value=1;key="bz";}
spacer;
}
ok_cancel;
}
主程序:
……
(action_tile "htfx" "(showsld $value)")
……
子程序定义:
(defun showsld (stt / sldnm tile_v tile_h)
(cond
((= stt "0°") (setq sldnm "hdfx0.sld"))
((= stt "90°") (setq sldnm "hdfx90.sld"))
((= stt "180°") (setq sldnm "hdfx180.sld"))
((= stt "270°") (setq sldnm "hdfx270.sld"))
)
(start_image "img")
(setq tile_v (dimy_tile "img")
tile_h (dimx_tile "img"))
(fill_image 0 0 tile_h tile_v -3)
(slide_image 0 0 tile_h tile_v sldnm)
(end_image)
)
<p>感谢斑竹提示,使用以上程序后出现如下问题:</p><p>1,当初次显示对话框时:默认的"hdfx0.sld"不会自动显示,需点击"右上"或其他按钮后才会显示幻灯片图象.</p><p>2.:toggle{label="标注";value=1;key="bz";}这句失效,一旦点击则提示; error: bad argument type: stringp nil后退出.</p><p>请帮忙核查原因,谢谢</p> 将你的代码贴上来,不然没法找原因。 <p></p><p></p><p></p><p>麻烦斑竹了...</p> 本帖最后由 作者 于 2008-6-30 8:24:09 编辑
改了改,兼容R14版。
hjwt:dialog{
label="绘制虾壳弯头程序:M6";
:cluster {
:row { //建立横列元件
:image{key="img";width=36;height=12;color=-3;} //建立影象元件
} //关闭横列元件
: boxed_column { //带注释框的列,框名:"绘图数据:"
label="绘图数据:";
: edit_box {label="输入虾壳弯管外径:";key="DW";edit_width=6;}
: edit_box {label="输入虾接弯曲半径:";key="R";edit_width=6;}
: edit_box {label="输入虾接弯角角度:";key="V";edit_width=6;}
: edit_box {label="输入虾接切分数量:";key="N";edit_width=6;}
: button {label="(原点绘图)/拾取>>";key="pick";}
}
}
:toggle{label="标注";value="1";key="bz";}
: radio_row {
key="htfx";
value="a0";
spacer;
:radio_button {label="左上";key="a0";}
spacer;
:radio_button {label="右上";key="a90";}
spacer;
:radio_button {label="右下";key="a180";}
spacer;
:radio_button {label="左下";key="a270";}
spacer;
}
ok_cancel;
}
; 绘制虾壳管
;程序成功调入提示信息
(if (> (ATOI (GETVAR "ACADVER")) 18) (setvar "AUTOSNAP" 47));打开极轴
(if (> (atoi (getvar "ACADVER")) 14) (setvar "osmode" 15359)) ;恢复对象捕捉
(princ "\n欢迎使用虾壳管弯头绘制程序,需要启动请敲: hjwt")
;;;;;;;;;;取得由对话框输入的关键值模块;;;;;;;;;
(defun getdata () ;用于取得由对话框输入的关键值
(setq DW (atof (get_tile "DW")) ;抽取对话框D并付值于D
R(atof (get_tile "R")) ;抽取对话框R并付值于R
V(atof (get_tile "V")) ;抽取对话框V并付值于V
N(atof (get_tile "N")) ;抽取对话框N并付值于N
)
(prin1 (get_tile "bz"))
(setq A90(atoi (get_tile "a90"))
A180 (atoi (get_tile "a180"))
A270 (atoi (get_tile "a270"))
htfx (get_tile "htfx")
)
(setq bz (atoi (get_tile "bz")))
)
;;;;;;;;;;;标注尺寸;;;;;;;;;
(defun bzcc ()
(command "_dimaligned" PT1 PT3 d1 "_dimaligned" PT4 PT2 d2)
)
;;;;;;;;;;;变化坐标;;;;;;;;
(defun xgzbx1 () (command "_ucs" "y" "180"))
(defun xgzbx2 () (command "_ucs" "z" "180"))
(defun xgzbx3 () (command "_ucs" "x" "180"))
;;;;;;;;;;数据处理模块;;;;;;;;
(defun cal_draw ()
(setq Y1 0 ;为变量x1赋初值
X1 0 ;为变量y1赋初值
pt1 (list X1 Y1) ;将坐标X1,Y1赋给PT1点
pt2 (list Y1 X1) ;将坐标Y1,X1赋给PT2点
A (- R (/ DW 2))
B (+ R (/ DW 2))
Y (* (/ (/ V (* (- N 1) 2)) 180) PI)
X1A
X2B
Y10
Y20
PT1 (list X1 Y1) ;将坐标X1,Y1赋给PT1点
PT2 (list X2 Y2) ;将坐标X2,Y2赋给PT2点
TT1
)
(setvar "osmode" 0) ;关闭对象捕捉
(if (= A90 1) (xgzbx1))
(if (= A180 1) (xgzbx2))
(if (= A270 1) (xgzbx3))
(command ".pline" PT1 PT2 "") ;用多义线连接点PT1,PT2
(setq A (/ A (cos Y))
B (/ B (cos Y))
)
(while (< TT (* (- N 1) 2)) ;如果TT<(N-1)*2,就执行以下程序
(setq X3(* (cos (* Y TT)) A)
y3(* (sin (* Y TT)) A)
X4(* (cos (* Y TT)) B)
y4(* (sin (* Y TT)) B)
pt3 (list X3 Y3) ;将坐标X3,Y3赋给PT3点
pt4 (list X4 Y4) ;将坐标X4,Y4赋给PT4点
XC1 (/ (+ X1 X2) 2) ;计算点C1的X坐标值
XC2 (/ (+ X3 X4) 2) ;计算坐C2的X坐标值
YC1 (/ (+ Y1 Y2) 2) ;计算坐C1的Y坐标值
YC2 (/ (+ Y3 Y4) 2) ;计算坐C2的Y坐标值
C1(list XC1 YC1) ;将坐标XC1,YC1赋给C1点
C2(list XC2 YC2) ;将坐标XC2,YC2赋给C2点
)
(command ".pline" PT1 PT3 PT4 PT2 "");用多义线连接点PT1,PT3,PT4,PT2
(setq Xd1 (- (/ (+ X1 X3) 2) 20) ;计算点d1的X坐标值
Xd2 (+ (/ (+ X2 X4) 2) 20) ;计算坐d2的X坐标值
Yd1 (- (/ (+ Y1 Y3) 2) 20) ;计算坐d1的Y坐标值
Yd2 (+ (/ (+ Y2 Y4) 2) 20) ;计算坐d2的Y坐标值
d1(list Xd1 Yd1) ;将坐标Xd1,Yd1赋给d1点
d2(list Xd2 Yd2) ;将坐标Xd2,Yd2赋给d2点
)
(command ".line" C1 C2 "") ;用多义线连接点C1,C2
;标注PT1到PT3的距离,标注PT4到PT2的距离
(if (= bz 1) (bzcc)) ;如果bz值为1.0,执行bzcc
(setq X1X3
X2X4
Y1Y3
Y2Y4
PT1 PT3
PT2 PT4
TT(+ TT 2)
)
)
(setq A (- R (/ DW 2))
B (+ R (/ DW 2))
X3(* (cos (* (/ V 180) PI)) A)
y3(* (sin (* (/ V 180) PI)) A)
X4(* (cos (* (/ V 180) PI)) B)
y4(* (sin (* (/ V 180) PI)) B)
pt3 (list X3 Y3) ;将坐标X3,Y3赋给PT3点
pt4 (list X4 Y4) ;将坐标X4,Y4赋给PT4点
XC1 (/ (+ X1 X2) 2) ;计算点C1的X坐标值
XC2 (/ (+ X3 X4) 2) ;计算坐C2的X坐标值
YC1 (/ (+ Y1 Y2) 2) ;计算坐C1的Y坐标值
YC2 (/ (+ Y3 Y4) 2) ;计算坐C2的Y坐标值
C1(list XC1 YC1) ;将坐标XC1,YC1赋给C1点
C2(list XC2 YC2) ;将坐标XC2,YC2赋给C2点
)
;用直线连接点PT1,PT3,PT4,PT2,C1,C2
(command ".Pline" PT1 PT3 PT4 PT2 "" ".line" C1 C2 "")
(setq Xd1 (- (/ (+ X1 X3) 2) 20) ;计算点d1的X坐标值
Xd2 (+ (/ (+ X2 X4) 2) 20) ;计算坐d2的X坐标值
Yd1 (- (/ (+ Y1 Y3) 2) 20) ;计算坐d1的Y坐标值
Yd2 (+ (/ (+ Y2 Y4) 2) 20) ;计算坐d2的Y坐标值
d1(list Xd1 Yd1) ;将坐标Xd1,Yd1赋给d1点
d2(list Xd2 Yd2) ;将坐标Xd2,Yd2赋给d2点
)
(if (= bz 1) (bzcc)) ;如果bz值为1.0,执行bzcc
)
;;;;;;;;;;调取幻灯片;;;;;;;;;
(defun showsld (stt / sldnm tile_v tile_h)
(cond
((= stt "a0") (setq sldnm "htfx0.sld"))
((= stt "a90") (setq sldnm "htfx90.sld"))
((= stt "a180") (setq sldnm "htfx180.sld"))
((= stt "a270") (setq sldnm "htfx270.sld"))
)
(start_image "img")
(setq tile_v (dimy_tile "img")
tile_h (dimx_tile "img"))
(fill_image 0 0 tile_h tile_v -3)
(slide_image 0 0 tile_h tile_v sldnm)
(end_image)
)
;;;;;;;;;;;;;主程序模块
(defun C:hjwt ()
(if (> (atoi (getvar "ACADVER")) 18) (setvar "DYNmode" 0)) ;关闭动态输入
(setq oldos (getvar "OSMODE"))
(setvar "cmdecho" 0) ;关闭命令行回现功能
(setq DW 1000 ;给变量赋初值
R 1000
V 45
N 3
x 0
y 0
z 0
re 3
)
(if (> (setq id (load_dialog "hjwt")) 0) (progn ;加载 DCL 文件
(while (> re 1)
(if (new_dialog "hjwt" id) (progn
(set_tile "DW" (rtos DW 2 2))
(set_tile "R" (rtos R 2 2))
(set_tile "V" (rtos V 2 2))
(set_tile "N" (rtos N 2 2))
(setq bz (atoi (get_tile "bz")))
(setq a90(get_tile "a90")
a180 (get_tile "a180")
a270 (get_tile "a270")
htfx (get_tile "htfx")
)
(if (= what 3) (showsld "a0"))
(action_tile "htfx" "(showsld $value)")
(action_tile "pick" "(done_dialog 2)")
(action_tile "accept" "(getdata)(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
(setq re (start_dialog))
(if (= re 2) (progn
(initget 1)
(setq pt_base (getpoint "\n选取绘图点位置:")
x (car pt_base)
y (cadr pt_base)
z (caddr pt_base)
)
(setq re 2)
))
)
(alert "Unable to display dialog box!\n无法显示对话框!")
)
)
(unload_dialog id) ;卸载该对话框
)
(alert "Unable to load dialog box!\n无法装载对话框!")
)
(if (= re 1) (progn
(setq pt_base (list x y z))
(command ".ucs" "o" pt_base)
(cal_draw)
(PROMPT "\n本次绘图成功!")
)
(PROMPT "\n您已取消了本次操作!")
)
(if (> (atoi (getvar "ACADVER")) 14) (setvar "AUTOSNAP" 47));打开极轴
(setvar "osmode" oldos) ;恢复对象捕捉
(command ".ucs" "w")
(princ)
)
改了改,兼容R14版。
hjwt:dialog{
label="绘制虾壳弯头程序:M6";
:cluster {
:row { //建立横列元件
:image{key="img";width=36;height=12;color=-3;} //建立影象元件
} //关闭横列元件
: boxed_column { //带注释框的列,框名:"绘图数据:"
label="绘图数据:";
: edit_box {label="输入虾壳弯管外径:";key="DW";edit_width=6;}
: edit_box {label="输入虾接弯曲半径:";key="R";edit_width=6;}
: edit_box {label="输入虾接弯角角度:";key="V";edit_width=6;}
: edit_box {label="输入虾接切分数量:";key="N";edit_width=6;}
: button {label="(原点绘图)/拾取>>";key="pick";}
}
}
: radio_row {
key="htfx";
value="a0";
spacer;
:radio_button {label="左上";key="a0";}
spacer;
:radio_button {label="右上";key="a90";}
spacer;
:radio_button {label="右下";key="a180";}
spacer;
:radio_button {label="左下";key="a270";}
spacer;
:toggle{label="标注";value="1";key="bz";}
}
ok_cancel;
}
; 绘制虾壳管
;程序成功调入提示信息
(if (> (ATOI (GETVAR "ACADVER")) 18) (setvar "AUTOSNAP" 47));打开极轴
(if (> (atoi (getvar "ACADVER")) 14) (setvar "osmode" 15359)) ;恢复对象捕捉
(princ "\n欢迎使用虾壳管弯头绘制程序,需要启动请敲: hjwt")
;;;;;;;;;;取得由对话框输入的关键值模块;;;;;;;;;
(defun getdata () ;用于取得由对话框输入的关键值
(setq DW (atof (get_tile "DW")) ;抽取对话框D并付值于D
R(atof (get_tile "R")) ;抽取对话框R并付值于R
V(atof (get_tile "V")) ;抽取对话框V并付值于V
N(atof (get_tile "N")) ;抽取对话框N并付值于N
)
(prin1 (get_tile "bz"))
(setq A90(atoi (get_tile "a90"))
A180 (atoi (get_tile "a180"))
A270 (atoi (get_tile "a270"))
htfx (get_tile "htfx")
)
(setq bz (atoi (get_tile "bz")))
)
;;;;;;;;;;;标注尺寸;;;;;;;;;
(defun bzcc ()
(command "_dimaligned" PT1 PT3 d1 "_dimaligned" PT4 PT2 d2)
)
;;;;;;;;;;;变化坐标;;;;;;;;
(defun xgzbx1 () (command "_ucs" "y" "180"))
(defun xgzbx2 () (command "_ucs" "z" "180"))
(defun xgzbx3 () (command "_ucs" "x" "180"))
;;;;;;;;;;数据处理模块;;;;;;;;
(defun cal_draw ()
(setq Y1 0 ;为变量x1赋初值
X1 0 ;为变量y1赋初值
pt1 (list X1 Y1) ;将坐标X1,Y1赋给PT1点
pt2 (list Y1 X1) ;将坐标Y1,X1赋给PT2点
A (- R (/ DW 2))
B (+ R (/ DW 2))
Y (* (/ (/ V (* (- N 1) 2)) 180) PI)
X1A
X2B
Y10
Y20
PT1 (list X1 Y1) ;将坐标X1,Y1赋给PT1点
PT2 (list X2 Y2) ;将坐标X2,Y2赋给PT2点
TT1
)
(setvar "osmode" 0) ;关闭对象捕捉
(if (= A90 1) (xgzbx1))
(if (= A180 1) (xgzbx2))
(if (= A270 1) (xgzbx3))
(command ".pline" PT1 PT2 "") ;用多义线连接点PT1,PT2
(setq A (/ A (cos Y))
B (/ B (cos Y))
)
(while (< TT (* (- N 1) 2)) ;如果TT<(N-1)*2,就执行以下程序
(setq X3(* (cos (* Y TT)) A)
y3(* (sin (* Y TT)) A)
X4(* (cos (* Y TT)) B)
y4(* (sin (* Y TT)) B)
pt3 (list X3 Y3) ;将坐标X3,Y3赋给PT3点
pt4 (list X4 Y4) ;将坐标X4,Y4赋给PT4点
XC1 (/ (+ X1 X2) 2) ;计算点C1的X坐标值
XC2 (/ (+ X3 X4) 2) ;计算坐C2的X坐标值
YC1 (/ (+ Y1 Y2) 2) ;计算坐C1的Y坐标值
YC2 (/ (+ Y3 Y4) 2) ;计算坐C2的Y坐标值
C1(list XC1 YC1) ;将坐标XC1,YC1赋给C1点
C2(list XC2 YC2) ;将坐标XC2,YC2赋给C2点
)
(command ".pline" PT1 PT3 PT4 PT2 "");用多义线连接点PT1,PT3,PT4,PT2
(setq Xd1 (- (/ (+ X1 X3) 2) 20) ;计算点d1的X坐标值
Xd2 (+ (/ (+ X2 X4) 2) 20) ;计算坐d2的X坐标值
Yd1 (- (/ (+ Y1 Y3) 2) 20) ;计算坐d1的Y坐标值
Yd2 (+ (/ (+ Y2 Y4) 2) 20) ;计算坐d2的Y坐标值
d1(list Xd1 Yd1) ;将坐标Xd1,Yd1赋给d1点
d2(list Xd2 Yd2) ;将坐标Xd2,Yd2赋给d2点
)
(command ".line" C1 C2 "") ;用多义线连接点C1,C2
;标注PT1到PT3的距离,标注PT4到PT2的距离
(if (= bz 1) (bzcc)) ;如果bz值为1.0,执行bzcc
(setq X1X3
X2X4
Y1Y3
Y2Y4
PT1 PT3
PT2 PT4
TT(+ TT 2)
)
)
(setq A (- R (/ DW 2))
B (+ R (/ DW 2))
X3(* (cos (* (/ V 180) PI)) A)
y3(* (sin (* (/ V 180) PI)) A)
X4(* (cos (* (/ V 180) PI)) B)
y4(* (sin (* (/ V 180) PI)) B)
pt3 (list X3 Y3) ;将坐标X3,Y3赋给PT3点
pt4 (list X4 Y4) ;将坐标X4,Y4赋给PT4点
XC1 (/ (+ X1 X2) 2) ;计算点C1的X坐标值
XC2 (/ (+ X3 X4) 2) ;计算坐C2的X坐标值
YC1 (/ (+ Y1 Y2) 2) ;计算坐C1的Y坐标值
YC2 (/ (+ Y3 Y4) 2) ;计算坐C2的Y坐标值
C1(list XC1 YC1) ;将坐标XC1,YC1赋给C1点
C2(list XC2 YC2) ;将坐标XC2,YC2赋给C2点
)
;用直线连接点PT1,PT3,PT4,PT2,C1,C2
(command ".Pline" PT1 PT3 PT4 PT2 "" ".line" C1 C2 "")
(setq Xd1 (- (/ (+ X1 X3) 2) 20) ;计算点d1的X坐标值
Xd2 (+ (/ (+ X2 X4) 2) 20) ;计算坐d2的X坐标值
Yd1 (- (/ (+ Y1 Y3) 2) 20) ;计算坐d1的Y坐标值
Yd2 (+ (/ (+ Y2 Y4) 2) 20) ;计算坐d2的Y坐标值
d1(list Xd1 Yd1) ;将坐标Xd1,Yd1赋给d1点
d2(list Xd2 Yd2) ;将坐标Xd2,Yd2赋给d2点
)
(if (= bz 1) (bzcc)) ;如果bz值为1.0,执行bzcc
)
;;;;;;;;;;调取幻灯片;;;;;;;;;
(defun showsld (stt / sldnm tile_v tile_h)
(cond
((= stt "a0") (setq sldnm "htfx0.sld"))
((= stt "a90") (setq sldnm "htfx90.sld"))
((= stt "a180") (setq sldnm "htfx180.sld"))
((= stt "a270") (setq sldnm "htfx270.sld"))
)
(start_image "img")
(setq tile_v (dimy_tile "img")
tile_h (dimx_tile "img"))
(fill_image 0 0 tile_h tile_v -3)
(slide_image 0 0 tile_h tile_v sldnm)
(end_image)
)
;;;;;;;;;;;;;主程序模块
(defun C:hjwt ()
(if (> (atoi (getvar "ACADVER")) 18) (setvar "DYNmode" 0)) ;关闭动态输入
(setq oldos (getvar "OSMODE"))
(setvar "cmdecho" 0) ;关闭命令行回现功能
(setq DW 1000 ;给变量赋初值
R 1000
V 45
N 3
x 0
y 0
z 0
re 3
)
(if (> (setq id (load_dialog "hjwt")) 0) (progn ;加载 DCL 文件
(while (> re 1)
(if (new_dialog "hjwt" id) (progn
(set_tile "DW" (rtos DW 2 2))
(set_tile "R" (rtos R 2 2))
(set_tile "V" (rtos V 2 2))
(set_tile "N" (rtos N 2 2))
(setq bz (atoi (get_tile "bz")))
(setq a90(get_tile "a90")
a180 (get_tile "a180")
a270 (get_tile "a270")
htfx (get_tile "htfx")
)
(if (= what 3) (showsld "a0"))
(action_tile "htfx" "(showsld $value)")
(action_tile "pick" "(done_dialog 2)")
(action_tile "accept" "(getdata)(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
(setq re (start_dialog))
(if (= re 2) (progn
(initget 1)
(setq pt_base (getpoint "\n选取绘图点位置:")
x (car pt_base)
y (cadr pt_base)
z (caddr pt_base)
)
(setq re 2)
))
)
(alert "Unable to display dialog box!\n无法显示对话框!")
)
)
(unload_dialog id) ;卸载该对话框
)
(alert "Unable to load dialog box!\n无法装载对话框!")
)
(if (= re 1) (progn
(setq pt_base (list x y z))
(command ".ucs" "o" pt_base)
(cal_draw)
(PROMPT "\n本次绘图成功!")
)
(PROMPT "\n您已取消了本次操作!")
)
(if (> (atoi (getvar "ACADVER")) 14) (setvar "AUTOSNAP" 47));打开极轴
(setvar "osmode" oldos) ;恢复对象捕捉
(command ".ucs" "w")
(princ)
)
<p>报告"ZZXXQQ"程序已试用,三楼问题依然存在.</p><p>1,当初次显示对话框时:默认的"hdfx0.sld"不会自动显示,需点击"右上"或其他按钮后才会显示幻灯片图象.</p><p>2.:toggle{label="标注";value=1;key="bz";}这句失效(即用户想不标注时),一旦点击,则提示"error: bad argument type: stringp nil"后退出.</p><p>请看看哪里原因</p> 对话框有误。
hjwt:dialog{
label="绘制虾壳弯头程序:M6";
:cluster {
:row { //建立横列元件
:image{key="img";width=36;height=12;color=-3;} //建立影象元件
} //关闭横列元件
: boxed_column { //带注释框的列,框名:"绘图数据:"
label="绘图数据:";
: edit_box {label="输入虾壳弯管外径:";key="DW";edit_width=6;}
: edit_box {label="输入虾接弯曲半径:";key="R";edit_width=6;}
: edit_box {label="输入虾接弯角角度:";key="V";edit_width=6;}
: edit_box {label="输入虾接切分数量:";key="N";edit_width=6;}
: button {label="(原点绘图)/拾取>>";key="pick";}
:toggle{label="标注";value="1";key="bz";}
}
}
: radio_row {
key="htfx";
value="a0";
spacer;
:radio_button {label="左上";key="a0";}
spacer;
:radio_button {label="右上";key="a90";}
spacer;
:radio_button {label="右下";key="a180";}
spacer;
:radio_button {label="左下";key="a270";}
spacer;
}
ok_cancel;
}
好奇怪,为什么"标注"不能与那些选项在同一行呢???
页:
[1]
2