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,&copy_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,&section1,&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,&section2,&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 + -
显示快捷键?