leventdal 发表于 2022-7-6 11:40:44

文本插入点

你好
 
这是我在这个论坛上的第一篇帖子。大家会注意到,我是AutoCAD宏的初学者。我使用Excel宏已经有一段时间了。
 
但对于AutoCAD,情况完全不同。
 
我找不到宏的参考帮助。(对象模型、方法、集合等;此类CHM文件用于Excel、Word等)
 
所以我甚至不能得到一个点的坐标。
 
我试图在与所有现有“text”元素完全相同的坐标(x,y,z)处插入“dot”元素。
 
 
对于初学者的任何常规帮助和一般帮助、资源,我们将不胜感激。
 
提前谢谢。

Hickoz_bro 发表于 2022-7-6 11:49:25

我发现,如果你在安装基本程序时安装acad帮助文件,有很多有用的提示和资源帮助文件。。。
 
至于你的特殊问题,我无能为力。。。我也是一个宏新手。。。

fuccaro 发表于 2022-7-6 11:52:07

你好,leventdal,欢迎来到论坛!
没错,AutoCAD自定义不像Excel。
使用一个小的Lisp例程很容易完成您的要求。
首先,在选择集中抓取图形中的所有文字图元:

(setq ss (ssget "X" (list '(0 . "TEXT"))))

现在遍历选择集,为每个文本实体提取插入点坐标,插入点坐标存储在实体列表中数字10后面的列表中。
最后,在这些坐标处创建一个AutoCAD点。
请参见我的解决方案:
(defun c:test()
(setq ss (ssget "X" (list '(0 . "TEXT"))))
(repeat (setq i (sslength ss))
   (setq tx1 (ssname ss (setq i (1- i)))
a10 (assoc 10 (entget tx1))
poi (list '(0 . "POINT") a10)
)
   (entmake poi)
   )
)

如果不能使用Lisp例程,不要害怕;单击此处:http://www.cadtutor.net/forum/showthread.php?t=1390
 
我重命名了这个线程。请以后使用相关名称。

leventdal 发表于 2022-7-6 12:00:16

感谢您的快速回复。
 
由于工作量太大,我无法提前回复帖子。
 
首先,听了希科兹·布罗的建议,我检查了安装盘上的CHM文件,我以前找不到这些文件。
有一个叫acadauto。chm公司
 
有关使用Visual Basic for宏的非常有用的信息。
 
fuccaro,谢谢你的密码。但是我没有LISP知识,所以现在我将坚持使用VB。
 
以下是我到目前为止学到的:
 


nObjects = Application.ActiveDocument.ModelSpace.Count 'Gets number of objects.

Application.ActiveDocument.ModelSpace.Item(i) ' returns the object i in the model space
'You can getmany of the object properties through this line

Application.ActiveDocument.ModelSpace.Item(i).GetBoundingBox minExt, maxExt 'gets the max min coordinates of an object.

Set oAcadPoint = ThisDrawing.ModelSpace.AddPoint(Point) 'creates a point referenced by oAcadPOint



 
将它们与一些“for”语句一起使用。
这就是我现在所需要的。
 
再次感谢您的帮助。

ERDOS 发表于 2022-7-6 12:04:25

您好,很抱歉遇到了一个旧线程-我对lisp编程有点陌生,所以我想寻求一些帮助:
我有一些2d的文本元素(x和y值),我需要用文本中的值插入“点”——到目前为止,fuccaro的lisp很好。。。但是,我还需要在“点”中插入写在文本值框中的z值!
所以我需要读取z值框中的文本值框,然后fucaro的lisp将处理其余部分。
提前感谢!

Lee Mac 发表于 2022-7-6 12:13:26

试试这个:
 

(defun c:txt2pt (/ Point i ss ent pt)

(defun Point (pt) (entmakex (list (cons 0 "POINT") (cons 10 pt))))

(if (setq i -1 ss (ssget '((0 . "TEXT,MTEXT"))))
   (while (setq ent (ssname ss (setq i (1+ i))))
   (setq pt (cdr (assoc 10 (entget ent))))

   (Point (list (car pt) (cadr pt)
                  (cond ((distof (cdr (assoc 1 (entget ent))))) (0.0))))))

(princ))

ERDOS 发表于 2022-7-6 12:16:37

太快了!和它有效!!!谢谢Lee Mac

Lee Mac 发表于 2022-7-6 12:24:07

 
 
不客气

ERDOS 发表于 2022-7-6 12:26:59

此外,当我忙于LeeMac lisp(再次感谢)时,我注意到一些文本是xxxx,我需要它是x.xxx-我可以选择所有xxxx文本并除以1000吗?

Lee Mac 发表于 2022-7-6 12:32:22

这也应考虑到所选的非数字文本:
 

(defun c:txtby1000 (/ i ss ent num str elst)

(if (setq i -1 ss (ssget '((0 . "TEXT,MTEXT"))))
   (while (setq ent (ssname ss (setq i (1+ i))))
   (setq num (distof (setq str (cdr (assoc 1 (setq elst (entget ent)))))))
   (entmod
       (subst
         (cons 1 (if num (rtos (/ num 1000.)) str)) (assoc 1 eLst) eLst))))

(princ))


页: [1] 2
查看完整版本: 文本插入点