明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1315|回复: 11

[提问] 求助:自动获取图框的两个角点(图框为块)

[复制链接]
发表于 2021-7-31 23:59 | 显示全部楼层 |阅读模式
50明经币
本帖最后由 刘炎华 于 2021-8-1 21:32 编辑

卡在这里了,请大家帮助...
(defun C:tt ( / k ss )
(setq k (cdr (assoc 1 (entget (car (nentsel "\nselect source text:"))))))
;这里怎样得到图块"A4"的两个角点pt1,pt2呢?
(setq ss (ssget "x" (list '(0 . "TEXT,MTEXT")
    (cons 1 (strcat  k ))
  '(-4 . "<and")
   '(-4 . ">,>,*") (cons 10 pt1)
   '(-4 . "<,<,*") (cons 10 pt2)
  '(-4 . "and>"))))
(sssetfirst nil ss)
(princ (strcat "\n共选中了" (itoa (sslength ss)) " 个对象\n"))(princ))


附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

(defun C:tt ( / k ss ) (vl-load-com) (if (progn (princ "\n请选取A4图块:") (setq Kss (ssget ":S" '((0 . "insert")))) ) (progn (setq Kobj (vlax-ename->vla-object (ssname Kss 0))) ;取得块最小外包矩形左下角点和右上角点 (vla-GetBoundingBox Kobj 'Pmin 'Pmax) (setq pt1 (vlax-safearray->list Pmin)) (setq pt2 (vlax-safearray->list Pmax)) ...
发表于 2021-7-31 23:59 | 显示全部楼层
(defun C:tt ( / k ss )
    (vl-load-com)
    (if (progn
            (princ "\n请选取A4图块:")
            (setq Kss (ssget ":S" '((0 . "insert"))))
        )
        (progn
            (setq Kobj (vlax-ename->vla-object (ssname Kss 0)))
            ;取得块最小外包矩形左下角点和右上角点
            (vla-GetBoundingBox Kobj 'Pmin 'Pmax)
            (setq pt1 (vlax-safearray->list Pmin))
            (setq pt2 (vlax-safearray->list Pmax))
            (if (setq ss (ssget "w" pt1 pt2 '((0 . "*text"))))
                (progn
                    (sssetfirst nil ss)
                    (princ (strcat "\n共选中了" (itoa (sslength ss)) " 个对象\n"))
                )
            )
        )
    )
    (princ)
)

点评

感谢大师您帮我完美解决了!!!  发表于 2021-8-1 21:35
回复

使用道具 举报

发表于 2021-8-1 03:47 来自手机 | 显示全部楼层
本帖最后由 Bao_lai 于 2021-8-1 03:49 编辑

关键字搜索 包围盒 vla-GetBoundingBox
回复

使用道具 举报

 楼主| 发表于 2021-8-1 10:40 | 显示全部楼层
Bao_lai 发表于 2021-8-1 03:47
关键字搜索 包围盒 vla-GetBoundingBox

大师:接下来要怎么弄呢?
(defun C:tt ( / k ss ss1)
(setq k (cdr (assoc 1 (entget (car (nentsel "\nselect source text:"))))))
这里怎么得到en呢?
(xv:ssmid en)
(setq ss (ssget "x" (list '(0 . "TEXT,MTEXT")
    (cons 1 (strcat  k ))
  '(-4 . "<and")
   '(-4 . ">,>,*") (cons 10 pt1)
   '(-4 . "<,<,*") (cons 10 pt2)
  '(-4 . "and>"))))
(sssetfirst nil ss)
(princ (strcat "\n共选中了" (itoa (sslength ss)) " 个对象\n"))(princ))

;;选择集中心点函数 by xvjiex
(defun xv:ssmid (ss / i1 plst ent xmin xmax ymin ymax pmin pmax)
(setq i1 -1 plst nil)
(while (setq ent (ssname ss (setq i1 (1+ i1))))
  (setq plst (append (ebox ent) plst))
)
(setq plst (vl-sort plst '(lambda (x y) (< (car x) (car y)))))
(setq xmin (car(nth 0 plst)) xmax (car(nth (-(length plst)1)plst)))
(setq plst (vl-sort plst '(lambda (x y) (< (cadr x) (cadr y)))))
(setq ymin (cadr(nth 0 plst)) ymax (cadr(nth (-(length plst)1)plst)))
(setq pt1 (list xmin ymin 0.) pt2 (list xmax ymax 0.))
)
(defun ebox (e / pa pb)
(Vlax-Invoke-Method (Vlax-Ename->Vla-Object e ) 'GetBoundingBox 'pa 'pb )
(setq pa (trans (vlax-safearray->list pa) 0 1)
  pb (trans (vlax-safearray->list pb) 0 1)
)
(list pa pb)
)
回复

使用道具 举报

 楼主| 发表于 2021-8-1 12:53 | 显示全部楼层
yshf 发表于 2021-8-1 11:35
(defun C:tt ( / k ss )
    (vl-load-com)
    (if (progn

长老您好!
程序功能是加工注解的检查:
是我选了目标文字后,会自动找到目标文字所在图框内相同的文字作为一个选择集。
如图片:选取文字是用户指定 结果:仅图框内的相同字被选中(图档内其它位置的不选中)
回复

使用道具 举报

发表于 2021-8-1 16:08 | 显示全部楼层
刘炎华 发表于 2021-8-1 12:53
长老您好!
程序功能是加工注解的检查:
是我选了目标文字后,会自动找到目标文字所在图框内相同的文字 ...

;作者yshf,加点补充
(defun C:tt ( / k ss )
    (vl-load-com)
    (if (progn
            (princ "\n请选取A4图块:")
            (setq k        (cdr          (assoc 1 (entget (car (nentsel "\nselect source text:"))))))
            (setq Kss (ssget ":S" '((0 . "insert"))))
        )
        (progn
            (setq Kobj (vlax-ename->vla-object (ssname Kss 0)))
            ;取得块最小外包矩形左下角点和右上角点
            (vla-GetBoundingBox Kobj 'Pmin 'Pmax)
            (setq pt1 (vlax-safearray->list Pmin))
            (setq pt2 (vlax-safearray->list Pmax))
            (if (setq ss (ssget "w" pt1 pt2 (list (cons 0  "*text")(cons 1 k))))
                (progn
                    (sssetfirst nil ss)
                    (princ (strcat "\n共选中了" (itoa (sslength ss)) " 个对象\n"))
                )
            )
        )
    )
    (princ)
)
回复

使用道具 举报

 楼主| 发表于 2021-8-1 16:46 | 显示全部楼层
tigcat 发表于 2021-8-1 16:08
;作者yshf,加点补充
(defun C:tt ( / k ss )
    (vl-load-com)

谢谢!
结果是这个,但是多了个选图块的动作。注解是很多行的,所以想把这个动作优化掉,让程序实现。
回复

使用道具 举报

发表于 2021-8-1 19:48 | 显示全部楼层
是想要选择图框内的文字吗?
回复

使用道具 举报

发表于 2021-8-3 16:09 | 显示全部楼层
mark一下,以备学习
回复

使用道具 举报

发表于 2021-8-4 00:08 | 显示全部楼层
海盗曹 发表于 2021-8-3 16:09
mark一下,以备学习

你是论坛混迹十年的元老了
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-10 13:34 , Processed in 0.161392 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表