Files
2025-09-16 16:06:41 +08:00

112 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Autodesk.Revit.DB;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Szmedi.RevitToolkit.Approval.Models
{
public partial class ReviewItem : ObservableObject
{
private readonly string SignParamName;
//[ObservableProperty]
//public partial bool IsSelected { get; set; } = false;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(FullName))]
public partial string Sign { get; set; }
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(FullName))]
public partial string Code { get; private set; }
public ReviewItem(Element element, string signParam = "深圳构件标识")
{
Element = element;
this.SignParamName = signParam;
Sign = GetParameterValue(element, signParam, "无标识");
Code = GetParameterValue(element, "AM-100-EAM分类编码", "无编码");
//Sign = element.GetParameters("深圳构件标识").FirstOrDefault()?.AsString() ?? "无标识";
//Code = element.GetParameters("AM-100-EAM分类编码").FirstOrDefault()?.AsString() ?? "无编码";
}
private string GetParameterValue(Element element, string paramName, string defaultValue)
{
var doc = element.Document;
var param = element.GetParameters(paramName)?.FirstOrDefault();
var typeParam = doc.GetElement(element.GetTypeId())?.GetParameters(paramName)?.FirstOrDefault();
string paramValue = typeParam?.AsString() ?? defaultValue;
if (paramValue == defaultValue)
{
paramValue = param?.AsString() ?? defaultValue;
}
return paramValue;
}
private void SetParameterValue(Element element, string paramName, string value)
{
var doc = element.Document;
var typeParam = doc.GetElement(element.GetTypeId()).GetParameters("深圳构件标识").FirstOrDefault();
var param = element.GetParameters(paramName).FirstOrDefault();
var typeResult = typeParam?.SetValue(value);
var instanceResult = param?.SetValue(value);
if (typeResult != true && instanceResult != true)
{
MessageBox.Show($"修改失败,请确认是否存在参数:{paramName}");
}
}
partial void OnSignChanged(string value)
{
if (value == "无标识")
{
return;
}
RvApp.Handler
.Raise(
uiapp =>
{
if (!Element.IsValidObject)
{
return;
}
Element.Document
.Invoke(
_ =>
{
SetParameterValue(Element, "深圳构件标识", value);
//var param = Element.GetParameters("深圳构件标识").FirstOrDefault();
//if (param.AsString() == value)
//{
// return;
//}
//param.SetValue(value);
},
$"修改标识->{value}");
});
}
public string FullName
{
get
{
//if (string.IsNullOrEmpty(Sign))
//{
// Sign = "无标识";
//}
//if (string.IsNullOrEmpty(Code))
//{
// Code = "无编号";
//}
return $"{Sign} - {Code}";
}
}
public Element Element { get; }
}
}