|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AutoCAD环境下旋转类拉延件毛坯尺寸的自动计算 6 y; q/ S8 M L: J$ x) b
摘要:讨论了如何利用AutoCAD的ADS功能来开发软件,在AutoCAD环境下实现旋转类拉延件毛坯尺寸的自动计算,文中对软件结构及其主要功能模块的算法进行了较为详尽的描述。 5 z& [) `" O# x y- j0 c# _& W: M
关键词:旋转类拉延件;毛坯尺寸;自动计算 ( L9 [, H8 `$ m, z
" N2 `9 `9 ~/ N9 a% H+ M* q
一、引言
! e+ I2 ]. W! ~2 q7 h
/ s' X4 b. X+ v* `/ v; I在进行旋转类拉延件拉延工艺设计时,以最后一次拉深成形的制件为基础计算出毛坯尺寸(直径)是必不可少的工作。手工计算时,由于旋转类拉延件形状变化大,故常涉及到大量的公式和表格,计算过程较为繁琐、枯燥。 . _* b& O7 \' I6 ^/ p/ l
4 N# ?9 u, _# f. A7 c
AutoCAD是国内目前较普遍使用的计算机绘图软件,待加工的拉延件的零件图常常已经在AutoCAD环境下绘出。根据AutoCAD下的零件图,通过开发软件自动分析计算出毛坯尺寸,是一项较有意义的工作。 + j& U- P6 d$ E) N
! f p1 R {) F3 ]5 dAutoCAD软件包从AutoCAD R11.0开始,增加了ADS功能,可通过C语言按ADS指定的形式来调用AutoCAD的所有命令,并可进行实体(即点、直线、圆弧等)几何信息的读取,从而大大加强了利用AutoCAD进行二次开发的功能。
5 L2 o$ [% j$ N" p; i3 G; r& n6 p( w7 H0 f2 P, i/ h0 @! _
为此,笔者利用AutoCAD的ADS功能,开发了一个对于AutoCAD环境下任意绘出的旋转类拉延件能自动计算毛坯尺寸的程序。该软件采用AutoCAD R12.0 for DOS下的ADS开发,利用ADS函数库编制的C程序通过High C 1.7编译,在AutoCAD Command状态下运行,可迅速准确地计算毛坯尺寸。 3 t7 F3 K9 u/ t$ W8 I
; l1 v Z6 x; U8 U3 _二、软件设计
# C# }+ U; l l2 |% O" E/ p6 x+ D6 U u/ R- e
1.软件设计思想
% d( y- V G! Z
3 V8 d1 r) R! n( j根据久里金法则,任意由直线和圆弧为母线形成的旋转拉延件的毛料直径D可由下式决定: $ E) c3 a/ x0 F/ Z4 g, b9 h
式中Li——旋转拉延件中性层各线段(直线和圆弧)长度 $ w+ L* M3 x5 _5 ^4 z& o
Xi——旋转拉延件中性层各线段(直线和圆弧)重心到旋转轴的距离
3 E: k; h* Z; x/ R4 S* ?8 y( Rnum——旋转拉延件中性层线段数 1 {5 i# A' p3 _6 P9 X
7 a, l1 s% R, P: i5 Q图1示出了某旋转拉延件的线段长度及其重心的标注,中性层共有由8段线段组成,其中直线4段(L1,L3,L6,L8),圆弧4段(L2,L4,L5,L7)。
, V( O+ ]- A6 H现在需解决的问题是需要获取中性层各线段的几何参数,如直线的起始、终止点坐标,圆弧的圆心、半径、起始角、终止角。获取中性层各线段的几何参数后,根据有关公式即可求得各线段(包括直线、圆弧)的长度及重心位置,从而可由以上公式求得毛料直径。 ) \5 Q( n( A6 t5 q, b
! T) t! |4 B! W& [$ z$ G然而,中性层是假想的,由AutoCAD命令任意绘出工件图的中性层往往也并未画出,故需要首先读取工件图中内外两侧各直线和圆弧的几何数据,然后即可间接地求得中性层各线段的几何参数。
4 J5 B, @9 }0 p: K" y: m$ y. {" B' f4 e( y" Q7 Q
故本程序设计与实现上分为4个大的步骤:
% o& H/ q5 u/ ^+ Z* i, d, V* P- u9 I
(1)分别读取工件图内、外侧各线段的几何数据; $ o$ z2 b1 {) D. {9 `% z0 ]
(2)利用内外侧各线段几何数据求中性层各线段几何数据; $ {( v7 U& O! Y* p
(3)求中性层各线段的长度及重心位置; , \" V# |. f B/ _* \1 Y+ ]: ]
(4)利用公式(1)求得毛料直径。
, c9 p- `7 X+ f* f( H1 z9 b3 ~( D& l, y5 b. ?
在第1、2、3步中采用了表1所示结构用于存贮内外侧及中性层各线段几何数据。
" o" c; C; n: `. n9 n& A表1实体信息的存贮方式
+ ~% X# Q' ^; M| PR[0] | PR[1] | PR[2] | PR[3] | PR[4] | PR[5] | | 直线(1) | 起点X1 | 起点Y1 | 终点X2 | 终点Y2 | 0 | ∶+ P5 p2 L1 ?9 U- f R7 ~: J/ D
∶ | ∶
: o- V7 ^1 V, _% r0 T∶ | ∶; L6 X6 ]( M' B( S
∶ | ∶" o' x+ E/ p: I+ c: W; L; H
∶ | ∶
% C% U1 y8 `( k; G6 ?+ E7 Y q% x∶ | ∶* _) E- ?8 T9 X( u
∶ | | 圆弧(2) | 圆心X | 圆心Y | 起角ANG1 | 终角ANG2 | 半径R | ∶
5 S, p9 [1 F' r0 @9 ^( e+ x; q∶ | ∶
( I! Z* |* v0 C& u) A∶ | ∶
8 Q3 ]! A) l! S# Z6 |% A6 i8 k' F∶ | ∶8 { y; ]+ K) N
∶ | ∶# f- R% H- w9 {3 [
∶ | ∶! i8 k1 X- O( t [9 j0 o
∶ | | 圆(3) | 圆心X | 圆心Y | 0 | 0 | 半径R | ∶- A1 ~% `& s$ W. ^
∶ | ∶0 {& _8 e( ?8 ~% ?+ ^- n
∶ | ∶
$ K( W, R% Y! {5 [% g, X∶ | ∶- p0 Q+ s4 L9 s# d: T
∶ | ∶. {! B1 V* a- [; F! J
∶ | ∶5 N$ X: j' X: Q+ m! i
∶ |
2.软件结构 ) d* b3 R, n/ {
! ]. s- E% W* Z: j1 x' E
根据以上设计思想,本软件结构流程图如图2所示。其中,表PR_SS[N] [5]、PR_L[num] [5]、PR_W [num] [5]、PR_M [num] [5]的结构形式与表1相同。 9 R' @9 i9 K) b6 P2 M$ v
三、制件图内外侧各线段实体信息读取的算法
% \& z( i* e- g w8 t+ c/ l' ]( p; U/ m. e* s) Z8 ^
如上所述,AutoCAD环境下的制件图内外侧线段实体信息的拾取(即图2的前4个部分)是实现本程序的关键。现设定用于表达旋转拉延件内外结构的所有线段均绘于“0”层(这也符合一般AutoCAD绘图习惯),而尺寸标注、剖面线等则置于另外的层,则内外层线段几何信息读取算法如下:
# P! P2 b7 B o+ ]3 ~/ i9 g# _. K: E
Stepl【交互拾取表示厚度的左实体】
; _- w r9 Q- M! P$ {$ q交互选择表示厚度的中心线左侧实体S0(如图1所注)
: b" w4 N+ }% a3 _' C* v2 xStep2【获取实体S0的两个端点】
/ H6 a' F( L0 \/ c读取实体S0的两端点坐标,存入数组PRSO[2][2]中 3 b; k: e: m2 B7 J
Step3【拾取0层上的所有实体】
( V' W9 f6 i2 C7 V: S6 i建立0层上的所有实体的集合SS{S0,S1,…,Si,…} % `3 c8 Z( _8 n w1 t
Step4【获取实体集SS的实体数量】 9 }7 K' v& W$ B( D1 ~( d
从实体集合SS中获取实体数量N . w, A1 k8 C: d
Step5【获取实体集SS中一个实体的信息】
% d& ^8 ^' J6 M1 P0 n8 v从SS中选择一个实体SSi,读取它的几何信息 ) ]! B8 J/ p6 W
Step6【实体信息存放】 1 A$ h( B+ Y# F! P6 c7 ?; `, m
将实体SSi几何信息放入如表1形式的数组PRSS[N][5]中
+ ~# t9 {: W" r9 j1 L6 h" a0 mStep7【判断】N=N-1如N>0,进入Step5,否则进入Step8
( W$ g( i9 x( X" x9 ]# x8 r0 vStep8【内外侧线段实体信息选择】 4 F' c: z- Y. Q2 X
- J1 [6 e' q6 x1 L5 o6 e
根据数组PRS0[2][2]和PRSS[N][5],分别建立存贮制件外侧线段几何参数的数组PRW[num][5]及内侧线段几何参数的数组PRL[num][5] ! b! T4 h' W9 Z. P& f! b
, g) U! ]" [: ~其中,Step1主要由调用adsssget()函数完成 9 G' t' e9 F/ v
Step2主要由调用adsentget()函数完成
1 }; _* e9 K9 x {- lStep3主要由调用adsssget()函数完成
; n2 F$ B2 N' ?, M- OStep4主要由调用adssslength()函数完成 ! D4 @. [9 u3 M
Step5主要由调用adsentget()函数完成
' o. b$ e8 W4 q/ N/ o& Z, `Step1中ADS函数adsssget()的调用格式为: # j4 e; F' {9 f9 p' B S3 R( {
adsname S0;/*实体名变量*/
( f+ q' i' x3 ]2 Oadsssget(NULL,NULL,NULL,NULL,S0);/*交互选择获取实体*/
# C7 b) R G2 \2 w6 _$ c/ DStep3中该函数的调用格式为: $ W& E3 a* c! N( X. H
adsname SS;/*实体集名变量*/
% I" p! b, ]. r4 U1 D' f& mChar sbuf[6];/*层名变量*/ - U# H5 e# J0 k% j) P
struct resbuf eb;/*结构缓冲器变量*/ ' s) x9 m/ b2 q9 T
strcpy(sbuf,“0”);/*层名变量赋值*/
' Q( [3 I* C: A( z% [eb.resval.rstring=sbuf;/*结构缓冲器字符串赋值*/
4 x* [- y5 s" D, Q' yadsssget(“X”,NULL,NULL,&eb,SS);/*获取“0”层实体集*/
) k i$ f9 {' s2 K& }' ^. k) \
. |2 j2 _) w2 N- o& q$ m在Step2、Step5中调用adsentget()函数的实质是产生一个结构缓冲器链表,该链表的结构示意图如图3所示。
! q3 `& _; Y# I* q9 I3 r5 \从结构缓冲器链表中可获取当前实体集中每个实体的类型(如点、直线、圆弧等相应的DXF代码)和几何参数(即直线的起始、终止点坐标,圆弧的圆心、半径、起始角、终止角),由于程序段稍长,此处从略。 % u3 @9 i2 }. W; l
6 [: E7 f9 \# W; r1 `; lStep8主要根据S0的两个端点坐标(存于数组PRS0[2][2])和零件图内外侧所有的实体的几何信息(存于数组PRSS[N][5])按首尾相连原则分别确定内侧和外侧线段及其几何参数,并分别存入相应数组PRL[num][5]和PRW[num][5]中。 ( P4 U9 D) j9 t5 e. r
6 x3 L- A7 V2 J4 a2 ?7 b四、结束语
9 [0 j! {. g8 t& E! Z# q* I4 M
* R* S t' {! h9 g3 N( z作者根据以上程序设计思想和有关算法,设计完成了旋转拉延件毛坯尺寸的自动计算软件。在AutoCAD COMMAND状态下通过“XLOAD”命令加载本程序后,绘制(或调入)一个旋转拉延件零件图,运行本程序,即可在屏幕上显示打印出毛坯尺寸。 # F7 r( |4 c8 f
& {8 c0 q8 @1 z- X( n该程序已对多个由AutoCAD绘制的任意复杂程度的旋转拉延件计算出毛坯尺寸。运行表明:程序正确、可靠,能满足迅速、自动计算毛坯直径的要求。本程序既可单独运行,也可作为后续的拉延模CAD系统的一个子系统运行。 |
|