Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RevitAxonometryViews: Создан плагин #80

Merged
merged 64 commits into from
Sep 6, 2024

Conversation

Redomine
Copy link
Contributor

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

Возможности:

  1. Создание видов систем по одной штуке с уникальным фильтром
  2. Создание комбинированных видов для нескольких систем

Фильтрация может проходить параметрам "Имя системы" или "ФОП_ВИС_Имя системы"

@Redomine Redomine self-assigned this Aug 28, 2024
Copy link
Member

@dosymep dosymep left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Универсальный фильтр по обоим полям
  • Критерий фильтрации делаем комбобоксом в явном виде
  • галочку комбинировать рядом с комбобоксом
  • RevitPlugins привести GUI к одному cтандарту и инициализацию
  • Разрешить растягивать окно

src/RevitAxonometryViews/Models/AxonometryConfig.cs Outdated Show resolved Hide resolved
src/RevitAxonometryViews/Models/AxonometryConfig.cs Outdated Show resolved Hide resolved
src/RevitAxonometryViews/Models/CollectorOperator.cs Outdated Show resolved Hide resolved
src/RevitAxonometryViews/Models/RevitRepository.cs Outdated Show resolved Hide resolved
src/RevitAxonometryViews/Models/RevitRepository.cs Outdated Show resolved Hide resolved
src/RevitAxonometryViews/RevitAxonometryViewsCommand.cs Outdated Show resolved Hide resolved
src/RevitAxonometryViews/ViewModels/HvacSystemViewModel.cs Outdated Show resolved Hide resolved
src/RevitAxonometryViews/ViewModels/MainViewModel.cs Outdated Show resolved Hide resolved
src/RevitAxonometryViews/Views/MainWindow.xaml Outdated Show resolved Hide resolved
@vlastroG vlastroG self-requested a review September 4, 2024 13:47
Copy link
Contributor

@vlastroG vlastroG left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MainViewModel:
На активный вид надо проверять сразу перед запуском плагина, где у тебя проверка на документ семейства. Сейчас, если жмакнуть галочки и нажать отмену, ревит упададет из-за того, что после уничтожения RevitRepository после закрытия окна попытается выполнить метод CanCreateViews, который дергает свойство ActiveUIDocument уже умершего RevitRepository.
Не используй конструктор new RelayCommand. Используй фабричный метод RelayCommand.Create. Также есть типизированная перегрузка RelayCommand.Create, где T - тип параметра, передаваемого в метод команды (твой HeaderClick). И соответственно сразу можно сделать строковый параметр (HeaderClick(string columnName)).
Метод RaiseAndSetIfChanged уже внутри себя проверяет, что новое значение не равно текущему значению, и только если не равно, то назначает это новое значение полю. Поэтому твои проверки value не нужны.
FilteredView можешь сделать не List, а ObservableCollection и при смене фильтра очищать его и заполнять объектами из твоего _hvacSystems, удовлетворяющими фильтру. Тип самого поля _hvacSystems лучше сделать не List, а IReadonlyCollection, т.к. ты его только читаешь.
https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.objectmodel.readonlycollection-1?view=netframework-4.8
https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.generic.ireadonlycollection-1?view=netframework-4.8
Свойство FilterCriterion у тебя назначается один раз при старте окна и больше не меняется. Его можно сделать обычным массивом строк и оставить только геттер, а лучше сделать также IReadOnlyCollection и задать значение по умолчанию с твоими двумя параметрами. set не нужен ему.

HvacSystemViewModel:
Т.к. свойства SystemName и SharedName использются только для чтения и устанавливаются в конструкторе, лучше оставить только get и убрать set.

AxonometryConfig:
Добавь его в контейнер kernel как и остальные классы, чтобы не вызывать конструктор самому. Чтобы передать Document ему можно использовать несколько методов из ninject, например WithConstructorArgument
SystemCategories у тебя сейчас это статическое публичное поле с типом List. Такое комбо делат не надо. Сделай публичное свойство доступное только для чтения (только get) с типом IReadonlyCollection. И чтобы это свойство не создавало каждый раз при get коллекцию, сделать приватное поле с тем же типом IReadonlyCollection, в котором ты будешь хранить саму, а свойство будет возвращать ссылку на это поле.

CollectorOperator:
Методы расширения лучше сделать обычными методами и весь класс сделать не статическим, а обычным. И зарегистрировать его в kernel и использовать как сервис.
Вместо явных типов параметров методов и возвращаемых типов (List) лучше писать интерфейсы. В текущей реализации тебе спокойно подойдет ICollection на вход и IList для возвращаемого типа.

CreationViewRules:
у категории сразу можно взять category.Id. Не зачем делать new ElementId(category.GetBuiltInCategory())
Тип свойства Cagtegories можно мпоменять на ICollection

RevitRepository:
Имеет смысл в методе GetSharedSystemName принимать на вход не Element, а родительский класс систем MEPSystem. Соответственно в том месте, где ты вызываешь этот метод, надо будет кастить Element к этому MEPSystem через LINQ - посмотри методы OfType, Cast.

ViewFactory:
Можно добавить в контейнер kernel и использовать как сервис.
Строковые литералы лучше вынести в приватные константы класса.

MainWindow:
Думаю, будет хорошо добавить сортировку сразу при смене названия параметра в комбобоксе.
Смену сортировки по возрастанию/убыванию по клику на название столбца сейчас можно сделать, если сначала кликнуть на заголовок одного столбца, потом на заголовок другого. Возможно проще перейти на DataGrid для реализации сортировки. Внешний вид его можно настроить, чтобы он был похож на ListView.
Следует добавить минимальные/максимальные значения для ширины столбцов.
Надо подправить стиль кода xaml: каждое свойство на отдельной строке, скобки тэгов (">", "/>") не переносить по строкам.
Высоту кнопок "ОК", "Отмена" сделай как в остальных плагинах в платформе (25 пикселей)

Также надо удалить файлы локализации, или перейти полностью на них, реализовав локализацию ru-RU и en-US.

… равно текущему значению, и только если не равно, то назначает это новое значение полю. Убираю проверки на равенство value
@vlastroG vlastroG self-requested a review September 6, 2024 10:12
@Redomine Redomine requested a review from dosymep September 6, 2024 10:17
@dosymep dosymep merged commit 2d03417 into master Sep 6, 2024
3 checks passed
@dosymep dosymep deleted the Redomine/RevitAxonometryViews branch September 6, 2024 12:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants