public bool Evaluate( AgAccessConstraintPluginResultEval Result, AgAccessConstraintPluginObjectData baseObj, AgAccessConstraintPluginObjectData targetObj) { if (Result != null) { Result.Value = 0.0; if (baseObj != null) { double range = baseObj.Range( AGI.Access.Constraint.Plugin.AgEAccessApparentPositionType.eProperApparentPosition); double detectability = -1.0, relX = 0.0, relY = 0.0, relZ = 0.0; baseObj.RelativePosition( AGI.Access.Constraint.Plugin.AgEAccessApparentPositionType.eProperApparentPosition, AGI.Plugin.AgEUtFrame.eUtFrameFixed, ref relX, ref relY, ref relZ); bool usePosToComputeImageDetection = true; AgAccessConstraintPluginObjectDescriptor baseDesc = baseObj.Descriptor; string basePath = baseDesc.ObjectPath; if (basePath != "" && m_AxesHash.ContainsKey(basePath)) { AgCrdnConfiguredAxes topoAxes = (AgCrdnConfiguredAxes)m_AxesHash[basePath]; if (topoAxes != null) { topoAxes.TransformComponents(baseObj, ref relX, ref relY, ref relZ); double sinElev = relZ / range; detectability = computeDetectability(range, sinElev, m_size); usePosToComputeImageDetection = false; } } if (usePosToComputeImageDetection) { // will only work with Facility/Targets on Earth double x = 0.0, y = 0.0, z = 0.0; baseObj.Position(AGI.Plugin.AgEUtFrame.eUtFrameFixed, ref x, ref y, ref z); detectability = computeImageDetectionFromPos(range, x, y, z, relX, relY, relZ); } Result.Value = detectability; } } return(true); }
public bool Evaluate( AgAccessConstraintPluginResultEval Result, AgAccessConstraintPluginObjectData fromObject, AgAccessConstraintPluginObjectData toObject) { if (Result != null) { var satToSun = new double[] { 0, 0, 0 }; var satToFac = new double[] { 0, 0, 0 }; toObject.ApparentSunPosition(AgEUtFrame.eUtFrameFixed, ref satToSun[0], ref satToSun[1], ref satToSun[2]); toObject.RelativePosition(AgEAccessApparentPositionType.eLightPathApparentPosition, AgEUtFrame.eUtFrameFixed, ref satToFac[0], ref satToFac[1], ref satToFac[2]); if (useEquatorialAngle) { satToFac[2] = 0; satToSun[2] = 0; } Result.Value = AngleBetween(satToSun, satToFac); } return(true); }