(action_tile "Name_of_button"" (setq someflag 2)(done_dialouge)")
(cond
((someflag 2)
(setq blocknamestorage (car (entsel))
(place a link butto what open the dialogue boxthe first time))
)
也许我应该更清楚一点。
我正在做一个例程,在其中选择一个要重命名的块。一旦你选择了块,DCL就会出现块名,所以你只需更改几个字符,点击ok,它就会重新命名。但是假设你想将这个块重命名为类似于图形中的另一个块,所以我放了一个按钮,上面写着“Like…”这个按钮应该隐藏对话框,让用户选择一个具有相似名称(或者甚至不同,没关系)的块,然后打开对话框,在文本框中只有新拾取的块名,而不是原始拾取的块名,然后你可以从那里修改名称。
谢谢
ArgV 对不起,这就是我为什么不是老师的原因,卡恩解释道。
因此,当您将其传递给dcl时,您已经有了一个块名称(BlkNam)。
(StartDcl) ; will start the dcl the ussual crap, (which sound liike you know)
(set_tile "Someeditbox" BlkNam)
(action_tile "SelectNewBlock" "(setq flager 2) (done_dialouge) ")
(action_tile "accept" "(setq flager 1)(getstuff such as needed ) (done_dialouge)")
(action_tile "cancel" (setq flager 0) (done_dialouge))
(enddcl) ;you know that with the unload_dilogue
(while (not (>= flager 1)
(cond
((= flager 3)
(setq BlkName (car (entsel))
)
);end cond
;With the new block name go back to
(startdcl)
);endwhile
真实生活示例
(defun beamdio ()
(setq dialo (load_dialog "MainDCL"))
(if (not (new_dialog "Pfcbox" dialo)) (exit))
(start_list "beamtype")
(mapcar 'add_list pfcsizes)
(end_list)
(if (not sectiontype)
(set_tile "beamtype" sectiontype)
)
(if (not sectionlength)
(set_tile "length" sectionlength)
)
(if (not bendradius)
(set_tile "rolled" bendradius)
)
(if (not roangle )
(set_tile "angle" roangle)
)
(if toetoggle (set_tile "toetrim" (itoa toetoggle)))
;what to do settings
(action_tile "toetrim" "(if (= toetoggle 1)(setq toetoggle 0)(setq toetoggle 1))")
(action_tile "cancel" "(setq ok 0)(done_dialog)(exit)")
(action_tile "accept" "(setq ok 1)
(setq sectiontype (strcase(get_tile \"beamtype\")))
(setq sectionlength (strcase(get_tile \"length\")))
(setq bendradius (strcase(get_tile \"rolled\")))
(setq roangle (strcase(get_tile \"angle\")))
(done_dialog)"
)
(action_tile "lengthget" "(setq ok 4)
(setq sectiontype (strcase(get_tile \"beamtype\")))
(setq sectionlength (strcase(get_tile \"length\")))
(setq bendradius (strcase(get_tile \"rolled\")))
(setq roangle (strcase(get_tile \"angle\")))
(done_dialog)"
)
(action_tile "rolledidget" "(setq ok 5)
(setq sectiontype (strcase(get_tile \"beamtype\")))
(setq sectionlength (strcase(get_tile \"length\")))
(setq bendradius (strcase(get_tile \"rolled\")))
(setq roangle (strcase(get_tile \"angle\")))
(done_dialog)"
)
(action_tile "angleget" "(setq ok 6)
(setq sectiontype (strcase(get_tile \"beamtype\")))
(setq sectionlength (strcase(get_tile \"length\")))
(setq bendradius (strcase(get_tile \"rolled\")))
(setq roangle (strcase(get_tile \"angle\")))
(done_dialog)"
)
(start_dialog)
(unload_dialog dialo)
)
(beamdio)
(while (not (or (= ok 0)(= ok 1)))
(cond
((= ok 4)
(setq sectionlength (rtos(getdist "\nWhat is the Length")2 0)
bendradius ""
bendangle "")
)
((= ok 5)
(setq bendradius (rtos (getdist "\nWhat is the radius of in inside:")2 0)
sectionlength (rtos(* pi (atof bendradius) 2)2 0)
bendangle "")
)
((= ok 6)
(setq bendangle (anglefinder)
sectionlength (rtos(* (atof sectionlength) (/ (atof bendangle) 360.00))2 0))
(if (not (= bendangle 360))
(setq rord "I/R"))
)
)
(beamdio)
)
感觉更好? 嗯,胡特?
我甚至不知道你想冒犯什么
1、它不是针对你的,
2、我现在就这条帖子向你们发表了评论。
这是针对李的,米尔灵解释了我为什么说我所说的话。
也就是说,如果用户发布了dcl的编程。
这将是更容易标记(比喜欢只是把一个循环和标志),他会更好地理解,因为他熟悉他的代码。
比我发布的内容更有意义,因为他不熟悉我的代码&我是如何做事的。
但是,至少我相信,大多数时候,这是最简单的方法,尤其是当一个例子最能解释事情的时候。然而,当然我们可以用out来回答它,我们确实这样做了,我认为这确实引起了一些困惑,但我再次没有很好地解释事情很多次。
花
你们都很好。我从这个帖子中得到的比我预期的要多,这就是为什么我喜欢这个论坛。很多时候,我在编写代码时会问一个问题,因此,如果我想不出来,我会回来找一个比我了解更多的人(或一些人)来回答我的问题。
我对整个LISP语言相对来说比较陌生,断断续续只使用了大约1.5年,但现在比以往任何时候都要频繁。我上了一些C课程,将来还会上更多,但现在我只是想从那些“去过那里,做过那件事”的人那里得到很多帮助。。
我非常感谢大家的贡献,并阅读了所有帖子。让人们用不同的方式解释事情是很好的,因为这是我们了解其他人和他们学习风格的方式。
-ArgV 伙计,欢迎你。
你编码的时间比我长(去年12月)。
考虑过同样使用c看起来很不错,可以用它做更多的事情,但think会坚持使用lisp学习,而不是像他们说的那样,学习一个Laungue,你就可以全部学习
享受
花
事实上,两年前我甚至从未接触过autocad,现在我为我的工作编写了一大堆例程和菜单系统,这让我获得了一个非常好的位置。
C是一种很棒的语言,因为它很小,很快,很有意义。是的,一旦你学会了编程语言的基础知识。。循环、变量、数据类型、对象、方法、属性等,剩下的只是学习每种语言的语法。由于某种原因,LISP对我来说比其他语言更难。唯一真正的区别是在LISP中使用列表而不是数组。(当然,您可以使用VLISP和阵列)。
干杯,谢谢。
-ArgV 你同一艘船,做得很好,但那不算数。我已经讨厌这个节目了;(
虽然我创造了一些节省时间的惯例,但老板不会承认我知道,因此机组人员在他背后使用它,我看起来像个浪费时间的人
嗯,数组的点,我还没有完全理解,虽然时间不允许我学习汗水语言
您不需要手动设置标志,只需为(done\u dialog)语句分配一个退出值:
然后您可以从(start_对话框)功能中收集该值:
(setq flag (start_dialog))
应分别使用1和0定义“接受”和“取消”磁贴。
代码的基本结构需要如下:
(setq dcTag (load_dialog "DCL-Example.dcl"))
;;Begin DCL Loop
(while (not (vl-position flag '(0 1)))
;; Load Dialog
(or (new_dialog "DCL-Dialog" dcTag)
(alert "Error Loading Dialog.")
(exit))
(action_tile "pick_blk""(done_dialog 2)") ; Set ending value
(action_tile "accept" "(done_dialog)")
(action_tile "cancel" "(done_dialog)")
;; Collect Flag
(setq flag (start_dialog))
(if (eq flag 2) (blk_pick))) ; Run program to pick block
;;End DCL Loop
(unload_dialog dcTag) ;; Unload after loop finished
李,
我不确定我在这里是否做错了什么,但为了从实际角度使用您的示例,我使用了一个Afralisp函数来进行演示。我不得不更改一些东西的命名,因为编码中不允许使用虚线和DCL。
当我运行这个例子时,它运行得很好,但是当你第二次运行这个程序时,你只得到一个零。
就我个人而言,我不认为这样选择一个对象有什么意义,因为它可以在选择OK之后完成。也许我错过了什么。
以下是用于增加圆大小的示例。
DCL
EXAMPLE : dialog {
label = "DCL-Example";
: column {
: button {
label = "Select Object";
key = "pick_blk";
width = 20;
fixed_width = true;
alignment = centered;
}
ok_cancel;
}
}
LSP
11
可能有什么问题?
页:
1
[2]