Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ public class SheetSetData {
public string Name { get; set; } = "Новая конфигурация";
public List<SheetData> Sheets { get; set; } = [];
public List<PluginParamData> Params { get; set; } = [];
public string ParamsComment { get; set; } = string.Empty;
}

public abstract class ParamContainerModuleData {
Expand Down Expand Up @@ -104,6 +105,7 @@ public class PlanViewData : SheetComponentData {
public FiltrationComboBoxFilterListData ViewFamilyTypeFilterValues { get; set; }
public string ViewTemplateName { get; set; }
public FiltrationComboBoxFilterListData ViewTemplateFilterValues { get; set; }
public bool? ViewTemplateRemoveAfterCreation { get; set; }
public string ViewportTypeName { get; set; }
public FiltrationComboBoxFilterListData ViewportTypeFilterValues { get; set; }
public string ViewCount { get; set; }
Expand All @@ -121,6 +123,7 @@ public class CalloutViewData : SheetComponentData {
public FiltrationComboBoxFilterListData ViewFamilyTypeFilterValues { get; set; }
public string ViewTemplateName { get; set; }
public FiltrationComboBoxFilterListData ViewTemplateFilterValues { get; set; }
public bool? ViewTemplateRemoveAfterCreation { get; set; }
public string ViewportTypeName { get; set; }
public FiltrationComboBoxFilterListData ViewportTypeFilterValues { get; set; }
public string ViewCount { get; set; }
Expand All @@ -140,6 +143,7 @@ public class SectionViewData : SheetComponentData {
public FiltrationComboBoxFilterListData ViewFamilyTypeFilterValues { get; set; }
public string ViewTemplateName { get; set; }
public FiltrationComboBoxFilterListData ViewTemplateFilterValues { get; set; }
public bool? ViewTemplateRemoveAfterCreation { get; set; }
public string ViewportTypeName { get; set; }
public FiltrationComboBoxFilterListData ViewportTypeFilterValues { get; set; }
public string SelectedSelectElemParamName { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ public SheetSetData CreateSheetSetData(SheetSetVM vm) {
return new SheetSetData {
Name = vm.Name,
Sheets = vm.SheetList?.Select(CreateSheetData).ToList(),
Params = vm.SheetSetParams.Params?.Select(CreatePluginParamData).ToList()
Params = vm.SheetSetParams.Params?.Select(CreatePluginParamData).ToList(),
ParamsComment = vm.SheetSetParams.ModuleComment
};
}

Expand Down Expand Up @@ -77,6 +78,7 @@ public SheetComponentData CreateComponentData(SheetComponentVM sheetComponentVM)
ViewFamilyTypeFilterValues = GetFiltrationComboBoxFilterList(vm.ViewFamilyTypeFilter),
ViewTemplateName = vm.ViewTemplate?.Name,
ViewTemplateFilterValues = GetFiltrationComboBoxFilterList(vm.ViewTemplateFilter),
ViewTemplateRemoveAfterCreation = vm.ViewTemplateRemoveAfterCreation,
ViewportTypeName = vm.ViewportType?.Name,
ViewportTypeFilterValues = GetFiltrationComboBoxFilterList(vm.ViewportTypeFilter),
ViewCount = vm.ViewCount,
Expand All @@ -94,6 +96,7 @@ public SheetComponentData CreateComponentData(SheetComponentVM sheetComponentVM)
ViewFamilyTypeFilterValues = GetFiltrationComboBoxFilterList(vm.ViewFamilyTypeFilter),
ViewTemplateName = vm.ViewTemplate?.Name,
ViewTemplateFilterValues = GetFiltrationComboBoxFilterList(vm.ViewTemplateFilter),
ViewTemplateRemoveAfterCreation = vm.ViewTemplateRemoveAfterCreation,
ViewportTypeName = vm.ViewportType?.Name,
ViewportTypeFilterValues = GetFiltrationComboBoxFilterList(vm.ViewportTypeFilter),
ViewCount = vm.ViewCount,
Expand All @@ -111,6 +114,7 @@ public SheetComponentData CreateComponentData(SheetComponentVM sheetComponentVM)
ViewFamilyTypeFilterValues = GetFiltrationComboBoxFilterList(vm.ViewFamilyTypeFilter),
ViewTemplateName = vm.ViewTemplate?.Name,
ViewTemplateFilterValues = GetFiltrationComboBoxFilterList(vm.ViewTemplateFilter),
ViewTemplateRemoveAfterCreation = vm.ViewTemplateRemoveAfterCreation,
ViewportTypeName = vm.ViewportType?.Name,
ViewportTypeFilterValues = GetFiltrationComboBoxFilterList(vm.ViewportTypeFilter),
ViewCount = vm.ViewCount,
Expand Down
23 changes: 15 additions & 8 deletions src/RevitPackageDocumentation/Models/RevitElementPickerService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,20 @@ internal static RevitElementPickerService GetRevitElementPickerService(

public void PickElement(Action<Element> onSelected) {
_mainWindow.Hide();
ISelectionFilter selectFilter = new FloorSelectionFilter();
var reference = _revitRepository.ActiveUIDocument.Selection.PickObject(
ObjectType.Element,
selectFilter,
_localizationService.GetLocalizedString("MainWindow.PickElement"));
var element = _revitRepository.Document.GetElement(reference);
onSelected?.Invoke(element);
_mainWindow.ShowDialog();
try {
// Даем пользователю выбрать объект в Revit
ISelectionFilter selectFilter = new FloorSelectionFilter();
var reference = _revitRepository.ActiveUIDocument.Selection.PickObject(
ObjectType.Element,
selectFilter,
_localizationService.GetLocalizedString("MainWindow.PickElement"));
var element = _revitRepository.Document.GetElement(reference);
onSelected?.Invoke(element);
} catch(OperationCanceledException) {
// Пользователь нажал Esc - ничего не делаем
} finally {
// В любом случае показываем окно обратно
_mainWindow.ShowDialog();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

using dosymep.Revit;
using dosymep.SimpleServices;
using dosymep.WPF.Commands;

using RevitPackageDocumentation.Models;
using RevitPackageDocumentation.ViewModels.Configuration.SheetSetParameters.Parameters;
Expand All @@ -14,6 +13,8 @@

namespace RevitPackageDocumentation.ViewModels.Configuration.Sheet.SheetComponents;
internal class CalloutViewVM : SheetComponentVM {
private readonly string _uniqueViewportNumberKey = "‪";

Comment on lines +16 to +17

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

здесь добавь комментарий почему тут скрытый символ и какой он по unicod

// Ширина фрагмента
private readonly double _calloutWidth = UnitUtilsHelper.ConvertToInternalValue(4000);

Expand All @@ -38,6 +39,7 @@ internal class CalloutViewVM : SheetComponentVM {
private FiltrationComboBoxFilterListVM _viewFamilyTypeFilter;
private FiltrationComboBoxFilterListVM _viewportTypeFilter;
private FiltrationComboBoxFilterListVM _viewTemplateFilter;
private bool _viewTemplateRemoveAfterCreation = false;

public CalloutViewVM(
RevitRepository repository,
Expand All @@ -46,8 +48,6 @@ public CalloutViewVM(
SheetVM sheetVM,
ILocalizationService localizationService)
: base(repository, stringParamSetService, sheetSetParams, sheetVM, localizationService) {
ValidateAllProperties();
CreateComponentCommand = RelayCommand.Create(CreateComponent, CanCreateComponent);
}

[Required(ErrorMessage = "Validation.ViewNameIsEmpty")]
Expand Down Expand Up @@ -95,6 +95,11 @@ public FiltrationComboBoxFilterListVM ViewTemplateFilter {
set => RaiseAndSetIfChanged(ref _viewTemplateFilter, value);
}

public bool ViewTemplateRemoveAfterCreation {
get => _viewTemplateRemoveAfterCreation;
set => RaiseAndSetIfChanged(ref _viewTemplateRemoveAfterCreation, value);
}

[PositiveInteger(ErrorMessage = "Validation.ViewCountIsNotCorrect")]
public string ViewCount {
get => _viewCount;
Expand Down Expand Up @@ -190,6 +195,11 @@ public View Create(int number) {
// Необходимо для перезагрузки габаритов видов перед их размещением, т.к. при назначении
// секущего диапазона, видимых категорий, шаблона вида могут изменяться габариты вида
Repository.Document.Regenerate();

// Снимаем шаблон вида, если запросил пользователь
if(ViewTemplateRemoveAfterCreation) {
view.ViewTemplateId = ElementId.InvalidElementId;
}
} catch(System.Exception) { }
return view;
}
Expand All @@ -211,7 +221,6 @@ public Viewport Place(View view, int number) {
double titleBlockMinX = boundingBoxXYZ.Min.X;
double titleBlockMinY = boundingBoxXYZ.Min.Y;

int viewPortNumber = GetLastViewportNumber(0, 100) + 1;
var lastViewport = GetLastViewport<ViewPlan>(vp => vp.GetBoxCenter().Y < 0, true);

// Получение габаритов видового экрана
Expand All @@ -232,8 +241,11 @@ public Viewport Place(View view, int number) {
titleBlockMinY - viewportHalfHeight - _viewportOffset,
0);

string viewPortNumberAsStr =
_uniqueViewportNumberKey + (GetLastViewportNumber(_uniqueViewportNumberKey, 0, 100) + 1);

viewPort.SetBoxCenter(correctPosition);
viewPort.SetParamValue(BuiltInParameter.VIEWPORT_DETAIL_NUMBER, viewPortNumber.ToString());
viewPort.SetParamValue(BuiltInParameter.VIEWPORT_DETAIL_NUMBER, viewPortNumberAsStr);

#if REVIT_2022_OR_GREATER
viewPort.LabelOffset = new XYZ(viewportHalfWidth * 0.9, viewportHalfHeight * 2, 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using Autodesk.Revit.DB;

using dosymep.SimpleServices;
using dosymep.WPF.Commands;

using RevitPackageDocumentation.Models;
using RevitPackageDocumentation.ViewModels.Configuration.SheetSetParameters.Parameters;
Expand All @@ -25,8 +24,6 @@ public LegendViewVM(
SheetVM sheetVM,
ILocalizationService localizationService)
: base(repository, stringParamSetService, sheetSetParams, sheetVM, localizationService) {
ValidateAllProperties();
CreateComponentCommand = RelayCommand.Create(CreateComponent, CanCreateComponent);
}

[Required(ErrorMessage = "Validation.LegendViewIsNull")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

namespace RevitPackageDocumentation.ViewModels.Configuration.Sheet.SheetComponents;
internal class PlanViewVM : SheetComponentVM {
private readonly string _uniqueViewportNumberKey = "‎";

private string _viewNameFormula = string.Empty;
private string _viewName;
private ViewFamilyType _viewFamilyType;
Expand All @@ -26,6 +28,7 @@ internal class PlanViewVM : SheetComponentVM {
private FiltrationComboBoxFilterListVM _viewportTypeFilter;
private FiltrationComboBoxFilterListVM _viewFamilyTypeFilter;
private FiltrationComboBoxFilterListVM _viewTemplateFilter;
private bool _viewTemplateRemoveAfterCreation = false;

// Смещение по горизонтали в дюймах слева, для размещаемых компонентов листа требуемое, чтобы они попали на лист
private readonly double _titleBlockFrameLeftOffset = UnitUtilsHelper.ConvertToInternalValue(20);
Expand All @@ -40,7 +43,6 @@ public PlanViewVM(
SheetVM sheetVM,
ILocalizationService localizationService)
: base(repository, stringParamSetService, sheetSetParams, sheetVM, localizationService) {
ValidateAllProperties();
}

[Required(ErrorMessage = "Validation.ViewNameIsEmpty")]
Expand Down Expand Up @@ -88,6 +90,11 @@ public FiltrationComboBoxFilterListVM ViewTemplateFilter {
set => RaiseAndSetIfChanged(ref _viewTemplateFilter, value);
}

public bool ViewTemplateRemoveAfterCreation {
get => _viewTemplateRemoveAfterCreation;
set => RaiseAndSetIfChanged(ref _viewTemplateRemoveAfterCreation, value);
}

[PositiveInteger(ErrorMessage = "Validation.ViewCountIsNotCorrect")]
public string ViewCount {
get => _viewCount;
Expand Down Expand Up @@ -142,6 +149,11 @@ public ViewPlan Create() {
// Необходимо для перезагрузки габаритов видов перед их размещением, т.к. при назначении
// секущего диапазона, видимых категорий, шаблона вида могут изменяться габариты вида
Repository.Document.Regenerate();

// Снимаем шаблон вида, если запросил пользователь
if(ViewTemplateRemoveAfterCreation) {
view.ViewTemplateId = ElementId.InvalidElementId;
}
} catch(Exception) { }
}
return view;
Expand All @@ -165,7 +177,6 @@ public Viewport Place(ViewPlan view) {
double titleBlockMinX = boundingBoxXYZ.Min.X;
double titleBlockMaxY = boundingBoxXYZ.Max.Y;

int viewPortNumber = GetLastViewportNumber(100) + 1;
var lastViewportInTitleBlock = GetLastViewport<ViewPlan>(vp => vp.GetBoxCenter().Y < titleBlockMaxY);

// Создание видового экрана
Expand All @@ -192,8 +203,11 @@ public Viewport Place(ViewPlan view) {
correctPositionY,
0);

string viewPortNumberAsStr =
_uniqueViewportNumberKey + (GetLastViewportNumber(_uniqueViewportNumberKey, 0, 100) + 1);

viewPort.SetBoxCenter(correctPosition);
viewPort.SetParamValue(BuiltInParameter.VIEWPORT_DETAIL_NUMBER, viewPortNumber.ToString());
viewPort.SetParamValue(BuiltInParameter.VIEWPORT_DETAIL_NUMBER, viewPortNumberAsStr);

#if REVIT_2022_OR_GREATER
viewPort.LabelOffset = new XYZ(viewportHalfWidth * 0.9, viewportHalfHeight * 2, 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,7 @@ public ScheduleViewVM(
ILocalizationService localizationService)
: base(repository, stringParamSetService, sheetSetParams, sheetVM, localizationService) {
ScheduleFilterList = new ScheduleFilterListVM(this, stringParamSetService, localizationService);
ValidateAllProperties();

CreateComponentCommand = RelayCommand.Create(CreateComponent, CanCreateComponent);
SelectReferenceSpecCommand = RelayCommand.Create(SelectReferenceSpec);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
using dosymep.Bim4Everyone;
using dosymep.Revit;
using dosymep.SimpleServices;
using dosymep.WPF.Commands;

using RevitPackageDocumentation.Models;
using RevitPackageDocumentation.ViewModels.Configuration.SheetSetParameters.Parameters;
Expand All @@ -15,6 +14,8 @@

namespace RevitPackageDocumentation.ViewModels.Configuration.Sheet.SheetComponents;
internal class SectionViewVM : SheetComponentVM {
private readonly string _uniqueViewportNumberKey = "‏";

Comment on lines +17 to +18

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

коммент про скрытый символ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

если это один и тот же символ, что и в CalloutViewVM, то лучше сделать одну публичную константу

private string _viewNameFormula = string.Empty;
private string _viewName;
private ViewFamilyType _viewFamilyType;
Expand All @@ -26,6 +27,7 @@ internal class SectionViewVM : SheetComponentVM {
private FiltrationComboBoxFilterListVM _viewFamilyTypeFilter;
private FiltrationComboBoxFilterListVM _viewportTypeFilter;
private FiltrationComboBoxFilterListVM _viewTemplateFilter;
private bool _viewTemplateRemoveAfterCreation = false;

// Расстояние до дальней секущей плоскости сечения
private readonly double _viewDepth = UnitUtilsHelper.ConvertToInternalValue(3000);
Expand All @@ -49,8 +51,6 @@ public SectionViewVM(
SheetVM sheetVM,
ILocalizationService localizationService)
: base(repository, stringParamSetService, sheetSetParams, sheetVM, localizationService) {
ValidateAllProperties();
CreateComponentCommand = RelayCommand.Create(CreateComponent, CanCreateComponent);
}

[Required(ErrorMessage = "Validation.ViewNameIsEmpty")]
Expand Down Expand Up @@ -98,6 +98,11 @@ public FiltrationComboBoxFilterListVM ViewTemplateFilter {
set => RaiseAndSetIfChanged(ref _viewTemplateFilter, value);
}

public bool ViewTemplateRemoveAfterCreation {
get => _viewTemplateRemoveAfterCreation;
set => RaiseAndSetIfChanged(ref _viewTemplateRemoveAfterCreation, value);
}

[PositiveInteger(ErrorMessage = "Validation.ViewCountIsNotCorrect")]
public string ViewCount {
get => _viewCount;
Expand Down Expand Up @@ -160,6 +165,11 @@ public ViewSection Create(int number) {
// Необходимо для перезагрузки габаритов видов перед их размещением, т.к. при назначении
// секущего диапазона, видимых категорий, шаблона вида могут изменяться габариты вида
Repository.Document.Regenerate();

// Снимаем шаблон вида, если запросил пользователь
if(ViewTemplateRemoveAfterCreation) {
view.ViewTemplateId = ElementId.InvalidElementId;
}
} catch(System.Exception) { }
return view;
}
Expand All @@ -181,7 +191,6 @@ public Viewport Place(ViewSection view, int number) {
double titleBlockMinX = boundingBoxXYZ.Min.X;
double titleBlockMinY = boundingBoxXYZ.Min.Y;

int viewPortNumber = GetLastViewportNumber(0, 100) + 1;
var lastViewport = GetLastViewport<ViewSection>(vp => vp.GetBoxCenter().Y < 0);

// Создание видового экрана
Expand All @@ -202,8 +211,11 @@ public Viewport Place(ViewSection view, int number) {
titleBlockMinY - viewportHalfHeight,
0);

string viewPortNumberAsStr =
_uniqueViewportNumberKey + (GetLastViewportNumber(_uniqueViewportNumberKey, 0, 100) + 1);

viewPort.SetBoxCenter(correctPosition);
viewPort.SetParamValue(BuiltInParameter.VIEWPORT_DETAIL_NUMBER, viewPortNumber.ToString());
viewPort.SetParamValue(BuiltInParameter.VIEWPORT_DETAIL_NUMBER, viewPortNumberAsStr);

#if REVIT_2022_OR_GREATER
viewPort.LabelOffset = new XYZ(viewportHalfWidth * 0.9, viewportHalfHeight * 2, 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,18 +45,27 @@ private void OnErrorsChanged(object sender, DataErrorsChangedEventArgs e) {
}

/// <summary>
/// Получает следующий номер видового экрана на листе
/// Получает следующий номер видового экрана на листе с учетом уникального префикса
/// </summary>
protected int GetLastViewportNumber(int startNumber = int.MinValue, int endNumber = int.MaxValue) {
protected int GetLastViewportNumber(
string subStrInViewportNumber,
int startNumber = int.MinValue,
int endNumber = int.MaxValue) {

var viewports = Sheet.SheetInstance.GetAllViewports()
.Select(id => Repository.Document.GetElement(id) as Viewport)
.ToList();

int lastViewportNumber = startNumber;
foreach(var viewport in viewports) {
string viewportNumberAsStr = viewport.GetParamValue<string>(BuiltInParameter.VIEWPORT_DETAIL_NUMBER);

if(viewportNumberAsStr is null || !viewportNumberAsStr.Contains(subStrInViewportNumber)) {
continue;
}

// Если не число, то не влияет, т.к. плагин будет ставить число
if(int.TryParse(viewportNumberAsStr, out int viewportNumberAsInt)) {
if(int.TryParse(viewportNumberAsStr.Replace(subStrInViewportNumber, ""), out int viewportNumberAsInt)) {
if(viewportNumberAsInt > lastViewportNumber && viewportNumberAsInt < endNumber) {
lastViewportNumber = viewportNumberAsInt;
}
Expand Down
Loading
Loading