| 308上位机VC MFC数据库与CAD接口SCR DXF结合使用   数据库与CAD接口SCR DXF结合使用
 功能展示
 有时从数据库读取的数据要保存为CAD接口文件,CAD的接口文件有DXF 及SCR,我们当前例程实现从数据库读取文件,然后将读取的数据保存为DXF文件或SCR文件,效果如图,点击<生成DXF文件>或<生成SCR文件>可以生成对应的CAD接口文件,点击<绘制图形>可以将当前记录集字段信息绘制到例程界面右侧;
 
 要点提示
 1.CAD接口的两接口,DXF及SCR都有详细的格式介绍说明手册,我们例程就不作介绍,大家可以网络下载,或直接向我索取;
 2. Cpen等对象要多次调用创建数如CreatePen(),记得事先调用DeleteObject()函数,不然程序会报错;
 3.另外ofstream 的使用得包含其所在头文件#include <fstream.h>
 
 实现功能
 1.利用例程根目录数据库文件DXF_SCR_DATABASE.MDB创建一数据源ZhouCheng;
 2.新建一基于事先创建的数据源单文档应用程序,记录集选Basic,具体参数视频演示;
 3.stdafx.h头文件中包含#include <fstream.h>,按照例程界面,依次添加五编辑框,关联数据库对应字段,添加三按钮<生成DXF文件><生成 SCR文件><绘制 图形>关联按钮对应点击函数
 void CGkbc8View::OnPaintDxf()
 {
 long d,D,b;
 D=m_pSet->m_D1;//从数据库中取出数据
 d=m_pSet->m_d2;//从数据库中取出数据
 b=m_pSet->m_b;//从数据库中取出数据
 //<>开始绘图打开文件
 FILE *fp;
 fp=fopen("轴承.dxf","w");
 fprintf(fp," 0\nSECTION\n 2\nENTITIES\n");//写入DXF文件区域头
 //<>
 line(fp,-b/2+30,D/2,b/2+30,D/2);//绘外径投影线
 line(fp,-b/2+30,d/2,b/2+30,d/2);//绘内径投影线
 line(fp,-b/2+30,-d/2,b/2+30,-d/2);//绘左垂直线
 line(fp,-b/2+30,-D/2,b/2+30,-D/2);//绘右垂直线
 line(fp,-b/2+30,D/2,-b/2+30,-D/2);//绘内径投影线
 line(fp,b/2+30,D/2,b/2+30,-D/2);//绘外径投影线
 //<>绘上十字
 line(fp,30-3,d/2+(D/2-d/2)/2,30+3,d/2+(D/2-d/2)/2);
 line(fp,30,d/2+(D/2-d/2)/2-3,30,d/2+(D/2-d/2)/2+3);
 //<>绘下十字
 line(fp,30-3,-(d/2+(D/2-d/2)/2),30+3,-(d/2+(D/2-d/2)/2));
 line(fp,30,-(d/2+(D/2-d/2)/2)-3,30,-(d/2+(D/2-d/2)/2)+3);
 fprintf(fp," 0\nENDSEC\n 0\nEOF\n"); //<>关闭文件
 fclose(fp);
 }
 void CGkbc8View::OnPaintScr()
 {
 long d,D,b;
 D=m_pSet->m_D1;//从数据库中取出数据
 d=m_pSet->m_d2;//从数据库中取出数据
 b=m_pSet->m_b;//从数据库中取出数据
 //<>
 ofstream file;//文件指针
 file.open("轴承.scr",ios:
  ut);//生成或打开文件 //确定绘图界限
 file<<"LIMITS"<<' '<<-0.0<<','<<-50.0<<' '<<60.0<<','<<50.0<<'\n';
 //全屏显示
 file<<"ZOOM"<<' '<<"A"<<'\n';
 
 file<<"LINE"<<' '<<-b/2+30<<','<<D/2<<' '<<b/2+30<<','<<D/2<<'\n'<<'\n';//绘外径投影线
 file<<"LINE"<<' '<<-b/2+30<<','<<d/2<<' '<<b/2+30<<','<<d/2<<'\n'<<'\n';//绘内径投影线
 file<<"LINE"<<' '<<-b/2+30<<','<<-d/2<<' '<<b/2+30<<','<<-d/2<<'\n'<<'\n';//绘左垂直线
 file<<"LINE"<<' '<<-b/2+30<<','<<-D/2<<' '<<b/2+30<<','<<-D/2<<'\n'<<'\n';//绘右垂直线
 file<<"LINE"<<' '<<-b/2+30<<','<<D/2<<' '<<-b/2+30<<','<<-D/2<<'\n'<<'\n';//绘内径投影线
 file<<"LINE"<<' '<<b/2+30<<','<<D/2<<' '<<b/2+30<<','<<-D/2<<'\n'<<'\n';//绘外径投影线
 //<>绘上十字
 file<<"LINE"<<' '<<30-3<<','<<d/2+(D/2-d/2)/2<<' '<<30+3<<','<<d/2+(D/2-d/2)/2<<'\n'<<'\n';
 file<<"LINE"<<' '<<30<<','<<d/2+(D/2-d/2)/2-3<<' '<<30<<','<<d/2+(D/2-d/2)/2+3<<'\n'<<'\n';
 //绘下十字
 file<<"LINE"<<' '<<30-3<<','<<-(d/2+(D/2-d/2)/2)<<' '<<30+3<<','<<-(d/2+(D/2-d/2)/2)<<'\n'<<'\n';
 file<<"LINE"<<' '<<30<<','<<-(d/2+(D/2-d/2)/2)-3<<' '<<30<<','<<-(d/2+(D/2-d/2)/2)+3<<'\n'<<'\n';
 //关闭文件
 file.close();
 }
 void CGkbc8View::OnDrawdxf()
 {
 long d,D,b;
 D=m_pSet->m_D1*4;//取出数据库中轴承数据适当放大
 d=m_pSet->m_d2*4;
 b=m_pSet->m_b*4;
 
 CDC*pDC=GetDC();//获取设备
 CBrush Brush;//定义画刷
 Brush.CreateSolidBrush(RGB(255,255,255));//创建画刷并置白色色
 pDC->SelectObject(Brush);//选择白色画刷
 pDC->Rectangle(600,0,200,500);//把此范围内的背景刷为白色
 CPen Pen;//定义画笔
 Pen.CreatePen(PS_DASH,1,RGB(255,0,0));//创建画笔并置红色
 pDC->SelectObject(Pen);//选择画笔
 pDC->SetViewportOrg(300,150);//确定绘图中心点
 pDC->MoveTo(0,120);//把画笔移动到
 pDC->LineTo(0,-120);//画线
 pDC->MoveTo(-120,0);//移动画笔
 pDC->LineTo(120,0);//画线
 Pen.DeleteObject();//删除画笔
 Pen.CreatePen(PS_SOLID,2,RGB(55,55,255));//创建画笔并置兰色
 pDC->SelectObject(Pen);//选择画笔
 pDC->MoveTo(-b/2,-D/2);//移动
 pDC->LineTo(b/2,-D/2);//画线
 pDC->LineTo(b/2,D/2);
 pDC->LineTo(-b/2,D/2);
 pDC->LineTo(-b/2,-D/2);
 pDC->MoveTo(-b/2,-d/2);
 pDC->LineTo(b/2,-d/2);
 pDC->MoveTo(-b/2,d/2);
 pDC->LineTo(b/2,d/2);
 //画第一个十字
 pDC->MoveTo(-5,d/2+(D/2-d/2)/2);
 pDC->LineTo(5,d/2+(D/2-d/2)/2);
 pDC->MoveTo(0,d/2+(D/2-d/2)/2+5);
 pDC->LineTo(0,d/2+(D/2-d/2)/2-5);
 //画第二个十字
 pDC->MoveTo(-5,-(d/2+(D/2-d/2)/2));
 pDC->LineTo(5,-(d/2+(D/2-d/2)/2));
 pDC->MoveTo(0,-(d/2+(D/2-d/2)/2)+5);
 pDC->LineTo(0,-(d/2+(D/2-d/2)/2)-5);
 Pen.DeleteObject(); //删除画笔
 Brush.DeleteObject();
 }
 上面按钮函数中还调用了一自定义函数line (),函数体可以例程查看
 我们来演示下功能实现的整个过程
 
 
 
 
 
 |