コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }