react 前端框架如何驱动企业数字化转型与创新发展
1321
2022-11-15
CAD使用控件把DWG文件转成位图
一、说明
CAD控件提供的接口,可以把dwg文件转换成Bmp,Jpg文件,也可以把DWG文件中某个区域的图形绘制到CDC上或保存为Bmp文件。这些接口即能在VC中使用,也能在VB,C#,Delphi,网页中调用。
二、DwgToJpg
1、不需要使用CAD控件打开dwg文件,直接把dwg文件转成jpg文件。
2、VC接口:
BOOL MxDraw::DwgToJpg(IN LPCTSTR pszDwgFilePath, OUT LPCTSTR pszJpgFilePath, int iWidth = -1, int iHeight = -1);
3、COM接口:
bool DwgToJpg(string pszDwgFileName, string pszJpgFileName, int lWidth, int lHeight)
4、MxDrawXLib.IMxDrawApplication 的成员
说明 | |
pszDwgFilePath | 转入的DWG文件路径 |
pszJpgFilePath | 另存为的JPG文件路径 |
iWidth | 保存后的JPG文件的像素宽度 |
iHeight | 保存后的JPG文件的像素高度 |
5、VC调用参考例程:
void CTestDlg::OnBnClickedDwgtojpgButton(){// TODO: CPreviewFileDialog openDlg(TRUE,_T("dwg"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,//_T("dwg(*.dwg) | *.dwg||"),_T("DWG files (*.dwg)|*.dwg|DXF files (*.dxf)|*.dxf|Jpg files (*.jpg)|*.jpg|BMP files (*.bmp)|*.bmp||"),this); CString sDwgFileName;if(openDlg.DoModal() == IDOK){sDwgFileName = openDlg.GetPathName();}else{return;} //CString sJpgFilePath;CFileDialog openJpgDlg(FALSE,_T("jpg"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("jpg(*.jpg) | *.jpg||"),this);if(openJpgDlg.DoModal() == IDOK){sJpgFilePath = openJpgDlg.GetPathName();}else{return;} // 1000,1000是转成jpg的像素宽度和高度。if(MxDraw::DwgToJpg(sDwgFileName,sJpgFilePath,1000,1000) ){AfxMessageBox(_T("转换成功"));}else{AfxMessageBox(_T("转换失败"));} }
6、C#调用参考例程:
private void DwgToJpg_Click(object sender, EventArgs e){// 创建一个应用对象MxDrawApplication app = new MxDrawApplication(); OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = "Dwg 文件(*.Dwg)|*.Dwg|Dxf files (*.Dxf)|*.dxf"; if (ofd.ShowDialog() != DialogResult.OK){return;} SaveFileDialog sfd = new SaveFileDialog();sfd.Filter = "jpg 文件(*.jpg)|*.jpg"; if (sfd.ShowDialog() != DialogResult.OK){return;} // 1000,1000是转成jpg的像素宽度和高度。if(app.DwgToJpg(ofd.FileName, sfd.FileName, 1000, 1000) ){ MessageBox.Show("转换成功");}else{MessageBox.Show("转换失败");} }}
三、WriteJpg
1、使用CAD控件打开dwg文件或经过了编辑后,调用该函数把它另存为Jpg文件。
2、VC接口:
BOOL MxDraw::WriteJpg(MXDRAWOCXHANDLE hOcx,LPCTSTR pszJpgFilePath, int iWidth = -1,int iHeight = -1);
3、COM接口:
public virtual bool SaveJpgFile(string pszJpgFilePath, int lWidth, int lHeight)
4、AxMxDrawXLib.AxMxDrawX 的成员
参数 | 说明 |
hOcx | 控件的标识句柄 |
pszJpgFilePath | 保存的Jpg文件路径 |
lWidth | 保存后的Jpg文件像素宽度,取默认值-1,程序就自动取4000 |
lHeight | 保存后的Jpg文件像素高度,取默认值-1,程序就自动取4000 |
四、WriteBmp
1、使用CAD控件打开dwg文件或经过了编辑后,调用该函数把它另存为Bmp文件。
2、VC接口:
BOOL MxDraw::WriteBmp(MXDRAWOCXHANDLE hOcx,LPCTSTR pszBmpFilePath, int iWidth = -1,int iHeight = -1);
3、COM接口:
public virtual bool SaveBmpFile(string pszBmpFilePath, int lWidth, int lHeight)
4、AxMxDrawXLib.AxMxDrawX 的成员
参数 | 说明 |
hOcx | 控件的标识句柄 |
pszJpgFilePath | 保存的Jpg文件路径 |
lWidth | 保存后的Jpg文件像素宽度,取默认值-1,程序就自动取4000 |
lHeight | 保存后的Jpg文件像素高度,取默认值-1,程序就自动取4000 |
5、VC调用参考例程:
void CTestDlg::OnBnClickedSavebmpButton(){// TODO: 在此添加控件通知处理程序代码CFileDialog openDlg(FALSE,_T("bmp"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("bmp(*.bmp) | *.bmp||"),this); CString sFileName;if(openDlg.DoModal() == IDOK){sFileName = openDlg.GetPathName();}else{return;} if(!MxDraw::WriteBmp(m_hDrawOcx,sFileName) ){CString sError;if(MxDraw::GetLastError().IsEmpty() )sError = _T("保存位图文件失败!");elsesError.Format(_T("保存位图文件失败!原因为:%s"),MxDraw::GetLastError());AfxMessageBox(sError);}else{AfxMessageBox(_T("保存成功"));}}
五、DrawToDc
1、绘制CAD控件当前图形中指定区域到CDC对象中。
2、VC接口:
BOOL MxDraw::DrawToDc(MXDRAWOCXHANDLE hOcx, CDC* pDC, int iDCx,int iDCy,int iDCWidth,int iDCHeight, double dLbx,double dLby,double dRtx,double dRty );
3、AxMxDrawXLib.AxMxDrawX 的成员
参数 | 说明 |
hOcx | 标识控件的句柄 |
pDC | 把指定区域的图形中的内容绘制到pDC上 |
iDCx, iDCy | 绘制pDC的左上角位置 |
iDCWidth,iDCHeight | 绘制到pDC上的宽度和高度 |
dLbx, dLby | 指定图形区域的左下角坐标 |
dRtx, dRty | 指定图形区域的右下角坐标 |
4、VC调用参考例程:
void CTestCommands::DrawToBmp(){// 选择让用从图上选择个存位图的区域。acutPrintf(_T("\n 请点取存位图的区域:")); // 动态拖放输入,让用户确定要保存的区域CRectSelJig getRect; // pt1,pt2是矩形框的两点AcGePoint3d pt1,pt2;if(!getRect.DoIt(pt1,pt2) )return; // 让用户选择保存的位图文件.CTestDlg* pDlg = (CTestDlg*)AfxGetApp()->GetMainWnd();CFileDialog openDlg(FALSE,_T("bmp"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("bmp(*.bmp) | *.bmp||"),pDlg); CString sFileName;if(openDlg.DoModal() == IDOK){sFileName = openDlg.GetPathName();}else{return;} int iBmpWidth = 1000;int iBmpHeight = 500; // 开始保存文件.CDC dc;dc.Attach(::GetDC(NULL)); CBitmap bm;bm.CreateCompatibleBitmap(&dc,iBmpWidth,iBmpHeight); CDC tmpDc;tmpDc.CreateCompatibleDC(&dc);CBitmap*pOld = tmpDc.SelectObject(&bm); if(MxDraw::DrawToDc(MxDraw::GetCurOcxHandle(),&tmpDc,0,0,iBmpWidth,iBmpHeight,pt1.x,pt1.y,pt2.x,pt2.y)){tmpDc.SelectObject(pOld);if(SaveBmp(&bm,&dc,sFileName) ){AfxMessageBox(_T("保存成功"));}else{AfxMessageBox(_T("保存失败"));} }else{AfxMessageBox(_T("未知原因,保存失败"));tmpDc.SelectObject(pOld);}}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~