QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 2824|回复: 6
收起左侧

[求助] 求CAD二次开发的经验或资料

[复制链接]
发表于 2009-10-31 14:03:14 | 显示全部楼层 |阅读模式 来自: 中国北京

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
:lol: 求CAD二次开发的经验或资料
发表于 2009-11-8 17:53:15 | 显示全部楼层 来自: 中国广东汕头
.如何在让VBA程序在命令行运行& C  y; T7 T8 |& _" `

: O# K1 D7 Y9 @$ F8 ~3 K 在命令行输入(COMMAND "VBARUN" "路径+文件名称+!+工程名称+模块名称+宏名称")! r6 l% E3 o2 K- i6 F; n; ^% \

; j' N- x8 h" r" q        如果宏已经加载可以只输入宏名称,(可以参照VBA命令帮助)9 l1 B- S" ?) X7 h
& t" E2 G7 G. j. k# u0 x" ^
2.经常查看CAD帮助文件,即使只编写LISP程序建议也多看一下VBA的帮助,VBA的所有方法和属性都可以采用VLA-开头的函数实现,比如要想获得打印机列表(打印机介质列表、以及打印样式列表)就可以采用参照LAYOUT。GETPLOTDEVICENAMES的方法获得,相应的VLA函数为RET=VLA-GETPLOTDEVICENAMES(LAYOUT),但需要注意VLA函数返回的数组都是安全数组或者变体,需要用VLAX-VARIANT-VALUE和VLAX-SAFEARRAY->LISP函数来转变为列表以下为获得打印机列表的程序,$ I$ m3 o1 J6 l
/ j& t! ]; I9 D: k- c1 r
(defun c:test()" E" U, f: g1 o- E3 W, V
  (setq acad (vlax-get-acad-object);;;;;获得ACAD程序对象, x& w$ z4 H9 r$ e# o9 B: O
           doc  (vla-get-activedocument acad);;获得当前活动文挡对象
/ l0 F2 Q$ |& {8 R- y* r9 v           layout(vla-get-activelayout doc);;获得当前布局对象: ?: G8 _' {8 ]0 W
          deviceName-var(vla-getPlotDeviceNames layout);;获得打印机列表的变体对象
) I  H) k7 i) u% x          deviceName-safe(vlax-variant-value deviceName-var);;转换为安全数组 + Z  q5 C! W: U, ?
         deviceName-list(vlax-safearray->list deviceName-safe);;转换为lisp的列表
; d8 W0 ^, g3 k5 @& F  )( z4 e6 @: s- s) U6 ?4 L; V8 v
)
8 c8 N8 g2 N/ T. ]* y
9 d; N  Y+ {  o& U7 k: k; nvla函数包括3类vla-函数,vla-get-函数,vla-put-函数,分别对应VBA的方法、获得属性、设置属性,/ Y9 J0 m% O5 [) J; A
" b9 @1 Q, R& c+ O: A1 W! c# u: Q
a。vla-get-函数对应VBA的属性,比如object.endpoint属性采用VLA转换为(vla-get-endpoint object),
7 H  V7 h/ c* q% S: P. x3 \$ Q6 e! `9 h7 y
b。VLA-函数对应VBA的方法,比如object.getboundingbox 转换为VLA函数为(vla-getboundingbox object),* v2 ?) i' q' o. U, j8 E
9 T. u  a: y9 {* ^5 {! _" D" K: ~0 E
c。vla-put函数对应设置对象属性,比如设置圆的圆心采用即更改circle.center属性转换为vla则为(vla-put-center circle pt_safearray)
7 s3 K8 o3 L9 l. U" N. o% M  f! L9 p. A/ A6 a
d.使用一部分属性的获得和设置没有相应的vla函数,你可以采用(vlax-put-property object '属性名称 属性值)(vlax-get-property object '属性名称 )例如设置当前打印机采用(vlax-put-property layout 'deviceNames "打印机名称")/ `2 s$ s/ Q8 I1 v4 P, h
, s4 ]- d( O3 |" R
e,使用vla函数前别忘记运行(vl-load-com)函数啊!!!!

评分

参与人数 1三维币 +5 收起 理由
woaishuijia + 5 技术讨论

查看全部评分

发表于 2009-11-10 23:49:49 | 显示全部楼层 来自: 中国上海
你这太笼统了吧。
  J3 i9 a) f3 _' A- A% T' i  K我现在的经验是:数据要和程序分离,这样数据更新后,不用修改源程序。
头像被屏蔽
发表于 2009-12-10 18:43:33 | 显示全部楼层 来自: 中国浙江台州
提示: 该帖被管理员或版主屏蔽
发表于 2010-7-19 13:15:20 | 显示全部楼层 来自: 中国广东深圳
我也需要这方面资料,
发表于 2010-7-21 11:55:26 | 显示全部楼层 来自: LAN
你这太笼统了吧。, A; h5 A) N0 q# H3 n& M
我现在的经验是:数据要和程序分离,这样数据更新后,不用修改源程序。/ b, W7 @3 U: [& U+ C/ ~- u
yucpp 发表于 2009-11-10 23:49 http://www.3dportal.cn/discuz/images/common/back.gif

# X# t9 E: i. ]9 x这个就需要VBA和数据库结合起来编程,查一查VB编程的书籍,里面都有的.
发表于 2010-7-21 11:57:02 | 显示全部楼层 来自: LAN
或者用VBA和EXCEL 结合也行,或者干脆用TXT文件存放数据
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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