Deby Ferdian 发表于 2022-7-5 17:53:46

分配Tog的组合键

分配切换OSMODE和3DOSMODE开/关的组合键。可能吗???
 
不仅将其分配给“F3”和“F4”,还将其分配给CTRL+F作为OSMODE开/关,CTRL+SHIFT+F作为3DOSMODE开/关。谁能帮帮我???

Grrr 发表于 2022-7-5 17:58:57

你好
我知道,使用lisp可以将这些切换指定为commad定义。
但是我不知道如何分配这些与您需要的快捷方式相同的命令(我在您的示例中讨论的是组合键)。

David Bethel 发表于 2022-7-5 18:02:45

因为我使用的一些版本在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
 
-大卫

Deby Ferdian 发表于 2022-7-5 18:06:15

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
 
再见,谢谢你的建议,我很快就会给你答复。我真的非常感谢你们,很抱歉我说的话不够好。。。

Deby Ferdian 发表于 2022-7-5 18:07:33

嗨,大卫·贝瑟尔!这是很好的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))

Grrr 发表于 2022-7-5 18:10:07

好的,试试这个:

(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值可满足您的需求。

David Bethel 发表于 2022-7-5 18:14:09

正如Grrr所指出的,这两个系统变量不是基于0/1的值。因此,它们不能简单地切换开/关。
 
-大卫

Deby Ferdian 发表于 2022-7-5 18:16:43

哇@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
 
 
在红线中,颜色由我修改,它不起作用。。
 
再次提前感谢!

marko_ribar 发表于 2022-7-5 18:19:49

至于您在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”))]

Deby Ferdian 发表于 2022-7-5 18:22:25

它仍然不起作用@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
查看完整版本: 分配Tog的组合键