Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="anaTimePeriod"></param>
        /// <param name="win"></param>
        /// <param name="sun"></param>
        /// <param name="influencedLine"></param>
        /// <returns></returns>
        internal string AddInfluencedTime(
            AnalysisTimePeriod anaTimePeriod,
            Windows win,
            Sun sun,
            IrraditedBuilding irraditedBuiding)
        {
            Dictionary <string, int> partialInfTimeTable = new Dictionary <string, int>();

            double startTime, endTime, interval;

            startTime = dataTime2Hour(anaTimePeriod.StartTime);
            endTime   = dataTime2Hour(anaTimePeriod.EndTime);
            interval  = anaTimePeriod.IntervalInHour;

            double now;

            for (now = startTime; now <= endTime; now += interval)
            {
                double h0    = sun.CalcElevation(win.Latitude, win.Longitude, now);
                double alpha = sun.CalcAzimuth(win.Latitude, win.Longitude, now);

                if (h0 <= 0 ||
                    (alpha + win.Direction >= Math.PI / 2 && win.Direction != Math.PI) ||
                    (alpha + win.Direction <= -1 * Math.PI / 2 && win.Direction != Math.PI) ||
                    (win.Direction == Math.PI &&
                     (alpha + win.Direction <= 1.50 * Math.PI) &&
                     (alpha + win.Direction >= Math.PI / 2.0)
                    ))
                {
                    int cnt = partialInfTimeTable.Count;
                    if (cnt == 0 || partialInfTimeTable.ElementAt(cnt - 1).Value != 0)
                    {
                        partialInfTimeTable.Add(convertTimeDouble2String(now), 0);
                    }
                }
                else
                {
                    ed.WriteMessage("\n Time : " + convertTimeDouble2String(now) + " ");
                    Point3dCollection points = GetReflectedLinePoints(win, sun);
                    //irraditedBuiding.Sun = sun;
                    double dist = irraditedBuiding.midP2LineInDirection(win.Entity, points[0] - points[1]);
                    irraditedBuiding.AngleOfBuildingGap       = Math.Atan((win.Top - irraditedBuiding.Height) / dist);
                    irraditedBuiding.AngleOfIrraditedBuilding = Math.Atan(irraditedBuiding.Height / dist);
                    irraditedBuiding.IrraditedStatus          = irraditedBuiding.GetIrraditedStatus(points, sun.Elevation);

                    PartialTimePeriod(points, irraditedBuiding, now, partialInfTimeTable);
                }
            }
            return(convertDict2String(partialInfTimeTable, endTime));
        }