clt

Configurable Leathercraft Templates

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
  101. 101
  102. 102
  103. 103
  104. 104
  105. 105
  106. 106
  107. 107
  108. 108
  109. 109
  110. 110
  111. 111
  112. 112
  113. 113
  114. 114
  115. 115
  116. 116
-- Copyright 2026 Shota FUJI
--
-- This source code and the design it expresses are licensed under
-- the Creative Commons Attribution 4.0 International License.
--
-- SPDX-License-Identifier: CC-BY-4.0


module Models.PWS01.Parameters.Constraints exposing (..)

import Length exposing (Length, mm)
import Models.PWS01.Parameters exposing (Parameters)


type alias NumberConstraints a =
    { min : Maybe a
    , max : Maybe a
    }


type alias FixedLoop =
    { width : NumberConstraints Length
    , length : NumberConstraints Length
    }


type alias FreeLoop =
    { width : NumberConstraints Length
    , length : NumberConstraints Length
    , overlap : NumberConstraints Length
    }


type alias Loops =
    { fixed : FixedLoop
    , free : FreeLoop
    }


type alias ShortPiece =
    { loops : Loops
    , length : NumberConstraints Length
    , buckleSideFlap : NumberConstraints Length
    }


type alias BuckleHole =
    { adjustments : NumberConstraints Int
    , diameter : NumberConstraints Length
    , interval : NumberConstraints Length
    , distance : NumberConstraints Length
    }


type alias LongPiece =
    { buckleHole : BuckleHole
    , length : NumberConstraints Length
    , tipSharpness : NumberConstraints Int
    }


type alias Rendering =
    { margin : NumberConstraints Length
    , lineWidth : NumberConstraints Length
    }


type alias Parameters =
    { shoulderWidth : NumberConstraints Length
    , longPiece : LongPiece
    , shortPiece : ShortPiece
    , caseSideFlap : NumberConstraints Length
    , paddingOffset : NumberConstraints Length
    , topMargin : NumberConstraints Length
    , taperTo : NumberConstraints Length
    , rendering : Rendering
    }


constraints : Parameters
constraints =
    { shoulderWidth = { min = Just (mm 10), max = Just (mm 30) }
    , longPiece =
        { buckleHole =
            { adjustments = { min = Just 0, max = Just 4 }
            , diameter = { min = Just (mm 1), max = Just (mm 10) }
            , interval = { min = Just (mm 1), max = Just (mm 10) }
            , distance = { min = Just (mm 1), max = Just (mm 130) }
            }
        , length = { min = Just (mm 5), max = Just (mm 150) }
        , tipSharpness = { min = Just 0, max = Just 100 }
        }
    , shortPiece =
        { loops =
            { fixed =
                { width = { min = Just (mm 1), max = Just (mm 15) }
                , length = { min = Just (mm 10), max = Just (mm 100) }
                }
            , free =
                { width = { min = Just (mm 1), max = Just (mm 15) }
                , length = { min = Just (mm 10), max = Just (mm 100) }
                , overlap = { min = Just (mm 0), max = Just (mm 10) }
                }
            }
        , length = { min = Just (mm 5), max = Just (mm 150) }
        , buckleSideFlap = { min = Just (mm 0), max = Just (mm 80) }
        }
    , caseSideFlap = { min = Just (mm 0), max = Just (mm 50) }
    , paddingOffset = { min = Just (mm 0), max = Just (mm 14) }
    , topMargin = { min = Just (mm 0), max = Just (mm 10) }
    , taperTo = { min = Just (mm 5), max = Just (mm 28) }
    , rendering =
        { margin = { min = Just (mm 0), max = Just (mm 20) }
        , lineWidth = { min = Just (mm 0.1), max = Just (mm 1) }
        }
    }