乐筑天下

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

[编程交流] 文本插入点

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

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

使用道具 举报

13

主题

51

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 11:49:25 | 显示全部楼层
我发现,如果你在安装基本程序时安装acad帮助文件,有很多有用的提示和资源帮助文件。。。
 
至于你的特殊问题,我无能为力。。。我也是一个宏新手。。。
回复

使用道具 举报

18

主题

434

帖子

422

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
94
发表于 2022-7-6 11:52:07 | 显示全部楼层
你好,leventdal,欢迎来到论坛!
没错,AutoCAD自定义不像Excel。
使用一个小的Lisp例程很容易完成您的要求。
首先,在选择集中抓取图形中的所有文字图元:
  1. (setq ss (ssget "X" (list '(0 . "TEXT"))))

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

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

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:00:16 | 显示全部楼层
感谢您的快速回复。
 
由于工作量太大,我无法提前回复帖子。
 
首先,听了希科兹·布罗的建议,我检查了安装盘上的CHM文件,我以前找不到这些文件。
有一个叫acadauto。chm公司
 
有关使用Visual Basic for宏的非常有用的信息。
 
fuccaro,谢谢你的密码。但是我没有LISP知识,所以现在我将坚持使用VB。
 
以下是我到目前为止学到的:
 
  1. nObjects = Application.ActiveDocument.ModelSpace.Count 'Gets number of objects.
  2. Application.ActiveDocument.ModelSpace.Item(i) ' returns the object i in the model space
  3. 'You can get  many of the object properties through this line
  4. Application.ActiveDocument.ModelSpace.Item(i).GetBoundingBox minExt, maxExt 'gets the max min coordinates of an object.
  5. Set oAcadPoint = ThisDrawing.ModelSpace.AddPoint(Point) 'creates a point referenced by oAcadPOint

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

使用道具 举报

0

主题

4

帖子

4

银币

初来乍到

Rank: 1

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:13:26 | 显示全部楼层
试试这个:
 
  1. (defun c:txt2pt (/ Point i ss ent pt)
  2. (defun Point (pt) (entmakex (list (cons 0 "POINT") (cons 10 pt))))
  3. (if (setq i -1 ss (ssget '((0 . "TEXT,MTEXT"))))
  4.    (while (setq ent (ssname ss (setq i (1+ i))))
  5.      (setq pt (cdr (assoc 10 (entget ent))))
  6.      (Point (list (car pt) (cadr pt)
  7.                   (cond ((distof (cdr (assoc 1 (entget ent))))) (0.0))))))
  8. (princ))
回复

使用道具 举报

0

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 12:16:37 | 显示全部楼层
太快了!和它有效!!!谢谢Lee Mac
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:24:07 | 显示全部楼层
 
 
不客气
回复

使用道具 举报

0

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 12:26:59 | 显示全部楼层
此外,当我忙于LeeMac lisp(再次感谢)时,我注意到一些文本是xxxx,我需要它是x.xxx-我可以选择所有xxxx文本并除以1000吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:32:22 | 显示全部楼层
这也应考虑到所选的非数字文本:
 
  1. (defun c:txtby1000 (/ i ss ent num str elst)
  2. (if (setq i -1 ss (ssget '((0 . "TEXT,MTEXT"))))
  3.    (while (setq ent (ssname ss (setq i (1+ i))))
  4.      (setq num (distof (setq str (cdr (assoc 1 (setq elst (entget ent)))))))
  5.      (entmod
  6.        (subst
  7.          (cons 1 (if num (rtos (/ num 1000.)) str)) (assoc 1 eLst) eLst))))
  8. (princ))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:30 , Processed in 0.357181 second(s), 72 queries .

© 2020-2025 乐筑天下

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