青华模具培训学校

 找回密码
 注册

QQ登录

只需一步,快速开始

青华模具培训学院
查看: 1729|回复: 0

AutoCAD 2002 开发人员信息

[复制链接]
发表于 2011-2-24 16:13 | 显示全部楼层 |阅读模式
Visual LISP" n! M, A; t& O( Q
Visual LISP 编辑器中不能正确处理双字节字符。把光标放置在双字节字符后,按 Enter
1 n$ d- ?* |* R$ s键转到下一行时,会丢失一些字符。当前不应在 Visual LISP 编辑器中编辑双字节字符。 ) k* Q$ x0 ]  i) {  S, K: `9 d
在 Visual LISP IDE 中,\r 转义字符不能得到回车符。而是紧跟在最后一个打印文字后面显示文字。解决方法是用
& g. m* y5 s$ _( s(CHR 13) 代替 \r。3 @4 {. Z: A( w5 Z& e  ?/ B& N8 o( y
Visual LISP 允许用户在编译应用程序时将 DVB 文件打包到单个 VLX 文件中,但目前无法访问这些文件。解决方法是:象
; |  K5 U$ [( y; a$ m+ Z2 ]7 ]+ T/ BAutoCAD 早期版本那样,AutoLISP 应用程序所需的任何 DVB 文件必须作为单独文件包括进来。/ [* @( V, G5 N! A2 v- ~
如果 LOAD 加载单独名称空间 VLX 时出现错误,某些函数可能在检测到错误之前已输出到当前文档名称空间。必须确保修复此错误、重新编译并重载
) w* @2 V/ z; E7 N# l( J$ \VLX 才能确保所有函数的正确版本输出到当前文档。 9 ?1 s9 |! v" V$ P
在 SDI 模式下运行并且将 LISPINIT 系统变量设置为 1 时,acad.lsp 文件只加载到启动文档中,而不加载到所有在 " j- t2 M4 |' f6 f( z
AutoCAD 任务中打开的后续图形中。为确保将 acad.lsp 加载到所有新文档中,请将 ACADLSPASDOC & {4 r, ?9 r/ ]7 H/ w# n6 b
系统变量设置为 1。/ p% F7 a& h5 c. A, I
当 MENULOAD 命令在 MDI 中加载局部菜单时,该菜单的 MNL 文件对每个打开的文档加载一次,同时所有的用户交互操作都出现在当前文档中。为避免在用
. F" g+ ]& {+ z* J# D0 C  ~AutoCAD 打开多个图形时出现多余的打印信息或用户提示,建议在 MNL LISP 代码中不要包含任何用户交互操作。请使用 4 w: U# o1 B. ]2 I" X9 c0 L
MNL 代码为后面选择的菜单项加载所需的 LISP 文件。用 acad.lsp 或 acaddoc.lsp
' x+ p/ c  ~; e/ |$ J, S7 n文件执行打开图形时要处理的 LISP % J4 O* H% S1 [: L/ `3 s
代码。 ; w% U! D8 Y7 i0 p5 X
如果用单个正斜杠作为分隔符,使用 vla-unloadDVB 将文件名参数传递到 ActiveX 7 R0 G4 o* J( d% |9 Y; X: g& M
UnloadDVB 的方法将失败。调用 vla-loadDVB、vla-RunMacro 和 vla-unloadDVB * r' m1 P# v% g0 D5 |9 O* p4 R
时,建议用双反斜杠作为分隔符来指定文件名参数。2 e* G1 T6 q  ?5 V6 w1 v
试图用 S::STARTUP 函数显示命令行提示时,该提示显示在等待输入到 LISP 例程中的命令行上面。
' P3 [+ W0 i- G- h: ]当前解决此问题的方法是编写提示用户输入的 VBA 对话框的代码,并从 S::STARTUP 函数调用该对话框。例如,将下面的
. K9 J9 Z0 V: Q, V2 vAutoLISP 代码放在 acaddoc.lsp 文件中,将导致在任何时候打开 AutoCAD
3 }5 n' x0 @* i& p图形都运行 VBA 对话框宏:
) W, @7 K3 G' x" k7 o0 \;; AcadDoc.Lsp
& t7 w& \" j% r! l+ `0 {(defun S::STARTUP ()
1 A* M9 B' ^! p9 `1 q9 P2 l9 }5 d(vl-load-com)& j! k( \; x) Z0 d: Y2 f1 H& i
(setq acadApp (vlax-get-acad-object))- {/ l6 r4 A5 {3 r4 L
(setq advbFil "PromptUser.dvb"). d. D: x4 {: [- l4 Y* Q- u# N/ b9 q
(setq avbaMacro "RunDialog")$ M/ Z7 a2 i. p" T
;; 此代码假定 .dvb 文件在 AutoCAD 搜索路径中4 w9 O! v; L5 O1 m6 ~' m4 \# r9 e. p
(vl-vbaload advbFil)
2 A" i% [% ~+ M(vl-vbarun avbaMacro)' s) [- [. q, i0 o% g" ?* j. C
)3 H0 n1 U& A2 G4 K) L0 P* |
此代码中引用的 PromptUser.dvb 文件可从 AutoCAD
6 d3 w/ t3 @3 z! P- O2000 网站下载:
. P* Q6 x  M8 Y* h0 J" Rhttp://www.autodesk.com/autocad2000-utilities。在“下载”选项卡上,在“产品”下选择“AutoCAD”,在“版本”下选择“AutoCAD 7 W2 y: J# J0 z3 E% ?1 I0 X
2000”,在“类别”下选择“实用程序”。输入关键词 vba macro,然后单击“转至”。在“使用 VBA 5 \4 n9 [: _3 n5 y7 y. D% Y: B
宏在 S::STARTUP 过程中处理用户提示”中单击超文本。下载 prmtuser.zip 文件。
* }+ c' n* d9 b! r) d0 `7 S( Q' ~# c2 N3 e0 n
用来防止文档被标记为“已更新”的新函数# ?9 h) c9 I8 W4 R; c2 K
两个新函数 acad-push-dbmod 和 acad-pop-dbmod
, ^6 |  v8 A; @可用于挂起和恢复 AutoCAD 用于跟踪图形更改的 $DBMOD 记录机制。这些函数使应用程序将更改文档作为其初始化过程的一部分,无需设置 6 x) h+ y7 C! o
$DBMOD 标志,也不触发不需要的保存图形查询。9 [+ o! n3 I3 B$ H! J; D
(acad-push-dbmod) 将文档的 $DBMOD 系统变量的当前值推入内部堆栈。该函数始终返回
! g! w  g% C  C4 Q- x0 XT。
+ U, g/ U7 q. `/ i* k) Q- X(acad-pop-dbmod) 将 $DBMOD 的值恢复为文档的内部堆栈上最近入栈的值。对于成功的出栈,该函数返回 $ v4 B+ m, e( Z8 i, P
T;如果堆栈为空,则返回 nil。
* m* B4 P  D) m& sacad-push-dbmod 和 acad-pop-dbmod 函数在
9 q. @! v+ f5 _8 t) eacadapp.arx 中实现,acadapp.arx 默认情况下在 AutoCAD 启动时加载,但是可以禁用(如有必要)。) q2 V1 _2 c* e0 D- F+ K1 g
要使用新函数,请在执行程序操作(该操作不影响“$DBMOD”值)之前,调用使 $DBMOD 值入栈,然后在执行完此操作后将该值出栈。下面是一个简单的
' G- L+ `# {9 ]& A! `3 X0 Q3 ?LISP 样例:& J' k5 y3 s& C: o+ {- |
(acad-push-dbmod)
3 V) g" f# {; C4 a6 T(setq new_line '((0 ."LINE") (100 ."AcDbEntity") / `9 E5 k4 q' w* H7 a  z( W% q& N
(8 . "0")
. v% \, R+ e8 ~7 y5 C- t9 }) Q6 m(100 . "AcDbLine") (10 1.0 2.0 0.0) (11 2.0 - f7 A: R( y, f) h7 _
1.0 0.0)+ M' W0 V) \" H" `7 C
(210 0.0 0.0 1.0)))
! t# f, l* j* B1 f8 ?9 {# b7 Y(entmake new_line) ; 设置 $DBMOD 1 标志8 }0 M/ p0 _1 V8 z
(command "_color" "2") ; 设置 $DBMOD ( w  k' t* `6 q' ?7 b
4 标志$ k' d& [& b) ~5 k
(command "_-vports" "_SI") ; 设置 * V0 h6 B* }5 ]
$DBMOD 8 标志
! _* i9 Z3 T2 j' f(command "_vpoint" "0,0,1") ; 设置 5 }% p# P+ ]8 s& Z  C
$DBMMOD 16 标志
% s5 ?; C8 f& O7 r0 T7 Y(acad-pop-dbmod) ; $DBMOD 将再次具有调用- _- w; `% ?% Q9 `: A& H5 y# e
; acad-push-dbmod 之前的值
! ]: I. q/ }: o0 P$ ^" _AutoLISP8 d6 A6 x. y; z* Y1 |
在包含在此 ObjectARX SDK 版本中的 AutoCAD 版本中,如果 $ T4 P$ ?- ^! B: z" j) T7 z& q
AutoLISP 开发人员通过 *error* 机制来替换自己的错误处理程序,并且在该错误处理程序中发出 ' _7 T# i% b' }% R
(command ...) 调用,则可能出现问题。AutoCAD 没有正确地清除 AutoLISP (command
  E  S2 h3 c0 ]4 Q% x; @; C7 H...) 所使用的 acedCommand() 函数的状态。解决此问题有一个简单的办法:在发出有用的 (command
- x& S! H5 M0 y5 _/ }4 v+ x% r...) 调用之前发出一个空的 (command) 调用。以下是可能发生此现象的情况样例:- w) O6 F, i3 d
(defun c:bug ()3 W0 F( q/ Q$ s6 m8 T
(setq *error* bUG_err)
$ h: ]( N0 R2 X- M(nentsel "\nPress escape to show the defect...")+ k$ x0 k6 ?  c, R& ^
)
0 h- @& w- m6 z) i; h0 V2 K% i(defun bug_err (s)
, C1 L7 T/ J' {: ~(command "._undo" "_end") 9 K6 P: a' h8 _- x" Y4 J' @
)
% \4 j$ N% e& g6 y; l/ d3 A解决办法在下面的错误处理程序中示例:
+ f( G  e# K4 N! P! ?1 K(defun bug_err (s) (command) ; 清除 (command 7 `+ V; D5 R8 R  q! f1 O5 D2 c7 m
...) 状态
% \' O# T) l7 E, _/ g0 ^5 d% }& Y(command "._undo" "_end") ; W2 Y9 E! }5 }) _7 m2 l# x( ]
): Q! S  m. W  J& K  R& m$ L
Active X9 F9 y! E3 |+ T  o0 I
如果要加载 acad.dvb 文件,则不能打开具有嵌入工程的文档(智能文档)。嵌入工程包含有
, P. V. q4 O$ PAcadStartup()宏,可以访问 Application 对象的特性和方法。要在这种情况下安全地加载智能文档,先要加载   J& K6 H/ x9 K% E5 a: f+ _/ J
acadvba.arx(可使用 APPLOAD 命令直接加载,也可以执行任何 VBA 命令间接加载)。一旦成功加载
) T4 z8 @/ f$ R  c' p2 H% C/ b7 X) Eacadvba.arx,智能文档即可安全地打开。
% }+ i6 X- O7 p0 [+ V, L8 H; dMicrosoft Office
6 W# y* z5 S. v1 d. n) @如果服务器安装的是非英文版的 Microsoft Office,则安装带有
! K0 z( f* J' r7 ]VBA 选项的 AutoCAD 时,将不安装 VBA选项。
5 |" ^3 x5 I- n: C开发人员帮助
0 ^& c7 M/ V+ |7 }ActiveX and VBA Developer's Guide 不再位于 - |$ Q6 J9 j# ?+ f, o9 \% n; v8 z
VBA IDE 的帮助菜单中。要联机查看该手册,请在 AutoCAD 窗口中单击以激活它。在“帮助”菜单的“内容”选项卡上选择“ActiveX ! R" o5 g3 j; W  w
和 VBA”,然后选择“ActiveX and VBA Developer's Guide”。- J: ?9 k. v4 b5 n% z
控制“多文档设计环境”对话框的显示! y5 B- t! }; ]$ X  @; S5 w2 {* }
“多文档设计环境”对话框允许更改 AutoLISP 环境初始化的默认功能。此对话框在下列情况下显示:7 C7 f! r  v( a3 D; T6 _0 t7 B, v: D
AcadLspAsDocDlg 注册键的“Do Not Show”值设置为 0
9 _5 T3 N9 F0 Y( e; i0 J没有运行脚本、AutoLISP 或 ActiveX 应用程序 2 D, J- J( D! R( K$ n3 j) {" I
ACADLSPASDOC 系统变量设置为 0 5 P+ b' f- o0 }* T8 d  A9 j
acad.lsp 文件已在 AutoCAD 搜索路径中 * Z, a# z2 {  M
acaddoc.lsp 文件不在 AutoCAD 搜索路径中 " a1 j# ?: V! }7 ?9 U; W
SDI 系统变量设置为 0( @8 R$ y: `+ Y) e2 k$ w- [
如果所有这些条件都为真,则在每个任务中首次打开第二个文档时,将显示“多文档设计环境”对话框。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|sitemap|小黑屋|Archiver|手机版|UG网-UG技术论坛-青华数控模具培训学校 ( 粤ICP备15108561号 )

GMT+8, 2025-5-16 11:57 , Processed in 0.074209 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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