我想要获取指定视口内、具有视口替代特性的所有图层、
以及图层对应的视口颜色和线型、如上图:
我查了一下视口的组码、其中有几个组码是关于视口特性替代的、如下图:
但是我用entget函数却始终无法得到335 343和344这几个组码数据、代码如下:

- (setq vp (car(entsel"\n拾取视口")))
- (setq vp_data (entget vp))
所以想请教一下各位大神、
有没有什么办法可以用Lisp获取到视口替代图层及对应颜色和线型
附件已经上传、其中"图层1"在当前视口内是有替代特性的
网友答: 本帖最后由 vitalgg 于 2024-4-21 16:46 编辑

- (progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))
- ;; 命令 vpov
- (defun c:vpov ()
- (if (and (setq vp (car(entsel"拾取视口")))
- (equal "VIEWPORT"(entity:getdxf vp 0)))
- (progn
- (setq ci (color:interface))
- (foreach
- layer% (layer:list)
- (setq overdatas (entity:getdxf(entity:getdxf (tblobjname "layer" layer%)360)360))
- (if overdatas
- (progn
- (if (atom overdatas)(setq overdatas(list overdatas)))
- (if (apply 'or (mapcar '(lambda(x)
- (equal
- (entity:getdxf x 335)
- (entity:getdxf vp -1)
- ))
- overdatas))
- (progn
- (princ (strcat "\n"layer%":"))
-
- (foreach
- od% overdatas
- (if (and od% (equal (entity:getdxf od% 335) (entity:getdxf vp -1)))
- (progn
- (cond
- ((entity:getdxf od% 420)
- (vla-put-entitycolor ci (entity:getdxf od% 420))
- (princ (strcat "\nCOLOR: "
- (itoa (vla-get-colorindex ci))
- "("
- (itoa (entity:getdxf od% 420))
- ")"
- )))
- ((entity:getdxf od% 343)
- (princ (strcat "\nLINETYPE: "))
- (princ (entity:getdxf (entity:getdxf od% 343)2)))))))))))))))
命令 VPOV
网友答:
vitalgg 发表于 2024-4-21 16:44
命令 VPOV
(foreach
od% overdatas
(if (and od% (equal (entity:getdxf od% 335) (entity:getdxf vp -1)))
; 遍历当前图层的视口替代信息列表
; od% 是每次循环中代表当前视口替代信息对象的临时变量
(progn
(princ "视口颜色组码为:")
(princ (entity:getdxf od% 420))
(entity:deldxf od% 420)
(princ "\n 删除后的组码为:")
(princ (entity:getdxf od% 420))
(entity:putdxf od% 420 -1023410168) ;-1023410168
(princ "\n 修改后的组码为:")
(princ (entity:getdxf od% 420))
(princ "\n")
)
)
) 直接输出的-1023410121,删除后输出的还是-1023410121,put后就变(-1023410121 -1023410168)了网友答:
vitalgg 发表于 2024-4-21 16:44
命令 VPOV
- (apply 'or (mapcar '(lambda(x)
- (equal
- (entity:getdxf x 335)
- (entity:getdxf vp -1)
- ))
- overdatas)
大神!这两天用您的代码发现有时候获取不到图层的视口替代特性了、
我自己排查了一下、发现是这段代码的判断不准确、其他的部分都没有问题、
所以想请教一下、有没有其他精确的判断方法、
因为是偶尔碰见这种情况、所以没有保存测试文件网友答: 本帖最后由 xiaocainiao 于 2024-4-21 17:18 编辑
vitalgg 发表于 2024-4-21 16:44
命令 VPOV
大神、能分享一个color:interface函数的源代码吗、谢谢
网友答:
本帖最后由 vitalgg 于 2024-4-21 18:49 编辑 xiaocainiao 发表于 2024-4-21 16:56
大神、能分享一个color:interface函数的源代码吗、谢谢
代码不能用?
先执行第一行代码
然后CAD命令行输入
(fun:src color:interface)
网友答:
vitalgg 发表于 2024-4-21 18:44
代码不能用?
先执行第一行代码
能用、主要我是想要源码自己改一下、让他完全能符合自己的需求
网友答:
xiaocainiao 发表于 2024-4-21 18:52
能用、主要我是想要源码自己改一下、让他完全能符合自己的需求
CAD命令行输入
(fun:src 函数名)
即可显示函数的定义
如:
(fun:src color:interface)
(fun:src layer:list)网友答:
vitalgg 发表于 2024-4-21 18:56
CAD命令行输入
(fun:src 函数名)
即可显示函数的定义
谢谢、会用了
网友答:
420组码转换时 会用到的 函数;; Negative Colour -> Colour - Lee Mac
;; c - [int] Negative colour value
(defun negcolor->color ( c )
(if (< 0 (logand 16777216 c))
(last (LM:True->RGB c))
(if (equal '(0 0 0) (setq c (LM:True->RGB c))) 256 c)
)
)
;; True -> RGB - Lee Mac
;; Args: c - True Colour
(defun LM:True->RGB ( c )
(list
(lsh (lsh (fix c) 08) -24)
(lsh (lsh (fix c) 16) -24)
(lsh (lsh (fix c) 24) -24)
)
)网友答:
guosheyang 发表于 2024-4-22 12:41
420组码转换时 会用到的 函数
;; Negative Colour -> Colour - Lee Mac
;; c - Negative colour valu ...
谢谢大神!我先研究一下