乐筑天下

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

[编程交流] CTab lisp例程

[复制链接]

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:52:00 | 显示全部楼层 |阅读模式
尊敬的先生:,
 
我正在寻找一个lisp例程,将删除所有的
选项卡之间的文本(多达20或30),即
在每个布局中的相同XY坐标处,只需删除
第一个Ctab中的一个。[注:查找和替换将
不起作用,因为要删除的文本没有不同
来自图纸中的其他文本。]我正在尝试的文本
删除与新文本所在的位置相同。
我找到了一个例程,可以在一个
一步不过一步,先有旧的摆脱。
我附上我找到的第一个例程,作为可能的帮助。
P、 我刚开始在这家公司工作,他们没有
设置具有属性的图形。
 
 
任何帮助都将不胜感激
谢谢
CTAL。lsp
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:57:02 | 显示全部楼层
该方法确保在图纸空间中,在布局选项卡中选择一个点,然后在所有布局选项卡中循环使用near擦除该点上的对象。
未试验过
 
  1. (defun c:test ( / pt lay alllayouts)
  2. (setq oldsnap (getvar "osmode"))
  3. (setvar "osmode" 512)
  4. (setq pt (getpoint "\npick object point"))
  5. (setq alllayouts (vla-get-Layouts (vla-get-activedocument (vlax-get-acad-object))))
  6. (vlax-for lay alllayouts
  7. (if (/= "Model" (vla-get-name lay))
  8. (progn
  9. (setvar "ctab" (vla-get-name lay))
  10. (command "pspace") ; need a check here
  11. (command "erase" pt "")
  12. )
  13. )
  14. )
  15. (setvar "osmode" oldsnap)
  16. (princ)
  17. )
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:05:45 | 显示全部楼层
另一种方法是使用过滤器。实例
 
[code](defun c:dlc(/a b)(cond((=(getvar“TILEMODE”)1)(princ“\n此例程仅设计为在纸张空间中运行。”)((null(setq a(car(entsel“\n选择要删除的文本对象的实例:”))((null(wcmatch(cdr(assoc 0(setq a(entget a)))))“*text”))(princ“\n选择的实体不是文本。”)((progn(initget 4)(setq b(cond((getdist“\n输入用于在其他布局中查找文本的公差距离:”))(0.0)))(=1(setq a(sslength(setq b(ssget“_X”(append”“((0.*text”)))(67.1))                           ;是否要匹配原始文本字符串;(list(assoc 1 a))((λ(p)(list’(-4。”>=,>=,>=”)(cons 10(mapcar’(λ(l))(-l b))p)'(-4。“
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:07:37 | 显示全部楼层
@克林特,你为什么把实体转换成vla对象?
 
如果实体位于锁定层,则会引发错误,因为可以使用entdel函数,如果实体位于锁定层,则不会引发任何错误。
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:12:26 | 显示全部楼层
嗨,塔瓦,
 
我记得entdel在删除所有布局上的实体时有限制。我现在无法确认确切的限制,因为我不在电脑旁。但这就是我为什么这么做的原因。
 
我确实想过过滤掉ssget中的锁定层;我还想知道如何按字符串值过滤?这只是一种替代方法。
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:15:29 | 显示全部楼层
再次问候Tharwat,
 
 
自从我上一篇帖子以来,我就能够确认entdel和布局的问题。我找到了这个线程,它尽我所能地描述了这个问题。
 
 
https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/entdel-doesn-t/td-p/849300
 
 
我进一步考虑了锁定层的可能性,我开始认为,可能一种全覆盖应用方法(提供vl全覆盖错误消息的反馈)可能优于我之前在ssget中过滤出锁定层的想法。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:23:49 | 显示全部楼层
谢谢你,克林特,
 
我试图在多个布局中删除一个特定的块名,它确实删除了模型空间中的所有块,并且只删除了最后一个当前布局中的块,程序没有删除其他布局中的其余块。真奇怪。
 
今天知道这是件好事。谢谢
回复

使用道具 举报

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:26:51 | 显示全部楼层
谢谢你回答我的问题。问题是我并没有看到defun c:所以我不知道如何加载你们的例程。它也可能给我一个零的回应。我还想给你发送一个PDF或dwg,这样你可以有一个图像看,但我不知道如何从这里做一个附件。请跟我回去。谢谢
回复

使用道具 举报

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:32:39 | 显示全部楼层
谢谢你回答我的问题。问题是,它要求“输入查找文本的容差距离”,我不理解这一点,因为它应该删除其他CTAB中相同位置的其他文本。我还想给你发送一个PDF或dwg,这样你可以有一个图像看,但我不知道如何从这里做一个附件。请跟我回去。谢谢
回复

使用道具 举报

BKT

1

主题

124

帖子

123

银币

初来乍到

Rank: 1

铜币
7
发表于 2022-7-5 18:36:35 | 显示全部楼层
学生21,
 
LISP cwake要求您输入文本位置的公差。您说过文本在所有选项卡中都位于“相同位置”,但您的意思是文本完全位于同一位置吗?给出容差可能有助于确保选中文本。似乎只需按enter键即可接受默认公差“0.0”。如果你那样做会怎么样?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 00:19 , Processed in 1.037655 second(s), 72 queries .

© 2020-2025 乐筑天下

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