Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
        /// <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;
        }
Ejemplo n.º 4
0
        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);
                 *  }
                 * }*/
            }
        }