97 lines
3.2 KiB
C#
97 lines
3.2 KiB
C#
using Autodesk.Revit.DB;
|
||
using CommunityToolkit.Mvvm.ComponentModel;
|
||
|
||
|
||
namespace ShrlAlgoToolkit.RevitAddins.RvView;
|
||
|
||
public partial class ViewManagerModel : ObservableObject
|
||
{
|
||
[ObservableProperty]
|
||
public partial UserViewDetailLevel? DetailLevel { get; set; }
|
||
|
||
[ObservableProperty]
|
||
private UserViewDiscipline? discipline;
|
||
|
||
[ObservableProperty]
|
||
public partial UserDisplayStyle DisplayStyle { get; set; }
|
||
|
||
[ObservableProperty]
|
||
private string name;
|
||
|
||
[ObservableProperty]
|
||
public partial int Scale { get; set; }
|
||
|
||
[ObservableProperty]
|
||
private string sheetName;
|
||
|
||
[ObservableProperty]
|
||
public partial string SheetNumber { get; set; }
|
||
|
||
[ObservableProperty]
|
||
private UserViewType userViewType;
|
||
|
||
public View View { get; set; }
|
||
|
||
[ObservableProperty]
|
||
public partial View ViewTemplate { get; set; }
|
||
public List<View> ViewTemplates { get; private set; }
|
||
|
||
public ViewManagerModel(View view)
|
||
{
|
||
Name = view.Name;
|
||
View = view;
|
||
UserViewType = (UserViewType)view.ViewType;
|
||
Discipline = view.HasViewDiscipline() ? (UserViewDiscipline)view.Discipline : null;
|
||
DetailLevel = (UserViewDetailLevel)view.DetailLevel;
|
||
DisplayStyle = (UserDisplayStyle)view.DisplayStyle;
|
||
Scale = view.Scale;
|
||
ViewTemplates = view.Document
|
||
.OfClass<View>()
|
||
.Cast<View>()
|
||
.Where(v => v.IsTemplate && View.IsValidViewTemplate(v.Id))
|
||
.ToList();
|
||
//ViewTemplate = view.Document.GetElement(view.ViewTemplateId) as View;
|
||
ViewTemplate = ViewTemplates.FirstOrDefault(template => View.ViewTemplateId == template.Id);
|
||
//保证选中项在集合中,使得combobox默认选中
|
||
//ViewTemplate = view.Document.OfCollector<View>().Cast<View>().FirstOrDefault(v => v.IsTemplate && v.Id == view.ViewTemplateId);
|
||
//ViewTemplate = view.Document.GetElement(view.ViewTemplateId) as View;
|
||
SheetName = view.get_Parameter(BuiltInParameter.VIEW_DESCRIPTION).AsString();
|
||
SheetNumber = view is ViewSheet sheet ? sheet.SheetNumber : null;
|
||
}
|
||
|
||
//protected override void OnPropertyChanged(PropertyChangedEventArgs e)
|
||
//{
|
||
// base.OnPropertyChanged(e);
|
||
// if (
|
||
// e.PropertyName == nameof(DetailLevel)
|
||
// || e.PropertyName == nameof(Discipline)
|
||
// || e.PropertyName == nameof(DisplayStyle)
|
||
// || e.PropertyName == nameof(Scale)
|
||
// || e.PropertyName == nameof(SheetName)
|
||
// || e.PropertyName == nameof(ViewTemplate)
|
||
// )
|
||
// {
|
||
// Messenger.Send(new ViewMessage(this, e.PropertyName));
|
||
// }
|
||
//}
|
||
|
||
public bool IsDetailLevelEditable => UserViewType is not UserViewType.Schedule and not UserViewType.DrawingSheet;
|
||
|
||
public bool IsDisciplineEditable => Discipline != null;
|
||
|
||
public bool IsDisplayStyleEditable => UserViewType is not UserViewType.Schedule and not UserViewType.DrawingSheet;
|
||
|
||
public bool IsScaleEditable =>
|
||
Scale != 0
|
||
&& (View is not View3D view3D || !view3D.IsPerspective)
|
||
&& UserViewType != UserViewType.DrawingSheet
|
||
&& UserViewType != UserViewType.Schedule
|
||
&& UserViewType != UserViewType.Rendering;
|
||
|
||
public bool IsSheetNameEditable => UserViewType is not UserViewType.Schedule and not UserViewType.DrawingSheet;
|
||
|
||
public bool IsSheetNumberEditable => SheetNumber != null;
|
||
|
||
public bool IsViewTemplateEditable => UserViewType != UserViewType.DrawingSheet;
|
||
}
|