Иногда бывает нужно получить копию списка в Питон. Это бывает нужно чтобы менять список, при этом сохраняя исходный список. В такой ситуации нельзя делать простое присваивание типа list2 = list1, таким образом мы просто создадим вторую ссылку на исходный список и любые манипуляции со второй ссылкой отразятся на исходном списке. Копия списка создается так list2 = list1[:]. В различных источниках можно встретить метод list.copy(), но в нашей версии Питона этот метод не работает.
По сравнению с VS есть пара серьезных недочетов, в основном вылеты и нестабильная работа, а так не плохо, есть даже конвертер кода из C# в Python и обратно, плюс работает на прямую, что несомненно удобно при отладке. Если проект разросся до 3+ классов то следует серьёзно подумать о переходе в VS.
В общем вот небольшой макрос, чтоб удалять импортированные линии, очень напрягало удалять их вручную ибо обычно с подложкой их приходит куча)
public void DeleteImportLine()
{
UIDocument uidoc = this.ActiveUIDocument;
Document doc = uidoc.Document;
//Создаем фильтр для выбора типов линий
ElementClassFilter filter = new ElementClassFilter(typeof(LinePatternElement));
//Собираем все элементы из документа
FilteredElementCollector collector = new FilteredElementCollector(doc);
//Отфильтровываем все что не соответствует фильтру
collector.WherePasses(filter);
//Добавляем все в список
IList allLine = collector.ToElements();
string data = "";
//Отфильтровываем все что не начинается на IMPORT
var delLine = allLine.Where(a => a.Name.ToString().StartsWith("IMPORT")).ToList();
using ( Transaction t = new Transaction(doc, "Delete import lauers") )
{
t.Start();
foreach ( LinePatternElement L in delLine )
{
//Удаляем
ElementId id = L.Id;
//текст можно отключить, это для контроля
data += L.Name.ToString() + Environment.NewLine;
doc.Delete(id);
}
t.Commit();
}
TaskDialog.Show("Line", "Удаленные типы линий: " + Environment.NewLine + data);
}
AsInteger() ??? Конечно будет ошибка. Это ж не целое число, а число с точкой. Нужно ещё попробовать AsDouble() AsString().
Если ничего не писать, то должно выдать на выход просто параметр Ревит.
Кстати, питон нод в таком виде выдаст последний зашедший в цикл элемент.
Создайте список, в который будете добавлять mas.
outlist = ()
…
outlist.append(mas)
…
OUT = outlist
Опишите пожалуйста алгоритм. Не могу понять логику того, что вы делаете. Ваш скрипт в данный момент представляет “вещь в себе” – сложно понять цель.
Да, я бы успокоился, наверное, в поиске оптимального варианта, но память о где-то просмотренном все же возможном варианте выборки не оставила надежды и нашелся тот же ролик (№19) Алексея Лобанова, где он использовал параметры семейства (насколько я понял, это все параметры типа семейства), которые стандартные ноды динамо не видят. Дальше только знаний не хватает вытащить Symbol.get_Parameter(“Группа модели”).AsString() отдельно, чтобы с ним работать…
import clr
clr.AddReference(‘RevitAPI’)
from Autodesk.Revit.DB import *
clr.AddReference(‘System.Core’)
import System
clr.ImportExtensions(System.Linq)
list=IN[0]
OUT=list.Where(lambda x: UnwrapElement(x).Symbol.get_Parameter(“Группа модели”).AsString()==UnwrapElement(IN[1]))