Пример #1
0
 public bool IsAngleWithInTolerance(float aAngle, FlightZone aMode)
 {
     FlightZone cirleMode = (aMode == FlightZone.Project) ? mFlightZoneMode : aMode;
     if ((cirleMode & FlightZone.Deg45) != 0)
     {
         float angle = Math2.NormalizeAngle(aAngle + 45);
         for (int i = 0; i < 4; i++)
         {
             if (angle >= -mAngleTolerance && angle <= mAngleTolerance)
                 return true;
             angle = Math2.NormalizeAngle(angle + 90);
         }
     }
     if ((cirleMode & FlightZone.Deg90) != 0)
     {
         float angle = Math2.NormalizeAngle(aAngle);
         for (int i = 0; i < 4; i++)
         {
             if (angle >= -mAngleTolerance && angle <= mAngleTolerance)
                 return true;
             angle = Math2.NormalizeAngle(angle + 90);
         }
     }
     return false;
 }
Пример #2
0
 public float ClosestAngle(float aAngle, FlightZone aMode)
 {
     float input = Math2.NormalizeAngle(aAngle);
     float closest = float.MaxValue;
     FlightZone cirleMode = (aMode == FlightZone.Project) ? mFlightZoneMode : aMode;
     if ((cirleMode & FlightZone.Deg45) != 0)
     {
         float angle;
         for (int i = 0; i < 4; i++)
         {
             angle = Math2.NormalizeAngle((i * 90 - mAngleTolerance) + 45);
             if (Math.Abs(input - angle) < Math.Abs(input - closest))
             {
                 closest = angle;
             }
             angle = Math2.NormalizeAngle((i * 90 + mAngleTolerance) + 45);
             if (Math.Abs(input - angle) < Math.Abs(input - closest))
             {
                 closest = angle;
             }
         }
     }
     if ((cirleMode & FlightZone.Deg90) != 0)
     {
         float angle;
         for (int i = 0; i < 4; i++)
         {
             angle = Math2.NormalizeAngle(i * 90 - mAngleTolerance);
             if (Math.Abs(input - angle) < Math.Abs(input - closest))
             {
                 closest = angle;
             }
             angle = Math2.NormalizeAngle(i * 90 + mAngleTolerance);
             if (Math.Abs(input - angle) < Math.Abs(input - closest))
             {
                 closest = angle;
             }
         }
     }
     return closest;
 }
Пример #3
0
        public void Deserialize(string aFilename, Stream aStream)
        {
            using (BinaryReader reader = new BinaryReader(aStream, System.Text.Encoding.UTF8))
            {
                uint id = reader.ReadUInt32();
                if (id != 0x4b434c46)
                {
                    throw new Exception(string.Format("'{0}' is not a flock file", Path.GetFileName(aFilename)));
                }

                int version = reader.ReadInt32();
                if (version <= Version)
                {
                    mBaseMarker = reader.ReadInt32();
                    if (version < 6)
                    {
                        reader.ReadInt32();
                    }

                    mDistanceTolerance = reader.ReadInt32();

                    if (version >= 5)
                    {
                        mAngleTolerance = reader.ReadInt32();
                    }

                    if (version >= 7)
                    {
                        mFlightZoneMode = (FlightZone)reader.ReadInt32();
                    }

                    if (version >= 8)
                    {
                        mPhotoName = reader.ReadString();
                    }

                    if (version >= 9)
                    {
                        mWingsuitSize = reader.ReadInt32();
                        mDotCount = reader.ReadInt32();
                        mDotSize = reader.ReadInt32();
                        mDotDistance = reader.ReadInt32();
                        mDotStretch = reader.ReadInt32();
                        mDotRotate = reader.ReadInt32();
                    }

                    if (version >= 10)
                    {
                        mGridCount = reader.ReadInt32();
                        mGridSize = reader.ReadInt32();
                        mGridRotate = reader.ReadSingle();
                        mGridOffset.X = reader.ReadSingle();
                        mGridOffset.Y = reader.ReadSingle();
                    }

                    if (version >= 2)
                    {
                        mBackColor = Color.FromArgb(reader.ReadInt32());
                        mDescription = reader.ReadString();
                        long date = reader.ReadInt64();
                        mDate = DateTime.FromBinary(date);
                        mPlace = reader.ReadString();
                        mGlideRatio = reader.ReadSingle();
                        mJumpNumber = reader.ReadInt32();
                        mFallrate = reader.ReadInt32();
                    }

                    int numMarkers = reader.ReadInt32();
                    for (int i = 0; i < numMarkers; i++)
                    {
                        float x = reader.ReadSingle();
                        float y = reader.ReadSingle();
                        Marker marker = new Marker(x, y);
                        marker.ShowFlightZone = reader.ReadBoolean();
                        if (version >= 3)
                        {
                            if (version == 3)
                            {
                                reader.ReadBoolean();
                            }
                            marker.SilhoutteColor = Color.FromArgb(reader.ReadInt32());
                        }
                        if (version >= 7)
                        {
                            marker.FlightZoneMode = (FlightZone)reader.ReadInt32();
                        }

                        marker.NameTag = reader.ReadString();
                        marker.Description = reader.ReadString();
                        mMarkers.Add(marker);
                    }

                    int numLines = reader.ReadInt32();
                    for (int i = 0; i < numLines; i++)
                    {
                        int start = reader.ReadInt32();
                        int end = reader.ReadInt32();
                        Line line = new Line(mMarkers[start], mMarkers[end]);
                        if (version >= 3)
                        {
                            line.Color = Color.FromArgb(reader.ReadInt32());
                        }
                        mLines.Add(line);
                    }
                }
                else
                {
                    throw new Exception(string.Format("'{0}' has an unsupported version number {1}.", Path.GetFileName(aFilename), version));
                }
            }
        }
Пример #4
0
 private void SetMarkerMode(int index, FlightZone aMode)
 {
     if (index != -1)
     {
         Marker marker = Project.GetMarker(index);
         if (marker.FlightZoneMode != aMode)
         {
             CommandSystem.AddRollback(Project);
             marker.FlightZoneMode = aMode;
         }
     }
 }