public bool Evaluate(AgAsLightReflectionResultEval ResultEval) { try { if (m_MsgCntr % m_MsgInterval == 0) { Debug.WriteLine("--> Entered", m_Name + ".Evaluate( " + m_MsgCntr + " )"); } if (m_Enabled) { // Get value of Cr from STK/ODTK double cr = ResultEval.ParameterValue(m_CrIndex); if (m_RefFrame == "Body") { m_Enabled = setSphericalReflectanceInBody(ResultEval, cr); } else { m_Enabled = setSphericalReflectanceUsingFrame(ResultEval, cr, (AgEUtFrame)m_refFrameNames.IndexOf(m_RefFrame)); } } return(m_Enabled); } catch (Exception ex) { m_Enabled = false; Message(AgEUtLogMsgType.eUtLogMsgAlarm, m_Name + ".Evaluate(): Exception Message( " + ex.Message + " )"); Message(AgEUtLogMsgType.eUtLogMsgAlarm, m_Name + ".Evaluate(): Exception StackTr( " + ex.StackTrace + " )"); Debug.WriteLine("Exception Message( " + ex.Message + " )", m_Name + ".Evaluate()"); Debug.WriteLine("Exception StackTr( " + ex.StackTrace + " )", m_Name + ".Evaluate()"); } finally { if (m_MsgCntr % m_MsgInterval == 0) { Debug.WriteLine("<-- Exited", m_Name + ".Evaluate()"); } } return(m_Enabled); }
private bool setSphericalReflectanceUsingFrame(AgAsLightReflectionResultEval ResultEval, double cr, AgEUtFrame frame) { double reflectanceMag; Tuple3 incidentVec = new Tuple3(); ResultEval.IncidentDirection((AgEUtFrame)frame, ref incidentVec.x, ref incidentVec.y, ref incidentVec.z); // reflectance is positive along the incident direction incidentVec.scaleBy(m_SRPArea); if (m_CrIndex > -1) { ResultEval.SetReflectanceParamPartials(m_CrIndex, frame, incidentVec.x, incidentVec.y, incidentVec.z); } incidentVec.scaleBy(cr); ResultEval.SetReflectance((AgEUtFrame)frame, incidentVec.x, incidentVec.y, incidentVec.z); double[,] incidentDirPosPartials, posPartials; incidentDirPosPartials = new double[3, 3]; posPartials = new double[3, 3]; ResultEval.IncidentDirectionCompPosPartials((AgEUtFrame)frame, ref incidentDirPosPartials[0, 0], ref incidentDirPosPartials[0, 1], ref incidentDirPosPartials[0, 2], ref incidentDirPosPartials[1, 0], ref incidentDirPosPartials[1, 1], ref incidentDirPosPartials[1, 2], ref incidentDirPosPartials[2, 0], ref incidentDirPosPartials[2, 1], ref incidentDirPosPartials[2, 2]); reflectanceMag = cr * m_SRPArea; posPartials[0, 0] = reflectanceMag * incidentDirPosPartials[0, 0]; posPartials[0, 1] = reflectanceMag * incidentDirPosPartials[0, 1]; posPartials[0, 2] = reflectanceMag * incidentDirPosPartials[0, 2]; posPartials[1, 0] = reflectanceMag * incidentDirPosPartials[1, 0]; posPartials[1, 1] = reflectanceMag * incidentDirPosPartials[1, 1]; posPartials[1, 2] = reflectanceMag * incidentDirPosPartials[1, 2]; posPartials[2, 0] = reflectanceMag * incidentDirPosPartials[2, 0]; posPartials[2, 1] = reflectanceMag * incidentDirPosPartials[2, 1]; posPartials[2, 2] = reflectanceMag * incidentDirPosPartials[2, 2]; ResultEval.SetReflectanceCompPosPartials((AgEUtFrame)frame, posPartials[0, 0], posPartials[0, 1], posPartials[0, 2], posPartials[1, 0], posPartials[1, 1], posPartials[1, 2], posPartials[2, 0], posPartials[2, 1], posPartials[2, 2]); // VelPartials are zero in inertial - we'll set this anyway to test it bool doVelPartials = true; if (doVelPartials) { double[,] incidentDirVelPartials, velPartials; incidentDirVelPartials = new double[3, 3]; velPartials = new double[3, 3];; ResultEval.IncidentDirectionCompVelPartials((AgEUtFrame)frame, ref incidentDirVelPartials[0, 0], ref incidentDirVelPartials[0, 1], ref incidentDirVelPartials[0, 2], ref incidentDirVelPartials[1, 0], ref incidentDirVelPartials[1, 1], ref incidentDirVelPartials[1, 2], ref incidentDirVelPartials[2, 0], ref incidentDirVelPartials[2, 1], ref incidentDirVelPartials[2, 2]); velPartials[0, 0] = reflectanceMag * incidentDirVelPartials[0, 0]; velPartials[0, 1] = reflectanceMag * incidentDirVelPartials[0, 1]; velPartials[0, 2] = reflectanceMag * incidentDirVelPartials[0, 2]; velPartials[1, 0] = reflectanceMag * incidentDirVelPartials[1, 0]; velPartials[1, 1] = reflectanceMag * incidentDirVelPartials[1, 1]; velPartials[1, 2] = reflectanceMag * incidentDirVelPartials[1, 2]; velPartials[2, 0] = reflectanceMag * incidentDirVelPartials[2, 0]; velPartials[2, 1] = reflectanceMag * incidentDirVelPartials[2, 1]; velPartials[2, 2] = reflectanceMag * incidentDirVelPartials[2, 2]; ResultEval.SetReflectanceCompVelPartials((AgEUtFrame)frame, velPartials[0, 0], velPartials[0, 1], velPartials[0, 2], velPartials[1, 0], velPartials[1, 1], velPartials[1, 2], velPartials[2, 0], velPartials[2, 1], velPartials[2, 2]); } Debug.WriteLine(m_MsgCntr + " " + cr + " : frame = Body : (" + incidentVec.x + "," + incidentVec.y + "," + incidentVec.z + ")"); return(true); }