乐筑天下

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

[编程交流] 查找文本和中间点

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 05:20:09 | 显示全部楼层 |阅读模式
你好
 
我不是Lisp程序的家庭,你能帮我做以下事情吗。
 
我想写一个lisp来做以下事情
1.我将提供一个文本,lisp应该从图形文件(我的意思是从当前打开的图形)中找到该文本。
2.如果找到文本,则应提供文本的中点。
 
提前谢谢。
 
马哈德凡
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 05:28:53 | 显示全部楼层
不确定为什么没有答案在dwg中很容易找到文本
 
唯一的问题是,中点可能会因字体类型的不同而略有不同,但当设置为mid pt时,您可能可以使用“insertionpoint”来返回该点。
 
本例将打印出所有文本的插入点。
 
  1. (setq ss (ssget (list (cons 0 "Text"))))
  2. (setq len (sslength ss))
  3. (setq x 0)
  4. (repeat len
  5. (setq en1 (ssname ss x))
  6.        (setq el1 (entget en1))
  7.        (setq v1 (atof (cdr (assoc 10 el1))))
  8. (princ v1)
  9. )

 
我现在不在工作,我相信有人会发布完整的解决方案。
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-6 05:32:10 | 显示全部楼层
试试这个代码,希望对你有帮助
它将为您提供文本的插入点
 
  1. (defun c:Test (/ string sset c ent insp point)
  2. ;;Ganesh Shetty
  3. (if (setq string (strcase (getstring t "\nEnter String:: ")))
  4.      (progn
  5.    (if (setq sset (ssget "x"  (list (cons 0 "TEXT,MTEXT"))))
  6.        (progn
  7.              
  8.              (repeat (setq c (sslength sset))
  9.                  (setq ent (entget (ssname sset (setq c (1- c)))))
  10.                  (if (equal (strcase (cdr (assoc 1 ent))) string)
  11.                      (progn
  12.                           (if (or (= "MTEXT" (cdr (assoc 0 ent)))
  13.                                   (and
  14.                                       (zerop (cdr (assoc 72 ent)))
  15.                                       (zerop (cdr (assoc 73 ent)))
  16.                                   )
  17.                               )
  18.                               (setq insp (cdr (assoc 10 ent)))
  19.                               (setq insp (cdr (assoc 11 ent)))
  20.                            )
  21.                            (setq point (strcat "E-" (rtos (car insp)) "," "N-" (rtos (cadr insp))))
  22.                            (princ "\n")
  23.                            (princ point)
  24.                       )
  25.                    )
  26.                )
  27.          )
  28.      )
  29. )
  30.    )
  31. (princ))
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 05:38:50 | 显示全部楼层
非常感谢BIGAL&gS7,我会试试这个,然后再给你回复。
 
当做
马哈德凡
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 05:42:56 | 显示全部楼层
试试这个。
 
  1. ;;; mid point of text or mtext ;;;
  2. ;;; JDiala 09-23-2013 ;;;
  3. (vl-load-com)
  4. (defun c:test (/ s ss pl)
  5. (if
  6. (setq ss (ssget "_X" (list (cons 0 "TEXT,MTEXT") (cons 1 (setq s (getstring t "\nEnter String :"))))))
  7. (progn
  8.    (repeat (setq i (sslength ss))
  9.      (vla-GetBoundingBox
  10.        (vlax-ename->vla-object
  11.          (ssname ss (setq i (1- i)))
  12.        ) 'p1 'p2
  13.       )
  14.     (setq pl
  15.       (cons
  16.         (mapcar
  17.        (function
  18.          (lambda (a b) (/ (+ a b) 2.))
  19.           )
  20.        (vlax-safearray->list p1)
  21.        (vlax-safearray->list p2))  
  22.        pl
  23.        )
  24.      )
  25. )
  26. (princ pl)
  27.    )
  28. (princ (strcat "\nNothing found with "" s " " string on the drawing!"))
  29. )
  30. (princ)
  31. )
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-6 05:49:14 | 显示全部楼层
另一个
  1. (defun c:Test2(/ s sset ent bpt ang tb pt1 mpoint)
  2. ;Gs7
  3. (if (setq s (strcase (getstring t "\nEnter String::")))
  4.      (progn
  5.    (if (setq sset (ssget "_x" (list (cons 0 "TEXT,MTEXT"))))
  6.        (progn
  7.             (repeat (setq c (sslength sset))
  8.                 (setq ent (entget (ssname sset (setq c(1- c)))))
  9.                 (if (equal (strcase (cdr (assoc 1 ent))) s)
  10.                     (progn
  11.                         (setq Bpt (cdr (assoc 10 ent)))
  12.                         (setq ang (cdr (assoc 50 ent)))
  13.                         (setq Tb  (cadr (textbox (list (assoc -1 ent)))))
  14.                         (setq pt1 (polar bpt ang (/ (car tb) 2.0)))
  15.                         (setq mpoint (polar pt1 (+ ang (/ pi 2.0)) (/ (cadr tb) 2.0)))
  16.                         (princ "\n")
  17.                         (princ mpoint)
  18.                     )
  19.                  )
  20.               )
  21.          )
  22.      )
  23. )
  24.    )
  25. (princ))
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 05:51:58 | 显示全部楼层
非常感谢您的回复。
 
你们所付出的一切都是和弦一起工作。但它不适用于附图。这是因为圆(示例AD1)和圆的名称是单个对象。所以当我们尝试用AD1搜索时,它说没有找到文本。
 
在附图中,有一些圆圈,其名称在右侧和左侧,中间有一些数值。我们想用lisp做的就是找到给定名称的圆心(例如,如果给定文本AD1,它必须找到相应圆的中点)点1和数字(位于中间)点2的圆心,并从点1到点2绘制一条线。
 
现在,我面临一个问题:为给定的名称找到圆的中点(在X和Y两个方向上)和给定数值的中点(在X和Y两个方向上)。请帮我做同样的事。
拉斯特。图纸
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-6 05:55:14 | 显示全部楼层
 
 
这是因为你在第一篇文章中提到了“文本”,你仍然用文本像圆圈一样调用它,因为你的信息是一个属性对象
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 06:04:03 | 显示全部楼层
非常感谢GS7。
 
我会试着给你回复。
 
-马哈德凡
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-6 06:05:59 | 显示全部楼层
Mahadevan请试用Bellow Lisp程序
如果你有什么问题,请告诉我
在运行程序之前,请从图形中删除不需要的对象
 
 
  1. ;;Ganesh Shetty
  2. ;;27.09.2013
  3. (defun c:blkl(/ string ss space n e p1 p2)
  4. (vl-load-com)
  5. (if
  6.     (and
  7.         (setq string (getstring "\nEnter String::"))
  8. (setq ss (ssget "X" '((0 . "INSERT") (66 . 1))))
  9.     )
  10.     (progn
  11.           (setq space (vla-get-modelspace
  12.                      (vla-get-activedocument
  13.                           (vlax-get-acad-object)
  14.                      )
  15.                )
  16.    )
  17.           (setq n (substr string 3 6))
  18.           (repeat (setq i (sslength ss))
  19.       (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
  20.       (foreach b
  21.                (Vlax-SafeArray->List
  22.                       (variant-value
  23.                            (vla-getattributes e)
  24.                       )
  25.                )
  26.                (cond
  27.                     ((equal (strcase(vla-get-Textstring b)) (strcase String))
  28.                      (setq p1 (vla-get-textalignmentpoint b))
  29.                     )
  30.                     ((equal (vla-get-textstring b) n)
  31.                       (setq p2 (vla-get-Textalignmentpoint b))
  32.                     )
  33.                )
  34.       )
  35.   )
  36.          (vla-addline space p1 p2)
  37.       )
  38.    )
  39. (princ))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:52 , Processed in 0.382851 second(s), 72 queries .

© 2020-2025 乐筑天下

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