xiechilun4.cpp
来自「基于UG平台」· C++ 代码 · 共 950 行 · 第 1/2 页
CPP
950 行
{
if(j==1)
{
UpdateData(true);
double gonglu,zhuansu;
m_preDlg->UpdateData(TRUE);
gonglu=m_preDlg->m_gonglu;
zhuansu=m_preDlg->m_zhuansu;
if(m_TCXT==1)
{
OnCancel();
}
CString mushu;
double mushu1;
m_biaozhunmoshu.GetWindowText(mushu);
mushu1=strtodouble(mushu);
double Aglsum = 2*PI/m_chishu;
double x0,y0; //起始点
double Rf,xf,yf,xf1,yf1,aglf = 2*Aglsum/3,aglf1 = Aglsum; //齿底弧线
double Ra,xa,ya,xa1,ya1,agla = Aglsum/4 ,agla1 = 5*Aglsum/12; //齿顶弧线
double Rr,xr,yr,xr1,yr1,aglr = Aglsum/12 ,aglr1 = 7*Aglsum/12; //节圆上点
Ra =m_fenduyuan/2+mushu1 ; //齿顶圆的半径!
Rr = m_fenduyuan/2; //分度圆的半径
Rf = Rr - 1.25*mushu1; // 齿根圆的半径!
x0 = 0; y0 = Rf;
xr = Rr*sin(aglr); yr = Rr*cos(aglr);
xr1 = Rr*sin(aglr1); yr1 = Rr*cos(aglr1);
xa = Ra*sin(agla); ya = Ra*cos(agla);
xa1 = Ra*sin(agla1); ya1 = Ra*cos(agla1);
xf = Rf*sin(aglf); yf = Rf*cos(aglf);
xf1 = Rf*sin(aglf1); yf1 = Rf*cos(aglf1);
double Do,D1,t,Djs1;
Do=Ra*2-10*mushu1;
D1=1.6*m_chizhouzhijing;
Djs1=0.125*pow((gonglu/zhuansu),0.3333333333333)*1000;
t=asin((m_jiankuan/2)/(Djs1/2));
double P1[3],P2[3],P3[3],P4[3];
P1[0]=(Djs1/2)*sin(t), P1[1]=(Djs1/2)*cos(t), P1[2]=0;
P2[0]=(Djs1/2)*sin(t), P2[1]=(Djs1/2)*cos(t)+m_jiankuan/2, P2[2]=0;
P3[0]=-(Djs1/2)*sin(t), P3[1]=(Djs1/2)*cos(t)+m_jiankuan/2, P3[2]=0;
P4[0]=-(Djs1/2)*sin(t), P4[1]=(Djs1/2)*cos(t), P4[2]=0;
int errorCode = UF_initialize();
if ( 0 == errorCode )
{
int create_flag1=1;
double second1_point[3]={x0,y0,0},arcsh_point[3]={xr,yr,0},arcxia_point[3]={xa,ya,0} ;
tag_t arc1;
UF_CURVE_create_arc_thru_3pts(create_flag1,second1_point,arcsh_point,arcxia_point,&arc1);
tag_t arc2;
double q1[3]={xa1,ya1,0},q2[3]={xr1,yr1,0},q3[3]={xf,yf,0};
UF_CURVE_create_arc_thru_3pts(create_flag1,q1,q2,q3,&arc2);
tag_t line1,line2;
UF_CURVE_line_t sline1,sline2;
sline1.start_point[0]=xa;
sline1.start_point[1]=ya;
sline1.start_point[2]=0;
sline1.end_point[0]=xa1;
sline1.end_point[1]=ya1;
sline1.end_point[2]=0;
UF_CURVE_create_line(&sline1,&line1);
sline2.start_point[0]=x0;
sline2.start_point[1]=y0;
sline2.start_point[2]=0;
sline2.end_point[0]=xf;
sline2.end_point[1]=yf;
sline2.end_point[2]=0;
UF_CURVE_create_line(&sline2,&line2);
//下面添加绘制斜齿
double orig_iset[3] = {0.0, 0.0, m_chikuan},matrix[16]; // 平移高度为齿宽
int count=4,copy_Flag=2, layer=-1, curveFlag=2,resp;
tag_t nr7[4] ;
tag_t generators[4];
generators[0]=arc1;
generators[1]=line1;
generators[2]=arc2;
generators[3]=line2;
FTN(uf5943)(orig_iset,matrix );
FTN(uf5947)(matrix,generators , &count,©_Flag,&layer,&curveFlag,nr7,NULL,&resp);
double rp1[3] = {0.0, 0.0 , 0.0};
double rp2[3] = {0.0, 0.0 , 1.0};
double ang_to_rotate= m_xiuzhengluoxuanjiao; //旋转角度为修正螺旋角
double transform[16];
int ir5;
FTN(uf5945)(rp1, rp2, &ang_to_rotate, transform, &ir5 );
int move_Flag=1,resp1;
FTN(uf5947)(transform,nr7, &count,&move_Flag,&layer,&curveFlag,NULL,NULL,&resp1);
uf_list_p_t list1;
UF_MODL_create_list(&list1);
UF_MODL_put_list_item(list1,generators[0]);
UF_MODL_put_list_item(list1,generators[1]);
UF_MODL_put_list_item(list1,generators[2]);
UF_MODL_put_list_item(list1,generators[3]);
int creation_method=2;
tag_t section1;
int status=0;
UF_CURVE_create_joined_curve(list1,creation_method,§ion1,&status);
UF_OBJ_delete_object (arc1);
UF_OBJ_delete_object (arc2);
UF_OBJ_delete_object (line1);
UF_OBJ_delete_object (line2);
uf_list_p_t list2;
UF_MODL_create_list(&list2);
UF_MODL_put_list_item(list2,nr7[0]);
UF_MODL_put_list_item(list2,nr7[1]);
UF_MODL_put_list_item(list2,nr7[2]);
UF_MODL_put_list_item(list2,nr7[3]);
tag_t section2;
UF_CURVE_create_joined_curve(list2,creation_method,§ion2,&status);
UF_OBJ_delete_object (nr7[0]);
UF_OBJ_delete_object (nr7[1]);
UF_OBJ_delete_object (nr7[2]);
UF_OBJ_delete_object (nr7[3]);
UF_STRING_t s_section;
UF_STRING_t s_spine;
int sting1[2]={1,1};
int dir1[2]={-1,-1};
tag_t id1[2]={section1,section2};
s_section.num = 2;
s_section.string = sting1;
s_section.dir = dir1;
s_section.id = id1;
int patch =2;
int alignment =1;
double value[ 6 ];
int vdegree =s_section.num-1;
int vstatus =0;
int body_type =1;
double tol[ 3 ]={0.0254,0.0254,0.0254};
tag_t c_face_id[ 2 ]={NULL_TAG,NULL_TAG} ;
int c_flag[ 2 ] ={0,0};
tag_t body_obj_id;
UF_MODL_create_thru_curves(&s_section,&s_spine,&patch,&alignment,value,&vdegree,&vstatus,
&body_type,UF_NULLSIGN,tol,c_face_id,c_flag,&body_obj_id);
uf_list_p_t loop_list3;
UF_MODL_create_list(&loop_list3);
UF_MODL_ask_body_feats(body_obj_id,&loop_list3);
//下面绘制旋转轮廓
tag_t line3,line4,line5,line6,line7,line8,line9,line10,line11,line12,
line13,line14,line15,line16,line17;
UF_CURVE_line_t sline3,sline4,sline5,sline6,sline7,sline8,sline9,sline10,sline11,
sline12,sline13,sline14,sline15,sline16,sline17;
sline3.start_point[0]=0;
sline3.start_point[1]=0;
sline3.start_point[2]=0;
sline3.end_point[0]=0 ;
sline3.end_point[1]=0;
sline3.end_point[2]=m_chikuan;
UF_CURVE_create_line(&sline3,&line3);
UF_CURVE_ask_line_data(line3 ,&sline3);
sline4.start_point[0]=sline3.end_point[0];
sline4.start_point[1]=sline3.end_point[1];
sline4.start_point[2]=sline3.end_point[2];
sline4.end_point[0]=sline3.end_point[0]+D1/2;
sline4.end_point[1]=sline3.end_point[1];
sline4.end_point[2]=sline3.end_point[2];
UF_CURVE_create_line(&sline4,&line4);
UF_CURVE_ask_line_data(line4 ,&sline4);
sline5.start_point[0]=sline4.end_point[0];
sline5.start_point[1]=sline4.end_point[1];
sline5.start_point[2]=sline4.end_point[2];
sline5.end_point[0]=sline4.end_point[0];
sline5.end_point[1]=sline4.end_point[1];
sline5.end_point[2]=sline4.end_point[2]-0.4*m_chikuan;
UF_CURVE_create_line(&sline5,&line5);
UF_CURVE_ask_line_data(line5 ,&sline5);
sline6.start_point[0]=sline5.end_point[0];
sline6.start_point[1]=sline5.end_point[1];
sline6.start_point[2]=sline5.end_point[2];
sline6.end_point[0]=sline5.end_point[0]+(Do/2-D1/2);
sline6.end_point[1]=sline5.end_point[1];
sline6.end_point[2]=sline5.end_point[2];
UF_CURVE_create_line(&sline6,&line6);
UF_CURVE_ask_line_data(line6 ,&sline6);
sline7.start_point[0]=sline6.end_point[0];
sline7.start_point[1]=sline6.end_point[1];
sline7.start_point[2]=sline6.end_point[2];
sline7.end_point[0]=sline6.end_point[0];
sline7.end_point[1]=sline6.end_point[1];
sline7.end_point[2]=sline6.end_point[2]+0.4*m_chikuan;
UF_CURVE_create_line(&sline7,&line7);
UF_CURVE_ask_line_data(line7 ,&sline7);
sline8.start_point[0]=sline7.end_point[0];
sline8.start_point[1]=sline7.end_point[1];
sline8.start_point[2]=sline7.end_point[2];
sline8.end_point[0]=sline7.end_point[0]+(Rf-Do/2);
sline8.end_point[1]=sline7.end_point[1];
sline8.end_point[2]=sline7.end_point[2];
UF_CURVE_create_line(&sline8,&line8);
UF_CURVE_ask_line_data(line8 ,&sline8);
sline9.start_point[0]=sline8.end_point[0];
sline9.start_point[1]=sline8.end_point[1];
sline9.start_point[2]=sline8.end_point[2];
sline9.end_point[0]=sline8.end_point[0];
sline9.end_point[1]=sline8.end_point[1];
sline9.end_point[2]=sline8.end_point[2]-m_chikuan;
UF_CURVE_create_line(&sline9,&line9);
UF_CURVE_ask_line_data(line9 ,&sline9);
sline10.start_point[0]=sline9.end_point[0];
sline10.start_point[1]=sline9.end_point[1];
sline10.start_point[2]=sline9.end_point[2];
sline10.end_point[0]=sline9.end_point[0]-(Rf-Do/2);
sline10.end_point[1]=sline9.end_point[1];
sline10.end_point[2]=sline9.end_point[2];
UF_CURVE_create_line(&sline10,&line10);
UF_CURVE_ask_line_data(line10 ,&sline10);
sline11.start_point[0]=sline10.end_point[0];
sline11.start_point[1]=sline10.end_point[1];
sline11.start_point[2]=sline10.end_point[2];
sline11.end_point[0]=sline10.end_point[0];
sline11.end_point[1]=sline10.end_point[1];
sline11.end_point[2]=sline10.end_point[2]+0.4*m_chikuan;
UF_CURVE_create_line(&sline11,&line11);
UF_CURVE_ask_line_data(line11 ,&sline11);
sline12.start_point[0]=sline11.end_point[0];
sline12.start_point[1]=sline11.end_point[1];
sline12.start_point[2]=sline11.end_point[2];
sline12.end_point[0]=sline11.end_point[0]-(Do/2-D1/2);
sline12.end_point[1]=sline11.end_point[1];
sline12.end_point[2]=sline11.end_point[2];
UF_CURVE_create_line(&sline12,&line12);
UF_CURVE_ask_line_data(line12 ,&sline12);
sline13.start_point[0]=sline12.end_point[0];
sline13.start_point[1]=sline12.end_point[1];
sline13.start_point[2]=sline12.end_point[2];
sline13.end_point[0]=sline12.end_point[0];
sline13.end_point[1]=sline12.end_point[1];
sline13.end_point[2]=sline12.end_point[2]-0.4*m_chikuan;
UF_CURVE_create_line(&sline13,&line13);
UF_CURVE_ask_line_data(line13 ,&sline13);
sline14.start_point[0]=sline13.end_point[0];
sline14.start_point[1]=sline13.end_point[1];
sline14.start_point[2]=sline13.end_point[2];
sline14.end_point[0]=0;
sline14.end_point[1]=0;
sline14.end_point[2]=0;
UF_CURVE_create_line(&sline14,&line14);
int obj_count;
UF_FEATURE_SIGN mode_sign1=UF_POSITIVE;
tag_t generators1[12],*objects1;
char *body_limit[2]={"0.0","360.0"};
char *offsets[2]={"0.0","0.0"};
double origin[3]={0.0,0.0,0.0};
double direction[3]={0.0,0.0,1.0};
UF_MODL_SWEEP_TRIM_object_p_t trim_data=NULL;
generators1[0]=line3;
generators1[1]=line4;
generators1[2]=line5;
generators1[3]=line6;
generators1[4]=line7;
generators1[5]=line8;
generators1[6]=line9;
generators1[7]=line10;
generators1[8]=line11;
generators1[9]=line12;
generators1[10]=line13;
generators1[11]=line14;
UF_CALL(UF_MODL_create_revolution(generators1,12,trim_data,body_limit,
offsets,origin,false,true,origin,direction,
mode_sign1,&objects1,&obj_count));
// 中间毂高 三条线一个圆弧
sline15.start_point[0]=P1[0];
sline15.start_point[1]=P1[1];
sline15.start_point[2]=P1[2];
sline15.end_point[0]=P2[0];
sline15.end_point[1]=P2[1];
sline15.end_point[2]=P2[2];
UF_CURVE_create_line(&sline15,&line15);
sline16.start_point[0]=P2[0];
sline16.start_point[1]=P2[1];
sline16.start_point[2]=P2[2];
sline16.end_point[0]=P3[0];
sline16.end_point[1]=P3[1];
sline16.end_point[2]=P3[2];
UF_CURVE_create_line(&sline16,&line16);
sline17.start_point[0]=P3[0];
sline17.start_point[1]=P3[1];
sline17.start_point[2]=P3[2];
sline17.end_point[0]=P4[0];
sline17.end_point[1]=P4[1];
sline17.end_point[2]=P4[2];
UF_CURVE_create_line(&sline17,&line17);
tag_t arc3;
double xia[3]={0,-Djs1/2,0};
UF_CURVE_create_arc_thru_3pts(create_flag1,P4,xia,P1,&arc3);
UF_FEATURE_SIGN mode_sign3=UF_NEGATIVE;
char len1[120],len2[120];
int sig=15;
gcvt(0,sig,len1);
gcvt(m_chikuan,sig,len2);
char *limits[2];
limits[0]=len1;
limits[1]=len2;
char *taper_angle="0.0";
double pt1[3],dir[3];
dir[0]=0.0; dir[1]=0.0; dir[2]=1.0;
tag_t generators2[4];
generators2[0]=line15;
generators2[1]=line16;
generators2[2]=line17;
generators2[3]=arc3;
uf_list_p_t loop_list1, features1;
UF_MODL_create_list(&loop_list1);
for(int j = 0; j < 4; j++)
{
UF_MODL_put_list_item(loop_list1, generators2[j]);
}
UF_MODL_create_extruded(loop_list1,taper_angle,limits,pt1,dir,mode_sign3,&features1) ;
double P5[3],P6[3],P7[3];
P5[0]=-0.2*(Do-D1)/2, P5[1]=(Do+D1)/4, P5[2]=0.4*m_chikuan;
P6[0]=0, P6[1]=(Do+D1)/4-0.2*(Do-D1)/2,P6[2]=0.4*m_chikuan;
P7[0]=0.2*(Do-D1)/2, P7[1]=(Do+D1)/4, P7[2]=0.4*m_chikuan;
int create_flag2=2;
tag_t arc4;
UF_CURVE_create_arc_thru_3pts(create_flag2,P5,P6,P7,&arc4);
uf_list_p_t loop_list2, features2;
UF_MODL_create_list(&loop_list2);
UF_MODL_put_list_item(loop_list2, arc4);
UF_MODL_create_extruded (loop_list2,taper_angle,limits,pt1,dir,mode_sign3,&features2) ;
tag_t feat_obj;
UF_CALL(UF_MODL_create_circular_iset(0,origin,direction,"6", "60",
features2,&feat_obj));
UF_CALL(UF_MODL_delete_list(&features2));
dir[0]=0.0; dir[1]=0.0; dir[2]=1.0;
tag_t feat_obj1;
char num[120],angle[120];
gcvt(m_chishu,sig,num);
gcvt(360.0/m_chishu,sig,angle);
UF_CALL(UF_MODL_create_circular_iset(0,origin,direction,num, angle ,
loop_list3,&feat_obj1));
UF_CALL(UF_MODL_delete_list(&loop_list3));
UF_OBJ_set_blank_status(line1,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line2,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line3,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line4,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line5,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line6,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line7,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line8,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line9,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line10,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line11,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line12,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line13,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line14,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line15,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line16,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(line17,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(arc1,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(arc2,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(arc3,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(arc4,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(section1,UF_OBJ_BLANKED);
UF_OBJ_set_blank_status(section2,UF_OBJ_BLANKED);
errorCode = UF_terminate();
}
}
else
{
AfxMessageBox(_T("请先进行验算!"));
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?