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 GetCDMOpenings(Document doc, View3D view3D) { var openingcol = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_FloorOpening).OfClass(typeof(Opening)).Cast(); var openings = from open in openingcol where open.Host.Id == self.Id select open; var CDMOpenings = new List(); 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; /// /// 板长 /// public double L => (max.X - min.X) * 304.8; /// /// 板宽 /// public double W => (max.Y - min.Y) * 304.8; /// /// 板厚 /// public double T => Convert.ToDouble(self.FloorType.get_Parameter(BuiltInParameter.FLOOR_ATTR_DEFAULT_THICKNESS_PARAM).AsValueString()); public List CDMopenings { get; set; } } }