コード例 #1
0
        public static List <List <Evalue> > EvalueAnalysis(List <Audience> audience, EvalueSettings settings, ActivityArea activityArea)
        {
            List <List <Evalue> > results = new List <List <Evalue> >();

            foreach (Audience a in audience)
            {
                results.Add(EvaluateEvalue(a, settings, activityArea));
            }
            return(results);
        }
コード例 #2
0
ファイル: EvalueAnalysis.cs プロジェクト: BHoM/BHoM_Engine
        public static List <Evalue> EvalueAnalysis(this Audience audience, EvalueSettings settings, ActivityArea activityArea)
        {
            if (audience == null || settings == null || activityArea == null)
            {
                BH.Engine.Reflection.Compute.RecordError("Cannot query the EvalueAnalysis if the audience, settings, or activity area are null.");
                return(new List <Evalue>());
            }

            List <Evalue> results = EvaluateEvalue(audience, settings, activityArea);

            return(results);
        }
コード例 #3
0
        /***************************************************/
        /**** Private Methods                           ****/
        /***************************************************/
        private static List <Evalue> EvaluateEvalue(Audience audience, EvalueSettings settings, ActivityArea activityArea)
        {
            List <Evalue>      results       = new List <Evalue>();
            KDTree <Spectator> spectatorTree = SetKDTree(audience);

            foreach (Spectator s in audience.Spectators)
            {
                Vector rowVector  = Geometry.Query.CrossProduct(Vector.ZAxis, s.Head.PairOfEyes.ViewDirection);
                Vector viewVector = s.Head.PairOfEyes.ViewDirection;
                if (settings.ViewType == EvalueViewEnum.ToPoint)
                {
                    viewVector = activityArea.ActivityFocalPoint - s.Head.PairOfEyes.ReferenceLocation;
                }
                results.Add(EvalueResult(s, rowVector, viewVector, activityArea.PlayingArea, settings));
            }
            return(results);
        }
コード例 #4
0
        private static Evalue EvalueResult(Spectator s, Vector rowVector, Vector viewVect, Polyline playingArea, EvalueSettings settings)
        {
            Evalue result = new Evalue();

            Vector viewY = Geometry.Query.CrossProduct(viewVect, rowVector);

            viewY = viewY.Normalise();

            Plane vertPln  = Geometry.Create.Plane(s.Head.PairOfEyes.ReferenceLocation, rowVector);
            Plane horizPln = Geometry.Create.Plane(s.Head.PairOfEyes.ReferenceLocation, viewY);

            double htestAng = 0;
            double vtestAng = 0;
            Vector iComp    = new Vector();
            Vector jComp    = new Vector();
            Point  Hp0      = new Point();
            Point  Hp1      = new Point();
            Point  Vp0      = new Point();
            Point  Vp1      = new Point();

            //loop to get widest horizontal and vertical angles and vectors
            for (int i = 0; i < playingArea.ControlPoints.Count; i++)
            {
                Point controlPi = playingArea.ControlPoints[i];
                //need to test if points are the same
                iComp = controlPi - s.Head.PairOfEyes.ReferenceLocation;
                for (int j = 0; j < playingArea.ControlPoints.Count; j++)
                {
                    if (i != j)
                    {
                        Point controlPj = playingArea.ControlPoints[j];
                        jComp    = controlPj - s.Head.PairOfEyes.ReferenceLocation;
                        htestAng = Geometry.Query.Angle(iComp, jComp, horizPln);

                        vtestAng = Geometry.Query.Angle(iComp, jComp, vertPln);
                        if (htestAng > Math.PI)
                        {
                            htestAng = Math.PI * 2 - htestAng;
                        }
                        if (vtestAng > Math.PI)
                        {
                            vtestAng = Math.PI * 2 - vtestAng;
                        }
                        if (result.HorizViewAng < htestAng)
                        {
                            result.HorizViewAng = htestAng;
                            Hp0 = playingArea.ControlPoints[i];
                            Hp1 = playingArea.ControlPoints[j];
                        }
                        if (result.VertViewAng < vtestAng)
                        {
                            result.VertViewAng = vtestAng;
                            Vp0 = playingArea.ControlPoints[i];
                            Vp1 = playingArea.ControlPoints[j];
                        }
                    }
                }
            }
            result.HorizViewAng        = result.HorizViewAng * 57.2958;
            result.VertViewAng         = result.VertViewAng * 57.2958;
            result.VertViewVectors[0]  = (Vp0 - s.Head.PairOfEyes.ReferenceLocation).Normalise();
            result.VertViewVectors[1]  = (Vp1 - s.Head.PairOfEyes.ReferenceLocation).Normalise();
            result.HorizViewVectors[0] = (Hp0 - s.Head.PairOfEyes.ReferenceLocation).Normalise();
            result.HorizViewVectors[1] = (Hp1 - s.Head.PairOfEyes.ReferenceLocation).Normalise();

            if (settings.ViewType == EvalueViewEnum.ToPoint)
            {
                result.Torsion = Geometry.Query.Angle(s.Head.PairOfEyes.ViewDirection, viewVect) * 57.2958;
            }

            return(result);
        }
コード例 #5
0
        public static List <Evalue> EvalueAnalysis(Audience audience, EvalueSettings settings, ActivityArea activityArea)
        {
            List <Evalue> results = EvaluateEvalue(audience, settings, activityArea);

            return(results);
        }
コード例 #6
0
ファイル: EvalueAnalysis.cs プロジェクト: BHoM/BHoM_Engine
        public static List <List <Evalue> > EvalueAnalysis(this List <Audience> audience, EvalueSettings settings, ActivityArea activityArea)
        {
            List <List <Evalue> > results = new List <List <Evalue> >();

            if (audience == null || settings == null || activityArea == null)
            {
                BH.Engine.Reflection.Compute.RecordError("Cannot query the EvalueAnalysis if the audience, settings, or activity area are null.");
                return(results);
            }

            foreach (Audience a in audience)
            {
                results.Add(EvaluateEvalue(a, settings, activityArea));
            }
            return(results);
        }