乐筑天下

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

[编程交流] 属性编辑旋转/移动Glo

[复制链接]

4

主题

14

帖子

10

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 14:29:43 | 显示全部楼层 |阅读模式
我之前在“How do I…?”上发布了这篇文章有人建议我在这里查一下。。。
 
ACAD 2000或2002
 
插入具有一个常量属性和一个可变属性的块。块会根据需要旋转,但内部和外部的文本会随块旋转。。。我需要将两者旋转到零,然后重新定位可更改/外部文本(因此它不在块顶部,等等)。
 
我搜索了Cadalyst和这里,但没有找到任何没有购买另一个程序。有没有一个Lisp例程,有没有其他方法?
 
CarlB回复:“这可以用lisp例程来处理。要么插入块并在插入时重新定位属性,要么用它来“修复”已经插入的块以旋转属性。如果你将其发布到lisp/customization论坛并附上块的图形,你可能会找到一些接受者。”
 
我会按照CarlB的建议尝试连接该块。。。
谢谢
FE。图纸
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

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

铜币
223
发表于 2022-7-6 14:35:27 | 显示全部楼层
试试这个:
  1. (defun c:attrot (/ adoc selset)
  2. (vl-load-com)
  3. (vla-startundomark
  4.    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  5.    ) ;_ end of vla-startundomark
  6. (if (setq selset (ssget "_:L" '((0 . "INSERT") (66 . 1))))
  7.    (foreach blk (mapcar 'vlax-ename->vla-object
  8.                         (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
  9.                         ) ;_ end of mapcar
  10.      (vl-catch-all-apply
  11.        '(lambda ()
  12.           (foreach att (vlax-safearray->list
  13.                          (vlax-variant-value (vla-getattributes blk))
  14.                          ) ;_ end of vlax-safearray->list
  15.             (vl-catch-all-apply
  16.               '(lambda ()
  17.                  (vla-put-rotation att 0.)
  18.                  ) ;_ end of lambda
  19.               ) ;_ end of vl-catch-all-apply
  20.             ) ;_ end of foreach
  21.           ) ;_ end of lambda
  22.        ) ;_ end of vl-catch-all-apply
  23.      ) ;_ end of foreach
  24.    ) ;_ end of if
  25. (vla-endundomark adoc)
  26. (princ)
  27. ) ;_ end of defun
  28. (princ "\nType ATTROT in command line to start lisp")
回复

使用道具 举报

4

主题

14

帖子

10

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 14:36:12 | 显示全部楼层
谢谢kpblc!
它主要起作用。。。属性都为零,但我仍然需要返回并重新定位外部属性以将其“移开”。。。这无疑减少了时间的固定量,非常感谢你!
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 14:42:14 | 显示全部楼层
嗨,beaverstate,
 
我的例程是“plain”lisp,但与kpblc的例程大致相同。它*应该*旋转到0,并将“outside”属性移动到块插入的上方。
 
  1. (princ "\nStart with AROT")
  2. (defun c:arot ()
  3.   (command "_UNDO" "_BE")
  4.   (princ "\nSelect blocks to rotate attributes: ")
  5.   (setq Count 0)
  6.   (setq Bset (ssget '((0 . "INSERT")(66 . 1))))
  7.   (setq Bnum (sslength Bset))
  8.   (repeat Bnum
  9.      (setq Ename (ssname Bset Count)
  10.            Att1 (entnext Ename)
  11.            Att2 (entnext Att1)
  12.            A1dat (entget Att1)
  13.            A2dat (entget Att2)
  14.            IP_Bk (cdr (assoc 10 (entget Ename)))
  15.            IP_Att1 (cdr (assoc 11 A1dat))
  16.            AttOff (distance IP_Bk IP_Att1)
  17.            AttPt (mapcar '+ IP_Bk (list 0.0 AttOff 0.0))
  18.            N_Att1 (subst '(50 . 0.0) (assoc 50 A1dat) A1dat)
  19.            N_Att1 (subst (cons 11 AttPt) (assoc 11 N_Att1) N_Att1)
  20.            N_Att2 (subst '(50 . 0.0) (assoc 50 A2dat) A2dat))
  21.      (entmod N_Att1)
  22.      (entmod N_Att2)
  23.      (entupd Ename)
  24.      (setq Count (1+ Count))
  25.   )
  26.   (command "_UNDO" "_END")
  27.   (princ)
  28. )
回复

使用道具 举报

4

主题

14

帖子

10

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 14:43:57 | 显示全部楼层
谢谢CarlB,
为了更好地解释,我附上了另一个dwg作为我正在使用的示例。如您所见,简单地将外部文本移到块上方可能不允许读取文本,因为它可能会以其他层的方式读取。。。。
我希望有一种方法可以真正“选择”块附近的位置,使属性移动,因为它的位置每次都可能不同。
也许只可能旋转到零,然后我将手动尝试编辑属性的位置。
谢谢你抽出时间来做这件事。。。这也是我喜欢这个论坛的原因之一——每个人都愿意帮助同事!
ATTROTATE0.dwg
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 14:48:46 | 显示全部楼层
 
-不要这样做,只需单击属性以显示夹点,单击夹点,然后拖动它。可以修改例程,以便在旋转到0后定位块的属性,但之后重新定位的速度几乎相同。
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 14:50:12 | 显示全部楼层
Orgrown,
 
这是我们用于某些块的宏(在本例中是地板垃圾,FW.dwg)。
 
它获取ltscale并调整块的大小以适应。然后暂停以供用户定位,并将旋转设置为零。
 
该块有一个属性,我们将其强制为“FW”。然后,它逐步执行一个序列,该序列包含attedit命令(前缀为“-”),运行一些默认值,并使用“L”选择最后一个属性。再加上几个默认值,该属性将自身附加到游标,并允许最终重新定位。
 
-插入FW S$M=$(/,$(getvar,ltscale),10)\0 FW-attedit;;;;La 0 P;\;
 
当你点击地板垃圾按钮时,地板垃圾在光标上以正确的大小显示,你定位它,然后属性FW出现在光标上,等待你放置它。
 
合并第一个属性时,使用类似的序列自动以零度显示,然后将上述序列用于第二个属性,这不会有太多问题。
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

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

铜币
223
发表于 2022-7-6 14:53:27 | 显示全部楼层
也许更好的方法是用抓地力替换属性?(我认为)似乎更舒服。但运行attsync命令(或battman)可能会按属性擦除所有更改-小心!
回复

使用道具 举报

4

主题

14

帖子

10

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 14:57:19 | 显示全部楼层
卡尔、沃扎、kpblc:棒极了,伙计们!谢谢你的建议。这将节省我很多时间。我真的很感激。
回复

使用道具 举报

11

主题

117

帖子

133

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-6 14:59:10 | 显示全部楼层
 
可以修改此lisp以输入旋转角度吗?现在它只旋转到角度0。我有一大堆需要旋转到特定角度的属性。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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