|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AutoCAD环境下旋转类拉延件毛坯尺寸的自动计算
! h7 t5 W" d) L4 ?: Z摘要:讨论了如何利用AutoCAD的ADS功能来开发软件,在AutoCAD环境下实现旋转类拉延件毛坯尺寸的自动计算,文中对软件结构及其主要功能模块的算法进行了较为详尽的描述。
+ F$ P3 \5 F e: p- r) \关键词:旋转类拉延件;毛坯尺寸;自动计算
3 y' ~2 x. n: U" z+ q8 `
9 n- ~( j* Z: u1 U5 [6 C6 x7 W一、引言 + n0 ]# ` m% u, ]1 F) n! b( r
7 U/ w- a, N+ J. b5 Y, b8 ~" B在进行旋转类拉延件拉延工艺设计时,以最后一次拉深成形的制件为基础计算出毛坯尺寸(直径)是必不可少的工作。手工计算时,由于旋转类拉延件形状变化大,故常涉及到大量的公式和表格,计算过程较为繁琐、枯燥。 + g3 v) @5 c# c! z# C
2 y2 @; l6 H3 kAutoCAD是国内目前较普遍使用的计算机绘图软件,待加工的拉延件的零件图常常已经在AutoCAD环境下绘出。根据AutoCAD下的零件图,通过开发软件自动分析计算出毛坯尺寸,是一项较有意义的工作。
$ g+ a, e# h% u. z ]. f7 _# ]7 i- a& c( x+ k+ v
AutoCAD软件包从AutoCAD R11.0开始,增加了ADS功能,可通过C语言按ADS指定的形式来调用AutoCAD的所有命令,并可进行实体(即点、直线、圆弧等)几何信息的读取,从而大大加强了利用AutoCAD进行二次开发的功能。
/ q4 B# x" x, D+ t8 |
: L4 l! E3 z* I7 l1 o& v, B为此,笔者利用AutoCAD的ADS功能,开发了一个对于AutoCAD环境下任意绘出的旋转类拉延件能自动计算毛坯尺寸的程序。该软件采用AutoCAD R12.0 for DOS下的ADS开发,利用ADS函数库编制的C程序通过High C 1.7编译,在AutoCAD Command状态下运行,可迅速准确地计算毛坯尺寸。
( q/ d7 Y5 r4 f) U" R4 b2 m' n# j$ \4 |1 X7 Y
二、软件设计
' Y8 b6 s3 [( ]8 D+ V/ i
+ p B- d; w1 m* v9 A1.软件设计思想
; z3 y" [" l3 s" ~- }3 Q B% U, H# T7 y$ D9 c: v% H8 k, @3 \
根据久里金法则,任意由直线和圆弧为母线形成的旋转拉延件的毛料直径D可由下式决定:
- W0 F* K1 \- J$ r式中Li——旋转拉延件中性层各线段(直线和圆弧)长度 + \! C" d- Y9 D
Xi——旋转拉延件中性层各线段(直线和圆弧)重心到旋转轴的距离
: d: Z& g7 u I9 W1 H0 L9 snum——旋转拉延件中性层线段数
: P2 Y) R8 I8 B7 D! Q0 ?4 B
) A) O, t8 o- [. [" Y1 B |' v图1示出了某旋转拉延件的线段长度及其重心的标注,中性层共有由8段线段组成,其中直线4段(L1,L3,L6,L8),圆弧4段(L2,L4,L5,L7)。
* f; E7 e% L; [! e( J5 |现在需解决的问题是需要获取中性层各线段的几何参数,如直线的起始、终止点坐标,圆弧的圆心、半径、起始角、终止角。获取中性层各线段的几何参数后,根据有关公式即可求得各线段(包括直线、圆弧)的长度及重心位置,从而可由以上公式求得毛料直径。 3 A- B$ T g& U" ]; b
# _6 A& K9 w+ Y* U
然而,中性层是假想的,由AutoCAD命令任意绘出工件图的中性层往往也并未画出,故需要首先读取工件图中内外两侧各直线和圆弧的几何数据,然后即可间接地求得中性层各线段的几何参数。 4 j4 j8 d/ l! ^" u8 S# y' p
+ J8 V+ s$ R3 j# L0 l+ O故本程序设计与实现上分为4个大的步骤: 9 Q8 e/ c, P4 m5 F+ C: }" Q4 ?' ?
9 D( Y0 }! ]3 I2 I) h5 r* F- }: J(1)分别读取工件图内、外侧各线段的几何数据;
4 k; t* ~6 H- B) N% X$ V) n(2)利用内外侧各线段几何数据求中性层各线段几何数据;
8 \" @/ x7 }* L; Z) }3 b- I- R0 o(3)求中性层各线段的长度及重心位置;
1 x5 L# g8 L9 j p; v- k/ h(4)利用公式(1)求得毛料直径。
4 i) X; \ `& t! f9 Q) y5 T% Y C5 G( u- ?) A* c6 l
在第1、2、3步中采用了表1所示结构用于存贮内外侧及中性层各线段几何数据。 ) v6 {( g( I. N
表1实体信息的存贮方式 + Z% f6 L4 ? F
| PR[0] | PR[1] | PR[2] | PR[3] | PR[4] | PR[5] | | 直线(1) | 起点X1 | 起点Y1 | 终点X2 | 终点Y2 | 0 | ∶8 [" R* A2 S. V7 ~/ A
∶ | ∶" |0 q. |& s5 W
∶ | ∶! E/ t7 H8 D i( f5 v" @1 ^
∶ | ∶- U$ E6 M6 X$ @! q5 {$ e
∶ | ∶* b' j3 Q2 F4 s. ]5 n' @% w
∶ | ∶, R: A$ }: V' Y
∶ | | 圆弧(2) | 圆心X | 圆心Y | 起角ANG1 | 终角ANG2 | 半径R | ∶ a/ B( Z# K0 M$ I0 i" Y
∶ | ∶
5 E2 W* |6 u5 I. s3 }∶ | ∶
- `6 R" l4 z! T. Q6 a∶ | ∶
2 @! D+ J5 u: B, U# K∶ | ∶
4 a( o, z$ h9 |/ ]∶ | ∶" f" B+ R7 D5 O7 M
∶ | | 圆(3) | 圆心X | 圆心Y | 0 | 0 | 半径R | ∶4 M7 _, p" X# x; x/ i) h0 m
∶ | ∶" |0 d! B" b( e, a3 W4 k
∶ | ∶$ V& |- i# o% A9 j, Q5 G {, N6 F
∶ | ∶) T& r) y& I7 Y- a
∶ | ∶( O8 j( @/ L- m' {8 L
∶ | ∶
/ K; ?$ O: L, |* E$ T$ l∶ |
2.软件结构
3 g) s% I1 E6 k
7 W3 R) _7 p" D( n. Y根据以上设计思想,本软件结构流程图如图2所示。其中,表PR_SS[N] [5]、PR_L[num] [5]、PR_W [num] [5]、PR_M [num] [5]的结构形式与表1相同。
5 x6 b3 S8 x& N, n' h( V( x, j三、制件图内外侧各线段实体信息读取的算法 / U! r* `+ ?% t: z: g9 [! d, ^/ y- A
0 `% A# W# z# G4 k2 w& \5 c; d如上所述,AutoCAD环境下的制件图内外侧线段实体信息的拾取(即图2的前4个部分)是实现本程序的关键。现设定用于表达旋转拉延件内外结构的所有线段均绘于“0”层(这也符合一般AutoCAD绘图习惯),而尺寸标注、剖面线等则置于另外的层,则内外层线段几何信息读取算法如下:
' Q/ g! e8 W! A: e b n% I* ^! X( M$ B1 R
Stepl【交互拾取表示厚度的左实体】
2 Q" x, H- M' S% ^5 b, G9 m交互选择表示厚度的中心线左侧实体S0(如图1所注)
' y) d# w" A2 a- dStep2【获取实体S0的两个端点】 : a1 s$ c) i+ [) J
读取实体S0的两端点坐标,存入数组PRSO[2][2]中
$ V* Z% Y$ X) u, FStep3【拾取0层上的所有实体】
3 v' P, ?6 _/ V6 ]建立0层上的所有实体的集合SS{S0,S1,…,Si,…}
" O0 n( R! K( U$ ~, Q$ \+ BStep4【获取实体集SS的实体数量】
8 a2 V- X- x1 K0 Q: `* |从实体集合SS中获取实体数量N 6 S6 D2 X) P0 G
Step5【获取实体集SS中一个实体的信息】 . [' u2 Z9 m3 z# L, U
从SS中选择一个实体SSi,读取它的几何信息 5 h' g4 X* Z b3 I0 u
Step6【实体信息存放】
! E8 p4 _" x+ M) V; |% l将实体SSi几何信息放入如表1形式的数组PRSS[N][5]中
% C. l3 L; Z5 t2 y) o& z mStep7【判断】N=N-1如N>0,进入Step5,否则进入Step8 / P! J; s2 z1 L+ O
Step8【内外侧线段实体信息选择】 / J/ M! S1 a' ^: r) X, ~. ]
' _2 K( V( c0 J% Z- n" n根据数组PRS0[2][2]和PRSS[N][5],分别建立存贮制件外侧线段几何参数的数组PRW[num][5]及内侧线段几何参数的数组PRL[num][5] 4 k' _# w9 a; V' _" m5 D, Z$ W
/ g7 ]6 V+ W/ k% V+ }# r# `1 V; a% ?其中,Step1主要由调用adsssget()函数完成
( u5 E0 S8 F5 u" | QStep2主要由调用adsentget()函数完成 3 ^" t. Y! B* ` T! H
Step3主要由调用adsssget()函数完成 8 R% [2 U" y' I1 u4 r
Step4主要由调用adssslength()函数完成
* P/ E' @( l1 k* H! m' UStep5主要由调用adsentget()函数完成
. e/ D3 a. B$ ^+ ~7 z1 w) V* _9 sStep1中ADS函数adsssget()的调用格式为: ' _. @" ]* k+ @' Y
adsname S0;/*实体名变量*/ 5 [( H5 b' C( u, e5 {
adsssget(NULL,NULL,NULL,NULL,S0);/*交互选择获取实体*/
]& \% [9 g3 |% ]# X0 MStep3中该函数的调用格式为:
% ~* w: r2 | Kadsname SS;/*实体集名变量*/
- T5 }. S. z" n. F5 yChar sbuf[6];/*层名变量*/ / R W/ ?! k, e- Q' [9 |
struct resbuf eb;/*结构缓冲器变量*/
* }( x, R+ [! W5 [0 l3 S/ bstrcpy(sbuf,“0”);/*层名变量赋值*/
1 e5 b* z0 {# `$ Y) Y- q1 Web.resval.rstring=sbuf;/*结构缓冲器字符串赋值*/ # D3 Q, D" v. c5 r" a- ?0 t
adsssget(“X”,NULL,NULL,&eb,SS);/*获取“0”层实体集*/ ( k3 h% Z7 n5 y% [4 V/ t6 F8 c
$ E' {" S3 w2 J7 O2 \ ^) j在Step2、Step5中调用adsentget()函数的实质是产生一个结构缓冲器链表,该链表的结构示意图如图3所示。 # h& t6 v+ X" L4 \" W! F9 g
从结构缓冲器链表中可获取当前实体集中每个实体的类型(如点、直线、圆弧等相应的DXF代码)和几何参数(即直线的起始、终止点坐标,圆弧的圆心、半径、起始角、终止角),由于程序段稍长,此处从略。 9 H8 h, U! M/ _
) b- e6 r: r, |1 l
Step8主要根据S0的两个端点坐标(存于数组PRS0[2][2])和零件图内外侧所有的实体的几何信息(存于数组PRSS[N][5])按首尾相连原则分别确定内侧和外侧线段及其几何参数,并分别存入相应数组PRL[num][5]和PRW[num][5]中。 9 D' {# a6 g8 {* x' _
: @+ s: Y! h: i
四、结束语 6 H [2 K! O% H2 n: Q- ~ ]' ]
* S( i* f; S7 X- h1 h, q2 k作者根据以上程序设计思想和有关算法,设计完成了旋转拉延件毛坯尺寸的自动计算软件。在AutoCAD COMMAND状态下通过“XLOAD”命令加载本程序后,绘制(或调入)一个旋转拉延件零件图,运行本程序,即可在屏幕上显示打印出毛坯尺寸。
: {2 u& p$ ^4 J0 R& o2 N
4 T' |/ Z. k" n3 e该程序已对多个由AutoCAD绘制的任意复杂程度的旋转拉延件计算出毛坯尺寸。运行表明:程序正确、可靠,能满足迅速、自动计算毛坯直径的要求。本程序既可单独运行,也可作为后续的拉延模CAD系统的一个子系统运行。 |
|