Результаты поиска для 'list'
-
Результаты поиска
-
Тема: Переименовать группу
Здравствуйте! Начал изучать Python и Dynamo. Возник вопрос
Вот код на питоне который создает группу. Мне нужно задать определенное имя(“MyName”) только что созданной группе. Подскажите пожалуйста как это можно сделать.
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB import ElementTransformUtils, ElementIdclr.AddReference("System")
from System.Collections.Generic import Listclr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManagerdoc = DocumentManager.Instance.CurrentDBDocument
Ids=List[ElementId]()
for i in IN[0]:
Ids.Add(UnwrapElement(i).Id)TransactionManager.Instance.EnsureInTransaction(doc)
MyGroup = doc.Create.NewGroup(Ids)
#MyGroup.Rename("MyName") # так не получиосьTransactionManager.Instance.TransactionTaskDone()
OUT=Ids
Использую код Александра Попова из скрипта Обновление экспликации полов. Скрипт выдает список помещений в которых используются одинаковые типы полов. Проблема в том, что он выдает список с одинаковыми именами помещений, а этого не надо. Python я не знаю, но как я понял модуль Collection не поддерживается.
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
rooms = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).WhereElementIsNotElementType().ToElements()`
#-----------ВХОДНЫЕ ДАННЫЕ------------------
par1=IN[1]
setpar=IN[2]
tire = IN[3]
zap = IN[4]
#----------ФУНКЦИИ------------------
def get3p(room):
try:
val1 = room.LookupParameter(par1).AsValueString()
except:
val1=""
if val1 is None:
val1=""
valob=val1
return valob
#----------СОРТИРОВКА ПОМЕЩЕНИЙ ПО НОМЕРУ--------------
r1=[]
list1=[]
for room in rooms:
if room.Area>0:
r1.append(room)
num1=room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString()
nam1=room.get_Parameter(BuiltInParameter.ROOM_NUMBER).AsString()
num2=""
nam2=""
num3=""
nam3=""
num4=""
nam4=""
num5=""
nam5=""
num6=""
nam6=""
if "." in num1:
c1=num1.find(".")
num2=num1[c1+1:]
num1=num1[:c1]
if "." in num2:
c2=num2.find(".")
num3=num2[c2+1:]
num2=num2[:c2]
if "." in num3:
c3=num3.find(".")
num4=num3[c3+1:]
num3=num3[:c3]
if "." in num4:
c4=num4.find(".")
num5=num4[c4+1:]
num4=num4[:c4]
if "." in num5:
c5=num5.find(".")
num6=num5[c5+1:]
num5=num5[:c5]
if num1!="":
num1=num1
if num2!="":
num2=num2
if num3!="":
num3=num3
if num4!="":
num4=num4
if num5!="":
num5=num5
if num6!="":
num6=num6
list1.append([room,num1,num2,num3,num4,num5,num6])
#list1.append(UnwrapElement(room).get_Parameter(BuiltInParameter.ROOM_NUMBER).AsString())
from operator import itemgetter
b = sorted(list1,key = itemgetter(1,2,3,4,5,6))
list2=[]
for b1 in b:
nm1 = b1[1]
if b1[2]!="":
nm1=nm1+"."+(b1[2])
if b1[3]!="":
nm1=nm1+"."+(b1[3])
if b1[4]!="":
nm1=nm1+"."+(b1[4])
if b1[5]!="":
nm1=nm1+"."+(b1[5])
if b1[6]!="":
nm1=nm1+"."+(b1[6])
list2.append([b1[0],nm1])
#---------------БЕРЕМ ПАРАМЕТРЫ-----------------------
uniq=[]
for room1 in list2:
room = room1[0]
valob = get3p(room)
if valob not in uniq:
uniq.append(valob)
numlist=[]
roomlist=[]
roomtxt=[]
for val in uniq:
list=[]
text=[]
txt=""
for room1 in list2:
room=room1[0]
num = room1[1]
valob = get3p(room)
if valob==val:
list.append(room)
text.append(num)
txt=txt+num+zap
roomtxt.append(txt[:len(txt)-1])
numlist.append(text)
roomlist.append(list)
"""
i=0
list3=[]
list4=[]
for num in numlist:
i=0
list5=[]
for n in num:
num1=n
num2=""
num3=""
num4=""
num5=""
num6=""
if "." in num1:
c1=num1.find(".")
num2=num1[c1+1:]
num1=num1[:c1]
if "." in num2:
c2=num2.find(".")
num3=num2[c2+1:]
num2=num2[:c2]
if "." in num3:
c3=num3.find(".")
num4=num3[c3+1:]
num3=num3[:c3]
if "." in num4:
c4=num4.find(".")
num5=num4[c4+1:]
num4=num4[:c4]
if "." in num5:
c5=num5.find(".")
num6=num5[c5+1:]
num5=num5[:c5]
if num1!="":
num1=int(float(num1))
if num2!="":
num2=int(float(num2))
if num3!="":
num3=int(float(num3))
if num4!="":
num4=int(float(num4))
if num5!="":
num5=int(float(num5))
if num6!="":
num6=int(float(num6))
list5.append([num1,num2,num3,num4,num5,num6,n])
#---------Вносим в группы номера, идущие подряд-----------
j=0
gr=[]
gr1=[]
while j2:
txt=k[0]+tire+k[k.Count-1]+zap
list4.append(txt[:len(txt)-1])
i=i+1"""
TransactionManager.Instance.EnsureInTransaction(doc)
i=0
for rooms in roomlist:
for room in rooms:
room.LookupParameter(setpar).Set(roomtxt[i])
i=i+1
TransactionManager.Instance.TransactionTaskDone()
OUT = roomlist<div id=”messageBodyDisplay” class=”lia-message-body lia-component-message-view-widget-body lia-component-body-signature-highlight-escalation lia-component-message-view-widget-body-signature-highlight-escalation”>
<div class=”lia-message-body-content”>Необходимо добавить множество параметров в проект, взял за основу скрипт Александра Попова. Однако у него есть минус-он не фильтрует существующие параметры, а добавляет их поверх (наложение параметров). Моя идея была сравнить наличие/отсутствие параметра через LookupParameter, но недостаток понимания загубил все. Нужна помощь/идеи, заранее спасибо. Текст скрипта:
def ParamBindingExists(_doc, _paramName, _paramType):
map = doc.ParameterBindings
iterator = map.ForwardIterator()
iterator.Reset()
while iterator.MoveNext():
if iterator.Key != None and iterator.Key.Name == _paramName and iterator.Key.ParameterType == _paramType:
paramExists = True
break
else:
paramExists = False
return paramExists
def RemoveParamBinding(_doc, _paramName, _paramType):
map = doc.ParameterBindings
iterator = map.ForwardIterator()
iterator.Reset()
while iterator.MoveNext():
if iterator.Key != None and iterator.Key.Name == _paramName and iterator.Key.ParameterType == _paramType:
definition = iterator.Key
break
message = None
if definition != None:
map.Remove(definition)
message = “Success”
return message
def addParam(doc, _paramName, _visible, _instance, _groupName, _paramGroup,k):
message = None
if ParamBindingExists(doc, _paramName, _paramType):
if not RemoveParamBinding(doc, _paramName, _paramType) == “Success”:
message = “Param Binding Not Removed Successfully”
else:
message = None
group = file.Groups.get_Item(_groupName)
if group == None:
group = file.Groups.Create(_groupName)
if group.Definitions.Contains(group.Definitions.Item[_paramName]):
_def = group.Definitions.Item[_paramName]
else:
_def = group.Definitions.Create(opt)
param = doc.ParameterBindings.Insert(_def, bind, _paramGroup)
return message
_paramName = []
_groupName = []
_paramType = []
_paramType2 = []
_category = []
_category2 = []
_paramGroup = []
_paramGroup2 = []
_instance = []
parameters = IN[0].split(“\n”)
for parameter in parameters:
try:
if parameter is not None and parameter != “”:
paramName = parameter[:parameter.find(“(“)]
_paramName.append(paramName)
attrib = parameter[parameter.find(“(“)+1:parameter.find(“)”)+1]
groupName = attrib[:attrib.find(“,”)]
attrib = attrib[attrib.find(“,”)+1:]
_groupName.append(groupName)
paramType = attrib[:attrib.find(“,”)]
attrib = attrib[attrib.find(“,”)+1:]
_paramType2.append(paramType)
#doc.Settings.Categories.Item(
category = attrib[:attrib.find(“,”)]
attrib = attrib[attrib.find(“,”)+1:]
_category2.append(category)
paramGroup = attrib[:attrib.find(“,”)]
attrib = attrib[attrib.find(“,”)+1:]
_paramGroup2.append(paramGroup)
instance = attrib[:attrib.find(“,”)]
attrib = attrib[attrib.find(“,”)+1:]
_instance.append(int(float(instance)))
except:
a=0
types=System.Enum.GetValues(ParameterType)
for i in _paramType2:
l=0
for type in types:
j = type.ToString()
if i==j:
_paramType.append(type)
l=l+1
if l==0:
for type in types:
j=type.ToString()
if j==”Text”:
_paramType.append(type)
categs = doc.Settings.Categories
for i in _category2:
if “/” in i:
_category3 = []
i1 = i.split(“/”)
for i2 in i1:
for cat in categs:
j = cat.Name.ToString()
if i2 in j:
_category3.append(cat)
_category.append(_category3)
else:
for cat in categs:
j = cat.Name.ToString()
if i==j:
_category.append(cat)
groups=System.Enum.GetValues(BuiltInParameterGroup)
name=[]
for i in _paramGroup2:
for group in groups:
j = group.ToString()
if j==i:
_paramGroup.append(group)#”Start” the transaction
TransactionManager.Instance.EnsureInTransaction(doc)try:
file = app.OpenSharedParameterFile()
except:
message = “No Shared Parameter file found.”
pass
k=0
while k<_paramName.Count:
cats = app.Create.NewCategorySet()
if isinstance(_category[k],list):
for i in _category[k]:
cats.Insert(i)
else:
cats.Insert(_category[k])
if _instance[k]:
bind = app.Create.NewInstanceBinding(cats)
else:
bind = app.Create.NewTypeBinding(cats)
opt = ExternalDefinitionCreationOptions(_paramName[k], _paramType[k])
opt.Visible = True
message = addParam(doc, _paramName[k], True, _instance[k], _groupName[k], _paramGroup[k],k)
k=k+1
TransactionManager.Instance.TransactionTaskDone()
if message == None:
OUT = parameters
else:
OUT = message
<div></div>
</div>
</div>
<div class=”custom-add-tag”>
<div class=”lia-panel lia-panel-standard MessageTagsTaplet Chrome lia-component-message-view-widget-tags”>
<div class=”lia-decoration-border”>
<div class=”lia-decoration-border-top”>
<div></div>
</div>
<div class=”lia-decoration-border-content”>
<div>
<div class=”lia-panel-content-wrapper”>
<div class=”lia-panel-content”>
<div id=”taglist” class=”TagList”></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>Добрый день! Помогите отредактировать код скрипта Александра Попова “Экспликация полов в Revit по ГОСТ автоматически”.
Питона я не знаю.
Нужно вместо номеров помещений, нужно имена помещений записать.Как я понял, нужно вместо
BuiltInParameter.ROOM_NUMBER
изменить наBuiltInParameter.ROOM_NAME
.
Также после ошибки изменилnum1=int(float(num1))
наnum1=num1
Но тут вышла ошибка:<span style=”font-size: 80%;”>Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.</span>
<span style=”font-size: 80%;”>Traceback (most recent call last):</span>
<span style=”font-size: 80%;”>File “”, line 77, in</span>
<span style=”font-size: 80%;”>UnicodeEncodeError: (‘unknown’, ‘\x00’, 0, 1, ”)</span>`import clr
clr.AddReference(‘ProtoGeometry’)
from Autodesk.DesignScript.Geometry import *
clr.AddReference(‘RevitAPI’)
from Autodesk.Revit.DB import *
clr.AddReference(“RevitServices”)
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
rooms = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).WhereElementIsNotElementType().ToElements()
#———–ВХОДНЫЕ ДАННЫЕ——————
par1=IN[1]
setpar=IN[2]
tire = IN[3]
zap = IN[4]
#———-ФУНКЦИИ——————
def get3p(room):
try:
val1 = room.LookupParameter(par1).AsValueString()
except:
val1=””
if val1 is None:
val1=””
valob=val1
return valob
#———-СОРТИРОВКА ПОМЕЩЕНИЙ ПО НОМЕРУ————–
r1=[]
list1=[]
for room in rooms:
if room.Area>0:
r1.append(room)
num1=room.get_Parameter(BuiltInParameter.ROOM_NUMBER).AsString()
num2=””
num3=””
num4=””
num5=””
num6=””
if “.” in num1:
c1=num1.find(“.”)
num2=num1[c1+1:]
num1=num1[:c1]
if “.” in num2:
c2=num2.find(“.”)
num3=num2[c2+1:]
num2=num2[:c2]
if “.” in num3:
c3=num3.find(“.”)
num4=num3[c3+1:]
num3=num3[:c3]
if “.” in num4:
c4=num4.find(“.”)
num5=num4[c4+1:]
num4=num4[:c4]
if “.” in num5:
c5=num5.find(“.”)
num6=num5[c5+1:]
num5=num5[:c5]
if num1!=””:
num1=int(float(num1))
if num2!=””:
num2=int(float(num2))
if num3!=””:
num3=int(float(num3))
if num4!=””:
num4=int(float(num4))
if num5!=””:
num5=int(float(num5))
if num6!=””:
num6=int(float(num6))
list1.append([room,num1,num2,num3,num4,num5,num6])
#list1.append(UnwrapElement(room).get_Parameter(BuiltInParameter.ROOM_NUMBER).AsString())
from operator import itemgetter
b = sorted(list1,key = itemgetter(1,2,3,4,5,6))
list2=[]
for b1 in b:
nm1 = str(b1[1])
if b1[2]!=””:
nm1=nm1+”.”+str(b1[2])
if b1[3]!=””:
nm1=nm1+”.”+str(b1[3])
if b1[4]!=””:
nm1=nm1+”.”+str(b1[4])
if b1[5]!=””:
nm1=nm1+”.”+str(b1[5])
if b1[6]!=””:
nm1=nm1+”.”+str(b1[6])
list2.append([b1[0],nm1])
#—————БЕРЕМ ПАРАМЕТРЫ———————–
uniq=[]
for room1 in list2:
room = room1[0]
valob = get3p(room)
if valob not in uniq:
uniq.append(valob)
numlist=[]
roomlist=[]
roomtxt=[]
for val in uniq:
list=[]
text=[]
txt=””
for room1 in list2:
room=room1[0]
num = room1[1]
valob = get3p(room)
if valob==val:
list.append(room)
text.append(num)
txt=txt+num+zap
roomtxt.append(txt[:len(txt)-1])
numlist.append(text)
roomlist.append(list)
“””
i=0
list3=[]
list4=[]
for num in numlist:
i=0
list5=[]
for n in num:
num1=n
num2=””
num3=””
num4=””
num5=””
num6=””
if “.” in num1:
c1=num1.find(“.”)
num2=num1[c1+1:]
num1=num1[:c1]
if “.” in num2:
c2=num2.find(“.”)
num3=num2[c2+1:]
num2=num2[:c2]
if “.” in num3:
c3=num3.find(“.”)
num4=num3[c3+1:]
num3=num3[:c3]
if “.” in num4:
c4=num4.find(“.”)
num5=num4[c4+1:]
num4=num4[:c4]
if “.” in num5:
c5=num5.find(“.”)
num6=num5[c5+1:]
num5=num5[:c5]
if num1!=””:
num1=int(float(num1))
if num2!=””:
num2=int(float(num2))
if num3!=””:
num3=int(float(num3))
if num4!=””:
num4=int(float(num4))
if num5!=””:
num5=int(float(num5))
if num6!=””:
num6=int(float(num6))
list5.append([num1,num2,num3,num4,num5,num6,n])
#———Вносим в группы номера, идущие подряд———–
j=0
gr=[]
gr1=[]
while j2:
txt=k[0]+tire+k[k.Count-1]+zap
list4.append(txt[:len(txt)-1])
i=i+1″””
TransactionManager.Instance.EnsureInTransaction(doc)
i=0
for rooms in roomlist:
for room in rooms:
room.LookupParameter(setpar).Set(roomtxt[i])
i=i+1
TransactionManager.Instance.TransactionTaskDone()
OUT = roomlist`Спасибо!