从模型空间绘制 (.NET)
通常,在打印大型图形(如楼层平面图)时,可以指定一个比例,以将实际图形单位转换为绘制的英寸或毫米。但是,从模型空间打印时,如果未指定设置,则使用的默认值包括打印到系统打印机、打印当前显示、缩放以适合、0 旋转和 0,0 偏移。 您可以使用对象修改要打印的布局的打印设置,然后在将对象传递给对象之前使用对象验证打印设置。定义对象后,可以使用该对象来打印布局或图纸。PlotSettingsPlotSettingsValidatorPlotSettingsPlotInfoPlotInfoPlotEngine 绘制当前布局本示例将当前布局的范围打印到名为 MyPlot 的 DWF 文件。 VB.NETImports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.PlottingServices ' Plots the current layout to a DWF file <CommandMethod("PlotLayout")> _ Public Shared Sub PlotLayout() ' Get the current document and database, and start a transaction Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim acCurDb As Database = acDoc.Database Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() ' Reference the Layout Manager Dim acLayoutMgr As LayoutManager = LayoutManager.Current ' Get the current layout and output its name in the Command Line window Dim acLayout As Layout = _ acTrans.GetObject(acLayoutMgr.GetLayoutId(acLayoutMgr.CurrentLayout), _ OpenMode.ForRead) ' Get the PlotInfo from the layout Using acPlInfo As PlotInfo = New PlotInfo() acPlInfo.Layout = acLayout.ObjectId ' Get a copy of the PlotSettings from the layout Using acPlSet As PlotSettings = New PlotSettings(acLayout.ModelType) acPlSet.CopyFrom(acLayout) ' Update the PlotSettings object Dim acPlSetVdr As PlotSettingsValidator = _ PlotSettingsValidator.Current ' Set the plot type acPlSetVdr.SetPlotType(acPlSet, _ DatabaseServices.PlotType.Extents) ' Set the plot scale acPlSetVdr.SetUseStandardScale(acPlSet, True) acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.ScaleToFit) ' Center the plot acPlSetVdr.SetPlotCentered(acPlSet, True) ' Set the plot device to use acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWF6 ePlot.pc3", _ "ANSI_A_(8.50_x_11.00_Inches)") ' Set the plot info as an override since it will ' not be saved back to the layout acPlInfo.OverrideSettings = acPlSet ' Validate the plot info Using acPlInfoVdr As PlotInfoValidator = New PlotInfoValidator() acPlInfoVdr.MediaMatchingPolicy = MatchingPolicy.MatchEnabled acPlInfoVdr.Validate(acPlInfo) ' Check to see if a plot is already in progress If PlotFactory.ProcessPlotState = _ ProcessPlotState.NotPlotting Then Using acPlEng As PlotEngine = _ PlotFactory.CreatePublishEngine() ' Track the plot progress with a Progress dialog Using acPlProgDlg As PlotProgressDialog = _ New PlotProgressDialog(False, 1, True) Using (acPlProgDlg) ' Define the status messages to display ' when plotting starts acPlProgDlg.PlotMsgString( _ PlotMessageIndex.DialogTitle) = "Plot Progress" acPlProgDlg.PlotMsgString( _ PlotMessageIndex.CancelJobButtonMessage) = _ "Cancel Job" acPlProgDlg.PlotMsgString( _ PlotMessageIndex.CancelSheetButtonMessage) = _ "Cancel Sheet" acPlProgDlg.PlotMsgString( _ PlotMessageIndex.SheetSetProgressCaption) = _ "Sheet Set Progress" acPlProgDlg.PlotMsgString( _ PlotMessageIndex.SheetProgressCaption) = _ "Sheet Progress" ' Set the plot progress range acPlProgDlg.LowerPlotProgressRange = 0 acPlProgDlg.UpperPlotProgressRange = 100 acPlProgDlg.PlotProgressPos = 0 ' Display the Progress dialog acPlProgDlg.OnBeginPlot() acPlProgDlg.IsVisible = True ' Start to plot the layout acPlEng.BeginPlot(acPlProgDlg, Nothing) ' Define the plot output acPlEng.BeginDocument(acPlInfo, _ acDoc.Name, _ Nothing, _ 1, _ True, _ "c:\myplot") ' Display information about the current plot acPlProgDlg.PlotMsgString( _ PlotMessageIndex.Status) = _ "Plotting: " & acDoc.Name & _ " - " & acLayout.LayoutName ' Set the sheet progress range acPlProgDlg.OnBeginSheet() acPlProgDlg.LowerSheetProgressRange = 0 acPlProgDlg.UpperSheetProgressRange = 100 acPlProgDlg.SheetProgressPos = 0 ' Plot the first sheet/layout Using acPlPageInfo As PlotPageInfo = _ New PlotPageInfo() acPlEng.BeginPage(acPlPageInfo, _ acPlInfo, _ True, _ Nothing) End Using acPlEng.BeginGenerateGraphics(Nothing) acPlEng.EndGenerateGraphics(Nothing) ' Finish plotting the sheet/layout acPlEng.EndPage(Nothing) acPlProgDlg.SheetProgressPos = 100 acPlProgDlg.OnEndSheet() ' Finish plotting the document acPlEng.EndDocument(Nothing) ' Finish the plot acPlProgDlg.PlotProgressPos = 100 acPlProgDlg.OnEndPlot() acPlEng.EndPlot(Nothing) End Using End Using End Using End If End Using End Using End Using End Using End Sub C#using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.PlottingServices; // Plots the current layout to a DWF file [CommandMethod("PlotLayout")] public static void PlotLayout() { // Get the current document and database, and start a transaction Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Reference the Layout Manager LayoutManager acLayoutMgr = LayoutManager.Current; // Get the current layout and output its name in the Command Line window Layout acLayout = acTrans.GetObject(acLayoutMgr.GetLayoutId(acLayoutMgr.CurrentLayout), OpenMode.ForRead) as Layout; // Get the PlotInfo from the layout using (PlotInfo acPlInfo = new PlotInfo()) { acPlInfo.Layout = acLayout.ObjectId; // Get a copy of the PlotSettings from the layout using (PlotSettings acPlSet = new PlotSettings(acLayout.ModelType)) { acPlSet.CopyFrom(acLayout); // Update the PlotSettings object PlotSettingsValidator acPlSetVdr = PlotSettingsValidator.Current; // Set the plot type acPlSetVdr.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotType.Extents); // Set the plot scale acPlSetVdr.SetUseStandardScale(acPlSet, true); acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.ScaleToFit); // Center the plot acPlSetVdr.SetPlotCentered(acPlSet, true); // Set the plot device to use acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWF6 ePlot.pc3", "ANSI_A_(8.50_x_11.00_Inches)"); // Set the plot info as an override since it will // not be saved back to the layout acPlInfo.OverrideSettings = acPlSet; // Validate the plot info using (PlotInfoValidator acPlInfoVdr = new PlotInfoValidator()) { acPlInfoVdr.MediaMatchingPolicy = MatchingPolicy.MatchEnabled; acPlInfoVdr.Validate(acPlInfo); // Check to see if a plot is already in progress if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting) { using (PlotEngine acPlEng = PlotFactory.CreatePublishEngine()) { // Track the plot progress with a Progress dialog using (PlotProgressDialog acPlProgDlg = new PlotProgressDialog(false, 1, true)) { using ((acPlProgDlg)) { // Define the status messages to display // when plotting starts 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"); // Set the plot progress range acPlProgDlg.LowerPlotProgressRange = 0; acPlProgDlg.UpperPlotProgressRange = 100; acPlProgDlg.PlotProgressPos = 0; // Display the Progress dialog acPlProgDlg.OnBeginPlot(); acPlProgDlg.IsVisible = true; // Start to plot the layout acPlEng.BeginPlot(acPlProgDlg, null); // Define the plot output acPlEng.BeginDocument(acPlInfo, acDoc.Name, null, 1, true, "c:\\myplot"); // Display information about the current plot acPlProgDlg.set_PlotMsgString(PlotMessageIndex.Status, "Plotting: " + acDoc.Name + " - " + acLayout.LayoutName); // Set the sheet progress range acPlProgDlg.OnBeginSheet(); acPlProgDlg.LowerSheetProgressRange = 0; acPlProgDlg.UpperSheetProgressRange = 100; acPlProgDlg.SheetProgressPos = 0; // Plot the first sheet/layout using (PlotPageInfo acPlPageInfo = new PlotPageInfo()) { acPlEng.BeginPage(acPlPageInfo, acPlInfo, true, null); } acPlEng.BeginGenerateGraphics(null); acPlEng.EndGenerateGraphics(null); // Finish plotting the sheet/layout acPlEng.EndPage(null); acPlProgDlg.SheetProgressPos = 100; acPlProgDlg.OnEndSheet(); // Finish plotting the document acPlEng.EndDocument(null); // Finish the plot acPlProgDlg.PlotProgressPos = 100; acPlProgDlg.OnEndPlot(); acPlEng.EndPlot(null); } } } } } } } } } VBA/ActiveX 代码参考Sub PlotLayout() ' Set the extents and scale of the plot area ThisDrawing.ActiveLayout.PlotType = acExtents ThisDrawing.ActiveLayout.StandardScale = acScaleToFit ' Center the plot ThisDrawing.ActiveLayout.CenterPlot = True ' Set the plot device to use ThisDrawing.ActiveLayout.ConfigName = "DWF6 ePlot.pc3" ' Set the plot output size ThisDrawing.ActiveLayout.CanonicalMediaName = "ANSI_A_(8.50_x_11.00_Inches)" ' Set the number of copies to one ThisDrawing.Plot.NumberOfCopies = 1 ' Initiate the plot ThisDrawing.Plot.PlotToFile "c:\myplot" End Sub 可以使用该属性指定设备名称。可以通过指定 PC3 文件在方法中重写此设备。ConfigNamePlotToDevice 父主题: |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 12:50
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.