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

RevitMechanicalSpecification: Создан плагин #86

Merged
merged 80 commits into from
Oct 2, 2024
Merged
Show file tree
Hide file tree
Changes from 57 commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
ee37b91
Создан новый плагин RevitMechanicalSpecification
Redomine Jul 16, 2024
c0562dc
Собрал шаблон плагина, зачистил от ненужных вещей
Redomine Jul 16, 2024
fcbc974
Добавил сбор стандартных систем, потом буду в филлерах парсить через …
Redomine Jul 18, 2024
e96f38f
Добавил класс-сборщик конфигураций
Redomine Jul 19, 2024
5087b0d
Добавляем стандартные филлеры
Redomine Jul 19, 2024
a3c8a30
Расшриряем конфиг описанием всех текстовых параметров
Redomine Jul 19, 2024
af27c21
Правка опечатки
Redomine Jul 19, 2024
21a4ce2
Доработаны стартовые филлеры, марка, код, завод
Redomine Jul 22, 2024
bf7f0e1
Добавил примитивный конвертер величин и предварительный калькулятор п…
Redomine Jul 23, 2024
0d99481
Добавил филлеры числа
Redomine Jul 23, 2024
8812078
Добавил филлер имени в первом приближении
Redomine Jul 24, 2024
9a6a76b
Исправление замечаний Олжаса
Redomine Jul 25, 2024
b1d3720
В первом приблежении генерируем имена фитингов воздуховодов
Redomine Jul 25, 2024
eef8373
Добавлен филлер группы
Redomine Jul 26, 2024
86ab2c0
Первая версия обработки узлов готова
Redomine Jul 30, 2024
0b72aa4
Замена на константы
Redomine Jul 30, 2024
ab391be
Оптимизация кода
Redomine Jul 30, 2024
4e3abfb
Узлы переведены в основной цикл
Redomine Aug 1, 2024
51e6928
Вычитка кода, оптимизация, правка по стилю
Redomine Aug 2, 2024
f1d82c1
Выделил три отдельные кнопки, по образцу основоного плагина
Redomine Aug 5, 2024
3b6c0f1
Вынес многократно нужную операцию получения value из типа или экземпл…
Redomine Aug 6, 2024
f6de7c0
Доделал реплейсер масок
Redomine Aug 6, 2024
3966e82
Вычитка кода, добавляем статические классы, switch-case туда где мног…
Redomine Aug 9, 2024
7fa4e23
Вычитка кода
Redomine Aug 9, 2024
4a9ac32
Добавил обработку числа вложенных элементов в узел
Redomine Aug 12, 2024
3bf9579
Вынес сформировать имя в отдельную кнопку(дублируется в филлерах)
Redomine Aug 12, 2024
8f5cd26
Вычитка кода перед проверкой
Redomine Aug 13, 2024
87ff13f
Вычитка кода перед проверкой
Redomine Aug 13, 2024
a180bc7
Переделал конвертер на внутренние величины
Redomine Aug 13, 2024
40c4f58
Переделал юнит конвертер, не в ту сторону конвертил, и площадь фитинг…
Redomine Aug 13, 2024
af21773
Переработал принудительную функцию. Все же нужно оставить общую на пр…
Redomine Aug 15, 2024
b795dc6
Добавляем принудительное глобальное имя
Redomine Aug 15, 2024
8ac7a4b
Добавляем параметры отдельных запасов изоляций
Redomine Aug 16, 2024
aec7e7b
Добавил использование запасов
Redomine Aug 16, 2024
9fad034
Первая ревизия проверки параметров
Redomine Aug 28, 2024
137dee2
Смерджился с актуальным мастером
Redomine Sep 12, 2024
9087e72
Revert "Первая ревизия проверки параметров"
Redomine Sep 12, 2024
c3a9474
Мерджимся с актуальным мастером
Redomine Sep 12, 2024
21b7ede
Переносим параметры на платформенные
Redomine Sep 12, 2024
9153494
Добавляем параметры в случае их отсутствия
Redomine Sep 12, 2024
6457cb2
Вычитка кода
Redomine Sep 13, 2024
cd6920d
Вычитка кода, раскидываем саммари
Redomine Sep 13, 2024
8e25b54
Навел порядок в базовом филлере, разнес поля и свойства, разбиваю ком…
Redomine Sep 13, 2024
0e17e9e
Переводим все входные данные на SpecificationElement
Redomine Sep 16, 2024
d7355ff
Вычитка, раскомментирование
Redomine Sep 17, 2024
5e7f9fe
Вычитка кода
Redomine Sep 17, 2024
7a32368
Раскомментированы все участки кода
Redomine Sep 17, 2024
ed5b650
Вычитка кода
Redomine Sep 17, 2024
d615cb5
Вычитка кода
Redomine Sep 17, 2024
ea244bf
Вычитка кода
Redomine Sep 17, 2024
344022e
Теперь нужные мне параметры проверяются на стандартное значение
Redomine Sep 18, 2024
f67dc6e
Вычитка кода
Redomine Sep 18, 2024
38f0019
Поправил сортировку для узлов, вычитка кода
Redomine Sep 18, 2024
8b75ddb
Поправил проверку на редактирование, чтоб имя добавлялось один раз
Redomine Sep 19, 2024
55bc290
Вычитка кода
Redomine Sep 19, 2024
5c53cf5
Добавил описание проекта.
Redomine Sep 19, 2024
7176604
Добавление пропущенных параметров.
Redomine Sep 19, 2024
e2b7c0e
Наводим порядок в именах методов
Redomine Sep 23, 2024
3cf4fc6
Заменяем проверки на проверки из платформы
Redomine Sep 23, 2024
e3fb1f5
В базовом филлере вместо OriginalParam начинаем работать с значением …
Redomine Sep 24, 2024
963d06b
Упрощаем форму записи в филлере группы
Redomine Sep 25, 2024
140b5bf
get_Parameter заменяем на GetParam
Redomine Sep 25, 2024
e68ed92
Вынес список линейных элеменов в поле
Redomine Sep 25, 2024
dd45aea
Сравниваем строки без смены регистра
Redomine Sep 25, 2024
68c9a73
Возможные категории генерика вынес в поле
Redomine Sep 25, 2024
c71f0db
Часть полей убрана в ридонли
Redomine Sep 25, 2024
3e1ea2e
Актуализировано имя фильтра
Redomine Sep 25, 2024
5172d6a
Убираем остатки Lookup
Redomine Sep 25, 2024
4432ddb
Защищаемся от NRE
Redomine Sep 25, 2024
3846d23
Вынес процессинг элементов в отдельный класс, монолитный список элеме…
Redomine Sep 25, 2024
d18c234
Доработал группирование, элементы узла снова нормально цепляют матери…
Redomine Sep 25, 2024
bb8714f
Вычитка кода, комментарии
Redomine Sep 25, 2024
14afecb
GetSharedParam не давал срабатывать замене параметров, если это парам…
Redomine Sep 25, 2024
5a18c8a
Добавил обработку лотков.
Redomine Sep 25, 2024
8cb20d3
Добавлены обработки кабельных лотков и культуры в юнит конвертер
Redomine Sep 27, 2024
475346e
Выявлен упущенный параметр на экономическую функцию, добавлен забор п…
Redomine Oct 1, 2024
df055a6
Поправил логику определения одиночных элементов
Redomine Oct 2, 2024
177c4d5
Добавил конвертацию в мм в определении размеров воздуховодов
Redomine Oct 2, 2024
d17c291
Не очень красивая ситуация с принудительной функцией. Получается что …
Redomine Oct 2, 2024
4fa0dfe
Вычитка кода
Redomine Oct 2, 2024
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
37 changes: 37 additions & 0 deletions .github/workflows/publish.RevitMechanicalSpecification.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: publish RevitMechanicalSpecification

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

env:
plugin-name: "RevitMechanicalSpecification"

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

# Add DevExrepress package source: https://nuget.devexpress.com/
- name: Add DevExpress package source
run: dotnet nuget add source https://nuget.devexpress.com/api -n DXFeed -u DevExpress -p ${{ secrets.DEVEXPRESS_FEED_AUTHORIZATION_KEY }}

- 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.RevitMechanicalSpecification.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"$schema": "./build.schema.json",
"Solution": "RevitPlugins.sln",
"PluginName": "RevitMechanicalSpecification",
"PublishDirectory": "04.OV-VK.extension\\ОВиВК.tab\\bin",
"RevitVersions": [
"Rv2022",
"Rv2023",
"Rv2024"
],
"IconUrl": "https://icons8.ru/icon/gAUDhWVcYLgj/list-of-specification-of-engineering-material-guide-template-format",
"BundleName": "Обновить спецификацию",
"BundleType": "InvokeButton",
"BundleOutput": "04.OV-VK.extension\\ОВиВК.tab\\Спецификация Test.panel"
}
16 changes: 16 additions & 0 deletions RevitPlugins.sln
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RevitReinforcementCoefficie
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RevitApartmentPlans", "src\RevitApartmentPlans\RevitApartmentPlans.csproj", "{C2BD63D9-4E08-4DBC-8945-1495D92E1A7B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RevitMechanicalSpecification", "src\RevitMechanicalSpecification\RevitMechanicalSpecification.csproj", "{270861C2-4C25-4433-84DF-533517155685}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RevitDeclarations", "src\RevitDeclarations\RevitDeclarations.csproj", "{34158D77-41CE-47FE-ADDF-B7B2BADED907}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RevitExamplePlugin", "src\RevitExamplePlugin\RevitExamplePlugin.csproj", "{4AEC72C6-12FC-4130-A80F-B496546A084D}"
Expand Down Expand Up @@ -887,6 +889,20 @@ Global
{ED999E06-C2E1-4D5A-B4D8-43705A39C7D1}.Debug|x64.Build.0 = D2020|x64
{ED999E06-C2E1-4D5A-B4D8-43705A39C7D1}.Release|x64.ActiveCfg = D2020|x64
{ED999E06-C2E1-4D5A-B4D8-43705A39C7D1}.Release|x64.Build.0 = D2020|x64
{270861C2-4C25-4433-84DF-533517155685}.D2020|x64.ActiveCfg = D2020|x64
{270861C2-4C25-4433-84DF-533517155685}.D2020|x64.Build.0 = D2020|x64
{270861C2-4C25-4433-84DF-533517155685}.D2021|x64.ActiveCfg = D2021|x64
{270861C2-4C25-4433-84DF-533517155685}.D2021|x64.Build.0 = D2021|x64
{270861C2-4C25-4433-84DF-533517155685}.D2022|x64.ActiveCfg = D2022|x64
{270861C2-4C25-4433-84DF-533517155685}.D2022|x64.Build.0 = D2022|x64
{270861C2-4C25-4433-84DF-533517155685}.D2023|x64.ActiveCfg = D2023|x64
{270861C2-4C25-4433-84DF-533517155685}.D2023|x64.Build.0 = D2023|x64
{270861C2-4C25-4433-84DF-533517155685}.D2024|x64.ActiveCfg = D2024|x64
{270861C2-4C25-4433-84DF-533517155685}.D2024|x64.Build.0 = D2024|x64
{270861C2-4C25-4433-84DF-533517155685}.Debug|x64.ActiveCfg = D2020|x64
{270861C2-4C25-4433-84DF-533517155685}.Debug|x64.Build.0 = D2020|x64
{270861C2-4C25-4433-84DF-533517155685}.Release|x64.ActiveCfg = D2020|x64
{270861C2-4C25-4433-84DF-533517155685}.Release|x64.Build.0 = D2020|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
14 changes: 14 additions & 0 deletions src/RevitMechanicalSpecification/Entities/ManifoldPart.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Autodesk.Revit.DB;

namespace RevitMechanicalSpecification.Entities {
public class ManifoldPart {
public ElementId Id { get; set; }
public string Group { get; set; }
}
}
48 changes: 48 additions & 0 deletions src/RevitMechanicalSpecification/Entities/SpecificationElement.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Autodesk.Revit.DB;

namespace RevitMechanicalSpecification.Entities {
public class SpecificationElement {
private Element _element;
private Element _elementType;
private BuiltInCategory _builtInCategory;
private string _elementName;
private FamilyInstance _manifoldInstance = null;
private SpecificationElement _manifoldSpElement;

public BuiltInCategory BuiltInCategory {
get => _builtInCategory;
set => _builtInCategory = value;
}

public SpecificationElement ManifoldSpElement {
get => _manifoldSpElement;
set => _manifoldSpElement = value;
}

public Element Element {
get => _element;
set => _element = value;
}

public Element ElementType {
get => _elementType;
set => _elementType = value;
}

public string ElementName {
get => _elementName;
set => _elementName = value;
}

public FamilyInstance ManifoldInstance {
get => _manifoldInstance;
set => _manifoldInstance = value;
}
}
}
17 changes: 17 additions & 0 deletions src/RevitMechanicalSpecification/Entities/VisSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Autodesk.Revit.DB;

namespace RevitMechanicalSpecification.Entities {
public class VisSystem {
public string SystemSystemName { get; set; }
public string SystemFunction { get; set; }
public string SystemShortName { get; set; }
public string SystemTargetName { get; set; }
public MEPSystem SystemElement { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using Autodesk.Revit.DB;

using RevitMechanicalSpecification.Entities;

namespace RevitMechanicalSpecification.Models.Fillers {
public class ElementParamDefaultFiller : ElementParamFiller {
public ElementParamDefaultFiller(
string toParamName,
string fromParamName,
SpecConfiguration specConfiguration,
Document document) :
base(toParamName, fromParamName, specConfiguration, document) { }

public override void SetParamValue(SpecificationElement specificationElement) {
TargetParameter.Set(OriginalParameter.AsValueString());
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Xml.Linq;

using Autodesk.Revit.DB;

using dosymep.Bim4Everyone;
using dosymep.Revit;

using RevitMechanicalSpecification.Entities;
using RevitMechanicalSpecification.Service;

namespace RevitMechanicalSpecification.Models.Fillers {
public abstract class ElementParamFiller : IElementParamFiller {
private readonly SpecConfiguration _config;
private readonly Document _document;
private Parameter _targetParameter;
private Parameter _originalParameter;
private string _targetParameterName;
private string _originalParameterName;

public ElementParamFiller(
string toParamName,
string fromParamName,
SpecConfiguration specConfiguration,
Document document) {

_targetParameterName = toParamName;
_originalParameterName = fromParamName;
_config = specConfiguration;
_document = document;
}

protected Parameter TargetParameter {
dosymep marked this conversation as resolved.
Show resolved Hide resolved
get => _targetParameter;
set => _targetParameter = value;
}

protected Parameter OriginalParameter {
dosymep marked this conversation as resolved.
Show resolved Hide resolved
get => _originalParameter;
set => _originalParameter = value;
}

protected string TargetParamName {
get => _targetParameterName;
set => _targetParameterName = value;
}

protected string OriginalParamName {
get => _originalParameterName;
set => _originalParameterName = value;
}

protected SpecConfiguration Config => _config;

protected Document Document => _document;

public abstract void SetParamValue(SpecificationElement specificationElement);

public void Fill(SpecificationElement specificationElement) {
// Существует ли целевой параметр в экземпляре
TargetParameter = specificationElement.Element.LookupParameter(TargetParamName);
dosymep marked this conversation as resolved.
Show resolved Hide resolved
if(TargetParameter == null) {
return;
}

// Проверка на нулл - для ситуаций где нет имени исходного(ФОП_ВИС_Число, Группирование), тогда исходный парам так и остается пустым
if(!(OriginalParamName is null)) {
// Проверяем, если существует исходный параметр в типе или экземпляре
OriginalParameter = specificationElement.GetTypeOrInstanceParam(OriginalParamName);
if(OriginalParameter is null) {
return;
}
}

// Если целевой параметр ридонли - можно сразу идти дальше
if(TargetParameter.IsReadOnly) {
return;
}

this.SetParamValue(specificationElement);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

using Autodesk.Revit.DB;

using dosymep.Revit;

using RevitMechanicalSpecification.Entities;
using RevitMechanicalSpecification.Service;

namespace RevitMechanicalSpecification.Models.Fillers {
internal class ElementParamFunctionFiller : ElementParamFiller {
private readonly List<VisSystem> _systemList;
private readonly SystemFunctionNameFactory _nameFactory;

public ElementParamFunctionFiller(
string toParamName,
string fromParamName,
SpecConfiguration specConfiguration,
Document document,
List<VisSystem> systemList) :
base(toParamName, fromParamName, specConfiguration, document) {

_systemList = systemList;
_nameFactory = new SystemFunctionNameFactory(Document, _systemList);
}

public override void SetParamValue(SpecificationElement specificationElement) {
string calculatedFunction = GetFunction(specificationElement);
if(!(string.IsNullOrEmpty(calculatedFunction))) {
TargetParameter.Set(GetFunction(specificationElement));
return;
}
TargetParameter.Set(Config.GlobalFunction);
}

/// <summary>
/// Возвращает экономическую или принудительную экономическую функцию
/// </summary>
/// <param name="specificationElement"></param>
/// <returns></returns>
private string GetFunction(SpecificationElement specificationElement) {
string forcedFunction = _nameFactory.GetForcedParamValue(specificationElement, Config.ForcedFunction);
if(!string.IsNullOrEmpty(forcedFunction)) {
return forcedFunction;
}
return _nameFactory.GetFunctionNameValue(specificationElement.Element);
}
}
}
Loading
Loading