乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 16|回复: 16

[编程交流] AutoLISP中的多行文字

[复制链接]

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:53:54 | 显示全部楼层 |阅读模式
我想要一个代码,可以将计算结果输出到多行文字中。看起来并不难,但我似乎完成不了。这是我到目前为止得到的。
 
  1. (defun c:davitcal (DAV)
  2. (setq Z (getreal "Enter pipe section modulus:" ))
  3. (setq W (getreal "Enter est. dead weight (FLG. + parts):" ))
  4. (setq L (getreal "Enter length of moment arm:" ))
  5. (setq S (getreal "Enter stress value for davit arm:" ))
  6. (setq a (getreal "Enter mtext corner:" ))
  7. (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
 
到目前为止,它只是吐出数字
 
如果我屠宰了什么,我很抱歉。这对我来说是全新的。谢谢你的时间和努力。非常感谢您的回复。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:59:07 | 显示全部楼层
没有被屠杀太多——只是被误导了
 
说到创建文本,我不会使用命令方法,而是选择使用entmake创建文本,甚至使用vla addMText创建文本。
 
如果您需要这些方法中的任何一种的进一步建议,请告诉我。
 
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 13:02:35 | 显示全部楼层
李非常感谢你的帮助,也感谢你没有把我的头扯下来
 
是的,我希望在任何一个方面都能得到一些帮助,这是最容易编码的。
 
在你回复之前,我会尽量使用这两种方法。谢谢你的帮助。
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 13:07:58 | 显示全部楼层
使用你建议的那些命令一点运气都没有帮助我
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:12:06 | 显示全部楼层
没问题-很乐意帮忙
 
好的,我再解释一下。我偏离命令调用方法的原因是,它们不仅会受到绘图设置(即OSNAP等)的影响,而且它们的提示(尤其是对于text/attdef/mtext命令)有时可能不一致,导致程序崩溃一半时间。此外,imo最好不要使用它们
 
此外,不要忘记,这些方法比任何命令调用都快10倍。
 
好的,那么备选方案。。。
 
entmake可能是您最容易遵循的方法,因为它不需要任何Visual LISP知识,您可以使用DXF参考来帮助您。
 
您需要为entmake函数提供一个点对列表,以及足够的信息来创建实体。
 
为了给你一个我所说的“点对”的例子,运行这个并点击一些现有的多行文字:
 
您将看到一个点对列表,其中包含有关多行文字对象的所有信息。通过查看此处,您可以看到列表中的每个项目所指的内容。
 
因此,要使用此方法创建多行文字,您需要构建一个虚线对列表。大多数信息都是标准的,不会随着对象的变化而变化,但您可以更改插入点、文本高度、内容等。
 
例如:
 
通过查看上面链接中提供的参考,可以看到每个代码的用途。
 
正如我所说,您必须为要创建的实体提供最低数量的信息,但您可以提供更多信息,这取决于您希望偏离默认值的程度。
 
至于vla-addMtext方法,除非你想使用这个方法,否则我不会深入讨论,因为它需要更多的类型,并且需要更多的视觉LISP结构的背景知识。
 
希望这能有所帮助,但如果你仍然被困,就大声喊,我会解释更多。
 
干杯
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:13:37 | 显示全部楼层
 
放松点。。。a请不要错过眨眼:
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 13:17:25 | 显示全部楼层
请漂亮,请!!!!!!!也谢谢你
所以我理解成对的点。
如何将在例程开始时设置的setq变量数值输入多行文字?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:21:32 | 显示全部楼层
 
对不起,我只是觉得你上次的回答很直截了当。
 
好的,按照你想要的方式构建多行文字,可能是这样的:
 
  1. (defun c:davitcal  (/ z w l s a)
  2. (setq Z (getreal "Enter pipe section modulus:"))
  3. (setq W (getreal "Enter est. dead weight (FLG. + parts):"))
  4. (setq L (getreal "Enter length of moment arm:"))
  5. (setq S (getreal "Enter stress value for davit arm:"))
  6. (setq a (getreal "Enter mtext corner:"))
  7. (entmake
  8.    (list
  9.      (cons 0 "MTEXT")           ;; Entity Name
  10.      (cons 100 "AcDbEntity")    ;; Subclass Marker
  11.      (cons 410 "Model")         ;; Space
  12.      (cons 8 "0")               ;; Layer
  13.      (cons 100 "AcDbMText")     ;; Subclass Marker
  14.      (cons 10 '(0 0 0))         ;; Insertion Point
  15.      (cons 40 2.5)              ;; Text Height
  16.      (cons 71 1)                ;; Attachment Point (top-left)
  17.      (cons 1 (rtos Z))          ;; Text Content
  18.      (cons 7 "Verdana")))       ;; Text Style
  19. (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:25:59 | 显示全部楼层
不,DAV意味着函数需要在调用时提供一个参数。
 
键盘语法是以下字符串(defun c:。。。
 
请仔细阅读以下内容:
http://www.afralisp.net/lispa/lisp5.htm
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 13:30:11 | 显示全部楼层
谢谢你的阅读。帮我多了解一点。
 
运行以下代码:
 
  1. (defun c:davitcal (/ z w l s)
  2. (setq Z (getreal "Enter pipe section modulus:"))
  3. (setq W (getreal "Enter est. dead weight (FLG. + parts):"))
  4. (setq L (getreal "Enter length of moment arm:"))
  5. (setq S (getreal "Enter stress value for davit arm:"))
  6.    (entmake
  7.      (list
  8.      (cons 0 "MTEXT") ;; Entity Name
  9.      (cons 100 "AcDbEntity") ;; Subclass Marker
  10.      (cons 410 "Model") ;; Space
  11.      (cons 8 "0") ;; Layer
  12.      (cons 100 "AcDbMText") ;; Subclass Marker
  13.      (cons 10 '(5.0 3.0 0)) ;; Insertion Point
  14.      (cons 40 0.1) ;; Text Height
  15.      (cons 71 5) ;; Attachment Point (Mid-Cent)
  16.      (cons 1 "Z=(rtos Z)IN\\PW=(rtos W)#\\PL=(rtos L)IN\\PS=(rtos S)PSI") ;; Text Content
  17.      (cons 7 "STANDARD"))) ;; Text Style
  18. (princ))

 
请注意,当文本形成时(你真是太棒了,我的朋友让我走了这么远),它的格式正是我想要的,但是(rtos)值没有显示?你能得到数值,让它前后的另一个文本仍在阅读吗?这应该是最后一次修复。。。。
 
再次非常感谢你帮助我度过这段时间。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 03:00 , Processed in 0.749171 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表