Exemplo n.º 1
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // INPUT
            // declaration
            string _location           = null;
            int    modelRotation_      = 0;
            double referenceLongitude_ = 15.0;

            DA.GetData(0, ref _location);
            DA.GetData(1, ref modelRotation_);
            DA.GetData(2, ref referenceLongitude_);

            // actions
            df_envimet_lib.Settings.Location myLoc = new df_envimet_lib.Settings.Location(_location, modelRotation_);

            myLoc.ReferenceLongitude = referenceLongitude_;

            // OUTPUT
            DA.SetData(0, myLoc);
        }
Exemplo n.º 2
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // INPUT
            // output path
            string _envimetFolder = null;

            // location and grid
            Location    _envimetLocation = GetLocationInit(BASE_LOC_NAME, BASE_LOC_ROTATION);
            GridLib     _envimentGrid    = new GridLib();
            NestingGrid nestingGrid_     = new NestingGrid();

            // list objects
            List <Entity> _envimentObjects_ = new List <Entity>();

            // path
            string fileName_ = "Morpho";

            // toggle
            bool _runIt    = false;
            bool viewGrid_ = false;


            DA.GetData(0, ref _envimetFolder);
            DA.GetData(1, ref _envimetLocation);
            DA.GetData(2, ref _envimentGrid);
            DA.GetData(3, ref nestingGrid_);
            DA.GetDataList(4, _envimentObjects_);
            DA.GetData(5, ref fileName_);
            DA.GetData(6, ref _runIt);
            DA.GetData(7, ref viewGrid_);

            if (_envimetFolder == null)
            {
                this.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Use DF Envimet Installation Directory to set installation folder of envimet.");
                return;
            }
            Preparation preparation = new Preparation(_envimentGrid, _envimetLocation);

            string information = String.Format("Dimension of grid: {0},{1},{2}\nNumber of nesting grid: {3}", _envimentGrid.NumX, _envimentGrid.NumY, _envimentGrid.NumZ, nestingGrid_.NumNestingGrid);

            DA.SetData(0, information);

            if (viewGrid_)
            {
                DA.SetDataList(1, _envimentGrid.GridXY());
                DA.SetDataList(2, _envimentGrid.GridXZ());
                DA.SetDataList(3, _envimentGrid.GridYZ());
            }

            if (_runIt)
            {
                // default preparation object
                List <Building>   buildings = new List <Building>();
                List <Object2d>   soils     = new List <Object2d>();
                List <Object2d>   plant2d   = new List <Object2d>();
                List <Plant3d>    plant3d   = new List <Plant3d>();
                List <Receptor>   receptors = new List <Receptor>();
                List <Object2d>   sources   = new List <Object2d>();
                List <Terrain>    terrain   = new List <Terrain>();
                List <SimpleWall> simpleW   = new List <SimpleWall>();


                preparation.EnvimetPart["grid"]        = _envimentGrid;
                preparation.EnvimetPart["nestingGrid"] = nestingGrid_;
                preparation.EnvimetPart["location"]    = _envimetLocation;

                if (_envimentObjects_.Count > 0)
                {
                    Dictionary <string, List <Entity> > objectDict = GetObjectDivideByType(_envimentObjects_);

                    string          soilMatrix               = null;
                    string          plant2dMatrix            = null;
                    string          sourceMatrix             = null;
                    string          simpleWallShadingsMatrix = null;
                    List <string[]> plant3dXml               = new List <string[]>();
                    List <string[]> receptorsXml             = new List <string[]>();

                    // building and terrain
                    if (objectDict["building"].Count > 0 && objectDict["terrain"].Count == 0)
                    {
                        buildings = objectDict["building"].ConvertAll(o => (Building)o);
                        Tuple <Dictionary <string, string>, List <string[]> > buildingComponents = Preparation.GetBuildingPreparationMatrix(_envimentGrid, buildings, null, demVoxel: new Point3d[] { });
                        if (BuildingWarning(buildingComponents))
                        {
                            return;
                        }
                        preparation.EnvimetPart["building"] = buildingComponents;
                    }
                    else if (objectDict["building"].Count == 0 && objectDict["terrain"].Count > 0)
                    {
                        terrain = objectDict["terrain"].ConvertAll(o => (Terrain)o);
                        Warning(terrain);
                        Tuple <Point3d[], string, string> terrainComponents = Preparation.GetDemMatrix(terrain[0], _envimentGrid);
                        preparation.EnvimetPart["dem"] = terrainComponents;
                    }
                    else if (objectDict["building"].Count > 0 && objectDict["terrain"].Count > 0)
                    {
                        terrain   = objectDict["terrain"].ConvertAll(o => (Terrain)o);
                        buildings = objectDict["building"].ConvertAll(o => (Building)o);

                        Warning(terrain);
                        Tuple <Point3d[], string, string> terrainComponents = Preparation.GetDemMatrix(terrain[0], _envimentGrid);
                        preparation.EnvimetPart["dem"] = terrainComponents;

                        Tuple <Dictionary <string, string>, List <string[]> > buildingComponents = Preparation.GetBuildingPreparationMatrix(_envimentGrid, buildings, terrain[0], demVoxel: terrainComponents.Item1);
                        if (BuildingWarning(buildingComponents))
                        {
                            return;
                        }
                        preparation.EnvimetPart["building"] = buildingComponents;
                    }

                    if (objectDict["soil"].Count > 0)
                    {
                        soils      = objectDict["soil"].ConvertAll(o => (Object2d)o);
                        soilMatrix = Preparation.Get2dObjectMatrix(_envimentGrid, soils, Material.CommonSoilMaterial);
                        preparation.EnvimetPart["soils2D"] = soilMatrix;
                    }
                    if (objectDict["plant2d"].Count > 0)
                    {
                        plant2d       = objectDict["plant2d"].ConvertAll(o => (Object2d)o);
                        plant2dMatrix = Preparation.Get2dObjectMatrix(_envimentGrid, plant2d, Material.DefaultEmpty);
                        preparation.EnvimetPart["simpleplants2D"] = plant2dMatrix;
                    }
                    if (objectDict["plant3d"].Count > 0)
                    {
                        plant3d    = objectDict["plant3d"].ConvertAll(o => (Plant3d)o);
                        plant3dXml = Preparation.GetPlant3dMatrix(_envimentGrid, plant3d);
                        preparation.EnvimetPart["plant3d"] = plant3dXml;
                    }
                    if (objectDict["receptors"].Count > 0)
                    {
                        receptors    = objectDict["receptors"].ConvertAll(o => (Receptor)o);
                        receptorsXml = Preparation.GetReceptorsMatrix(_envimentGrid, receptors);
                        preparation.EnvimetPart["receptors"] = receptorsXml;
                    }
                    if (objectDict["source"].Count > 0)
                    {
                        sources      = objectDict["source"].ConvertAll(o => (Object2d)o);
                        sourceMatrix = Preparation.Get2dObjectMatrix(_envimentGrid, sources, Material.DefaultEmpty);
                        preparation.EnvimetPart["sources2D"] = sourceMatrix;
                    }
                    if (objectDict["simpleW"].Count > 0)
                    {
                        simpleW = objectDict["simpleW"].ConvertAll(o => (SimpleWall)o);
                        simpleWallShadingsMatrix           = Preparation.GetSimpleWallZMatrix(_envimentGrid, simpleW);
                        preparation.EnvimetPart["simpleW"] = simpleWallShadingsMatrix;
                    }
                }

                string fileName = (fileName_ != null) ? fileName_ + ".INX" : "DragonflyEnvimet.INX";
                string fullName = System.IO.Path.Combine(_envimetFolder, fileName);

                df_envimet_lib.IO.Inx.INXwriteMethod(fullName, preparation);
                DA.SetData(4, fullName);
                CleanObject(_envimentObjects_);
            }
        }