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; }
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; }
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)); } } }
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; } } }