文本插入点
你好这是我在这个论坛上的第一篇帖子。大家会注意到,我是AutoCAD宏的初学者。我使用Excel宏已经有一段时间了。
但对于AutoCAD,情况完全不同。
我找不到宏的参考帮助。(对象模型、方法、集合等;此类CHM文件用于Excel、Word等)
所以我甚至不能得到一个点的坐标。
我试图在与所有现有“text”元素完全相同的坐标(x,y,z)处插入“dot”元素。
对于初学者的任何常规帮助和一般帮助、资源,我们将不胜感激。
提前谢谢。 我发现,如果你在安装基本程序时安装acad帮助文件,有很多有用的提示和资源帮助文件。。。
至于你的特殊问题,我无能为力。。。我也是一个宏新手。。。 你好,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
我重命名了这个线程。请以后使用相关名称。 感谢您的快速回复。
由于工作量太大,我无法提前回复帖子。
首先,听了希科兹·布罗的建议,我检查了安装盘上的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”语句一起使用。
这就是我现在所需要的。
再次感谢您的帮助。 您好,很抱歉遇到了一个旧线程-我对lisp编程有点陌生,所以我想寻求一些帮助:
我有一些2d的文本元素(x和y值),我需要用文本中的值插入“点”——到目前为止,fuccaro的lisp很好。。。但是,我还需要在“点”中插入写在文本值框中的z值!
所以我需要读取z值框中的文本值框,然后fucaro的lisp将处理其余部分。
提前感谢! 试试这个:
(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))
太快了!和它有效!!!谢谢Lee Mac
不客气 此外,当我忙于LeeMac lisp(再次感谢)时,我注意到一些文本是xxxx,我需要它是x.xxx-我可以选择所有xxxx文本并除以1000吗? 这也应考虑到所选的非数字文本:
(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