using Autodesk.Revit.DB; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace CDM.Interop.Revit.CDMComponent { class CDMBeam : CDMComponent { //梁定位线始终在几何中心线,仅适用于水平-矩形-不发生旋转的矩形混凝土梁 public CDMBeam(FamilyInstance beam) { self = beam; base.SymbolId = beam.GetTypeId(); base.EleId = beam.Id; base.LevelId = beam.Host.Id; base.CDMTypeId = HcdmType.CDMBeam; m_b = GetPara(beam, "b"); m_h = GetPara(beam, "h"); if (beam.HasSweptProfile() == true) { Line line = beam.GetSweptProfile().GetDrivingCurve() as Line; //var c = (LocationCurve)beam.Location; //Line line = c.Curve as Line; var rOrigin = line.Origin; var rDirection = line.Direction; base.Xl = rOrigin.X * 0.3048; base.Yw = rOrigin.Y * 0.3048; base.Zh = (rOrigin.Z - m_h.AsDouble() / 2) * 0.3048; base.DegreesWithXAxis = rDirection.AngleTo(new XYZ(1, 0, 0)) * 180 / Math.PI; if (Math.Round(rDirection.Y, 2, MidpointRounding.AwayFromZero) < 0) { DegreesWithXAxis += 180; } } else { MessageBox.Show("可能存在重叠梁"); } //base.Name = beam.Symbol.FamilyName + "@" + beam.Name; } private Parameter m_b; private Parameter m_h; /// /// 梁长 /// public double L => self.GetSweptProfile().GetDrivingCurve().Length * 304.8; /// /// 截面梁宽 /// public string SectionB => m_b.AsValueString(); /// /// 截面梁高 /// public string SectionH => m_h.AsValueString(); /// /// 顶部高程 /// private FamilyInstance self; } }