xiaocainiao 发表于 2024-4-21 13:01:55

难题求教!如何获取图层在对应视口中的视口颜色和线型




我想要获取指定视口内、具有视口替代特性的所有图层、
以及图层对应的视口颜色和线型、如上图:

我查了一下视口的组码、其中有几个组码是关于视口特性替代的、如下图:


但是我用entget函数却始终无法得到335 343和344这几个组码数据、代码如下:
(setq vp (car(entsel"\n拾取视口")))
(setq vp_data (entget vp))

所以想请教一下各位大神、
有没有什么办法可以用Lisp获取到视口替代图层及对应颜色和线型

附件已经上传、其中"图层1"在当前视口内是有替代特性的

vitalgg 发表于 2024-4-21 16:44:00

本帖最后由 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



xiaocainiao 发表于 2024-4-21 16:56:38

本帖最后由 xiaocainiao 于 2024-4-21 17:18 编辑

vitalgg 发表于 2024-4-21 16:44
命令 VPOV
大神、能分享一个color:interface函数的源代码吗、谢谢

vitalgg 发表于 2024-4-21 18:44:57

本帖最后由 vitalgg 于 2024-4-21 18:49 编辑

xiaocainiao 发表于 2024-4-21 16:56
大神、能分享一个color:interface函数的源代码吗、谢谢
代码不能用?

先执行第一行代码
然后CAD命令行输入
(fun:src color:interface)

xiaocainiao 发表于 2024-4-21 18:52:02

vitalgg 发表于 2024-4-21 18:44
代码不能用?

先执行第一行代码


能用、主要我是想要源码自己改一下、让他完全能符合自己的需求

vitalgg 发表于 2024-4-21 18:56:02

xiaocainiao 发表于 2024-4-21 18:52
能用、主要我是想要源码自己改一下、让他完全能符合自己的需求

CAD命令行输入
(fun:src 函数名)
即可显示函数的定义
如:
(fun:src color:interface)
(fun:src layer:list)

xiaocainiao 发表于 2024-4-21 19:02:34

vitalgg 发表于 2024-4-21 18:56
CAD命令行输入
(fun:src 函数名)
即可显示函数的定义


谢谢、会用了

guosheyang 发表于 2024-4-22 12:41:35

420组码转换时会用到的 函数
;; Negative Colour -> Colour-Lee Mac
;; c - 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)
    )
)

xiaocainiao 发表于 2024-4-22 17:45:42

guosheyang 发表于 2024-4-22 12:41
420组码转换时会用到的 函数
;; Negative Colour -> Colour-Lee Mac
;; c -Negative colour valu ...

谢谢大神!我先研究一下

xiaocainiao 发表于 2024-4-23 11:54:18

vitalgg 发表于 2024-4-21 16:44
命令 VPOV

(apply 'or (mapcar '(lambda(x)
                                        (equal
                                       (entity:getdxf x 335)
                                       (entity:getdxf vp -1)
                                       ))
                                    overdatas)

大神!这两天用您的代码发现有时候获取不到图层的视口替代特性了、
我自己排查了一下、发现是这段代码的判断不准确、其他的部分都没有问题、
所以想请教一下、有没有其他精确的判断方法、
因为是偶尔碰见这种情况、所以没有保存测试文件
页: [1] 2
查看完整版本: 难题求教!如何获取图层在对应视口中的视口颜色和线型