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); }
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); }
/***************************************************/ /**** 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); }
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); }
public static List <Evalue> EvalueAnalysis(Audience audience, EvalueSettings settings, ActivityArea activityArea) { List <Evalue> results = EvaluateEvalue(audience, settings, activityArea); return(results); }
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); }