AutoLISP中的多行文字
我想要一个代码,可以将计算结果输出到多行文字中。看起来并不难,但我似乎完成不了。这是我到目前为止得到的。(defun c:davitcal (DAV)
(setq Z (getreal "Enter pipe section modulus:" ))
(setq W (getreal "Enter est. dead weight (FLG. + parts):" ))
(setq L (getreal "Enter length of moment arm:" ))
(setq S (getreal "Enter stress value for davit arm:" ))
(setq a (getreal "Enter mtext corner:" ))
(command "mtext" 0 a Z W L S)
它会吐出来,但不会关闭多行文字,我该怎么解决?
此外,如果可能的话,我希望多行文字以其最终形式阅读
Z=(无论setq Z数是多少)
W=(无论setq W数是多少)
L=(无论setq L数是多少)
S=(无论setq S数是多少)即:
Z=12.22
W=3800
L=45.3869
S=17100
到目前为止,它只是吐出数字
如果我屠宰了什么,我很抱歉。这对我来说是全新的。谢谢你的时间和努力。非常感谢您的回复。 没有被屠杀太多——只是被误导了
说到创建文本,我不会使用命令方法,而是选择使用entmake创建文本,甚至使用vla addMText创建文本。
如果您需要这些方法中的任何一种的进一步建议,请告诉我。
李 李非常感谢你的帮助,也感谢你没有把我的头扯下来
是的,我希望在任何一个方面都能得到一些帮助,这是最容易编码的。
在你回复之前,我会尽量使用这两种方法。谢谢你的帮助。 使用你建议的那些命令一点运气都没有帮助我 没问题-很乐意帮忙
好的,我再解释一下。我偏离命令调用方法的原因是,它们不仅会受到绘图设置(即OSNAP等)的影响,而且它们的提示(尤其是对于text/attdef/mtext命令)有时可能不一致,导致程序崩溃一半时间。此外,imo最好不要使用它们
此外,不要忘记,这些方法比任何命令调用都快10倍。
好的,那么备选方案。。。
entmake可能是您最容易遵循的方法,因为它不需要任何Visual LISP知识,您可以使用DXF参考来帮助您。
您需要为entmake函数提供一个点对列表,以及足够的信息来创建实体。
为了给你一个我所说的“点对”的例子,运行这个并点击一些现有的多行文字:
您将看到一个点对列表,其中包含有关多行文字对象的所有信息。通过查看此处,您可以看到列表中的每个项目所指的内容。
因此,要使用此方法创建多行文字,您需要构建一个虚线对列表。大多数信息都是标准的,不会随着对象的变化而变化,但您可以更改插入点、文本高度、内容等。
例如:
通过查看上面链接中提供的参考,可以看到每个代码的用途。
正如我所说,您必须为要创建的实体提供最低数量的信息,但您可以提供更多信息,这取决于您希望偏离默认值的程度。
至于vla-addMtext方法,除非你想使用这个方法,否则我不会深入讨论,因为它需要更多的类型,并且需要更多的视觉LISP结构的背景知识。
希望这能有所帮助,但如果你仍然被困,就大声喊,我会解释更多。
干杯
李
放松点。。。a请不要错过眨眼: 请漂亮,请!!!!!!!也谢谢你
所以我理解成对的点。
如何将在例程开始时设置的setq变量数值输入多行文字?
对不起,我只是觉得你上次的回答很直截了当。
好的,按照你想要的方式构建多行文字,可能是这样的:
(defun c:davitcal(/ z w l s a)
(setq Z (getreal "Enter pipe section modulus:"))
(setq W (getreal "Enter est. dead weight (FLG. + parts):"))
(setq L (getreal "Enter length of moment arm:"))
(setq S (getreal "Enter stress value for davit arm:"))
(setq a (getreal "Enter mtext corner:"))
(entmake
(list
(cons 0 "MTEXT") ;; Entity Name
(cons 100 "AcDbEntity") ;; Subclass Marker
(cons 410 "Model") ;; Space
(cons 8 "0") ;; Layer
(cons 100 "AcDbMText") ;; Subclass Marker
(cons 10 '(0 0 0)) ;; Insertion Point
(cons 40 2.5) ;; Text Height
(cons 71 1) ;; Attachment Point (top-left)
(cons 1 (rtos Z)) ;; Text Content
(cons 7 "Verdana"))) ;; Text Style
(princ))
不,DAV意味着函数需要在调用时提供一个参数。
键盘语法是以下字符串(defun c:。。。
请仔细阅读以下内容:
http://www.afralisp.net/lispa/lisp5.htm 谢谢你的阅读。帮我多了解一点。
运行以下代码:
(defun c:davitcal (/ z w l s)
(setq Z (getreal "Enter pipe section modulus:"))
(setq W (getreal "Enter est. dead weight (FLG. + parts):"))
(setq L (getreal "Enter length of moment arm:"))
(setq S (getreal "Enter stress value for davit arm:"))
(entmake
(list
(cons 0 "MTEXT") ;; Entity Name
(cons 100 "AcDbEntity") ;; Subclass Marker
(cons 410 "Model") ;; Space
(cons 8 "0") ;; Layer
(cons 100 "AcDbMText") ;; Subclass Marker
(cons 10 '(5.0 3.0 0)) ;; Insertion Point
(cons 40 0.1) ;; Text Height
(cons 71 5) ;; Attachment Point (Mid-Cent)
(cons 1 "Z=(rtos Z)IN\\PW=(rtos W)#\\PL=(rtos L)IN\\PS=(rtos S)PSI") ;; Text Content
(cons 7 "STANDARD"))) ;; Text Style
(princ))
请注意,当文本形成时(你真是太棒了,我的朋友让我走了这么远),它的格式正是我想要的,但是(rtos)值没有显示?你能得到数值,让它前后的另一个文本仍在阅读吗?这应该是最后一次修复。。。。
再次非常感谢你帮助我度过这段时间。
页:
[1]
2