diff --git a/.filenesting.json b/.filenesting.json
new file mode 100644
index 0000000..0b71966
--- /dev/null
+++ b/.filenesting.json
@@ -0,0 +1,3 @@
+{
+ "help":"https://go.microsoft.com/fwlink/?linkid=866610"
+}
\ No newline at end of file
diff --git a/ConsoleApp/ConsoleApp.csproj b/ConsoleApp/ConsoleApp.csproj
index 7aee2c3..71f7aa1 100644
--- a/ConsoleApp/ConsoleApp.csproj
+++ b/ConsoleApp/ConsoleApp.csproj
@@ -11,7 +11,7 @@
-
+
\ No newline at end of file
diff --git a/ConsoleApp/Program.cs b/ConsoleApp/Program.cs
index 823dc63..ff37c02 100644
--- a/ConsoleApp/Program.cs
+++ b/ConsoleApp/Program.cs
@@ -9,10 +9,13 @@ using System.Threading.Tasks;
using ACadSharp.Entities;
using CommunityToolkit.Diagnostics;
+using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Messaging;
+using CommunityToolkit.Mvvm.Messaging.Messages;
using CSMath;
-using OpenAI.Chat;
+//using OpenAI.Chat;
namespace ConsoleApp
{
@@ -21,10 +24,17 @@ namespace ConsoleApp
static void Main(string[] args)
{
//TEST();
+ var re = new Receive();
+ var p = new Person();
+ var value = new ValueChangedMessage(p);
+ var propChange = new PropertyChangedMessage(new Program(),nameof(Person.Name),"bob","jenny");
- ChatClient client = new ChatClient("gpt-4o", Environment.GetEnvironmentVariable("OPEN_API_KEY"));
- ChatCompletion completion = client.CompleteChat("say 'this is a test.'");
- Console.WriteLine($"[ASSISTANT]:{completion.Content[0].Text}");
+ WeakReferenceMessenger.Default.Send(propChange);
+ WeakReferenceMessenger.Default.Send(value);
+ WeakReferenceMessenger.Default.Send(p);
+ //ChatClient client = new ChatClient("gpt-4o", Environment.GetEnvironmentVariable("OPEN_API_KEY"));
+ //ChatCompletion completion = client.CompleteChat("say 'this is a test.'");
+ //Console.WriteLine($"[ASSISTANT]:{completion.Content[0].Text}");
}
private static void TEST()
@@ -125,4 +135,36 @@ namespace ConsoleApp
//}
}
}
+ public class Person
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+ public partial class Receive:ObservableRecipient,IRecipient>,IRecipient,IRecipient>
+ {
+ public Receive()
+ {
+ IsActive = true;
+ //WeakReferenceMessenger.Default
+ // .Register(
+ // this,
+ // (r, m) =>
+ // {
+
+ // });
+ }
+
+ void IRecipient>.Receive(ValueChangedMessage message)
+ {
+ }
+
+ void IRecipient.Receive(Person message)
+ {
+ }
+
+ void IRecipient>.Receive(PropertyChangedMessage message)
+ {
+
+ }
+ }
}
diff --git a/RvAddinTest/AddWallTypeParam.cs b/RvAddinTest/AddWallTypeParam.cs
new file mode 100644
index 0000000..ae60397
--- /dev/null
+++ b/RvAddinTest/AddWallTypeParam.cs
@@ -0,0 +1,153 @@
+using System;
+
+using Autodesk.Revit.Attributes;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.UI;
+using Autodesk.Revit.UI.Selection;
+
+using Nice3point.Revit.Toolkit.External;
+
+using Sai.Toolkit.Revit.Assist;
+using Sai.Toolkit.Revit.Helpers;
+
+namespace RvAddinTest;
+[Transaction(TransactionMode.Manual)]
+[Regeneration(RegenerationOption.Manual)]
+public class AddWallTypeParam : ExternalCommand
+{
+ public Result Executex(ExternalCommandData commandData, ref string message, ElementSet elements)
+ {
+ //程序UI界面
+ UIApplication uiapp = commandData.Application;
+ //获取元素(选择) 显示元素 视图(活动视图)管理(对象)
+ UIDocument uidoc = uiapp.ActiveUIDocument;
+ //程序
+ Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
+ //获取位置和场地 视图(多个视图)管理 获取元素(Revit 项目里的全部元素)
+ Document doc = uidoc.Document;
+ //获取所有打开文档
+ DocumentSet docset = uiapp.Application.Documents;
+ //当前视图
+ View view = doc.ActiveView;
+
+ #region FilterExecute
+
+ var walls = new FilteredElementCollector(doc).OfClass(typeof(Wall)).ToElements();
+ using (Transaction trans = new Transaction(doc, "default"))
+ {
+ try
+ {
+ trans.Start();
+ //Do Something.
+ trans.Commit();
+ }
+ catch (Exception ex)
+ {
+ message = ex.Message;
+ if (trans.GetStatus() == TransactionStatus.Started)
+ {
+ trans.RollBack();
+ }
+ return Result.Failed;
+ }
+ }
+
+ #endregion FilterExecute
+
+ #region RepeatExecute
+
+ bool isCoutine = true;
+ using (Transaction trans = new Transaction(doc, "default"))
+ {
+ try
+ {
+ while (isCoutine)
+ {
+ try
+ {
+ trans.Start();
+ //do something.
+ trans.Commit();
+ }
+ catch (Exception)
+ {
+ trans.Commit();
+ return Result.Succeeded;
+ }
+ }
+ }
+ catch (Autodesk.Revit.Exceptions.OperationCanceledException)
+ {
+ if (trans.GetStatus() == TransactionStatus.Started)
+ {
+ trans.Commit();
+ }
+ }
+ catch (Exception ex)
+ {
+ message = ex.Message;
+ if (trans.GetStatus() == TransactionStatus.Started)
+ {
+ trans.Commit();
+ }
+
+ return Result.Succeeded;
+ }
+ }
+
+ #endregion RepeatExecute
+
+ #region SelectExecute
+
+ using (Transaction trans = new Transaction(doc, "default"))
+ {
+ try
+ {
+ Reference refer = uidoc.Selection.PickObject(ObjectType.Element, "请选择XXX");
+ Element e = uidoc.Document.GetElement(refer);
+
+ trans.Start();
+ //Do Something.
+ trans.Commit();
+ }
+ catch (Autodesk.Revit.Exceptions.OperationCanceledException ex)
+ {
+ if (trans.GetStatus() == TransactionStatus.Started)
+ {
+ trans.Commit();
+ }
+
+ return Result.Succeeded;
+ }
+ catch (Exception ex)
+ {
+ message = ex.Message;
+ if (trans.GetStatus() == TransactionStatus.Started)
+ {
+ trans.RollBack();
+ }
+ return Result.Failed;
+ }
+ }
+
+ #endregion SelectExecute
+
+ return Result.Succeeded;
+ }
+
+ public override void Execute()
+ {
+ Document.Invoke(
+ ts =>
+ {
+ var file = ParameterAssist.OpenSharedParametersFile(Application);
+ var group = file.Groups.get_Item("Atkore");
+ var definition = group.Definitions.get_Item("test");
+ var categories = Application.Create.NewCategorySet();
+ categories.Insert(Category.GetCategory(Document, BuiltInCategory.OST_Walls));
+ var newIB = Application.Create.NewTypeBinding(categories);
+ var b = Document.ParameterBindings.ReInsert(definition, newIB);
+ });
+
+ }
+}
\ No newline at end of file
diff --git a/RvAddinTest/CorrectSlope.cs b/RvAddinTest/CorrectSlope.cs
deleted file mode 100644
index 5e08b5e..0000000
--- a/RvAddinTest/CorrectSlope.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using Autodesk.Revit.Attributes;
-using Autodesk.Revit.DB;
-
-using Nice3point.Revit.Toolkit.External;
-using Nice3point.Revit.Toolkit.Utils;
-
-using Sai.Toolkit.Revit.Assist;
-
-namespace RvAddinTest;
-[Transaction(TransactionMode.Manual)]
-[Regeneration(RegenerationOption.Manual)]
-internal class CorrectSlope : ExternalCommand
-{
- public override void Execute()
- {
- var ids = UiDocument.Selection.GetElementIds();
- Document.Modify(
- set => set.Transaction).Commit((doc, t) =>
- {
- foreach (var id in ids)
- {
- var elem = Document.GetElement(id);
- if (elem is MEPCurve mep)
- {
- var loc = mep.GetCurve() as Line;
- var x = Math.Round(loc.Direction.X);
- var y = Math.Round(loc.Direction.Y);
- var z = Math.Round(loc.Direction.Z);
- //if (Math.Abs(x) < 10E-5)
- //{
- // x = 0;
- //}
- //if (Math.Abs(y) < 10E-5)
- //{
- // y = 0;
- //}
- //if (Math.Abs(z) < 10E-5)
- //{
- // z = 0;
- //}
- var dir = new XYZ(x, y, z);
- var endPoint = loc.Origin + dir * loc.Length;
- var li = Line.CreateBound(loc.Origin, endPoint);
- var locx = mep.GetLocationCurve();
- locx.Curve = li;
- }
- }
- });
-
- }
-}
diff --git a/RvAddinTest/CreateWindow.xaml.cs b/RvAddinTest/CreateWindow.xaml.cs
index 9eaed9b..773eab3 100644
--- a/RvAddinTest/CreateWindow.xaml.cs
+++ b/RvAddinTest/CreateWindow.xaml.cs
@@ -1,24 +1,10 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
+using System.Windows;
using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Shapes;
using Autodesk.Revit.DB;
-using Autodesk.Revit.UI;
using Nice3point.Revit.Toolkit.External.Handlers;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
-
namespace RvAddinTest;
///
/// CreateWindow.xaml 的交互逻辑
@@ -52,21 +38,6 @@ public partial class CreateWindow
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
{
}
- //uiapp.Application.DocumentChanged -= Application_DocumentChanged;
});
}
-
- private void Application_DocumentChanged(object sender, Autodesk.Revit.DB.Events.DocumentChangedEventArgs e)
- {
- if (e.GetAddedElementIds().Count == 1)
- {
- var id = e.GetAddedElementIds().FirstOrDefault();
- var elem = e.GetDocument().GetElement(id);
- if (elem is FamilyInstance ins && ins.Symbol.FamilyName.Contains("铜球阀"))
- {
-
- }
- }
-
- }
}
diff --git a/RvAddinTest/DeleteCmd.cs b/RvAddinTest/DeleteCmd.cs
deleted file mode 100644
index 01dae11..0000000
--- a/RvAddinTest/DeleteCmd.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-using System;
-using System.Reflection;
-using System.Windows;
-
-using Autodesk.Revit.Attributes;
-using Autodesk.Revit.DB;
-using Autodesk.Revit.DB.Plumbing;
-using Autodesk.Revit.UI;
-using Autodesk.Revit.UI.Selection;
-
-using Sai.Toolkit.Revit.Assist;
-
-namespace RvAddinTest;
-[Transaction(TransactionMode.Manual)]
-[Regeneration(RegenerationOption.Manual)]
-public class DeleteCmd : IExternalCommand
-{
- public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
- {
- //程序UI界面
- var uiapp = commandData.Application;
- //获取元素(选择) 显示元素 视图(活动视图)管理(对象)
- var uidoc = uiapp.ActiveUIDocument;
- //程序
- var app = uiapp.Application;
- //获取位置和场地 视图(多个视图)管理 获取元素(Revit 项目里的全部元素)
- var doc = uidoc.Document;
- //获取所有打开文档
- var docset = uiapp.Application.Documents;
- //当前视图
- var view = doc.ActiveView;
-
- #region FilterExecute
- //if (doc.IsFamilyDocument)
- //{
- // var manager = doc.FamilyManager;
- // using (var trans = new Transaction(doc, "default"))
- // {
- // try
- // {
- // trans.Start();
- // var param = manager.AddParameter(
- // "测试",
- // BuiltInParameterGroup.PG_ADSK_MODEL_PROPERTIES,
- // ParameterType.Number,
- // true);
- // trans.Commit();
- // }
- // catch (Exception ex)
- // {
- // throw ex;
- // }
- // }
- //}
- var docType = doc.GetType();
- var method = docType.GetMethod("GetUnusedFamilies", BindingFlags.NonPublic | BindingFlags.Instance);
- if (method != null)
- {
- var unusedFamilyIds = method.Invoke(doc, null) as ISet;
- using (var trans = new Transaction(doc, nameof(DeleteCmd)))
- {
- trans.Start();
- //foreach (var id in unusedFamilyIds)
- //{
- // doc.Delete(id);
- //}
- MessageBox.Show(unusedFamilyIds.Count.ToString());
- trans.Commit();
- }
- }
- //var instances = new FilteredElementCollector(doc).OfClass(typeof(Pipe)).ToElements();
- //using (Transaction trans = new Transaction(doc, "default"))
- //{
- // try
- // {
- // trans.Start();
- // var ids = new List();
- // foreach (Pipe pipe in instances)
- // {
- // if (Math.Abs(pipe.Diameter - 32 / 304.8) < 10E-5)
- // {
- // ids.Add(pipe.Id);
- // }
- // }
- // //doc.Delete(ids);
- // uidoc.Selection.SetElementIds(ids);
- // //Do Something.
- // trans.Commit();
- // }
- // catch (Exception ex)
- // {
- // message = ex.Message;
- // if (trans.GetStatus() == TransactionStatus.Started)
- // {
- // trans.RollBack();
- // }
- // return Result.Failed;
- // }
- //}
-
- #endregion FilterExecute
-
- return Result.Succeeded;
- }
-}
\ No newline at end of file
diff --git a/RvAddinTest/FluentAddin.cs b/RvAddinTest/FluentAddin.cs
index 6fc70b7..f46d96b 100644
--- a/RvAddinTest/FluentAddin.cs
+++ b/RvAddinTest/FluentAddin.cs
@@ -1,28 +1,15 @@
using System.Diagnostics;
-using System.IO;
-using System.Management.Instrumentation;
using System.Text;
using System.Windows;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
-using Autodesk.Revit.DB.Mechanical;
-using Autodesk.Revit.DB.Plumbing;
-using Autodesk.Revit.UI;
-using Autodesk.Revit.UI.Selection;
-
-using eTransmitForRevitDB;
-
-using Microsoft.Win32;
using Nice3point.Revit.Toolkit.External;
using Nice3point.Revit.Toolkit.Utils;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
-
using Sai.Toolkit.Revit.Assist;
-using Sai.Toolkit.Revit.Helpers;
namespace RvAddinTest;
@@ -30,98 +17,169 @@ namespace RvAddinTest;
[Regeneration(RegenerationOption.Manual)]
internal class FluentAddin : ExternalCommand
{
- public static bool Purge(Document doc)
+ ///
+ /// 设备类型是否为空
+ ///
+ private void CableTrayCheck()
{
- var eTransmitUpgradeOMatic = new eTransmitUpgradeOMatic(doc.Application);
+ //var list = Document.OfClass().Cast().ToList();
+ var list = Document.OfCollector().OfCategory(BuiltInCategory.OST_CableTrayFitting).WhereElementIsNotElementType().ToList();
+ var ids = new List();
+ foreach (var item in list)
+ {
+ var elem = Document.GetElement(item.GetTypeId());
+ var value = item.get_Parameter(BuiltInParameter.RBS_CTC_SERVICE_TYPE).AsString();
+ if (string.IsNullOrEmpty(value))
+ {
+ ids.Add(item.Id);
+ continue;
+ }
+ if (elem.Name.Contains(value))
+ {
+ continue;
+ }
+ ids.Add(item.Id);
- var result = eTransmitUpgradeOMatic.purgeUnused(doc);
+ }
+ UiDocument.Selection.SetElementIds(ids);
+ }
- return result == UpgradeFailureType.UpgradeSucceeded;
+ ///
+ /// 修改名称
+ ///
+ private void ModifyName()
+ {
+ Document.Modify(set => set.Transaction)
+ .Commit(
+ (d, t) =>
+ {
+ //var point = Point.Create(new XYZ(10,10,10), new ElementId(1236));
+ //Document.CreateTransientElements([point]);
+ var fittings = Document
+ .OfClass()
+ .WhereElementIsElementType().Cast();
+ //var fittings = Document.OfCollector()
+ // .OfCategory(BuiltInCategory.OST_DuctFitting)
+ // .WhereElementIsElementType().Cast();
+ foreach (var item in fittings)
+ {
+ //point=Point.Create(XYZ.BasisX);
+ //if (item.Name.StartsWith("DN"))
+ //{
+ // item.Name = item.FamilyName + "-" + item.Name;
+ //}
+ if (item.Name == "标准" || item.Name == "默认")
+ {
+ item.Name = item.FamilyName;
+ }
+
+ //try
+ //{
+ // item.get_Parameter(BuiltInParameter.ALL_MODEL_URL).Set("");
+ // item.get_Parameter(BuiltInParameter.ALL_MODEL_DESCRIPTION).Set("");
+ //}
+ //catch (Exception)
+ //{
+ // MessageBox.Show(item.Name);
+ //}
+ }
+ });
+ }
+ ///
+ /// 坡度检查
+ ///
+ private void SlopeCheck()
+ {
+ var mepCurves = ActiveView.OfClass();
+ var ids = new List();
+ foreach (var mepCurve in mepCurves)
+ {
+ var p1 = mepCurve.get_Parameter(BuiltInParameter.RBS_START_OFFSET_PARAM).AsDouble();
+ var p2 = mepCurve.get_Parameter(BuiltInParameter.RBS_END_OFFSET_PARAM).AsDouble();
+ var l = mepCurve.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble();
+ var sin = Math.Abs(p1 - p2) / l;
+ var radian = Math.Asin(sin);
+ var slope = Math.Tan(radian);
+ var isError = slope is (> 10E-6 and < 0.25) || (slope > Math.PI && Math.Abs(radian - Math.PI / 2) > 10E-6);
+ if (isError)
+ {
+ Debug.WriteLine($"角度:{radian}");
+ Debug.WriteLine($"坡度:{slope}");
+ ids.Add(mepCurve.Id);
+ }
+ }
+ UiDocument.Selection.SetElementIds(ids);
}
public override void Execute()
{
- //var elemIds = Document.OfAllModelElements().Select(e=>e.Id).ToList();
+ var textTypes = Document.OfClass().ToList();
+ var accessoryTypes = Document.OfClass().OfCategory(BuiltInCategory.OST_PipeAccessory).WhereElementIsElementType().ToList();
+ var filledRegionTypes = Document.OfClass().ToList();
+ var materialToClean = Document.OfClass().Where(m => m.Name.StartsWith("渲染材质")).Select(e => e.Id).ToList();
+ Application.DocumentChanged += Application_DocumentChanged;
+ Document.Invoke(
+ ts =>
+ {
+ //var id = UiDocument.Selection.GetElementIds().FirstOrDefault();
+ //var elem = Document.GetElement(id);
+ //var typeId = elem.GetTypeId();
+ //CleanImportLinePattern(Document);
+ //try
+ //{
+ // foreach (var item in accessoryTypes)
+ // {
+ // if (item is FamilySymbol symbol)
+ // {
+ // symbol.Name = $"{symbol.FamilyName}-{symbol.Name}";
+ // }
+ // }
+ //}
+ //catch (Exception ex)
+ //{
+ // throw ex;
+ //}
+ //foreach (var type in textTypes)
+ //{
+ // CleanTextTypes(type);
+
+ //}
+ //foreach (var item in filledRegionTypes)
+ //{
+ // if (item is FilledRegionType type)
+ // {
+ // var foreFillType = type.ForegroundPatternId;
+ // var foreFillColor = type.ForegroundPatternColor;
+ // var backFillType = type.BackgroundPatternId;
+ // var backFillColor = type.BackgroundPatternColor;
+
+ // }
+
+ //}
+ //Document.Delete(materialToClean);
+
+ });
+
+ //string input = type.Name;
+ //int lastDashIndex = input.LastIndexOf('-');
+
+ //if (lastDashIndex != -1)
+ //{
+ // string result = input.Substring(0, lastDashIndex);
+ // type.Name = result;
+ //}
//UiDocument.Selection.SetElementIds(elemIds);
- var refer=UiDocument.Selection.PickObject(ObjectType.Element);
- var elem=Document.GetElement(refer);
- var conn=elem.GetConnectors().Cast().Where(c=>c.IsConnected).FirstOrDefault();
- var connto = conn.GetConnectedConnector();
- Debug.WriteLine("管线:");
- Debug.WriteLine(conn.CoordinateSystem.BasisX);
- Debug.WriteLine(conn.CoordinateSystem.BasisY);
- Debug.WriteLine(conn.CoordinateSystem.BasisZ);
- Debug.WriteLine("管件:");
- Debug.WriteLine(connto.CoordinateSystem.BasisX);
- Debug.WriteLine(connto.CoordinateSystem.BasisY);
- Debug.WriteLine(connto.CoordinateSystem.BasisZ);
- //StringBuilder sb = new StringBuilder();
- //var n = 1;
- //foreach (var item in elems)
+
+ //var refer = UiDocument.Selection.PickObject(ObjectType.Element);
+ //var elem = Document.GetElement(refer);
+ //var conn = elem.GetConnectors().Cast().Where(c => c.IsConnected).FirstOrDefault();
+
+ //var docType = Document.GetType();
+ //var method = docType.GetMethod("GetUnusedFamilies", BindingFlags.NonPublic | BindingFlags.Instance);
+ //if (method != null)
//{
- // sb.Append(n +":"+ item.Name + item.Id.ToString()+"new");
- // n++;
+ // var unusedFamilyIds = method.Invoke(Document, null) as ISet;
//}
- //MessageBox.Show(sb.ToString());
- //StringBuilder sb = new();
- //var regions = Document.OfCollector().OfCategory(BuiltInCategory.OST_DetailComponents).WhereElementIsNotElementType().ToList();
- //sb.AppendLine(regions.Count.ToString());
- //regions.ToList().ForEach(f => sb.AppendLine($"{f.Id}"));
- //MessageBox.Show(sb.ToString());
- //UiDocument.Selection.SetElementIds(elements);
- #region MyRegion
- //OpenFileDialog openFileDialog = new OpenFileDialog() { Multiselect = true, Filter = "Revit文件|*.rvt" };
- //if (openFileDialog.ShowDialog() == false)
- //{
- // return;
- //};
-
- //foreach (var file in openFileDialog.FileNames)
- //{
- // var doc = UiApplication.Application.OpenDocumentFile(file);
- // var options = new SaveAsOptions()
- // {
- // Compact = true,
- // OverwriteExistingFile = true,
- // MaximumBackups = 3,
- // };
- // try
- // {
- // var ids = doc.OfCollector().OfCategory(BuiltInCategory.OST_Lines).Select(e => e.Id).ToList();
- // doc.Modify(set => set.Transaction)
- // .Commit(
- // (doc, t) =>
- // {
- // doc.Delete(ids);
- // });
- // for (var i = 0; i < 5; i++)
- // {
- // Purge(doc);
- // }
- // //doc.SaveAs(file, options);
- // doc.Close(true);
- // }
- // catch (Exception)
- // {
- // doc.Close();
- // }
-
- //}
- //MessageBox.Show("处理完成");
- #endregion
-
- //var b = Document.ActiveView.ViewTemplateId == null;
- //MessageExtensions.ShowMessage(b.ToString());
- //var h = Document.ActiveView
- // .OfClass()
- // .Cast()
- // .Where(
- // d =>
- // d.ConnectorManager.Connectors.OfType().FirstOrDefault().Shape
- // != ConnectorProfileType.Round
- // )
- // .Max(d => d.Height);
- //Document.Invoke
#region RegionName
//OpenFileDialog dialog = new() { Filter = "Revit(*.rvt)|*.rvt", Multiselect = true };
//dialog.ShowDialog();
@@ -154,162 +212,126 @@ internal class FluentAddin : ExternalCommand
// //var importInstance = doc.GetElement(refer) as ImportInstance;
// //ConvertToMassCurve(importInstance);
// });
- //DebugAssist.CreateTransientGeometries(Document,Point.Create(Document.ActiveView.CropBox.Transform.Origin));
- //DebugAssist.CreateTransientGeometries(Document,Point.Create(Document.ActiveView.CropBox.Min));
- //DebugAssist.CreateTransientGeometries(Document,Point.Create(Document.ActiveView.CropBox.Max));
-
- //var mepCurve = UiDocument.SelectObject();
- //if (mepCurve != null)
- //{
- // var list = new List();
- // mepCurve.GetAllConnectedElements(list);
- // UiDocument.Selection.SetElementIds(list);
- //}
}
-
- private void GetDiffSystemFittings()
+ private void Application_DocumentChanged(object sender, Autodesk.Revit.DB.Events.DocumentChangedEventArgs e)
{
- var elbows = Document.OfClass()
- .OfCategory(BuiltInCategory.OST_PipeFitting)
- .Cast()
- .Where(fi => fi.MEPModel is MechanicalFitting fitting && fitting.PartType == PartType.Elbow);
- var elementId = ElementId.InvalidElementId;
- foreach (var elbow in elbows)
+ StringBuilder sb = new StringBuilder();
+ var doc = e.GetDocument();
+ bool b = true;
+ foreach (var idAdd in e.GetAddedElementIds())
{
- if (elbow.Id.IntegerValue == 9437638)
+ if (b)
{
+ sb.AppendLine();
+ sb.AppendLine("新增的元素");
+ b = !b;
}
+ var elem = doc.GetElement(idAdd);
+ var typeId = elem.GetTypeId();
+ if (typeId != ElementId.InvalidElementId)
+ {
+ var type = doc.GetElement(idAdd);
+ sb.Append($"类型名称:{type.Name}");
+ }
+ sb.Append($"元素ID:{elem.Id};元素名称:{elem.Name} ");
+ }
+ b = true;
+ foreach (var idDel in e.GetDeletedElementIds())
+ {
+ if (b)
+ {
+ sb.AppendLine();
+ sb.AppendLine("删除的元素");
+ b = !b;
+ }
+ var elem = doc.GetElement(idDel);
+ var typeId = elem.GetTypeId();
+ if (typeId != ElementId.InvalidElementId)
+ {
+ var type = doc.GetElement(idDel);
+ sb.Append($"类型名称:{type.Name}");
+ }
+ sb.Append($"元素ID:{elem.Id};元素名称:{elem.Name} ");
+ }
+ b = true;
+ foreach (var idModify in e.GetModifiedElementIds())
+ {
+ if (b)
+ {
+ sb.AppendLine();
+
+ sb.AppendLine("修改的元素");
+ b = !b;
+ }
+ var elem = doc.GetElement(idModify);
+ var typeId = elem.GetTypeId();
+ if (typeId != ElementId.InvalidElementId)
+ {
+ var type = doc.GetElement(idModify);
+ sb.Append($"类型名称:{type.Name}");
+ }
+ sb.Append($"元素ID:{elem.Id};元素名称:{elem.Name} ");
+ }
+ if (sb.Length > 0)
+ {
+ MessageBox.Show(sb.ToString());
+ }
+ }
+ ///
+ /// 清理导入的线型图案
+ ///
+ ///
+ private static void CleanImportLinePattern(Document doc)
+ {
+ var templates = doc.OfClass()
+ .Cast()
+ .Where(e => e.Name.StartsWith("IMPORT"))
+ .Select(e => e.Id).ToList();
+ doc.Delete(templates);
+ }
+ ///
+ /// 清理文字样式
+ ///
+ ///
+ private void CleanTextTypes(Element type)
+ {
+ if (type is TextNoteType textNoteType)
+ {
+
try
{
- var connectors = elbow.GetConnectors();
- var connector1 = connectors.OfType().ElementAt(0);
- var connector2 = connectors.OfType().ElementAt(1);
- var system1 = connector1.AllRefs.OfType().FirstOrDefault(c => c.Owner.Id != elbow.Id).MEPSystem;
- var system2 = connector2.AllRefs.OfType().FirstOrDefault(c => c.Owner.Id != elbow.Id).MEPSystem;
- //MEPSystem tempSystem = null;
- //foreach (Connector conn in connectors)
- //{
- // foreach (Connector item in conn.AllRefs)
- // {
- // if (tempSystem==null)
- // {
- // tempSystem = item.MEPSystem;
- // continue;
- // }
- // if (tempSystem==item.MEPSystem)
- // {
- // continue;
- // }
- // if (tempSystem.Name)
- // {
-
- // }
- // }
- //}
- if (system1.Name != system2.Name)
+ var font = textNoteType.get_Parameter(BuiltInParameter.TEXT_FONT).AsString();
+ var size = textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).AsValueString().TrimEnd('m');
+ var dSize = Math.Round(Convert.ToDouble(size), 1, MidpointRounding.AwayFromZero);
+ if (dSize < 0.23)
{
- elementId = elbow.Id;
- break;
+ return;
+ }
+ textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).SetValueString(dSize.ToString());
+ var scale = textNoteType.get_Parameter(BuiltInParameter.TEXT_WIDTH_SCALE).AsValueString();
+ //var color = textNoteType.get_Parameter(BuiltInParameter.LINE_COLOR).AsInteger();
+ var name = $"{font}-{dSize}mm-{scale}";
+ var textTypes = Document.OfClass().ToList();
+ var isExist = textTypes.FirstOrDefault(t => t.Name == name);
+ if (isExist != null)
+ {
+ var texts = Document.OfClass().Where(e => e.GetTypeId() == textNoteType.Id).ToList();
+ texts.ForEach(e => e.ChangeTypeId(isExist.Id));
+ Document.Regenerate();
+ Document.Delete(textNoteType.Id);
+ }
+ else
+ {
+ textNoteType.Name = name;
}
}
catch (Exception)
{
- //MessageBox.Show(elbow.Id.ToString());
- continue;
+ throw;
}
}
- if (elementId != ElementId.InvalidElementId)
- {
- UiDocument.Selection.SetElementIds([elementId]);
- }
- }
-
- private void ModifyName()
- {
- Document.Modify(set => set.Transaction)
- .Commit(
- (d, t) =>
- {
- //var point = Point.Create(new XYZ(10,10,10), new ElementId(1236));
- //Document.CreateTransientGeometries([point]);
- var fittings = Document
- .OfClass()
- .WhereElementIsElementType().Cast();
- //var fittings = Document.OfCollector()
- // .OfCategory(BuiltInCategory.OST_DuctFitting)
- // .WhereElementIsElementType().Cast();
- foreach (var item in fittings)
- {
- //point=Point.Create(XYZ.BasisX);
- //if (item.Name.StartsWith("DN"))
- //{
- // item.Name = item.FamilyName + "-" + item.Name;
- //}
- if (item.Name == "标准")
- {
- item.Name = item.FamilyName;
- }
-
- //try
- //{
- // item.get_Parameter(BuiltInParameter.ALL_MODEL_URL).Set("");
- // item.get_Parameter(BuiltInParameter.ALL_MODEL_DESCRIPTION).Set("");
- //}
- //catch (Exception)
- //{
- // MessageBox.Show(item.Name);
- //}
- }
- });
- }
-
- private void CableTrayCheck()
- {
- //var list = Document.OfClass().Cast().ToList();
- var list = Document.OfCollector().OfCategory(BuiltInCategory.OST_CableTrayFitting).WhereElementIsNotElementType().ToList();
- var ids = new List();
- foreach (var item in list)
- {
- var elem = Document.GetElement(item.GetTypeId());
- var value = item.get_Parameter(BuiltInParameter.RBS_CTC_SERVICE_TYPE).AsString();
- if (string.IsNullOrEmpty(value))
- {
- ids.Add(item.Id);
- continue;
- }
- if (elem.Name.Contains(value))
- {
- continue;
- }
- ids.Add(item.Id);
-
- }
- UiDocument.Selection.SetElementIds(ids);
- }
-
- private void SlopeCheck()
- {
- var mepCurves = ActiveView.OfClass();
- var ids = new List();
- foreach (var mepCurve in mepCurves)
- {
- var p1 = mepCurve.get_Parameter(BuiltInParameter.RBS_START_OFFSET_PARAM).AsDouble();
- var p2 = mepCurve.get_Parameter(BuiltInParameter.RBS_END_OFFSET_PARAM).AsDouble();
- var l = mepCurve.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble();
- var sin = Math.Abs(p1 - p2) / l;
- var radian = Math.Asin(sin);
- var slope = Math.Tan(radian);
- var isError = slope is (> 10E-6 and < 0.25) || (slope > Math.PI && Math.Abs(radian - Math.PI / 2) > 10E-6);
- if (isError)
- {
- Debug.WriteLine($"角度:{radian}");
- Debug.WriteLine($"坡度:{slope}");
- ids.Add(mepCurve.Id);
- }
- }
- UiDocument.Selection.SetElementIds(ids);
}
}
diff --git a/RvAddinTest/GASInstancesCreator.cs b/RvAddinTest/GASInstancesCreator.cs
index fd5d1f6..afdfd73 100644
--- a/RvAddinTest/GASInstancesCreator.cs
+++ b/RvAddinTest/GASInstancesCreator.cs
@@ -1,28 +1,24 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Windows.Documents;
-
+
using ACadSharp.Entities;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
-using Autodesk.Revit.UI;
-using Autodesk.Revit.UI.Selection;
+
+using Autodesk.Revit.DB.Plumbing;
using CSMath;
-using XYZ = Autodesk.Revit.DB.XYZ;
-using Nice3point.Revit.Toolkit.External;
-using Nice3point.Revit.Toolkit.Options;
-using Nice3point.Revit.Toolkit.Utils;
-using Line = Autodesk.Revit.DB.Line;
-using Autodesk.Revit.DB.Plumbing;
-using System.IO;
-using System.Collections.ObjectModel;
-using Sai.Toolkit.Revit.Assist;
+
using Microsoft.Win32;
-using Sai.Toolkit.Core.Helpers;
+
+using Nice3point.Revit.Toolkit.External;
+
+using System;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+using Line = Autodesk.Revit.DB.Line;
+using XYZ = Autodesk.Revit.DB.XYZ;
namespace RvAddinTest
{
@@ -63,7 +59,6 @@ namespace RvAddinTest
// }
//}
//var conns = elem.MEPModel.ConnectorManager.UnusedConnectors.OfType().FirstOrDefault();
-
}
private void GASCreator()
@@ -123,7 +118,7 @@ namespace RvAddinTest
var locXY = line.Vertices.FirstOrDefault().Location;
var firstPoint = XYToRevitXYZ(locXY);
var lastPoint = XYToRevitXYZ(line.Vertices.LastOrDefault().Location);
- if (firstPoint.DistanceTo(lastPoint) col = new FilteredElementCollector(doc).OfClass(typeof(View))
- .WhereElementIsNotElementType()
- .Cast()
- .Where(v => !v.IsTemplate);
- using (Transaction ts = new Transaction(doc, "隐藏"))
- {
- ts.Start();
- foreach (View v in col)
- {
- v.HideElements(uidoc.Selection.GetElementIds());
- }
- ts.Commit();
- }
-
- return Result.Succeeded;
- }
- }
-}
diff --git a/RvAddinTest/InstancesCreator.cs b/RvAddinTest/InstancesCreator.cs
index 93b8762..c526527 100644
--- a/RvAddinTest/InstancesCreator.cs
+++ b/RvAddinTest/InstancesCreator.cs
@@ -1,16 +1,7 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-
-using Autodesk.Revit.Attributes;
+using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
-using Autodesk.Revit.UI;
-using Autodesk.Revit.UI.Selection;
using Nice3point.Revit.Toolkit.External;
-using Nice3point.Revit.Toolkit.Options;
-using Nice3point.Revit.Toolkit.Utils;
namespace RvAddinTest
{
diff --git a/RvAddinTest/ModifySystemTypeCmd.cs b/RvAddinTest/ModifySystemTypeCmd.cs
index 3706e82..0a2f0ad 100644
--- a/RvAddinTest/ModifySystemTypeCmd.cs
+++ b/RvAddinTest/ModifySystemTypeCmd.cs
@@ -1,57 +1,13 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Security.Cryptography;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Data;
-
-using Autodesk.Revit.Attributes;
+using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.UI;
-using Sai.Toolkit.Revit.Assist;
-
namespace RvAddinTest;
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
internal class ModifySystemTypeCmd : IExternalCommand
{
- ///
- /// 获取标高
- ///
- ///
- ///
- public ElementId GetLevelId(Element model)
- {
- // 定义需要检查的参数列表
- var parametersToCheck = new BuiltInParameter[]
- {
- BuiltInParameter.WALL_BASE_CONSTRAINT, // 墙
- BuiltInParameter.SCHEDULE_BASE_LEVEL_PARAM, // 柱子标高
- BuiltInParameter.INSTANCE_REFERENCE_LEVEL_PARAM, // 梁标高
- BuiltInParameter.STAIRS_BASE_LEVEL_PARAM, // 楼梯标高
- BuiltInParameter.INSTANCE_ELEVATION_PARAM, // 族实例明细表标高
- BuiltInParameter.ROOF_CONSTRAINT_LEVEL_PARAM,//屋顶
- BuiltInParameter.INSTANCE_SCHEDULE_ONLY_LEVEL_PARAM,// 族实例明细表标高
- BuiltInParameter.RBS_START_LEVEL_PARAM// 管线标高
- };
- // 依次检查每个参数
- foreach (var param in parametersToCheck)
- {
- var baseLevelId = model.get_Parameter(param)?.AsElementId();
- if (baseLevelId != ElementId.InvalidElementId && baseLevelId != null)
- {
- return baseLevelId;
- }
- }
-
- //最后检查楼板或族基准标高
- return model.LevelId;
- }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
//程序UI界面
@@ -178,21 +134,6 @@ internal class ModifySystemTypeCmd : IExternalCommand
//}
#region RegionName
- //var templates = doc.OfClass()
- // .Cast()
- // .Where(e => e.Name.StartsWith("IMPORT"))
- // .Select(e => e.Id).ToList();
- //using (var trans = new Transaction(doc, nameof(ModifySystemTypeCmd)))
- //{
- // trans.Start();
- // doc.Delete(templates);
- // //foreach (var id in uidoc.Selection.GetElementIds())
- // //{
- // // var elem = doc.GetElement(id);
- // // elem.ChangeTypeId(systemType.Id);
- // //}
- // trans.Commit();
- //}
#endregion
try
{
@@ -230,4 +171,5 @@ internal class ModifySystemTypeCmd : IExternalCommand
}
return Result.Succeeded;
}
+
}
diff --git a/RvAddinTest/RemoveParamCmd.cs b/RvAddinTest/RemoveParamCmd.cs
index c9d81ba..eea4a66 100644
--- a/RvAddinTest/RemoveParamCmd.cs
+++ b/RvAddinTest/RemoveParamCmd.cs
@@ -1,4 +1,5 @@
using System.Text;
+using System.Windows;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
@@ -162,7 +163,7 @@ public class RemoveParamCmd : ExternalCommand
ts.Commit();
}
- famdoc.LoadFamily(Document, new FamilyLoadOption());
+ famdoc.LoadFamily(Document);
famdoc.Close(false);
}
}
diff --git a/RvAddinTest/ReplaceCode.cs b/RvAddinTest/ReplaceCode.cs
index a0651de..ceeafd5 100644
--- a/RvAddinTest/ReplaceCode.cs
+++ b/RvAddinTest/ReplaceCode.cs
@@ -1,14 +1,9 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
+using System.IO;
using System.Reflection;
using System.Text;
-using System.Threading.Tasks;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
-using Autodesk.Revit.UI;
using EPPlus.Core.Extensions;
@@ -22,92 +17,103 @@ namespace RvAddinTest;
[Regeneration(RegenerationOption.Manual)]
internal class ReplaceCode : ExternalCommand
{
- public override void Execute()
- {
-
- }
+ public override void Execute()
+ {
+ var ids = UiDocument.Selection.GetElementIds();
+ List li = new List();
+ foreach (var id in ids)
+ {
+ var elem = Document.GetElement(id);
+ var param = elem.get_Parameter(BuiltInParameter.DOOR_NUMBER).AsString();
+ if (string.IsNullOrEmpty(param))
+ {
+ li.Add(elem.Id);
+ }
+ }
+ UiDocument.Selection.SetElementIds(li);
+ }
- private void ReadExcel(string path)
- {
- FileInfo fi = new(path);
- using ExcelPackage package = new(fi);
- var worksheet = package.Workbook.Worksheets[1];
- ////获取worksheet的行数
- //int rows = worksheet .Dimension.End.Row;
- ////获取worksheet的列数
- //int cols = worksheet .Dimension.End.Column;
- //worksheet.TrimLastEmptyRows();
+ private void ReadExcel(string path)
+ {
+ FileInfo fi = new(path);
+ using ExcelPackage package = new(fi);
+ var worksheet = package.Workbook.Worksheets[1];
+ ////获取worksheet的行数
+ //int rows = worksheet .Dimension.End.Row;
+ ////获取worksheet的列数
+ //int cols = worksheet .Dimension.End.Column;
+ //worksheet.TrimLastEmptyRows();
- AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve;
- try
- {
- var items = package.ToList(1, configuration => configuration.SkipCastingErrors());
+ AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve;
+ try
+ {
+ var items = package.ToList(1, configuration => configuration.SkipCastingErrors());
- var elems = new FilteredElementCollector(Document)
- .OfCategory(BuiltInCategory.OST_SecurityDevices)
- .WhereElementIsNotElementType();
- StringBuilder sb = new();
- using var trans = new Transaction(Document, "读取Excel");
- trans.Start();
+ var elems = new FilteredElementCollector(Document)
+ .OfCategory(BuiltInCategory.OST_SecurityDevices)
+ .WhereElementIsNotElementType();
+ StringBuilder sb = new();
+ using var trans = new Transaction(Document, "读取Excel");
+ trans.Start();
- foreach (var elem in elems)
- {
- foreach (var item in items)
- {
- var param = elem.GetParameters("ID-100-编号").FirstOrDefault();
- if (param?.HasValue != true)
- {
- sb.AppendLine(elem.Id.ToString());
- }
- var param1 = elem.get_Parameter(BuiltInParameter.DOOR_NUMBER);
- if (param.AsString() == item.Origin)
- {
- param1.Set($"{item.Target}");
- }
- }
- }
- trans.Commit();
- if (sb.Length > 0)
- {
- System.Windows.MessageBox.Show(sb.ToString());
- }
- //foreach (ParamterModel eamFacility in Items) { }
+ foreach (var elem in elems)
+ {
+ foreach (var item in items)
+ {
+ var param = elem.GetParameters("ID-100-编号").FirstOrDefault();
+ if (param?.HasValue != true)
+ {
+ sb.AppendLine(elem.Id.ToString());
+ }
+ var param1 = elem.get_Parameter(BuiltInParameter.DOOR_NUMBER);
+ if (param.AsString() == item.Origin)
+ {
+ param1.Set($"{item.Target}");
+ }
+ }
+ }
+ trans.Commit();
+ if (sb.Length > 0)
+ {
+ System.Windows.MessageBox.Show(sb.ToString());
+ }
+ //foreach (ParamterModel eamFacility in Items) { }
- //var groups = Facilities .GroupBy(x => x.Story);
- //foreach (var group in groups)
- //{
- // if (group .Key == null)
- // {
- // continue;
- // }
- // StoryCodeMappers .Add(new() { Story = group.Key, });
- //}
+ //var groups = Facilities .GroupBy(x => x.Story);
+ //foreach (var group in groups)
+ //{
+ // if (group .Key == null)
+ // {
+ // continue;
+ // }
+ // StoryCodeMappers .Add(new() { Story = group.Key, });
+ //}
- //IsMapper = false;
- //IsComparison = false;
- //Instances .ForEach(ins => ins.IsMapped = false);
- }
- catch (EPPlus.Core.Extensions.Exceptions.ExcelValidationException)
- {
- System.Windows.MessageBox.Show("列名不存在或不匹配或检查表头是否存在换行。");
- }
- finally
- {
- AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomainOnAssemblyResolve;
- }
- }
+ //IsMapper = false;
+ //IsComparison = false;
+ //Instances .ForEach(ins => ins.IsMapped = false);
+ }
+ catch (EPPlus.Core.Extensions.Exceptions.ExcelValidationException)
+ {
+ System.Windows.MessageBox.Show("列名不存在或不匹配或检查表头是否存在换行。");
+ }
+ finally
+ {
+ AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomainOnAssemblyResolve;
+ }
+ }
- private static Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args)
- {
- if (!args.Name.Contains("ComponentModel.Annotations"))
- {
- return null;
- }
+ private static Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args)
+ {
+ if (!args.Name.Contains("ComponentModel.Annotations"))
+ {
+ return null;
+ }
- var assemblyFile = Path.Combine(
- Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
- "System.ComponentModel.Annotations.dll"
- );
- return File.Exists(assemblyFile) ? Assembly.LoadFrom(assemblyFile) : null;
- }
+ var assemblyFile = Path.Combine(
+ Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
+ "System.ComponentModel.Annotations.dll"
+ );
+ return File.Exists(assemblyFile) ? Assembly.LoadFrom(assemblyFile) : null;
+ }
}
diff --git a/RvAddinTest/RevitAddin.cs b/RvAddinTest/RevitAddin.cs
index 5f47494..83b4ece 100644
--- a/RvAddinTest/RevitAddin.cs
+++ b/RvAddinTest/RevitAddin.cs
@@ -1,13 +1,10 @@
using System.IO;
using System.Reflection;
using System.Text;
-using System.Windows;
-using System.Xml.Linq;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.Creation;
using Autodesk.Revit.DB;
-using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Nice3point.Revit.Toolkit.External;
diff --git a/RvAddinTest/RvAddinTest.csproj b/RvAddinTest/RvAddinTest.csproj
index 3b60799..ee0bb63 100644
--- a/RvAddinTest/RvAddinTest.csproj
+++ b/RvAddinTest/RvAddinTest.csproj
@@ -12,6 +12,7 @@
AnyCPU;x64
false
false
+ 2018
$(DefineConstants);REVIT2018
@@ -26,17 +27,17 @@
-
-
-
-
-
+
+
+
+
+
-
+
diff --git a/RvAddinTest/SetDimensions.cs b/RvAddinTest/SetDimensions.cs
deleted file mode 100644
index 2580832..0000000
--- a/RvAddinTest/SetDimensions.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using Autodesk.Revit.Attributes;
-using Autodesk.Revit.DB;
-using Autodesk.Revit.DB.Mechanical;
-using Autodesk.Revit.UI;
-
-namespace RvAddinTest
-{
- [Transaction(TransactionMode.Manual)]
- [Regeneration(RegenerationOption.Manual)]
- public class SetDimensions : IExternalCommand
- {
- public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
- {
- //程序UI界面
- var uiapp = commandData.Application;
- //获取元素(选择) 显示元素 视图(活动视图)管理(对象)
- var uidoc = uiapp.ActiveUIDocument;
- //程序
- var app = uiapp.Application;
- //获取位置和场地 视图(多个视图)管理 获取元素(Revit 项目里的全部元素)
- var doc = uidoc.Document;
- //获取所有打开文档
- var docset = uiapp.Application.Documents;
- //当前视图
- var view = doc.ActiveView;
- try
- {
- var refers = uidoc.Selection.GetElementIds();
- var toRotate = new List();
- var toDelete = new List();
- foreach (var item in refers)
- {
- var e = doc.GetElement(item) as IndependentTag;
- var mep = doc.GetElement(e.TaggedElementId.HostElementId);
- var loc = mep.Location as LocationCurve;
- var c = loc.Curve.Length < 2;
- if (c || Math.Abs((loc.Curve as Line).Direction.Z) > 0.2)
- {
- toDelete.Add(item);
- continue;
- }
- if (loc.Curve is Line l)
- {
- var ra = l.Direction.AngleTo(XYZ.BasisX);
- if (ra > Math.PI / 4 && ra < Math.PI / 4 * 3)
- {
- toRotate.Add(e);
- }
- }
- }
- using (var ts = new Transaction(doc, "旋转标注"))
- {
- ts.Start();
- foreach (var item in toRotate)
- {
- item.TagOrientation = TagOrientation.Vertical;
- }
- doc.Delete(toDelete);
- ts.Commit();
- }
- }
- catch (Exception ex)
- {
-
- }
-
- #region FilterExecute
- //System.Collections.Generic.List col = new FilteredElementCollector(doc, doc.ActiveView.Id).WhereElementIsNotElementType()
- // .Where(e => e.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS)?.AsString() == "380/220V电源")
- // .Select(e => e.Id).ToList();
- //uidoc.Selection.SetElementIds(col);
- //Reference refer = uidoc.Selection.PickObject(ObjectType.Element, "请选择XXX");
- //var revitLink = uidoc.Document.GetElement(refer) as RevitLinkInstance;
- //var linkDoc = revitLink.GetLinkDocument();
- //var wallIds = new FilteredElementCollector(linkDoc).OfClass(typeof(Wall)).ToElementIds ();
- //Debug.WriteLine(wallIds.Count);
- //using (var ts=new Transaction(doc,"Copy"))
- //{
- // ts.Start();
- // ElementTransformUtils.CopyElements(linkDoc, wallIds, doc, Transform.Identity, new CopyPasteOptions());
- // ts.Commit();
- //}
-
- //foreach (Wall wall in walls)
- //{
- // Debug.WriteLine(wall.Id);
- // Thread.Sleep(500);
- //}
- #endregion SelectExecute
-
- return Result.Succeeded;
- }
- }
-}
\ No newline at end of file
diff --git a/RvAddinTest/TempCmd.cs b/RvAddinTest/TempCmd.cs
index 02a5733..83a75ae 100644
--- a/RvAddinTest/TempCmd.cs
+++ b/RvAddinTest/TempCmd.cs
@@ -1,20 +1,11 @@
-using System;
-using System.Net;
-using System.Windows;
-
-using Autodesk.Revit.Attributes;
+using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
-using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.DB.Plumbing;
-using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
-using CommunityToolkit.Mvvm.DependencyInjection;
-
using Nice3point.Revit.Toolkit.External;
using Sai.Toolkit.Revit.Assist;
-using Sai.Toolkit.Revit.Helpers;
namespace RvAddinTest;
[Transaction(TransactionMode.Manual)]
@@ -204,19 +195,4 @@ public class TempCmd : ExternalCommand
}
}, "CMD");
}
-
- public class ArrangeElement
- {
- public XYZ Translation { get; set; }
-
- public int Index { get; set; }
-
- public Element ElementToMove { get; set; }
-
- ///
- /// 与基准元素的间距及方向向量
- ///
- public XYZ HorizonDistanceVector { get; set; }
-
- }
}
\ No newline at end of file
diff --git a/Sai.RvKits.sln b/Sai.RvKits.sln
index de980cb..a91249a 100644
--- a/Sai.RvKits.sln
+++ b/Sai.RvKits.sln
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# 17
+# Visual Studio Version 17
VisualStudioVersion = 17.1.32421.90
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sai.RvKits", "Sai.RvKits\Sai.RvKits.csproj", "{AA64ED67-E47E-46B1-A6F6-999A26193E57}"
@@ -33,6 +33,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sai.RvKits Setup", "Sai.RvK
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp", "ConsoleApp\ConsoleApp.csproj", "{3F3C932B-851E-48D4-9D35-09DDBDD0F690}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPFUIAPP", "WPFUIAPP\WPFUIAPP.csproj", "{B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
All|Any CPU = All|Any CPU
@@ -207,6 +209,26 @@ Global
{3F3C932B-851E-48D4-9D35-09DDBDD0F690}.Release|Any CPU.Build.0 = Release|Any CPU
{3F3C932B-851E-48D4-9D35-09DDBDD0F690}.Release|x64.ActiveCfg = Release|Any CPU
{3F3C932B-851E-48D4-9D35-09DDBDD0F690}.Release|x64.Build.0 = Release|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.All|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.All|Any CPU.Build.0 = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.All|x64.ActiveCfg = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.All|x64.Build.0 = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Debug One|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Debug One|Any CPU.Build.0 = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Debug One|x64.ActiveCfg = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Debug One|x64.Build.0 = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Debug|x64.Build.0 = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.DefaultBuild|x64.Build.0 = Debug|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Release|x64.ActiveCfg = Release|Any CPU
+ {B0794664-92A5-44AC-AAD2-DB7C4A79A3A9}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Sai.RvKits/ModelManager/ModelCheckViewModel.cs b/Sai.RvKits/ModelManager/ModelCheckViewModel.cs
index d32419a..f4b9b55 100644
--- a/Sai.RvKits/ModelManager/ModelCheckViewModel.cs
+++ b/Sai.RvKits/ModelManager/ModelCheckViewModel.cs
@@ -14,7 +14,6 @@ using CommunityToolkit.Mvvm.Input;
using Microsoft.Win32;
using Nice3point.Revit.Toolkit.External.Handlers;
-using Nice3point.Revit.Toolkit.Utils;
using Sai.RvKits.Windows;
@@ -24,36 +23,10 @@ namespace Sai.RvKits.RvFamily;
public partial class ModelCheckViewModel : ObservableObject
{
- private readonly ActionEventHandler showElementsSectionBox = new();
private readonly CorrectReferLevelExecutes correctReferLevelExecutes;
- [ObservableProperty]
- private bool useSectionBox;
- [ObservableProperty]
- private bool isCheckEqual;
-
- [ObservableProperty]
- private bool isCheckLength;
-
- [ObservableProperty]
- private bool isCheckLevel;
-
- [ObservableProperty]
- private bool isCheckName;
-
- [ObservableProperty]
- private bool isCheckProps;
-
- [ObservableProperty]
- private bool isCheckSlope;
-
- [ObservableProperty]
- private bool isCheckSymbolGeometry;
-
- [ObservableProperty]
- private int errorCount;
-
private readonly ActionEventHandler modifyModel = new();
+ private readonly ActionEventHandler showElementsSectionBox = new();
private readonly UIApplication uiapp;
public ModelCheckViewModel(UIApplication uiapp)
@@ -66,6 +39,15 @@ public partial class ModelCheckViewModel : ObservableObject
FindBasePoint();
}
+ private bool CanExport()
+ {
+ return Items.Any();
+ }
+ private static bool CanShowElement(object obj)
+ {
+ return obj is MessageModel { IsInstance: true };
+ }
+
[RelayCommand]
private /*async Task*/ void CheckModel(/*CancellationToken token*/)
{
@@ -357,45 +339,6 @@ public partial class ModelCheckViewModel : ObservableObject
ExportToExcelCommand.NotifyCanExecuteChanged();
}
- private void FindBasePoint()
- {
- var basePoints = uiapp.ActiveUIDocument.Document.OfClass().OfType();
- foreach (var item in basePoints)
- {
- //南北
- var ns = Math.Round(
- item.get_Parameter(BuiltInParameter.BASEPOINT_NORTHSOUTH_PARAM).AsDouble() * 0.3048,
- 4,
- MidpointRounding.AwayFromZero
- );
- //东西
- var ew = Math.Round(item.get_Parameter(BuiltInParameter.BASEPOINT_EASTWEST_PARAM).AsDouble() * 0.3048, 4, MidpointRounding.AwayFromZero);
- //高程
- var elev = Math.Round(
- item.get_Parameter(BuiltInParameter.BASEPOINT_ELEVATION_PARAM).AsDouble() * 0.3048,
- 4,
- MidpointRounding.AwayFromZero
- );
- if (item.IsShared)//测量点
- {
- SharedBasePoint = $"南北:{ns}m;东西:{ew}m;高程:{elev}m";
- continue;
- }
-
- if (item.Category.GetHashCode() == -2001271)//项目基点
- {
- //正北角度
- var angle = item.get_Parameter(BuiltInParameter.BASEPOINT_ANGLETON_PARAM).AsValueString();
- ProjectBasePoint = $"南北:{ns}m;东西:{ew}m;高程:{elev}m;角度:{angle}";
- }
- }
- }
-
- private bool CanExport()
- {
- return Items.Any();
- }
-
[RelayCommand(CanExecute = nameof(CanExport))]
private void ExportToExcel()
{
@@ -488,6 +431,40 @@ public partial class ModelCheckViewModel : ObservableObject
}
}
+ private void FindBasePoint()
+ {
+ var basePoints = uiapp.ActiveUIDocument.Document.OfClass().OfType();
+ foreach (var item in basePoints)
+ {
+ //南北
+ var ns = Math.Round(
+ item.get_Parameter(BuiltInParameter.BASEPOINT_NORTHSOUTH_PARAM).AsDouble() * 0.3048,
+ 4,
+ MidpointRounding.AwayFromZero
+ );
+ //东西
+ var ew = Math.Round(item.get_Parameter(BuiltInParameter.BASEPOINT_EASTWEST_PARAM).AsDouble() * 0.3048, 4, MidpointRounding.AwayFromZero);
+ //高程
+ var elev = Math.Round(
+ item.get_Parameter(BuiltInParameter.BASEPOINT_ELEVATION_PARAM).AsDouble() * 0.3048,
+ 4,
+ MidpointRounding.AwayFromZero
+ );
+ if (item.IsShared)//测量点
+ {
+ SharedBasePoint = $"南北:{ns}m;东西:{ew}m;高程:{elev}m";
+ continue;
+ }
+
+ if (item.Category.GetHashCode() == -2001271)//项目基点
+ {
+ //正北角度
+ var angle = item.get_Parameter(BuiltInParameter.BASEPOINT_ANGLETON_PARAM).AsValueString();
+ ProjectBasePoint = $"南北:{ns}m;东西:{ew}m;高程:{elev}m;角度:{angle}";
+ }
+ }
+ }
+
[RelayCommand]
private void ModifyModel()
{
@@ -576,10 +553,6 @@ public partial class ModelCheckViewModel : ObservableObject
SingletonChildWindowManager.ShowOrActivate(uiapp.ActiveUIDocument, errorItems, "未解决错误");
});
}
- private static bool CanShowElement(object obj)
- {
- return obj is MessageModel { IsInstance: true };
- }
[RelayCommand(CanExecute = nameof(CanShowElement))]
private void ShowElement(object obj)
@@ -629,11 +602,39 @@ public partial class ModelCheckViewModel : ObservableObject
}
[ObservableProperty]
- private ObservableCollection items;
+ public partial int ErrorCount { get; set; }
+
+ [ObservableProperty]
+ public partial bool IsCheckEqual { get; set; }
+
+ [ObservableProperty]
+ public partial bool IsCheckLength { get; set; }
+
+ [ObservableProperty]
+ public partial bool IsCheckLevel { get; set; }
+
+ [ObservableProperty]
+ public partial bool IsCheckName { get; set; }
+
+ [ObservableProperty]
+ public partial bool IsCheckProps { get; set; }
+
+ [ObservableProperty]
+ public partial bool IsCheckSlope { get; set; }
+ [ObservableProperty]
+ public partial bool IsCheckSymbolGeometry { get; set; }
+
+ [ObservableProperty]
+ public partial ObservableCollection Items { get; set; }
+ [ObservableProperty]
+ public partial int MyProperty { get; set; }
public string ProjectBasePoint { get; set; }
public string SharedBasePoint { get; set; }
+
+ [ObservableProperty]
+ public partial bool UseSectionBox { get; set; }
}
public enum ModelCheckType
diff --git a/Sai.RvKits/ModelManager/SeparateModelCmd.cs b/Sai.RvKits/ModelManager/SeparateModelCmd.cs
new file mode 100644
index 0000000..df63bb3
--- /dev/null
+++ b/Sai.RvKits/ModelManager/SeparateModelCmd.cs
@@ -0,0 +1,17 @@
+using Autodesk.Revit.Attributes;
+using Autodesk.Revit.DB;
+
+using Nice3point.Revit.Toolkit.External;
+
+namespace Sai.RvKits.ModelManager;
+[Transaction(TransactionMode.Manual)]
+[Regeneration(RegenerationOption.Manual)]
+public class SeparateModelCmd : ExternalCommand
+{
+ public override void Execute()
+ {
+ //var win = new SeparateModelWin();
+ //win.Show();
+ SingletonChildWindowManager.ShowOrActivate();
+ }
+}
\ No newline at end of file
diff --git a/Sai.RvKits/ModelManager/SeparateModelViewModel.cs b/Sai.RvKits/ModelManager/SeparateModelViewModel.cs
new file mode 100644
index 0000000..1efad09
--- /dev/null
+++ b/Sai.RvKits/ModelManager/SeparateModelViewModel.cs
@@ -0,0 +1,76 @@
+using System.IO;
+using System.Windows;
+
+using Autodesk.Revit.DB;
+
+using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
+
+using Nice3point.Revit.Toolkit.External.Handlers;
+
+using UIFrameworkServices;
+
+namespace Sai.RvKits.ModelManager
+{
+ public partial class SeparateModelViewModel : ObservableObject
+ {
+ private readonly ActionEventHandler separate = new();
+
+ [ObservableProperty]
+ private string fileName = "示例";
+ [ObservableProperty]
+ private string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
+
+ [RelayCommand]
+ private void Separate()
+ {
+ separate.Raise(
+ uiapp =>
+ {
+ var uidoc = uiapp.ActiveUIDocument;
+ var doc = uidoc.Document;
+ var list = uidoc.Selection.GetElementIds();
+
+ if (list.Count == 0)
+ {
+ MessageBox.Show("未选中元素", "提示");
+ return;
+ }
+ SpearateByIds(doc, list);
+ doc.Invoke(
+ ts =>
+ {
+ doc.Delete(list);
+ },
+ "删除元素");
+ });
+ }
+ private void SpearateByIds(Document doc, ICollection list)
+ {
+ var allOthers = doc.OfModelCollector()
+ .Excluding(list)
+ .ToElementIds();
+ var ids = doc.OfClass().ToElementIds();
+ var modelLineIds = doc.OfCollector().OfCategory(BuiltInCategory.OST_Lines).Select(e => e.Id).ToList();
+ var texts = doc.OfCollector().OfCategory(BuiltInCategory.OST_TextNotes).Select(e => e.Id).ToList();
+ doc.Invoke(
+ ts =>
+ {
+ doc.Delete(allOthers);
+ doc.Delete(ids);
+ doc.Delete(modelLineIds);
+ doc.Delete(texts);
+ },
+ "删除其他");
+ if (!Directory.Exists(FolderPath))
+ {
+ Directory.CreateDirectory(FolderPath);
+ }
+ var filePath = Path.Combine(FolderPath, $"{FileName}.rvt");
+ SaveAsOptions options = new SaveAsOptions() { OverwriteExistingFile = true, PreviewViewId = doc.ActiveView.Id, Compact = true };
+
+ doc.SaveAs(filePath, options);
+ QuickAccessToolBarService.performMultipleUndoRedoOperations(true, 1);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Sai.RvKits/ModelManager/SeparateModelWin.xaml b/Sai.RvKits/ModelManager/SeparateModelWin.xaml
new file mode 100644
index 0000000..979897c
--- /dev/null
+++ b/Sai.RvKits/ModelManager/SeparateModelWin.xaml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Sai.RvKits/ModelManager/SeparateModelWin.xaml.cs b/Sai.RvKits/ModelManager/SeparateModelWin.xaml.cs
new file mode 100644
index 0000000..9d89dea
--- /dev/null
+++ b/Sai.RvKits/ModelManager/SeparateModelWin.xaml.cs
@@ -0,0 +1,14 @@
+using Wpf.Ui.Extend.Controls;
+
+namespace Sai.RvKits.ModelManager;
+///
+/// SeparateModelWin.xaml 的交互逻辑
+///
+public partial class SeparateModelWin : FluentWindowEx
+{
+ public SeparateModelWin()
+ {
+ InitializeComponent();
+ }
+
+}
diff --git a/Sai.RvKits/ModelManager/TemplateManagerViewModel.cs b/Sai.RvKits/ModelManager/TemplateManagerViewModel.cs
index 9f01ca5..1d8ead1 100644
--- a/Sai.RvKits/ModelManager/TemplateManagerViewModel.cs
+++ b/Sai.RvKits/ModelManager/TemplateManagerViewModel.cs
@@ -1,6 +1,5 @@
using System.Drawing;
using System.Drawing.Text;
-using System.Windows;
using Autodesk.Revit.DB;
@@ -32,6 +31,56 @@ public partial class TemplateManagerViewModel : ObservableObject
fontFamilies = installedFonts.Families;
}
[RelayCommand]
+ private void CleanFontType()
+ {
+ handler.Raise(
+ uiapp =>
+ {
+ var doc = uiapp.ActiveUIDocument.Document;
+ var textTypes = doc.OfClass().ToList();
+
+ foreach (var type in textTypes)
+ {
+ {
+ if (type is TextNoteType textNoteType)
+ {
+
+ try
+ {
+ var font = textNoteType.get_Parameter(BuiltInParameter.TEXT_FONT).AsString();
+ var size = textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).AsValueString().TrimEnd('m');
+ var dSize = Math.Round(Convert.ToDouble(size), 1, MidpointRounding.AwayFromZero);
+ if (dSize < 0.23)
+ {
+ return;
+ }
+ textNoteType.get_Parameter(BuiltInParameter.TEXT_SIZE).SetValueString(dSize.ToString());
+ var scale = textNoteType.get_Parameter(BuiltInParameter.TEXT_WIDTH_SCALE).AsValueString();
+ //var color = textNoteType.get_Parameter(BuiltInParameter.LINE_COLOR).AsInteger();
+ var name = $"{font}-{dSize}mm-{scale}";
+ var isExist = textTypes.FirstOrDefault(t => t.Name == name);
+ if (isExist != null)
+ {
+ var texts = doc.OfClass().Where(e => e.GetTypeId() == textNoteType.Id).ToList();
+ texts.ForEach(e => e.ChangeTypeId(isExist.Id));
+ doc.Regenerate();
+ doc.Delete(textNoteType.Id);
+ }
+ else
+ {
+ textNoteType.Name = name;
+ }
+ }
+ catch (Exception)
+ {
+ throw;
+ }
+ }
+ }
+ }
+ });
+ }
+ [RelayCommand]
private void ModifyFont()
{
handler.Raise(
@@ -44,9 +93,9 @@ public partial class TemplateManagerViewModel : ObservableObject
var col = doc.OfClass()
.Cast()
.Where(f => f.FamilyCategory.CategoryType == CategoryType.Annotation);
- foreach(var family in col)
+ foreach (var family in col)
{
- if(!family.IsEditable)
+ if (!family.IsEditable)
{
continue;
}
@@ -56,7 +105,7 @@ public partial class TemplateManagerViewModel : ObservableObject
ts =>
{
var textElements = familyEditing.OfClass().Cast();
- foreach(var text in textElements)
+ foreach (var text in textElements)
{
var type = text.Symbol;
ElementType typeCopy;
@@ -64,7 +113,8 @@ public partial class TemplateManagerViewModel : ObservableObject
{
typeCopy = type.Duplicate(
$"{SelectFontFamily.Name} {FontSize} - {WidthScale}");
- } catch(Autodesk.Revit.Exceptions.ArgumentException)
+ }
+ catch (Autodesk.Revit.Exceptions.ArgumentException)
{
}
type.get_Parameter(BuiltInParameter.TEXT_FONT)?.SetValueString(
@@ -76,14 +126,15 @@ public partial class TemplateManagerViewModel : ObservableObject
}
var textNotes = familyEditing.OfClass().Cast();
- foreach(var text in textNotes)
+ foreach (var text in textNotes)
{
var type = text.Symbol;
try
{
var typeCopy = type.Duplicate(
$"{SelectFontFamily.Name} {FontSize} - {WidthScale}");
- } catch(Autodesk.Revit.Exceptions.ArgumentException)
+ }
+ catch (Autodesk.Revit.Exceptions.ArgumentException)
{
}
type.get_Parameter(BuiltInParameter.TEXT_FONT)?.SetValueString(
@@ -101,7 +152,7 @@ public partial class TemplateManagerViewModel : ObservableObject
},
"载入族");
}
- },"调整文字");
+ }, "调整文字");
});
}
}
\ No newline at end of file
diff --git a/Sai.RvKits/Properties/Resources.Designer.cs b/Sai.RvKits/Properties/Resources.Designer.cs
index 1014542..d8d1101 100644
--- a/Sai.RvKits/Properties/Resources.Designer.cs
+++ b/Sai.RvKits/Properties/Resources.Designer.cs
@@ -60,6 +60,26 @@ namespace Sai.RvKits.Properties {
}
}
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap adaptive_MEP_tag_16px {
+ get {
+ object obj = ResourceManager.GetObject("adaptive_MEP_tag_16px", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap adaptive_MEP_tag_32px {
+ get {
+ object obj = ResourceManager.GetObject("adaptive_MEP_tag_32px", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
///
@@ -220,16 +240,6 @@ namespace Sai.RvKits.Properties {
}
}
- ///
- /// 查找 System.Drawing.Bitmap 类型的本地化资源。
- ///
- internal static System.Drawing.Bitmap arrange_mep_16px1 {
- get {
- object obj = ResourceManager.GetObject("arrange_mep_16px1", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
///
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
///
@@ -240,16 +250,6 @@ namespace Sai.RvKits.Properties {
}
}
- ///
- /// 查找 System.Drawing.Bitmap 类型的本地化资源。
- ///
- internal static System.Drawing.Bitmap arrange_mep_32px1 {
- get {
- object obj = ResourceManager.GetObject("arrange_mep_32px1", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
///
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
///
diff --git a/Sai.RvKits/Properties/Resources.resx b/Sai.RvKits/Properties/Resources.resx
index 6f2517d..c54d1f4 100644
--- a/Sai.RvKits/Properties/Resources.resx
+++ b/Sai.RvKits/Properties/Resources.resx
@@ -499,10 +499,10 @@
..\Resources\add_insulation_32px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\arrange_mep_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\adaptive_MEP_tag_32px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\arrange_mep_32px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\adaptive_MEP_tag_16px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
\ No newline at end of file
diff --git a/Sai.RvKits/Resources/adaptive_MEP_tag_16px.png b/Sai.RvKits/Resources/adaptive_MEP_tag_16px.png
new file mode 100644
index 0000000..77de713
Binary files /dev/null and b/Sai.RvKits/Resources/adaptive_MEP_tag_16px.png differ
diff --git a/Sai.RvKits/Resources/adaptive_MEP_tag_32px.png b/Sai.RvKits/Resources/adaptive_MEP_tag_32px.png
new file mode 100644
index 0000000..b4fa7cb
Binary files /dev/null and b/Sai.RvKits/Resources/adaptive_MEP_tag_32px.png differ
diff --git a/Sai.RvKits/RvCommon/ModelByCurveCreatorViewModel.cs b/Sai.RvKits/RvCommon/ModelByCurveCreatorViewModel.cs
index 5b76f32..a3a7bda 100644
--- a/Sai.RvKits/RvCommon/ModelByCurveCreatorViewModel.cs
+++ b/Sai.RvKits/RvCommon/ModelByCurveCreatorViewModel.cs
@@ -462,7 +462,7 @@ namespace Sai.RvKits.RvCommon
//{
// foreach (var curve in item)
// {
- // previewIds.Add(DebugAssist.CreateTransientGeometries(doc, curve));
+ // previewIds.Add(DebugAssist.CreateTransientElements(doc, curve));
// }
//}
//var solid = GeometryCreationUtilities.CreateSweptGeometry(
diff --git a/Sai.RvKits/RvFamily/FamilyLibrary/RevitFileUtil.cs b/Sai.RvKits/RvFamily/FamilyLibrary/RevitFileUtil.cs
index 018c14c..2200706 100644
--- a/Sai.RvKits/RvFamily/FamilyLibrary/RevitFileUtil.cs
+++ b/Sai.RvKits/RvFamily/FamilyLibrary/RevitFileUtil.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Diagnostics;
+using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.IO.Packaging;
diff --git a/Sai.RvKits/RvMEP/CorrectMEPCurveSlopeCmd.cs b/Sai.RvKits/RvMEP/CorrectMEPCurveSlopeCmd.cs
index 7921983..407101f 100644
--- a/Sai.RvKits/RvMEP/CorrectMEPCurveSlopeCmd.cs
+++ b/Sai.RvKits/RvMEP/CorrectMEPCurveSlopeCmd.cs
@@ -1,12 +1,11 @@
-using System.Security.Cryptography;
-
-using Autodesk.Revit.Attributes;
+using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Electrical;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.DB.Plumbing;
using Nice3point.Revit.Toolkit.External;
+using Nice3point.Revit.Toolkit.Utils;
namespace Sai.RvKits.RvMEP;
@@ -77,6 +76,42 @@ public class CorrectMEPCurveSlopeCmd : ExternalCommand
}
}, "修正坡度");
}
+ private void CorrectSlope()
+ {
+ var ids = UiDocument.Selection.GetElementIds();
+ Document.Modify(
+ set => set.Transaction).Commit((doc, t) =>
+ {
+ foreach (var id in ids)
+ {
+ var elem = Document.GetElement(id);
+ if (elem is MEPCurve mep)
+ {
+ var loc = mep.GetCurve() as Line;
+ var x = Math.Round(loc.Direction.X);
+ var y = Math.Round(loc.Direction.Y);
+ var z = Math.Round(loc.Direction.Z);
+ //if (Math.Abs(x) < 10E-5)
+ //{
+ // x = 0;
+ //}
+ //if (Math.Abs(y) < 10E-5)
+ //{
+ // y = 0;
+ //}
+ //if (Math.Abs(z) < 10E-5)
+ //{
+ // z = 0;
+ //}
+ var dir = new XYZ(x, y, z);
+ var endPoint = loc.Origin + dir * loc.Length;
+ var li = Line.CreateBound(loc.Origin, endPoint);
+ var locx = mep.GetLocationCurve();
+ locx.Curve = li;
+ }
+ }
+ });
+ }
private void ModifyMEPCurve(MEPCurve mepCurve)
{
var loc = mepCurve.Location as LocationCurve;
diff --git a/Sai.RvKits/RvView/AdaptiveMEPTagCmd.cs b/Sai.RvKits/RvView/AdaptiveMEPTagCmd.cs
new file mode 100644
index 0000000..d33dc94
--- /dev/null
+++ b/Sai.RvKits/RvView/AdaptiveMEPTagCmd.cs
@@ -0,0 +1,57 @@
+using Autodesk.Revit.Attributes;
+using Autodesk.Revit.DB;
+
+using Nice3point.Revit.Toolkit.External;
+
+namespace Sai.RvKits.RvView;
+
+[Transaction(TransactionMode.Manual)]
+[Regeneration(RegenerationOption.Manual)]
+public class AdaptiveMEPTagCmd : ExternalCommand
+{
+ public override void Execute()
+ {
+ try
+ {
+ var tags = UiDocument.SelectObjects();
+ var toRotate = new List();
+ var toDelete = new List();
+ foreach (var tag in tags)
+ {
+ var mep = Document.GetElement(tag.TaggedElementId.HostElementId);
+ var loc = mep.Location as LocationCurve;
+ var c = loc.Curve.Length < 2;
+ if (c || Math.Abs((loc.Curve as Line).Direction.Z) > 0.2)
+ {
+ toDelete.Add(tag.Id);
+ continue;
+ }
+ if (loc.Curve is Line l)
+ {
+ var ra = l.Direction.AngleTo(XYZ.BasisX);
+ if (ra > Math.PI / 4 && ra < Math.PI / 4 * 3)
+ {
+ toRotate.Add(tag);
+ }
+ }
+ }
+ Document.Invoke(
+ ts =>
+ {
+ foreach (var item in toRotate)
+ {
+ item.TagOrientation = TagOrientation.Vertical;
+ }
+ Document.Delete(toDelete);
+ }, "旋转标注");
+ }
+ catch (Autodesk.Revit.Exceptions.OperationCanceledException)
+ {
+
+ }
+ catch (Exception)
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Sai.RvKits/RvView/ElementControlDock.xaml b/Sai.RvKits/RvView/ElementControlDock.xaml
index 6a3ead5..5d85681 100644
--- a/Sai.RvKits/RvView/ElementControlDock.xaml
+++ b/Sai.RvKits/RvView/ElementControlDock.xaml
@@ -18,11 +18,17 @@
Spacing="5">
+
@@ -80,15 +80,15 @@
-->
-
-
-
+
+
+
-
+
-
+
-
+
@@ -106,6 +106,7 @@
-->
+
@@ -142,6 +143,11 @@
+
+
+
+
+
@@ -166,6 +172,9 @@
+
+ Code
+
True
True
diff --git a/Sai.RvKits/UIRibbon/DrawingViewApp.cs b/Sai.RvKits/UIRibbon/DrawingViewApp.cs
index eb74c8c..dec6b59 100644
--- a/Sai.RvKits/UIRibbon/DrawingViewApp.cs
+++ b/Sai.RvKits/UIRibbon/DrawingViewApp.cs
@@ -1,7 +1,5 @@
-using System;
-using System.Windows;
+using System.Windows;
-using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Windows;
@@ -10,8 +8,6 @@ using Nice3point.Revit.Toolkit.External.Handlers;
using Sai.RvKits.Properties;
using Sai.RvKits.RvView;
-using adWin = Autodesk.Windows;
-
namespace Sai.RvKits.UIRibbon;
public class DrawingViewApp
@@ -46,6 +42,12 @@ public class DrawingViewApp
Resources.two_lines_16px,
"选择要标注的两条平行的几何模型边缘线进行标注。"
);
+ var adaptiveMEPTag = UIAssist.NewPushButtonData(
+ "自适应标记",
+ Resources.adaptive_MEP_tag_32px,
+ Resources.adaptive_MEP_tag_16px,
+ "删除距离过密的标记及管上标记方向调整"
+ );
var visibilityControl = UIAssist.NewPushButtonData(
"可见性",
@@ -98,7 +100,7 @@ public class DrawingViewApp
"元素菜单控制"
);
- ribbonPanel.AddStackedItems(dim2Line, autoAlignTags, arrangeTags);
+ ribbonPanel.AddSplitButton("标记工具", dim2Line, autoAlignTags, arrangeTags, adaptiveMEPTag);
ribbonPanel.AddStackedItems(visibilityControl, sectionBox, filter);
//ribbonPanel.AddSplitButton(splitBtn1, dim2Line, autoAlignTags, arrangeTags);
diff --git a/Sai.Toolkit.Mvvm/Converters/BoolInverterConverter.cs b/Sai.Toolkit.Mvvm/Converters/InvertBooleanConverter.cs
similarity index 100%
rename from Sai.Toolkit.Mvvm/Converters/BoolInverterConverter.cs
rename to Sai.Toolkit.Mvvm/Converters/InvertBooleanConverter.cs
diff --git a/Sai.Toolkit.Mvvm/Sai.Toolkit.Mvvm.projitems b/Sai.Toolkit.Mvvm/Sai.Toolkit.Mvvm.projitems
index 19c1b54..c6088a7 100644
--- a/Sai.Toolkit.Mvvm/Sai.Toolkit.Mvvm.projitems
+++ b/Sai.Toolkit.Mvvm/Sai.Toolkit.Mvvm.projitems
@@ -24,7 +24,7 @@
-
+
diff --git a/Sai.Toolkit.Revit/Assist/CollectorAssist.cs b/Sai.Toolkit.Revit/Assist/CollectorAssist.cs
index 983bb0f..f71fc9d 100644
--- a/Sai.Toolkit.Revit/Assist/CollectorAssist.cs
+++ b/Sai.Toolkit.Revit/Assist/CollectorAssist.cs
@@ -138,6 +138,10 @@ public static class CollectorAssist
&& e is not Panel
&& e is not Mullion
&& e is not RevitLinkInstance)).Select(e => e.Id).ToList();
+ if (li.Count == 0)
+ {
+ return new FilteredElementCollector(doc);
+ }
return new FilteredElementCollector(doc, li);
}
diff --git a/Sai.Toolkit.Revit/Assist/DebugAssist.cs b/Sai.Toolkit.Revit/Assist/DebugAssist.cs
index 6325205..60259ff 100644
--- a/Sai.Toolkit.Revit/Assist/DebugAssist.cs
+++ b/Sai.Toolkit.Revit/Assist/DebugAssist.cs
@@ -1,9 +1,7 @@
-using System.Collections.Generic;
-using System.Diagnostics;
+using System.Diagnostics;
using System.Reflection;
using Autodesk.Revit.DB;
-using Autodesk.Revit.UI;
namespace Sai.Toolkit.Revit.Assist;
@@ -29,7 +27,7 @@ public static class DebugAssist
///
///
///
- public static ElementId CreateTransientGeometries(this Document doc, params GeometryObject[] geoms)
+ public static ElementId CreateTransientElements(this Document doc, params GeometryObject[] geoms)
{
var list = new List(geoms);
var method = GenerateTransientDisplayMethod();
diff --git a/Sai.Toolkit.Revit/Assist/ElementAssist.cs b/Sai.Toolkit.Revit/Assist/ElementAssist.cs
index 085f33e..f706541 100644
--- a/Sai.Toolkit.Revit/Assist/ElementAssist.cs
+++ b/Sai.Toolkit.Revit/Assist/ElementAssist.cs
@@ -65,9 +65,9 @@ public static class ElementAssist
///
/// 获取标高
///
- ///
+ ///
///
- public static ElementId GetLevelId(this Element model)
+ public static ElementId GetLevelId(this Element element)
{
// 定义需要检查的参数列表
var parametersToCheck = new BuiltInParameter[]
@@ -84,7 +84,7 @@ public static class ElementAssist
// 依次检查每个参数
foreach (var param in parametersToCheck)
{
- var baseLevelId = model.get_Parameter(param)?.AsElementId();
+ var baseLevelId = element.get_Parameter(param)?.AsElementId();
if (baseLevelId != ElementId.InvalidElementId && baseLevelId != null)
{
return baseLevelId;
@@ -92,7 +92,7 @@ public static class ElementAssist
}
//最后检查楼板或族基准标高
- return model.LevelId;
+ return element.LevelId;
}
///
/// 转换类型
diff --git a/Sai.Toolkit.Revit/Helpers/Filters.cs b/Sai.Toolkit.Revit/Helpers/Filters.cs
index 7193b1a..85b9f51 100644
--- a/Sai.Toolkit.Revit/Helpers/Filters.cs
+++ b/Sai.Toolkit.Revit/Helpers/Filters.cs
@@ -82,7 +82,9 @@ public class ElementInLinkOrCurrentDocument : ISelectionFilter
&& e is not Panel;
}
}
-
+///
+/// dwg块选择过滤
+///
public class DwgBlockSelection : ISelectionFilter
{
private Element e;
diff --git a/Sai.Toolkit.Revit/Helpers/KeyboardShortcutService.cs b/Sai.Toolkit.Revit/Helpers/KeyboardShortcutService.cs
index 2a831a2..e78e9dc 100644
--- a/Sai.Toolkit.Revit/Helpers/KeyboardShortcutService.cs
+++ b/Sai.Toolkit.Revit/Helpers/KeyboardShortcutService.cs
@@ -1,7 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
+using System.Reflection;
using Autodesk.Revit.UI;
@@ -37,8 +34,26 @@ namespace Sai.Toolkit.Revit.Helpers
}
dictionary.Add(id, shortcutItem);
List list = dictionary.Select((KeyValuePair e) => e.Value).ToList();
- this.SaveShortcuts(list);
- this.ArmCommands();
+
+ /* 项目“Sai.RvKits (net481)”的未合并的更改
+ 在此之前:
+ this.SaveShortcuts(list);
+ this.ArmCommands();
+ 在此之后:
+ SaveShortcuts(list);
+ this.ArmCommands();
+ */
+ KeyboardShortcutService.SaveShortcuts(list);
+
+ /* 项目“Sai.RvKits (net481)”的未合并的更改
+ 在此之前:
+ this.ArmCommands();
+ return true;
+ 在此之后:
+ ArmCommands();
+ return true;
+ */
+ KeyboardShortcutService.ArmCommands();
return true;
}
return false;
@@ -71,8 +86,26 @@ namespace Sai.Toolkit.Revit.Helpers
}
dictionary.Add(item.Key, shortcutItem);
List list = dictionary.Select((KeyValuePair e) => e.Value).ToList();
- this.SaveShortcuts(list);
- this.ArmCommands();
+
+ /* 项目“Sai.RvKits (net481)”的未合并的更改
+ 在此之前:
+ this.SaveShortcuts(list);
+ this.ArmCommands();
+ 在此之后:
+ SaveShortcuts(list);
+ this.ArmCommands();
+ */
+ KeyboardShortcutService.SaveShortcuts(list);
+
+ /* 项目“Sai.RvKits (net481)”的未合并的更改
+ 在此之前:
+ this.ArmCommands();
+ return true;
+ 在此之后:
+ ArmCommands();
+ return true;
+ */
+ KeyboardShortcutService.ArmCommands();
return true;
}
}
@@ -155,8 +188,26 @@ namespace Sai.Toolkit.Revit.Helpers
{
dictionary.Remove(id);
List list = dictionary.Select((KeyValuePair e) => e.Value).ToList();
- this.SaveShortcuts(list);
- this.ArmCommands();
+
+ /* 项目“Sai.RvKits (net481)”的未合并的更改
+ 在此之前:
+ this.SaveShortcuts(list);
+ this.ArmCommands();
+ 在此之后:
+ SaveShortcuts(list);
+ this.ArmCommands();
+ */
+ KeyboardShortcutService.SaveShortcuts(list);
+
+ /* 项目“Sai.RvKits (net481)”的未合并的更改
+ 在此之前:
+ this.ArmCommands();
+ return true;
+ 在此之后:
+ ArmCommands();
+ return true;
+ */
+ KeyboardShortcutService.ArmCommands();
return true;
}
return false;
@@ -214,7 +265,7 @@ namespace Sai.Toolkit.Revit.Helpers
///
/// 加载命令
///
- public void LoadCommands()
+ public static void LoadCommands()
{
ShortcutsHelper.LoadCommands();
}
@@ -228,7 +279,7 @@ namespace Sai.Toolkit.Revit.Helpers
///
/// 应用更改
///
- private void ArmCommands()
+ private static void ArmCommands()
{
ShortcutsHelper.ArmCommands();
}
@@ -244,7 +295,7 @@ namespace Sai.Toolkit.Revit.Helpers
/// 保存ShortcutItems
///
///
- private void SaveShortcuts(ICollection shortcutList)
+ private static void SaveShortcuts(ICollection shortcutList)
{
ShortcutsHelper.SaveShortcuts(shortcutList);
}
diff --git a/Sai.Toolkit.Revit/Helpers/ParameterAssist.cs b/Sai.Toolkit.Revit/Helpers/ParameterAssist.cs
index 82489fc..c520647 100644
--- a/Sai.Toolkit.Revit/Helpers/ParameterAssist.cs
+++ b/Sai.Toolkit.Revit/Helpers/ParameterAssist.cs
@@ -1,404 +1,31 @@
using System.Diagnostics;
using System.IO;
using System.Reflection;
-using System.Windows.Data;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
+using Sai.Toolkit.Revit.Assist;
namespace Sai.Toolkit.Revit.Helpers;
public class ParameterAssist
{
- public static Dictionary GetDefinitionBindings(Document doc)
+ private static ExternalDefinition GetSharedParameter(DefinitionFile file, string groupname, string paramname)
{
- Dictionary dict = [];
- var dep = doc.ParameterBindings.ForwardIterator();
- while (dep.MoveNext())
+ var myGroups = file.Groups;
+ var myGroup = myGroups.get_Item(groupname);
+
+ ExternalDefinition extDef = null;
+
+ if (myGroup != null)
{
- var definition = dep.Key;
- var binding = dep.Current as ElementBinding;
- dict.Add(definition, binding);
+ extDef = myGroup.Definitions.get_Item(paramname) as ExternalDefinition;
}
- return dict;
- }
- ///
- /// 判断参数是什么参数,true是项目参数,false是共享参数的项目参数,null,都不是
- ///
- ///
- ///
- public static bool? IsProjectParameter(Parameter param)
- {
- var doc = param.Element.Document;
- var dict = GetParameterElementBindings(doc);
-
- var ds = dict.Where(
- e => e.Key.GetDefinition().Id == (param.Definition as InternalDefinition)?.Id);
- if (ds.Any())//说明是项目参数
- {
- var d = ds.FirstOrDefault();
- var parameter = d.Key;
- var binding = d.Value;
- if (binding.Categories.Size == 1)//如果只剩下一个类别,则直接移除
- {
- if (parameter is SharedParameterElement)//共享参数
- {
- return true;
- }
- else//项目参数
- {
- return false;
- }
- }
- }
- return null;
- }
- public static void RemoveFamilyParameter(FamilyInstance instance, string paramName)
- {
- Document famdoc = null;
- Document Document = instance.Document;
- try
- {
- Family family = instance.Symbol.Family;
-
- if (family.IsEditable)
- {
- famdoc = instance.Document.EditFamily(family);
- }
- else
- {
- Debug.WriteLine($"{family.Name} 不可编辑。");
- }
-
- if (famdoc != null)
- {
- using (Transaction ts = new(famdoc, "删除参数"))
- {
- ts.Start();
- var parametersToRemove = famdoc.FamilyManager
- .GetParameters()
- .Where(fp => paramName == fp.Definition.Name);
- foreach (FamilyParameter fp in parametersToRemove)
- {
- famdoc.FamilyManager.RemoveParameter(fp);
- }
- ts.Commit();
- }
-
- famdoc.LoadFamily(Document);
- famdoc.Close(false);
- }
- }
- catch (Exception)
- {
- Debug.WriteLine($"{famdoc.Title} 发生错误!");
- }
- }
- ///
- /// 移除元素上的项目参数
- ///
- ///
- public static void RemoveProjectParameter(Parameter param)
- {
- Element element = param.Element;
- var doc = element.Document;
-
- var dict = GetParameterElementBindings(doc);
- var bindings = doc.ParameterBindings;
-
- var ds = dict.Where(
- e => e.Key.GetDefinition().Id == (param.Definition as InternalDefinition)?.Id);
- if (ds.Any())//说明是项目参数
- {
- var d = ds.FirstOrDefault();
- var parameter = d.Key;
- var binding = d.Value;
- if (binding.Categories.Size == 1)//如果只剩下一个类别,则直接移除
- {
- if (parameter is SharedParameterElement)//共享参数
- {
- bindings.Remove(param.Definition);
- }
- else//项目参数
- {
- doc.Delete(parameter.Id);
- }
- }
- else//否则只移除一个类别
- {
- binding.Categories.Erase(element.Category);
- doc.ParameterBindings.ReInsert(parameter.GetDefinition(), binding);
- }
- }
- }
- public static IEnumerable InstanceCategories
- {
- get
- {
- yield return "HVAC 区";
- yield return "专用设备";
- yield return "体量";
- yield return "停车场";
- yield return "卫浴装置";
- yield return "喷头";
- yield return "图纸";
- yield return "地形";
- yield return "场地";
- yield return "坡道";
- yield return "墙";
- yield return "天花板";
- yield return "安全设备";
- yield return "家具";
- yield return "家具系统";
- yield return "导线";
- yield return "屋顶";
- yield return "常规模型";
- yield return "幕墙嵌板";
- yield return "幕墙竖梃";
- yield return "幕墙系统";
- yield return "开关系统";
- yield return "房间";
- yield return "护理呼叫设备";
- yield return "数据设备";
- yield return "机械设备";
- yield return "材质";
- yield return "柱";
- yield return "标高";
- yield return "栏杆扶手";
- yield return "植物";
- yield return "楼板";
- yield return "楼梯";
- yield return "橱柜";
- yield return "火警设备";
- yield return "灯具";
- yield return "照明设备";
- yield return "环境";
- yield return "电气装置";
- yield return "电气设备";
- yield return "电缆桥架";
- yield return "电缆桥架管路";
- yield return "电缆桥架配件";
- yield return "电话设备";
- yield return "电路";
- yield return "空间";
- yield return "窗";
- yield return "竖井洞口";
- yield return "管件";
- yield return "管道";
- yield return "管道占位符";
- yield return "管道系统";
- yield return "管道附件";
- yield return "线管";
- yield return "线管管路";
- yield return "线管配件";
- yield return "组成部分";
- yield return "结构加强板";
- yield return "结构区域钢筋";
- yield return "结构基础";
- yield return "结构柱";
- yield return "结构桁架";
- yield return "结构框架";
- yield return "结构梁系统";
- yield return "结构路径钢筋";
- yield return "结构连接";
- yield return "结构钢筋";
- yield return "结构钢筋网";
- yield return "结构钢筋网区域";
- yield return "视图";
- yield return "详图项目";
- yield return "软管";
- yield return "软风管";
- yield return "轴网";
- yield return "通讯设备";
- yield return "道路";
- yield return "部件";
- yield return "钢筋形状";
- yield return "门";
- yield return "面积";
- yield return "项目信息";
- yield return "预制零件";
- yield return "风管";
- yield return "风管内衬";
- yield return "风管占位符";
- yield return "风管管件";
- yield return "风管系统";
- yield return "风管附件";
- yield return "风管隔热层";
- yield return "风道末端";
- }
- }
-
- public static IEnumerable ProjectParamGroups
- {
- get
- {
- yield return "IFC参数";
- yield return "主端点";
- yield return "光域";
- yield return "其他";
- yield return "分区几何图形";
- yield return "分析平差";
- yield return "分析模型";
- yield return "分析结果";
- yield return "力";
- yield return "力矩";
- yield return "卫浴";
- yield return "可见性";
- yield return "图层";
- yield return "图形";
- yield return "尺寸标注";
- yield return "常规";
- yield return "数据";
- yield return "整个图例";
- yield return "文字";
- yield return "机械";
- yield return "机械 - 流量";
- yield return "机械 - 负荷";
- yield return "材质和装饰";
- yield return "构造";
- yield return "标识数据";
- yield return "标题文字";
- yield return "模型属性";
- yield return "次端点";
- yield return "消防系统";
- yield return "电气";
- yield return "电气 - 照明";
- yield return "电气 - 线路";
- yield return "电气 - 负荷";
- yield return "电气工程";
- yield return "管段和管件";
- yield return "结构";
- yield return "结构分析";
- yield return "绿色建筑属性";
- yield return "编辑板形状";
- yield return "能量分析";
- yield return "释放/杆件力";
- yield return "钢筋集";
- yield return "阶段化";
- yield return "限制条件";
- }
- }
-
- public static IEnumerable TypeCategories
- {
- get
- {
- yield return "专用设备";
- yield return "体量";
- yield return "停车场";
- yield return "卫浴装置";
- yield return "喷头";
- yield return "地形";
- yield return "场地";
- yield return "坡道";
- yield return "墙";
- yield return "天花板";
- yield return "安全设备";
- yield return "家具";
- yield return "家具系统";
- yield return "导线";
- yield return "屋顶";
- yield return "常规模型";
- yield return "幕墙嵌板";
- yield return "幕墙竖梃";
- yield return "幕墙系统";
- yield return "开关系统";
- yield return "护理呼叫设备";
- yield return "数据设备";
- yield return "机械设备";
- yield return "柱";
- yield return "标高";
- yield return "栏杆扶手";
- yield return "植物";
- yield return "楼板";
- yield return "楼梯";
- yield return "橱柜";
- yield return "火警设备";
- yield return "灯具";
- yield return "照明设备";
- yield return "环境";
- yield return "电气装置";
- yield return "电气设备";
- yield return "电缆桥架";
- yield return "电缆桥架管路";
- yield return "电缆桥架配件";
- yield return "电话设备";
- yield return "窗";
- yield return "管件";
- yield return "管道";
- yield return "管道占位符";
- yield return "管道系统";
- yield return "管道附件";
- yield return "线管";
- yield return "线管管路";
- yield return "线管配件";
- yield return "组成部分";
- yield return "结构加强板";
- yield return "结构区域钢筋";
- yield return "结构基础";
- yield return "结构柱";
- yield return "结构桁架";
- yield return "结构框架";
- yield return "结构梁系统";
- yield return "结构路径钢筋";
- yield return "结构连接";
- yield return "结构钢筋";
- yield return "结构钢筋网";
- yield return "结构钢筋网区域";
- yield return "详图项目";
- yield return "软管";
- yield return "软风管";
- yield return "轴网";
- yield return "通讯设备";
- yield return "部件";
- yield return "钢筋形状";
- yield return "门";
- yield return "预制零件";
- yield return "风管";
- yield return "风管内衬";
- yield return "风管占位符";
- yield return "风管管件";
- yield return "风管系统";
- yield return "风管附件";
- yield return "风管隔热层";
- yield return "风道末端";
- }
- }
- ///
- /// 获取参数和元素绑定
- ///
- ///
- ///
- public static Dictionary GetParameterElementBindings(Document doc)
- {
- //项目中所有的参数元素实体
- var parameterElements = new FilteredElementCollector(doc).OfClass(typeof(ParameterElement)).Cast();
-
- Dictionary dict = [];
- //绑定
- var dep = doc.ParameterBindings.ForwardIterator();
- while (dep.MoveNext())
- {
- if (dep.Key is InternalDefinition definition)
- {
- var binding = dep.Current as ElementBinding;
- foreach (var param in parameterElements)
- {
- var def = param.GetDefinition();
-
- if (def.Id == definition.Id)
- {
- dict.Add(param, binding);
- }
- }
- }
-
- }
- return dict;
+ return extDef;
}
///
@@ -649,7 +276,7 @@ public class ParameterAssist
{
var shapeFile = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + $"\\{fileName}.txt";
System.Text.StringBuilder contents = new();
- contents.AppendLine("# This is a Revit shared parameter file.");
+ contents.AppendLine("# This is a Revit shared parameterElement file.");
contents.AppendLine("# Do not edit manually.");
contents.AppendLine("*META VERSION MINVERSION");
contents.AppendLine("META 2 1");
@@ -674,7 +301,7 @@ public class ParameterAssist
File.GetLastWriteTime(Assembly.GetExecutingAssembly().Location).ToUniversalTime()
);
var result =
- "# This is a Revit shared parameter file, generated "
+ "# This is a Revit shared parameterElement file, generated "
+ DateTime.Now.ToShortDateString()
+ " using "
+ name.Name
@@ -723,35 +350,6 @@ public class ParameterAssist
return result;
}
- public static ExternalDefinition GetDefinition(
- DefinitionFile sharedParamFile,
- string definitionName,
-#if REVIT2018 || REVIT2020
- ParameterType paramType,
-#elif REVIT2025
- ForgeTypeId paramType,
-#endif
- ref Guid guid,
- DefinitionGroup group
- )
- {
- new List();
- foreach (var definitionGroup in sharedParamFile.Groups)
- {
- foreach (var definition in definitionGroup.Definitions)
- {
- var externalDefinition = (ExternalDefinition)definition;
- if (externalDefinition.Name == definitionName)
- {
- return externalDefinition;
- }
- }
- }
-
- ExternalDefinitionCreationOptions externalDefinitionCreationOptions = new(definitionName, paramType);
- return group.Definitions.Create(externalDefinitionCreationOptions) as ExternalDefinition;
- }
-
///
/// 获取或创建共享参数文件的参数组中的参数
///
@@ -787,6 +385,62 @@ public class ParameterAssist
return group.Definitions.Create(opt);
}
+ public static ExternalDefinition GetDefinition(
+ DefinitionFile sharedParamFile,
+ string definitionName,
+#if REVIT2018 || REVIT2020
+ ParameterType paramType,
+#elif REVIT2025
+ ForgeTypeId paramType,
+#endif
+ ref Guid guid,
+ DefinitionGroup group
+ )
+ {
+ new List();
+ foreach (var definitionGroup in sharedParamFile.Groups)
+ {
+ foreach (var definition in definitionGroup.Definitions)
+ {
+ var externalDefinition = (ExternalDefinition)definition;
+ if (externalDefinition.Name == definitionName)
+ {
+ return externalDefinition;
+ }
+ }
+ }
+
+ ExternalDefinitionCreationOptions externalDefinitionCreationOptions = new(definitionName, paramType);
+ return group.Definitions.Create(externalDefinitionCreationOptions) as ExternalDefinition;
+ }
+ public static Dictionary GetDefinitionBindings(Document doc)
+ {
+ Dictionary dict = [];
+ var dep = doc.ParameterBindings.ForwardIterator();
+ while (dep.MoveNext())
+ {
+ var definition = dep.Key;
+ var binding = dep.Current as ElementBinding;
+ dict.Add(definition, binding);
+ }
+ return dict;
+ }
+
+ ///
+ /// 获取共享参数文件中的参数组
+ ///
+ ///
+ /// 分组
+ ///
+ public static DefinitionGroup GetGroup(DefinitionGroups groups, string groupName)
+ {
+ return groups is null
+ ? throw new ArgumentNullException(nameof(groups))
+ : groupName is null
+ ? throw new ArgumentNullException(nameof(groupName))
+ : groups.get_Item(groupName) ?? groups.Create(groupName);
+ }
+
public static DefinitionGroup GetGroup(DefinitionFile myDefinitionFile, string groupName, string log)
{
DefinitionGroup definitionGroup = null;
@@ -819,21 +473,6 @@ public class ParameterAssist
return definitionGroup;
}
- ///
- /// 获取共享参数文件中的参数组
- ///
- ///
- /// 分组
- ///
- public static DefinitionGroup GetGroup(DefinitionGroups groups, string groupName)
- {
- return groups is null
- ? throw new ArgumentNullException(nameof(groups))
- : groupName is null
- ? throw new ArgumentNullException(nameof(groupName))
- : groups.get_Item(groupName) ?? groups.Create(groupName);
- }
-
///
/// 获取共享参数文件中的参数组
///
@@ -861,8 +500,40 @@ public class ParameterAssist
return uiapp.Application.OpenSharedParameterFile()?.Groups;
}
+ ///
+ /// 获取所有项目参数和定义元素绑定
+ ///
+ ///
+ ///
+ public static Dictionary GetParameterElementBindings(Document doc)
+ {
+ //项目中所有的参数元素,包含共享参数元素
+ var parameterElements = doc.OfClass().Cast();
- public void GetSharedPara(Application revitApp)
+ Dictionary dict = [];
+ //绑定
+ var dep = doc.ParameterBindings.ForwardIterator();
+ while (dep.MoveNext())
+ {
+ if (dep.Key is InternalDefinition definition)
+ {
+ var binding = dep.Current as ElementBinding;
+ foreach (var param in parameterElements)
+ {
+ var def = param.GetDefinition();
+
+ if (def.Id == definition.Id)
+ {
+ dict.Add(param, binding);
+ }
+ }
+ }
+
+ }
+ return dict;
+ }
+
+ public static void GetSharedPara(Application revitApp)
{
// 打开共享参数文件
var definitionFile = revitApp.OpenSharedParameterFile();
@@ -926,7 +597,7 @@ public class ParameterAssist
{
var binding = bindingMap.get_Item(definition);
- // If the parameter group's name contains type key, it's means type binding.
+ // 如果参数组的名称包含类型 key,则表示类型绑定。
if (!paramGroup.Name.Contains("Group"))
{
if (binding is InstanceBinding instanceBinding)
@@ -957,22 +628,21 @@ public class ParameterAssist
}
}
///
- /// 是否存在该项目参数(共享参数/项目参数)
+ /// 是否存在该项目参数
///
///
- ///
- ///
- ///
+ /// 参数名称
+ /// 定义
+ /// 参数绑定
///
- public bool IsExistSharedParam(
+ public static bool IsExistProjectParam(
Document doc,
string paramName,
out Definition definition,
out ElementBinding binding
)
{
- DefinitionBindingMap map = doc.ParameterBindings;
- var dep = map.ForwardIterator();
+ var dep = doc.ParameterBindings.ForwardIterator();
var isExist = false;
binding = null;
definition = null;
@@ -981,12 +651,6 @@ public class ParameterAssist
definition = dep.Key;
var definitionName = definition.Name;
binding = dep.Current as ElementBinding;
- //ParameterType parameterType = definition.ParameterType;
- //InstanceBinding instanceBinding = dep.Current as InstanceBinding;
- //if (instanceBinding != null)
- //{
- // CategorySet categorySet = instanceBinding.Categories;
- //}
if (definitionName == paramName)
{
isExist = true;
@@ -996,20 +660,76 @@ public class ParameterAssist
return isExist;
}
-
///
- /// 判断共享参数和项目参数
+ /// 判断参数是什么参数,true是项目参数的项目参数,false是共享参数的项目参数
///
- /// The parameter
+ ///
///
- public bool IsSharedPara(Parameter parameter)
+ public static bool IsProject(Parameter param)
{
- var definition = parameter.Definition as InternalDefinition;
+ var doc = param.Element.Document;
- var isSharedParameter = parameter.IsShared; //共享参数
+ var dict = GetParameterElementBindings(doc);
+ var ds = dict.Where(
+ e => e.Key.GetDefinition().Id == (param.Definition as InternalDefinition)?.Id);
+ if (ds.Any())//说明是项目参数
+ {
+ var d = ds.FirstOrDefault();
+ var parameterElement = d.Key;
+ var binding = d.Value;
+ if (parameterElement is SharedParameterElement)//共享参数
+ {
+ return false;
+ }
+ else//项目参数
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ ///
+ /// 根据定义判断是什么参数
+ ///
+ ///
+ ///
+ ///
+ public static bool IsShared(Document doc, Definition definition)
+ {
+ var sharedParamElems = doc.OfClass()
+ .Cast();
+ var internalDef = definition as InternalDefinition;
- var isProjectParameter = definition.BuiltInParameter == BuiltInParameter.INVALID && !parameter.IsShared; //项目参数
- return isSharedParameter;
+ foreach (var elem in sharedParamElems)
+ {
+ var def = elem.GetDefinition();
+ if (internalDef.Id == def.Id)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ ///
+ /// 根据参数名判断是否是共享参数
+ ///
+ ///
+ ///
+ ///
+ public static bool IsShared(Document doc, string paramName)
+ {
+ var dict = GetParameterElementBindings(doc);
+ foreach (var keyValue in dict)
+ {
+ var key = keyValue.Key;
+ if (key is SharedParameterElement && key.Name == paramName)
+ {
+ return true;
+ }
+ }
+
+ return false;
}
///
@@ -1021,36 +741,37 @@ public class ParameterAssist
public static void ModifyBuiltInParameter(Parameter parameter, object value)
{
var success = false;
- if (parameter != null && !parameter.IsReadOnly)
+ if (parameter == null)
{
- switch (parameter.StorageType)
- {
- case StorageType.Double:
- success = parameter.Set((double)value);
- break;
-
- case StorageType.ElementId:
- success = parameter.Set((ElementId)value);
- break;
-
- case StorageType.String:
- success = parameter.Set((string)value);
- break;
-
- case StorageType.Integer:
- success = parameter.Set((int)value);
- break;
- }
-
- if (!success)
- {
- throw new Exception("赋值失败");
- }
+ throw new Exception("参数为空");
}
- else
+ if (parameter.IsReadOnly)
{
throw new Exception("参数是只读的");
}
+ switch (parameter.StorageType)
+ {
+ case StorageType.Double:
+ success = parameter.Set((double)value);
+ break;
+
+ case StorageType.ElementId:
+ success = parameter.Set((ElementId)value);
+ break;
+
+ case StorageType.String:
+ success = parameter.Set((string)value);
+ break;
+
+ case StorageType.Integer:
+ success = parameter.Set((int)value);
+ break;
+ }
+
+ if (!success)
+ {
+ throw new Exception("赋值失败");
+ }
}
public static DefinitionFile OpenSharedParametersFile(Application application)
@@ -1058,15 +779,56 @@ public class ParameterAssist
var sharedParametersFile = application.OpenSharedParameterFile();
return sharedParametersFile;
}
+ public static void RemoveFamilyParameter(FamilyInstance instance, string paramName)
+ {
+ Document famdoc = null;
+ Document Document = instance.Document;
+ try
+ {
+ Family family = instance.Symbol.Family;
+
+ if (family.IsEditable)
+ {
+ famdoc = instance.Document.EditFamily(family);
+ }
+ else
+ {
+ Debug.WriteLine($"{family.Name} 不可编辑。");
+ }
+
+ if (famdoc != null)
+ {
+ using (Transaction ts = new(famdoc, "删除参数"))
+ {
+ ts.Start();
+ var parametersToRemove = famdoc.FamilyManager
+ .GetParameters()
+ .Where(fp => paramName == fp.Definition.Name);
+ foreach (FamilyParameter fp in parametersToRemove)
+ {
+ famdoc.FamilyManager.RemoveParameter(fp);
+ }
+ ts.Commit();
+ }
+
+ famdoc.LoadFamily(Document);
+ famdoc.Close(false);
+ }
+ }
+ catch (Exception)
+ {
+ Debug.WriteLine($"{famdoc.Title} 发生错误!");
+ }
+ }
///
- /// 移除当前文档中所有族的某些参数
+ /// 移除当前文档中所有可载入族的某些参数
///
///
///
- public static void RemoveParams(Document doc, params string[] paramnames)
+ public static void RemoveFamilyParams(Document doc, params string[] paramnames)
{
- var instances = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).Cast();
+ var instances = doc.OfClass().Cast();
foreach (var instance in instances)
{
var family = instance.Symbol.Family;
@@ -1101,6 +863,43 @@ public class ParameterAssist
famdoc.Close(false);
}
}
+ ///
+ /// 移除元素上的项目参数
+ ///
+ ///
+ public static void RemoveProjectParameter(Parameter param)
+ {
+ Element element = param.Element;
+ var doc = element.Document;
+
+ var dict = GetParameterElementBindings(doc);
+ var bindings = doc.ParameterBindings;
+
+ var ds = dict.Where(
+ e => e.Key.GetDefinition().Id == (param.Definition as InternalDefinition)?.Id);
+ if (ds.Any())//说明是项目参数
+ {
+ var d = ds.FirstOrDefault();
+ var parameter = d.Key;
+ var binding = d.Value;
+ if (binding.Categories.Size == 1)//如果只剩下一个类别,则直接移除
+ {
+ if (parameter is SharedParameterElement)//共享参数
+ {
+ bindings.Remove(param.Definition);
+ }
+ else//项目参数
+ {
+ doc.Delete(parameter.Id);
+ }
+ }
+ else//否则只移除一个类别
+ {
+ binding.Categories.Erase(element.Category);
+ doc.ParameterBindings.ReInsert(parameter.GetDefinition(), binding);
+ }
+ }
+ }
public static void SharedParamsBindingCategoryset(
UIApplication uiapp,
@@ -1159,18 +958,237 @@ public class ParameterAssist
}
}
- private static ExternalDefinition GetSharedParameter(DefinitionFile file, string groupname, string paramname)
+ public static IEnumerable InstanceCategories
{
- var myGroups = file.Groups;
- var myGroup = myGroups.get_Item(groupname);
-
- ExternalDefinition extDef = null;
-
- if (myGroup != null)
+ get
{
- extDef = myGroup.Definitions.get_Item(paramname) as ExternalDefinition;
+ yield return "HVAC 区";
+ yield return "专用设备";
+ yield return "体量";
+ yield return "停车场";
+ yield return "卫浴装置";
+ yield return "喷头";
+ yield return "图纸";
+ yield return "地形";
+ yield return "场地";
+ yield return "坡道";
+ yield return "墙";
+ yield return "天花板";
+ yield return "安全设备";
+ yield return "家具";
+ yield return "家具系统";
+ yield return "导线";
+ yield return "屋顶";
+ yield return "常规模型";
+ yield return "幕墙嵌板";
+ yield return "幕墙竖梃";
+ yield return "幕墙系统";
+ yield return "开关系统";
+ yield return "房间";
+ yield return "护理呼叫设备";
+ yield return "数据设备";
+ yield return "机械设备";
+ yield return "材质";
+ yield return "柱";
+ yield return "标高";
+ yield return "栏杆扶手";
+ yield return "植物";
+ yield return "楼板";
+ yield return "楼梯";
+ yield return "橱柜";
+ yield return "火警设备";
+ yield return "灯具";
+ yield return "照明设备";
+ yield return "环境";
+ yield return "电气装置";
+ yield return "电气设备";
+ yield return "电缆桥架";
+ yield return "电缆桥架管路";
+ yield return "电缆桥架配件";
+ yield return "电话设备";
+ yield return "电路";
+ yield return "空间";
+ yield return "窗";
+ yield return "竖井洞口";
+ yield return "管件";
+ yield return "管道";
+ yield return "管道占位符";
+ yield return "管道系统";
+ yield return "管道附件";
+ yield return "线管";
+ yield return "线管管路";
+ yield return "线管配件";
+ yield return "组成部分";
+ yield return "结构加强板";
+ yield return "结构区域钢筋";
+ yield return "结构基础";
+ yield return "结构柱";
+ yield return "结构桁架";
+ yield return "结构框架";
+ yield return "结构梁系统";
+ yield return "结构路径钢筋";
+ yield return "结构连接";
+ yield return "结构钢筋";
+ yield return "结构钢筋网";
+ yield return "结构钢筋网区域";
+ yield return "视图";
+ yield return "详图项目";
+ yield return "软管";
+ yield return "软风管";
+ yield return "轴网";
+ yield return "通讯设备";
+ yield return "道路";
+ yield return "部件";
+ yield return "钢筋形状";
+ yield return "门";
+ yield return "面积";
+ yield return "项目信息";
+ yield return "预制零件";
+ yield return "风管";
+ yield return "风管内衬";
+ yield return "风管占位符";
+ yield return "风管管件";
+ yield return "风管系统";
+ yield return "风管附件";
+ yield return "风管隔热层";
+ yield return "风道末端";
}
+ }
- return extDef;
+ public static IEnumerable ProjectParamGroups
+ {
+ get
+ {
+ yield return "IFC参数";
+ yield return "主端点";
+ yield return "光域";
+ yield return "其他";
+ yield return "分区几何图形";
+ yield return "分析平差";
+ yield return "分析模型";
+ yield return "分析结果";
+ yield return "力";
+ yield return "力矩";
+ yield return "卫浴";
+ yield return "可见性";
+ yield return "图层";
+ yield return "图形";
+ yield return "尺寸标注";
+ yield return "常规";
+ yield return "数据";
+ yield return "整个图例";
+ yield return "文字";
+ yield return "机械";
+ yield return "机械 - 流量";
+ yield return "机械 - 负荷";
+ yield return "材质和装饰";
+ yield return "构造";
+ yield return "标识数据";
+ yield return "标题文字";
+ yield return "模型属性";
+ yield return "次端点";
+ yield return "消防系统";
+ yield return "电气";
+ yield return "电气 - 照明";
+ yield return "电气 - 线路";
+ yield return "电气 - 负荷";
+ yield return "电气工程";
+ yield return "管段和管件";
+ yield return "结构";
+ yield return "结构分析";
+ yield return "绿色建筑属性";
+ yield return "编辑板形状";
+ yield return "能量分析";
+ yield return "释放/杆件力";
+ yield return "钢筋集";
+ yield return "阶段化";
+ yield return "限制条件";
+ }
+ }
+
+ public static IEnumerable TypeCategories
+ {
+ get
+ {
+ yield return "专用设备";
+ yield return "体量";
+ yield return "停车场";
+ yield return "卫浴装置";
+ yield return "喷头";
+ yield return "地形";
+ yield return "场地";
+ yield return "坡道";
+ yield return "墙";
+ yield return "天花板";
+ yield return "安全设备";
+ yield return "家具";
+ yield return "家具系统";
+ yield return "导线";
+ yield return "屋顶";
+ yield return "常规模型";
+ yield return "幕墙嵌板";
+ yield return "幕墙竖梃";
+ yield return "幕墙系统";
+ yield return "开关系统";
+ yield return "护理呼叫设备";
+ yield return "数据设备";
+ yield return "机械设备";
+ yield return "柱";
+ yield return "标高";
+ yield return "栏杆扶手";
+ yield return "植物";
+ yield return "楼板";
+ yield return "楼梯";
+ yield return "橱柜";
+ yield return "火警设备";
+ yield return "灯具";
+ yield return "照明设备";
+ yield return "环境";
+ yield return "电气装置";
+ yield return "电气设备";
+ yield return "电缆桥架";
+ yield return "电缆桥架管路";
+ yield return "电缆桥架配件";
+ yield return "电话设备";
+ yield return "窗";
+ yield return "管件";
+ yield return "管道";
+ yield return "管道占位符";
+ yield return "管道系统";
+ yield return "管道附件";
+ yield return "线管";
+ yield return "线管管路";
+ yield return "线管配件";
+ yield return "组成部分";
+ yield return "结构加强板";
+ yield return "结构区域钢筋";
+ yield return "结构基础";
+ yield return "结构柱";
+ yield return "结构桁架";
+ yield return "结构框架";
+ yield return "结构梁系统";
+ yield return "结构路径钢筋";
+ yield return "结构连接";
+ yield return "结构钢筋";
+ yield return "结构钢筋网";
+ yield return "结构钢筋网区域";
+ yield return "详图项目";
+ yield return "软管";
+ yield return "软风管";
+ yield return "轴网";
+ yield return "通讯设备";
+ yield return "部件";
+ yield return "钢筋形状";
+ yield return "门";
+ yield return "预制零件";
+ yield return "风管";
+ yield return "风管内衬";
+ yield return "风管占位符";
+ yield return "风管管件";
+ yield return "风管系统";
+ yield return "风管附件";
+ yield return "风管隔热层";
+ yield return "风道末端";
+ }
}
}
diff --git a/WPFUIAPP/App.config b/WPFUIAPP/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/WPFUIAPP/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WPFUIAPP/App.xaml b/WPFUIAPP/App.xaml
new file mode 100644
index 0000000..6a229e2
--- /dev/null
+++ b/WPFUIAPP/App.xaml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WPFUIAPP/App.xaml.cs b/WPFUIAPP/App.xaml.cs
new file mode 100644
index 0000000..8ac3e60
--- /dev/null
+++ b/WPFUIAPP/App.xaml.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+using Wpf.Ui.Violeta.Controls;
+
+namespace WPFUIAPP
+{
+ ///
+ /// App.xaml 的交互逻辑
+ ///
+ public partial class App : Application
+ {
+ public App()
+ {
+ Splash.ShowAsync("pack://application:,,,/Wpf.Ui.Test;component/wpfui.png");
+ InitializeComponent();
+ }
+
+
+ }
+}
diff --git a/WPFUIAPP/MainWindow.xaml b/WPFUIAPP/MainWindow.xaml
new file mode 100644
index 0000000..0c4a083
--- /dev/null
+++ b/WPFUIAPP/MainWindow.xaml
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WPFUIAPP/MainWindow.xaml.cs b/WPFUIAPP/MainWindow.xaml.cs
new file mode 100644
index 0000000..6963a43
--- /dev/null
+++ b/WPFUIAPP/MainWindow.xaml.cs
@@ -0,0 +1,89 @@
+using System.Threading;
+using System.Windows;
+
+using Wpf.Ui.Controls;
+using Wpf.Ui.Violeta.Controls;
+
+using MessageBox = Wpf.Ui.Violeta.Controls.MessageBox;
+
+namespace WPFUIAPP
+{
+ ///
+ /// MainWindow.xaml 的交互逻辑
+ ///
+ public partial class MainWindow
+ {
+ Wpf.Ui.Controls.ContentDialog dialog;
+ Wpf.Ui.Violeta.Controls.ContentDialog newdialog;
+ public MainWindow()
+ {
+ InitializeComponent();
+ dialog = new()
+ {
+ Title = "My sample dialog",
+ Content = "Content of the dialog",
+ CloseButtonText = "Close button",
+ PrimaryButtonText = "Primary button",
+ SecondaryButtonText = "Secondary button",
+ // Setting the dialog container
+ DialogHost = ContentDialogHostService.ContentPresenterForDialogs
+ };
+ newdialog = new()
+ {
+ Title = "My sample dialog",
+ Content = "Content of the dialog",
+ CloseButtonText = "Close button",
+ PrimaryButtonText = "Primary button",
+ SecondaryButtonText = "Secondary button",
+ DefaultButton = Wpf.Ui.Violeta.Controls.ContentDialogButton.Primary,
+ };
+ Splash.CloseOnLoaded(this, minimumMilliseconds: 1800);
+ }
+
+ private void Button_Click(object sender, RoutedEventArgs e)
+ {
+ Toast.Information("I am information message");
+ Toast.Error("I am error message");
+ //Toast.Success("I am success message");
+ //Toast.Warning("I am warning message");
+ //Toast.Show(owner: null, "I am any message", new ToastConfig());
+ }
+
+ private void MsgSyncClick(object sender, RoutedEventArgs e)
+ {
+ _ = MessageBox.Information("This is a information message");
+ _ = MessageBox.Warning("This is a warning message");
+ _ = MessageBox.Error("This is a error message");
+ var result = MessageBox.Question("This is a question and do you want to click OK?");
+ }
+
+ private async void MsgAsyncClick(object sender, RoutedEventArgs e)
+ {
+ // Async methods
+ _ = await MessageBox.InformationAsync("This is a information message");
+ _ = await MessageBox.WarningAsync("This is a warning message");
+ _ = await MessageBox.ErrorAsync("This is a error message");
+ var result = await MessageBox.QuestionAsync("This is a question and do you want to click OK?");
+ }
+
+ private void PendingBoxClick(object sender, RoutedEventArgs e)
+ {
+ // Default style.
+ using IPendingHandler pending = PendingBox.Show();
+
+ // Show with title and cancel button.
+ //using IPendingHandler pending = PendingBox.Show("Doing something", "I'm a title", isShowCancel: true);
+
+ }
+
+ private async void ContentDialogClick(object sender, RoutedEventArgs e)
+ {
+ await dialog.ShowAsync(CancellationToken.None);
+ }
+
+ private async void NewContentDialogClick(object sender, RoutedEventArgs e)
+ {
+ _ = await dialog.ShowAsync();
+ }
+ }
+}
diff --git a/WPFUIAPP/Properties/AssemblyInfo.cs b/WPFUIAPP/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..40536ac
--- /dev/null
+++ b/WPFUIAPP/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("WPFUIAPP")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("WPFUIAPP")]
+[assembly: AssemblyCopyright("Copyright © 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+//若要开始生成可本地化的应用程序,请设置
+//.csproj 文件中的 CultureYouAreCodingWith
+//在 中。例如,如果你使用的是美国英语。
+//使用的是美国英语,请将 设置为 en-US。 然后取消
+//对以下 NeutralResourceLanguage 特性的注释。 更新
+//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //主题特定资源词典所处位置
+ //(未在页面中找到资源时使用,
+ //或应用程序资源字典中找到时使用)
+ ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
+ //(未在页面中找到资源时使用,
+ //、应用程序或任何主题专用资源字典中找到时使用)
+)]
+
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/WPFUIAPP/Properties/Resources.Designer.cs b/WPFUIAPP/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..b426fdf
--- /dev/null
+++ b/WPFUIAPP/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本: 4.0.30319.42000
+//
+// 对此文件的更改可能导致不正确的行为,如果
+// 重新生成代码,则所做更改将丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace WPFUIAPP.Properties
+{
+
+
+ ///
+ /// 强类型资源类,用于查找本地化字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// 返回此类使用的缓存 ResourceManager 实例。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WPFUIAPP.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/WPFUIAPP/Properties/Resources.resx b/WPFUIAPP/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/WPFUIAPP/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/WPFUIAPP/Properties/Settings.Designer.cs b/WPFUIAPP/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..4829c00
--- /dev/null
+++ b/WPFUIAPP/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace WPFUIAPP.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/WPFUIAPP/Properties/Settings.settings b/WPFUIAPP/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/WPFUIAPP/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WPFUIAPP/ViewModel.cs b/WPFUIAPP/ViewModel.cs
new file mode 100644
index 0000000..52595ee
--- /dev/null
+++ b/WPFUIAPP/ViewModel.cs
@@ -0,0 +1,160 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using CommunityToolkit.Mvvm.ComponentModel;
+
+namespace WPFUIAPP
+{
+ public partial class ViewModel : ObservableObject
+ {
+ [ObservableProperty]
+ private ObservableCollection staffList = [];
+
+ public ViewModel()
+ {
+ InitNode1Value();
+ }
+ public void InitNode1Value()
+ {
+ Staff staff = new Staff()
+ {
+ Name = "Alice",
+ Age = 30,
+ Sex = "Male",
+ Duty = "Manager",
+ IsExpanded = true
+ };
+ Staff staff2 = new Staff()
+ {
+ Name = "Alice1",
+ Age = 21,
+ Sex = "Male",
+ Duty = "Normal",
+ IsExpanded = true
+ };
+ Staff staff3 = new Staff()
+ {
+ Name = "Alice11",
+ Age = 21,
+ Sex = "Male",
+ Duty = "Normal"
+ };
+ staff2.StaffList.Add(staff3);
+ staff3 = new Staff()
+ {
+ Name = "Alice22",
+ Age = 21,
+ Sex = "Female",
+ Duty = "Normal"
+ };
+ staff2.StaffList.Add(staff3);
+ staff.StaffList.Add(staff2);
+ staff2 = new Staff()
+ {
+ Name = "Alice2",
+ Age = 22,
+ Sex = "Female",
+ Duty = "Normal"
+ };
+ staff.StaffList.Add(staff2);
+ staff2 = new Staff()
+ {
+ Name = "Alice3",
+ Age = 23,
+ Sex = "Female",
+ Duty = "Normal"
+ };
+ staff.StaffList.Add(staff2);
+ StaffList.Add(staff);
+
+ staff = new Staff()
+ {
+ Name = "Bob",
+ Age = 31,
+ Sex = "Male",
+ Duty = "CEO"
+ };
+ staff2 = new Staff()
+ {
+ Name = "Bob1",
+ Age = 24,
+ Sex = "Female",
+ Duty = "Normal"
+ };
+ staff.StaffList.Add(staff2);
+ staff2 = new Staff()
+ {
+ Name = "Bob2",
+ Age = 25,
+ Sex = "Female",
+ Duty = "Normal"
+ };
+ staff.StaffList.Add(staff2);
+ staff2 = new Staff()
+ {
+ Name = "Bob3",
+ Age = 26,
+ Sex = "Male",
+ Duty = "Normal"
+ };
+ staff.StaffList.Add(staff2);
+ StaffList.Add(staff);
+
+ staff = new Staff()
+ {
+ Name = "Cyber",
+ Age = 32,
+ Sex = "Female",
+ Duty = "Leader"
+ };
+ staff2 = new Staff()
+ {
+ Name = "Cyber1",
+ Age = 27,
+ Sex = "Female",
+ Duty = "Normal"
+ };
+ staff.StaffList.Add(staff2);
+ staff2 = new Staff()
+ {
+ Name = "Cyber2",
+ Age = 28,
+ Sex = "Female",
+ Duty = "Normal"
+ };
+ staff.StaffList.Add(staff2);
+ StaffList.Add(staff);
+ }
+ }
+
+ public partial class Staff : ObservableObject
+ {
+ [ObservableProperty]
+ private string? name = null;
+
+ [ObservableProperty]
+ private int age;
+
+ [ObservableProperty]
+ private string? sex = null;
+
+ [ObservableProperty]
+ private string? duty = null;
+
+ [ObservableProperty]
+ private bool isChecked = true;
+
+ [ObservableProperty]
+ private bool isSelected = false;
+
+ [ObservableProperty]
+ private bool isExpanded = false;
+
+ [ObservableProperty]
+ private ObservableCollection staffList = [];
+ }
+}
diff --git a/WPFUIAPP/ViewModel2.cs b/WPFUIAPP/ViewModel2.cs
new file mode 100644
index 0000000..20e98fe
--- /dev/null
+++ b/WPFUIAPP/ViewModel2.cs
@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using CommunityToolkit.Mvvm.ComponentModel;
+using Wpf.Ui.Controls;
+
+namespace WPFUIAPP;
+public partial class ViewModel2 : ObservableObject
+{
+ [ObservableProperty]
+ private TreeModelCollection treeTestModel = CreateTestModel();
+
+ public static TreeModelCollection CreateTestModel()
+ {
+ return new TreeModelCollection()
+ {
+ Children = new(
+ [
+ new()
+ {
+ Column1 = "Test 1",
+ Column2 = "Test 1",
+ Column3 = "Test 1",
+ Children = new(
+ [
+ new()
+ {
+ Column1 = "Test 1.1",
+ Column2 = "Test 1.1",
+ Column3 = "Test 1.1",
+ Children = new(
+ [
+ new()
+ {
+ Column1 = "Test 1.2",
+ Column2 = "Test 1.2",
+ Column3 = "Test 1.2",
+ },
+ ]),
+ },
+ ]),
+ },
+ new()
+ {
+ Column1 = "Test 2",
+ Column2 = "Test 2",
+ Column3 = "Test 2",
+ }
+ ]),
+ };
+ }
+}
+
+[ObservableObject]
+public partial class TreeTestModel : TreeModelObject
+{
+ [ObservableProperty]
+ private string? column1;
+
+ [ObservableProperty]
+ private string? column2;
+
+ [ObservableProperty]
+ private string? column3;
+
+ [ObservableProperty]
+ private bool isChecked = false;
+}
diff --git a/WPFUIAPP/WPFUIAPP.csproj b/WPFUIAPP/WPFUIAPP.csproj
new file mode 100644
index 0000000..bfe2335
--- /dev/null
+++ b/WPFUIAPP/WPFUIAPP.csproj
@@ -0,0 +1,18 @@
+
+
+ net472
+ WinExe
+ false
+ true
+ enable
+ 13.0
+ true
+ All;Debug One;Debug;DefaultBuild;Release
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Wpf.Ui.Extend/Wpf.Ui.Extend.csproj b/Wpf.Ui.Extend/Wpf.Ui.Extend.csproj
index 2faab5d..c334637 100644
--- a/Wpf.Ui.Extend/Wpf.Ui.Extend.csproj
+++ b/Wpf.Ui.Extend/Wpf.Ui.Extend.csproj
@@ -15,7 +15,7 @@
-
+
diff --git a/WpfApp/MainViewModel.cs b/WpfApp/MainViewModel.cs
index 8661d97..8e77271 100644
--- a/WpfApp/MainViewModel.cs
+++ b/WpfApp/MainViewModel.cs
@@ -3,7 +3,9 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
+using System.Linq;
using System.Text;
+using System.Windows.Markup;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
@@ -13,6 +15,7 @@ using Sai.RvKits;
using Wpf.Ui;
using Wpf.Ui.Controls;
using Wpf.Ui.Extend.Controls;
+using Wpf.Ui.Violeta.Controls;
namespace WpfApp
{
@@ -28,15 +31,20 @@ namespace WpfApp
[RelayCommand]
private void ButtonClick()
{
- snackbarService = new SnackbarService();
- snackbarService.SetSnackbarPresenter(SnackbarPresenter);
- snackbarService.Show(
- "消息",
- "Test",
- snackbarAppearance,
- new SymbolIcon(SymbolRegular.Fluent24),
- TimeSpan.FromSeconds(snackbarTimeout)
- );
+ //snackbarService = new SnackbarService();
+ //snackbarService.SetSnackbarPresenter(SnackbarPresenter);
+ //snackbarService.Show(
+ // "消息",
+ // "Test",
+ // snackbarAppearance,
+ // new SymbolIcon(SymbolRegular.Fluent24),
+ // TimeSpan.FromSeconds(snackbarTimeout)
+ //);
+ Toast.Information("I am information message");
+ Toast.Error("I am error message");
+ Toast.Success("I am success message");
+ Toast.Warning("I am warning message");
+ Toast.Show(owner: null!, "I am any message", new ToastConfig());
}
[RelayCommand]
@@ -176,6 +184,7 @@ namespace WpfApp
public List Students { get; set; } = [];
}
+
class Student
{
public int ID { get; set; }
diff --git a/WpfApp/MainWindow.xaml b/WpfApp/MainWindow.xaml
index bfbb9b8..5301a15 100644
--- a/WpfApp/MainWindow.xaml
+++ b/WpfApp/MainWindow.xaml
@@ -167,6 +167,7 @@
MinHeight="30"
Padding="5"
ItemsSource="{Binding Items}" />-->
+
-
-
-
-
+
+
+
+