- 积分
- 3861
- 明经币
- 个
- 注册时间
- 2019-12-25
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|

楼主 |
发表于 2020-9-20 07:45:17
|
显示全部楼层
您好! 用了之后,有下面个问题
当多个图层叠起来的时候(如PH,PS,DIE....)我只开其中某一个层的时候它不能区分
以下为我把您之前的代码套进来的修改
您帮我看下哪里不对呢?
(setq *en2obj* vlax-ename->vla-object)
;;;图框位置
(defun titleplace (titlename p0 / entdata entgrp entname i n pb pc ptlist titlescale txdata clay)
;;获取已关闭、锁定或冻结图层名
(vl-load-com)
(vlax-for x (vla-get-layers
(vla-get-activedocument (vlax-get-acad-object))
)
(if (or (= (vla-get-lock x) :vlax-true)
(= (vla-get-layeron x) :vlax-false)
(= (vla-get-freeze x) :vlax-true)
)
(progn (setq ly (vla-get-name x))
(if lys
(setq lys (strcat ly "," lys))
(setq lys ly)
)
)
)
)
;;获取已关闭、锁定或冻结图层名
(setq vs 3000);;;此处定义图框识别的范围
(setq pc (getvar "viewctr"))
(setq pcx (car pc)
pcy (cadr pc)
pt1 (list (- pcx vs) (- pcy vs));;;此处为计算式
pt2 (list (+ pcx vs) (+ pcy vs));;;此处为计算式
)
(if (setq entgrp (ssget "x" (list '(0 . "insert")
'(-4 . "<and")
'(-4 . ">,>,*") (cons 10 pt1)
'(-4 . "<,<,*") (cons 10 pt2)
(cons 2 titlename)
(cons -4 "<not")
(cons 8 lys)
(cons -4 "not>")
'(-4 . "and>"))))
(repeat (setq n (sslength entgrp))
(setq entname (ssname entgrp (setq n (1- n))))
(setq titlescale (vla-get-XScaleFactor (*en2obj* entname)))
(setq clay (vla-get-layer (*en2obj* entname)));;;获取图框图层
(setq
ptlist (append (ax:getboundingbox entname) (list titlescale) (list clay));;;图层名加入ptlist
)
(setq txdata (append (list ptlist) txdata))
)
)
(setq i 0)
(if (and p0 txdata)
(while (< i (length txdata))
(setq pb (nth 0 (nth i txdata)))
(setq pc (nth 1 (nth i txdata)))
(if (and
(> (nth 0 p0) (nth 0 pb))
(< (nth 0 p0) (nth 0 pc))
(> (nth 1 p0) (nth 1 pb))
(< (nth 1 p0) (nth 1 pc))
)
(progn
(setvar "dimscale" (nth 2 (nth i txdata)))
(setvar "clayer" (nth 3 (nth i txdata)));;;设置当前图层
(setq i (length txdata))
)
(setvar "dimscale" 1.0)
)
(setq i (+ i 1))
)
)
)
|
|