Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
68f96d7
Добавлен плагин RevitPackageDocumentation
Apr 30, 2026
2a9acae
Добавлены файлы основных классов VM
May 4, 2026
c943e44
Реализована система импорта и экспорта конфигураций
May 7, 2026
e01cd65
Изменен способ биндинга сериализатора
May 7, 2026
88a0a78
Изменен способ биндинга SheetComponentConverter
May 7, 2026
bba4b73
В SheetComponentData добавлено свойство Name
May 8, 2026
486ae05
Добавлена фабрика по получению DTO
May 12, 2026
1fe580d
Настроен тестовый интерфейс
May 12, 2026
f6c8438
Реализованы тестовые функции создания листа и модуля
May 12, 2026
6b8cef0
Реализовано сохранение пути, функции добавления и удаления листов
May 12, 2026
c2e0bd4
Изменен XAML, добавлены поля имени конфигурации
May 12, 2026
6fb5288
Реализован тестовый подход с различным отображением полиморфных классов
May 12, 2026
09b8875
Добавлены контролы для листа и компонента листа
May 13, 2026
31d38cc
Изменена структура хранения контролов
May 13, 2026
b534c53
Добавлены функции добавления и удаления компонентов листа
May 13, 2026
3ced900
Настроен импорт экспорт модулей плана и спеки
May 13, 2026
f291b67
DataTemplates вынесены в отдельный файл ресурсов
May 13, 2026
dc1ba85
Настроена получение списка шаблонов и типов вида в плане
May 13, 2026
ea7e97f
Реализовано получение, импорт, экспорт значений типов видового экрана
May 14, 2026
5844955
Добавили модуль сечений
May 14, 2026
6525de1
Добавлена возможность добавлять любые компоненты
May 14, 2026
8c38741
Изменены кнопки добавления листа и компонента листа
May 14, 2026
7551bfd
Настроен модуль для текста
May 14, 2026
5ffc533
Добавлен модуль типовой аннотации
May 15, 2026
7a83674
Добавлен модуль легенды
May 15, 2026
6ee1423
Добавлен модуль фрагмента
May 15, 2026
92e7a53
План и фрагмент переименованы в Structural
May 15, 2026
c66db8c
Добавлены проверки на ошибки в модулях
May 15, 2026
612acab
Добавлены свойства листа
May 15, 2026
ac20066
Добавлены параметры листа
May 15, 2026
a4263b1
Отредактирован интерфейс
May 15, 2026
8cea6cf
Добавлены параметры конфигурации
May 18, 2026
3b951e5
Добавлена возможность добавления параметров через ComboBox
May 18, 2026
c117355
Добавлена функция редактирования у ParamItemControl
May 18, 2026
ce216ea
Добавлена команда для выбора элемента для параметра конфигурации
May 19, 2026
6a2de2e
Команды добавления и удаления листа перенесены на SheetSetVM
May 19, 2026
7a98d44
Команды добавления и удаления компонента перенесены в SheetVM
May 19, 2026
f6532cb
Изменен контрол параметра. Команда добавления параметра к конфигураци…
May 19, 2026
161cace
Команда удаления параметра конфигурации перенесена в SheetSetVM
May 19, 2026
04fdca0
Функционал по выбору элементов в Revit вынесен в отдельный класс
May 20, 2026
6171034
Реализованы функции по созданию листов
May 20, 2026
59cb529
Добавлен функционал по созданию и размещению плана
May 21, 2026
ca5985a
Добавлен функционал по созданию сечения
May 21, 2026
4e50ead
Реализован функционал по размещению сечений на листе
May 21, 2026
42079d2
TextBox у ViewCount заменен на ui:NumberBox
May 21, 2026
c209b48
Добавлен функционал по созданию спецификации и добавлению на лист
May 22, 2026
634f408
TextBox выбора спеки для дублирования заменен на ComboBox
May 22, 2026
74a785f
Реализовано получение полей для фильтрации в спеке
May 25, 2026
4caf796
Добавлен функционал по добавлению и удалению фильтров в XAML
May 25, 2026
57b2814
Добавлена локализация типов, введена оболочка над правилом фильтра
May 25, 2026
e4f816a
Реализован экспорт и импорт фильтров спецификаций
May 26, 2026
a181574
Изменен подход хранения типа фильтра
May 26, 2026
e93822b
Добавлен функционал по добавлению фильтров в спеке
May 27, 2026
5734cca
Добавлен функционал по размещению текста
May 27, 2026
237d800
Добавлен функционал по размещению типовой аннотации
May 27, 2026
f40c9d5
Добавлен функционал по размещению легенд
May 27, 2026
6e25a45
Добавлен функционал по созданию фрагмента плана
May 27, 2026
b6d771c
Добавлен функционал по добавлению видовых экранов фрагментов
May 27, 2026
7317bf9
Изменено отображение ошибок на TextBox с PlaceholderText
May 27, 2026
e7df6c2
Добавлен режим редактирования для контрола параметра
May 27, 2026
dbd93cd
Добавлена проверка имен и значений параметров конфигурации
May 28, 2026
bd76f2e
Добавлены проверки на ошибки на уровень конфигурации
May 28, 2026
c827638
Добавлена запись типа компонента листа
May 29, 2026
c984d7a
Исправлено добавление компонента спецификации на лист
May 29, 2026
2c695af
Добавлен тестовый подход по связыванию параметров конфигурации с имен…
May 29, 2026
a7e45a9
Свойство SheetName заменено на SheetNameFormula
May 29, 2026
d58b258
Реализован тестовый функционал по записи значения на основе формулы
May 29, 2026
707e76c
Выведен сервис по обновлению значений свойства по формуле
May 29, 2026
f4e5d5e
Добавили функционал при изменении имени параметра конфигурации
May 29, 2026
ceafce4
Добавили функционал при изменении значения параметра конфигурации
May 29, 2026
e687fe2
Добавлен функционал по формульному имени в модуле плана
Jun 1, 2026
cc3da22
Добавлен контрол для текста с формульным вводом и демо текстом
Jun 1, 2026
f74af81
Функционал с формульным именем добавлен к модулям спеки, сечения, фра…
Jun 1, 2026
82c9b39
Добавлен функционал скрытия демо значения при формульном вводе
Jun 1, 2026
bd0dc01
Изменен XAML отображения свойств листа
Jun 1, 2026
9ec3896
Добавлен функционал выбора параметров конфигурации в компонентах листа
Jun 2, 2026
aea5f24
Отредактирован функционал при удалении параметра выбора
Jun 2, 2026
c518456
Удалено хранение окна в MVM
Jun 2, 2026
4d6bfc0
Добавлена возможность писать через формулу в параметре пустое значение
Jun 2, 2026
e94e511
Добавлена проверка фильтров модуля спецификаций
Jun 2, 2026
c52f0a9
Добавлен функционал по работе с дополнительными параметрами для модул…
Jun 2, 2026
3981aae
Добавлен визуал под функцию дополнительных параметров с формулой для …
Jun 3, 2026
70e3ad6
Добавлен функционал назначения дополнительных параметров модулям комп…
Jun 3, 2026
039a865
Добавлен функционал сохранения дополнительных параметров
Jun 3, 2026
89b971b
Добавлен функционал формульного ввода значения фильтра модуля спек
Jun 3, 2026
20c5d6b
Добавлена проверка возможности записи дополнительного параметра
Jun 3, 2026
e276f38
Изменен подход к назначению номер вида на листе для планов
Jun 3, 2026
24e683e
Изменен подход к назначению номер вида на листе для сечений и фрагментов
Jun 3, 2026
114868a
Добавлен функционал по поиску самого правого видового экрана по типу
Jun 4, 2026
411a2a0
Добавлен функционал по размещению нескольких планов на листе
Jun 4, 2026
b8d9288
Добавлен функционал обновления дополнительных параметров при изменени…
Jun 4, 2026
dce67b6
Обновлен FormulaTextBoxControl для выполнения проверки показа результ…
Jun 4, 2026
1791593
Добавлен функционал дополнительных параметров листа
Jun 5, 2026
2b79b97
Добавлен стиль для скрытия текста ошибки если ошибки нет
Jun 8, 2026
210f36e
Реализована логика получения фильтров при выборе спецификации для коп…
Jun 8, 2026
4ab64f3
Доработан алгоритм размещения спек на листе по колонкам
Jun 10, 2026
a43f63d
Исправлен алгоритм обновления формульных полей при изменении текстово…
Jun 10, 2026
2690b35
Добавлены стили для блокирования полей выбранного листа
Jun 10, 2026
789ec00
Добавлена возможность задавать стиль в FormulaTextBoxControl
Jun 10, 2026
4d70c3a
Реализован функционал моментальной генерации
Jun 11, 2026
39c88b2
Исправлен механизм восстановления листов и компонентов в части формул…
Jun 11, 2026
03c3fce
Изменена схема раскладки в xaml
Jun 11, 2026
b7f6640
Добавлена промежуточная VM между SheetSet и параметрами
Jun 11, 2026
c0bf33f
Классы параметров конфигурации перенесены в папку в соответствии со с…
Jun 11, 2026
7cab45b
Функционал проверки параметров перенесен в SheetSetParametersListVM
Jun 11, 2026
ec4eca8
Изменен подход получения списка типов видовых экранов
Jun 11, 2026
3b40409
Отсортирован список типов модулей компонентов листа для добавления
Jun 15, 2026
cb0038b
Добавлена возможность в модуле текста писать многострочный текст
Jun 15, 2026
62865bd
Добавлен Expander в свойства листа. Добавлен Extension для UniformGrid
Jun 15, 2026
21f8508
Применен UniformGridExtensions к панели свойств листа
Jun 15, 2026
7e875f6
Добавлены комментарии к UniformGridExtensions
Jun 15, 2026
d80b915
Обновлен DerivedTemplate у вида в плане, фрагмента и сечения. Изменен…
Jun 16, 2026
a9a5cc5
Обновлен DerivedTemplate у легенды, текста и типовой аннотации
Jun 16, 2026
15cff21
Обновлен DerivedTemplate у спецификации
Jun 16, 2026
ddceddd
Отредактированы размеры кнопок
Jun 18, 2026
d0ce358
Изменена кисть выбранной строки LisBox. Изменена кисть ошибки парамет…
Jun 18, 2026
be70f4e
Добавили проверку на одинаковые имена видов
Jun 18, 2026
80e0e4c
Создан контрол фильтрационного ComboBox для теста
Jun 19, 2026
4486775
Реализовано функционирующее решение фильтрационного ComboBox
Jun 22, 2026
d1cfc21
Добавлены комментарии в файлы фильтрующего ComboBox. Реализован выбор…
Jun 22, 2026
575cfb8
В фильтрационном ComboBox применен формульный ввод фильтров
Jun 22, 2026
94ab503
Фильтрационный ComboBox переведен на подписку на события изменения па…
Jun 23, 2026
f00ae64
Фильтрационный ComboBox применен к StructuralPlanView
Jun 23, 2026
ca1247c
Фильтрационный ComboBox применен к StructuralCalloutView и SectionView
Jun 23, 2026
0c21327
Фильтрационный ComboBox применен к ScheduleView и LegendView
Jun 23, 2026
bc77872
Фильтрационный ComboBox применен к TextNote и TypicalAnnotation
Jun 23, 2026
93ad817
Исправлено создание VM для списка параметров конфигурации
Jun 24, 2026
2666e23
Добавлен метод по созданию SheetSetData по умолчанию
Jun 25, 2026
88c2cae
Добавлена проверка уже размещенного вида спецификации и текстового пр…
Jun 25, 2026
6cf9394
Выполнена сортировка типов видов планов, сечений, выдовых экранов и л…
Jun 26, 2026
34c16a9
План несущих конструкций заменен на обычный план
Jun 29, 2026
472a713
Добавлен функционал по фильтрации в спеках через рабочие наборы
Jun 29, 2026
7e2ca5a
Создал промежуточный абстрактный класс модуля, который наследуют лист…
Jun 29, 2026
4dd5c47
Добавлен класс ValidatableVM как базовый. Добавлены атрибуты для Shee…
Jul 3, 2026
c087b81
Добавлены атрибуты валидации к PlanViewVM
Jul 3, 2026
3af3f6c
Реализована проверка SelectedSelectElemParam в PlanViewVM через атриб…
Jul 3, 2026
e629f64
Реализована проверка CustomParamsList в BaseParamContainerVM через ат…
Jul 4, 2026
fe33667
Реализована проверка через атрибуты в SectionViewVM и CalloutViewVM
Jul 4, 2026
c6e1770
Реализована проверка через атрибуты в LegendViewVM и ScheduleViewVM
Jul 4, 2026
4024ee5
Реализована проверка через атрибуты в TextNoteVM и TypicalAnnotationVM
Jul 5, 2026
768931b
В компоненте типовой аннотации убрал выбор семейства
Jul 5, 2026
a6597ce
Исправлен контрол CustomParamItemControl
Jul 6, 2026
371cfb0
Изменен фильтрационный ComboBox для отображения ошибок
Jul 6, 2026
bfcb6a6
Добавлен стиль для отображения с ошибкой для NumberBox
Jul 6, 2026
9d9217e
Настроен SpecFilterItemControl для отображения ошибок валидации
Jul 6, 2026
3c720c9
В CustomParamItem добавлено свойство зависимости для стиля TextBox
Jul 6, 2026
59336b2
Добавлена проверка на одинаковые имена параметров комплекта
Jul 6, 2026
e57da00
Изменена высота позиционирования текста на листе
Jul 6, 2026
865ad7b
Изменен алгоритм работы с правилом фильтров спек имеет значение
Jul 6, 2026
b71da88
Выполнена локализация xaml. Добавлен LocalizedExtension
Jul 7, 2026
6aae8e2
Выполнена локализация VM и моделей
Jul 7, 2026
8f59dae
Добавлена английская локализация
Jul 7, 2026
050d64a
Изменено расположение текста и элементов ComboBox выбора элементов дл…
Jul 7, 2026
ede169d
Заблокирована возможность добавлять компоненты на лист до его выбора
Jul 7, 2026
881ca8a
Сервис диалогового окна для JSON заменен на стандартный из dosymep
Jul 7, 2026
6addee0
В SheetSetDataFactory добавлены ?. для избежания NRE. Исправлен метод…
Jul 8, 2026
b195fbd
Изменен метод проверки возможности размещения спецификации на листе
Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .github/workflows/publish.RevitPackageDocumentation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: publish RevitPackageDocumentation

on:
workflow_dispatch:
pull_request:
types: [ closed, synchronize, review_requested ]
branches: [ main, master ]
paths:
- '**RevitPackageDocumentation**.cs'
- '**RevitPackageDocumentation**.xaml'

env:
plugin-name: "RevitPackageDocumentation"

jobs:
build:
name: build
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

# Install the .NET workload
- name: Install .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x

- name: Run './build.cmd '
run: ./build.cmd publish --profile ${{ env.plugin-name }} --pull-request-merged ${{ github.event.pull_request.merged }} --extensions-app-token ${{ secrets.EXTENSIONS_APP_TOKEN }} --revit-plugins-app-token ${{ secrets.REVIT_PLUGINS_APP_TOKEN }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
15 changes: 15 additions & 0 deletions .nuke/parameters.RevitPackageDocumentation.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"$schema": "./build.schema.json",
"Solution": "RevitPlugins.slnx",
"PluginName": "RevitPackageDocumentation",
"PublishDirectory": "03.KR.extension\\КР.tab\\bin",
"RevitVersions": [
"Rv2022",
"Rv2023",
"Rv2024"
],
"IconUrl": "https://icons8.com/icon/RmqYpunlNguf/selective-highlighting",
"BundleName": "Документация комплекта",
"BundleType": "InvokeButton",
"BundleOutput": "03.KR.extension\\КР.tab\\Документация.panel"
}
3 changes: 3 additions & 0 deletions RevitPlugins.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,9 @@
<Project Path="src/RevitOverridingGraphicsInViews/RevitOverridingGraphicsInViews.csproj">
<Platform Project="x64" />
</Project>
<Project Path="src/RevitPackageDocumentation/RevitPackageDocumentation.csproj">
<Platform Project="x64" />
</Project>
<Project Path="src/RevitParamsChecker/RevitParamsChecker.csproj">
<Platform Project="x64" />
</Project>
Expand Down
12 changes: 12 additions & 0 deletions src/RevitPackageDocumentation/Models/ComponentTypeItem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;

namespace RevitPackageDocumentation.Models;
public class ComponentTypeItem {
public Type ComponentType { get; set; }
public string DisplayName { get; set; }

public ComponentTypeItem(Type type, string displayName) {
ComponentType = type;
DisplayName = displayName;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using System;

using dosymep.SimpleServices;

using pyRevitLabs.Json;
using pyRevitLabs.Json.Linq;

namespace RevitPackageDocumentation.Models.ConfigSerializer;

/// <summary>
/// Конвертер для полиморфной десериализации параметров плагина
/// </summary>
public class PluginParamConverter : JsonConverter {
private readonly ILocalizationService _localizationService;

private const string _pluginParamTypeProperty = "PluginParamType";
private const string _stringParamType = "StringParam";
private const string _selectElemParamType = "SelectElem";

public PluginParamConverter(ILocalizationService localizationService) {
_localizationService = localizationService;
}

public override bool CanConvert(Type objectType) {
return objectType == typeof(PluginParamData);
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
var jObject = JObject.Load(reader);
var paramType = jObject[_pluginParamTypeProperty]?.Value<string>();

if(string.IsNullOrEmpty(paramType))
throw new JsonSerializationException(
$"{_localizationService.GetLocalizedString("MainViewModel.Property")} '{_pluginParamTypeProperty}' " +
$"{_localizationService.GetLocalizedString("MainViewModel.NotFoundInJSON")}");

try {
return paramType switch {
_stringParamType => jObject.ToObject<StringParamData>(serializer),
_selectElemParamType => jObject.ToObject<SelectElemParamData>(serializer),
_ => throw new NotSupportedException(
$"{_localizationService.GetLocalizedString("MainViewModel.UnknownPluginParamType")}: {paramType}")
};
} catch(Exception ex) {
throw new JsonSerializationException(
$"{_localizationService.GetLocalizedString("MainViewModel.ErrorDeserializingType")} '{paramType}'", ex);
}
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
serializer.Serialize(writer, value);
}

public override bool CanWrite => true;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using System;

using dosymep.SimpleServices;

using pyRevitLabs.Json;
using pyRevitLabs.Json.Linq;

namespace RevitPackageDocumentation.Models.ConfigSerializer;

/// <summary>
/// Конвертер для полиморфной десериализации компонентов листа
/// </summary>
public class SheetComponentConverter : JsonConverter {
private readonly ILocalizationService _localizationService;

private const string _componentTypeProperty = "ComponentType";
private const string _structuralPlanViewType = "PlanView";
private const string _structuralCalloutViewType = "CalloutView";
private const string _sectionViewType = "SectionView";
private const string _scheduleViewType = "ScheduleView";
private const string _textNoteType = "TextNote";
private const string _typicalAnnotationType = "TypicalAnnotation";
private const string _legendViewType = "LegendView";

public SheetComponentConverter(ILocalizationService localizationService) {
_localizationService = localizationService;
}

public override bool CanConvert(Type objectType) {
return objectType == typeof(SheetComponentData);
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
var jObject = JObject.Load(reader);
var componentType = jObject[_componentTypeProperty]?.Value<string>();

if(string.IsNullOrEmpty(componentType))
throw new JsonSerializationException(
$"{_localizationService.GetLocalizedString("MainViewModel.Property")} '{_componentTypeProperty}' " +
$"{_localizationService.GetLocalizedString("MainViewModel.NotFoundInJSON")}");

try {
return componentType switch {
_structuralPlanViewType => jObject.ToObject<PlanViewData>(serializer),
_structuralCalloutViewType => jObject.ToObject<CalloutViewData>(serializer),
_sectionViewType => jObject.ToObject<SectionViewData>(serializer),
_scheduleViewType => jObject.ToObject<ScheduleViewData>(serializer),
_textNoteType => jObject.ToObject<TextNoteData>(serializer),
_typicalAnnotationType => jObject.ToObject<TypicalAnnotationData>(serializer),
_legendViewType => jObject.ToObject<LegendViewData>(serializer),
_ => throw new NotSupportedException(
$"{_localizationService.GetLocalizedString("MainViewModel.UnknownComponentType")}: {componentType}")
};
} catch(Exception ex) {
throw new JsonSerializationException(
$"{_localizationService.GetLocalizedString("MainViewModel.ErrorDeserializingType")} '{componentType}'", ex);
}
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
serializer.Serialize(writer, value);
}

public override bool CanWrite => true;
}
Loading
Loading