using System.Linq; using System.Text; using System.Windows; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using EPPlus.Core.Extensions; using Nice3point.Revit.Toolkit.External; using Nice3point.Revit.Toolkit.Utils; namespace Szmedi.Test { [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class TestCmd : ExternalCommand { public override void Execute() { var walls = new FilteredElementCollector(Document).WhereElementIsNotElementType() .OfClass(typeof(Wall)) .ToElements() .Cast() .ToList(); foreach (var wall in walls) { var inserts = wall.FindInserts(true, false, false, false); foreach (var id in inserts) { var insert = Document.GetElement(id); if (insert != null) { switch (insert) { //门窗 case FamilyInstance fi: { var symbol = fi.Symbol; //Revit2018 //宽度 var width = symbol.get_Parameter(BuiltInParameter.DOOR_WIDTH).AsValueString(); //高度 var height = symbol.get_Parameter(BuiltInParameter.GENERIC_HEIGHT).AsValueString(); //Revit2020 var width2020 = symbol.get_Parameter(BuiltInParameter.FURNITURE_WIDTH).AsValueString(); var height2020 = symbol.get_Parameter(BuiltInParameter.FAMILY_HEIGHT_PARAM).AsValueString(); break; } //洞口 case Opening o: { var minPoint = o.BoundaryRect[0]; var maxPoint = o.BoundaryRect[1]; //高度 var height = Math.Abs(maxPoint.Z - minPoint.Z) * 304.8; var minPointFlatten = new XYZ(minPoint.X, minPoint.Y, 0); var maxPointFlatten = new XYZ(maxPoint.X, maxPoint.Y, 0); //宽度 var width = minPointFlatten.DistanceTo(maxPointFlatten) * 304.8; MessageBox.Show($"{width} x {height}"); break; } default: break; } } } } } private static void DrawColumnsBoundLines(Document doc, List selectedColumns) { foreach (FamilyInstance column in selectedColumns) { // 获取结构柱的几何信息 var geomOptions = new Options(); var geomElement = column.get_Geometry(geomOptions); foreach (var geomObj in geomElement) { var geometryInstance = geomObj as GeometryInstance; if (geometryInstance != null) { // 处理几何实例 var instanceGeomElement = geometryInstance.GetInstanceGeometry(); foreach (var instanceGeomObj in instanceGeomElement) { if (instanceGeomObj is Solid solid) { foreach (Face face in solid.Faces) { if (face is PlanarFace planarFace && planarFace.FaceNormal.IsAlmostEqualTo(-XYZ.BasisZ)) { var edgeLoops = planarFace.EdgeLoops; foreach (EdgeArray edgeArray in edgeLoops) { var curveArray = new CurveArray(); foreach (Edge edge in edgeArray) { var curve = edge.AsCurve(); curveArray.Append(curve); } if (curveArray.Size > 0) { // 获取活动视图的 SketchPlane var sketchPlane = SketchPlane.Create( doc, doc.ActiveView.GenLevel.Id); // 绘制房间分割线 var lines = doc.Create .NewRoomBoundaryLines(sketchPlane, curveArray, doc.ActiveView); } } } } } } } } } } } }