乐筑天下

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

[编程交流] 标注到多行文字块中

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:39:06 | 显示全部楼层 |阅读模式
大家好,这里有谁知道一个lisp文件可以采用2个线性尺寸并将其输出到多行文字(或块)中。我基本上需要的是一个lisp,在这里我可以选择一个水平线性维度,然后是一个垂直维度,并将这些维度值插入到多行文字中。或者,它们可以是块属性,只要有效。我还需要文本的序列号,但我认为我有一个解决方案。
 
成品需要的是
 
文本[#]
更多文本[其他#]
[维度]
 
 
过去有人见过类似的Lisp程序吗?或者,如果没有,谁能为我指出一个可能的工作方向?
 
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 18:55:37 | 显示全部楼层
这应该很简单。
 
你能举一个结果的例子吗?
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 19:11:29 | 显示全部楼层
 
因此,我要做的是标记一条封闭的多段线(虽然这里可以选择分解),并将其最长的长度和宽度标注放在多行文字的末尾,但有时我需要在开始处设置水平标注,有时需要垂直标注。理想情况下,我希望将其全部放在一个块中,以便将其附加到一个引线。我想我找到了一个lisp来完成顺序编号部分,但到目前为止,尺寸部分一直困扰着我。我做了一个快速的图片,希望能说明这一点。
 
http://i.imgur.com/2eE9iZ2.png
 
我希望能够点击两行,得到一个维度,然后再点击两个维度,得到第二个维度,并将其放置在多行文字(或块)的底部。在这种情况下,我会先单击两条红线,然后单击两条蓝线。然后,我想我将为我之前找到的项目、零件和顺序块lisp添加属性。你可能知道我对这种更复杂的autocad有点陌生。谢谢你的帮助!
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 19:18:52 | 显示全部楼层
像这样的?
 
  1. (defun c:test (/ s lst e ss l)
  2. ;; Tharwat 08.09.2015    ;;
  3. (princ "\nSelect the 1st group of lines :")
  4. (if (and (setq s (ssget '((0 . "LINE"))))
  5.           (princ "\nSelect the 2nd group of lines :")
  6.           (setq ss (ssget '((0 . "LINE"))))
  7.      )
  8.    (progn
  9.      (mapcar '(lambda (sel i / sn)
  10.                 (setq l 0.)
  11.                 (while (setq sn (ssname sel (setq i (1+ i))))
  12.                   (setq l (+ l
  13.                              (distance (cdr (assoc 10 (entget sn)))
  14.                                        (cdr (assoc 11 (entget sn)))
  15.                              )
  16.                           )
  17.                   )
  18.                 )
  19.                 (setq lst (cons l lst))
  20.               )
  21.              (list s ss)
  22.              '(-1 -1)
  23.      )
  24.    )
  25. )
  26. (if (and lst
  27.           (setq ss
  28.                  (nentsel "\nPick on Text, Mtext or Attribute in Block :")
  29.           )
  30.           (wcmatch (cdr (assoc 0 (entget (car ss))))
  31.                    "TEXT,MTEXT,ATTRIB"
  32.           )
  33.      )
  34.    (vla-put-textstring
  35.      (setq v (vlax-ename->vla-object (car ss)))
  36.      (strcat (vla-get-textstring v)
  37.              " "
  38.              (vl-princ-to-string (car lst))
  39.              "x"
  40.              (vl-princ-to-string (cadr lst))
  41.      )
  42.    )
  43. )
  44. (princ)
  45. )(vl-load-com)
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 19:37:49 | 显示全部楼层
 
这不是我的意思,对不起,如果我不清楚的话。我的意思是我需要得到两条红线之间的距离作为一个维度,然后两条蓝线之间的距离作为另一个维度。虽然如果这不可能,我可以用一种改进的方式使用这个。
 
 
此外,出于某种原因,当我使用它时,它默认为十进制单位,而不是我设置的架构。你知道它是否可以改变吗?或者,如果这是一个有点多,谁能告诉我在正确的方向,聘请别人来完成这个Lisp程序?我不确定哪里是做这种专业的东西的好地方。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:49:48 | 显示全部楼层
只要在Cadtutor这里停留一下,经常会发布代码,但作为第一篇文章,这些代码的方向并不正确。塔瓦特的回复很好,我相信他会再次尝试。
 
下面是单个对象选项(如pline)的部分代码。对于多个对象,您需要不同的版本。我将扩展下面比较对象的示例。
 
  1. (defun c:plXY ( / obj maxpoint minpoint LL UR)
  2. (setq obj (vlax-ename->vla-object (car (entsel))))
  3. (vla-GetBoundingBox obj 'minpoint 'maxpoint)
  4. (setq LL (vlax-safearray->list  minpoint))
  5. (setq UR (vlax-safearray->list  maxpoint))
  6. (setq x (- (car UR)(car LL)))
  7. (setq y (- (cadr UR)(cadr LL)))
  8. (Alert (strcat "Length is " (rtos x 2 3) " Width is " (rtos y 2 3)))
  9. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:48 , Processed in 0.371679 second(s), 64 queries .

© 2020-2025 乐筑天下

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