Message 1 of 8
Plot pagelayout error ,cad2016 is error,cad2018 and later is right
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I want plot from side database. cad2018、cad2019 plot ;but cad2016 error. any one can help me? this is very important for me ,please help me,thanks.
Document acDoc = AcApplication.DocumentManager.MdiActiveDocument;
var fileName = @"E:\tadi\plottest.dwg";
using (DocumentLock acLckDoc = acDoc.LockDocument())
{
//
Database acDb = new Database(false, false);
acDb.ReadDwgFile(fileName, FileOpenMode.OpenForReadAndAllShare, true, null);
Database acDbSave = HostApplicationServices.WorkingDatabase;
HostApplicationServices.WorkingDatabase = acDb;
using (Transaction acTrans = acDb.TransactionManager.StartTransaction())
{
string handle = "64B";
//
long lng = Convert.ToInt64(handle, 16);
BlockReference acBrf = acTrans.GetObject(acDb.GetObjectId(false, new Handle(lng), 0), OpenMode.ForRead) as BlockReference;
//
BlockTableRecord acBlkTblRec = acTrans.GetObject(acBrf.OwnerId, OpenMode.ForRead) as BlockTableRecord;
//
Layout acLayout = acTrans.GetObject(acBlkTblRec.LayoutId, OpenMode.ForRead) as Layout;
//
LayoutManager.Current.CurrentLayout = acLayout.LayoutName;
//
PlotInfo acPlInfo = new PlotInfo();
acPlInfo.Layout = acLayout.ObjectId;
//
PlotSettings acPlSet = new PlotSettings(acLayout.ModelType);
acPlSet.CopyFrom(acLayout);
//
PlotSettingsValidator acPlSetVdr = PlotSettingsValidator.Current;
//
acPlSetVdr.SetPlotType(acPlSet,
Autodesk.AutoCAD.DatabaseServices.PlotType.Extents);
//
acPlSetVdr.SetUseStandardScale(acPlSet, true);
acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.ScaleToFit);
//
acPlSetVdr.SetPlotCentered(acPlSet, true);
//
acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWG To PDF.pc3", "ANSI_A_(8.50_x_11.00_Inches)");
acPlInfo.OverrideSettings = acPlSet;
//
PlotInfoValidator acPlInfoVdr = new PlotInfoValidator();
acPlInfoVdr.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;
acPlInfoVdr.Validate(acPlInfo);
//
if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting)
{
using (PlotEngine acPlEng = PlotFactory.CreatePublishEngine())
{
//
PlotProgressDialog acPlProgDlg = new PlotProgressDialog(false,
1,
true);
using (acPlProgDlg)
{
//
acPlProgDlg.set_PlotMsgString(PlotMessageIndex.DialogTitle,
"Plot Progress");
acPlProgDlg.set_PlotMsgString(PlotMessageIndex.CancelJobButtonMessage,
"Cancel Job");
acPlProgDlg.set_PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage,
"Cancel Sheet");
acPlProgDlg.set_PlotMsgString(PlotMessageIndex.SheetSetProgressCaption,
"Sheet Set Progress");
acPlProgDlg.set_PlotMsgString(PlotMessageIndex.SheetProgressCaption,
"Sheet Progress");
//
acPlProgDlg.LowerPlotProgressRange = 0;
acPlProgDlg.UpperPlotProgressRange = 100;
acPlProgDlg.PlotProgressPos = 0;
//
acPlProgDlg.OnBeginPlot();
acPlProgDlg.IsVisible = true;
//
acPlEng.BeginPlot(acPlProgDlg, null);
//
acPlEng.BeginDocument(acPlInfo,
acDoc.Name,
null,
1,
true,
"e:\\myplot");
//
acPlProgDlg.set_PlotMsgString(PlotMessageIndex.Status,
"Plotting: " + acDoc.Name + " - " +
acLayout.LayoutName);
//
acPlProgDlg.OnBeginSheet();
acPlProgDlg.LowerSheetProgressRange = 0;
acPlProgDlg.UpperSheetProgressRange = 100;
acPlProgDlg.SheetProgressPos = 0;
//
PlotPageInfo acPlPageInfo = new PlotPageInfo();
acPlEng.BeginPage(acPlPageInfo,
acPlInfo,
true,
null);
acPlEng.BeginGenerateGraphics(null); // cad2016 error here
acPlEng.EndGenerateGraphics(null);
//
acPlEng.EndPage(null);
acPlProgDlg.SheetProgressPos = 100;
acPlProgDlg.OnEndSheet();
//
acPlEng.EndDocument(null);
//
acPlProgDlg.PlotProgressPos = 100;
acPlProgDlg.OnEndPlot();
acPlEng.EndPlot(null);
}
}
}
}
HostApplicationServices.WorkingDatabase = acDbSave;
acDb.Dispose();
}

