|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AutoCAD环境下旋转类拉延件毛坯尺寸的自动计算
3 A u8 r* `& N/ F- e9 @摘要:讨论了如何利用AutoCAD的ADS功能来开发软件,在AutoCAD环境下实现旋转类拉延件毛坯尺寸的自动计算,文中对软件结构及其主要功能模块的算法进行了较为详尽的描述。
/ R/ j3 t! |) F( X5 ~+ c: Y关键词:旋转类拉延件;毛坯尺寸;自动计算 1 D" s) ?# c! U% ]( c3 _2 i; V
* l7 g+ _/ T- ~# b& p一、引言
, h2 Y# j. b$ [' P8 f0 t( u
( K3 c( H7 ~- O: e/ ?$ b在进行旋转类拉延件拉延工艺设计时,以最后一次拉深成形的制件为基础计算出毛坯尺寸(直径)是必不可少的工作。手工计算时,由于旋转类拉延件形状变化大,故常涉及到大量的公式和表格,计算过程较为繁琐、枯燥。
: Q/ o' L s( Q9 v
7 H) l. f% k, s1 aAutoCAD是国内目前较普遍使用的计算机绘图软件,待加工的拉延件的零件图常常已经在AutoCAD环境下绘出。根据AutoCAD下的零件图,通过开发软件自动分析计算出毛坯尺寸,是一项较有意义的工作。 , t U/ V( Y( u0 ]! Y4 P5 D8 b
/ T; A a; S7 v7 MAutoCAD软件包从AutoCAD R11.0开始,增加了ADS功能,可通过C语言按ADS指定的形式来调用AutoCAD的所有命令,并可进行实体(即点、直线、圆弧等)几何信息的读取,从而大大加强了利用AutoCAD进行二次开发的功能。 4 G8 p& a5 K4 V
' J# ]9 ?& {; P7 Y6 E3 P为此,笔者利用AutoCAD的ADS功能,开发了一个对于AutoCAD环境下任意绘出的旋转类拉延件能自动计算毛坯尺寸的程序。该软件采用AutoCAD R12.0 for DOS下的ADS开发,利用ADS函数库编制的C程序通过High C 1.7编译,在AutoCAD Command状态下运行,可迅速准确地计算毛坯尺寸。 $ [( |1 t) N8 M0 C
' o" z7 L+ k$ G v, S( ~8 [1 v二、软件设计
6 c1 N/ R) p( W4 o3 V# s) w3 |! `* h, @0 \# k
1.软件设计思想
5 i* E% z# @# x
7 b" c5 n' W& \8 u9 b8 J' s( Z根据久里金法则,任意由直线和圆弧为母线形成的旋转拉延件的毛料直径D可由下式决定:
8 A. o- v. K% F ?式中Li——旋转拉延件中性层各线段(直线和圆弧)长度
! Y; e S; J% _3 MXi——旋转拉延件中性层各线段(直线和圆弧)重心到旋转轴的距离 % o! W( n+ J8 b; z' K8 F
num——旋转拉延件中性层线段数
4 u5 o5 |& Y7 q3 N9 n7 _$ Q9 e# X
& D3 }3 F0 m" ^/ J' M% k$ v图1示出了某旋转拉延件的线段长度及其重心的标注,中性层共有由8段线段组成,其中直线4段(L1,L3,L6,L8),圆弧4段(L2,L4,L5,L7)。
3 I9 b4 l5 Q( j' I+ i- ^" l3 h/ t7 \现在需解决的问题是需要获取中性层各线段的几何参数,如直线的起始、终止点坐标,圆弧的圆心、半径、起始角、终止角。获取中性层各线段的几何参数后,根据有关公式即可求得各线段(包括直线、圆弧)的长度及重心位置,从而可由以上公式求得毛料直径。
& @; n2 j1 V! N
' B; F: y# J1 ^9 E1 K% T+ s2 o然而,中性层是假想的,由AutoCAD命令任意绘出工件图的中性层往往也并未画出,故需要首先读取工件图中内外两侧各直线和圆弧的几何数据,然后即可间接地求得中性层各线段的几何参数。 1 _* v8 d# t8 J! g- Y
+ M7 n* d4 ]6 l# S! A8 o故本程序设计与实现上分为4个大的步骤:
0 F3 ~+ D8 ~! _0 K, D5 P- R: ]
/ {. K R& A) E( u2 P(1)分别读取工件图内、外侧各线段的几何数据; ' E5 s% b: n9 j9 V1 N
(2)利用内外侧各线段几何数据求中性层各线段几何数据; , y) z# B. I7 L) c
(3)求中性层各线段的长度及重心位置;
/ P/ d2 F8 Z0 k1 p g(4)利用公式(1)求得毛料直径。
/ [4 m/ b) ~ _" d. g3 H" v& n' o2 u
H$ H" {1 l6 v% L! e. E; K在第1、2、3步中采用了表1所示结构用于存贮内外侧及中性层各线段几何数据。
. ~" N) d6 ?, N& w7 l8 |表1实体信息的存贮方式
3 t: G1 s+ |( E6 ]7 W$ u! n+ c; B| PR[0] | PR[1] | PR[2] | PR[3] | PR[4] | PR[5] | | 直线(1) | 起点X1 | 起点Y1 | 终点X2 | 终点Y2 | 0 | ∶" ?" ]/ z3 v* ]9 Z4 Z( k2 c( W' ^
∶ | ∶7 ?1 B6 E" w m4 Q9 c6 A- L
∶ | ∶
. s( Q+ E4 t# M' N1 p% N- E∶ | ∶" ]! R5 }) r' B
∶ | ∶ ?; m8 t m- w( K M- r
∶ | ∶
! S5 R% i1 \: _) \0 K0 a4 d% M( k∶ | | 圆弧(2) | 圆心X | 圆心Y | 起角ANG1 | 终角ANG2 | 半径R | ∶
" j+ B9 v! _) O ^( J8 [∶ | ∶# X$ _$ b! n" |* q) C; ~/ @# ~
∶ | ∶
C# b: N- {& A" r9 [! \# _∶ | ∶
3 G5 @: V0 X+ B% {; o5 k6 M6 i∶ | ∶, m! [) Z* i3 B: _* v* L
∶ | ∶( Z8 ]( V" t' p* o; l: B
∶ | | 圆(3) | 圆心X | 圆心Y | 0 | 0 | 半径R | ∶
. a) K" `$ T, o. V6 [- A∶ | ∶$ F9 }# N$ ~) \3 N8 \ x7 g% z
∶ | ∶
( Z4 q* A, I' |' ]3 U# I6 p∶ | ∶
) ^/ D8 I7 m# a! I2 h; D8 _∶ | ∶
; A9 X& y3 v2 J! @9 Y∶ | ∶6 T- F4 U {" w; h: ]8 k
∶ |
2.软件结构
4 q8 u7 c; P4 [% t6 \ K
; [, ]* a1 Q1 m) k) J: q根据以上设计思想,本软件结构流程图如图2所示。其中,表PR_SS[N] [5]、PR_L[num] [5]、PR_W [num] [5]、PR_M [num] [5]的结构形式与表1相同。 : ]$ C* i- v! ~" S1 X
三、制件图内外侧各线段实体信息读取的算法 0 _0 c4 v+ e% Y6 j
0 `8 N, J7 j9 N1 ? U n8 l如上所述,AutoCAD环境下的制件图内外侧线段实体信息的拾取(即图2的前4个部分)是实现本程序的关键。现设定用于表达旋转拉延件内外结构的所有线段均绘于“0”层(这也符合一般AutoCAD绘图习惯),而尺寸标注、剖面线等则置于另外的层,则内外层线段几何信息读取算法如下:
% a+ z+ _; X$ F/ u- C
! Q+ I, w7 \3 [7 s% lStepl【交互拾取表示厚度的左实体】
0 S5 G' ~8 u) K! U/ V交互选择表示厚度的中心线左侧实体S0(如图1所注)
2 W% |. K" i& KStep2【获取实体S0的两个端点】
: t) Y1 z+ F* {' P! |% [8 I( ]读取实体S0的两端点坐标,存入数组PRSO[2][2]中 3 j; Q0 } k$ a4 @- R" R
Step3【拾取0层上的所有实体】 " q. w/ |* b1 U/ M. S. O
建立0层上的所有实体的集合SS{S0,S1,…,Si,…} + G& @1 B: L( Y" _1 t0 |* d L
Step4【获取实体集SS的实体数量】
3 H M0 R0 _' |7 Y. x从实体集合SS中获取实体数量N
% T2 G2 J# o* ^2 B" hStep5【获取实体集SS中一个实体的信息】
3 ? L/ ~# E% ^从SS中选择一个实体SSi,读取它的几何信息
0 ]) A) e& Z0 D+ k# Z. `, `% SStep6【实体信息存放】
. U7 F. q3 |2 U E# S' u将实体SSi几何信息放入如表1形式的数组PRSS[N][5]中 % e( m! u$ {5 M
Step7【判断】N=N-1如N>0,进入Step5,否则进入Step8 ~4 M( q/ ?7 ]; K$ H
Step8【内外侧线段实体信息选择】
" Y+ c3 D" u0 O; J, O7 ~
% O1 P% q; t* v5 }根据数组PRS0[2][2]和PRSS[N][5],分别建立存贮制件外侧线段几何参数的数组PRW[num][5]及内侧线段几何参数的数组PRL[num][5] + y& X$ p, {- A' L* D
& u1 \, D# A% {9 _( W f" t
其中,Step1主要由调用adsssget()函数完成
, K) b- d+ O9 ~8 z% I+ nStep2主要由调用adsentget()函数完成
$ B6 |% V' w9 vStep3主要由调用adsssget()函数完成
5 S! O* g x/ @: W$ D X+ l5 P: hStep4主要由调用adssslength()函数完成 1 ^& k1 S+ m) J9 j
Step5主要由调用adsentget()函数完成
8 k2 M) G; i8 o" k0 rStep1中ADS函数adsssget()的调用格式为: 2 q- u5 I; x- t: r' d+ e
adsname S0;/*实体名变量*/ 5 @) x4 p4 t, i. i! f- n
adsssget(NULL,NULL,NULL,NULL,S0);/*交互选择获取实体*/ # h" k: f5 I% q" j$ P6 K
Step3中该函数的调用格式为:
. r4 C) x( q, K' a7 B6 ~. I% |3 wadsname SS;/*实体集名变量*/
4 ?8 m0 ]& g" M" |Char sbuf[6];/*层名变量*/ & {# K( F/ v1 |% |7 V; _& E
struct resbuf eb;/*结构缓冲器变量*/
! W4 H+ m& P# e( Dstrcpy(sbuf,“0”);/*层名变量赋值*/
6 T- p+ o5 D% \& o+ J, d( P3 ]eb.resval.rstring=sbuf;/*结构缓冲器字符串赋值*/ 0 w5 g" f) h+ J/ I& C2 z: t
adsssget(“X”,NULL,NULL,&eb,SS);/*获取“0”层实体集*/
$ ? t( U$ P0 l) g7 x' P9 ~( B; c" u* D8 R4 U! Y3 H
在Step2、Step5中调用adsentget()函数的实质是产生一个结构缓冲器链表,该链表的结构示意图如图3所示。 9 c5 J7 d( E. X" I- N8 p% [0 j
从结构缓冲器链表中可获取当前实体集中每个实体的类型(如点、直线、圆弧等相应的DXF代码)和几何参数(即直线的起始、终止点坐标,圆弧的圆心、半径、起始角、终止角),由于程序段稍长,此处从略。
, h |7 i- k0 y' O0 ]* I) Q8 {6 p O, o1 `" k1 p
Step8主要根据S0的两个端点坐标(存于数组PRS0[2][2])和零件图内外侧所有的实体的几何信息(存于数组PRSS[N][5])按首尾相连原则分别确定内侧和外侧线段及其几何参数,并分别存入相应数组PRL[num][5]和PRW[num][5]中。 8 p/ D# q. G+ {
: r! `* t9 Z; [, v四、结束语 1 D3 k: P" F" l1 v
: _1 i" O' T. i; i
作者根据以上程序设计思想和有关算法,设计完成了旋转拉延件毛坯尺寸的自动计算软件。在AutoCAD COMMAND状态下通过“XLOAD”命令加载本程序后,绘制(或调入)一个旋转拉延件零件图,运行本程序,即可在屏幕上显示打印出毛坯尺寸。
. M3 f; H1 }2 R( r: C
; x3 p( e% s/ A! q! P0 ]该程序已对多个由AutoCAD绘制的任意复杂程度的旋转拉延件计算出毛坯尺寸。运行表明:程序正确、可靠,能满足迅速、自动计算毛坯直径的要求。本程序既可单独运行,也可作为后续的拉延模CAD系统的一个子系统运行。 |
|