Files
CDMUtility/CDMUtil/ToCDM/CDMFloor.cs
2026-02-23 14:35:54 +08:00

63 lines
2.2 KiB
C#

using Autodesk.Revit.DB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CDM.Interop.Revit.CDMComponent
{
class CDMFloor : CDMComponent
{
public CDMFloor(Document doc, Floor floor, View3D v3d)
{
self = floor;
base.SymbolId = floor.FloorType.Id;
base.LevelId = floor.LevelId;
base.EleId = floor.Id;
//base.Name = floor.FloorType.FamilyName + "@" + floor.Name;
base.CDMTypeId = HcdmType.CDMFloor;
max = floor.get_BoundingBox(v3d).Max;
min = floor.get_BoundingBox(v3d).Min;
base.Xl = min.X * 0.3048;
base.Yw = (max.Y + min.Y) / 2 * 0.3048;
base.Zh = Convert.ToDouble(floor.get_Parameter(BuiltInParameter.STRUCTURAL_ELEVATION_AT_TOP).AsValueString()) / 1000;
CDMopenings = GetCDMOpenings(doc, v3d);
}
private List<CDMOpening> GetCDMOpenings(Document doc, View3D view3D)
{
var openingcol = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_FloorOpening).OfClass(typeof(Opening)).Cast<Opening>();
var openings = from open in openingcol
where open.Host.Id == self.Id
select open;
var CDMOpenings = new List<CDMOpening>();
foreach (var opening in openings)
{
CDMOpening cdmopening = new CDMOpening(opening, view3D);
CDMOpenings.Add(cdmopening);
}
return CDMOpenings;
}
private XYZ max;
private XYZ min;
private Floor self;
/// <summary>
/// 板长
/// </summary>
public double L => (max.X - min.X) * 304.8;
/// <summary>
/// 板宽
/// </summary>
public double W => (max.Y - min.Y) * 304.8;
/// <summary>
/// 板厚
/// </summary>
public double T => Convert.ToDouble(self.FloorType.get_Parameter(BuiltInParameter.FLOOR_ATTR_DEFAULT_THICKNESS_PARAM).AsValueString());
public List<CDMOpening> CDMopenings { get; set; }
}
}