Files
ShrlAlgoToolkit/Sai.RvKits/ModelManager/TemplateManagerViewModel.cs
2024-09-22 11:05:41 +08:00

107 lines
4.8 KiB
C#

using System.Drawing;
using System.Drawing.Text;
using System.Windows;
using Autodesk.Revit.DB;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Nice3point.Revit.Toolkit.External.Handlers;
using Nice3point.Revit.Toolkit.Options;
namespace Sai.RvKits.ModelManager;
public partial class TemplateManagerViewModel : ObservableObject
{
private readonly ActionEventHandler handler;
[ObservableProperty]
private FontFamily[] fontFamilies;
[ObservableProperty]
private FontFamily selectFontFamily;
[ObservableProperty]
private double fontSize;
[ObservableProperty]
private double widthScale;
public TemplateManagerViewModel()
{
handler = new ActionEventHandler();
// 创建 InstalledFontCollection 对象
var installedFonts = new InstalledFontCollection();
// 获取已安装的字体数组
fontFamilies = installedFonts.Families;
}
[RelayCommand]
private void ModifyFont()
{
handler.Raise(
uiapp =>
{
var doc = uiapp.ActiveUIDocument.Document;
doc.InvokeGroup(
tg =>
{
var col = doc.OfClass<Family>()
.Cast<Family>()
.Where(f => f.FamilyCategory.CategoryType == CategoryType.Annotation);
foreach(var family in col)
{
if(!family.IsEditable)
{
continue;
}
var familyEditing = doc.EditFamily(family);
//所有标签文字;
familyEditing.Invoke(
ts =>
{
var textElements = familyEditing.OfClass<TextElement>().Cast<TextElement>();
foreach(var text in textElements)
{
var type = text.Symbol;
ElementType typeCopy;
try
{
typeCopy = type.Duplicate(
$"{SelectFontFamily.Name} {FontSize} - {WidthScale}");
} catch(Autodesk.Revit.Exceptions.ArgumentException)
{
}
type.get_Parameter(BuiltInParameter.TEXT_FONT)?.SetValueString(
$"{SelectFontFamily.Name}");
//字体大小
type.get_Parameter(BuiltInParameter.TEXT_SIZE)?.Set(FontSize);
//宽度系数
type.get_Parameter(BuiltInParameter.TEXT_WIDTH_SCALE)?.Set(WidthScale);
}
var textNotes = familyEditing.OfClass<TextNote>().Cast<TextNote>();
foreach(var text in textNotes)
{
var type = text.Symbol;
try
{
var typeCopy = type.Duplicate(
$"{SelectFontFamily.Name} {FontSize} - {WidthScale}");
} catch(Autodesk.Revit.Exceptions.ArgumentException)
{
}
type.get_Parameter(BuiltInParameter.TEXT_FONT)?.SetValueString(
$"{SelectFontFamily.Name}");
//字体大小
type.get_Parameter(BuiltInParameter.TEXT_SIZE)?.Set(FontSize);
//宽度系数
type.get_Parameter(BuiltInParameter.TEXT_WIDTH_SCALE)?.Set(WidthScale);
}
});
doc.Invoke(
ts =>
{
familyEditing.LoadFamily(doc, new FamilyLoadOptions(true));
},
"载入族");
}
},"调整文字");
});
}
}