20 luty 2022
Kolejna z funkcji, jaką zapewnia moja nakładka do revita PYLAB. Umożliwia dzięki kilku kliknięciom umieścić izolację na wielu elementach w systemach rurowych.
Spis treści:

Założenia programu
Program powstał aby usprawnić pracę dla projektantów instalacji sanitarnych, aby umożliwić wstawianie izolacji na wielu elementach jednocześnie z uwzględnieniem grubości izolacji. Jeśli nie masz jeszcze nakładki to zachęcam do jej pobrania. Całą instrukcję znajdziesz w moim wpisie PYLAB – Revit nakładka sanitarna.
Działanie programu

Ważne! Program w obecnej wersji działa na modelach z ustawieniem jednostek [mm]
Program działa w następującej kolejności:
- Wybierasz takie elementy jak rury, kształtki itp.
- Musisz wybrać rodzaj izolacji
- Program prosi o podanie grubości izolacji dla każdego z elementów. Każde z zapytań dotyczy osobnego elementu. Jego nazwa i rozmiar zawiera się w nazwie:

- Program generuje listę elementów z jakimi wchodził w interakcje. Dzięki zestawieniu można zidentyfikować na jakich elementach, a na jakich wystąpił błąd. Taka sytuacja może zajść w momencie, gdy dany element posiada już izolację lub izolacja podana przez użytkownika wynosi 0.

Film instruktażowy
Kod programu
Poniżej znajduje się kod programu z pierwszej wersji nakładki. Po więcej zapraszam na mojego GitHubie, gdzie na bieżąco pojawiać się będą nowe wersje nakładki.
from rpw import revit,db
from rpw.ui.forms import TextInput
from Autodesk.Revit.UI.Selection import *
from Autodesk.Revit.DB import *
from pyrevit import DB, forms
doc = revit.doc
uidoc = revit.uidoc
## Class and def
class CustomISelectionFilter(ISelectionFilter):
def __init__(self, nom_categorie):
self.nom_categorie = nom_categorie
def AllowElement(self, e):
if e.Category.Name in self.nom_categorie:
# if self.nom_categorie.Contains(e.Category.Name):
#if e.Category.Name == self.nom_categorie:
return True
else:
return False
def AllowReference(self, ref, point):
return true
def Pargetstr(element, name):
return (element.GetParameters(name))[0].AsValueString()
def Parget(element, name):
return (element.GetParameters(name))[0].AsString()
## Picking elements
with forms.WarningBar(title="Pick elements in model[pipes/pipe fittings"):
collector = uidoc.Selection.PickObjects(ObjectType.Element,CustomISelectionFilter("Pipes Pipe Fittings"))
filter1=ElementCategoryFilter(BuiltInCategory.OST_PipeInsulations)
ins_list=FilteredElementCollector(doc).OfClass(ElementType).WherePasses(filter1).ToElements()
ins_list_pins=[Element.Name.GetValue(i) for i in ins_list]
rops = forms.CommandSwitchWindow.show(ins_list_pins, message='Select Option',
recognize_access_key=False)
# print(rops)
choosen_ins=ins_list[ins_list_pins.index(rops)]
# print(choosen_ins)
## Get types of elements to ask for insulation thickness
elements=[]
elements_type=[]
dict={}
for i in collector:
el=doc.GetElement(i.ElementId)
elements.append(el)
elements_type.append(el.Name)
element_parameters=[]
for p in el.Parameters:
element_parameters.append(p.Definition.Name)
# print("=======")
# print(el.Category)
# print(el.Category.Name)
# print(el.Parameters)
try:
if el.Category.Name=="Pipes":
dict.update({Pargetstr(el, "Family and Type") +" "
+ str(el.Diameter*304.8):0})
else:
dict.update({Pargetstr(el, "Family and Type") +" "
+ Parget(el, "Overall Size"):0})
except Exception as e:
print(e)
del element_parameters[:]
# print(element_parameters)
# print(elements)
# print(elements_type)
# print(dict)
## Ask for insulation thickness
for key in dict:
t=forms.ask_for_string(prompt='Select Insulation Thickness for {}'.format(key), title="Insulation")
dict.update({key:t})
# print(dict)
transaction = Transaction(doc, 'Transaction')
transaction.Start()
## Set insulation to pipes
print("Results:")
for el in elements:
try:
if el.Category.Name=="Pipes":
t=float(dict[Pargetstr(el, "Family and Type") +" "
+ str(el.Diameter*304.8)])/304.8
Plumbing.PipeInsulation.Create(doc,el.Id,choosen_ins.Id,t)
print("=====")
print(Pargetstr(el, "Family and Type") +" "
+ str(el.Diameter*304.8)+ " Id: " + str(el.Id))
print("Insulation thicknes: {}").format(t*304.8)
else:
t=float(dict[Pargetstr(el, "Family and Type") +" "
+ Parget(el, "Overall Size")])/304.8
Plumbing.PipeInsulation.Create(doc,el.Id,choosen_ins.Id,t)
print("=====")
print(Pargetstr(el, "Family and Type") +" "
+ Parget(el, "Overall Size") + " Id: " + str(el.Id))
print("Insulation thicknes: {}").format(t*304.8)
except Exception as e:
print("=====")
print(e)
print("Error Element Id {}".format(el.Id))
transaction.Commit()Wszelkie nieprawidłowości w działaniu programu jakie występują podczas korzystania proszę zgłaszać na moich kontach społecznościowych, albo koncie GitHub.
