乐筑天下

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

[编程交流] 缩放文本和对象任务

[复制链接]

18

主题

81

帖子

63

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 15:10:02 | 显示全部楼层 |阅读模式
所以我在这里想两件事中的一件。
 
1.我知道AutoCAD有scale(短键SC)命令。选择它,单击一个基点,键入比例因子,就完成了。我想看看我是否能在那里施展拳脚。也许它不会工作,我不确定。但是我们从建筑师那里得到了一个房间名称文件,它们只是单行文本,房间编号周围有一个方框/矩形。我有一个缩放lisp用于缩放块,还有一个用于调整文本大小。但我想要的是能够获取文本和块/对象,并通过选择一次对其进行缩放,然后给出比例因子(例如1/2大小)并完成。
 
2.能够全选并将每个房间名称和房间编号分组到单个块中。然后我可以使用我已经有的缩放lisp。
 
附件是我目前使用的两个LISP。我希望我是在讲道理,而不是在胡说八道。)
缩放文本高度2(TH)。lsp
缩放所有标记2(SX)。lsp
回复

使用道具 举报

0

主题

34

帖子

18

银币

初来乍到

Rank: 1

铜币
18
发表于 2022-7-5 15:20:23 | 显示全部楼层
简单地使用注释性块/文本是否是满足这一需求的另一种解决方案?
回复

使用道具 举报

18

主题

81

帖子

63

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 15:27:48 | 显示全部楼层
 
 
在这一点上,我认为任何事情都会奏效。问题是,他们以这种方式发送给我们。有没有一种简单的方法可以将这些更改为注释性块/文本?
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 15:38:41 | 显示全部楼层
您可以首先制作一个块/文本(正如pendean所建议的那样),一次性选择所有文本和矩形,并使用文本实体中的字符串和插入点作为块插入点的基础。不知道文本和矩形是否在一个单独的层中,所以你不会选择其他对象。
回复

使用道具 举报

18

主题

81

帖子

63

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 15:41:06 | 显示全部楼层
 
我得到了所有这些,但是我正在处理发送给我的内容。他们发给我的不是这样设置的。它只是一行文字,房间号周围有一个正方形。所以我必须进去把每一个都做成一个方块,然后我才能使用我现在拥有的。我只是想知道是否有一种快速的方法可以让他们成为一个街区?或者能够扩展我目前拥有的。附件是发送给我们的内容。
阿南。图纸
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 15:48:52 | 显示全部楼层
我认为,如果你用谷歌搜索“visual lisp text to attribute”,你会发现有几个例程可以做到这一点。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:01:54 | 显示全部楼层
Rlx很赚钱,只要做2个区块,因为你有2行和3行的文本。我不确定一个笼统的方法是否可以简单地实现,但如果你喜欢一个do窗口,do窗口,方法,那么阅读文本并替换为一个block将非常容易。我刚刚用你的标签创建了一个匹配并删除了文本的属性。
 
 
作为一个开始玩的东西需要文本角度等检查也需要做真正的工作了。
  1. (defun c:test ( / txt1 txt2 txt3 pt)
  2. (while (setq ss (ssget (list(cons 0 "text"))))
  3. (setq pt (cdr (assoc 10(entget(ssname ss 0)))))
  4. (setq txt1 (cdr (assoc 1(entget(ssname ss 0)))))
  5. (setq txt2 (cdr (assoc 1(entget(ssname ss 0)))))
  6. (if (> (sslength ss) 2)
  7. (progn
  8. (setq txt3 (cdr (assoc 1(entget(ssname ss 0)))))
  9. (command "-insert" "3att" pt 1 1 0 txt1 txt2 txt3) ; 3 att is block name 3 attributes
  10. )
  11. (command "-insert" "2att" pt 1 1 0 txt1 txt2)
  12. )
  13. )
  14. )
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:09:56 | 显示全部楼层
当然,也可以通过编程方式选择和缩放这些元素簇。
注1:在尝试c:Test之前,请使用\u OverKill命令删除双多段线。
注2:未处理引线。
  1. (defun KGA_Conv_Pickset_To_ObjectList (ss / i ret)
  2. (if ss
  3.    (repeat (setq i (sslength ss))
  4.      (setq ret (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) ret))
  5.    )
  6. )
  7. )
  8. (defun KGA_Geom_ObjectMiddle (obj / ptBL ptTR)
  9. (vla-getboundingbox obj 'ptBL 'ptTR)
  10. (mapcar
  11.    '/
  12.    (mapcar '+ (vlax-safearray->list ptBL) (vlax-safearray->list ptTR))
  13.    '(2.0 2.0 2.0)
  14. )
  15. )
  16. (defun c:Test ( / dis doc lyr polyLst pt restLst scl tab)
  17. (setq dis 40.0)          ; Search distance.
  18. (setq lyr "A-ANNO-NOTE") ; Layer name.
  19. (setq scl 0.5)           ; Scale factor.
  20. (setq tab (if (= 1 (getvar 'cvport)) (getvar 'ctab) "Model"))
  21. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  22. (vla-endundomark doc)
  23. (vla-startundomark doc)
  24. (if
  25.    (and
  26.      (setq polyLst
  27.        (KGA_Conv_Pickset_To_ObjectList
  28.          (ssget "_A" (list (cons 8 lyr) (cons 410 tab) '(0 . "LWPOLYLINE")))
  29.        )
  30.      )
  31.      (setq restLst
  32.        (KGA_Conv_Pickset_To_ObjectList
  33.          (ssget "_A" (list (cons 8 lyr) (cons 410 tab) '(0 . "*TEXT,SPLINE,ELLIPSE")))
  34.        )
  35.      )
  36.    )
  37.    (progn
  38.      (setq restLst
  39.        (mapcar
  40.          '(lambda (obj) (list (KGA_Geom_ObjectMiddle obj) obj))
  41.           restLst
  42.        )
  43.      )
  44.      (foreach poly polyLst
  45.        (setq pt (KGA_Geom_ObjectMiddle poly))
  46.        (vla-scaleentity poly (vlax-3d-point pt) scl)
  47.        (foreach sub restLst
  48.          (if (> dis (distance pt (car sub)))
  49.            (progn
  50.              (vla-scaleentity (cadr sub) (vlax-3d-point pt) scl)
  51.              (setq restLst (vl-remove sub restLst))
  52.            )
  53.          )
  54.        )
  55.      )
  56.      (princ "\nDone! ")
  57.    )
  58. )
  59. (vla-endundomark doc)
  60. (princ)
  61. )
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:15:30 | 显示全部楼层
 
 
我正要建议OP看看这个链接:
 
 
http://www.cadtutor.net/forum/showthread.php?101120-Help-with-lisp-to-move-text-to-specific-locations-w-a-better-叙事
 
 
但你的代码是我认为OP需要的。而且很快。干得好,罗伊。现在有太多的工作要做,Lisp程序。。。
 
 
对你来说也是如此!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 21:04 , Processed in 4.838270 second(s), 71 queries .

© 2020-2025 乐筑天下

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