kArThIcK hAcKeR 发表于 2022-7-5 17:30:31

在XYZ坐标系下提取文本数据

大家好,
 
附件:测试图纸。图纸
 
我想检索文本的内容,文本在Autocad中放置在某个XYZ坐标处(相同的坐标,始终适用于所有图形)。
 
[参考附件]:“表面积”和“重量”下面的文字,大多是我试图获取的文字。
 
这些文本有时以单行文本、多行文字或块内文本的形式出现。。
但它们总是出现在同一个坐标系中。
 
有人能帮我吗?

marko_ribar 发表于 2022-7-5 17:39:26

我认为本文应该是标题栏的一部分,并作为属性值驻留在其中。。。所以我强烈建议你保持标题栏的原样——不要将其分解(爆裂)。。。通过这种方式,您将能够根据其标记名轻松获取属性值。。。您发布的图形不足以满足您的特定要求-即使文本的位置相同也无关紧要-具有标题栏的图形可以独立于UCS原点放置,但如果它们准备用于批量打印或发布,我还建议它们不要更改位置。。。因此,请修改所有DWG,使其具有标题栏,您可以轻松操作提取数据或更改文本/字段的值。。。

kArThIcK hAcKeR 发表于 2022-7-5 17:55:54

感谢马科的回复,
这些图纸是由大规模发布图纸的管道软件创建的,
它不会将值创建为块属性。。。
另外,之前附上的图纸是一个代表性的图纸,很抱歉,我不能给你的图纸,因为它是我办公室的机密图纸。。。
有没有办法从坐标处的图形中获取文本值
 
PS:
我的想法是检索数据;要将图形转换为dxf,请使用文本查找程序使用正则表达式查找dxf代码中的文本。
(AcDbText)
10
205.6000061
20
11.89999962
30
0
40
2.
1.
0.787719
7.
)

BIGAL 发表于 2022-7-5 18:04:35

试试这个未经测试的
 
(setq ss(SSGET“C”'(2 2)'(0 0)))
(如果(/=ss nil)(princ“Object found”)(exit));如果未找到任何内容,则退出注释
(如果(>(sslength ss)1)(退出));对于许多对象
(setq obj(vlax ename->vla对象(ssname ss 0)))
(setq isname(vla get Objectname obj))
(if(=isname“AcDbText”)(警报“Text String found”(vla get textstring obj)))
(if(=isname“AcDbMText”)(警报“MText String found”(vla get textstring obj)))

kArThIcK hAcKeR 发表于 2022-7-5 18:10:41

谢谢你的代码BIGAL。
 
我试图从那里修改代码,但AutoCAD说“找到了对象;错误:参数太多”。。。
 
 

(defun c:test5 ()
(setq
   point1 '(496.344 -32.5268 0.0)
   point2 '(514.247 -41.9455 0.0)
)
(setq ss (ssget "C" point1 point2))
(if (/= ss nil)(princ "Object found")(exit)) ; note exits if nothing found
(if (> (sslength ss) 1 )(exit)) ; to many objects
(setq obj (vlax-ename->vla-object (ssname ss 0)))
(setq isname (vla-get-Objectname obj))
(if (= isname "AcDbText")(alert "Text String found " (vla-get-textstring obj)))
(if (= isname "AcDbMText")(alert "MText String found " (vla-get-textstring obj)))
)

 

Tharwat 发表于 2022-7-5 18:19:18

像这样的?
 

(defun c:Test(/ ss i lst)
;; Tharwat - 12.Jul.2016 ;;
(if (setq ss (ssget "_C"
                     '(496.344 -32.5268 0.0)
                     '(514.247 -41.9455 0.0)
                     '((0 . "*TEXT"))))
   (progn
   (repeat (setq i (sslength ss))
       (setq lst
            (cons
                (cdr (assoc 1 (entget (ssname ss (setq i (1- i))))))
                lst))
       )
   (if (and lst (< (length lst) 11))
       (alert
         (strcat "Text string(s) :\n"
               (apply 'strcat
                        (mapcar '(lambda (o) (strcat o "\n"))
                              (reverse lst)))))
       (progn
         (princ "\nText string(s) :\n")
         (mapcar '(lambda (o) (princ (strcat o "\n")))
               (reverse lst))
         (textscr)
         )
       )
   )
   (princ "\nNo text(s) found !")
   )
(princ)
)

kArThIcK hAcKeR 发表于 2022-7-5 18:23:40

啊,
就是我要找的那个。。。
 
谢谢塔瓦特,
我会在我的循环文件代码中包含你的代码。。(这样可以检索文件夹中所有文件的数据)

Tharwat 发表于 2022-7-5 18:36:19

很好,不客气。
页: [1]
查看完整版本: 在XYZ坐标系下提取文本数据