コード例 #1
0
ファイル: Opening.cs プロジェクト: HoareLea/SAM_Revit
        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);
        }
コード例 #2
0
ファイル: Aperture.cs プロジェクト: HoareLea/SAM_Revit
        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);
        }
コード例 #3
0
ファイル: Element.cs プロジェクト: chuongmep/Revit_Toolkit
        /***************************************************/

        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));
        }
コード例 #4
0
        /***************************************************/

        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);
            }
        }
コード例 #5
0
        /***************************************************/
        /****              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()));
        }
コード例 #6
0
ファイル: FromRevit.cs プロジェクト: chuongmep/Revit_Toolkit
        /***************************************************/

        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);
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        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 ) );
        }
コード例 #9
0
        /// <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);
        }
コード例 #10
0
ファイル: Opening.cs プロジェクト: chuongmep/Revit_Toolkit
        /***************************************************/
        /****               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);
            }
        }