osmode正在更改
所以我有一个特定的设置方式,我有一个lisp例程,我可以键入一个命令,将它们全部设置回特定的方式。但由于某些原因,当我在命令中时,它会工作,然后当我退出命令或按ESC键时,在完成命令之前,我的所有设置都会运行!例如,我的osnap设置关闭,我的极轴设置从我设置的(15度)开始,然后它将其更改2.5度。东正教有时会关闭或打开。无论我完成命令还是按ESC键,都会发生这种情况。我对lisp做了一些修改,试图让它对我有用,但我似乎无法让它工作。
有人知道这个问题的解决方法吗?还是更好的解决方案?几乎每次我运行任何命令时都会发生这种情况。
谢谢大家
(defun c:K ()
(setvar "POLARMODE" 1)
(setvar "osmode" 551)
(setvar "POLARANG" (angtof "15.0"))
)
;;when you type K, it resets your osnaps to your custom setting
;;Custom Routines
(defun c:c0 () (command "_copybase" "0,0") )
(defun c:v0 () (command "_pasteclip" "0,0") )
(defun c:ZZ () (command "layfrz") )
(load "_RC-CLOUDS")
(defun c:KL () (load "_KL") (C:KL))
;;DRAW BACKWARDS 3-POINT LEADER
(defun c:T2MT () (load "T2MT-MT2T") (C:T2MT))
;;TEXT TO MTEXT
(defun c:VB () (load "_VB") (C:VB))
;;VIEWPORT BOX IN MODELSPACE
(defun c:XRR () (load "XRR") (C:XRR))
;;XREF RELOAD
(defun c:XRV () (load "XRV") (C:XRV))
;;XREF RELOAD WITH VISRETAIN
(defun c:XRU () (load "XRU") (C:XRU))
;;XREF DETACH
(defun c:explodable () (load "explodable") (C:explodable))
;;explodable
(defun c:cleanbase () (load "cleanbase") (C:cleanbase))
;;Clean base drawing
(defun c:cleantitle () (load "cleantitle") (C:cleantitle))
;;Clean title drawing
(Defun c:ERD () (load "_ERD") (c:ERD))
(Defun c:ERH () (load "_ERD") (c:ERH))
(Defun c:ERT () (load "_ERD") (c:ERT))
(Defun C:QS () (command ".qsave") (princ))
(defun c:read ()
(defun c:qs () (alert "NO! NO! NO! NO! NO! NO!"))
)
(defun c:Dave()
(load "_0Dave.lsp")
(alert "Dave - list of commands \nK - Your ACAD Defaults \nQS - Quick Save \nERH Erase Hatch \nMA Match Properties\nREAD - removes Quick Save command \nKL - Draw backwards three point leader \nCleantitle - Clean title drawing \nCleanBase - Clean base drawing\nRCC - Rev Cloud Sketch \nRCB - Rev Cloud Block")
)
(print "Dave Lisp Loaded Successfully!")
(princ)
(defun c:MA () (COMMAND "MATCHPROP") )
;;XREF DETACH
这是我原来帖子的链接。
http://www.cadtutor.net/forum/showthread.php?104632-osmode-is-always-changing&p=704537#post704537
您是说,在运行AutoCAD命令后,还是在从加载的lisp例程之一运行自定义命令后,所有系统变量设置都会变为wakko?
如果在从加载的lisp例程之一运行自定义命令后发布它,以便我们可以查看它,我可以假设您发布了acaddoc吗。lsp文件?
这不仅仅是通过一个自定义的lisp例程来实现的。甚至当我画一条简单的线,做匹配属性(在lisp上面我把它设置为MA),镜像或者其他任何事情的时候。
我对整个lisp程序还是比较陌生,所以如果这听起来不好,我很抱歉。但是acadoc。lsp?如果这让你发笑,请继续,哈哈 阿卡多克。每次打开图形时,lsp都会加载,因此其中定义的任何lisp在任何打开的图形acad中始终可用。lsp仅在打开AutoCAD时加载。
这些文件是用户定义的,不随AutoCAD一起安装。
我猜是上面代码中加载的lisp例程之一导致了这个问题。因为你没有使用过阿卡多克。lsp您必须已使用Appload添加了上述代码。尝试从中删除代码,然后查看重新启动AutoCAD是否可以解决此问题。
然后从命令行一次一个地加载这些例程,测试每个例程,看看哪个例程使系统变量设置变为wakko。发布使您的系统变量设置变为wakko的例程,我们将能够为您修复它。
我认为我发现了一个可能的问题。在同一个文件夹中有两个lisp例程(但对其中一个稍作修改)会导致这个问题吗?我还使用了lee mac的autoloader。但在自动加载器中,它只有其中一个文件。
这是我的自动加载器文件(****是我屏蔽的个人信息。因为我在工作电脑上。)
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/AlignTextV1-4.lsp" '("AT"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/BreakObjects22.LSP" '("BREAKALL" "BREAKOBJECT" "BREAKWOBJECT" "BREAKWLAYER" "BREAKWITH" "BREAKTOUCHING" "BREAKWITHTOUCHING" "BREAKSELECTED" "BREAKREMOVE" "MYBREAK"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/BREAL ALL (BRKALL).lsp" '("BRKALL"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/BubbleOff.lsp" '("BOFF"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/CHANGE TEXT STYLE (CTS).lsp" '("CTS"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/creater.lsp" '("CREATE"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/del-layer.lsp" '("DEL-LAYER" "MDEL-LAYER"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/DynamicTextAlignV1.0.lsp" '("DTA"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/EXISTING TO REMAIN TEXT(ENT).LSP" '("ENT"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/FLIP IT.lsp" '("FLIP"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/GTTR.lsp" '("GTTR" "BTI" "GTTI"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/JTEXT V1.0.LSP" '("JTEXT"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/JTEXT V2.0.LSP" '("JTEXT"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/justify.lsp" '("JL" "JR"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/layer color change (LC).lsp" '("LC"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/Layer No Plot (LNP).LSP" '("LNP"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/Layer plot (LP).LSP" '("LP"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/NO SPACES.LSP" '("NOSPACE"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/pipe-calc.lsp" '("INVERT"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/PLOT NO PLOT.LSP" '("LNP" "LP"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/Scale All Tags(SX).lsp" '("SX"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/Scale Text Height(TH).lsp" '("TH"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/Spin Block(SPB).lsp" '("SPB"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/t2m.lsp" '("T2M"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/TEXT TO LEADER (TXL).LSP" '("TXL" "TEXTLEADER"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/TRIM BETWEEN LINES(TB2).lsp" '("TB2"))
(autoload "C:/Users/dave********/Desktop/LISP ROUTINES/XrefBind.LSP" '("XB"))
以下是一个lisp的代码:
;; ENTER COMMAND OF (SX) SELECT ANY TAGS THAT YOU WANT TO CHANGE THE SCALE ON/
;; 48 = 1/4" SCALE96 = 1/8" SCALE.
;; YOU CAN SELECT MULTI TAGS AT ONCE. AFTER YOU HAVE YOUR NEW SCALE ALL THAT YOU WILL NEED TO DO IS
;; REARRANGE BUT THIS ELMINATES YOU HAVING TO SELECT WHAT YOU WANT, GO TO PROPERTIES AND CHANGE EACH
;; VALUE OF THE X, Y AND Z AXIS (THIS COMMAND WILL ALSO REMEMBER THE LAST SCALE FACTOR USED).
(defun c:SX (/ i s)
(or (setq i (getenv "ScaleIt")) (setq i "48."))
(if (and (not (initget 2))
(setq i (cond ((getreal (strcat "\nEnter block scale[<" i ">]: ")))
((read i))
)
)
(setq s (ssget ":L" '((0 . "insert"))))
(setenv "ScaleIt" (vl-princ-to-string i))
)
(foreach b (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex s))))
(foreach c '("X" "Y" "Z")
(vl-catch-all-apply 'vlax-put (list b (read (strcat c "ScaleFactor")) i))
)
)
)
(princ)
)
(vl-load-com)
这是相同的代码,只是顶部的措辞略有变化
;; TAG SCALE - 11.28.2017
;; ENTER COMMAND OF (SX) SELECT ANY TAGS THAT YOU WANT TO CHANGE THE SCALE ON/
;; 48 = 1/4" SCALE96 = 1/8" SCALE.
;; YOU CAN SELECT MULTI TAGS AT ONCE. AFTER YOU HAVE YOUR NEW SCALE ALL THAT YOU WILL NEED TO DO IS
;; REARRANGE BUT THIS ELMINATES YOU HAVING TO SELECT WHAT YOU WANT, GO TO PROPERTIES AND CHANGE EACH
;; VALUE OF THE X, Y AND Z AXIS (THIS COMMAND WILL ALSO REMEMBER THE LAST SCALE FACTOR USED).
(defun c:SX (/ i s)
(or (setq i (getenv "ScaleIt")) (setq i "48."))
(if (and (not (initget 2))
(setq i (cond ((getreal (strcat "\nEnter block scale[<" i ">]: ")))
((read i))
)
)
(setq s (ssget ":L" '((0 . "insert"))))
(setenv "ScaleIt" (vl-princ-to-string i))
)
(foreach b (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex s))))
(foreach c '("X" "Y" "Z")
(vl-catch-all-apply 'vlax-put (list b (read (strcat c "ScaleFactor")) i))
)
)
)
(princ)
)
(vl-load-com)
我仍将卸载所有这些文件,然后尝试查找导致问题的文件。我还注意到,我在自动加载器中有一些我不经常使用的东西,所以是时候修剪脂肪了。 使用自动加载器的最大优点是,在第一次运行命令之前不会加载完整的lisp。所以在你使用它们之前,这些都不会引起问题。
另一方面,由于您在第一篇文章中似乎以某种方式加载了代码,因此可能会导致问题。
所以在删除了我在appload下启动的所有内容之后。我发现其中两个Lisp程序是问题的根源。但我也注意到,当我打开极轴追踪并将其设置为15度时,如果我画一条不在15度的线,那么绘制的下一段线就会被弄乱并偏离2-5度。
但这是我注意到的两个Lisp程序
;; THIS WILL ALLOW YOU TO BE ABLE TO CHOOSE IF YOU WANT TO HAVE THIS AT THE BEGINNING OR THE END OF TEXT
;; AFTER SELECTING P OR S YOU CAN PLACE WHAT EVER TEXT YOU WANT.
;; THIS WILL ADD TO THE BEGINNING RO THE END OF EACH SELECTED TEXT GROUP.
;;
;;
(defun c:ENT (/ PreSuf Str ent Cstr)
(vl-load-com)
(initget "P S")
(setq PreSuf (getkword "\nChoose <Prefix>: "))
(if (not PreSuf)
(setq PreSuf "S")
)
(while (not str)
(setq str (getstring T "\nEnter String: "))
(cond ((and (eq str "")
(princ "Null Input Try again")
(setq str nil)
)
)
)
)
(while (and (setq ent (car (nentsel "\nSelect Text/Attribute: ")))
(member (cdr (assoc 0 (entget ent)))
'("TEXT" "MTEXT" "ATTRIB")
)
)
(setq ent(vlax-ename->vla-object ent)
Cstr (vla-get-textstring ent)
)
(vla-put-textstring
ent
(if (eq PreSuf "S")
(strcat Cstr "" str)
(strcat str "" Cstr)
)
)
)(princ)
)
(defun C:FLIP ( / L f )
(and
(setq L
(CycleInputs
'(
(SS (progn (princ "\n>>Select objects to mirror: ") (ssget "_:L")))
(p1 (progn (initget "Exit") (apply 'getpoint (append (if p2 (list p2)) '("First Point : ")))) )
(p2 (progn (initget "Exit") (apply 'getpoint (append (if p1 (list p1)) '("Second Point : ")))) )
)
(lambda (s v) (= "Exit" v) )
); CycleInputs
); setq L
(= 3 (length L)) (setq f (lambda (x) (cdr (assoc x L))))
(progn
(setvar 'cmdecho 0)
(command "_.MIRROR" (f 'SS) "" "_non" (f 'p1) "_non" (f 'p2) "Y")
(setvar 'cmdecho 1)
)
)
(princ)
); defun C:flip
(defun CycleInputs ( inpL exitf / tmp )
(cond; (87 114 105 116 116 101 110 32 98 121 32 71 114 114 114)
( (not inpL) inpL)
( (setq tmp (vl-catch-all-apply (function (lambda (a b) (set a (eval b)))) (car inpL)))
(cond
( (vl-catch-all-error-p tmp) (prompt (vl-catch-all-error-message tmp)) )
( (and exitf (vl-catch-all-apply (function exitf) (list (caar inpL) tmp))) (set (caar inpL) nil) )
(
(mapcar (function (lambda (tmp) (set (car tmp) nil) tmp))
(cons (cons (caar inpL) tmp) (CycleInputs (cdr inpL) exitf))
)
)
)
)
( (CycleInputs (reverse (cons (car inpL) (reverse (cdr inpL)))) exitf) )
)
)
再次感谢您的帮助/ 我想知道的是,如果您要将错误处理程序lisp例程保存在所有lisp例程所在的同一个文件中,并且您运行的每个lisp例程在使用自定义lisp时都会调用错误处理程序?这是可能的吗? ENT被定义为函数名和局部变量。我会修改函数名,因为ENT是最常用的lisp变量之一,因为它用于实体。仅供参考:Cadalyst tip 1527A DDAPTXT。LSP追加到文本©1999年6月,Scott A.Matthews有一个很好的对话框例程,用于向文本添加前缀和后缀。
FLIP的全局变量可能与加载到图形中的其他代码冲突。
改变
8
通常用于选择集的SS可能是最常用的lisp变量。
通常,我会将*ERROR*添加为局部变量,并在主函数中定义一个*ERROR*函数,以便在需要时重置所有内容,而不修改默认的*ERROR*函数。
任何允许用户输入或运行足够长时间以使某人按Esc键的功能都需要说明有人响应不正确。只有在例程顺利完成时,才能在例程结束时重置系统变量。
页:
[1]
2