예제 #1
0
        public static bool TogbXML(this TAS3D.T3DDocument t3DDocument, string path, bool @override, bool fixNormals, bool zonesFromSpaces)
        {
            if (t3DDocument == null || string.IsNullOrWhiteSpace(path))
            {
                return(false);
            }

            int overrideInt = 0;

            if (@override)
            {
                overrideInt = 1;
            }

            int fixNormalsInt = 0;

            if (fixNormals)
            {
                fixNormalsInt = 1;
            }

            int zonesFromSpacesInt = 0;

            if (zonesFromSpaces)
            {
                zonesFromSpacesInt = 1;
            }

            return(t3DDocument.ImportGBXML(path, overrideInt, fixNormalsInt, zonesFromSpacesInt));
        }
예제 #2
0
 /// <summary>
 /// Closes TAS T3D Document. READ ME ==============
 /// Option 1 = File will be close when Dynamo is restarted
 /// if you use Dynamo with Revit you need to restart both
 /// Option 2 = when script is done and you confirmed it was saved just
 /// go to TaskManager and End Process for TAS3D.exe
 /// </summary>
 /// <param name="T3DDocument">T3D Document</param>
 /// <returns name="Boolean">Boolean</returns>
 /// <search>
 /// TAS, T3DDocument, tas, T3Ddocument, close t3ddocument, closet3ddocument
 /// </search>
 public static bool Close(T3DDocument T3DDocument)
 {
     T3DDocument.pT3DDocument.Close();
     T3DDocument.pT3DDocument = null;
     T3DDocument = null;
     return(true);
 }
예제 #3
0
        private static TAS3D.T3DDocument GetT3DDocument(bool Save)
        {
            TAS3D.T3DDocument aT3DDocument = null;
            try
            {
                object aObject = System.Runtime.InteropServices.Marshal.GetActiveObject("TAS3D.T3DDocument");
                if (aObject != null && aObject is TAS3D.T3DDocument)
                {
                    aT3DDocument = aObject as TAS3D.T3DDocument;
                    if (Save && !string.IsNullOrEmpty(aT3DDocument.filePath))
                    {
                        aT3DDocument.Save(aT3DDocument.filePath);
                    }
                    aT3DDocument.Close();
                }
            }
            catch
            {
            }

            if (aT3DDocument == null)
            {
                aT3DDocument = new TAS3D.T3DDocument();
            }

            return(aT3DDocument);
        }
예제 #4
0
 /// <summary>
 /// Opens TAS T3D Document
 /// </summary>
 /// <param name="Name">Building Name</param>
 /// <param name="Description">Building Description</param>
 /// <returns name="T3DDocument">T3D Document</returns>
 /// <search>
 /// TAS, TBDDocument, tas, t3ddocument, new t3ddocument, newt3ddocument
 /// </search>
 public static T3DDocument New(string Name, string Description)
 {
     TAS3D.T3DDocument aT3DDocument = GetT3DDocument(false);
     aT3DDocument.Building.name        = Name;
     aT3DDocument.Building.description = Description;
     return(new T3DDocument(aT3DDocument, false));
 }
예제 #5
0
 /// <summary>
 /// Opens TAS T3D Document
 /// </summary>
 /// <param name="Name">Building Name</param>
 /// <param name="Description">Building Description</param>
 /// <param name="FilePath">File Path</param>
 /// <returns name="T3DDocument">T3D Document</returns>
 /// <search>
 /// TAS, TBDDocument, tas, tbddocument, new tbddocument, newtbddocument
 /// </search>
 public static T3DDocument New(string FilePath, string Name, string Description)
 {
     TAS3D.T3DDocument aT3DDocument = GetT3DDocument(true);
     aT3DDocument.Building.name        = Name;
     aT3DDocument.Building.description = Description;
     aT3DDocument.filePath             = FilePath;
     return(new T3DDocument(aT3DDocument, true));
 }
예제 #6
0
        void IDisposable.Dispose()
        {
            if (pT3DDocument != null)
            {
                if (pSave && pT3DDocument.filePath != null)
                {
                    pT3DDocument.Save(pT3DDocument.filePath);
                }

                pT3DDocument.Close();
                pT3DDocument = null;
            }
        }
예제 #7
0
        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    // TODO: dispose managed state (managed objects).
                    if (t3DDocument != null)
                    {
                        t3DDocument.Close();
                        Core.Modify.ReleaseCOMObject(t3DDocument);
                        t3DDocument = null;
                    }
                }

                // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                // TODO: set large fields to null.

                disposed = true;
            }
        }
예제 #8
0
        public static TAS3D.T3DDocument T3DDocument()
        {
            TAS3D.T3DDocument t3DDocument = null;

            try
            {
                object @object = Marshal.GetActiveObject("T3D.Document");

                if (@object != null)
                {
                    t3DDocument = @object as TAS3D.T3DDocument;
                    Core.Modify.ReleaseCOMObject(@object);
                    t3DDocument = null;
                }
            }
            catch
            {
            }

            t3DDocument = new TAS3D.T3DDocument();

            return(t3DDocument);
        }
예제 #9
0
 private T3DDocument(TAS3D.T3DDocument T3DDocument, bool Save)
 {
     pSave        = Save;
     pT3DDocument = T3DDocument;
 }
예제 #10
0
 internal T3DDocument(string FilePath, bool Save)
 {
     pSave        = Save;
     pT3DDocument = GetT3DDocument(pSave);
     pT3DDocument.Open(FilePath);
 }
예제 #11
0
 public static List <Guid> RemoveUnsusedZones(this TAS3D.T3DDocument t3DDocument)
 {
     return(RemoveUnsusedZones(t3DDocument?.Building));
 }
예제 #12
0
        public static AnalyticalModel RunWorkflow(this AnalyticalModel analyticalModel, string path_TBD, string path_gbXML = null, Weather.WeatherData weatherData = null, List <DesignDay> heatingDesignDays = null, List <DesignDay> coolingDesignDays = null, List <SurfaceOutputSpec> surfaceOutputSpecs = null, bool unmetHours = true)
        {
            if (analyticalModel == null || string.IsNullOrWhiteSpace(path_TBD))
            {
                return(null);
            }

            string directory = System.IO.Path.GetDirectoryName(path_TBD);
            string fileName  = System.IO.Path.GetFileNameWithoutExtension(path_TBD);

            string path_TSD = System.IO.Path.Combine(directory, string.Format("{0}.{1}", fileName, "tsd"));

            if (!string.IsNullOrWhiteSpace(path_gbXML))
            {
                string path_T3D = System.IO.Path.Combine(directory, string.Format("{0}.{1}", fileName, "t3d"));

                string guid = null;
                using (SAMT3DDocument sAMT3DDocument = new SAMT3DDocument(path_T3D))
                {
                    TAS3D.T3DDocument t3DDocument = sAMT3DDocument.T3DDocument;
                    guid = t3DDocument.Building.GUID;
                    sAMT3DDocument.Save();
                }

                float latitude  = float.NaN;
                float longitude = float.NaN;
                float timeZone  = float.NaN;
                using (SAMTBDDocument sAMTBDDocument = new SAMTBDDocument(path_TBD))
                {
                    TBD.TBDDocument tBDDocument = sAMTBDDocument.TBDDocument;

                    if (weatherData != null)
                    {
                        Weather.Tas.Modify.UpdateWeatherData(tBDDocument, weatherData);
                    }

                    if (!string.IsNullOrWhiteSpace(guid))
                    {
                        tBDDocument.Building.GUID = guid;
                    }

                    TBD.Calendar calendar = tBDDocument.Building.GetCalendar();

                    List <TBD.dayType> dayTypes = Query.DayTypes(calendar);
                    if (dayTypes.Find(x => x.name == "HDD") == null)
                    {
                        TBD.dayType dayType = calendar.AddDayType();
                        dayType.name = "HDD";
                    }

                    if (dayTypes.Find(x => x.name == "CDD") == null)
                    {
                        TBD.dayType dayType = calendar.AddDayType();
                        dayType.name = "CDD";
                    }

                    latitude  = tBDDocument.Building.latitude;
                    longitude = tBDDocument.Building.longitude;
                    timeZone  = tBDDocument.Building.timeZone;

                    sAMTBDDocument.Save();
                }

                using (SAMT3DDocument sAMT3DDocument = new SAMT3DDocument(path_T3D))
                {
                    TAS3D.T3DDocument t3DDocument = sAMT3DDocument.T3DDocument;

                    t3DDocument.TogbXML(path_gbXML, true, true, true);
                    t3DDocument.SetUseBEWidths(false);
                    analyticalModel = Query.UpdateT3D(analyticalModel, t3DDocument);

                    t3DDocument.Building.latitude  = float.IsNaN(latitude) ? t3DDocument.Building.latitude : latitude;
                    t3DDocument.Building.longitude = float.IsNaN(longitude) ? t3DDocument.Building.longitude : longitude;
                    t3DDocument.Building.timeZone  = float.IsNaN(timeZone) ? t3DDocument.Building.timeZone : timeZone;

                    sAMT3DDocument.Save();

                    Convert.ToTBD(t3DDocument, path_TBD, 1, 365, 15, true);
                }
            }

            AdjacencyCluster adjacencyCluster = null;

            bool hasWeatherData = false;

            using (SAMTBDDocument sAMTBDDocument = new SAMTBDDocument(path_TBD))
            {
                TBD.TBDDocument tBDDocument = sAMTBDDocument.TBDDocument;

                hasWeatherData = tBDDocument?.Building.GetWeatherYear() != null;

                analyticalModel = Query.UpdateFacingExternal(analyticalModel, tBDDocument);
                AssignAdiabaticConstruction(tBDDocument, "Adiabatic", new string[] { "-unzoned", "-internal", "-exposed" }, false, true);
                UpdateBuildingElements(tBDDocument, analyticalModel);

                adjacencyCluster = analyticalModel.AdjacencyCluster;
                UpdateThermalParameters(adjacencyCluster, tBDDocument.Building);
                analyticalModel = new AnalyticalModel(analyticalModel, adjacencyCluster);

                UpdateZones(tBDDocument.Building, analyticalModel, true);

                if (coolingDesignDays != null || heatingDesignDays != null)
                {
                    AddDesignDays(tBDDocument, coolingDesignDays, heatingDesignDays, 30);
                }

                sAMTBDDocument.Save();
            }

            if (!hasWeatherData)
            {
                return(new AnalyticalModel(analyticalModel, adjacencyCluster));
            }

            Query.Sizing(path_TBD, analyticalModel, false, true);

            using (SAMTBDDocument sAMTBDDocument = new SAMTBDDocument(path_TBD))
            {
                TBD.TBDDocument tBDDocument = sAMTBDDocument.TBDDocument;

                if (surfaceOutputSpecs != null && surfaceOutputSpecs.Count > 0)
                {
                    Core.Tas.Modify.UpdateSurfaceOutputSpecs(tBDDocument, surfaceOutputSpecs);
                    Core.Tas.Modify.AssignSurfaceOutputSpecs(tBDDocument, surfaceOutputSpecs[0].Name);
                    sAMTBDDocument.Save();
                }

                Simulate(tBDDocument, path_TSD, 1, 1);
            }

            adjacencyCluster = analyticalModel.AdjacencyCluster;
            List <Core.Result> results = AddResults(path_TSD, adjacencyCluster);

            if (unmetHours)
            {
                List <Core.Result> results_UnmetHours = Query.UnmetHours(path_TSD, path_TBD, 0.5);
                if (results_UnmetHours != null && results_UnmetHours.Count > 0)
                {
                    foreach (Core.Result result in results_UnmetHours)
                    {
                        if (result is AdjacencyClusterSimulationResult)
                        {
                            adjacencyCluster.AddObject(result);
                        }
                        else if (result is SpaceSimulationResult)
                        {
                            SpaceSimulationResult spaceSimulationResult = (SpaceSimulationResult)result;

                            List <SpaceSimulationResult> spaceSimulationResults = Query.Results(results, spaceSimulationResult);
                            if (spaceSimulationResults == null)
                            {
                                results.Add(spaceSimulationResult);
                            }
                            else
                            {
                                spaceSimulationResults.ForEach(x => Core.Modify.Copy(spaceSimulationResult, x, Analytical.SpaceSimulationResultParameter.UnmetHourFirstIndex, Analytical.SpaceSimulationResultParameter.UnmetHours, Analytical.SpaceSimulationResultParameter.OccupiedUnmetHours));
                            }
                        }
                    }
                }
            }

            AnalyticalModel analyticalModel_Temp = new AnalyticalModel(analyticalModel, adjacencyCluster);

            //if (System.IO.File.Exists(path_TSD))
            //{
            //    string path_TPD = System.IO.Path.Combine(directory, string.Format("{0}.{1}", fileName, "tpd"));

            //    CreateTPD(path_TPD, path_TSD, analyticalModel_Temp);
            //}

            adjacencyCluster = UpdateDesignLoads(path_TBD, analyticalModel_Temp.AdjacencyCluster);

            return(new AnalyticalModel(analyticalModel, adjacencyCluster));
        }
예제 #13
0
 protected override void Create()
 {
     Document = new TAS3D.T3DDocument();
 }