大量更新

This commit is contained in:
GG Z
2025-12-23 21:37:02 +08:00
parent 3fc465959b
commit b611efeed9
105 changed files with 5814 additions and 371 deletions

View File

@@ -1,34 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Xml.Linq;
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 EPPlus.Core.Extensions;
using Nice3point.Revit.Toolkit.External;
using Nice3point.Revit.Toolkit.Utils;
using OfficeOpenXml;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using RevitAddins;
using Szmedi.RvKits.Mvvm.Attributes;
using Wpf.Ui;
namespace Szmedi.Test
{
[Transaction(TransactionMode.Manual)]
@@ -138,8 +127,116 @@ namespace Szmedi.Test
// return hasConnectToSystem;
//}
public List<Family> GetUsedFamilies(Document doc)
{
// 获取所有实例元素这里不需要由ToElements()转化全部对象,节省内存,仅遍历)
var instances = doc.OfClass<FamilyInstance>();
// 3. 收集所有被使用的“类型ID” (使用HashSet自动去重)
HashSet<ElementId> usedTypeIds = new HashSet<ElementId>();
foreach (Element elem in instances)
{
ElementId typeId = elem.GetTypeId();
if (typeId != ElementId.InvalidElementId)
{
usedTypeIds.Add(typeId);
}
}
// 4. 从类型反向获取族 (使用HashSet再次去重族ID防止多个类型属于同一个族)
HashSet<ElementId> usedFamilyIds = new HashSet<ElementId>();
List<Family> resultFamilies = new List<Family>();
foreach (ElementId typeId in usedTypeIds)
{
// 获取类型元素 (FamilySymbol)
Element typeElem = doc.GetElement(typeId);
FamilySymbol symbol = typeElem as FamilySymbol;
if (symbol != null)
{
Family family = symbol.Family;
// 确保族存在且未被添加过
if (family != null && !usedFamilyIds.Contains(family.Id))
{
usedFamilyIds.Add(family.Id);
resultFamilies.Add(family);
}
}
}
return resultFamilies;
}
public static void ToExcel(string excelPath, List<TestExcel> infos)
{
FileInfo fi = new(excelPath);
ExcelPackage package = infos.ToWorksheet("构件数量变动对比表")
.WithConfiguration(cfg => cfg.WithColumnConfiguration(c => c.AutoFit()))
.ToExcelPackage();
package.SaveAs(fi);
}
public override void Execute()
{
//var parameter = Document.FamilyManager.GetParameters().FirstOrDefault(p => p.Definition.Name == "额定电流");
//Document.Invoke(
// ts =>
// {
// Document.FamilyManager.ReplaceParameter(parameter, "测试", BuiltInParameterGroup.PG_TEXT, true);
// });
var doc = Document;
if (doc.IsFamilyDocument)
{
return;
}
var familyCollector = new FilteredElementCollector(doc)
.OfClass(typeof(Family))
.Cast<Family>()
.ToList();
MessageBox.Show(familyCollector.Count().ToString());
var fams = GetUsedFamilies(doc)
.Cast<Family>()
.Where(
fam => fam.FamilyCategory.AllowsBoundParameters &&
fam.IsEditable &&
fam.FamilyCategory.CategoryType == CategoryType.Model &&
!Enum.GetName(typeof(BuiltInCategory), fam.FamilyCategoryId.IntegerValue)!.Contains(
"Fitting") &&
fam.FamilyCategoryId.IntegerValue != -2008013).ToList();//风道末端
MessageBox.Show(fams.Count().ToString());
return;
var elements = new FilteredElementCollector(Document).WhereElementIsNotElementType()
.ToElements()
.ToList();
StringBuilder sb = new StringBuilder();
var elementIds = new List<ElementId>();
foreach (var item in elements)
{
var level = Document.GetElement(item.GetLevelId())?.Name;
var param = item.get_Parameter(BuiltInParameter.DOOR_NUMBER)?.AsString();
if (param != null && level != null && param.Contains("B2") && level.Contains("站厅"))
{
sb.AppendLine($"{item.Id}");
elementIds.Add(item.Id);
}
if (param != null && level != null && param.Contains("B1") && level.Contains("站台"))
{
sb.AppendLine($"{item.Id}");
elementIds.Add(item.Id);
}
}
if (sb.Length > 0)
{
UiDocument.Selection.SetElementIds(elementIds);
}
return;
var walls = new FilteredElementCollector(Document).WhereElementIsNotElementType()
.OfClass(typeof(Wall))
.ToElements()

34
Szmedi.Test/TestExcel.cs Normal file
View File

@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EPPlus.Core.Extensions.Attributes;
namespace Szmedi.Test
{
public class TestExcel
{
[ExcelTableColumn("变更前")]
public Test Old { get; set; }
[ExcelTableColumn("变更后")]
public Test New { get; set; }
}
public class Test
{
public Test(string iD, string name, string description)
{
ID = iD;
Name = name;
Description = description;
}
[ExcelTableColumn("ID")]
public string ID { get; set; }
[ExcelTableColumn("名称")]
public string Name { get; set; }
[ExcelTableColumn("描述")]
public string Description { get; set; }
}
}