明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 241|回复: 10

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

[复制链接]
发表于 2024-4-21 13:01 | 显示全部楼层 |阅读模式



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

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


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


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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-4-21 16:44 | 显示全部楼层
本帖最后由 vitalgg 于 2024-4-21 16:46 编辑

  1. (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))))
  2. ;; 命令 vpov
  3. (defun c:vpov ()
  4.   (if (and (setq vp (car(entsel"拾取视口")))
  5.            (equal "VIEWPORT"(entity:getdxf vp 0)))
  6.       (progn
  7.         (setq ci (color:interface))
  8.         (foreach
  9.          layer% (layer:list)
  10.          (setq overdatas (entity:getdxf(entity:getdxf (tblobjname "layer" layer%)360)360))
  11.          (if overdatas
  12.              (progn
  13.                (if (atom overdatas)(setq overdatas(list overdatas)))
  14.                (if (apply 'or (mapcar '(lambda(x)
  15.                                         (equal
  16.                                          (entity:getdxf x 335)
  17.                                          (entity:getdxf vp -1)
  18.                                          ))
  19.                                       overdatas))
  20.                    (progn
  21.                      (princ (strcat "\n"layer%":"))
  22.                      
  23.                      (foreach
  24.                       od% overdatas
  25.                       (if (and od% (equal (entity:getdxf od% 335) (entity:getdxf vp -1)))
  26.                           (progn
  27.                             (cond
  28.                               ((entity:getdxf od% 420)
  29.                                (vla-put-entitycolor ci (entity:getdxf od% 420))
  30.                                (princ (strcat "\nCOLOR: "
  31.                                               (itoa (vla-get-colorindex ci))
  32.                                               "("
  33.                                               (itoa (entity:getdxf od% 420))
  34.                                               ")"
  35.                                               )))
  36.                               ((entity:getdxf od% 343)
  37.                                (princ (strcat "\nLINETYPE: "))
  38.                                (princ (entity:getdxf (entity:getdxf od% 343)2)))))))))))))))


命令 VPOV



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2024-4-21 16:56 | 显示全部楼层
本帖最后由 xiaocainiao 于 2024-4-21 17:18 编辑

大神、能分享一个color:interface函数的源代码吗、谢谢
发表于 2024-4-21 18:44 | 显示全部楼层
本帖最后由 vitalgg 于 2024-4-21 18:49 编辑
xiaocainiao 发表于 2024-4-21 16:56
大神、能分享一个color:interface函数的源代码吗、谢谢

代码不能用?

先执行第一行代码
然后CAD命令行输入
(fun:src color:interface)
 楼主| 发表于 2024-4-21 18:52 | 显示全部楼层
vitalgg 发表于 2024-4-21 18:44
代码不能用?

先执行第一行代码

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

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

评分

参与人数 1明经币 +1 收起 理由
xiaocainiao + 1 很给力!

查看全部评分

 楼主| 发表于 2024-4-21 19:02 | 显示全部楼层
vitalgg 发表于 2024-4-21 18:56
CAD命令行输入
(fun:src 函数名)
即可显示函数的定义

谢谢、会用了
发表于 2024-4-22 12:41 | 显示全部楼层
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)
    )
)
 楼主| 发表于 2024-4-22 17:45 | 显示全部楼层
guosheyang 发表于 2024-4-22 12:41
420组码转换时  会用到的 函数
;; Negative Colour -> Colour  -  Lee Mac
;; c -  Negative colour valu ...

谢谢大神!我先研究一下
 楼主| 发表于 2024-4-23 11:54 | 显示全部楼层
  1. (apply 'or (mapcar '(lambda(x)
  2.                                         (equal
  3.                                          (entity:getdxf x 335)
  4.                                          (entity:getdxf vp -1)
  5.                                          ))
  6.                                       overdatas)
复制代码


大神!这两天用您的代码发现有时候获取不到图层的视口替代特性了、
我自己排查了一下、发现是这段代码的判断不准确、其他的部分都没有问题、
所以想请教一下、有没有其他精确的判断方法、
因为是偶尔碰见这种情况、所以没有保存测试文件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-4 05:57 , Processed in 0.217451 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表