PrintDriver and PrintRange are overidden by Revit
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello,
I'm currently trying to adapt @sobon.konrad PDF Print dynamo node to fit the needs of the firm I work for.
I have already managed to adapt it so that I can feed in a list of printsettings (with code provided by Viktor Kuzev of the DynamoBIM forum)
But I have ran into a problem. The code seems to ignore the printdriver and the printrange I feed in. Instead it uses the printdriver and print range secified in Revit. At least it seems like it compares the setup in the script to the printsetup in Revit, and when it doesn't match it won't run.
when I specify the right setup in Revit it runs fine. (in my case: "Bullzip PDF Printer" and Select)
Since I'm trying to implement it in the firm I work for, I want it to work without having to rely on everyone in the firm remembering to change the setup before they print.
I hope anyone can help me,
Tim Hevel
#Copyright(c) 2015, Konrad K Sobon # @arch_laboratory, http://archi-lab.net import clr clr.AddReference('ProtoGeometry') from Autodesk.DesignScript.Geometry import * # Import Element wrapper extension methods clr.AddReference("RevitNodes") import Revit clr.ImportExtensions(Revit.Elements) # Import geometry conversion extension methods clr.ImportExtensions(Revit.GeometryConversion) # Import DocumentManager and TransactionManager clr.AddReference("RevitServices") import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager doc = DocumentManager.Instance.CurrentDBDocument uiapp = DocumentManager.Instance.CurrentUIApplication app = uiapp.Application # Import RevitAPI clr.AddReference("RevitAPI") import Autodesk from Autodesk.Revit.DB import * import sys pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib' sys.path.append(pyt_path) import System #The inputs to this node will be stored as a list in the IN variable. dataEnteringNode = IN sheets = IN[0] pRange = System.Enum.Parse(Autodesk.Revit.DB.PrintRange, IN[1]) combined = IN[2] printerName = IN[3] printSettings = IN[4] filePath = IN[5] runIt = IN[6] if isinstance(sheets, list): viewSheets = [] for i in sheets: viewSheets.append(UnwrapElement(i)) else: viewSheets = UnwrapElement(sheets) if isinstance(printSettings, list): printSetting = [] for i in printSettings: printSetting.append(UnwrapElement(i)) else: printSetting = UnwrapElement(printSettings) TransactionManager.Instance.EnsureInTransaction(doc) printManager = doc.PrintManager printSetup = printManager.PrintSetup if isinstance(printSettings, list): printSetup.CurrentPrintSetting = printSetting[0] else: printSetup.CurrentPrintSetting = printSetting printManager.Apply() TransactionManager.Instance.TransactionTaskDone() def PrintView(doc, sheet, pRange, printerName, combined, filePath, printSetting): # create view set viewSet = ViewSet() viewSet.Insert(sheet) # determine print range printManager = doc.PrintManager printManager.PrintRange = pRange printManager.Apply() # make new view set current viewSheetSetting = printManager.ViewSheetSetting viewSheetSetting.CurrentViewSheetSet.Views = viewSet # set printer printManager.SelectNewPrintDriver(printerName) printManager.Apply() # set combined and print to file if printManager.IsVirtual: printManager.CombinedFile = combined printManager.Apply() printManager.PrintToFile = True printManager.Apply() else: printManager.CombinedFile = combined printManager.Apply() printManager.PrintToFile = False printManager.Apply() # set file path printManager.PrintToFileName = filePath printManager.Apply() # apply print setting try: printSetup = printManager.PrintSetup printSetup.CurrentPrintSetting = printSetting printManager.Apply() except: pass # save settings and submit print TransactionManager.Instance.EnsureInTransaction(doc) viewSheetSetting.SaveAs("tempSetName") printManager.Apply() printManager.SubmitPrint() viewSheetSetting.Delete() TransactionManager.Instance.TransactionTaskDone() return True try: viewSets = FilteredElementCollector(doc).OfClass(ViewSheetSet) for i in viewSets: if i.Name == "tempSetName": TransactionManager.Instance.EnsureInTransaction(doc) doc.Delete(i.Id) TransactionManager.Instance.ForceCloseTransaction() else: continue errorReport = None message = "Success" if runIt: if isinstance(viewSheets, list) and isinstance(printSetting, list): for i, j in zip(viewSheets, printSetting): PrintView(doc, i, pRange, printerName, combined, filePath, j) elif isinstance(viewSheets, list) and not isinstance(printSetting, list): for i in viewSheets: PrintView(doc, i, pRange, printerName, combined, filePath, printSetting) elif not isinstance(viewSheets, list) and not isinstance(printSetting, list): PrintView(doc, viewSheets, pRange, printerName, combined, filePath, printSetting) else: message = "Set RunIt to True" except: # if error accurs anywhere in the process catch it import traceback errorReport = traceback.format_exc() #Assign your output to the OUT variable if errorReport == None: OUT = message else: OUT = errorReport