Rod PP 发表于 2022-7-6 08:02:49

基本lisp+dcl=(条件

好的,我们又来了,
我对它上瘾了。
我一直在努力。
 
我给DCL 3个选项开始,从左,右或从顶部打开窗扇。
 
我理解我必须处理IF条件。我试了几次,没有前进。
有人能帮我吗?请.=)
 
Lisp程序
(defun c:w1 ()
(setq dcl_id (load_dialog "w1_dcl.dcl"))
(if (not (new_dialog "w1_dcl" dcl_id))
   (exit)
)
(action_tile "LL" "(setq LW (distof $value))")
(action_tile "HH" "(setq HW (distof $value))")
(action_tile "OO" "(setq OW (distof $value))")

; NOW THAT WONT MAKE ANY SENSE, BUT ITS PART OF ME TRYING
(action_tile "SL" "(setq SL (getvar)")
(action_tile "SR" "(setq SR (getvar)")
(action_tile "ST" "(setq ST (getvar)")

(action_tile "accept" "(done_dialog 1)")
(start_dialog)
(unload_dialog dcl_id)
(defun dtr (x) (* pi (/ x 180.0)))
(defun w1_act ()
(setq b1 (getpoint "\nPick Point: "))
(setq b2 (polar B1 (dtr 90.0) HW))
(setq b3 (polar b2 (dtr 0.0) LW))
(setq b4 (polar B1 (dtr 0.0) LW))
(setq bi1 (polar B1 (dtr 0.0) OW))
(setq i1 (polar bi1 (dtr 90.0) OW))
(setq i2 (polar i1 (dtr 90.0) (- HW (* 2 OW))))
(setq i3 (polar i2 (dtr 0.0) (- LW (* 2 OW))))
(setq i4 (polar i1 (dtr 0.0) (- LW (* 2 OW))))
(setq SIL (polar i1 (dtr 90.0) (- (/ HW 2) OW)))
(setq SIR (polar i4 (dtr 90.0) (- (/ HW 2) OW)))
(setq SIT (polar i2 (dtr 0.0) (- (/ LW 2) OW)))
(setq is1 (polar i1 (dtr 0.0) OW))
(setq s1 (polar is1 (dtr 90.0) OW))
(setq s2 (polar s1 (dtr 90.0) (- HW (* 4 OW))))
(setq s3 (polar s2 (dtr 0.0) (- LW (* 4 OW))))
(setq s4 (polar s1 (dtr 0.0) (- LW (* 4 OW))))
(command "._Layer" "M" "APL Frame" "C" "150" "" "")
; DRAWS THE MAIN FRAME
(command
"PLine" B1 b2 b3 b4 "c"
"PLine" i1 i2 i3 i4 "c"
"PLine" B1 i1 ""
"PLine" b2 i2 ""
"PLine" b3 i3 ""
"PLine" b4 i4 ""
)
; DRAWS SASH TO LEFT - CONDITION TO VARIABLE "SL"
(command
"PLine" s1 s2 s3 s4 "c"
"PLine" i4 SIL i3 ""
)
; DRAWS SASH TO RIGHT - CONDITION TO VARIABLE "SR"
(command
"PLine" s1 s2 s3 s4 "c"
"PLine" i1 SIR i2 ""
)
; DRAWS SASH TO TOP - CONDITION TO VARIABLE "ST"
(command
"PLine" s1 s2 s3 s4 "c"
"PLine" i1 SIT i4 ""
)


(princ)
)
(w1_act)
(princ)
)
 
DCL
w1_dcl
: dialog

{

label = "SASHED 1 PANEL";
:row
{
:column
{

: edit_box
{
label = "Lenght :";
mnemonic = "L";
key = "LL";
alignment = centered;
edit_limit = 5;
edit_width = 5;
}
: edit_box
{
label = "Height :";
mnemonic = "H";
key = "HH";
alignment = centered;
edit_limit = 5;
edit_width = 5;
value = "";
}
: edit_box
{
label = "Frame :";
mnemonic = "O";
key = "OO";
alignment = centered;
edit_limit = 5;
edit_width = 5;
value = "50";
}
: button{
key = "accept";
label = "Insert";
mnemonic = "I";
is_default = true;
fixed_width = true;
alignment = right;
}
}

:column
{
:radio_button{label="Left";
key="SL";
}
:radio_button{label="Right";
key="SR";
}
:radio_button{label="Top";
key="ST";
}
: button{
key = "cancel";
label = "Cancel";
mnemonic = "C";
fixed_width = true;
alignment = right;
}
}
}
}

pBe 发表于 2022-7-6 08:06:44

(action_tile "SL" "(setq SL $value)")
(action_tile "SR" "(setq SR $value)")
(action_tile "ST" "(setq ST $value)")
 
 
; DRAWS SASH TO LEFT - CONDITION TO VARIABLE "SL"
(cond
   ((eq SL "1")(command "PLine" s1 s2 s3 s4 "c"
   "PLine" i4 SIL i3 "")
   )
; DRAWS SASH TO RIGHT - CONDITION TO VARIABLE "SR"
   ((eq SR "1")(command "PLine" s1 s2 s3 s4 "c"
"PLine" i1 SIR i2 "")
   )
; DRAWS SASH TO TOP - CONDITION TO VARIABLE "ST"
   ((eq ST "1")(command"PLine" s1 s2 s3 s4 "c"
"PLine" i1 SIT i4 "")
)
   )

Rod PP 发表于 2022-7-6 08:11:03

在我能理解一切之前,我先复制并粘贴尝试。
但是它不起作用。
我复制、粘贴、保存例程,再次加载,然后尝试,但没有成功。
=(
 
对不起,我不知道我做错了什么。
我甚至尝试添加另一个cond(se用户想要斜接角落)
 
检查整个代码:
 
(defun c:w1 ()
(setq dcl_id (load_dialog "w1_dcl.dcl"))
(if (not (new_dialog "w1_dcl" dcl_id))
   (exit)
)
(action_tile "LL" "(setq LW (distof $value))")
(action_tile "HH" "(setq HW (distof $value))")
(action_tile "OO" "(setq OW (distof $value))")
(action_tile "SL" "(setq SL $value)")
(action_tile "SR" "(setq SR $value)")
(action_tile "ST" "(setq ST $value)")
(action_tile "M" "(setq M $value)")
(action_tile "accept" "(done_dialog 1)")
(start_dialog)
(unload_dialog dcl_id)
(defun dtr (x) (* pi (/ x 180.0)))
(defun w1_act ()
(setq b1 (getpoint "\nPick Point: "))
(setq b2 (polar B1 (dtr 90.0) HW))
(setq b3 (polar b2 (dtr 0.0) LW))
(setq b4 (polar B1 (dtr 0.0) LW))
(setq bi1 (polar B1 (dtr 0.0) OW))
(setq i1 (polar bi1 (dtr 90.0) OW))
(setq i2 (polar i1 (dtr 90.0) (- HW (* 2 OW))))
(setq i3 (polar i2 (dtr 0.0) (- LW (* 2 OW))))
(setq i4 (polar i1 (dtr 0.0) (- LW (* 2 OW))))
(setq SIL (polar i1 (dtr 90.0) (- (/ HW 2) OW)))
(setq SIR (polar i4 (dtr 90.0) (- (/ HW 2) OW)))
(setq SIT (polar i2 (dtr 0.0) (- (/ LW 2) OW)))
(setq is1 (polar i1 (dtr 0.0) OW))
(setq s1 (polar is1 (dtr 90.0) OW))
(setq s2 (polar s1 (dtr 90.0) (- HW (* 4 OW))))
(setq s3 (polar s2 (dtr 0.0) (- LW (* 4 OW))))
(setq s4 (polar s1 (dtr 0.0) (- LW (* 4 OW))))
(command "._Layer" "M" "APL Frame" "C" "150" "" "")
; DRAWS THE MAIN FRAME
(command
"PLine" B1 b2 b3 b4 "c"
"PLine" i1 i2 i3 i4 "c"
"PLine" s1 s2 s3 s4 "c"
)
(cond
((eq M "1")
(command
"PLine" B1 i1 ""
"PLine" b2 i2 ""
"PLine" b3 i3 ""
"PLine" b4 i4 ""
))
)

(cond

; DRAWS SASH TO LEFT
   (
   (eq SL "1")
   (command "PLine" i4 SIL i3 "")
   )
; DRAWS SASH TO RIGHT
   (
   (eq SR "1")
   (command "PLine" i1 SIR i2 "")
   )
; DRAWS SASH TO TOP
   (
   (eq ST "1")
   (command "PLine" i1 SIT i4 "")
   )
)
(princ)
)
(w1_act)
(princ)
)
 
w1_dcl
: dialog

{

label = "SASHED 1 PANEL";
:row
{
:column
{

: edit_box
{
label = "Lenght :";
mnemonic = "L";
key = "LL";
alignment = centered;
edit_limit = 5;
edit_width = 5;
}
: edit_box
{
label = "Height :";
mnemonic = "H";
key = "HH";
alignment = centered;
edit_limit = 5;
edit_width = 5;
value = "";
}
: edit_box
{
label = "Frame :";
mnemonic = "O";
key = "OO";
alignment = centered;
edit_limit = 5;
edit_width = 5;
value = "50";
}
: button{
key = "accept";
label = "Insert";
mnemonic = "I";
is_default = true;
fixed_width = true;
alignment = right;
}
}
:column
{
:radio_button{label="Left";
key="SL";
}
:radio_button{label="Right";
key="SR";
}
:radio_button{label="Top";
key="ST";
}
: button{
key = "cancel";
label = "Cancel";
mnemonic = "C";
fixed_width = true;
alignment = right;
}
}
}
      :toggle{
   key="M";
   label="Mitre corners";
   value="1";
   }


}

pBe 发表于 2022-7-6 08:14:15

我希望你还记得你在之前的帖子里学到了什么?
 
真的棒PP,它怎么可能不工作(假设它在修改之前为您工作),当我所做的只是更换了几行。
 
再试一次,伙计。相信我,你需要了解这里的情况。

Rod PP 发表于 2022-7-6 08:18:14

pBe,
...伙计。。。谢谢你的光临。。但是曼。。。它不起作用。不知道为什么。
使用上述代码,我已经改变了一些事情,添加了新的“cond”的东西,以米特选项,因为我说。。。
但是
斜接无法绘制,它仅将窗扇绘制到左侧。其他人不会改变任何事情。
=(
 
 
另外,如果我按ESC键,或者单击Cancel,它也不起作用,我只是注意到了它。我总是要插入。
*叹气*
 
伙计。。。。英雄联盟这是我的第三天。。。不容易。呵呵

pBe 发表于 2022-7-6 08:21:20

 
这就是最终的结果吗

 
 
您尚未定义“取消”键的操作。

Rod PP 发表于 2022-7-6 08:22:38

还有一件事。。。
事实上,如果我试着从左到右不同的东西,它是有效的。。
例如,如果我插入一个带有斜接的1000x1000x50顶部。。它确实画得很完美,顶部,没有斜接角。
然后,我尝试插入一个1000x1000x50左与斜接。。它有时没有内框,有时没有外框,总是没有斜接角,然后总是使用左。。一旦我使用LEFT,即使我选择了TOP或RIGHT,它也不会改变。
这有意义吗?
有时候台词非常疯狂。
 
请参见下图中的疯狂线条:
http://img803.imageshack.us/img803/8629/28638174.jpg
与ImageShack一起上载。我们

Rod PP 发表于 2022-7-6 08:27:11

是的,应该是这样的。。英雄联盟
 
我试图在这里添加一条附有图片的消息,但我需要版主的许可才能显示它。
但是。。
 
我的结果和你的不一样。
=(
有时内部框架无法绘制
有时外部框架无法绘制
有时这些线非常疯狂,不垂直于任何东西,将点连接在一起。
斜接的角落永远也画不出来。

pBe 发表于 2022-7-6 08:30:05

它确实很吸引人,我猜你有活跃的睡眠。
(setvar“osmode 0)
 
你能处理“取消”这件事吗?
 
(defun c:w1 ( / SL SR ST)
(setq dcl_id (load_dialog "w1_dcl.dcl"))
(if (not (new_dialog "w1_dcl" dcl_id))
   (exit)
)   
(set_tile "LL" (if (null LW) "0.00" (rtos LW 2 2)))
(set_tile "HH" (if (null HW) "0.00" (rtos HW 2 2)))
(set_tile "OO" (if (null OW) "0.00" (rtos OW 2 2)))   
(action_tile "LL" "(setq LW (distof $value))")
(action_tile "HH" "(setq HW (distof $value))")
(action_tile "OO" "(setq OW (distof $value))")

; NOW THAT WONT MAKE ANY SENSE, BUT ITS PART OF ME TRYING
(action_tile "SL" "(setq SL $value)")
(action_tile "SR" "(setq SR $value)")
(action_tile "ST" "(setq ST $value)")

(action_tile "accept" "(setq pik T)(done_dialog 1)")
(action_tile "cancel" "(setq pik nil)(done_dialog 0)")   
(start_dialog)
(unload_dialog dcl_id)
(defun dtr (x) (* pi (/ x 180.0)))
(defun w1_act ()
(setq b1 (getpoint "\nPick Point: "))
(setq b2 (polar B1 (dtr 90.0) HW))
(setq b3 (polar b2 (dtr 0.0) LW))
(setq b4 (polar B1 (dtr 0.0) LW))
(setq bi1 (polar B1 (dtr 0.0) OW))
(setq i1 (polar bi1 (dtr 90.0) OW))
(setq i2 (polar i1 (dtr 90.0) (- HW (* 2 OW))))
(setq i3 (polar i2 (dtr 0.0) (- LW (* 2 OW))))
(setq i4 (polar i1 (dtr 0.0) (- LW (* 2 OW))))
(setq SIL (polar i1 (dtr 90.0) (- (/ HW 2) OW)))
(setq SIR (polar i4 (dtr 90.0) (- (/ HW 2) OW)))
(setq SIT (polar i2 (dtr 0.0) (- (/ LW 2) OW)))
(setq is1 (polar i1 (dtr 0.0) OW))
(setq s1 (polar is1 (dtr 90.0) OW))
(setq s2 (polar s1 (dtr 90.0) (- HW (* 4 OW))))
(setq s3 (polar s2 (dtr 0.0) (- LW (* 4 OW))))
(setq s4 (polar s1 (dtr 0.0) (- LW (* 4 OW))))
(setvar 'osmode 0)   
(command "._Layer" "M" "APL Frame" "C" "150" "" "")
; DRAWS THE MAIN FRAME
(command
"PLine" B1 b2 b3 b4 "c"
"PLine" i1 i2 i3 i4 "c"
"PLine" B1 i1 ""
"PLine" b2 i2 ""
"PLine" b3 i3 ""
"PLine" b4 i4 ""
)
(cond
; DRAWS SASH TO RIGHT - CONDITION TO VARIABLE "Sl"      
    ((eq SL "1")
      (command "PLine" s1s2 s3 s4 "c"
            "PLine" i4SIL i3 ""))
   ((eq SR "1")
      (command "PLine" s1 s2s3 s4 "c"
            "PLine" i1SIR i2 ""))
; DRAWS SASH TO TOP - CONDITION TO VARIABLE "ST"
   ((eq ST "1")
      (command "PLine"s1s2s3s4 "c"
            "PLine" i1SIT i4 ""))
   )
(princ)
)
(if pik (w1_act))
(princ)
)
 
w1_dcl
: dialog {
label = "SASHED 1 PANEL";
:row
{
:column
{
: edit_box {
label = "Lenght :"; mnemonic = "L"; key = "LL"; alignment = centered;
edit_limit = 5; edit_width = 5; value = "";
}
: edit_box { label = "Height :"; mnemonic = "H"; key = "HH"; alignment = centered;
edit_limit = 5; edit_width = 5; value = "";
}
: edit_box {
label = "Frame :"; mnemonic = "O"; key = "OO"; alignment = centered;
edit_limit = 5; edit_width = 5; value = "";
}
: button{ key = "accept"; label = "Insert"; mnemonic = "I"; is_default = true;
fixed_width = true; alignment = right;
}
}

:column {
:radio_button{label="Left"; key="SL";}
:radio_button{label="Right"; key="SR";}
:radio_button{label="Top"; key="ST";}
: button{
key = "cancel"; label = "&Cancel"; mnemonic = "C";
fixed_width = true; alignment = right; is_cancel = true;
}
}
}
}

Rod PP 发表于 2022-7-6 08:33:08

我没用!呵呵
我已经按照你上面的建议添加了osmode。
 
好的,取消这件事。。不。老实说,我还没试过。
 
在加载AutoCAD和加载例程后,我第一次尝试插入。。什么都不起作用,DCL很好,例程不运行,如果我再试一次,它就会起作用。
 
左、右、顶部选项。。。如果我不使用Left作为第一个选项,它就会起作用。一旦我选择了左,所有其他人只能在左选项中画图。
 
斜接仍不工作。
页: [1] 2
查看完整版本: 基本lisp+dcl=(条件