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

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

Просмотр 15 результатов — с 31 по 45 (из 325)
  • Автор
    Результаты поиска
  • ИваСерж
    Хранитель
    134 pts

    29. Это не переменная, а список
    32. List это метод, даже скорее конструктор класса, а ни какая не комманда. Этот метод из пространства имен библиотеки Systems. Импорт этого пространства имен см. 14.
    О самом классе можно почитать тут

    https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1?view=netframework-4.8

    36. По поводу коллектора фильтров нужно читать блог Тамика. И не один раз. Иногда даже придется спрашивать, как лучще создать коллектор для своего случая. Понимание приходит постепенно.

    https://thebuildingcoder.typepad.com/blog/2015/12/quick-slow-and-linq-element-filtering.html

    40. Это предмет для холиваров. Я предпочитаю использовать генераторы, а не циклы.
    Метод list.Append() более ресурсоемкий. Цикл же считается более читабельным.

    Виталий
    Участник

    Разобрался но есть вопросы по некоторым строчкам

    18. systemName = “Подача жидкости 1” – Создаем переменную systemName и записываем в нее строку  “Подача жидкости 1”

    29. cat_list = [BuiltInCategory.OST_PipeCurves, BuiltInCategory.OST_PipeFitting] – Создаем переменную cat_list и присваиваем в ей категории через запятую первая категория трубы вторая фитинги

    32. typed_list = List[BuiltInCategory](cat_list) – читал Ваш ответ выше из списка питон переводим в список  .Net. Форма записи непонятна зачем слово или команда List (пытался прочитать как есть получается что в категорию BuiltInCategory прикрепить этот список [BuiltInCategory.OST_PipeCurves, BuiltInCategory.OST_PipeFitting]

    35. filter = ElementMulticategoryFilter(typed_list) – читал в командах АПИ – Фильтр, используемый для поиска элементов, категория которых соответствует любому из данного набора категорий. В ответах выше этот фильтр использует список .Net поэтому нужна строка 32.

    36. elements = FilteredElementCollector(doc).WherePasses(filter)\
    .WhereElementIsNotElementType().ToElements() – вообще не понял что это

    40.  z = [i for i in elements if
    i.get_Parameter(BuiltInParameter.RBS_SYSTEM_NAME_PARAM).AsString() == systemName] – В переменную z записываем только те значения которые = Подача жидкости 1

    Я попробавал сделал последную строку вот так тоже работает

    z=[]
    for i in elements:
    if i.get_Parameter(BuiltInParameter.RBS_SYSTEM_NAME_PARAM).AsString() == systemName:
    z.Add(i)

    OUT = z

    Из элементов из списка elements отфильтровываем  по параметру (RBS_SYSTEM_NAME_PARAM),AsString() превращаем в строку, которая должно равняться переменной systemName в которую записана строка “Подача жидкости 1”. В итоге в пустой список z=[] попадают  z.Add(i) те элементы для которых условие соблюдается

    На выход OUT = z ставим переменную z и получаем список труб и фитингов содержащих переменную “Подача жидкости 1”

     

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

    1. В Апи не туда сморел.
    Ты смотрел информацию о классе.
    У класса есть т.н. конструктор, который создает объекты класса.
    https://www.revitapidocs.com/2018.1/e43a304a-6931-7492-441c-3cac428f2431.htm

    В нем нас интересует вот такой конструктор:

    public ElementMulticategoryFilter(
    ICollection<BuiltInCategory> categories
    )

    Как видно, в него мы должны подать объект ICollection<BuiltInCategory>.
    И-коллекция (Итерабельная коллекция).
    A класс List<T> унаследован из ICollection, а значит, обладает точно такими же свойствами, как и Коллекция, только расширен и дополнен другими методами. Например, к списку можно обращаться по индексу, да и вообще с ним удобней работать.
    Т.е. в этот метод можно подавать любой объект, унаследованный от ИКоллекции. Я подал Лист, а так, кому как нравится))

    2. Улучщить можно скорость выполнения скрипта, если вместо генератора в 40 строке воспользоваться parameterValueProvider – методом АПИ. Тогда вся фильтрация будет проходить только в фильтр-коллекторе, что существенно увеличит скорость выбора элементов. При наличии в проекте всего 100 труб скорость сильно не изменится((

    https://oxozle.com/2015/04/01/kollekcii-v-net-ienumerable-iqueryable-icollection-ilist/

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

    Вопрос мне очень понравился. Уже ближе к сути.
    Есть понимание чем чистый Python отличаестя от IronPython?
    А тажке IronPython от С#?

    Питон с динамической типизацией. Т.е. может на лету переводить, например, число 123 в строку “123”
    соответсвенно в методы _часто_ можно запихивать практически все, что угодно, не заботясь о типе засовываемого.
    Например в функцию len() можно без явного преобразования запихнуть строку и список.
    Объявление переменных также не нужно.

    Си-Шарп требует явное объявление переменных для выделения необходимого количества памяти.

    АйронПайтон – это смесь бульдога_с_носорогом. Язык, который с помощью синтаксиса чистого питона
    может работать с системой .Net.

    Такое совмещение, к сожалению, не удалось без проблем.
    Наш вопрос со списком и типизированным списком это частный случай проблемы.

    Оказалось, что список, созданный в питоне, не соответсвует строго типизированному списку в дотНет.
    т.е. в питоне не будет ошибкой lst = [1, “123”, [1]] – список содержит любые данные.
    Список же в дотНет основан на классе List<T>.
    List<T> represents a strongly typed list of objects that can be accessed by index.

    При инициализации класса я должен явно указать что именно (какие именно типы) будут содержаться в List<T>.
    При попытке создать фильтр, метод ElementMulticategoryFilter
    ожидает, что я подам в него объект типа List<T> – жестко типизированный,
    а не объект списка, созданный посредством чистого питона.

    Поэтому я и создаю статически типизированный список List<T> с явным указанием
    того, что я хочу туда запихивать категории.

    typed_list = List[BuiltInCategory](cat_list)

    Теперь “Когда это делается?”.
    Я делаю это тогда, когда типы, которые создаются в чистом питоне, не могут быть динамически
    преобразованны в необходимый для метода тип, и, при этом, компилятор выдает ошибку.
    В нашем случае будет написана, с первого взгляда, бредовая ошибка))
    “Ожидал получить Список, а получил Список” – когда я первый раз получил такую ошибку, у меня жутко подгорело!
    А надо читать так: Ожидал получить Список из дотНета, а получил питоновский Список.

    Андрей
    Участник
    2 pts

    *****Ещё вопросы?***** Подскажите, пожалуйста, а для чего мы

    #Переводим список из языка Питон в список  .Net

    typed_list = List[BuiltInCategory](cat_list)

    В чем суть? (я понимаю, что мы это делаем для работы фильтра, но не понимаю сути – в каких случаях это делается и для чего)

    Андрей
    Участник

    Есть ли возможность сделать так, чтоб если на выходе нода оказался Empty List, то чтоб ветка скрипта существующая за ним, не выполнялась?

    ПРЕДПОЛАГАЮ в чем суть:

    Когда скрипт отрабатывает отдельно по одному типовому этажу, то все в порядке. А когда все здание одновременно, то или виснет, или закрывает Dynamo вместе с Ревитом, минут через 5 работы.

    Скрипт получает по категории экземпляры окон, дверей, стен и разделителей помещений (отдельные ветки скрипта).

    В подвале, например, нет окон – нод должен выдать ошибку желтым, что список окон пуст, а на типовых этажах есть окна и ошибки в этом же ноде не должно быть. Думаю, что это вызывает ошибку.

    Если не типовые этажи нужно прогонять скриптом по отдельности, то все работает. Например, подвал без окон – запуск, половина типовых этажей – запуск, вторая половина типовых этажей – запуск, тех.этаж – запуск, котельная (без разделителей помещений) – запуск, кровля (без окон, дверей и разделителей помещений) – запуск. По отдельности все срабатывает, выдавая просто ошибки желтым на нодах, если на выходе не получил окон, например. А все этажи вместе – не работает, сбрасывает и закрывает программу. Поэтому хочу отключать ветки скрипта для выполнения, если на выходе нода оказался Empty List.

    Ревит 2019 Dynamo 2.0.3.

    Скрипт считает площади поверхностей стен, вычитая площади проемов дверей, не вычитая дверные проемы, если они заложены кирпичом, вычитая площади проемов окон и площади создаваемые разделителем помещений

    https://drive.google.com/file/d/1yVWKPY0GJuPRILtcw_FpuTjtGr4ST2NY/view?usp=sharing

    https://drive.google.com/file/d/1WIsw9cg7I0E-p0YKWY5K4bLAsYu2qwiG/view?usp=sharing

    #9541

    В ответ на: Координаты Text Notes

    владимир
    Участник

    Спасибо, за ответ.

    Но этот вариант я уже пробовал.

    1. .Coord выкинул координаты, просто как три значения а не координаты. Данамо не распознает их как точки
    2. Если выбрать много текстов, вылетает ошибка, что у ”List” нет атрибута ”Coord”: (File “<string>”, line 10, in <module>
      AttributeError: ‘List[object]’ object has no attribute ‘Coord’)
    3. Предполагаю, что надо применить ”for” … но я не программист. Мало что в этом понимаю.
    #9510
    Ренат Я.
    Модератор
    79 pts

    смотрим список 1 если там null берем значение из списка 2, если нет из списка 1

    #9505
    Алексей
    Участник
    5 pts
    #9504
    Денис52
    Участник
    1 pt

    #9446
    Ренат Я.
    Модератор
    79 pts

    А для чего в данной задаче пайтон? Есть же стандартный нод List.GroupByKey для этой задачи

    Андрей
    Участник

    Подскажите пожалуйста, если не удается получить геометрию даже с типоразмера элемента, что это может быть?

    Не могу получить геометрию стен и геометрию загруженного семейства (FamilyInstance).

    Ноды Element.Geometry, Element.Solids, Element.Faces выдают Empty List.

    Причем, из дверей и окон солиды из типоразмеров элементов получаются легко.

    Dynamo 2.0. Ревит 2019 без обновлений, обновления установить нет возможности.
    Вот думаю, это программный глюк или ограничения координатора, или свойства семейства (отверстий) и стен такие, что не позволяют получить геометрию.

    #9394
    yuriy
    Участник
    1 pt

    Помогите собрать решение

     

    /*
    * Created by SharpDevelop.
    * User: user
    * Date: 23.08.2019
    * Time: 15:05
    *
    * To change this template use Tools | Options | Coding | Edit Standard Headers.
    */
    using System;
    using Autodesk.Revit.UI;
    using Autodesk.Revit.DB;
    using Autodesk.Revit.UI.Selection;
    using System.Collections.Generic;
    using System.Linq;

    namespace test
    {
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.DB.Macros.AddInId(“2453F3E5-7147-4793-949F-4CA4035A27B2″)]
    public partial class ThisApplication
    {
    private void Module_Startup(object sender, EventArgs e)
    {

    }

    private void Module_Shutdown(object sender, EventArgs e)
    {

    }
    public void DimText()

    {
    Document doc = this.ActiveUIDocument.Document;
    //Application app = this.Application;
    UIDocument uidoc = new UIDocument(doc);
    //Выбираес размеры
    IList<Element> elementList = uidoc.Selection.PickElementsByRectangle();

    using (Transaction t = new Transaction(doc,”Move dim text”))
    {
    t.Start();
    //проходимся по каждому размеру
    foreach (Dimension element in elementList)
    {
    //если количество сегментов больше 1 то работаем с каждым сегментом по отдельности
    if (element.NumberOfSegments>1)
    {
    foreach (DimensionSegment S in element.Segments)
    {
    data+=S.ValueString+Environment.NewLine;
    S.TextPosition=new XYZ(S.TextPosition.X+1,S.TextPosition.Y + 1, 0);
    }
    }
    //Если 1 то с самим размером
    else
    element.TextPosition=new XYZ(element.TextPosition.X+1,element.TextPosition.Y + 1, 0);
    }
    t.Commit();
    }
    }

    #region Revit Macros generated code
    private void InternalStartup()
    {
    this.Startup += new System.EventHandler(Module_Startup);
    this.Shutdown += new System.EventHandler(Module_Shutdown);
    }
    #endregion
    }
    }

     

    Выдает ошибку:

    Имя “data” отсутствует в текущем контексте (CS0103)

     

    #9327
    Анатолий
    Участник
    37 pts

    Дмитрий, в таких задачах намного удобнее было работать бы с тем файлом, в котором необходим расчет, или, конечно, с его подобием (правильным примером), иначе такие вопросы возникать и будут. Сам смоделировал две секции с разными типовыми этажами. Пытался максимально приблизить свой файл к необходимым данным поставленной задачи насколько возможно.

    На питоне мне намного проще написать код чем позволяют это сделать ноды, хотя знатоки возможно разложат все нодами быстро и правильно.

    Строчка s=i+” “+j+” “+k суммирует каждую последовательную строчку каждого списка и суммирует в одном, это видно на скрине, в первом Watch,

    [DsCore.List.UniqueItems(List)] – это нод UniqueItems на питоне.

    #9325
    Дмитрий (Dgrov)
    Участник

    Анатолий, спасибо за участие! Попытаюсь разобраться на вашем примере, хотя если бы было нодами, мне будет значительно легче )). Если я правильно понял, то вы просто вытащили по одному помещению из квартиры и сосчитали сумму. Не хватает данных – сколько у вас в расчете этажей и секций? Хорошо бы вы смоделировали хотя бы две секции с разной этажностью.

    Плохо понимаю питон, что делает строчки [s=i+” “+j+” “+k] и [DsCore.List.UniqueItems(List)]?

    И еще у вас все помещения физически раскинуты по этажам, а у нас моделируется только один этаж. За количество этажей отвечает отдельный параметр.

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