129 lines
5.7 KiB
C#
129 lines
5.7 KiB
C#
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<Wall>()
|
|
.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<Element> 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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |