coord.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // package coord -- координаты точки
  2. package coord
  3. import (
  4. "gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
  5. )
  6. // Coord -- координаты точки
  7. type Coord struct {
  8. X_ alias.CoordX `json:"x"` // Координата X
  9. Y_ alias.CoordY `json:"y"` // Координата Y
  10. }
  11. // NewCoord -- возвращает новую координаты
  12. func NewCoord(key string, elem map[string]interface{}) *Coord {
  13. var _lstCoord []interface{}
  14. _coord0, isOk := elem[key]
  15. if !isOk {
  16. _lstCoord = []interface{}{200, 200}
  17. } else {
  18. fnConvert := func() {
  19. defer func() {
  20. if _panic := recover(); _panic != nil {
  21. _lstCoord = []interface{}{200, 200}
  22. }
  23. }()
  24. _lstCoord = _coord0.([]interface{})
  25. }
  26. fnConvert()
  27. }
  28. x := alias.CoordX(200)
  29. y := alias.CoordY(200)
  30. if len(_lstCoord) >= 2 {
  31. switch _lstCoord[0].(type) {
  32. case int:
  33. x = alias.CoordX(_lstCoord[0].(int))
  34. y = alias.CoordY(_lstCoord[1].(int))
  35. case float64:
  36. fnConvert := func() {
  37. defer func() {
  38. if _panic := recover(); _panic != nil {
  39. x = alias.CoordX(200)
  40. y = alias.CoordY(200)
  41. }
  42. }()
  43. x = alias.CoordX(int(_lstCoord[0].(float64)))
  44. y = alias.CoordY(int(_lstCoord[1].(float64)))
  45. }
  46. fnConvert()
  47. }
  48. }
  49. sf := &Coord{
  50. X_: x,
  51. Y_: y,
  52. }
  53. return sf
  54. }
  55. // X -- возвращает координату X
  56. func (sf *Coord) X() alias.CoordX {
  57. return sf.X_
  58. }
  59. // Y -- возвращает координату Y
  60. func (sf *Coord) Y() alias.CoordY {
  61. return sf.Y_
  62. }
  63. // Coord -- возвращает координаты
  64. func (sf *Coord) Coord() (alias.CoordX, alias.CoordY) {
  65. return sf.X_, sf.Y_
  66. }