天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 177|回复: 0

ObjectARX CAD批量打印

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 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. }
    复制代码

     

     

     

     

    ObjectARX CAD批量打印
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 09:29 , Processed in 0.137743 second(s), 26 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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