-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathPlaceOneOpeningRealByOneTaskCmd.cs
More file actions
97 lines (84 loc) · 3.76 KB
/
Copy pathPlaceOneOpeningRealByOneTaskCmd.cs
File metadata and controls
97 lines (84 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System.Globalization;
using System.Reflection;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using dosymep.Bim4Everyone.SimpleServices;
using dosymep.SimpleServices;
using dosymep.WpfCore.Ninject;
using dosymep.WpfUI.Core.Ninject;
using Ninject;
using RevitClashDetective.Models.GraphicView;
using RevitClashDetective.Models.Handlers;
using RevitOpeningPlacement.Models;
using RevitOpeningPlacement.Models.Configs;
using RevitOpeningPlacement.Models.RealOpeningArPlacement;
using RevitOpeningPlacement.Models.RealOpeningArPlacement.Checkers;
using RevitOpeningPlacement.Models.RealOpeningKrPlacement;
using RevitOpeningPlacement.Models.RealOpeningKrPlacement.Checkers;
using RevitOpeningPlacement.Services;
namespace RevitOpeningPlacement;
/// <summary>
/// Команда для размещения одного чистового отверстия в АР/КР по одному полученному заданию на отверстия из связи ВИС
/// </summary>
[Transaction(TransactionMode.Manual)]
public class PlaceOneOpeningRealByOneTaskCmd : OpeningRealPlacerCmd {
public PlaceOneOpeningRealByOneTaskCmd() : base("Принять одно задание на отверстие") { }
public void ExecuteCommand(UIApplication uiApplication) {
Execute(uiApplication);
}
protected override void Execute(UIApplication uiApplication) {
using var kernel = uiApplication.CreatePlatformServices();
kernel.Bind<UIApplication>()
.ToSelf()
.InSingletonScope();
kernel.Bind<IDocTypesHandler>()
.To<DocTypesHandler>()
.InSingletonScope();
kernel.Bind<RevitRepository>()
.ToSelf()
.InSingletonScope();
kernel.Bind<RevitClashDetective.Models.RevitRepository>()
.ToSelf()
.InSingletonScope();
kernel.Bind<RevitEventHandler>()
.ToSelf()
.InSingletonScope();
kernel.Bind<ParameterFilterProvider>()
.ToSelf()
.InSingletonScope();
kernel.UseWpfUIThemeUpdater();
string assemblyName = Assembly.GetExecutingAssembly().GetName().Name;
kernel.UseWpfLocalization($"/{assemblyName};component/assets/localization/Language.xaml",
CultureInfo.GetCultureInfo("ru-RU"));
var revitRepository = kernel.Get<RevitRepository>();
var bimPartsHandler = kernel.Get<IDocTypesHandler>();
var docType = bimPartsHandler.GetDocType(revitRepository.Doc);
var localization = kernel.Get<ILocalizationService>();
switch(docType) {
case DocTypeEnum.AR: {
if(!ModelCorrect(new RealOpeningsArChecker(revitRepository))) {
return;
}
var placer = new RealOpeningArPlacer(revitRepository, localization);
placer.PlaceSingleOpeningByOneTask();
break;
}
case DocTypeEnum.KR: {
if(!ModelCorrect(new RealOpeningsKrChecker(revitRepository))) {
return;
}
var config = OpeningRealsKrConfig.GetOpeningConfig(revitRepository.Doc);
var placer = new RealOpeningKrPlacer(revitRepository, config, localization);
placer.PlaceSingleOpeningByOneTask();
break;
}
default: {
revitRepository.ShowErrorMessage(
"Команда предназначена только для АР/КР." +
"\nПроверьте наименование файла на соответствие BIM-стандарту A101 или откройте другой файл.");
break;
}
}
}
}