分配Tog的组合键
分配切换OSMODE和3DOSMODE开/关的组合键。可能吗???不仅将其分配给“F3”和“F4”,还将其分配给CTRL+F作为OSMODE开/关,CTRL+SHIFT+F作为3DOSMODE开/关。谁能帮帮我??? 你好
我知道,使用lisp可以将这些切换指定为commad定义。
但是我不知道如何分配这些与您需要的快捷方式相同的命令(我在您的示例中讨论的是组合键)。 因为我使用的一些版本在windows和一些键盘之间没有很好的界面,所以我将其用作sysvar切换。
;;;TOGGLE SYSVARS
(defun c:tg (/ v)
(while
(or
(initget "Blipmode Cmddia Gridmode Highlight splFrame Orthomode Tilemode Snapmode")
(setq v (getkword (strcat "\nToggle - "
"Blipmode"
(if (= (getvar "BLIPMODE") 1) "^" "")
"/Cmddia"
(if (= (getvar "CMDDIA") 1) "^" "")
"/Gridmode"
(if (= (getvar "GRIDMODE") 1) "^" "")
"/Highlight"
(if (= (getvar "HIGHLIGHT") 1) "^" "")
"/splFrame"
(if (= (getvar "SPLFRAME") 1) "^" "")
"/Orthomode"
(if (= (getvar "ORTHOMODE") 1) "^" "")
"/Tilemode"
"/Snapmode"
(if (= (getvar "SNAPMODE") 1) "^" "")
": "))))
(setvar v (- 1 (getvar v)))
(princ v))
(prin1))
crtl+ascii字符通常有效,功能键被击中或未击中,即切换snapmode
您可能可以将其修改为使用0/1位值的任何sysvar
-大卫 AhrrrhgHgrk'K'。。。我一点也不能尝试arround,因为你给我的建议是,我目前的问题已经解决了,还没有解决。这是一个重要的问题,应该首先解决的优先情况,现在在我的帖子在另一个页面在同一个论坛。给你,http://www.cadtutor.net/forum/showthread.php?96115-I-get-an-error-when-I-try-to-convert-the-solid-object-to-quot-NURB-quot
再见,谢谢你的建议,我很快就会给你答复。我真的非常感谢你们,很抱歉我说的话不够好。。。 嗨,大卫·贝瑟尔!这是很好的Lisp程序非常好!但是我在“Snapmode”的下一个代码下面插入“osMode&3Dosmode”代码时失败了。这是我的!
(defun c:3SS (/ v)
(while
(or
(initget "Blipmode Cmddia Gridmode Highlight splFrame Orthomode Tilemode Snapmode osMode 3Dosmode")
(setq v (getkword (strcat "\nToggle - "
"Blipmode"
(if (= (getvar "BLIPMODE") 1) "^" "")
"/Cmddia"
(if (= (getvar "CMDDIA") 1) "^" "")
"/Gridmode"
(if (= (getvar "GRIDMODE") 1) "^" "")
"/Highlight"
(if (= (getvar "HIGHLIGHT") 1) "^" "")
"/splFrame"
(if (= (getvar "SPLFRAME") 1) "^" "")
"/Orthomode"
(if (= (getvar "ORTHOMODE") 1) "^" "")
"/Tilemode"
"/Snapmode"
(if (= (getvar "SNAPMODE") 1) "^" "")
"/osMode"
(if (= (getvar "OSMODE") 1) "^" "")
"/3Dosmode"
(if (= (getvar "3DOSMODE") 1) "^" "")
": "))))
(setvar v (- 1 (getvar v)))
(princ v))
(prin1)) 好的,试试这个:
(defun c:test (/ )
(if (not *ans*) (setq *ans* "osmode"))
(initget "osmode 3dosmode")
(setq *ans* (cond ( (getkword (strcat "\nToggle <" *ans* ">: "))) ( *ans* )))
(cond
((= *ans* "osmode")
(if (= (getvar 'osmode ) 0)
(progn
(setvar "osmode" 15359)
(princ (strcat "\nOSMODE is set to \"" (rtos(getvar "osmode") 2 0) "\" (ON)"))
);progn true
(progn
(setvar "osmode" 0)
(princ (strcat "\nOSMODE is set to \"" (rtos(getvar "osmode") 2 0) "\" (OFF)"))
);progn false
);if
)
((= *ans* "3dosmode")
(if (= (getvar '3dosmode ) 0)
(progn
(setvar "3dosmode" 1022)
(princ (strcat "\n3D-osmode is set to \"" (rtos(getvar "3dosmode") 2 0) "\" (ON)"))
);progn true
(progn
(setvar "3dosmode" 0)
(princ (strcat "\n3D-osmode is set to \"" (rtos(getvar "3dosmode") 2 0) "\" (OFF)"))
);progn false
);if
)
);cond
(princ)
);defun
调整osmode和的15359值
3dosmode的1022值可满足您的需求。 正如Grrr所指出的,这两个系统变量不是基于0/1的值。因此,它们不能简单地切换开/关。
-大卫 哇@Grr。。。这是一个很棒的代码,但是当我的代码构建修改失败时,你能帮我@Grr?
(defun c:TGG (/ )
(if (not *ans*) (setq *ans* "osmode"))
(initget "Osmode 3dosmode Lwdisplay")
(setq *ans* (cond ( (getkword (strcat "\nToggle /Lwdisplay] <" *ans* ">: "))) ( *ans* )))
(cond
((= *ans* "osmode")
(if (= (getvar 'osmode ) 0)
(progn
(setvar "osmode" 8367)
(princ (strcat "\nOSMODE is set to \"" (rtos(getvar "osmode") 2 0) "\" (ON)"))
);progn true
(progn
(setvar "osmode" 24751)
(princ (strcat "\nOSMODE is set to \"" (rtos(getvar "osmode") 2 0) "\" (OFF)"))
);progn false
);if
)
((= *ans* "3dosmode")
(if (= (getvar '3dosmode ) 0)
(progn
(setvar "3dosmode" 62)
(princ (strcat "\n3D-osmode is set to \"" (rtos(getvar "3dosmode") 2 0) "\" (ON)"))
);progn true
(progn
(setvar "3dosmode" 63)
(princ (strcat "\n3D-osmode is set to \"" (rtos(getvar "3dosmode") 2 0) "\" (OFF)"))
);progn false
);if
)
((= *ans* "LWDISPLAY")
(if (= (getvar 'LWDISPLAY ) 0)
(progn
(setvar "LWDISPLAY" ON)
(princ (strcat "\nLWDISPLAY is set to \"" (rtos(getvar "LWDISPLAY") 2 0) "\" (ON)"))
);progn true
(progn
(setvar "LWDISPLAY" OFF)
(princ (strcat "\nLWDISPLAY is set to \"" (rtos(getvar "LWDISPLAY") 2 0) "\" (OFF)"))
);progn false
);if
)
);cond
(princ)
);defun
在红线中,颜色由我修改,它不起作用。。
再次提前感谢! 至于您在initget中的输入:Lwdisplay
您必须在cond语句中提供足够的字符串:
[更改:
(=*ans*“LWDISPLAY”)
...
]
[为此:
(=*ans*“Lwdisplay”)
...
]
[编辑:引用相同内容,对于“Osmode”-将((=*ans*“Osmode”)…)更改为((=*ans*“Osmode”)…)]
[编辑2:这一行:(if(not*ans*)(setq*ans*“osmode”)),应该是:(if(not*ans*)(setq*ans*“osmode”))] 它仍然不起作用@marko_ribar!我哪里有错?这是我尝试应用你所说的。。。
(defun c:TGG (/ )
(if (not *ans*) (setq *ans* "Osmode"))
(initget "Osmode 3dosmode Lwdisplay")
(setq *ans* (cond ( (getkword (strcat "\nToggle [Osmode/3dosmode/Lwdisplay] <" *ans* ">: "))) ( *ans* )))
(cond
((= *ans* "Osmode")
(if (= (getvar 'Osmode ) 0)
(progn
(setvar "Osmode" 8367)
(princ (strcat "\nOSMODE is set to \"" (rtos(getvar "Osmode") 2 0) "\" (ON)"))
);progn true
(progn
(setvar "Osmode" 24751)
(princ (strcat "\nOSMODE is set to \"" (rtos(getvar "Osmode") 2 0) "\" (OFF)"))
);progn false
);if
)
((= *ans* "3dosmode")
(if (= (getvar '3dosmode ) 0)
(progn
(setvar "3dosmode" 62)
(princ (strcat "\n3D-osmode is set to \"" (rtos(getvar "3dosmode") 2 0) "\" (ON)"))
);progn true
(progn
(setvar "3dosmode" 63)
(princ (strcat "\n3D-osmode is set to \"" (rtos(getvar "3dosmode") 2 0) "\" (OFF)"))
);progn false
);if
)
((= *ans* "Lwdisplay")
(if (= (getvar 'Lwdisplay ) 0)
(progn
(setvar "Lwdisplay" ON)
(princ (strcat "\nLWDISPLAY is set to \"" (rtos(getvar "Lwdisplay") 2 0) "\" (ON)"))
);progn true
(progn
(setvar "Lwdisplay" OFF)
(princ (strcat "\nLWDISPLAY is set to \"" (rtos(getvar "Lwdisplay") 2 0) "\" (OFF)"))
);progn false
);if
)
);cond
(princ)
);defun
页:
[1]
2