Dwg,png,jpg,Dxf格式转换

您所在的位置:网站首页 dwg文件怎么转换成图片格式 Dwg,png,jpg,Dxf格式转换

Dwg,png,jpg,Dxf格式转换

2023-07-24 00:47| 来源: 网络整理| 查看: 265

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

(1)dxf转dwg:打开dxf,另存为dwg

//打开dxf ShellExecute(NULL, _T("open"), strDxfPath, NULL, NULL, SW_SHOW); //另存为dwg AcDbDatabase * pDB = acdbCurDwg(); Acad::ErrorStatus es = pDB->saveAs(strDwgPath);

(2)dwg转png,jpg

方法1:调用CAD的命令pngout,jpgout

方法2:调用CAD的打印

dwg转jpg:

bool DwgToJpg( CString strDwgPath, CString& strJpgPath,LPCTSTR strPixel, AcGePoint3d ptS,AcGePoint3d ptE) { if ( _taccess(strDwgPath ,0) == -1 ) return false; //dwg文件路径 CComVar strTmpDwg; CopyFile(strDwgPath, strTmpDwg, FALSE); //jpg文件路径 CString strTmpJpg = strTmpDwg.GetFilePathOnly()+strTmpDwg.GetFileNameOnly()+_T(".jpg"); COpDWG on(strTmpDwg); if ( !on.open(true,psd::glb_dwgPsd) && !on.open(true/*, psd::glb_dwgPsd*/)) { DeleteFile(strTmpDwg); return false; } //驱动配置文件路径 CString strPrinterDir = CAppUtility::GetPathSupport()+_T("Drivers\\Printer\\"); CPlotSetting set; set.SetCopyPath(strPrinterDir); set.setCentered(true); if (ptS != ptE) { set.setPlotTypeWindow(AcGePoint3d(((ptS.x > ptE.x) ? ptE.x : ptS.x), ((ptS.y > ptE.y) ? ptE.y : ptS.y), 0.0), AcGePoint3d(((ptS.x < ptE.x) ? ptE.x : ptS.x), ((ptS.y < ptE.y) ? ptE.y : ptS.y), 0.0)); } set.SetConfigFileJPG(strPixel); set.setFill(true); CPlotDWG plot(&set); plot.SetNeedProgress(false); bool bRet = false; if ( bRet = plot.ToJPG(strTmpDwg, strTmpJpg) ) { strJpgPath = strTmpJpg; } on.close(); DeleteFile(strTmpDwg); return bRet; }

dwg转png:

bool CDBQueryToolsSevr::DwgToPng( CString strDwgPath, CString& strPngPath, AcGePoint3d ptS , AcGePoint3d ptE ) { if ( _taccess(strDwgPath ,0) == -1 ) return false; //dwg文件路径 CComVar strTmpDwg; CopyFile(strDwgPath, strTmpDwg, FALSE); //png文件路径 CString strTmpPng = strTmpDwg.GetFilePathOnly()+strTmpDwg.GetFileNameOnly()+_T(".png"); COpDWG on(strTmpDwg); if ( !on.open(true,psd::glb_dwgPsd) && !on.open(true/*, psd::glb_dwgPsd*/)) { DeleteFile(strTmpDwg); return false; } //驱动配置文件路径 CString strPrinterDir = CAppUtility::GetPathSupport()+_T("Drivers\\Printer\\"); CPlotSetting set; set.SetCopyPath(strPrinterDir); set.setCentered(true); if (ptS != ptE) { set.setPlotTypeWindow(AcGePoint3d(((ptS.x > ptE.x) ? ptE.x : ptS.x), ((ptS.y > ptE.y) ? ptE.y : ptS.y), 0.0), AcGePoint3d(((ptS.x < ptE.x) ? ptE.x : ptS.x), ((ptS.y < ptE.y) ? ptE.y : ptS.y), 0.0)); } set.SetConfigFilePNG(); set.setFill(true); CPlotDWG plot(&set); plot.SetNeedProgress(false); bool bRet = false; if ( bRet = plot.ToPNG(strTmpDwg, strTmpPng) ) { strPngPath = strTmpPng; } on.close(); DeleteFile(strTmpDwg); return bRet; }

DWG文件操作类:

//! DWG文件操作类 struct COpDWGInfo; class COMSDK_EX COpDWG { public: #ifdef _ACRXAPP COpDWG(LPCTSTR lpDWGPath,LPDISPATCH pApp=acedGetAcadWinApp()->GetIDispatch(TRUE)); #else COpDWG(LPCTSTR lpDWGPath,LPDISPATCH pApp); #endif ~COpDWG(void); private: COpDWG(const COpDWG&); COpDWG& operator=(const COpDWG&); COpDWGInfo* m_pInfo; public: //! 设置当前要操作的DWG路径 void setDWGPath(LPCTSTR lpDWGPath); //! 判断DWG文件是否已打开 bool isOpen()const; //! 打开DWG[打开后是否需要全图] bool open(bool IsZoom=true, LPCTSTR lpPsd=NULL); //! 关闭文件 bool close(); //! 保存DWG bool save(); bool saveAs(LPCTSTR lpDWGNewPath); }; #include "AcAdGetComPtr.h" struct COpDWGInfo { std::wstring m_strDWGPath; AcAdGetComPtr m_Acad; COpDWGInfo(LPDISPATCH pApp):m_Acad(pApp){} }; COpDWG::COpDWG(LPCTSTR lpDWGPath, LPDISPATCH pApp): m_pInfo( new COpDWGInfo(pApp)) { m_pInfo->m_strDWGPath = lpDWGPath; } COpDWG::~COpDWG(void) { } void COpDWG::setDWGPath( LPCTSTR lpDWGPath ) { m_pInfo->m_strDWGPath = lpDWGPath; } bool COpDWG::isOpen() const { return m_pInfo->m_Acad.getDoc(m_pInfo->m_strDWGPath.c_str()) != NULL; } bool COpDWG::open(bool IsZoom/*=true*/, LPCTSTR lpPsd) { AutoCAD::IAcadDocumentPtr pDoc = m_pInfo->m_Acad.getDoc(m_pInfo->m_strDWGPath.c_str()); if ( pDoc != NULL ) { return SUCCEEDED(pDoc->Activate()); } // 取得所有文档 AutoCAD::IAcadDocumentsPtr pDocs = m_pInfo->m_Acad.getDocs(); if ( NULL == pDocs ) return false; _bstr_t path(m_pInfo->m_strDWGPath.c_str()); if ( lpPsd == NULL || lpPsd[0] == NULL ) { if ( FAILED(pDocs->Open(path, COleVariant((short)FALSE), vtMissing, &pDoc)) ) return false; } else { if ( FAILED(pDocs->Open(path, COleVariant((short)FALSE), COleVariant(lpPsd), &pDoc)) ) return false; } if ( FAILED(pDoc->Activate()) ) return false; // 需要全图显示 HRESULT hr; if ( IsZoom ) { hr = pDoc->SendCommand(_T("z e ")); } return true; } bool COpDWG::close() { AutoCAD::IAcadDocumentPtr pDoc = m_pInfo->m_Acad.getDoc(m_pInfo->m_strDWGPath.c_str()); if ( pDoc != NULL ) { pDoc->Close(); } return true; } bool COpDWG::save() { AutoCAD::IAcadDocumentPtr pDoc = m_pInfo->m_Acad.getDoc(m_pInfo->m_strDWGPath.c_str()); if ( NULL == pDoc) return false; return SUCCEEDED(pDoc->Save()); } bool COpDWG::saveAs( LPCTSTR lpDWGNewPath ) { AutoCAD::IAcadDocumentPtr pDoc = m_pInfo->m_Acad.getDoc(m_pInfo->m_strDWGPath.c_str()); if ( NULL == pDoc) return false; return SUCCEEDED(pDoc->SaveAs(_bstr_t(lpDWGNewPath))); }

打印设置类:

//! 配置类 struct CPlotSettingInfo; class COMSDK_EX CPlotSetting { friend struct CPlotSettingInfo; friend struct CPlotDWGInfo; friend class CPlotDWG; public: CPlotSetting(void); ~CPlotSetting(void); private: CPlotSetting(const CPlotSetting& p1); CPlotSetting& operator=(const CPlotSetting&p1); private: // 打印类型 enum emPlotToType { PDF = 0, DWF, JPG, PNG }; CPlotSettingInfo* m_pInfo; public: //! 设置打印比例 void setScale(double dScale/*=1.0*/); //! 设置是否填充 void setFill(bool bIsFill); //! 设置是否居中打印 void setCentered(bool IsCentered/*=true*/); //! 设置视角 void setPlotType(AcDbPlotSettings::PlotType emType/*=AcDbPlotSettings::kExtents*/); //! 设置视角为窗口 void setPlotTypeWindow(const AcGePoint3d& pLB/*左下*/, const AcGePoint3d& pRT/*右上*/); public: //! 设置拷贝路径[如果PC3文件不存在,则去该路径下寻找] bool SetCopyPath(LPCTSTR lpPath); //! 设置PDF配置文件 bool SetConfigFilePDF(LPCTSTR lpPagerName=_T("ISO_A4_(210.00_x_297.00_MM)"), LPCTSTR lpPC3=_T("DWG To PDF.pc3")); //! 设置DWF配置文件 bool SetConfigFileDWF(LPCTSTR lpPagerName=_T("UserDefinedImperial (12590.00 x 12590.00英寸)"), LPCTSTR lpPC3=_T("DWF6 ePlot.pc3")); //! 设置JPG配置文件 bool SetConfigFileJPG(LPCTSTR lpPagerName=_T("XGA_(2100.00_x_1485.00_Pixels)"), LPCTSTR lpPC3=_T("PublishToWeb JPG.pc3")); //! 设置PNG配置文件 bool SetConfigFilePNG(LPCTSTR lpPagerName=_T("XGA_(1485.00_x_2100.00_Pixels)"), LPCTSTR lpPC3=_T("PublishToWeb PNG.pc3")); protected: //! 初始化 bool Init(emPlotToType emType); //! 得到模型ID AcDbObjectId getLayout()const; //! 得到配置 const AcDbPlotSettings* getSetting()const; }; #include "MD5Checksum.h" #include struct PaperInfos { std::wstring m_strName;// 图纸名称 double m_dWidth ;// 图纸宽 double m_dHeight ;// 图纸高 }; struct ConfigAndPaper { std::wstring m_strPc3Name ;// 文件名称 std::wstring m_strPaperName ;// 默认图纸 std::vectorm_arrPapers;// 所有图纸 }; struct CPlotSettingInfo { public: CPlotSettingInfo(); public: typedef std::map _arrConfigs; AcDbPlotSettings* m_pSetting ;// CAD配置 AcDbObjectId m_LayoutId ;// 当前模型ID _arrConfigs m_arrConfigs ;// 文件配置 std::wstring m_strCopyPC3Path ;// 拷贝路径[如果PC3文件不存在,则去该路径下寻找] bool m_bIsbBackgroundPlot ;// 是否后台打印 bool m_bIsCentered ;// 是否居中打印 bool m_bIsFit ;// 是否布满图纸 double m_dScale ;// 图纸比例尺 AcDbPlotSettings::PlotType m_emPlotType;// 打印视窗 AcGePoint3d m_LeftBottom ;// 左下角点(当m_emPlotType==AcDbPlotSettings::kWindow时的窗口范围) AcGePoint3d m_RightTop ;// 右上角点(当m_emPlotType==AcDbPlotSettings::kWindow时的窗口范围) public: // 设置配置 bool SetConfig(ConfigAndPaper& mItem, LPCTSTR lpPagerName, LPCTSTR lpPC3); // 取得当前合适的图纸名称 std::wstring GetFitPaper()const; private: //得到cad的安装目录 CString GetCADPlotterPath(); }; CPlotSettingInfo::CPlotSettingInfo(): m_pSetting(NULL), m_dScale(1.0), m_bIsCentered(true), m_bIsFit(true), m_bIsbBackgroundPlot(true), m_emPlotType(AcDbPlotSettings::kExtents) { } CString CPlotSettingInfo::GetCADPlotterPath() { TCHAR szpath[MAX_PATH]={0}; ::GetModuleFileName(NULL,szpath,MAX_PATH); CString strCadPlotterPath(szpath); strCadPlotterPath.TrimRight(_T("acad.exe")); strCadPlotterPath += _T("UserDataCache\\Plotters\\"); return strCadPlotterPath; } bool CPlotSettingInfo::SetConfig( ConfigAndPaper& mItem, LPCTSTR lpPagerName, LPCTSTR lpPC3 ) { if ( !m_strCopyPC3Path.empty() ) { const ACHAR* pszPath = NULL; if (Acad::eOk != acdbHostApplicationServices()->getRoamableRootFolder(pszPath)) return false; std::wstring strPath = std::wstring(pszPath) + _T("Plotters\\"); // 判断文件是否存在,如果不存在,则拷过来PMP文件 CString strFile(lpPC3); strFile.Replace(_T("pc3"),_T("pmp")); std::wstring szFile = strFile.GetString(); //cad安装目录下的打印机目录 CString strCADPlotterPath = GetCADPlotterPath(); if (_taccess((strPath +_T("PMP Files\\")+szFile).c_str(),0) == -1 ) { if ( !CopyFile((m_strCopyPC3Path+_T("PMP Files\\")+szFile).c_str(),(strPath+_T("PMP Files\\")+szFile).c_str(), FALSE) ) return false; } else { CString strLocalMD5 = CMD5Checksum::GetMD5((strPath +_T("PMP Files\\")+szFile).c_str()); CString strDirMD5 = CMD5Checksum::GetMD5((m_strCopyPC3Path+_T("PMP Files\\")+szFile).c_str()); //if ( 0 != strLocalMD5.CompareNoCase(strDirMD5)) { if ( !CopyFile((m_strCopyPC3Path+_T("PMP Files\\")+szFile).c_str(),(strPath+_T("PMP Files\\")+szFile).c_str(), FALSE) ) return false; if (!CopyFile((m_strCopyPC3Path+_T("PMP Files\\")+szFile).c_str(),strCADPlotterPath+_T("PMP Files\\")+(szFile).c_str(), FALSE) ) return false; } } // 判断文件是否存在,如果不存在,则拷过来PC3文件 //if (_taccess((strPath + lpPC3).c_str(),0) == -1 ) { if ( !CopyFile((m_strCopyPC3Path+lpPC3).c_str(),(strPath+lpPC3).c_str(), FALSE) ) return false; if ( !CopyFile((m_strCopyPC3Path+lpPC3).c_str(),strCADPlotterPath+lpPC3, FALSE) ) return false; } } mItem.m_strPaperName = lpPagerName; mItem.m_strPc3Name = lpPC3 ; // 取得所有图纸 return true; } std::wstring CPlotSettingInfo::GetFitPaper() const { // _arrConfigs::const_iterator mIter=m_arrConfigs.find(m_emPlotType); // if ( mIter == m_arrConfigs.end() ) return _T(""); // // // 遍历所有图纸,并解析其大小 // return ; } CPlotSetting::CPlotSetting(void): m_pInfo( new CPlotSettingInfo) { // 设置PDF配置文件 SetConfigFilePDF(); // 设置DWF配置文件 SetConfigFileDWF(); // 设置JPG配置文件 SetConfigFileJPG(); // 设置PNG配置文件 SetConfigFilePNG(); } CPlotSetting::~CPlotSetting(void) { } AcDbObjectId CPlotSetting::getLayout() const { return m_pInfo->m_LayoutId; } const AcDbPlotSettings* CPlotSetting::getSetting() const { return m_pInfo->m_pSetting; } bool CPlotSetting::Init(emPlotToType emType) { AcDbPlotSettingsValidator* pPSV = (AcDbPlotSettingsValidator*)acdbHostApplicationServices()->plotSettingsValidator(); if ( pPSV==NULL ) return false; AcApLayoutManager *pLayMan = (AcApLayoutManager *) acdbHostApplicationServices()->layoutManager(); if ( NULL == pLayMan ) return false; //get the active layout LPCTSTR lpName = pLayMan->findActiveLayout(TRUE); if ( lpName == NULL ) return false; AcDbLayout *pLayout = pLayMan->findLayoutNamed(lpName,TRUE); if ( pLayout == NULL ) return false; m_pInfo->m_LayoutId = pLayout->id(); delete m_pInfo->m_pSetting; m_pInfo->m_pSetting = new AcDbPlotSettings(pLayout->modelType()); m_pInfo->m_pSetting->copyFrom(pLayout); Acad::ErrorStatus es =pPSV->setPlotRotation(m_pInfo->m_pSetting,AcDbPlotSettings::k0degrees); if ( m_pInfo->m_emPlotType == AcDbPlotSettings::kWindow ) { es = pPSV->setPlotWindowArea(m_pInfo->m_pSetting,m_pInfo->m_LeftBottom.x, m_pInfo->m_LeftBottom.y, m_pInfo->m_RightTop.x, m_pInfo->m_RightTop.y); } es = pPSV->setPlotType(m_pInfo->m_pSetting,m_pInfo->m_emPlotType); es = pPSV->setPlotCfgName(m_pInfo->m_pSetting,m_pInfo->m_arrConfigs[emType].m_strPc3Name.c_str(),m_pInfo->m_arrConfigs[emType].m_strPaperName.c_str()); //所有配置名称 AcArray mMediaList; std::vector arrMediaNames; pPSV->canonicalMediaNameList(m_pInfo->m_pSetting,mMediaList); for (int nIndex = 0; nIndex < mMediaList.length(); ++nIndex) arrMediaNames.push_back(mMediaList[nIndex]); // Set the Scale... if (m_pInfo->m_bIsFit) { es = pPSV->setUseStandardScale(m_pInfo->m_pSetting,Adesk::kTrue); es = pPSV->setStdScaleType(m_pInfo->m_pSetting,AcDbPlotSettings::kScaleToFit); } else // Choose to use this custom scale... { es=pPSV->setUseStandardScale(m_pInfo->m_pSetting,Adesk::kFalse); es=pPSV->setCustomPrintScale(m_pInfo->m_pSetting,m_pInfo->m_dScale,1); } // Specify that we want our plot centered by AutoCAD... es=pPSV->setPlotCentered(m_pInfo->m_pSetting,m_pInfo->m_bIsCentered); resbuf res; res.rbnext = NULL; res.restype = RTSHORT; res.resval.rint = 0/*m_pInfo->m_bIsbBackgroundPlot?1:*/; acedSetVar(L"BACKGROUNDPLOT",&res); // 设置系统打印ole对象相关变量 resbuf res1; res1.restype = RTSHORT; res1.resval.rint = 1;//显示并打印边框 AcAxDocLock mLock; acedSetVar(_T("OLEFRAME"), &res1); resbuf res2; res2.restype = RTSHORT; res2.resval.rint = 0;//所有 OLE 对象均可见并可打印 acedSetVar(_T("OLEHIDE"), &res2); resbuf res3; res3.restype = RTSHORT; res3.resval.rint = 3;//设置 OLE 对象的默认打印质量 自动选择 acedSetVar(_T("OLEQUALITY"), &res3); return es == Acad::eOk; } bool CPlotSetting::SetConfigFilePDF( LPCTSTR lpPagerName/*=_T("ISO_A4_(210.00_x_297.00_MM)")*/, LPCTSTR lpPC3/*=_T("DWG To PDF.pc3")*/ ) { m_pInfo->m_bIsFit = true; return m_pInfo->SetConfig(m_pInfo->m_arrConfigs[PDF], lpPagerName, lpPC3); } bool CPlotSetting::SetCopyPath( LPCTSTR lpPath ) { m_pInfo->m_strCopyPC3Path = lpPath; return true; } bool CPlotSetting::SetConfigFileDWF( LPCTSTR lpPagerName/*=_T("ISO_A4_(210.00_x_297.00_MM)")*/, LPCTSTR lpPC3/*=_T("DWF6 ePlot.pc3")*/ ) { m_pInfo->m_bIsFit = false; return m_pInfo->SetConfig(m_pInfo->m_arrConfigs[DWF], lpPagerName, lpPC3); } bool CPlotSetting::SetConfigFileJPG( LPCTSTR lpPagerName/*=_T("XGA_(1024.00_x_768.00_Pixels)")*/, LPCTSTR lpPC3/*=_T("PublishToWeb JPG.pc3")*/ ) { return m_pInfo->SetConfig(m_pInfo->m_arrConfigs[JPG], lpPagerName, lpPC3); } bool CPlotSetting::SetConfigFilePNG( LPCTSTR lpPagerName/*=_T("XGA_(1024.00_x_768.00_Pixels)")*/, LPCTSTR lpPC3/*=_T("PublishToWeb PNG.pc3")*/ ) { return m_pInfo->SetConfig(m_pInfo->m_arrConfigs[PNG], lpPagerName, lpPC3); } void CPlotSetting::setScale( double dScale ) { m_pInfo->m_dScale = dScale; m_pInfo->m_bIsFit = false; } //! 设置是否填充 void CPlotSetting::setFill(bool bIsFill) { m_pInfo->m_bIsFit = bIsFill; } void CPlotSetting::setPlotType( AcDbPlotSettings::PlotType emType ) { m_pInfo->m_emPlotType = emType; } void CPlotSetting::setCentered( bool IsCentered/*=true*/ ) { m_pInfo->m_bIsCentered = IsCentered; } void CPlotSetting::setPlotTypeWindow( const AcGePoint3d& pLB/*左下*/, const AcGePoint3d& pRT/*右上*/ ) { m_pInfo->m_emPlotType = AcDbPlotSettings::kWindow; m_pInfo->m_LeftBottom = pLB; m_pInfo->m_RightTop = pRT; }

打印类:

//! 打印类 struct CPlotDWGInfo; class CPlotSetting; class COMSDK_EX CPlotDWG { public: CPlotDWG(CPlotSetting* pSetting=NULL); ~CPlotDWG(void); private: CPlotDWGInfo* m_pInfo; CPlotDWG(const CPlotDWG&); CPlotDWG&operator=(const CPlotDWG&); public: //! 设置是否需要打印的进度条 void SetNeedProgress(bool bNeedProgress = true); //! DWG打印PDF格式 bool ToPDF(LPCTSTR dwgFilePath,LPCTSTR outPutFilePath); //! DWG打印DWF格式 bool ToDWF(LPCTSTR dwgFilePath,LPCTSTR outPutFilePath); //! DWG打印PNG格式 bool ToPNG(LPCTSTR dwgFilePath,LPCTSTR outPutFilePath); //! DWG打印JPG格式 bool ToJPG(LPCTSTR dwgFilePath,LPCTSTR outPutFilePath); }; #include "PlotSetting.h" #include #define hhverifyx2(a,b) if ( !(a) ){assert(false);b;} #define hhverifyErr2(a,b) if ( Acad::eOk != (a) ) {assert(false);b;} #define hhverifyErr(a) if ( Acad::eOk != (a) ) {assert(false);} struct CPlotDWGInfo { CPlotSetting* m_pSetting;// 配置 bool m_bIsNew ;// 是否内部new出的对像 bool m_bNeedProgress;//!< 是否需要打印的进度条 public: //! 打印 bool Plot(LPCTSTR dwgFilePath,LPCTSTR outPutFilePath, CPlotSetting::emPlotToType emType); private: bool InnerPlot(LPCTSTR outPutFilePath); }; bool CPlotDWGInfo::Plot( LPCTSTR dwgFilePath,LPCTSTR outPutFilePath, CPlotSetting::emPlotToType emType ) { // 检测必须项 AcApDocManager* pMG = acDocManager; hhverifyx2(NULL != pMG && NULL != dwgFilePath && NULL != outPutFilePath && NULL != m_pSetting,return false;); // 保存当前资源 AcApDocument* pDoc = curDoc(); hhverifyx2(pDoc, return false;); Acad::ErrorStatus es = acDocManager->sendStringToExecute(pDoc,_T("zoom e\n"),true,false,false); pMG->pushAcadResourceHandle(); pDoc->pushDbmod(); bool bSuc = false; // 初始化配置 if ( m_pSetting->Init(emType) ) { // 打印 bSuc = InnerPlot(outPutFilePath); } pDoc->popDbmod(); pMG->popResourceHandle(); return bSuc; } bool CPlotDWGInfo::InnerPlot(LPCTSTR outPutFilePath) { Acad::ErrorStatus es; AcAxDocLock mLock(acdbCurDwg()); AcPlPlotEngine* pEngine = NULL; hhverifyErr2(es=AcPlPlotFactory::createPublishEngine(pEngine), return false;); hhverifyErr2(es=pEngine->beginPlot(NULL), pEngine->destroy();return false;); AcPlPlotInfo plotInfo; // 用来描述如何制作打印 //首先,将图层设置为指定的图层(一般当前图层) plotInfo.setLayout(m_pSetting->getLayout());//必须设置 // 然后,用我们填充的plot设置覆盖布局设置 plotInfo.setOverrideSettings(m_pSetting->getSetting()); // 验证这些设置。 AcPlPlotInfoValidator validator; validator.setMediaMatchingPolicy(AcPlPlotInfoValidator::kMatchEnabled); hhverifyErr2(es=validator.validate(plotInfo), pEngine->destroy();return false;); //开始文档.我们调用的版本依赖于plot -to- file状态。 const TCHAR *szDocName=acDocManager->curDocument()->fileName(); hhverifyErr2(es=pEngine->beginDocument(plotInfo, szDocName, NULL, 1, true,outPutFilePath), pEngine->destroy();return false;); AcPlPlotProgressDialog *pPlotProgDlg; if (m_bNeedProgress) { pPlotProgDlg = acplCreatePlotProgressDialog(acedGetAcadFrame()->m_hWnd,false,1,NULL,false); pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kDialogTitle,_T("正在打印")); pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kCancelJobBtnMsg,_T("Cancel Job")); pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kCancelSheetBtnMsg,_T("Cancel Sheet")); pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kSheetSetProgressCaption,_T("Job Progress")); pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kSheetProgressCaption,_T("打印进度")); pPlotProgDlg->setPlotProgressRange(0,100); pPlotProgDlg->onBeginPlot(); pPlotProgDlg->setIsVisible(true); es = pEngine->beginPlot(pPlotProgDlg); } // 通过向引擎发送命令和通知到进度对话框。 AcPlPlotPageInfo pageInfo; hhverifyErr2(es=pEngine->beginPage(pageInfo, plotInfo, true),pEngine->destroy();return false;); hhverifyErr(es = pEngine->beginGenerateGraphics()); hhverifyErr(es = pEngine->endGenerateGraphics()); hhverifyErr(es = pEngine->endPage()); if (m_bNeedProgress) { pPlotProgDlg->setSheetProgressPos(100); pPlotProgDlg->onEndSheet(); pPlotProgDlg->setPlotProgressPos(100); } hhverifyErr(es = pEngine->endDocument()); hhverifyErr(es = pEngine->endPlot()); if (m_bNeedProgress) { pPlotProgDlg->onEndPlot(); } //消除引擎 pEngine->destroy(); pEngine = NULL; if (m_bNeedProgress) { pPlotProgDlg->destroy(); } return true; } CPlotDWG::CPlotDWG(CPlotSetting* pSetting): m_pInfo( new CPlotDWGInfo) { m_pInfo->m_pSetting = pSetting; //! 默认需要打印的进度条 m_pInfo->m_bNeedProgress = true; if ( m_pInfo->m_pSetting == NULL ) { m_pInfo->m_pSetting = new CPlotSetting; m_pInfo->m_bIsNew = true; } else { m_pInfo->m_bIsNew = false; } } CPlotDWG::~CPlotDWG(void) { if ( m_pInfo->m_bIsNew ) delete m_pInfo->m_pSetting; delete m_pInfo; } bool CPlotDWG::ToPNG( LPCTSTR dwgFilePath,LPCTSTR outPutFilePath ) { return m_pInfo->Plot(dwgFilePath, outPutFilePath, CPlotSetting::PNG); } bool CPlotDWG::ToPDF( LPCTSTR dwgFilePath,LPCTSTR outPutFilePath ) { return m_pInfo->Plot(dwgFilePath, outPutFilePath, CPlotSetting::PDF); } bool CPlotDWG::ToDWF( LPCTSTR dwgFilePath,LPCTSTR outPutFilePath ) { return m_pInfo->Plot(dwgFilePath, outPutFilePath, CPlotSetting::DWF); } bool CPlotDWG::ToJPG( LPCTSTR dwgFilePath,LPCTSTR outPutFilePath ) { return m_pInfo->Plot(dwgFilePath, outPutFilePath, CPlotSetting::JPG); } void CPlotDWG::SetNeedProgress( bool bNeedProgress /*= true*/ ) { m_pInfo->m_bNeedProgress = bNeedProgress; }

方法3:自己写一个类似于qq截图的小功能



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3