Export 3D from Background Opened Model

Hi!

I have a routine which exports 3D views from the active model and relocate the files in the correct relative path.

The main node is this:

The code:

1. import clr
2. clr.AddReference('ProtoGeometry')
3. from Autodesk.DesignScript.Geometry import *

4. # Import DocumentManager and TransactionManager
5. clr.AddReference("RevitServices")
6. import RevitServices
7. from RevitServices.Persistence import DocumentManager
8. from RevitServices.Transactions import TransactionManager
9. from System.Collections.Generic import *

10. # Import RevitAPI
11. clr.AddReference("RevitAPI")
12. import Autodesk
13. from Autodesk.Revit.DB import *

14. # Import ToDSType(bool) extension method
15. clr.AddReference("RevitNodes")
16. import Revit
17. clr.ImportExtensions(Revit.Elements)
18. import System

19. # Import geometry conversion extension methods
20. clr.ImportExtensions(Revit.GeometryConversion)

21. doc = DocumentManager.Instance.CurrentDBDocument
22. uiapp = DocumentManager.Instance.CurrentUIApplication
23. app = uiapp.Application
24. uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

25. #The inputs to this node will be stored as a list in the IN variable.
26. dataEnteringNode = IN

27. # Indicamos las vistas a Exportar.
28. views = []
29. view = IN[0]

30. # Introducimos las rutas de las carpetas donde Exportar.
31. path = UnwrapElement(IN[1])

32. # Introducimos los nombres de las vistas a Exportar.
33. names = UnwrapElement(IN[2])

34. # Fusionar vistas segmentadas
35. merge_views = IN[3]

36. # Propiedades de objeto
37. obj_prop = IN[4]

38. for j in view:
39. 	views.append(UnwrapElement(j))
40. 	
41. # Start Transaction
42. TransactionManager.Instance.EnsureInTransaction(doc)

43. views_set = ViewSet()
44. for z in views:
45. 	v_set = views_set.Insert(z)
46. 	
47. exp_opt = DWFXExportOptions()
48. exp_opt.MergedViews = merge_views
49. exp_opt.ExportObjectData = obj_prop

50. exportar = doc.Export(path,names,views_set,exp_opt)

51. # End Transaction
52. TransactionManager.Instance.TransactionTaskDone()

53. OUT = exportar
54. for v in views:
55. 	b= a.Insert(v)
56. 	
57. x=DWFExportOptions()
58. x.MergedViews = IN[3]

59. c=doc.Export(folder,name,a,x)



60. # End Transaction
61. TransactionManager.Instance.TransactionTaskDone()

62. OUT=c    

I would like to run this routine opening models in background, so I have added IN[5], in the python node and I have edited the Python script like that in the line 21:

1. import clr
2. clr.AddReference('ProtoGeometry')
3. from Autodesk.DesignScript.Geometry import *

4. # Import DocumentManager and TransactionManager
5. clr.AddReference("RevitServices")
6. import RevitServices
7. from RevitServices.Persistence import DocumentManager
8. from RevitServices.Transactions import TransactionManager
9. from System.Collections.Generic import *

10. # Import RevitAPI
11. clr.AddReference("RevitAPI")
12. import Autodesk
13. from Autodesk.Revit.DB import *

14. # Import ToDSType(bool) extension method
15. clr.AddReference("RevitNodes")
16. import Revit
17. clr.ImportExtensions(Revit.Elements)
18. import System

19. # Import geometry conversion extension methods
20. clr.ImportExtensions(Revit.GeometryConversion)

21. doc = IN[5]
22. uiapp = DocumentManager.Instance.CurrentUIApplication
23. app = uiapp.Application
24. uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument


25. #The inputs to this node will be stored as a list in the IN variable.
26. dataEnteringNode = IN

27. # Indicamos las vistas a Exportar.
28. views = []
29. view = IN[0]

30. # Introducimos las rutas de las carpetas donde Exportar.
31. path = UnwrapElement(IN[1])

32. # Introducimos los nombres de las vistas a Exportar.
33. names = UnwrapElement(IN[2])

34. # Fusionar vistas segmentadas
35. merge_views = IN[3]

36. # Propiedades de objeto
37. obj_prop = IN[4]


38. for j in view:
39. 	views.append(UnwrapElement(j))
40. 	
41. # Start Transaction
42. TransactionManager.Instance.EnsureInTransaction(doc)

43. views_set = ViewSet()
44. for z in views:
45. 	v_set = views_set.Insert(z)
46. 	
47. exp_opt = DWFXExportOptions()
48. exp_opt.MergedViews = merge_views
49. exp_opt.ExportObjectData = obj_prop

50. exportar = doc.Export(path,names,views_set,exp_opt)

51. # End Transaction
52. TransactionManager.Instance.TransactionTaskDone()

53. OUT = exportar
54. for v in views:
55. 	b= a.Insert(v)
56. 	
57. x=DWFExportOptions()
58. x.MergedViews = IN[3]

59. c=doc.Export(folder,name,a,x)



60. # End Transaction
61. TransactionManager.Instance.TransactionTaskDone()

62. OUT=c

How could I edit the python script to make it work? Im missing something but i dont know what it is…

Thanks in advance!

Hi @GabrielCarmona,

You could use the Export DWFx in Document which already has all the inputs you need.
Export DWFx in Document

P.S: The transactions in your script will not work with a document open in the background.

1 Like

Thank you so much @Alban_de_Chasteigner,

This node seems to fit perfectly for the routine im working on it, problem solved!

As a curiosity, if i want to edit the node I have published to work with background models, how could I do it, if the is a simple way to achive it, I think that is not too dificult but I have not hit the key :thinking: