public static IOpening ToSAM_Opening(this EnergyAnalysisOpening energyAnalysisOpening, ConvertSettings convertSettings) { if (energyAnalysisOpening == null) { return(null); } IOpening result = convertSettings?.GetObject <IOpening>(energyAnalysisOpening.Id); if (result != null) { return(result); } Polygon3D polygon3D = energyAnalysisOpening.GetPolyloop().ToSAM(); if (polygon3D == null) { return(null); } FamilyInstance familyInstance = Core.Revit.Query.Element(energyAnalysisOpening) as FamilyInstance; if (familyInstance == null) { return(null); } if (Core.Revit.Query.Simplified(familyInstance)) { result = Core.Revit.Query.IJSAMObjects <IOpening>(familyInstance)?.FirstOrDefault(); if (result != null) { return(result); } } OpeningType openingType = ToSAM_OpeningType(familyInstance.Symbol, convertSettings); Point3D point3D_Location = Geometry.Revit.Query.LocationPoint3D(familyInstance); if (point3D_Location == null) { return(null); } Face3D face3D = new Face3D(Geometry.Spatial.Create.IClosedPlanar3D(polygon3D, point3D_Location)); if (face3D == null) { return(null); } result = Analytical.Create.Opening(openingType, face3D); result.UpdateParameterSets(familyInstance); convertSettings?.Add(energyAnalysisOpening.Id, result); return(result); }
public static Aperture ToSAM(this EnergyAnalysisOpening energyAnalysisOpening, ConvertSettings convertSettings) { if (energyAnalysisOpening == null) { return(null); } Aperture result = convertSettings?.GetObject <Aperture>(energyAnalysisOpening.Id); if (result != null) { return(result); } Polygon3D polygon3D = energyAnalysisOpening.GetPolyloop().ToSAM(); if (polygon3D == null) { return(null); } FamilyInstance familyInstance = Core.Revit.Query.Element(energyAnalysisOpening) as FamilyInstance; if (familyInstance == null) { return(new Aperture(null, polygon3D)); } if (Core.Revit.Query.Simplified(familyInstance)) { result = Core.Revit.Query.IJSAMObjects <Aperture>(familyInstance)?.FirstOrDefault(); if (result != null) { return(result); } } ApertureConstruction apertureConstruction = ToSAM_ApertureConstruction(familyInstance, convertSettings); Point3D point3D_Location = Geometry.Revit.Query.LocationPoint3D(familyInstance); if (point3D_Location == null) { return(null); } result = new Aperture(apertureConstruction, polygon3D, point3D_Location); result.UpdateParameterSets(energyAnalysisOpening, ActiveSetting.Setting.GetValue <Core.TypeMap>(Core.Revit.ActiveSetting.Name.ParameterMap)); //result.UpdateParameterSets(familyInstance, ActiveSetting.Setting.GetValue<Core.TypeMap>(Core.Revit.ActiveSetting.Name.ParameterMap)); //result.Add(Core.Revit.Query.ParameterSet(familyInstance)); convertSettings?.Add(energyAnalysisOpening.Id, result); return(result); }
/***************************************************/ public static Element Element(this EnergyAnalysisOpening energyAnalysisOpening) { ElementId elementID = Query.ElementId(energyAnalysisOpening.OriginatingElementDescription); if (elementID == null || elementID == Autodesk.Revit.DB.ElementId.InvalidElementId) { return(null); } return(energyAnalysisOpening.Document.GetElement(elementID)); }
/***************************************************/ public static IBHoMObject FromRevit(this EnergyAnalysisOpening energyAnalysisOpening, Discipline discipline, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null) { switch (discipline) { case Discipline.Environmental: case Discipline.Architecture: case Discipline.Physical: return(energyAnalysisOpening.EnvironmentPanelFromRevit(null, settings, refObjects)); default: return(null); } }
/***************************************************/ /**** Public methods ****/ /***************************************************/ public static oM.Physical.Constructions.Construction Construction(this EnergyAnalysisOpening energyAnalysisOpening, RevitSettings settings = null) { if (energyAnalysisOpening == null) { return(null); } Element element = energyAnalysisOpening.Element(); if (element == null) { return(null); } return(element.EnergyAnalysisElementName().Construction(energyAnalysisOpening.OpeningType.ToString())); }
/***************************************************/ public static IBHoMObject FromRevit(this EnergyAnalysisOpening energyAnalysisOpening, Discipline discipline, Transform transform = null, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null) { IElement2D result = null; switch (discipline) { case Discipline.Facade: case Discipline.Environmental: case Discipline.Architecture: case Discipline.Physical: result = energyAnalysisOpening.EnvironmentPanelFromRevit(null, settings, refObjects); break; } if (result != null && transform?.IsIdentity == false) { TransformMatrix bHoMTransform = transform.FromRevit(); result = result.ITransform(bHoMTransform); } return(result as IBHoMObject); }
/// <summary> /// Creates IFC connection surface geometry from an opening object. /// </summary> /// <param name="file"> /// The IFC file. /// </param> /// <param name="opening"> /// The EnergyAnalysisOpening. /// </param> /// <param name="offset"> /// The offset of opening. /// </param> /// <returns> /// The connection surface geometry handle. /// </returns> static IFCAnyHandle CreateConnectionSurfaceGeometry(ExporterIFC exporterIFC, EnergyAnalysisOpening opening, XYZ offset) { IFCFile file = exporterIFC.GetFile(); Polyloop outerLoop = opening.GetPolyloop(); IList<XYZ> outerLoopPoints = outerLoop.GetPoints(); List<XYZ> newOuterLoopPoints = new List<XYZ>(); foreach (XYZ point in outerLoopPoints) { newOuterLoopPoints.Add(UnitUtil.ScaleLength(point.Subtract(offset))); } IList<IList<XYZ>> innerLoopPoints = new List<IList<XYZ>>(); IFCAnyHandle hnd = ExporterUtil.CreateCurveBoundedPlane(file, newOuterLoopPoints, innerLoopPoints); return IFCInstanceExporter.CreateConnectionSurfaceGeometry(file, hnd, null); }
private void Stream( ArrayList data, EnergyAnalysisOpening eaOpening ) { data.Add( new Snoop.Data.ClassSeparator( typeof( EnergyAnalysisOpening ) ) ); data.Add( new Snoop.Data.String( "CAD Link UniqueId", eaOpening.CADLinkUniqueId ) ); data.Add( new Snoop.Data.String( "CAD Object UniqueId", eaOpening.CADObjectUniqueId ) ); data.Add( new Snoop.Data.Xyz( "Corner", eaOpening.Corner ) ); data.Add( new Snoop.Data.Double( "Height", eaOpening.Height ) ); data.Add( new Snoop.Data.String( "Open Id", eaOpening.OpeningId ) ); data.Add( new Snoop.Data.String( "Open Name", eaOpening.OpeningName ) ); data.Add( new Snoop.Data.Object( "Open Type", eaOpening.OpeningType ) ); data.Add( new Snoop.Data.String( "Origination Element Description", eaOpening.OriginatingElementDescription ) ); data.Add( new Snoop.Data.Object( "Type", eaOpening.Type ) ); data.Add( new Snoop.Data.Double( "Width", eaOpening.Width ) ); }
/// <summary> /// Create IFC connection surface geometry from an opening object. /// </summary> /// <param name="file"> /// The IFC file. /// </param> /// <param name="opening"> /// The EnergyAnalysisOpening. /// </param> /// <param name="offset"> /// The offset of opening. /// </param> /// <returns> /// The connection surface geometry handle. /// </returns> static IFCAnyHandle CreateConnectionSurfaceGeometry(IFCFile file, EnergyAnalysisOpening opening) { Polyloop outerLoop = opening.GetPolyloop(); IList<XYZ> outerLoopPoints = outerLoop.GetPoints(); IList<IList<XYZ>> innerLoopPoints = new List<IList<XYZ>>(); IFCAnyHandle hnd = file.CreateCurveBoundedPlane(outerLoopPoints, innerLoopPoints); IFCAnyHandle ifcOptionalHnd = IFCAnyHandle.Create(); return file.CreateConnectionSurfaceGeometry(hnd, ifcOptionalHnd); }
/***************************************************/ /**** Public Methods ****/ /***************************************************/ public static oM.Environment.Elements.Opening OpeningFromRevit(this EnergyAnalysisOpening energyAnalysisOpening, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null) { settings = settings.DefaultIfNull(); Element element = energyAnalysisOpening.Element(); if (element == null) { oM.Environment.Elements.Opening result = refObjects.GetValue <oM.Environment.Elements.Opening>(energyAnalysisOpening.Id); if (result != null) { return(result); } ICurve curve = energyAnalysisOpening.GetPolyloop().FromRevit(); result = new oM.Environment.Elements.Opening() { Edges = curve.ToEdges(), }; OriginContextFragment originContext = new OriginContextFragment() { ElementID = energyAnalysisOpening.Id.IntegerValue.ToString(), TypeName = energyAnalysisOpening.OpeningName }; originContext.SetProperties(energyAnalysisOpening, settings.ParameterSettings); result.AddFragment(originContext); result.OpeningConstruction = energyAnalysisOpening.Construction(settings); result.Type = OpeningType.Undefined; //Set identifiers, parameters & custom data result.SetIdentifiers(energyAnalysisOpening); result.CopyParameters(energyAnalysisOpening, settings.ParameterSettings); result.SetProperties(energyAnalysisOpening, settings.ParameterSettings); refObjects.AddOrReplace(energyAnalysisOpening.Id, result); return(result); } else { oM.Environment.Elements.Opening result = refObjects.GetValue <oM.Environment.Elements.Opening>(energyAnalysisOpening.Id.IntegerValue); if (result != null) { return(result); } ElementType elementType = element.Document.GetElement(element.GetTypeId()) as ElementType; ICurve curve = energyAnalysisOpening.GetPolyloop().FromRevit(); result = new oM.Environment.Elements.Opening() { Edges = curve.ToEdges(), Name = element.FamilyTypeFullName(), }; OriginContextFragment originContext = new OriginContextFragment() { ElementID = element.Id.IntegerValue.ToString(), TypeName = element.FamilyTypeFullName() }; originContext.SetProperties(element, settings.ParameterSettings); originContext.SetProperties(elementType, settings.ParameterSettings); result.AddFragment(originContext); result.OpeningConstruction = energyAnalysisOpening.Construction(settings); OpeningType?openingType = element.Category.OpeningType(); if (openingType.HasValue) { result.Type = openingType.Value; } else { result.Type = OpeningType.Undefined; } //Set identifiers, parameters & custom data result.SetIdentifiers(element); result.CopyParameters(element, settings.ParameterSettings); result.SetProperties(element, settings.ParameterSettings); refObjects.AddOrReplace(energyAnalysisOpening.Id, result); return(result); } }