Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Microsoft.SqlServer.Server;
- using System;
- using System.Data.SqlTypes;
- using System.Text;
- [Serializable]
- [SqlUserDefinedType(Format.Native,
- IsByteOrdered = true, ValidationMethodName = "SprawdzPunkt")]
- public struct Punkt : INullable
- {
- private bool is_Null;
- private Int32 _x;
- private Int32 _y;
- public bool IsNull
- {
- get
- { return (is_Null); }
- }
- public static Punkt Null
- {
- get
- {
- Punkt pt = new Punkt();
- pt.is_Null = true;
- return pt;
- }
- }
- public override string ToString()
- {
- if (this.IsNull)
- return "NULL";
- else
- {
- StringBuilder builder = new StringBuilder();
- builder.Append(_x);
- builder.Append(",");
- builder.Append(_y);
- return builder.ToString();
- }
- }
- [SqlMethod(OnNullCall = false)]
- public static Punkt Parse(SqlString s)
- {
- if (s.IsNull)
- return Null;
- Punkt pt = new Punkt();
- string[] xy = s.Value.Split(",".ToCharArray());
- pt.X = Int32.Parse(xy[0]);
- pt.Y = Int32.Parse(xy[1]);
- if (!pt.SprawdzPunkt())
- throw new ArgumentException("Invalid XY coordinate values.");
- return pt;
- }
- // współrzędne X i Y są ustawiane jako właściwościtypu.
- public Int32 X
- {
- get
- { return this._x; }
- set
- {
- Int32 temp = _x;
- _x = value;
- if (!SprawdzPunkt())
- {
- _x = temp;
- throw new ArgumentException("Zła współrzędna X.");
- }
- }
- }
- public Int32 Y
- {
- get
- { return this._y; }
- set
- {
- Int32 temp = _y;
- _y = value;
- if (!SprawdzPunkt())
- {
- _y = temp;
- throw new ArgumentException("Zła współrzędna Y.");
- }
- }
- }
- // metoda walidująca współrzędne X Y
- private bool SprawdzPunkt()
- {
- if ((_x >= 0) && (_y >= 0))
- { return true; }
- else
- { return false; }
- }
- // Odległość od 0,0.
- [SqlMethod(OnNullCall = false)]
- public Double Odleglosc()
- { return OdlegloscOdXY(0, 0); }
- // Odległość od wskazanego punktu
- [SqlMethod(OnNullCall = false)]
- public Double OdlegloscOd(Punkt pFrom)
- { return OdlegloscOdXY(pFrom.X, pFrom.Y); }
- // Odległość od wskazanego punktu.
- [SqlMethod(OnNullCall = false)]
- public Double OdlegloscOdXY(Int32 iX, Int32 iY)
- {
- return Math.Sqrt(Math.Pow(iX - _x, 2.0) + Math.Pow(iY - _y, 2.0));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement