找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 172|回复: 0

ObjectARX CAD批量打印

[复制链接]

1

主题

0

回帖

37

积分

管理员

积分
37
发表于 2024-5-11 21:42:42 | 显示全部楼层 |阅读模式
  1. struct resbuf rbBackGroundPlot;
  2.                                 acedGetVar(采用T("BACKGROUNDPLOT"), &rbBackGroundPlot);
  3.                                 if (rbBackGroundPlot.restype == RTSHORT && rbBackGroundPlot.resval.rint != 0)
  4.                                 {
  5.                                         int nOld = rbBackGroundPlot.resval.rint;
  6.                                         rbBackGroundPlot.resval.rint = 0;
  7.                                         acedSetVar(采用T("BACKGROUNDPLOT"), &rbBackGroundPlot);
  8.                                         rbBackGroundPlot.resval.rint = nOld;
  9.                                 }
  10.                                 AcDbLayoutManager* pLayMan = acdbHostApplicationServices()->layoutManager();
  11.                                 if (NULL != pLayMan)
  12.                                 {
  13.                                         //get the active layout
  14.                                         AcDbLayout* pLayout = pLayMan->findLayoutNamed(pLayMan->findActiveLayout(TRUE), TRUE);//获得当前布局
  15.                                         AcDbObjectId  m采用layoutId = pLayout->objectId();//获得布局的Id
  16.                                         AcPlPlotInfo plotInfo;
  17.                                         AcDbPlotSettingsValidator* pPSV = acdbHostApplicationServices()->plotSettingsValidator();
  18.                                         plotInfo.setLayout(pLayout->objectId());//必须设置
  19.                                         AcDbPlotSettings* m采用pSetting = new AcDbPlotSettings(pLayout->modelType());
  20.                                         m采用pSetting->copyFrom(pLayout);
  21.                                         pPSV->refreshLists(m采用pSetting);
  22.                                         m采用pSetting->setShadePlot(AcDbPlotSettings::kAsDisplayed);
  23.                                         m采用pSetting->setShadePlotResLevel(AcDbPlotSettings::kNormal);
  24.                                         m采用pSetting->setScaleLineweights(false);
  25.                                         m采用pSetting->setPrintLineweights(true);
  26.                                         m采用pSetting->setPlotTransparency(false);
  27.                                         m采用pSetting->setPlotPlotStyles(true);
  28.                                         m采用pSetting->setDrawViewportsFirst(true);
  29.                                         m采用pSetting->setShowPlotStyles(true);
  30.                                         if (suffix == ".pdf")
  31.                                         {
  32.                                                 es = pPSV->setPlotCfgName(m采用pSetting, L"DWG to PDF.pc3", L"ISO采用FULL采用BLEED采用A4采用(210.00采用x采用297.00采用MM)");//"ISO采用FULL采用BLEED采用A4采用(297.00采用x采用210.00采用MM)"
  33.                                                 es = pPSV->setPlotPaperUnits(m采用pSetting, AcDbPlotSettings::kMillimeters);
  34.                                                 pPSV->setPlotWindowArea(m采用pSetting, extent.minPoint().x, extent.minPoint().y, extent.maxPoint().x, extent.maxPoint().y);
  35.                                                 pPSV->setPlotOrigin(m采用pSetting, (extent.minPoint().x + extent.maxPoint().x) / 2, (extent.minPoint().y + extent.maxPoint().y) / 2);
  36.                                                 pPSV->setPlotType(m采用pSetting, AcDbPlotSettings::kWindow);
  37.                                                 es = pPSV->setCustomPrintScale(m采用pSetting, 1.0, 采用ttof(bl) / 1000.0);//PDF
  38.                                         }
  39.                                         else
  40.                                         {
  41.                                                 es = pPSV->setPlotCfgName(m采用pSetting, L"CASS采用RASTER采用JPG.pc3", L"UserDefinedRaster (1200.00 x 1600.00像素)");//"UserDefinedRaster (1782.00 x 1260.00像素)"
  42.                                                 es = pPSV->setPlotPaperUnits(m采用pSetting, AcDbPlotSettings::kPixels);
  43.                                                 es = pPSV->setPlotType(m采用pSetting, AcDbPlotSettings::kExtents);
  44.                                                 es = pPSV->setCustomPrintScale(m采用pSetting, 1.0, 采用ttof(bl) / 18000.0);//JPG
  45.                                         }
  46.                                         es = pPSV->setPlotRotation(m采用pSetting, AcDbPlotSettings::k0degrees);                                                                               
  47.                                         es = pPSV->setCurrentStyleSheet(m采用pSetting, L"acad.ctb");
  48.                                                                                
  49.                                         //全部配置名称
  50.                                         /*AcArray<const ACHAR*> mMediaList;
  51.                                         pPSV->plotDeviceList(mMediaList);
  52.                                         std::vector<CString> arrMediaNames;
  53.                                         pPSV->canonicalMediaNameList(m采用pSetting, mMediaList);
  54.                                         for (int nIndex = 0; nIndex < mMediaList.length(); ++nIndex)
  55.                                                 arrMediaNames.push采用back(mMediaList[nIndex]);*/
  56.                                                 // Specify that we want our plot centered by AutoCAD...
  57.                                         es = pPSV->setPlotCentered(m采用pSetting, true);
  58.                                         es = pPSV->setUseStandardScale(m采用pSetting, FALSE);
  59.                                                                                
  60.                                         pPSV->setZoomToPaperOnUpdate(m采用pSetting, true);
  61.                                         plotInfo.setOverrideSettings(m采用pSetting);
  62.                                         // 验证这些设置。
  63.                                         AcPlPlotInfoValidator validator;
  64.                                         validator.setMediaMatchingPolicy(AcPlPlotInfoValidator::kMatchEnabled);
  65.                                         es = validator.validate(plotInfo);
  66.                                         AcPlPlotEngine* pEngine = NULL;
  67.                                         if (Acad::eOk == AcPlPlotFactory::createPublishEngine(pEngine))
  68.                                         {
  69.                                                 // Here is the progress dialog for the current plot process...
  70.                                                 AcPlPlotProgressDialog* pPlotProgDlg = acplCreatePlotProgressDialog(acedGetAcadFrame()->m采用hWnd, false, 1);
  71.                                                 pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kDialogTitle, 采用T("Plot API Progress"));
  72.                                                 pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kCancelJobBtnMsg, 采用T("Cancel Job"));
  73.                                                 pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kCancelSheetBtnMsg, 采用T("Cancel Sheet"));
  74.                                                 pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kSheetSetProgressCaption, 采用T("Job Progress"));
  75.                                                 pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kSheetProgressCaption, 采用T("Sheet Progress"));
  76.                                                 pPlotProgDlg->setPlotProgressRange(0, 100);
  77.                                                 pPlotProgDlg->onBeginPlot();
  78.                                                 pPlotProgDlg->setIsVisible(true);
  79.                                                 es = pEngine->beginPlot(pPlotProgDlg);
  80.                                                 AcPlPlotPageInfo pageInfo;
  81.                                                 // Used to describe how the plot is to be made.
  82.                                                 //AcPlPlotInfo plotInfo;
  83.                                                 // First, set the layout to the specified layout
  84.                                                 // (which is the current layout in this sample).
  85.                                                 //plotInfo.setLayout(layoutId);// This is required.
  86.                                                 // Now, override the layout settings with the plot settings
  87.                                                 // we have been populating.
  88.                                                 //plotInfo.setOverrideSettings(pPlotSettings);
  89.                                                 // We need to validate these settings.
  90.                                                 //AcPlPlotInfoValidator validator;
  91.                                                 //validator.setMediaMatchingPolicy(AcPlPlotInfoValidator::kMatchEnabled);
  92.                                                 //es = validator.validate(plotInfo);
  93.                                                 // Begin document.  The version we call is dependent
  94.                                                 // on the plot-to-file status.
  95.                                                 //const TCHAR* szDocName = acDocManager->curDocument()->fileName();
  96.                                                 CString szDocName = acDocManager->curDocument()->fileName();
  97.                                                 CString outPutFilePath = szDocName;
  98.                                                 int n = outPutFilePath.ReverseFind('.');
  99.                                                 outPutFilePath = outPutFilePath.Left(n);
  100.                                                 //outPutFilePath +=  ".jpg";
  101.                                                 outPutFilePath += suffix;
  102.                                                 //if (m采用bPlotToFile)
  103.                                                 es = pEngine->beginDocument(plotInfo, szDocName, NULL, 1, true, outPutFilePath);
  104.                                                 //else
  105.                                                         //es = pEngine->beginDocument(plotInfo, szDocName);
  106.                                                 // Follow through sending commands to the engine,
  107.                                                 // and notifications to the progress dialog.
  108.                                                 pPlotProgDlg->onBeginSheet();
  109.                                                 pPlotProgDlg->setSheetProgressRange(0, 100);
  110.                                                 pPlotProgDlg->setSheetProgressPos(0);
  111.                                                 es = pEngine->beginPage(pageInfo, plotInfo, true);
  112.                                                 es = pEngine->beginGenerateGraphics();
  113.                                                 es = pEngine->endGenerateGraphics();
  114.                                                 es = pEngine->endPage();
  115.                                                 pPlotProgDlg->setSheetProgressPos(100);
  116.                                                 pPlotProgDlg->onEndSheet();
  117.                                                 pPlotProgDlg->setPlotProgressPos(100);
  118.                                                 es = pEngine->endDocument();
  119.                                                 es = pEngine->endPlot();
  120.                                                 // Destroy the engine
  121.                                                 pEngine->destroy();
  122.                                                 pEngine = NULL;
  123.                                                 // and the progress dialog.
  124.                                                 pPlotProgDlg->destroy();
  125.                                         }
  126.                                         else
  127.                                         {
  128.                                                 // Ensure the engine is not already busy...
  129.                                                 AfxMessageBox(L"Plot Engine is Busy...");
  130.                                         }
  131.                                         pLayout->close();
  132.                                         m采用pSetting->close();
  133.                                 }
  134. void CMyPalette1ChildDlg::OnBnClickedButton15()
  135. {
  136.         // TODO: 在此添加控件通知处理程序代码
  137.         AcApDocument* pDoc = acDocManager->curDocument();
  138.         if (pDoc == nullptr)
  139.         {
  140.                 return;
  141.         }
  142.         string filePath = CW2A(pDoc->fileName());
  143.         //LPITEMIDLIST pidl=ParsePidlFromPath(filePath);
  144.         ACHAR szPath[MAX采用PATH];     //存放选择的目录路径
  145.         string path;
  146.         ZeroMemory(szPath, sizeof(szPath));
  147.         BROWSEINFO bi;
  148.         bi.hwndOwner = m采用hWnd;// 父窗口句柄
  149.         bi.pidlRoot = CSIDL采用DESKTOP;// 要显示的文件夾的根(Root) CSIDL采用DESKTOP
  150.         bi.pszDisplayName = szPath;// 保存被选取的文件夾路径的缓冲区
  151.         bi.lpszTitle = L"请选择文件夹的目录:";// 显示位于对话框左上部的标题
  152.         bi.ulFlags = BIF采用RETURNONLYFSDIRS;// 指定对话框的外观和功能的標志
  153.         bi.lpfn = NULL;// 处理事件的回调函数
  154.         bi.lParam = 0;// 应用程序传给回调函数的参数
  155.         bi.iImage = 0;// 保存被选取的文件夾的图片索引
  156.         //弹出选择目录对话框
  157.         LPITEMIDLIST lp = SHBrowseForFolder(&bi);
  158.         if (lp == NULL)
  159.         {
  160.                 AfxMessageBox(L"无效的目录,请重新选择");
  161.                 return;
  162.         }
  163.         SHGetPathFromIDList(lp, szPath);
  164.         LPMALLOC lpMalloc;
  165.         if (FAILED(SHGetMalloc(&lpMalloc)))
  166.                 return;
  167.         lpMalloc->Free(lp);
  168.         lpMalloc->Release();
  169.         path = CW2A(szPath);
  170.         std::vector<std::string> files;
  171.         CGeometryOper::getAllFiles(path, files, "", ".dwg");
  172.         files.erase(std::remove(files.begin(), files.end(), filePath), files.end());
  173.         //acDocManager->lockDocument(pDoc, AcAp::kWrite, NULL, NULL, true);
  174.         //AcTransaction* pTrans = actrTransactionManager->startTransaction();
  175.         Acad::ErrorStatus es;
  176.         AutoCAD::IAcadApplication* pAcad = nullptr;
  177.         HRESULT hr = NOERROR;
  178.         LPDISPATCH pAcadDisp = acedGetIDispatch(TRUE);
  179.         hr = pAcadDisp->QueryInterface(AutoCAD::IID采用IAcadApplication, (void**)&pAcad);
  180.         if (SUCCEEDED(hr)) {
  181.                 pAcadDisp->Release();
  182.         }
  183.         /*AutoCAD::IAcadPreferences* pPreferences;
  184.         AutoCAD::IAcadPreferencesFiles* pPreferFiles;
  185.         BSTR Path;
  186.         pAcad->get采用Preferences(&pPreferences);
  187.         pPreferences->get采用Files(&pPreferFiles);
  188.         pPreferFiles->get采用PrinterConfigPath(&Path);
  189.         CString CPath = Path;
  190.         SysFreeString(Path);
  191.         pPreferFiles->Release();
  192.         pPreferences->Release();*/
  193.         CString suffix = ".jpg";
  194.         acedInitGet(NULL, 采用T("J P"));
  195.         ACHAR szKeyword[128] = { 0 };
  196.         int nRet = acedGetKword(采用T("\n请输入关键字确定打印方式[(J)JPG/(P)PDF]<J>:"), szKeyword);
  197.         if (RTCAN == nRet)
  198.         {
  199.                 acutPrintf(采用T("\n取消打印"));
  200.                 return;
  201.         }
  202.         else if (RTNONE == nRet)
  203.         {
  204.                 //acutPrintf(采用T("\n使用默认值"));
  205.         }
  206.         else if (RTNORM == nRet)
  207.         {
  208.                 if (采用tcscmp(szKeyword, 采用T("J")) == 0)
  209.                 {
  210.                 }
  211.                 else if (采用tcscmp(szKeyword, 采用T("P")) == 0)
  212.                 {
  213.                         suffix = ".pdf";
  214.                 }
  215.         }
  216.         for (int i = 0; i < files.size(); i++)
  217.         {
  218.                 CString sfile = files[i].c采用str();
  219.                 es = acDocManager->appContextOpenDocument(sfile);
  220.                 if (eOk == es)
  221.                 {
  222.                         AcApDocument* tmpDoc = acDocManager->curDocument();
  223.                         AcDbDatabase* pDb = tmpDoc->database();
  224.                         pDb->closeInput();
  225.                         pAcad->ZoomExtents();
  226.                         pDb->updateExt(TRUE);
  227.                         acDocManager->lockDocument(tmpDoc, AcAp::kRead, NULL, NULL, true);
  228.                         AcTransactionManager* pTrans = tmpDoc->transactionManager();
  229.                         //tmpDoc->pushDbmod();
  230.                         CString bl;
  231.                         AcDbExtents extent;
  232.                         //获得模型空间的块表记录
  233.                         AcDbBlockTableRecord* pBlkTblRcd = NULL;
  234.                         AcDbBlockTableRecordPointer pBlkRcd(ACDB采用MODEL采用SPACE, pDb, AcDb::kForRead);
  235.                         AcDbBlockTableRecordIterator* iter;
  236.                         extent.addBlockExt(pBlkRcd);
  237.                         pBlkRcd->newIterator(iter);
  238.                         for (iter->start(); !iter->done(); iter->step())
  239.                         {
  240.                                 AcDbObjectId id;
  241.                                 es = iter->getEntityId(id);
  242.                                 if (es != Acad::eOk || !id.isValid())
  243.                                         continue;
  244.                                 // TODO 处理实体
  245.                                 AcDbObjectPointer<AcDbEntity> jzdEnt(id, AcDb::kForRead);
  246.                                 if (Acad::eOk != jzdEnt.openStatus())
  247.                                 {
  248.                                         continue;
  249.                                 }
  250.                                 if (jzdEnt->isKindOf(AcDbText::desc())) {
  251.                                         AcDbText* pText = AcDbText::cast(jzdEnt);
  252.                                         CString text = pText->textString();
  253.                                         if (text.Find(L"1:") == 0 || text.Find(L"比例尺 1:") == 0)
  254.                                         {
  255.                                                 int pos = text.Find(L":");
  256.                                                 bl = text.Mid(pos + 1);
  257.                                                 break;
  258.                                         }
  259.                                 }
  260.                                 else if (jzdEnt->isKindOf(AcDbBlockReference::desc()))
  261.                                 {
  262.                                         AcDbBlockReference* pBlkRef = AcDbBlockReference::cast(jzdEnt);
  263.                                         AcDbObjectId idBlkDef = pBlkRef->blockTableRecord();
  264.                                         AcDbBlockTableRecordPointer pBlkTblRcdp(idBlkDef, AcDb::kForRead);
  265.                                         if (Acad::eOk != pBlkTblRcdp.openStatus()) continue;
  266.                                         ACHAR* name;
  267.                                         pBlkTblRcdp->getName(name);
  268.                                         CString blockname = name;
  269.                                         if (name != NULL)acutDelString(name);
  270.                                         if (blockname.MakeLower().Find(L"gddjtk") == 0)
  271.                                         {
  272.                                                 AcDbVoidPtrArray entitySet;
  273.                                                 es = pBlkRef->explode(entitySet);
  274.                                                 if (es != Acad::eOk)
  275.                                                 {
  276.                                                         acutPrintf(采用T("\n炸开块失败"));
  277.                                                 }
  278.                                                 else
  279.                                                 {
  280.                                                         for (int i = 0; i < entitySet.length(); i++)
  281.                                                         {
  282.                                                                 AcDbEntity* pEnty = (AcDbEntity*)entitySet.at(i);
  283.                                                                 if (pEnty != NULL)
  284.                                                                 {
  285.                                                                         if (pEnty->isKindOf(AcDbText::desc())) {
  286.                                                                                 AcDbText* pText = AcDbText::cast(pEnty);
  287.                                                                                 CString text = pText->textString();
  288.                                                                                 if (text.Find(L"1:") == 0 || text.Find(L"比例尺 1:") == 0)
  289.                                                                                 {
  290.                                                                                         int pos = text.Find(L":");
  291.                                                                                         bl = text.Mid(pos + 1);
  292.                                                                                         pEnty->close();
  293.                                                                                         break;
  294.                                                                                 }
  295.                                                                         }
  296.                                                                         pEnty->close();
  297.                                                                 }
  298.                                                         }
  299.                                                 }
  300.                                                 entitySet.removeAll();
  301.                                                 entitySet.setLogicalLength(0);
  302.                                                 break;
  303.                                         }
  304.                                         //判断指定的块表记录是否包含属性定义
  305.                                         if (!pBlkTblRcdp->hasAttributeDefinitions())
  306.                                         {
  307.                                                 continue;
  308.                                         }
  309.                                         //直接获取图块的属性迭代器
  310.                                         AcDbObjectIterator* pIter = pBlkRef->attributeIterator();
  311.                                         //无论图块是否有属性,迭代器一般不会为NULL
  312.                                         if (NULL == pIter)
  313.                                         {
  314.                                                 acutPrintf(采用T("\n获取属性迭代器失败!"));
  315.                                                 continue;
  316.                                         }
  317.                                         //设置判断是否能获取到属性
  318.                                         for (pIter->start(); !pIter->done(); pIter->step())
  319.                                         {
  320.                                                 AcDbObjectId attribId = pIter->objectId();
  321.                                                 AcDbObjectPointer<AcDbAttribute> pAttrib(attribId, AcDb::kForRead);
  322.                                                 if (Acad::eOk != pAttrib.openStatus())
  323.                                                 {
  324.                                                         continue;
  325.                                                 }
  326.                                                 //方式一
  327.                                                 CString strTag;
  328.                                                 strTag = pAttrib->tag();
  329.                                                 if (strTag == "比例尺" || strTag == "BLC")
  330.                                                 {
  331.                                                         CString strValue;
  332.                                                         strValue = pAttrib->textString();
  333.                                                         int pos = strValue.Find(L":");
  334.                                                         bl = strValue.Mid(pos + 1);
  335.                                                         break;
  336.                                                 }
  337.                                                 //方式二
  338.                                                 /*ACHAR* szTag = pAttrib->tag();
  339.                                                 ACHAR* szValue = pAttrib->textString();
  340.                                                 if (szTag != NULL && szValue != NULL)
  341.                                                 {
  342.                                                         acutPrintf(采用T("\n属性名: %s 属性值: %s"), szTag, szValue);
  343.                                                 }
  344.                                                 else
  345.                                                 {
  346.                                                         acutPrintf(采用T("\n获取属性值失败!"), szTag, szValue);
  347.                                                 }
  348.                                                 if (szTag != NULL)
  349.                                                 {
  350.                                                         acutDelString(szTag);
  351.                                                 }
  352.                                                 if (szValue != NULL)
  353.                                                 {
  354.                                                         acutDelString(szValue);
  355.                                                 }*/
  356.                                         }
  357.                                         //释放迭代器
  358.                                         delete pIter;
  359.                                         if (!bl.IsEmpty())
  360.                                         {
  361.                                                 break;
  362.                                         }
  363.                                 }
  364.                         }
  365.                         // 释放迭代器对象,关闭快表记录
  366.                         delete iter;
  367.                         pBlkRcd.release(pBlkTblRcd);//智能指针变普通指针
  368.                         pBlkTblRcd->close();
  369.                         acDocManager->unlockDocument(tmpDoc);
  370.                         pTrans->abortTransaction();
  371.                         //pDb->saveAs(sfile);
  372.                         //pDb->save();
  373.                         //tmpDoc->formatForSave();
  374.                         //tmpDoc->popDbmod();
  375.                         if (!bl.IsEmpty())
  376.                         {
  377.                                 struct resbuf rbBackGroundPlot;
  378.                                 acedGetVar(采用T("BACKGROUNDPLOT"), &rbBackGroundPlot);
  379.                                 if (rbBackGroundPlot.restype == RTSHORT && rbBackGroundPlot.resval.rint != 0)
  380.                                 {
  381.                                         int nOld = rbBackGroundPlot.resval.rint;
  382.                                         rbBackGroundPlot.resval.rint = 0;
  383.                                         acedSetVar(采用T("BACKGROUNDPLOT"), &rbBackGroundPlot);
  384.                                         rbBackGroundPlot.resval.rint = nOld;
  385.                                 }
  386.                                 AcDbLayoutManager* pLayMan = acdbHostApplicationServices()->layoutManager();
  387.                                 if (NULL != pLayMan)
  388.                                 {
  389.                                         //get the active layout
  390.                                         AcDbLayout* pLayout = pLayMan->findLayoutNamed(pLayMan->findActiveLayout(TRUE), TRUE);//获得当前布局
  391.                                         AcDbObjectId  m采用layoutId = pLayout->objectId();//获得布局的Id
  392.                                         AcPlPlotInfo plotInfo;
  393.                                         AcDbPlotSettingsValidator* pPSV = acdbHostApplicationServices()->plotSettingsValidator();
  394.                                         plotInfo.setLayout(pLayout->objectId());//必须设置
  395.                                         AcDbPlotSettings* m采用pSetting = new AcDbPlotSettings(pLayout->modelType());
  396.                                         m采用pSetting->copyFrom(pLayout);
  397.                                         pPSV->refreshLists(m采用pSetting);
  398.                                         m采用pSetting->setShadePlot(AcDbPlotSettings::kAsDisplayed);
  399.                                         m采用pSetting->setShadePlotResLevel(AcDbPlotSettings::kNormal);
  400.                                         m采用pSetting->setScaleLineweights(false);
  401.                                         m采用pSetting->setPrintLineweights(true);
  402.                                         m采用pSetting->setPlotTransparency(false);
  403.                                         m采用pSetting->setPlotPlotStyles(true);
  404.                                         m采用pSetting->setDrawViewportsFirst(true);
  405.                                         m采用pSetting->setShowPlotStyles(true);
  406.                                         if (suffix == ".pdf")
  407.                                         {
  408.                                                 es = pPSV->setPlotCfgName(m采用pSetting, L"DWG to PDF.pc3", L"ISO采用FULL采用BLEED采用A4采用(210.00采用x采用297.00采用MM)");//"ISO采用FULL采用BLEED采用A4采用(297.00采用x采用210.00采用MM)"
  409.                                                 es = pPSV->setPlotPaperUnits(m采用pSetting, AcDbPlotSettings::kMillimeters);
  410.                                                 pPSV->setPlotWindowArea(m采用pSetting, extent.minPoint().x, extent.minPoint().y, extent.maxPoint().x, extent.maxPoint().y);
  411.                                                 pPSV->setPlotOrigin(m采用pSetting, (extent.minPoint().x + extent.maxPoint().x) / 2, (extent.minPoint().y + extent.maxPoint().y) / 2);
  412.                                                 pPSV->setPlotType(m采用pSetting, AcDbPlotSettings::kWindow);
  413.                                                 es = pPSV->setCustomPrintScale(m采用pSetting, 1.0, 采用ttof(bl) / 1000.0);//PDF
  414.                                         }
  415.                                         else
  416.                                         {
  417.                                                 es = pPSV->setPlotCfgName(m采用pSetting, L"CASS采用RASTER采用JPG.pc3", L"UserDefinedRaster (1200.00 x 1600.00像素)");//"UserDefinedRaster (1782.00 x 1260.00像素)"
  418.                                                 es = pPSV->setPlotPaperUnits(m采用pSetting, AcDbPlotSettings::kPixels);
  419.                                                 es = pPSV->setPlotType(m采用pSetting, AcDbPlotSettings::kExtents);
  420.                                                 es = pPSV->setCustomPrintScale(m采用pSetting, 1.0, 采用ttof(bl) / 18000.0);//JPG
  421.                                         }
  422.                                         es = pPSV->setPlotRotation(m采用pSetting, AcDbPlotSettings::k0degrees);
  423.                                         es = pPSV->setCurrentStyleSheet(m采用pSetting, L"acad.ctb");
  424.                                         //全部配置名称
  425.                                         /*AcArray<const ACHAR*> mMediaList;
  426.                                         pPSV->plotDeviceList(mMediaList);
  427.                                         std::vector<CString> arrMediaNames;
  428.                                         pPSV->canonicalMediaNameList(m采用pSetting, mMediaList);
  429.                                         for (int nIndex = 0; nIndex < mMediaList.length(); ++nIndex)
  430.                                                 arrMediaNames.push采用back(mMediaList[nIndex]);*/
  431.                                                 // Specify that we want our plot centered by AutoCAD...
  432.                                         es = pPSV->setPlotCentered(m采用pSetting, true);
  433.                                         es = pPSV->setUseStandardScale(m采用pSetting, FALSE);
  434.                                         pPSV->setZoomToPaperOnUpdate(m采用pSetting, true);
  435.                                         plotInfo.setOverrideSettings(m采用pSetting);
  436.                                         // 验证这些设置。
  437.                                         AcPlPlotInfoValidator validator;
  438.                                         validator.setMediaMatchingPolicy(AcPlPlotInfoValidator::kMatchEnabled);
  439.                                         es = validator.validate(plotInfo);
  440.                                         AcPlPlotEngine* pEngine = NULL;
  441.                                         if (Acad::eOk == AcPlPlotFactory::createPublishEngine(pEngine))
  442.                                         {
  443.                                                 // Here is the progress dialog for the current plot process...
  444.                                                 AcPlPlotProgressDialog* pPlotProgDlg = acplCreatePlotProgressDialog(acedGetAcadFrame()->m采用hWnd, false, 1);
  445.                                                 pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kDialogTitle, 采用T("Plot API Progress"));
  446.                                                 pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kCancelJobBtnMsg, 采用T("Cancel Job"));
  447.                                                 pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kCancelSheetBtnMsg, 采用T("Cancel Sheet"));
  448.                                                 pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kSheetSetProgressCaption, 采用T("Job Progress"));
  449.                                                 pPlotProgDlg->setPlotMsgString(AcPlPlotProgressDialog::kSheetProgressCaption, 采用T("Sheet Progress"));
  450.                                                 pPlotProgDlg->setPlotProgressRange(0, 100);
  451.                                                 pPlotProgDlg->onBeginPlot();
  452.                                                 pPlotProgDlg->setIsVisible(true);
  453.                                                 es = pEngine->beginPlot(pPlotProgDlg);
  454.                                                 AcPlPlotPageInfo pageInfo;
  455.                                                 // Used to describe how the plot is to be made.
  456.                                                 //AcPlPlotInfo plotInfo;
  457.                                                 // First, set the layout to the specified layout
  458.                                                 // (which is the current layout in this sample).
  459.                                                 //plotInfo.setLayout(layoutId);// This is required.
  460.                                                 // Now, override the layout settings with the plot settings
  461.                                                 // we have been populating.
  462.                                                 //plotInfo.setOverrideSettings(pPlotSettings);
  463.                                                 // We need to validate these settings.
  464.                                                 //AcPlPlotInfoValidator validator;
  465.                                                 //validator.setMediaMatchingPolicy(AcPlPlotInfoValidator::kMatchEnabled);
  466.                                                 //es = validator.validate(plotInfo);
  467.                                                 // Begin document.  The version we call is dependent
  468.                                                 // on the plot-to-file status.
  469.                                                 //const TCHAR* szDocName = acDocManager->curDocument()->fileName();
  470.                                                 CString szDocName = acDocManager->curDocument()->fileName();
  471.                                                 CString outPutFilePath = szDocName;
  472.                                                 int n = outPutFilePath.ReverseFind('.');
  473.                                                 outPutFilePath = outPutFilePath.Left(n);
  474.                                                 //outPutFilePath +=  ".jpg";
  475.                                                 outPutFilePath += suffix;
  476.                                                 //if (m采用bPlotToFile)
  477.                                                 es = pEngine->beginDocument(plotInfo, szDocName, NULL, 1, true, outPutFilePath);
  478.                                                 //else
  479.                                                         //es = pEngine->beginDocument(plotInfo, szDocName);
  480.                                                 // Follow through sending commands to the engine,
  481.                                                 // and notifications to the progress dialog.
  482.                                                 pPlotProgDlg->onBeginSheet();
  483.                                                 pPlotProgDlg->setSheetProgressRange(0, 100);
  484.                                                 pPlotProgDlg->setSheetProgressPos(0);
  485.                                                 es = pEngine->beginPage(pageInfo, plotInfo, true);
  486.                                                 es = pEngine->beginGenerateGraphics();
  487.                                                 es = pEngine->endGenerateGraphics();
  488.                                                 es = pEngine->endPage();
  489.                                                 pPlotProgDlg->setSheetProgressPos(100);
  490.                                                 pPlotProgDlg->onEndSheet();
  491.                                                 pPlotProgDlg->setPlotProgressPos(100);
  492.                                                 es = pEngine->endDocument();
  493.                                                 es = pEngine->endPlot();
  494.                                                 // Destroy the engine
  495.                                                 pEngine->destroy();
  496.                                                 pEngine = NULL;
  497.                                                 // and the progress dialog.
  498.                                                 pPlotProgDlg->destroy();
  499.                                         }
  500.                                         else
  501.                                         {
  502.                                                 // Ensure the engine is not already busy...
  503.                                                 AfxMessageBox(L"Plot Engine is Busy...");
  504.                                         }
  505.                                         pLayout->close();
  506.                                         m采用pSetting->close();
  507.                                 }
  508.                         }
  509.                         acDocManager->appContextCloseDocument(tmpDoc);
  510.                         tmpDoc = nullptr;
  511.                 }
  512.                 sfile.ReleaseBuffer();
  513.         }
  514.         if (SUCCEEDED(hr)) {
  515.                 pAcad->Release();
  516.         }
  517.         files.clear();
  518.         //actrTransactionManager->abortTransaction();
  519.         //acDocManager->unlockDocument(pDoc);
  520.         acutPrintf(采用T("\n完成!\n"));
  521. }
  522. void CGeometryOper::getAllFiles(const std::string& path, std::vector<std::string>& files, const string& fileName, const string& fileType, bool recursive)
  523. {
  524.         //文件句柄
  525.         long long hFile = 0;
  526.         //文件信息
  527.         struct 采用finddata采用t fileinfo;
  528.         string p;
  529.         if ((hFile = 采用findfirst(p.assign(path).append("\\*").c采用str(), &fileinfo)) != -1) {
  530.                 do {
  531.                         if ((fileinfo.attrib & 采用A采用SUBDIR)) {  //比较文件类型是否是文件夹
  532.                                 if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) {
  533.                                         //files.push采用back(p.assign(path).append("\").append(fileinfo.name));
  534.                                         //递归搜索
  535.                                         if (recursive)
  536.                                         {
  537.                                                 getAllFiles(p.assign(path).append("\").append(fileinfo.name), files, fileName, fileType);
  538.                                         }
  539.                                 }
  540.                         }
  541.                         else {
  542.                                 string name = fileinfo.name;
  543.                                 string ImgNameNoTag = name.substr(0, name.rfind("."));//获取不带后缀的文件名
  544.                                 string ImgNameTag = name.substr(name.rfind("."), name.length());//获取后缀名
  545.                                 if (fileType.empty())
  546.                                 {
  547.                                         if (fileName.empty())
  548.                                         {
  549.                                                 files.push采用back(p.assign(path).append("\").append(fileinfo.name));
  550.                                         }
  551.                                         else
  552.                                         {
  553.                                                 if (ImgNameNoTag.find(fileName) != string::npos)
  554.                                                 {
  555.                                                         files.push采用back(p.assign(path).append("\").append(fileinfo.name));
  556.                                                 }
  557.                                         }
  558.                                 }
  559.                                 else
  560.                                 {
  561.                                         transform(ImgNameTag.begin(), ImgNameTag.end(), ImgNameTag.begin(), ::tolower);
  562.                                         if (ImgNameTag.find(fileType) != string::npos)
  563.                                         {
  564.                                                 if (fileName.empty())
  565.                                                 {
  566.                                                         files.push采用back(p.assign(path).append("\").append(fileinfo.name));
  567.                                                 }
  568.                                                 else
  569.                                                 {
  570.                                                         if (ImgNameNoTag.find(fileName) != string::npos)
  571.                                                         {
  572.                                                                 files.push采用back(p.assign(path).append("\").append(fileinfo.name));
  573.                                                         }
  574.                                                 }
  575.                                         }
  576.                                 }
  577.                         }
  578.                 } while (采用findnext(hFile, &fileinfo) == 0);  //寻找下一个,成功返回0,否则-1
  579.                 采用findclose(hFile);
  580.         }
  581. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2025-1-6 15:08 , Processed in 0.124346 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表