/// <summary> /// Implement this method as an external command for Revit. /// </summary> /// <param name="commandData">An object that is passed to the external application /// which contains data related to the command, /// such as the application object and active view.</param> /// <param name="message">A message that can be set by the external application /// which will be displayed if a failure or cancellation is returned by /// the external command.</param> /// <param name="elements">A set of elements to which the external application /// can add elements that are to be highlighted in case of failure or cancellation.</param> /// <returns>Return the status of the external command. /// A result of Succeeded means that the API external method functioned as expected. /// Cancelled can be used to signify that the user cancelled the external operation /// at some point. Failure should be returned if the application is unable to proceed with /// the operation.</returns> public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements) { Autodesk.Revit.DB.Transaction newTran = null; try { newTran = new Autodesk.Revit.DB.Transaction(commandData.Application.ActiveUIDocument.Document, "ViewPrinter"); newTran.Start(); PrintMgr pMgr = new PrintMgr(commandData); if (null == pMgr.InstalledPrinterNames) { PrintMgr.MyMessageBox("No installed printer, the external command can't work."); return(Autodesk.Revit.UI.Result.Cancelled); } using (PrintMgrForm pmDlg = new PrintMgrForm(pMgr)) { if (pmDlg.ShowDialog() != DialogResult.Cancel) { newTran.Commit(); return(Autodesk.Revit.UI.Result.Succeeded); } newTran.RollBack(); } } catch (Exception ex) { if (null != newTran) { newTran.RollBack(); } message = ex.ToString(); return(Autodesk.Revit.UI.Result.Failed); } return(Autodesk.Revit.UI.Result.Cancelled); }
void SetUpSizeAndPrint( Autodesk.Revit.DB.ViewSheet vs, Autodesk.Revit.DB.PrintManager printManager, Autodesk.Revit.DB.IPrintSetting printSetting ) { Autodesk.Revit.DB.BoundingBoxUV bbUV = vs.Outline; double x = UnitUtils.ConvertFromInternalUnits( bbUV.Max.U - bbUV.Min.U, Autodesk.Revit.DB.DisplayUnitType.DUT_MILLIMETERS); double y = UnitUtils.ConvertFromInternalUnits( bbUV.Max.V - bbUV.Min.V, Autodesk.Revit.DB.DisplayUnitType.DUT_MILLIMETERS); if (x == 0 || y == 0) { return; } string sheetSize = GetSheetSize(x, y, 100); if (x > y) { printSetting.PrintParameters.PageOrientation = Autodesk.Revit.DB.PageOrientationType.Landscape; } else { printSetting.PrintParameters.PageOrientation = Autodesk.Revit.DB.PageOrientationType.Portrait; } foreach (Autodesk.Revit.DB.PaperSize ps in printManager.PaperSizes) { if (ps.Name == sheetSize) { printSetting.PrintParameters.PaperSize = ps; break; } } Trace.Write("Selected paper sized: " + printSetting.PrintParameters.PaperSize.Name); using (Autodesk.Revit.DB.Transaction t = new Autodesk.Revit.DB.Transaction(vs.Document)) { t.Start("temp"); printManager.PrintSetup.CurrentPrintSetting = printSetting; //printManager.Apply(); printManager.PrintSetup.SaveAs("temp"); printManager.SubmitPrint(vs); //vs.Print(true); t.RollBack(); } }
/// <summary> /// Implement this method as an external command for Revit. /// </summary> /// <param name="commandData">An object that is passed to the external application /// which contains data related to the command, /// such as the application object and active view.</param> /// <param name="message">A message that can be set by the external application /// which will be displayed if a failure or cancellation is returned by /// the external command.</param> /// <param name="elements">A set of elements to which the external application /// can add elements that are to be highlighted in case of failure or cancellation.</param> /// <returns>Return the status of the external command. /// A result of Succeeded means that the API external method functioned as expected. /// Cancelled can be used to signify that the user cancelled the external operation /// at some point. Failure should be returned if the application is unable to proceed with /// the operation.</returns> public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements) { Autodesk.Revit.DB.Transaction newTran = null; try { newTran = new Autodesk.Revit.DB.Transaction(commandData.Application.ActiveUIDocument.Document, "ViewPrinter"); newTran.Start(); PrintMgr pMgr = new PrintMgr(commandData); if (null == pMgr.InstalledPrinterNames) { PrintMgr.MyMessageBox("No installed printer, the external command can't work."); return Autodesk.Revit.UI.Result.Cancelled; } using (PrintMgrForm pmDlg = new PrintMgrForm(pMgr)) { if (pmDlg.ShowDialog() != DialogResult.Cancel) { newTran.Commit(); return Autodesk.Revit.UI.Result.Succeeded; } newTran.RollBack(); } } catch (Exception ex) { if (null != newTran) newTran.RollBack(); message = ex.ToString(); return Autodesk.Revit.UI.Result.Failed; } return Autodesk.Revit.UI.Result.Cancelled; }
void SetUpSizeAndPrint(Autodesk.Revit.DB.ViewSheet vs, Autodesk.Revit.DB.PrintManager printManager, Autodesk.Revit.DB.IPrintSetting printSetting) { Autodesk.Revit.DB.BoundingBoxUV bbUV = vs.Outline; double x = bbUV.Max.U - bbUV.Min.U; double y = bbUV.Max.V - bbUV.Min.V; if (x == 0 || y == 0) { return; } x = Converter.ConvertFromInternalUnits(x, Autodesk.Revit.DB.DisplayUnitType.DUT_MILLIMETERS); y = Converter.ConvertFromInternalUnits(y, Autodesk.Revit.DB.DisplayUnitType.DUT_MILLIMETERS); Trace.Write("x = " + x + "; y = " + y); string sheetSize = GetSheetSize(x, y, 100); if (x > y) { printSetting.PrintParameters.PageOrientation = Autodesk.Revit.DB.PageOrientationType.Landscape; } else { printSetting.PrintParameters.PageOrientation = Autodesk.Revit.DB.PageOrientationType.Portrait; } Trace.Write("sheetSize = " + sheetSize + "; PageOrientation: " + printSetting.PrintParameters.PageOrientation.ToString()); foreach (Autodesk.Revit.DB.PaperSize ps in printManager.PaperSizes) { if (ps.Name == sheetSize) { Trace.Write("ps.Name = " + ps.Name); printSetting.PrintParameters.PaperSize = ps; break; } } using (Autodesk.Revit.DB.Transaction t = new Autodesk.Revit.DB.Transaction(vs.Document)) { t.Start("temp"); printManager.PrintToFileName = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments) + vs.Name + ".pdf"; printManager.PrintSetup.CurrentPrintSetting = printSetting; printManager.PrintSetup.SaveAs("temp"); printManager.Apply(); vs.Print(true); t.RollBack(); /*unsafe { * System.IntPtr hwnd = NativeDlls.FindWindow(null, "Сохранить PDF-файл как"); * Trace.Write("hwnd = " + hwnd.ToInt64()); * if (hwnd.ToInt64() > 0) { * long lResult = NativeDlls.SendMessage(hwnd, 16, 0, 0); * } * }*/ } }