Efeezy 发表于 2022-7-5 18:22:14

显示外部参照层

是否有人使用lisp来显示外部参照层。我想点击一个方块或线条,看看它在哪一层,这样我就可以进入图层管理器,将颜色更改为粗体。

Efeezy 发表于 2022-7-5 18:39:04

我使用它来显示外部参照层,但它并不总是正常工作。
 
(defun C:XRL ()
(setq EnL (entget (car (nentsel "\nSelect object to identify layer it is on : ")))
       LNm (cdr (assoc 8 EnL))
)
(princ "\n Entity layer name: ")
(princ LNm)
(prin1))


(defun C:XRF ()
(setq EnL (entget (car (nentsel "\nSelect Layer to Freeze : ")))
       LNm (cdr (assoc 8 EnL))
)
(command "layer" "f" LNm "")
(princ "\n Layer: ")(princ LNm)(princ " is now frozen.")
(princ))

iconeo 发表于 2022-7-5 18:44:02

我使用了我修改过的以下内容。我只是增加了它的功能,告诉我哪一层使用LFPNN。
 
谢谢
 
;;LayerQuellPick.lsp
;;To "Quell" Layers of Picked objects or Picked Nested objects.
;;If selected object is on current Layer, changes current Layer to first one in Layer table
;;    that is neither off/frozen nor Xref-dependent nor that of selected object, and notifies
;;    User of new current Layer.[starting current Layer remains shown in Layer Properties
;;    Toolbar pull-down until command is terminated, but if Properties box is up, changes
;;    of current Layer are reflected immediately in its General section, Layer slot.]
;;If selected nested object is part of a Block/Xref, and on Layer 0 within that reference's
;;    definition, turns off or freezes not Layer 0, but the deepest-nested non-0 Layer on which
;;    that reference or a containing reference is inserted, i.e. where nested object "appears."
;;[Quirk I haven't found a way around yet: if Layer 0 is off or frozen, things on Defpoints
;;    Layer, even if visible, can't be selected; that Layer can't be quelled while Layer 0 is
;;    (using these commands, though it can be via Layer Manager or Toolbar).]
;;Kent Cooper, November 2011

;; Modified by Chau Huh, April 2015

(defun C:LOP (); = Layer Off by Picking object(s)
   (LQC entsel "" "turn Off" "_off")
); defun - C:LOP

(defun C:LOPN (); = Layer Off by Picking object(s) or Nested object(s)
   (LQC nentsel "/nested object" "turn Off" "_off")
); defun - C:LOPN

(defun C:LFP (); = Layer Freeze by Picking object(s)
   (LQC entsel "" "Freeze" "_freeze")
); defun - C:LFP

(defun C:LFPN (); = Layer Freeze by picking object(s) or Nested object(s)
   (LQC nentsel "/nested object" "Freeze" "_freeze")
); defun - C:LFPN

(defun C:LFPNN (); = Layer Freeze by picking object(s) or Nested object(s)
   (LQCC nentsel "/nested object" "Identify" "_freeze")
); defun - C:LFPNN

(defun LQC (func pr1 pr2 opt / *error* cmde ent edata layq nestlist nlayq ldata layc)
; = Layer Quell with Current layer changed if necessary
(defun *error* (errmsg); don't display error message if cancelled with Esc
   (if (not (wcmatch errmsg "Function cancelled,quit / exit abort,console break"))
   (princ (strcat "\nError: " errmsg))
   ); end if
   (setvar 'cmdecho cmde)
); defun - *error*
(setq cmde (getvar 'cmdecho))
(setvar 'cmdecho 0)
(while
   (and
   (not ; to return T when (while) loop below is satisfied
       (while
         (and
         (not (setq ent (func (strcat "\nSelect object" pr1 " on Layer to " pr2 ": "))))
         (= (getvar 'errno) 7)
         ); and
         (prompt "\nNothing selected -- try again.")
       ); end while
   ); not
   ent ; something selected
   ); and
   (setq
   edata (entget (car ent))
   layq ; = LAYer to Quell
       (if (= (cdr (assoc 8 edata)) "0"); on Layer 0
         (cond ; then
         ((> (length ent) 2); nested entity in Block/Xref
             (setq nestlist (last (nentselp (cadr ent)))); stack of references nested in
             (while
               (and
               nestlist ; still nesting level(s) remaining
               (= (setq nlayq (cdr (assoc 8 (entget (car nestlist))))) "0"); = Nested LAYer to Quell
               ); and
               (setq nestlist (cdr nestlist)); move up a level if present
             ); while
             nlayq
               ; lowest-level non-0 Layer of nested or containing reference(s); 0 if that all the way up
         ); non-Attribute nested entity on Layer 0 condition
         ((= (cdr (assoc 0 edata)) "ATTRIB"); Attribute in Block
             (cdr (assoc 8 (entget (cdr (assoc 330 edata))))); Block's Layer
         ); Attribute on Layer 0 condition
         ("0"); none-of-the-above condition
         ); cond - then
         (cdr (assoc 8 edata)); else - Layer of entity/nested entity
       ); if & layq
   ); setq
   (if (= layq (getvar 'clayer)); selected object is on current Layer - find another
   (progn ; then
       (while ; look for Layer that's on, thawed, non-Xref-dependent, not selected object's
         (and
         (setq ldata (tblnext "layer" (not ldata))); still Layer(s) left in table
             ; nil if it gets to end of table without finding qualifying Layer
         (or
             (=
               (setq layc (cdr (assoc 2 ldata))); = LAYer to make Current
               layq ; selected object's Layer
             ); =
             (minusp (cdr (assoc 62 ldata))); off
             (= (logand (cdr (assoc 70 ldata)) 1) 1); frozen
             (wcmatch layc "*|*"); Xref-dependent
         ); or
         ); and
       ); while
       (if ldata ; found a qualifying Layer
         (setvar 'clayer layc); then - set it current
         (progn ; else - no qualifying Layer
         (alert "No available Layer to make current\nin place of selected object's Layer.")
         (quit)
         ); progn
       ); if
   ); progn
   ); if
   (command "_.layer" opt layq ""); turn off or freeze Layer of selected object
   (princ (strcat "Turning off layer " layq "\n"))
   (if ldata (prompt (strcat "\nCurrent Layer has been changed to " layc ".")))
); while
(setvar 'cmdecho cmde)
(princ)
); defun - LQC

(defun LQCC (func pr1 pr2 opt / *error* cmde ent edata layq nestlist nlayq ldata layc)
; = Layer Quell with Current layer changed if necessary
(defun *error* (errmsg); don't display error message if cancelled with Esc
   (if (not (wcmatch errmsg "Function cancelled,quit / exit abort,console break"))
   (princ (strcat "\nError: " errmsg))
   ); end if
   (setvar 'cmdecho cmde)
); defun - *error*
(setq cmde (getvar 'cmdecho))
(setvar 'cmdecho 0)
(while
   (and
   (not ; to return T when (while) loop below is satisfied
       (while
         (and
         (not (setq ent (func (strcat "\nSelect object" pr1 " on Layer to " pr2 ": "))))
         (= (getvar 'errno) 7)
         ); and
         (prompt "\nNothing selected -- try again.")
       ); end while
   ); not
   ent ; something selected
   ); and
   (setq
   edata (entget (car ent))
   layq ; = LAYer to Quell
       (if (= (cdr (assoc 8 edata)) "0"); on Layer 0
         (cond ; then
         ((> (length ent) 2); nested entity in Block/Xref
             (setq nestlist (last (nentselp (cadr ent)))); stack of references nested in
             (while
               (and
               nestlist ; still nesting level(s) remaining
               (= (setq nlayq (cdr (assoc 8 (entget (car nestlist))))) "0"); = Nested LAYer to Quell
               ); and
               (setq nestlist (cdr nestlist)); move up a level if present
             ); while
             nlayq
               ; lowest-level non-0 Layer of nested or containing reference(s); 0 if that all the way up
         ); non-Attribute nested entity on Layer 0 condition
         ((= (cdr (assoc 0 edata)) "ATTRIB"); Attribute in Block
             (cdr (assoc 8 (entget (cdr (assoc 330 edata))))); Block's Layer
         ); Attribute on Layer 0 condition
         ("0"); none-of-the-above condition
         ); cond - then
         (cdr (assoc 8 edata)); else - Layer of entity/nested entity
       ); if & layq
   ); setq
   (if (= layq (getvar 'clayer)); selected object is on current Layer - find another
   (progn ; then
       (while ; look for Layer that's on, thawed, non-Xref-dependent, not selected object's
         (and
         (setq ldata (tblnext "layer" (not ldata))); still Layer(s) left in table
             ; nil if it gets to end of table without finding qualifying Layer
         (or
             (=
               (setq layc (cdr (assoc 2 ldata))); = LAYer to make Current
               layq ; selected object's Layer
             ); =
             (minusp (cdr (assoc 62 ldata))); off
             (= (logand (cdr (assoc 70 ldata)) 1) 1); frozen
             (wcmatch layc "*|*"); Xref-dependent
         ); or
         ); and
       ); while
       (if ldata ; found a qualifying Layer
         (setvar 'clayer layc); then - set it current
         (progn ; else - no qualifying Layer
         (alert "No available Layer to make current\nin place of selected object's Layer.")
         (quit)
         ); progn
       ); if
   ); progn
   ); if
   (princ (strcat "Layer: " layq "\n"))
   (if ldata (prompt (strcat "\nCurrent Layer has been changed to " layc ".")))
); while
(setvar 'cmdecho cmde)
(princ)
); defun - LQCC

Efeezy 发表于 2022-7-5 18:52:28

谢谢,但它没有列出外部参照的图层。即使我点击F2,它仍然不会显示外部参照层。我正在尝试查找嵌套层外部参照列表。类似于Xlist,但可以看到您每次单击的层。Xlist是不一致的,因为我们有很长的图形名称,它有时不显示层。

rkent 发表于 2022-7-5 19:04:28

XLIST是用于该操作的内置命令。
 
它可能是2012年的Express tool命令,因此如果它不起作用,请确保加载了Express Tools。

iconeo 发表于 2022-7-5 19:13:37

 
它对我有用。。。

Dadgad 发表于 2022-7-5 19:16:12

使用“快捷特性”可以做到这一点,只需设置要为外部参照显示的属性信息。在“菜单”下的CUI中,选择“快捷特性”,然后可以定义要显示的内容。
 
我以前从未听说过XLIST,但我在2013年试用过,似乎效果很好。

samifox 发表于 2022-7-5 19:22:57

 
你好
为什么不从宿主图形中设置颜色?
页: [1]
查看完整版本: 显示外部参照层