IvaSerge

AddPipeInsulation

Aug 26th, 2021
1,089
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Загрузить стандартную библиотеку Python и библиотеку DesignScript
  2. import sys
  3. import clr
  4. clr.AddReference('ProtoGeometry')
  5. from Autodesk.DesignScript.Geometry import *
  6.  
  7. # Для использования транзакций и работе с документом (doc)
  8. clr.AddReference("RevitServices")  # RevitServices.dll лежит здесь C:\Program Files\Dynamo\Dynamo Revit\1.3\Revit_2017
  9. import RevitServices
  10. from RevitServices.Persistence import DocumentManager
  11. from RevitServices.Transactions import TransactionManager
  12. doc = DocumentManager.Instance.CurrentDBDocument
  13. uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
  14. uiapp = DocumentManager.Instance.CurrentUIApplication
  15. app = uiapp.Application
  16.  
  17. clr.AddReference('RevitAPI')  # RevitAPI.dll лежит как правило здесь C:\Program Files\Autodesk\Revit 2017
  18. import Autodesk
  19. from Autodesk.Revit.DB import *  # импорт всех элементов, если к примеру нужны только стены, то * заменяется на Wall
  20.  
  21. # Упрощенные ноды для работы с объектами Revit
  22. clr.AddReference("RevitNodes")  # RevitNodes.dll лежит здесь C:\Program Files\Dynamo\Dynamo Revit\1.3\Revit_2017
  23. import Revit
  24. clr.ImportExtensions(Revit.Elements)
  25. from Revit.Elements import *
  26. clr.ImportExtensions(Revit.GeometryConversion)  # позволяет конвертировать величины
  27. clr.ImportExtensions(Revit.GeometryReferences)
  28.  
  29. def mm_to_ft(mm):
  30.     return 3.2808 * mm / 1000
  31.  
  32. def ft_to_mm(ft):
  33.     return ft * 304.8
  34.  
  35. pipes = FilteredElementCollector(doc).\
  36.     OfCategory(BuiltInCategory.OST_PipeCurves).\
  37.     WhereElementIsNotElementType().ToElements()
  38.  
  39. pipe_insulation_types = FilteredElementCollector(doc).\
  40.     OfCategory(BuiltInCategory.OST_PipeInsulations).\
  41.     WhereElementIsElementType()
  42.  
  43. insulation_name = "Phenolschaum 25mm"
  44.  
  45. for ins_tp in pipe_insulation_types:
  46.     tp_name = ins_tp.get_Parameter(
  47.         BuiltInParameter.SYMBOL_NAME_PARAM).AsString()
  48.     if tp_name == insulation_name:
  49.         insulation_Id = ins_tp.Id
  50.         break
  51.  
  52. TransactionManager.Instance.EnsureInTransaction(doc)
  53.  
  54. for pipe in pipes:
  55.     existing_insulation_name = pipe.get_Parameter(
  56.         BuiltInParameter.RBS_REFERENCE_INSULATION_TYPE).AsString()
  57.     pipe_diameter = ft_to_mm(pipe.Diameter)
  58.    
  59.     # create insulation only if there is no existing
  60.     if not(existing_insulation_name):
  61.         new_insulation = Plumbing.PipeInsulation.Create(
  62.             doc,
  63.             pipe.Id,
  64.             insulation_Id,
  65.             mm_to_ft(40))
  66.     else:
  67.         continue
  68.    
  69.     if pipe_diameter > 50:
  70.         new_insulation.Thickness = mm_to_ft(32)
  71.     else:
  72.         new_insulation.Thickness = mm_to_ft(25)    
  73.  
  74. TransactionManager.Instance.TransactionTaskDone()
  75.  
  76. # Назначьте вывод переменной OUT.
  77. OUT = pipes
  78.  
RAW Paste Data