天天看点

打开文件对话框写入并保存文件操作

//LI YA ZHOU 20170220
//测量数据写入文件
void CHoopsBaseView::OnLayoutSaveMeasure()
{

BOOL isOpen = FALSE;         //是否打开(否则为保存)  
/*CString defaultDir = L"E:\\FileTest";   //默认打开的文件路径 */
CString fileName ;          //默认打开的文件名 
CString filter = L"txt文本(*.txt)|*.txt||";    //文件过虑的类型 
CFileDialog fileDlg(isOpen, NULL, fileName, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, filter, NULL);  
/*fileDlg.GetOFN().lpstrInitialDir = L"E:\\FileTest\\testdata.txt";  */
INT_PTR result = fileDlg.DoModal();  
CString filePath/* = defaultDir + "\\" + fileName*/;    
if(result == IDOK)
{  
filePath = fileDlg.GetPathName();  


FILE *fp;
fp=fopen((CT2A)filePath,"w+");
fprintf(fp,"#编号 类型   测量   x1   y1   z1 x2   y2   z2 x3   y3   z3\n");
int codeno=1;
for (int i=0;i<m_iMouseClickCnt1;i++)
{
float x1=m_fNodePositionXYZ1[i][0];
float y1=m_fNodePositionXYZ1[i][1];
float z1=m_fNodePositionXYZ1[i][2];


float x2=m_fNodePositionXYZ1[i+1][0];
float y2=m_fNodePositionXYZ1[i+1][1];
float z2=m_fNodePositionXYZ1[i+1][2];


float distance=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));
fprintf(fp,"%d\tlength\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",codeno,distance,x1,y1,z1,x2,y2,z2,0.0f,0.0f,0.0f);
codeno++;
i++;
}
for (int i=0;i<m_iMouseClickCnt2;i++)
{
float x1=m_fNodePositionXYZ2[i][0];
float y1=m_fNodePositionXYZ2[i][1];
float z1=m_fNodePositionXYZ2[i][2];


float x2=m_fNodePositionXYZ2[i+1][0]; 
float y2=m_fNodePositionXYZ2[i+1][1];
float z2=m_fNodePositionXYZ2[i+1][2];


float x3=m_fNodePositionXYZ2[i+2][0];
float y3=m_fNodePositionXYZ2[i+2][1];
float z3=m_fNodePositionXYZ2[i+2][2];
float distance1,distance2;
distance1 = sqrt( (x2 - x1)*(x2 - x1)+(y2 - y1)*(y2 -y1)+(z2 - z1)*(z2 - z1));
distance2 = sqrt( (x2 - x3)*(x2 - x3)+(y2 - y3)*(y2 - y3)+(z2 - z3)*(z2 - z3));
double fAngle=acos(  ( (x1 - x2)*(x3 - x2)+(y1 - y2)*(y3 - y2)+(z1 - z2)*(z3 - z2) )/((distance1*distance2)));
double degree=fAngle*180/3.141592653;
fprintf(fp,"%d\tangle\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",codeno,degree,x1,y1,z1,x2,y2,z2,x3,y3,z3);
codeno++;
i++;
i++;
}
for (int i=0;i<m_iMouseClickCnt3;i++)
{
float x1=m_fNodePositionXYZ3[i][0];
float y1=m_fNodePositionXYZ3[i][1];
float z1=m_fNodePositionXYZ3[i][2];


float x2=m_fNodePositionXYZ3[i+1][0];
float y2=m_fNodePositionXYZ3[i+1][1];
float z2=m_fNodePositionXYZ3[i+1][2];


float x3=m_fNodePositionXYZ3[i+2][0];
float y3=m_fNodePositionXYZ3[i+2][1];
float z3=m_fNodePositionXYZ3[i+2][2];



float a1,b1,c1,d1;
float a2,b2,c2,d2;
float a3,b3,c3,d3;
a1=(y1*z2 - y2*z1 - y1*z3 + y3*z1 + y2*z3 - y3*z2);
b1 = -(x1*z2 - x2*z1 - x1*z3 + x3*z1 + x2*z3 - x3*z2);
c1 = (x1*y2 - x2*y1 - x1*y3 + x3*y1 + x2*y3 - x3*y2);
d1 = -(x1*y2*z3 - x1*y3*z2 - x2*y1*z3 + x2*y3*z1 + x3*y1*z2 - x3*y2*z1);


a2 = 2 * (x2 - x1);
b2 = 2 * (y2 - y1);
c2 = 2 * (z2 - z1);
d2 = x1 * x1 + y1 * y1 + z1 * z1 - x2 * x2 - y2 * y2 - z2 * z2;




a3 = 2 * (x3 - x1);
b3 = 2 * (y3 - y1);
c3 = 2 * (z3 - z1);
d3 = x1 * x1 + y1 * y1 + z1 * z1 - x3 * x3 - y3 * y3 - z3 * z3;
float m_fCenterX=-(b1*c2*d3 - b1*c3*d2 - b2*c1*d3 + b2*c3*d1 + b3*c1*d2 - b3*c2*d1)   //Center
/(a1*b2*c3 - a1*b3*c2 - a2*b1*c3 + a2*b3*c1 + a3*b1*c2 - a3*b2*c1);
float m_fCenterY= (a1*c2*d3 - a1*c3*d2 - a2*c1*d3 + a2*c3*d1 + a3*c1*d2 - a3*c2*d1)
/(a1*b2*c3 - a1*b3*c2 - a2*b1*c3 + a2*b3*c1 + a3*b1*c2 - a3*b2*c1);
float m_fCenterZ=-(a1*b2*d3 - a1*b3*d2 - a2*b1*d3 + a2*b3*d1 + a3*b1*d2 - a3*b2*d1)
/(a1*b2*c3 - a1*b3*c2 - a2*b1*c3 + a2*b3*c1 + a3*b1*c2 - a3*b2*c1);


float fRadiusLen=sqrt((m_fCenterX-x1)*(m_fCenterX-x1)+(m_fCenterY-y1)*(m_fCenterY-y1)  //Radius
+(m_fCenterZ-z1)*(m_fCenterZ-z1) );



fprintf(fp,"%d\tradius\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",codeno,fRadiusLen,x1,y1,z1,x2,y2,z2,x3,y3,z3);
codeno++;
i++;
i++;
}
for (int i=0;i<m_iMouseClickCnt4;i++)
{
float x1=m_fNodePositionXYZ4[i][0];
float y1=m_fNodePositionXYZ4[i][1];
float z1=m_fNodePositionXYZ4[i][2];


fprintf(fp,"%d\tnormal\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",codeno,0.0f,x1,y1,z1,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f);
codeno++;
}
fprintf(fp,"\n");
fclose(fp);
} 

}           

继续阅读