多行文字到属性
有没有更快的方法将格式化的多行文字转换为属性?从Revit导出的图形中的房间标记显示为多行文字,我们需要将其转换为标准房间标记属性,其中它将遵循多行文字到属性的任何格式。
例子:
在多行文字中,它在宋体中高度为500,在属性中也将相同。
我附上了一个样本文件,虽然属性中文本的高度可能会有所不同。
样品图纸 大家好,欢迎来到这个论坛,
因为工作,我没有太多时间,无论是“家”还是“这里”都是工作,所以我不能点击一下就完成这一步,但也许其他人可以。我这样做的方式是(Q)选择所有多行文字并分解它们,将所有块放在文字附近,然后使用我的VT实用程序中的行到行功能,它在这个论坛的某个地方,只需搜索我的用户名“RLX”。但它仍然是半手动的,所以如果其他人有更多或完全自动化的例程。。。甚至更好。
gr.Rlx
另外,我脑海中有一个链接可以修改以完成这项工作,现在我记得它:
http://www.cadtutor.net/forum/showthread.php?101120-Help-with-lisp-to-move-text-to-specific-locations-w-a-better-叙事
它可以自动看到哪些文本属于一个组,因此唯一需要改变的是,不是移动对象,而是将它们的值放在一个块中。也许如果你问作者真的很好。。。我认为这是一个相当精彩的节目! 你好,卡德·努布,你怎么看每组mtex都可以被选中。
我想有很多。
如果你能展示至少4到5个区域,也许会有所帮助。
我认为这样的多行文字,都在同一层,必须在一条多段线内。
如果是这样,可以从每个房间中选择
我开始做第一个defun,把文本作为att 我发现一个问题,多行文字没有按顺序绘制。
它是窗口设置的选择中的列表。
("XXXX.XX m²" "ROOM NAME" "XX-XXXX" "(XXX)")
你可以看到没有自然顺序,向下,也没有向上
你做了什么改变吗? 是的,所有都可以是同一层。我们只需要字体样式和字体高度完全匹配
目前,我正在使用一个我在某处下载的复制文本,在其中,你选择多行文字,然后选择属性,它将匹配多行文字的内容和属性,但它不会匹配样式和高度。
谢谢你的欢迎。我会查一下这个,看看是否有帮助。 是的,我就是这么看的。不过我可以孤立他们。
是否可以打开选定多行文字的窗口,并在打开窗口后输入块名(我认为最好是在Autocad支持路径中)
我更喜欢房间,然后是(xxx),然后是数字,然后是面积,如果不是太多的要求。 当然,这是一种方法,但正如我所看到的,它们不是一个自然顺序,向下,所以它必须按Y值排序。
再次,请给我一个真实的dwg示例,至少4个多行文字组区域中的4个。
我想我只需要2到3个用户选择、面积多边形、一个多行文字和样例blk参考就可以做到。然后lisp将完成所有任务。 只是快速:
(defun c:RoomTag ( / ss tl ip bn)
(vl-load-com)
(princ "\n<<< Select Mtexts >>> ")
(if (and (setq ss (ssget '((0 . "MTEXT")))) (setq ss (sss ss))
(tblsearch "block" (setq bn "Room_Tag")))
(progn
(setq tl (mapcar '(lambda (x) (cdr (assoc 1 (entget x)))) ss)
ip (cdr (assoc 10 (entget (car ss)))))
(setvar "ATTREQ" 0)(command-s "-insert" bn ip 1 1 0)
(mapcar '(lambda (att val) (wai bn att val)) '("RM_TAG" "RM_VENT" "RM_NO." "RM_AREA") tl)
(mapcar 'entdel ss)
)
)
)
(defun sss ( %ss )
(vl-sort
(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
'(lambda (x y) (> (caddr (assoc 10 (entget x))) (caddr (assoc 10 (entget y)))))
)
)
(defun wai (b a v)
(setq a (strcase a) b (ent->vla b))
(vl-some '(lambda (x)(if (= a (strcase (vla-get-tagstring x)))(progn (vla-put-textstring x v) v)))
(vlax-invoke b 'getattributes)))
(defun ent->vla ( e )
(cond ((= (type e) 'VLA-OBJECT) e)
((= (type e) 'ENAME)(vlax-ename->vla-object e))
((and (= (type e) 'STR) (tblsearch "block" e))
(ent->vla (ssname (ssget "x" (list (cons 0 "INSERT")(cons 2 e))) 0)))
(t nil)
)
)
我知道,它还有改进的空间。。。
gr.RLX 我附上了一个简单的示例计划。
我试过rlx lisp,但不起作用。但是谢谢你的努力。
非常感谢。
样本。图纸 @RLX我收到了这个错误:
命令:ROOMTAG
>>
选择对象:找到1个
选择对象:找到1个,共2个
选择对象:找到1个,共3个
选择对象:找到1个,共4个
选择对象:
; 错误:无函数定义:WAI
页:
[1]
2