Результаты поиска для 'list'

Главная Форумы Поиск Результаты поиска для 'list'

Просмотр 15 результатов — с 121 по 135 (из 325)
  • Автор
    Результаты поиска
  • #7440

    В ответ на: C# и Sharp Develop

    txt
    Модератор
    86 pts

    Несколько выбранных элементов в Ревит:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Autodesk.Revit.DB;
    using Autodesk.Revit.UI;
    using Autodesk.Revit.Attributes;
    using Autodesk.Revit.ApplicationServices;
    using Autodesk.Revit.UI.Selection;
    [Transaction(TransactionMode.Manual)]
    public class swaat : IExternalCommand
    {
    public Result Execute(
    ExternalCommandData commandData,
    ref string message,
    ElementSet elements)
    {
    UIApplication rvtUiApp = commandData.Application;
    Application rvtApp = rvtUiApp.Application;
    UIDocument rvtUiDoc = rvtUiApp.ActiveUIDocument;
    Document rvtDoc = rvtUiDoc.Document;
    {
    var element = rvtUiDoc.Selection.GetElementIds();
    var lst_ = new List<string>();
    foreach (var elem in rvtUiDoc.Selection.GetElementIds())
    foreach (var bic in Enum.GetValues(typeof(BuiltInCategory)))
    {
    if (rvtDoc.GetElement(elem).Category.Id.IntegerValue == (int)bic)
    {
    lst_.Add(rvtDoc.GetElement(elem).Category.Name.ToString());
    lst_.Add(bic.ToString());
    lst_.Add(rvtDoc.GetElement(elem).LookupParameter("Комментарии").AsString());
    }
    };
    TaskDialog.Show("Bic", string.Join(" ;", lst_));
    }
    return Result.Succeeded;
    }
    }

    #7410
    ИваСерж
    Хранитель
    134 pts

    UnwrapElement(element) – работает только на 1 элемент. для обработки списка нужен, например цикл

    unwElements = list()
    for elem in IN[0]
    unwElements.append(UnwrapElement(elem))

    а лучше список МАПать
    unwElements = map(lambda x:UnwrapElement(x), IN[0])

    НО, мап сработает если подавать на вход список))
    Короче, в любом ноде от КлокВорка – есть решение этого вопроса.

    #7409
    nikita
    Участник
    2 pts

    Добрый день, похожая задача.
    на вход питона вы подаёте элемент, как подать список? т.е для всех типов пола записать данные слоёв в параметр типа пола.

    сам нод

    текст ошибки (когда подаю список)

    Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
    Traceback (most recent call last):
    File “<string>”, line 10, in <module>
    AttributeError: ‘List[object]’ object has no attribute ‘GetCompoundStructure’

     

    p.s корректирую под себя скрипт Лобанова (https://www.youtube.com/watch?v=TEFlG5YOPnw&t=2s)

    txt
    Модератор
    86 pts

    то что вы подаете в нод List.Contain ..одинакового формата? можно проверить через нод  Object.Type 

    Denver-22
    Участник
    6 pts

    Делая вариант с переводом в String даже не обратил внимание, что диаметры фитингов возвращаются как “65,000”, а в Исходном списке у меня числа в формате “65” (после String.ToNumber). Неужели из-за этого нод List.ContainsItem считает, что эти 2 числа (будучи ЧИСЛАМИ) не идентичны? Бред же…

    @txt, сначала думал, что вы мне предлагаете практически то же, что у меня. Но потом заметил Питон-код. Протестировал. Оказалось, что float(i) переводит в число более правильно, чем String.ToNumber. Хотя оба являются числами. После float(i) уже можно сравнивать в List.ContainsItem как надо! Большое спасибо за опыт!

    Мда.. Недолго радовался… Теперь ситуация ещё загадочней. Трубы Ду65 обрабатываются как надо, а Ду15 – нет. При том, что теперь числа выглядят правильно во всех отношениях о_О. Ладно, проще забить на это. Тут явно глюк внутри Dynamo (версия 1.2.1). Строками хоть задача решена.

    Denver-22
    Участник

    В скрипте (ссылка прилагается) фильтрую врезки труб по указанным диаметрам.

    В нод List.ContainsItem приходят числа на оба входа (даже проверял суммированием). Но нод выдает неправильный результат (в моем случае false вместо true). Тут же (ниже, в отдельной группе) делаю тестирование нода – подаю на входы 2 списка чисел – нод работает правильно.

    Просьба посмотреть мой скрипт – https://yadi.sk/d/jh160ToO3RPVuR – может я чего-то не учел…

    Пока же тупо оба списка перевел в строки и эти строки скормил привередливому List.ContainsItem – сработало. Но хочется понять в чем косяк.

     

     

    txt
    Модератор
    86 pts

    Ром,
    я ранее как-то пытался сделать нодами что-то подобное , но безуспешно. В принципе ваше решение, на мой взгляд, выглядит логичным) Однако по факту нод List.Replace… просто создает новые списки (вход list нода ) количеством равным числу index и в каждом из них производит замену на весь лист item . Возможно и есть способ изменить его поведение на то что ожидается…

    txt
    Модератор
    86 pts

    на вход list нода булмаск нужно подавать элементы. вы подаете туда строки

    txt
    Модератор
    86 pts

    Решение Конрода Собона (выбираются все элементы проекта по нескольким категориям):
    # Copyright(c) 2017, Konrad K Sobon
    # @arch_laboratory, http://archi-lab.net
    import clr
    clr.AddReference("RevitNodes")
    import Revit
    clr.ImportExtensions(Revit.Elements)
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    doc = DocumentManager.Instance.CurrentDBDocument
    # Import RevitAPI
    clr.AddReference("RevitAPI")
    from Autodesk.Revit.DB import *
    import System
    from System import Array
    from System.Collections.Generic import *
    import sys
    pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
    sys.path.append(pyt_path)
    try:
    >>>>errorReport = None
    >>>>cat_list = [BuiltInCategory.OST_Rooms, BuiltInCategory.OST_Walls, BuiltInCategory.OST_Windows, BuiltInCategory.OST_Doors]
    >>>>typed_list = List[BuiltInCategory](cat_list)
    >>>>filter = ElementMulticategoryFilter(typed_list)
    >>>>output = FilteredElementCollector(doc).WherePasses(filter).ToElements()
    except:
    # if error occurs anywhere in the process catch it
    >>>>import traceback
    >>>>errorReport = traceback.format_exc()
    # Assign your output to the OUT variable
    if None == errorReport:
    >>>>OUT = output
    else:
    >>>>OUT = errorReport

    чтобы выбрать те же элементы только на активном виде , меняем только одну строку:
    output = FilteredElementCollector(doc,doc.ActiveView.Id).WherePasses(filter).ToElements()

    #7171

    В ответ на: Синтаксис RevitAPI

    ИваСерж
    Хранитель
    134 pts

    “Калька” с си-шарпа…
    Пишу своими, а не словами из учебника.
    Си – язык требующий четкого определения переменных. Инт, Дабл, Стринг и т.п.
    Питон – язык без “формализации” данных и может запросто проводить действия без предопределения переменных.

    В данном случае List [ElementId](elemIds)
    Означает, что в функцию подается список коллекция  List в котором находятся объекты типа [ElementId]  , а название списска elemIds

    В Питоне достаточно написать
    uidoc.Selection.SetElementIds(elemIds)

    К сожалению, тут почему-то скрипт не принимает питоновский Лист.
    Этот вопрос обсуждался в англоязычном форуме
    https://forum.dynamobim.com/t/how-to-create-an-icollection-to-work-with-revit-api/4417

    Вывод:  оказывается в ревите есть комманды, которые “едят” не родные списки, а объекты из .Net – коллецкии.
    Для создания таковых и используется List [ElementId].
    Спасибо за хороший вопрос. Пришлось посидеть, почитать.

    #7169
    Семен
    Участник
    5 pts

    list1 = IN[0]
    listGroups = []
    group = []
    for index, string in enumerate(list1):
    try:
    if string == list1[index + 1]:
    group.append(string)
    else:
    group.append(string)
    listGroups.append(group)
    group = []
    except IndexError:
    group.append(string)
    listGroups.append(group)
    OUT = listGroups

    #7168
    Семен
    Участник

    Добрый день, объясните, пожалуйста, синтаксис и логику строчки 22 (скрипт из коробки с ревитом “Выбрать все маркируемые…”). Пытаюсь понять, как питоном выбирать объекты ревита и вообще пользоваться методами. Может, где то можно почитать про это дело? Revit API 2016 Guide открыл и испугался. Куда там глядеть?

    import clr
    clr.AddReference("RevitAPI")
    clr.AddReference("RevitAPIUI")
    import Autodesk
    from Autodesk.Revit.UI import *
    from Autodesk.Revit.DB import *
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    clr.AddReference("RevitNodes")
    import Revit
    # clr.ImportExtensions(Revit.Elements)
    from System.Collections.Generic import *
    elems = UnwrapElement(IN[0])
    elemIds = []
    for elem in elems:
    elemIds.append(elem.Id)
    uidoc = DocumentManager.Instance.CurrentUIDocument
    uidoc.Selection.SetElementIds(List[ElementId](elemIds))
    # Just for fun - give it to the output!
    OUT = elemIds

    #7160
    Anton Churakov
    Участник

    Здравствуйте, не могу сообразить как сгруппировать список по сходным значениям с помощью List.GroupByKey. Надо чтобы получился список вида: { { ff,ff },  {aa,aa,aa},   { ff,ff }  }

    txt
    Модератор
    86 pts

    чтобы избавиться от вложенности надо указывать нулевой индекс, т.е.

    если list=[[1,2,3 ]], то применив OUT=list[0] , получим list=[1,2,3 ]

    если list=[[[1,2,3 ]]], то применив OUT=list[0][0] , получим  list=[1,2,3 ]

    ну и ноды flatten уже все знают

     

     

    #7137
    Семен
    Участник
    5 pts

    Нет, тоже не работает.

    Я остановился на этом, вроде тоже всеядный:

    for i,j in zip (list1, list2):
    if type(j) == list:
    for k in j:
    outList.append([i, k])
    else:
    outList.append([i, j])
    OUT = outList

Просмотр 15 результатов — с 121 по 135 (из 325)