乐筑天下

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

[编程交流] Lisp将文本替换为bloc

[复制链接]

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:44:39 | 显示全部楼层 |阅读模式
我有一个项目,有一个要求提交。图纸和。dgn文件。该项目最初是在MicroStation中完成的。我们遇到的问题是,一些尺寸在起草时在原始MicroStation文件中被分解,因此这些尺寸只是带有单行文字“F”作为尺寸终止符的行。“F”是由于MS的标注风格。我希望有人见过某种lisp,它可以找到所有只包含字母“F”的单行文本,在上面放置一个具有相同旋转和属性的块,然后删除“F”。我可能在这方面做了一些激烈的梦,但我想我会把它扔出去。有大量文件需要修复。我已经在这个论坛上找到了很多有用的帖子。我已经找了整整两天的东西了,即使很接近,也许我可以把一些东西拼凑起来。我只是lisp的初学者,但这个网站帮助很大。
 
谢谢
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 07:48:32 | 显示全部楼层
试试看。只需编辑指示的行以使用正确的块名。
 
这将仅应用旋转属性;如果你想要层次和东西,请告诉我。
 
  1. (defun c:txttoblk( / ss)
  2. (vl-load-com)
  3. (setq blk "BLOCK") ; Put block name here, with directory if block is not already in drawing
  4. (setq ss (ssget "X" '((0 . "TEXT")(1 . "F"))))
  5. (if ss
  6.    (progn
  7.      (setq ss (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  8.      (mapcar '(lambda (x) (vl-cmdf "-insert" blk (cdr (assoc 10 (entget x))) 1 1 (* (/ 180 pi) (cdr (assoc 50 (entget x)))))
  9.         (entdel x)) ss)
  10.      )
  11.    (princ "\nNo text entities found.")
  12.    )
  13. (princ)
  14. )
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:53:05 | 显示全部楼层
真 的!!Freerefill,非常感谢。我真的没想到会发生什么,但这么快!我只看到了文本到文本和块到块的示例。
 
Lisp程序效果很好,而且方向明确。每个终止符位置都有一个块,但其中一些位置不一致。
 
我认为其中一些可能受到OSNAP和/或OTRACK的影响,所以我关闭了除插入之外的所有OSNAP,这对位置有很大帮助,但仍然有一些终止符没有放置在文本插入点。我注意到这几个在当前视图之外,所以我做了一个缩放范围,这似乎做到了。
 
有没有办法控制块相对于文本的大小?图形集包含多个图形比例,所有文件都在模型空间中完成。
 
再次非常感谢!!
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 07:57:24 | 显示全部楼层
如果文字比例和块比例彼此有任何恒定的关系,那么是的,这不仅是可能的,而且可能相当容易。唯一的问题是规模。是1:1还是别的?也就是说,如果文本高度为1,块的比例是否为1?
 
至于不一致,很可能是由于我的“命令行隐藏”代码。。。很抱歉。
 
编辑:我刚刚又测试了一次,我没有发现那些不一致的地方。。。所以我在这一点上迷失了。。。如果你愿意,我会添加一些代码来关闭OSNAP并进行最大化,这样你就不必记得自己做了,但这取决于你。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:58:54 | 显示全部楼层
做记号
 
如果您正在使用_-插入,请记住在指定插入点之前使用“_non”
 
如果我要解决这个问题,我会从文本实体中去掉一些DXF代码并从中插入-然后轻松保留所有图层/厚度/线型等数据
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 08:01:43 | 显示全部楼层
好主意,李。事实上,直到我在这里看到Alan的代码,我才看到“_non”:
http://www.cadtutor.net/forum/showthread.php?p=334825#post334825
我知道可以从命令行这样修改快照,但我不知道“non”是一个选项。我会记住的。
 
至于剩下的,我已经和他合作过了。dgns之前,我知道有很多信息被剥离了(甚至不能使用块、标注或引线),这就是为什么我不去理会线型和图层。。但你是对的,这仍然是可行的。
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:05:55 | 显示全部楼层
 
 
Freerefill,再次感谢!我可以添加OSNAP和缩放范围的东西,我已经在这个脚本中了。我将研究文本/块大小的关系,并让你知道,这将是锦上添花!
 
谢谢
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:09:13 | 显示全部楼层
 
Freerefill,当块比例=10.66667时,关系为文字高度=1”
 
非常感谢。
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 08:10:35 | 显示全部楼层
我接受了李的建议,因为它非常巧妙,将文本DXF代码直接转换为块的DXF代码。我通常不使用entmake,因为至少对我来说,它会生成繁琐而难看的列表。。。但是,它确实有它的好处。
 
在这里;如果你还需要什么,请告诉我。我很确定我的量表是正确的。
 
  1. (defun c:txttoblk( / ss e)
  2. (vl-load-com)
  3. (setq blk "BLOCK") ; Put block name here, with directory if block is not already in drawing
  4. (setq ss (ssget "X" '((0 . "TEXT")(1 . "F"))))
  5. (if ss
  6.    (progn
  7.      (setq ss (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  8.      (mapcar '(lambda (x)
  9.         (setq e (entget x))
  10.         (entmake
  11.           (append
  12.             (list (cons 0 "INSERT") (cons 100 "AcDbEntity") (cons 100 "AcDbBlockReference")
  13.               (cons 410 (cdr (assoc 410 e)))
  14.               (cons 8 (cdr (assoc 8 e)))
  15.               (cons 2 blk)
  16.               (cons 10 (cdr (assoc 10 e)))
  17.               (cons 41 (* (/ 32.0 3) (cdr (assoc 40 e))))
  18.               (cons 42 (* (/ 32.0 3) (cdr (assoc 40 e))))
  19.               (cons 50 (cdr (assoc 50 e))))
  20.             )
  21.           )
  22.         (entdel x)) ss)
  23.      )
  24.    (princ "\nNo text entities found.")
  25.    )
  26. (princ)
  27. )
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:16:04 | 显示全部楼层
Freerefill,新代码运行并删除F,块不会被放置。我可能做错了什么。。。我像以前一样把街区的路径放在第3行。在运行该文件之前,我还需要对其执行其他操作吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 22:14 , Processed in 1.292917 second(s), 72 queries .

© 2020-2025 乐筑天下

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