offset.go 1.4 KB

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