明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: liminnet

求一段小lsp让我设置好捕捉后,永不关掉!

  [复制链接]
 楼主| 发表于 2008-6-6 13:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2008-6-6 20:16 | 显示全部楼层

我也是新来的,懂的不多,呵呵。

发表于 2008-7-24 04:27 | 显示全部楼层
我想知道反应器是如何用的
发表于 2008-9-28 13:12 | 显示全部楼层
liminnet发表于2008-6-1 15:13:00我们经常在设置好捕捉后,在用到一些别人开发的程序时,有时程序自动把捕捉变量关掉啦,而在程序退出了并没有还原原来的变量,造成捕捉功能被关掉,又要开启,太烦啦。现在想通过lsp语言让程序执行后

用注册表文件赛,CAD捕捉设置是保存在注册表里的,我一直是这样干的。

 楼主| 发表于 2008-9-28 16:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2008-10-1 21:13 | 显示全部楼层
(vl-load-com)
(vl-load-reactors)
(if (not (equal (type ResetOsmode_lisp_end) 'VLR-Lisp-Reactor))
  (setq ResetOsmode_Lisp_End (vlr-lisp-reactor nil '((:vlr-lispEnded . ResetOsmode))))
)
(if (not (equal (type ResetOsmode_Lisp_Cancel) 'VLR-Lisp-Reactor))
  (setq ResetOsmode_Lisp_Cancel (vlr-lisp-reactor nil '((:vlr-lispCancelled . ResetOsmode))))
)
(defun ResetOsmode(Rec_a Rec_b)
 (if (/= (getvar "osmode") 4327) (setvar "osmode" 4327)) (princ)
)
发表于 2008-10-4 00:48 | 显示全部楼层

 以下我开发的一段程序,

1)当捕捉值丢失后,手动执行BZ命令,即可恢复。

2)在没有把直记录到注册表前,会提示先保存下来,以后丢失就使用bz命令。

3)在其他程序执行之前,如果你不知道当前的值是多少,可以用(snapvalue “get”)获得您

设定的值

    ;save the obsnap mode
(DEFUN C:BZ (/ oce opselect)
  (SETQ oce (GETVAR "cmdecho"))
  (SETVAR "cmdecho" 0)
  (SETQ opselect (GETSTRING "\n输入选项 [保存捕捉设定(S) |使用保存的捕捉设定(U)]:<U>"))
   (PRINC "       Osmode=")
  (IF (OR (= opselect "S") (= opselect "s"))
    (PROGN (PRINC (snapvalue "save")))
    (PROGN (PRINC (snapvalue "get"))) ;ACAD-301:409
  )
  (SETVAR "cmdecho" oce)
  (PRINC)
)

(DEFUN snapvalue  (get_save / osm hkey cver cProfiles)
  (SETQ hkey "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD")
  (SETQ cver (VL-REGISTRY-READ hkey "CurVer")) ;R16.1
  (SETQ hkey (STRCAT hkey "\\" cver))   ;HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\R16.1
  (SETQ cver (VL-REGISTRY-READ hkey "CurVer")) ;ACAD-301:409
  (SETQ hkey (STRCAT hkey "\\" cver "\\Profiles")) ;HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\R16.1\\ACAD-301:409\\Profiles
  (SETQ cProfiles (VL-REGISTRY-READ hkey "")) ;2014
  (SETQ hkey (STRCAT hkey "\\" cProfiles "\\General")) ;HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\R16.1\\ACAD-301:409\\Profiles\\2014
  (COND ((= (STRCASE get_save) "GET")
         (SETQ osm (VL-REGISTRY-READ hkey "Osmode1"))
         (IF (AND (/= osm nil) (/= osm 0))
           (PROGN (VL-REGISTRY-WRITE hkey "Osmode" osm) (SETVAR "osmode" osm))
           (PROGN (SETQ promptstr "\n尚未保存捕捉设定!保存当前捕捉模式?(Y/N) :<")

(ALERT "Please setup the objsnap value first and save it!")
                  (INITDIA)  

                (COMMAND "'_+dsettings" "2" "")
                  (SETQ sosmd (STRCASE (getuserinput sosmd promptstr "Y" "Getstring")));自定义函数,(getsuerinput old promptstring default getmodeStr)
                  (IF (= sosmd "Y")
                    (PROGN (SETQ osm (GETVAR "osmode")) (VL-REGISTRY-WRITE hkey "Osmode1" osm)))

                  (PRINC))))
        ((= (STRCASE get_save) "SAVE") (SETQ osm (GETVAR "osmode")) (VL-REGISTRY-WRITE hkey "Osmode1" osm))))

发表于 2008-10-4 13:04 | 显示全部楼层
上面的方法不能透明执行.我是用ARX重新定义F3键,按F3时,如果捕捉是关闭的,则打开默认捕捉.如果之前设置过捕捉,打开即可.
发表于 2008-11-24 13:39 | 显示全部楼层
(defun c:bg(  )
(SETVAR "OSMODE" 703 )
)
(prin1)
;捕捉點設置
发表于 2008-11-24 17:23 | 显示全部楼层

我的方法是用快捷键F7定义成 (setvar "osmode" 2263),反正原来的F7都已经包含在OSMODE里面了

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

本版积分规则

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

GMT+8, 2024-5-17 12:45 , Processed in 0.244424 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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