masterlong 发表于 2018-11-26 22:19:18

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

我想做一个反应器
布局中绘图时鼠标颜色自动改青色
如果双击进入了视口则鼠标颜色自动改白色
画个图总要先判断鼠标处于什么环境
也是够烦的

pzweng 发表于 2018-11-27 09:41:45

CVPORT
CVPORT = 1 是图纸空间

masterlong 发表于 2018-11-27 11:58:06

本帖最后由 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 acadPrefDisplay16776960)                ;;布局光标颜色=4
                        )
                        (progn
                              ;;(princ "\n空间切换\n")
                              (vla-put-LayoutCrosshairColor acadPrefDisplay16777215)                ;;布局光标颜色=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 acadPrefDisplay12582656)

|;

masterlong 发表于 2018-11-27 12:03:46

(vlr-*-reactor data callbacks)
反应器函数里的data
有啥用?怎么用?
始终没有搞明白

edata 发表于 2018-11-27 12:56:34

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]
查看完整版本: 如何判断当前是处于视口内还是处于布局内?