|
Visual LISP% Y5 U2 O8 `7 [7 o. w! ^
Visual LISP 编辑器中不能正确处理双字节字符。把光标放置在双字节字符后,按 Enter
; S0 y$ A' w& X+ H4 \8 w2 E键转到下一行时,会丢失一些字符。当前不应在 Visual LISP 编辑器中编辑双字节字符。 - k8 `) I6 `. U$ I1 b5 B
在 Visual LISP IDE 中,\r 转义字符不能得到回车符。而是紧跟在最后一个打印文字后面显示文字。解决方法是用 ! f* ?$ J' i9 R3 p2 n
(CHR 13) 代替 \r。) }; `5 e& Q# F1 L/ \
Visual LISP 允许用户在编译应用程序时将 DVB 文件打包到单个 VLX 文件中,但目前无法访问这些文件。解决方法是:象
5 C8 @6 R1 @$ W3 uAutoCAD 早期版本那样,AutoLISP 应用程序所需的任何 DVB 文件必须作为单独文件包括进来。# f- L8 S6 s* |# u8 X: U
如果 LOAD 加载单独名称空间 VLX 时出现错误,某些函数可能在检测到错误之前已输出到当前文档名称空间。必须确保修复此错误、重新编译并重载 # L P `% U6 w1 W/ g/ z( u
VLX 才能确保所有函数的正确版本输出到当前文档。 - s# f9 q( D J6 a# c0 G
在 SDI 模式下运行并且将 LISPINIT 系统变量设置为 1 时,acad.lsp 文件只加载到启动文档中,而不加载到所有在 # Y7 ^/ {! q5 m$ p5 |& U
AutoCAD 任务中打开的后续图形中。为确保将 acad.lsp 加载到所有新文档中,请将 ACADLSPASDOC
$ y9 ^- P R. A$ E2 A& i系统变量设置为 1。( p' F: ]* @1 [4 S5 y% B
当 MENULOAD 命令在 MDI 中加载局部菜单时,该菜单的 MNL 文件对每个打开的文档加载一次,同时所有的用户交互操作都出现在当前文档中。为避免在用 : ]" P9 f. o! {7 j9 d2 M
AutoCAD 打开多个图形时出现多余的打印信息或用户提示,建议在 MNL LISP 代码中不要包含任何用户交互操作。请使用
/ C5 u% o0 I8 J% |8 v/ T* ZMNL 代码为后面选择的菜单项加载所需的 LISP 文件。用 acad.lsp 或 acaddoc.lsp S7 N" n+ A: V1 s# a
文件执行打开图形时要处理的 LISP 9 ~. |' X/ o6 ?3 v3 |2 ` r; j7 J3 a
代码。 3 U4 z2 o/ I8 x& h0 x) P; U. b, R; o. z; }
如果用单个正斜杠作为分隔符,使用 vla-unloadDVB 将文件名参数传递到 ActiveX 0 N: G6 v6 _# ]* e: F# ~
UnloadDVB 的方法将失败。调用 vla-loadDVB、vla-RunMacro 和 vla-unloadDVB 1 Z/ j8 W( O1 H% v/ a. ]0 i( v
时,建议用双反斜杠作为分隔符来指定文件名参数。4 ^$ {% U$ f, E) _' N
试图用 S::STARTUP 函数显示命令行提示时,该提示显示在等待输入到 LISP 例程中的命令行上面。 0 ^) |( { K2 S) Z2 W4 Q4 i2 q" Y) L
当前解决此问题的方法是编写提示用户输入的 VBA 对话框的代码,并从 S::STARTUP 函数调用该对话框。例如,将下面的 # M9 \2 m; X& D( y) _: i# c( f
AutoLISP 代码放在 acaddoc.lsp 文件中,将导致在任何时候打开 AutoCAD 4 h c% Q8 K' {: d
图形都运行 VBA 对话框宏:
2 R0 u/ _8 ~& R: e3 L;; AcadDoc.Lsp
6 |/ u6 B! O5 I(defun S::STARTUP ()/ p+ ~( t) s# v' y
(vl-load-com), x; B* ~. k* S3 T
(setq acadApp (vlax-get-acad-object))
3 r$ _& \( N) ]8 o9 _(setq advbFil "PromptUser.dvb")
- G% s$ X2 y1 }9 `6 y(setq avbaMacro "RunDialog")& Z& j0 M7 b, L, f# l, f
;; 此代码假定 .dvb 文件在 AutoCAD 搜索路径中
/ Z# ?' K& v: j P; i8 K(vl-vbaload advbFil)
7 E) d# p* H* f; ^2 _; u; _(vl-vbarun avbaMacro)- a! m" ?2 @1 r1 U
)5 h1 }2 K8 r D$ A+ b& y) P
此代码中引用的 PromptUser.dvb 文件可从 AutoCAD
. k0 L- i7 N5 z5 N4 u6 D; R2000 网站下载:' ?9 ]/ E3 _6 @( {% C/ g
http://www.autodesk.com/autocad2000-utilities。在“下载”选项卡上,在“产品”下选择“AutoCAD”,在“版本”下选择“AutoCAD 7 C" h& Q7 V7 G& |1 o; [1 B/ {
2000”,在“类别”下选择“实用程序”。输入关键词 vba macro,然后单击“转至”。在“使用 VBA % ~# C4 L- f8 s6 ~% ~
宏在 S::STARTUP 过程中处理用户提示”中单击超文本。下载 prmtuser.zip 文件。
# e, U4 m3 c9 a9 l1 s8 ^
, p. k7 v/ G5 e6 @. o: @用来防止文档被标记为“已更新”的新函数
' s. e4 C; y1 x0 F' l3 Y e两个新函数 acad-push-dbmod 和 acad-pop-dbmod
/ M6 Q; Q8 U; w8 @/ Q; @2 Q可用于挂起和恢复 AutoCAD 用于跟踪图形更改的 $DBMOD 记录机制。这些函数使应用程序将更改文档作为其初始化过程的一部分,无需设置 * I* n3 e" j6 \6 h0 m8 u! A
$DBMOD 标志,也不触发不需要的保存图形查询。
9 W/ p; K- ^8 _5 ?- l(acad-push-dbmod) 将文档的 $DBMOD 系统变量的当前值推入内部堆栈。该函数始终返回 5 ^& Q" D% P) P* S
T。
D2 m- ]( i4 R(acad-pop-dbmod) 将 $DBMOD 的值恢复为文档的内部堆栈上最近入栈的值。对于成功的出栈,该函数返回
+ m6 Q: {: {, z7 @0 ?* nT;如果堆栈为空,则返回 nil。9 T$ N \1 _3 B! D4 t
acad-push-dbmod 和 acad-pop-dbmod 函数在 & C, H* _$ i$ \# D+ b' }* {* I
acadapp.arx 中实现,acadapp.arx 默认情况下在 AutoCAD 启动时加载,但是可以禁用(如有必要)。- R; b0 ^6 @3 n% n8 z; B, N1 ]+ e
要使用新函数,请在执行程序操作(该操作不影响“$DBMOD”值)之前,调用使 $DBMOD 值入栈,然后在执行完此操作后将该值出栈。下面是一个简单的
. }0 a' Y% [6 V) RLISP 样例:4 t5 ^/ K( F( ?8 ]9 {, a [! [* k
(acad-push-dbmod)" i, S- P3 E7 ?# y/ s5 v' d4 t
(setq new_line '((0 ."LINE") (100 ."AcDbEntity")
" T& u2 e0 H$ A% f(8 . "0")- M- {; C- M* s. E/ |4 z8 Y
(100 . "AcDbLine") (10 1.0 2.0 0.0) (11 2.0 4 z" _ |! @% f2 x( ~
1.0 0.0)6 [4 n a/ \6 g
(210 0.0 0.0 1.0)))8 B$ k# p/ q& e0 C! v: S b7 u. v2 S
(entmake new_line) ; 设置 $DBMOD 1 标志
2 R5 O, l! F% F' X- N(command "_color" "2") ; 设置 $DBMOD
2 }/ P s; w, D& G% a4 标志
6 p' h/ \, B9 X( t5 s; V1 r1 k(command "_-vports" "_SI") ; 设置
/ a& R, | r5 d8 M, B3 C$DBMOD 8 标志
" i( R- r. \8 |) s8 y. M(command "_vpoint" "0,0,1") ; 设置
% f4 Q- a' n- @/ T v1 E9 k3 J$DBMMOD 16 标志
2 O) y9 S4 E2 U2 o% ~! T(acad-pop-dbmod) ; $DBMOD 将再次具有调用
1 l( D' Y6 a0 N8 t5 {; acad-push-dbmod 之前的值% i: p! U4 {( O$ E
AutoLISP
0 E. n+ V- \5 ?6 @! d在包含在此 ObjectARX SDK 版本中的 AutoCAD 版本中,如果
& m0 u$ {$ n' q2 K" JAutoLISP 开发人员通过 *error* 机制来替换自己的错误处理程序,并且在该错误处理程序中发出
$ \. e- V$ b4 A" I1 Q(command ...) 调用,则可能出现问题。AutoCAD 没有正确地清除 AutoLISP (command 7 O( q! T% |" s; W0 p% y) d3 u1 w
...) 所使用的 acedCommand() 函数的状态。解决此问题有一个简单的办法:在发出有用的 (command ! E3 y$ q, H3 x# q& n0 J7 Q" L
...) 调用之前发出一个空的 (command) 调用。以下是可能发生此现象的情况样例:% R, _) c) ~$ d/ q$ V1 @
(defun c:bug ()( A U: y/ e+ Y3 h" F
(setq *error* bUG_err)
! R; h" p, k8 B1 E(nentsel "\nPress escape to show the defect...")
3 \$ ~# ?/ m+ r4 l- F# l)- l4 Y, O. [: M
(defun bug_err (s)
4 E: Z2 D0 k! F! c' d; s- C(command "._undo" "_end")
. [* ]- I7 t# _; Q {3 X0 Q" t E0 o)0 z1 N( U8 | V% y
解决办法在下面的错误处理程序中示例:
& q0 f" d T+ m" n(defun bug_err (s) (command) ; 清除 (command
1 q( o; a4 y4 r0 P% }9 n) I$ g...) 状态
6 o `0 @+ C0 I% N) o# Y(command "._undo" "_end")
l8 O( \( v2 y" ?)8 }% m& D4 N2 m0 N5 y$ i1 i: z8 m
Active X
6 J5 T' E5 m o如果要加载 acad.dvb 文件,则不能打开具有嵌入工程的文档(智能文档)。嵌入工程包含有 % E3 a/ M- t' z0 q4 `
AcadStartup()宏,可以访问 Application 对象的特性和方法。要在这种情况下安全地加载智能文档,先要加载
* l8 b+ }) p9 \- Z: @acadvba.arx(可使用 APPLOAD 命令直接加载,也可以执行任何 VBA 命令间接加载)。一旦成功加载 , K( t9 f6 |# Q6 I I
acadvba.arx,智能文档即可安全地打开。6 N3 ]& J/ y3 }- ?
Microsoft Office
% k, a/ D8 c) H4 j! L' m+ ?如果服务器安装的是非英文版的 Microsoft Office,则安装带有
' W+ e4 |9 ]9 l" ?VBA 选项的 AutoCAD 时,将不安装 VBA选项。6 w+ V$ }* Y3 a; b- t: }
开发人员帮助2 R2 [8 i U X2 Q, |9 V
ActiveX and VBA Developer's Guide 不再位于 2 {8 {/ \. g0 L2 N1 b
VBA IDE 的帮助菜单中。要联机查看该手册,请在 AutoCAD 窗口中单击以激活它。在“帮助”菜单的“内容”选项卡上选择“ActiveX . R2 s8 f7 s1 F7 \+ S9 V
和 VBA”,然后选择“ActiveX and VBA Developer's Guide”。$ o: E4 a6 ~/ d. A* N6 o+ c
控制“多文档设计环境”对话框的显示
8 y9 @" K7 u, h7 F+ C' z9 e“多文档设计环境”对话框允许更改 AutoLISP 环境初始化的默认功能。此对话框在下列情况下显示:
- ^0 s/ u# w% ?; S" Z( wAcadLspAsDocDlg 注册键的“Do Not Show”值设置为 0
7 \: {- h3 V8 N) l9 {* y没有运行脚本、AutoLISP 或 ActiveX 应用程序 # E$ l7 A+ B# K
ACADLSPASDOC 系统变量设置为 0 , q4 y! q2 O+ { a4 Y
acad.lsp 文件已在 AutoCAD 搜索路径中
. n8 T7 D9 p- D" W) @- \6 t3 m& Zacaddoc.lsp 文件不在 AutoCAD 搜索路径中 9 ~6 a$ B' {( d+ L% f$ w0 |
SDI 系统变量设置为 0/ a/ X$ J) f, L: J7 S2 t
如果所有这些条件都为真,则在每个任务中首次打开第二个文档时,将显示“多文档设计环境”对话框。 |
|