📄 hellor14.cpp
字号:
#include "stdafx.h"
#include <stdlib.h>
#include <string.h>
#include <rxobject.h>
#include <rxregsvc.h>
#include <aced.h>
#include <math.h>
#include <dbsymtb.h>
#include <dbents.h>
#include "acestext.h"
////
#include "zyjDialog.h"
#include "zyjTree.h"
#include "aced.h"
#include "RESOURCEHELPER.H"
#include "hellor14.h"
#include "Afxdb.h"
// new added! yb 2004,4,17
#include "math.h"
#include "afxinet.h" //for internet
#include <sqlext.h>
#include <afxdb.h>
// #include "TolInput.h" for tolerance inquiry! yb
#include "Tol.h"
#include "AutoTol.h"
#include "toleranceset.h"
#include "sjc.h"
#include "sun.h"
//
#include "ljbin.h"
#include "ljbset.h"
#include "zl.h"
#include "zli.h"
//
#include "loginin.h"
#include "lmm.h"
#include "forbit.h"
#include "tree.h"
#include "pjset1.h"
//
#include "toleranceoutput.h"
void initApp();
void unloadApp();
extern "C"
AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode, void*);
extern "C" HINSTANCE _hdllInstance;
extern BOOL InitModule(HINSTANCE, DWORD, LPVOID);
static AFX_EXTENSION_MODULE arxmfcDLL;
void InitMFC();
void EndMFC();
int sucess=0;
//new added! yb 2004,4,17
void autoTolCal(double dimCls,double dievTop,double dievBottom,
AcDbVoidPtrArray &wwgListBaseDim,
AcDbVoidPtrArray &wwgListLoopStyle,AcDbVoidPtrArray &wwgListResult)
{
AcDbVoidPtrArray wwgListITData;
//AcDbVoidPtrArray wwgListResult;
double wwgITData[20];
AcDbVoidPtrArray wwgListITGrad;
double m_dbNum=0.0,m_dbCoef=0.0,m_dbTolCls,m_dbDimAdjust=0.0,dbCal=0.0,dbCal2=0.0;
int easiest;
m_dbTolCls=dievTop-dievBottom;
for(int i=0;i<LEN;i++) //零件数量循环
{
for(int j=0;j<13;j++)//对公差单位进行循环
{
double* BaseDim1=(double*)wwgListBaseDim.at(i);
if(*BaseDim1>=m_nBsDimGrad[j]&&*BaseDim1<m_nBsDimGrad[j+1])
{
//根据《机械精度设计》155页公式(4-54),先求分母
m_dbCoef+=pow(m_nTolDanwei[j],2);
break;
}
}
}
m_dbCoef=1000.0*m_dbTolCls/sqrt(m_dbCoef);
//设置循环判断各组成环公差等级系数更靠近哪一个公差等级系数并记录在数组中
CString kk;
kk.Format("%8.4f",m_dbCoef);
AfxMessageBox(kk);
//设置循环判断各组成环公差等级系数更靠近哪一个公差等级系数并记录在数组中
for(int k=0;k<LEN;k++)
{
if(k>1)
{
double* BaseDim2=(double*)wwgListBaseDim.at(k);
ads_printf("\n%f",*BaseDim2);
double* BaseDim3=(double*)wwgListBaseDim.at(k-1);
if(*BaseDim2>*BaseDim3)
easiest=k;
}
if(m_dbCoef>=m_nTolGradCoef[14])
{
int *data=new int;
*data=14;
wwgListITGrad.append(data);
}
else
{
for(int m_nITGradi=0;m_nITGradi<14;m_nITGradi++)
{
if (m_dbCoef>=m_nTolGradCoef[m_nITGradi]&&m_dbCoef<m_nTolGradCoef[m_nITGradi+1])
{
int *data=new int;
*data=m_nITGradi;
wwgListITGrad.append(data);
break;
}
}
}
}
/////////////////////////////////////////////访问数据库部分
CString strDataName="Tol";
CDatabase db;
CTol* pMasterSet = NULL;
CString m_column;
double min=0.0,max=1000.0;
double m_ComposedIT[16];//
try
{
if (db.Open(strDataName))
{
pMasterSet = new CTol();
pMasterSet->Open();
for(int i=0;i<LEN;i++) //设置循环查询各组成环标准公差
{
for(int zz=0;zz<LEN;zz++)
double* BaseDim4=(double*)wwgListBaseDim.at(i);
double basedim=0;//
int *itGrad=(int*)wwgListITGrad.at(i);//
ads_printf("\n *itGrad=%d",*itGrad);
pMasterSet->MoveFirst();//
while (!pMasterSet->IsEOF())
{
double *BaseDim4=(double*)wwgListBaseDim.at(i);
m_column = pMasterSet->m_columnRecord;
if(*BaseDim4>basedim)
{
if (*BaseDim4<=atof(m_column))
{
if(*itGrad==0)
{
m_ComposedIT[i]=0;
ads_alert("该公差精度等级低于五级!");
}
else if(*itGrad==1)
m_ComposedIT[i]=(pMasterSet->m_IT5 )/1000.0;
else if(*itGrad==2)
m_ComposedIT[i]=(pMasterSet->m_IT6 )/1000.0;
else if(*itGrad==3)
m_ComposedIT[i]=(pMasterSet->m_IT7 )/1000.0;
else if(*itGrad==4)
m_ComposedIT[i]=(pMasterSet->m_IT8 )/1000.0;
else if(*itGrad==5)
m_ComposedIT[i]=(pMasterSet->m_IT9 )/1000.0;
else if(*itGrad==6)
m_ComposedIT[i]=(pMasterSet->m_IT10 )/1000.0;
else if(*itGrad==7)
m_ComposedIT[i]=(pMasterSet->m_IT11 )/1000.0;
else if(*itGrad==8)
m_ComposedIT[i]=(pMasterSet->m_IT12 )/1000.0;
else if(*itGrad==9)
m_ComposedIT[i]=(pMasterSet->m_IT13 )/1000.0;
else if(*itGrad==10)
m_ComposedIT[i]=(pMasterSet->m_IT14 )/1000.0;
else if(*itGrad==11)
m_ComposedIT[i]=(pMasterSet->m_IT15 )/1000.0;
else if(*itGrad==12)
m_ComposedIT[i]=(pMasterSet->m_IT16 )/1000.0;
else if(*itGrad==13)
m_ComposedIT[i]=(pMasterSet->m_IT17 )/1000.0;
else if(*itGrad==14)
m_ComposedIT[i]=(pMasterSet->m_IT18 )/1000.0;
else
m_ComposedIT[i]=1000.0;
break;
}
basedim=atof(m_column);
}
pMasterSet->MoveNext(); //没有查到则查询下一记录
}
}
pMasterSet->Close();
delete pMasterSet;
db.Close();
}
////////////////////////
}
catch(CDBException* pe)
{
AfxMessageBox(pe->m_strError);
if (pMasterSet)
{
if (pMasterSet->IsOpen())
{
pMasterSet->Close();
}
delete pMasterSet;
}
if (db.IsOpen())
{
db.Close();
}
pe->Delete();
}
for(int m=0;m<LEN;m++)
{
//计算出除协调环外各组成环公差平方之合
wwgITData[m]=m_ComposedIT[m];//
m_dbDimAdjust+=pow(m_ComposedIT[m],2.0);//
}
/////////////////////计算需要调整的公差 部分/////////
// double dbCal1;//zying delete
if (!(m_dbDimAdjust>pow(m_dbTolCls,2)))
;
/* else if(m_dbDimAdjust>=pow(m_dbTolCls,2))
{
double* itData2=(double*)wwgListITData.at(easiest);
m_dbDimAdjust=m_dbDimAdjust-pow(*itData2,2);
dbCal1=sqrt(pow(m_dbTolCls,2)-m_dbDimAdjust);
for(int i=0;i<=13;i++)
{
if(((m_ComposedIT[easiest][i+2]+m_ComposedIT[easiest][i+1])/2.0)>=dbCal1
&&dbCal1>=(m_ComposedIT[easiest][i]+m_ComposedIT[easiest][i+1])/2.0)
{
//输出大于等于计算公差的标准公差的最小值
void* aaa=&m_ComposedIT[easiest][i+1];
wwgListITData.insertAt(easiest,aaa);
int a=i+1;
void* b=&a;
wwgListITGrad.insertAt(easiest,b);
break;
}
}
}*/
///////////////计算极限偏差部分//////////////
double *data;
for(int q=0;q<LEN;q++)
{
data= new double;
*data=wwgITData[q]/2;
wwgListResult.append(data);
double* w=(double*)wwgListResult.at(q);
ads_printf("\n%f\n",*w);
}
}
double f(double B,double P,double k,double Td,double x1,double x2)
{
return (B/exp(P*log(Td)))+k*pow((x2-x1)/(6*Td),2);
}
void tolerance()
{
// if(sucess==1)
// {
CString strDataName="公差优化";
CDatabase db;
double m_measure[9]={0,0.599,0.999,1.499,2.799,4.499,7.799,13.599,20.999};
int m_row[8]={0,8,16,30,38,24,46};
toleranceset* p_Set = NULL;
int row;
try
{
sjc dd;
if (db.Open(strDataName))
{
if(dd.DoModal()==IDOK)
{
int i;
if (dd.m_input1=="Lap/Hone") i=0;
if (dd.m_input1=="Grind/Diamond turn") i=1;
if (dd.m_input1=="Broach") i=2;
if (dd.m_input1=="Turn/bore/shape") i=3;
if (dd.m_input1=="Mill") i=4;
if (dd.m_input1=="Ream") i=5;
if (dd.m_input1=="Drill") i=6;
p_Set = new toleranceset() ;
p_Set->Open();
p_Set ->MoveFirst();
while (!p_Set->IsEOF())
{
if (i<5)
{
row=m_row[i]+1;
p_Set->SetAbsolutePosition(row);
for (int j=0;j<8;j++)
{
if ((dd.m_measure1/25.4)>m_measure[j])
{
row=row+1;
p_Set->SetAbsolutePosition(row);
}
}
p_Set->MovePrev();
}
else if(i==5)
{
row=m_row[i]+1;
p_Set->SetAbsolutePosition(row);
for (int x=0;x<6;x++)
{
if((dd.m_measure1/25.4)>m_measure[x])
{
row=row+1;
p_Set->SetAbsolutePosition(row);
}
}
p_Set->MovePrev();
}
else if (i==6)
{
row=m_row[i]+1;
p_Set->SetAbsolutePosition(row);
for (int z=0;z<5;z++)
{
if((dd.m_measure1/25.4)>m_measure[z])
{
row=row+1;
p_Set->SetAbsolutePosition(row);
}
}
p_Set->MovePrev();
}
break;
}
double B1,P1,x1,y1;
B1=p_Set->m_B;
P1=p_Set->m_P;
x1=p_Set->m_MINTol;
y1=p_Set->m_MAXTol;
int t;
if (dd.m_input2=="Lap/Hone") t=0;
if (dd.m_input2=="Grind/Diamond turn") t=1;
if (dd.m_input2=="Broach") t=2;
if (dd.m_input2=="Turn/bore/shape") t=3;
if (dd.m_input2=="Mill") t=4;
if (dd.m_input2=="Ream") t=5;
if (dd.m_input2=="Drill") t=6;
p_Set = new toleranceset() ;
p_Set->Open();
p_Set ->MoveFirst();
while (!p_Set->IsEOF())
{
if (t<5)
{
row=m_row[t]+1;
p_Set->SetAbsolutePosition(row);
for (int j=0;j<8;j++)
{
if ((dd.m_measure2/25.4)>m_measure[j])
{
row=row+1;
p_Set->SetAbsolutePosition(row);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -