QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
11天前
查看: 3207|回复: 3
收起左侧

[讨论] 基于AutoCAD的VBA组件的包装结构自动设计实现

[复制链接]
发表于 2007-3-26 20:11:27 | 显示全部楼层 |阅读模式 来自: 中国陕西咸阳

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

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

x
包装CAD 的图形分平面装潢与外观造型、包装结构工程图形(如生产工艺单)2 大类。平面装潢通过Photoshop、Illustrator、CorelDRAW、Freehand 等实现,包装造型部分通过3DMax、Rhino、Maya、Pro / E、UG 等实现;包装结构工程图形设计既可以运用Pro / E、UG、AutoCAD 等软件直接设计绘制,也可以利用一定的平台二次开发实现自动设计生成。目前,国内外也涌现出一批优秀的包装设计专业软件,如packdesign2000、方正包装3. 0。    利用通用的图形图像设计软件直接设计效率不高,而专业软件不可能适应所有的企业,而且这些软件都很昂贵。针对包装容器的生产加工,如何寻找一种有效的途径,既满足不同企业个性化需求,又能缩短设计周期、大大降低人力、物力成本,提高设计效率,是许多企业渴望实现的。当然,平面装潢设计包含了太多艺术成分,具有太多的可变性,难以用程序实现,因此,本文将讨论不同包装企业,以AuotCAD 为平台,如何方便的实现包装容器结构工程图形的自动设计生成。) L1 {+ H  C4 Z  i( d6 }

  R0 t& i2 p# a. A1 AutoCAD 系统二次开发概述% T4 g+ {; u* `6 o
    AutoCAD 系统的二次开发指由既熟悉专业产品设计又掌握计算机应用技术的人员在AutoCAD 平台上开发出针对某类产品的专业CAD 应用软件。二次开发实现图形设计及自动生成是对CAD 软件更高层次的运用。
- _- D6 W% J* _2 W, g$ i- I    AutoCAD 是AUTODESK 公司推出的基于微机的当今世界应用最为广泛的CAD 系统,采用开放式体系和良好的二次开发环境,许多机械、电子、建筑行业的专业软件都是在其基础上二次开发得到的。AutoCAD 先后提供了Autolisp / Visuallisp、ADS / ARX、VBA 这3 种主要的开发工具。从目前的应用看,Autolisp 是最初的开发手段,已被Visuallisp 取代;ADS 将逐步被功能强大的ARX 所取代;VBA 则成为AutoCAD 用户二次开发的另一支生产军。AutoCAD 提供的几种开发工具各有千秋,让各类开发者都能有适合于自己的开发工具。: G/ P7 Q3 F9 [% \7 m6 V- O+ h: C; U
    从AutoCAD R14 开始,VBA 就成为AutoCAD 标准的嵌入组件。VBA 起着一种接口作用,把微软推出的VB 开发工具的强大开发功能与AutoCAD 丰富的图形对象有机结合起来,形成强大的工程图形二次开发功能。VBA 组件基于可视化、面向对象开发工具VB,其开发环境与VB 集成开发环境相近,但较Autolisp / Visuallisp、ADS / ARX 等开发工具,更能快捷、方便地实现友好的人机交互,功能强大、扩展灵活且开发简单,易于实现。
. L& y$ N: s- T2 H  ~    当然,要实现包装结构自动设计系统的二次开发,不论用哪种开发工具,都必须在参数化和图形库与功能构素库技术上下功夫,只有这样系统才能真正高效。本文以一种折叠纸盒为例,介绍利用AutoCAD 的VBA 组件进行二次开发实现工程图自动生成的解决方法及具体实现。
4 H' J3 p. i% k1 u% I# a' x5 @# ?- \' p- K4 G/ W
2 Auto CAD 内嵌的VBA 组件实现包装结构图形自动设计解决方案
) z* I4 n. I& O2 G  n3 e    图1 为包装结构图形自动设计解决方案,分为开发阶段和应用阶段。开发阶段主要是从专业设计入手,分析图形( 由于本文例程图形简单,故省掉该环节)、划分功能构素、参数化、编写dvb 程序;应用阶段通过前期设计提供的数据,同时将dvb程序自动加载,然后直接执行实现自动设计生成。下面是具体
* ~; M+ i1 _* z, z9 ?3 P! L的实现过程。3 k/ @1 g8 b9 C
http://www.icad.com.cn/wencui/UploadFiles_3722/200608/20060808133918265.jpg
$ Z/ s; `6 ]8 m( S
" T. S: V6 |0 B) O图1 包装结构图形自动设计解决方案

+ m6 Z4 H3 A) C1 w8 T7 Q9 _4 o3 功能构素划分% o. h- f1 }: H# u% X5 y! d7 D5 f
    所谓功能构素就是构成完整包装容器的功能部位结构元素,所有功能构素的集合则构成功能构素库[。功能构素解决构成完整结构的不同功能部位,在每个部位都有多种结构供选择情况下,各个功能部位结构任意组合问题,使得用很少的局部功能结构元素的参数化设计( 即很小的功能构素库),就可以高效的得到很多种结构组合,以满足用户需求,而不必每种结构都设计。各种具体的包装结构将从功能构素库中调用构素组合而成,实现构素的复用。, k& S6 @+ J+ W7 U+ ?7 r5 f
    一种折叠纸盒的展开图见图2,将其划分盒盖、盒体、盒底 3 部分功能构素。
. r" r6 r0 K/ X$ W% b* y3 T: r+ A1 d  r' n9 {  n
4 参数化功能构素/ }2 t6 O8 ?. R  [
    参数化设计,就是在给定结构形式的条件下,依据一定的参数,自动生成相应的设计。参数绘图则是通过输入设计的主要参数,对标准图样进行变量代换,实现参数化绘图,最后生成符合设计要求的图形。这种方法的优点是能够和设计模块连接起来,自动出图,实现真正的计算机辅助设计,从而极大地提高设计效率。参数化设计是新一代CAD 技术的基本特征,是实现设计过程自动化的有效手段之一,它不仅使CAD 系统具有交互式绘图功能,还具有自动绘图功能。
  o! ~! C, m  r( P8 P" X5 a7 k7 I
http://www.icad.com.cn/wencui/UploadFiles_3722/200608/20060808133940493.jpg
1 j& \" b1 _; ]' ^6 h
& T+ S; o* M# O2 u" O/ N图2 功能构素划分
    对包装行业,许多包装容器还没有进行标准化、系列化和通用化分类,包装容器作为特殊的产品,必须容装各种随机尺寸、形状的产品,其结构是千变万化的,但是,总可以按一定形式分类,对出现的所有结构按照分类实现参数化,对未出现的新结构可以寻找相似的结构加以修改,逐渐积累。
) E4 P( f+ }8 W- c    对各种纸盒,尤其是常见的六面体盒形,以折叠纸盒为例:一旦其长、宽,高,纸的厚度等尺寸给出,盒形的各部件的尺寸及位置,就可以用盒形的这几个参数来确定,通过修改这几个参数就可以得到不同大小的盒形,当出现用现有几个参数不能表达的新结构,可以根据需要增加参数,这是包装纸盒系统的参数化设计。0 d  J* E5 w0 j! |
    分别令长、宽、高为:L、B、H;插舌和粘贴边为:可kcs、kjt。0 ~8 I) |; f. ~, }
    如图2 所示,对盒盖功能构素标点1 - 15 点,以盒盖的第1 点为坐标原点,水平方向为x 轴,竖直方向为y 轴建立坐标系,则所有坐标点被参数化为含L、B、H、kcs、kjt 相关的表达式。8 |+ R* Z6 i/ k) s& W
$ R' j0 Y" K) [  [2 T% a( a& |
5 编写功能构素绘图程序& {1 Y! Z; H4 b+ X' D
    5. 1 建立交互界面# t, E0 R1 Y* d: Z
    在AutoCAD 命令行执行vbaide 命令打开VBA 集成开发环境,该环境与VB 的开发环境接近。将设计、运行、调试集成,以Thisdrawing 文档组织,根据需要添加模块、实现人机交互的窗体等对象,以dvb 文件保存工程所有信息。右键点击工程,在快捷菜单中选添加,选择窗体命令,即可建立一个新的窗体。根据人机交互需要建立相应的对象。
7 t/ {: _& Z& y- H9 R    5. 2 初始化图层+ O6 Y: s! l2 F( u  Z
    右键点击工程,在快捷菜单中选添加,选择模块命令,即可建立一个新的模块。图层初始化方法如下:
. w# p) N( E& s% cPublic l1csx As AcadLayer ’定义图层对象:
( ?  K' l0 K( }: g. ]4 }Sub italize()’初始化图层
* D7 N0 \, l1 h, o" M' c1 S# HThisDrawing. Linetypes. Load " center" ," acadiso. lin"
' ~% `$ V. [8 v* ]7 Y/ E6 R/ HSet l1csx = ThisDrawing. Layers. Add(" l1csx" )8 f4 U  C6 @: F
l1csx. color = acblack: J. m' T4 b1 r' s
ThisDrawing. ActiveLayer = l1csx2 P" X1 Y, t# g  H" V
ThisDrawing. ActiveLayer. Linetype = " continuous"/ L5 t8 |, d% y1 X
End Sub‘其它图层略
% ~: `4 Q1 d; m1 z    5. 3 在Thisdrawing 文档进行绘图编程( h+ V1 \/ J/ w0 l$ L
    5. 3. 1 创建图形对象;(以盒盖为例)" G$ ^+ v/ U% Z
Sub js-01hega(i )’计算盒盖各点坐标值
* C7 j/ g% r% ~9 x/ S9 E& S, Tpthega(i 0)= 0:pthega(i 1)= 0 ’12 g- T* W6 M7 R/ h3 u- e
pthega(i 2)= 0:pthega(i 3)= b - 2 ’23 `' a. ?! W$ _- ?- K  L
. . .‘其它点坐标表达式省略# ?! h: X4 W% M3 \! O& r/ z
End Sub) r% P8 W% B% }/ K+ x
Sub draw-01hega(i )’画盒盖
3 I: |- B. N9 _+ R2 `/ JDim points(0 To 29)As Double2 Y- K6 H$ N. Z% P
Dim points1(0 To 3)As Double
- e7 [( H0 }: x, L8 R! m’定义盒盖图形对象2 x+ W0 V  ]" {$ A% }8 h, x
Dim plobj-hegai-cx As AcadLWPolyline
, g% ~  l8 ^% k+ O3 L" Y! z$ hDim plobj-hegai-xx As AcadLWPolyline
/ v; e$ R+ P9 N% x7 g: N’画2 - 5 虚线段略3 t$ U: U7 R, P
For i = 0 To 29 ’画实线
. X  F+ B1 T1 F* ?) D& Bpoint(s i) = pthega(i i)
: C3 G6 z1 }2 A2 zNext i3 A4 Y( d- W/ k. k4 {& B( S
Set plobj-hegai-cx = ThisDrawing. ModelSpace.+ C5 {, ~6 g  D8 Y
AddLightWeightPolyline(points)8 X3 S+ `9 H2 C* P" `1 j- f
End Sub
, N6 X- Z, n# b& V/ z6 \+ \    5. 3. 2 创建标注对象;(以盒身为例)' X# r# P4 T0 Y
Sub dim-hes()’水平标注( k. v4 h" q$ T( N3 l
Dim dimobj As AcadDimAligned" h2 u: j- l! L$ h
Dim point1(2)As Double:Dim point2(2)As Double:( ^( O- K4 V' J) }+ [' g$ _/ H
Dim location(2)As Double( k/ \/ B" f3 s: f! e4 I
’水平总尺寸6 [: d5 @# L1 z; H
point1(0)= pthes(8):point1(1)= pthes(9)- kjt
5 o. E$ E* Z# N- ypoint2(0)= pthes(22):point2(1)= pthes(23)
  l2 C$ c9 V- c, U5 Q6 Zlocation(0)=(point1(0)+ point2(0))/ 2:location(1)' g. r6 E7 `, X7 F) R
= b + 50* U# ]+ d- }* _$ \
Set dimobj = ThisDrawing. ModelSpace. AddDimAligned. v+ Z# u5 ]& X
(point1,point2,location)6 [7 B- z: E3 m0 c$ w: H  e8 C
’水平其它尺寸略
1 ?; ], W. B1 q' x* k9 t$ B, {% EEnd Sub: M. F0 H2 j, t; B. G& G3 j' O9 l
    5. 3. 3 创建文本对象6 D. I  f8 B! z0 A* K
Sub txt-01zdzh()’建立文本
' c3 u0 {* e4 g' X: m* }8 U( Q# R6 PDim txt00zdzh As AcadMText2 |' l0 k; h  D, }. v$ c$ T
Dim txt As String:Dim points(0 To 2)As Double
3 B" Z4 y) n- N6 }txt = . . .‘(具体文本内容根据需要给定): w' y: K6 R- Q
points(0) = 4 * l:points(1) = 0:points(2) = 0" q0 Z) X5 Q; l; o
Set txt00zdzh = ThisDrawing. ModelSpace. AddMText
. p* H$ K3 u% S* X# Q6 K" Y# @(points,240,txt); D8 |' n+ O% Q# r& ]
End Sub
  I4 N  n2 v- @0 J7 J9 {% U( a4 z    5. 4 添加自动加载dvb 程序命令和程序文件路径4 j) \0 G' a( u
    将自动加载dvb 程序命令添加到菜单,并在配置对话框中添加的程序文件路径。
% v" R& c- K2 D7 s" |- y4 \% H    以下是向AutoCAD 添加主菜单“ 包装实例”的方法,在ACAD. mnu 文件里添加如下内容:ID-draw-01zdzh[ 折叠盒]ˆCˆC( command " vbaload" " 01-zdzh" );(command " - vbarun" " draw-01zdzh" )在AutoCAD 命令行执行config 命令,弹出“ 选项”对话框,点击“文件标签”,设置菜单加载位置和添加工程文件路径和工作文件路径。
( i( _( j3 Z- y$ B    5. 5 运行命令实现图形自动生成+ y% z/ C* ^  S7 M# h) n/ T
    运行主菜单“包装实例”下的“折叠纸盒”命令,在弹出的对话框中输入长、宽、高、插塞尺寸、接头尺寸等已知条件即可自动生成折叠纸盒生产工艺单。; Z  E4 E% g0 h8 \3 j
. x; ]. I/ ~" M
6 结 语6 I! c0 h- i/ z& f6 v, s6 \
    通过功能构素划分,分别编写了几种盒底和盒盖,自由组合得到多种结构,表明Auto CAD 内嵌的VBA 组件是实现包装结构自动设计的一种有效解决方案。该方法简洁、有效、实用、易实现,适用于企业开发个性化包装结构设计系统,开发成本低。
发表于 2007-3-26 20:52:51 | 显示全部楼层 来自: 中国江苏镇江
楼主呀!欢迎你复制粘贴一些好的资料上论坛哦!
# E) C8 s, c# u- ]6 r
- C1 g4 A$ K  G  Q# ^但要保证人们能看到呀!你的图片我是看不到的,不知你能否看到呀!
) e: L- _' I- E
4 [+ c7 L+ G, Q0 q1 k因此这样的复制粘贴过来就意义不大了!也辜负了你的一片好意哦!) C) {+ F; h% X, q4 ~: X

) |4 f( T( Q! J- M( G, i[ 本帖最后由 ★新手★ 于 2007-3-26 20:54 编辑 ]
发表于 2007-3-27 00:00:15 | 显示全部楼层 来自: 中国安徽合肥
楼主的图我能看到,是从icad链接过来的。
发表于 2009-2-12 13:30:33 | 显示全部楼层 来自: 中国上海
谢谢,虽然简单了点,但是能够看懂一些。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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