大量更新
This commit is contained in:
@@ -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
34
Szmedi.Test/TestExcel.cs
Normal 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; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user