明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 868|回复: 4

[提问] 如何判断当前是处于视口内还是处于布局内?

[复制链接]
发表于 2018-11-26 22:19 | 显示全部楼层 |阅读模式
我想做一个反应器
布局中绘图时鼠标颜色自动改青色
如果双击进入了视口则鼠标颜色自动改白色
画个图总要先判断鼠标处于什么环境
也是够烦的

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-11-27 09:41 | 显示全部楼层
CVPORT
CVPORT = 1 是图纸空间

评分

参与人数 1明经币 +1 收起 理由
masterlong + 1 3Q

查看全部评分

 楼主| 发表于 2018-11-27 11:58 | 显示全部楼层
本帖最后由 masterlong 于 2018-11-27 14:47 编辑

以下代码复制到mnl或者启动加载的lsp里
即可实现“布局中切换空间时自动改鼠标颜色”的功能

;0语句功能注释:::图纸空间切换反应器
(if (/= (type jb_spacechange_Reactor) 'vlr-sysvar-reactor)
        (setq jb_spacechange_Reactor  (vlr-sysvar-reactor (getvar "cvport") '((:vlr-sysVarChanged . jb:spacechange_Reactor))))
        vlr-editor-reactor
)
(if (not (vlr-added-p jb_spacechange_Reactor))
        (vlr-add jb_spacechange_Reactor)
)
(setq acadPrefDisplay (vla-get-display (vla-get-preferences (vlax-get-acad-object))))

;0反应器回调动作
(defun jb:spacechange_Reactor ( reactorObject Listofsomething )
        (if (and (= (car Listofsomething) "CVPORT") (cadr Listofsomething))
                (if (and (/= (strcase (getvar "ctab")) "MODEL")(= 1 (getvar "CVPORT")))
                        (progn
                                ;;(princ "\n空间切换\n")
                                (vla-put-LayoutCrosshairColor acadPrefDisplay  16776960)                ;;布局光标颜色=4
                        )
                        (progn
                                ;;(princ "\n空间切换\n")
                                (vla-put-LayoutCrosshairColor acadPrefDisplay  16777215)                ;;布局光标颜色=7
                        )
                )
        )
(princ)
)
(princ)



;;改十字光标颜色代码
;;http://bbs.mjtd.com/forum.php?mo ... 2%B1%EA%D1%D5%C9%AB
;|
vla-Put-ModelCrosshairColor

示例1
Color list:
       0 = Black
     255 = Red
   65535 = Yellow
   65280 = Green
16776960 = Cyan
16711680 = Blue
16711935 = Magenta
16777215 = White

(vl-load-com)
(setq acadPrefDisplay (vla-get-display (vla-get-preferences vlax-get-acad-object)))
(vla-put-modelcrosshaircolor acadPrefDisplay  12582656)

|;
 楼主| 发表于 2018-11-27 12:03 | 显示全部楼层
(vlr-*-reactor data callbacks)
反应器函数里的data
有啥用?怎么用?
始终没有搞明白
发表于 2018-11-27 12:56 | 显示全部楼层
masterlong 发表于 2018-11-27 12:03
(vlr-*-reactor data callbacks)
反应器函数里的data
有啥用?怎么用?

data
Type: Integer, Real, String, List, VLA-object, Safearray, Variant, T, or nil
Any AutoLISP data to be associated with the reactor object; otherwise nil if no data.

我感觉像是一种扩展数据,你用vlr-data可以和获取关联 的数据,vlr-data-set可以设置关联数据。
你上面(setq jb_spacechange_Reactor  (vlr-sysvar-reactor (getvar "cvport") '((:vlr-sysVarChanged . jb:spacechange_Reactor))))
这句就是关联了一个int的值。(vlr-data jb_spacechange_Reactor)就能获得值。

评分

参与人数 1明经币 +1 收起 理由
masterlong + 1 还没完全理解,待我再消化一下。谢谢解答

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 09:46 , Processed in 1.576013 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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