aboutsummaryrefslogtreecommitdiff
path: root/README.rst
blob: 8e893a789486ff79307ef41894390e9e3922c01f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
opcut
=====

`https://opcut.herokuapp.com/`

`opcut` is cutting stock problem optimizer
(`https://en.wikipedia.org/wiki/Cutting_stock_problem`) utilizing multiple
panels and guillotine cuts (end-to-end cuts). This project includes:

    * multiple back-end optimizer implementations
    * command line front-end
    * REST service API (OpenAPI definition)
    * single-page web application front-end


Runtime requirements
--------------------

* python >=3.8

.. note::

    on Ubuntu, if pycairo is not available, additional
    ``apt install gcc pkg-config libcairo2-dev python3-dev`` is required


Install
-------

::

    $ pip install opcut

.. note::

    Windows distribution, with embedded python, is available at
    `https://github.com/bozokopic/opcut/releases`


Usage
-----

`opcut` command is interface for execution of three distinct actions:

    * `opcut calculate ...`

        Calculation of cutting stock problem. Input parameters and result is
        formated as JSON data (JSON, YAML or TOML).

    * `opcut generate ...`

        Generate output representation (SVG, PDF, ...) based on calculation
        result.

    * `opcut server ...`

        Run HTTP server providing single-page web application interface and
        OpenAPI interface.
        (default listening address is http://0.0.0.0:8080).

For additional command line arguments, run ``opcut --help`` or
``opcut <action> --help``.


`opcut calculate`
'''''''''''''''''

Example::

    $ opcut calculate --input-format yaml --output result.json << EOF
    cut_width: 1
    panels:
        panel1:
            width: 100
            height: 100
    items:
        item1:
            width: 10
            height: 10
            can_rotate: false
    EOF


`opcut generate`
''''''''''''''''

Example::

    $ opcut generate --output output.pdf result.json


`opcut server`
''''''''''''''

Example::

    $ opcut server


Development requirements
------------------------

* C99 compiler (gcc, clang, ...)
* nodejs >=7
* yarn


Build
-----

Build tool used for `opcut` is pydoit (`http://pydoit.org/`). It can be
installed together with other python dependencies by running::

    $ pip install -r requirements.pip.dev.txt

For listing available doit tasks, use::

    $ doit list

Default task::

    $ doit

creates wheel package inside `build` directory.


JSON Schema
-----------

.. literalinclude:: schemas/opcut.yaml
    :language: yaml


OpenAPI
-------

.. literalinclude:: schemas/openapi.yaml
    :language: yaml


License
-------

opcut - cutting stock problem optimizer

Copyright (C) 2017-2022 Bozo Kopic

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.