Фильтровать элементы в Revit и установить параметр - PullRequest
0 голосов
/ 04 мая 2020



Привет всем,

около двух или трех месяцев go Я начал изучать Динамо для Revit ... наконец-то:)

После изучения и тестирования Я получил несколько собственных скриптов. Затем я выучил Python, потому что я не мог создать следующий сценарий только с помощью Dynamo-Nodes.

Затем я подумал: «Давайте посмотрим, как трудно сделать что-то в виде подключаемого модуля». Я посмотрел несколько видео и прочитал много вещей. Наконец, я установил Revit-AddIn-Wizard и сделал свой первый маленький Test-PlugIn. Отлично ...

Теперь у меня есть несколько проблем, которые я не понимаю ... поэтому я решил попытать счастья здесь ... потому что я получил так много информации и помощи, читая этот сайт.

Моей целью было / является следующее: (я расскажу вам, что у меня есть сейчас)
Форма с несколькими кнопками, списками и DataGridView.
Я могу загрузить файл Excel, нажмите " Показать », чтобы отобразить его в DataGridView.
Заголовок каждой строки будет автоматически помещен в 3 комбинированных списка.
В первом комбинированном окне вы выбираете первый поисковый параметр, во втором вы МОЖЕТЕ выбрать другой поисковый параметр. а в третьем выпадающем списке вы выбираете параметр, который хотите установить.
У меня есть флажок для переключения с параметра типа на экземпляр для операции поиска и установки.
Также есть кнопка, которая показывает другая небольшая форма со списком категорий (я не буду искать ВСЕ, только почти все категории моделей).

Подключаемый модуль

Я взял много "просмотра" Видео, читай через inte rnet, тестирование, тестирование и тестирование ". Благодаря этому сайту и нескольким другим ... Мне удалось заставить весь этот плагин работать почти на 100%.

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

Во-первых ... Я просто говорю вам о своих проблемах, и, возможно, кто-то может сказать: "Это действительно проблема!" или что возможно сделать это. Тогда я бы опубликовал код.

Итак ... что мне делать?!
1. У меня есть FilteredElementCollector, который фильтрует ВСЕ элементы.
2. В зависимости от моих «флажков типа / экземпляра» я делаю .WhereElementIsElementType ИЛИ .WhereElementIsNotElementType.
3. Затем он передает MultiCategoryFilter, чтобы получить большой список только для категорий моделей.
4. Затем коллекция передает один из десяти различных "методов" в зависимости от всех настроек. Там я фильтрую эту коллекцию в зависимости от списков поиска-списков. Когда в выпадающем списке отображается «Famil ie» или «Typ», он фильтрует на «.BuiltInParameter.SymbolFamilyName» или «.Name», в противном случае он просто использует «.LookupParameter».

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

5. В зависимости от моих настроек поиска и установки (например, поиск по типу и установке экземпляра) я должен получить экземпляры из собранные типы или наоборот.
6. Затем я передаю его другому методу, где, наконец, устанавливаю параметр.

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

Теперь ... где мои проблемы?
Когда я ищу имена семейства типов или параметр экземпляра и задаю параметр типа, он работает для всех категорий без ошибок. .

1. Когда я пытаюсь установить параметр instance (не имеет значения, каковы мои параметры поиска), он работает для всех «нормальных» семейств, но не для системных семейств (например, стены, полы, трубы и т. Д.) 1062 *.). Нет ошибок, просто ничего не происходит ПОЧЕМУ? Кажется, что я не могу установить параметр экземпляра для системных семейств.

2. У крыш, лестниц, CurtainPanels и GenericModel возникают проблемы при поиске параметра типа Ошибка - это что-то вроде «Ссылка на объект не была установлена ​​на экземпляр объекта ". Только с этими 4 категориями, и не имеет значения, что я хочу установить ... но когда я ищу для family- / typeNAME или Instance-Parameter, я могу установить тип или экземпляр, и он работает (за исключением экземпляра для sysfam).

3. Когда я пытаюсь найти И установить параметр экземпляра, он работает для ВСЕХ категорий, КРОМЕ, если одна стена не содержит поискового значения ... этого действительно достаточно, чтобы ОДНА стена не имела поисковой значение параметра, что все будет отменено.

У меня есть несколько других небольших проблем ... но я надеюсь, что кто-то может помочь мне с этими проблемами ... Я был бы чрезвычайно благодарен

привет и хорошего дня или ночи :))
Филипп

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Спасибо за ваш ответ, Джереми,

, как я уже сказал, для начала неплохо, если вы не скажете: «С этими категориями действительно есть некоторые проблемы!»

Я думаю, что мне удалось создать 3 небольших примера моих проблем.
Для каждой проблемы я создал zip-файл, содержащий полную папку visual-studio, небольшой пример проекта и файл readme.txt с (надеюсь, ) достаточно информации, чтобы понять все подробно.

Задача1

Задача3

Вам нужно только скомпилировать или скопировать Файлы .addin и .ddl в папку Revit AddIn. Затем вы получаете новые ленты.

Краткое описание проблемы = У меня возникают проблемы при поиске значений параметров и задании значений для другого параметра.

Редактировать: Я только что 2. решил проблему при поиске фамилий и установив параметр system-семейства.
Я использовал:

ElementClassFilter ecf = new ElementClassFilter(typeof(FamilyInstance));    
FilteredElementColletor colle2 = new FilteredElementCollector(doc);
colle2.WherePasses(ecf);

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

FilteredElementCollector colle2 = new FilteredElementCollector(doc);
colle2.WhereElementIsNotElementType();

Проблема 1. и 3. все еще существует: /

Я был бы благодарен за любую помощь, которую кто-то может оказать:)

0 голосов
/ 04 мая 2020

Tl; др.

Три описанные вами проблемы звучат как ваши собственные. Я не слышал, чтобы кто-нибудь еще задавал три отдельных вопроса и предоставил три отдельных минимальных фрагмента кода, описывающих их возникновение. в тех. Я предлагаю вам создать три отдельных независимых минимально воспроизводимых случая , чтобы продемонстрировать все три проблемы. Скорее всего, когда вы упростите и минимизируете свой код, проблема исчезнет. Если это не так, возможно, он просто находится в небольшом и достаточно управляемом состоянии, чтобы другие люди могли помочь вам взглянуть на него. Учитывая многословное описание выше, никто в мире не может вам помочь.

...