ld_117 发表于 2016-2-8 18:20:53

如何根据坐标范围获取块内文字内容

本帖最后由 ld_117 于 2016-2-13 00:19 编辑

如题,困扰了好久的问题!
单选可以采用nentsel或者nentselp,但是我想完成鼠标挪至图块内文字上方时动态显示通过文字内容计算出的数据。
论坛以前有人提起过没有结轮,仔细阅读了http://bbs.mjtd.com/thread-84736-1-1.html,也没想到可用的办法。
求大神指点一下思路。

ivde 发表于 2016-2-8 19:22:42

nentselp + grread

ld_117 发表于 2016-2-9 12:16:21

ivde 发表于 2016-2-8 19:22 static/image/common/back.gif
nentselp + grread

nentselp的参数是根据一个点的的坐标来选择,这个拿鼠标单击还好,通过程序给定参数选择的选择范围实在是太小了,对于文字来说大部分地方都是空的很难选中,还有别的办法吗?

springwillow 发表于 2016-10-21 13:27:39

可以通过坐标转换实现,首先用ssnamex获取ssget选择信息,然后转换到块坐标系下,遍历块内对象,看对象是否在选择范围内,是就选中对象,不是就不选中。这样就能获取选中块内对象的图元名,想做什么都可以了。
给出部分代码做参考,
(setq enamelst '() ss (ssadd) objlst '())
(if (setq ssnamexlst(ssnamex (ssget":S"'((0 . "insert"))) 0))
    (progn
      (setq cwf (caar ssnamexlst)xref(cadar ssnamexlst))
      (setq mat (MAT:RefGeom xref))
      (setq mat (append(mapcar 'append(car Mat)(mapcar 'list (cadr mat)))'((0. 0. 0. 1.))))
      (setq tmat (vlax-tMatrix mat))
      (setq remat (MAT:RevRefGeom xref))
      (setq remat (append(mapcar 'append(car remat)(mapcar 'list (cadr remat)))'((0. 0. 0. 1.))))
      (setq tremat (vlax-tMatrix remat))
      (cond
        ((= cwf 1)(setq pt (last(last(car ssnamexlst)))) (setq ent (nentselp pt) ent (if (and ent (= (type (last (last ent))) 'ename))(car ent)))(setq enamelst (cons ent enamelst)))
        ((= cwf 3)
         (setq xy (last ssnamexlst))
         ;(setq pt1 (last (cadr xy))pt2 (last (caddr xy))pt3 (last (cadddr xy))pt4(last (car(cddddr xy))) )   ;;提取刚才的窗选对角坐标。
         (setq PolyPts (mapcar 'cadr (cdr xy))) ;_ 计算多边形点表
       ;(setq PolyPts (mapcar '(lambda (x)(list (car x)(cadr x)))PolyPts))
       (setq enamelst(append enamelst (Block:Select xref PolyPts '((0 . "*")) "W" remat)))
       )
        )
      )
    )

cghdy 发表于 2020-5-12 20:10:10

springwillow 发表于 2016-10-21 13:27
可以通过坐标转换实现,首先用ssnamex获取ssget选择信息,然后转换到块坐标系下,遍历块内对象,看对象是否 ...

好人,能否给个完整的参考,谢谢

cghdy 发表于 2020-5-12 20:10:23

springwillow 发表于 2016-10-21 13:27
可以通过坐标转换实现,首先用ssnamex获取ssget选择信息,然后转换到块坐标系下,遍历块内对象,看对象是否 ...

好人,能否给个完整的参考,谢谢

陈伟 发表于 2020-6-2 21:28:02

springwillow 发表于 2016-10-21 13:27
可以通过坐标转换实现,首先用ssnamex获取ssget选择信息,然后转换到块坐标系下,遍历块内对象,看对象是否 ...

用ssnamex获取ssget选择信息,多选,取消,执行命令,再次重新按获取的信息进行重新选择框选区域,,有相关的实例吗
页: [1]
查看完整版本: 如何根据坐标范围获取块内文字内容