Pliki cookies pomagają ulepszać stronę. Możesz włączyć/wyłączyć obsługę plików cookies w swojej przeglądarce. Więcej informacji na temat Polityki Cookies.

Pakowanie Wielu Paczek

Opis działania

Algorytm, którego zadaniem jest wybranie odpowiednich pojemników do zapakowania podanych przedmiotów. Należy podać wymiary przedmiotów do zapakowania oraz listę dostępnych pojemników, dzięki czemu algorytm znajdzie rozwiązanie umożliwiające zapakowanie wszystkich przedmiotów do jak najmniejszej ilości pojemników.

Przykłady zastosowania algorytmu

Przykład 1:

Pakowanie do wielu pojemników - opcja pierwsza

Sklep internetowy jest w trakcie realizacji zamówienia składającego się z trzech przedmiotów. Ponieważ dysponuje jednym rodzajem pojemnika, musi sprawdzić, ile musi ich użyć aby zapakować całe zamówienie.

Szczegóły zlecenia przekazane do naszego algorytmu:
Dostępne pojemniki:

przestrzeń w pojemniku
o wymiarach 12x12x12

Przedmioty do zapakowania:

Wymiary: 10x10x10
Ilość: 3

3DBinPacking wykonuje symulację pakowania i zwraca następujący wynik:

Zapakowano jeden przedmiot

Zapakowano jeden przedmiot

Zapakowano jeden przedmiot


Przykład 2:

Pakowanie do wielu pojemników - opcja druga

Sklep internetowy jest w trakcie realizacji zamówienia składającego się z trzech przedmiotów. Ponieważ dysponuje różnymi rodzajami pojemników, musi sprawdzić, które z nich powinny zostać użyte do optymalnego zapakowania całego zamówienia.

Szczegóły zlecenia przekazane do naszego algorytmu:
Dostępne pojemniki:

przestrzeń w pojemniku
o wymiarach 12x12x12

przestrzeń w pojemniku
o wymiarach 24x12x12

Przedmioty do zapakowania:

Wymiary: 10x10x10
Ilość: 3

3DBinPacking wykonuje symulację pakowania i zwraca następujący wynik:

24x12x12

Zapakowano 2 przedmioty

12x12x12

Zapakowano jeden przedmiot


Przykład 3:

Pakowanie do wielu pojemników - opcja trzecia

Sklep internetowy jest w trakcie realizacji zamówienia składającego się z trzech przedmiotów. Ponieważ dysponuje różnymi rodzajami pojemników, musi sprawdzić, które z nich powinny zostać użyte do optymalnego zapakowania całego zamówienia.

Szczegóły zlecenia przekazane do naszego algorytmu:
Dostępne pojemniki:

przestrzeń w pojemniku
o wymiarach 12x12x12

przestrzeń w pojemniku
o wymiarach 24x12x12

przestrzeń w pojemniku
o wymiarach 24x24x24

Przedmioty do zapakowania:

Wymiary: 10x10x10
Ilość: 3

3DBinPacking wykonuje symulację pakowania i zwraca następujący wynik:

24x24x24

Zapakowano wszystkie 3 przedmioty

Zarejestruj się w naszym serwisie
Potwierdź rejestrację klikając link aktywacyjny
otrzymanym mailu
Zaloguj się
Pobierz swój klucz API
Przygotuj i wyślij zapytanie
zgodnie z zaleceniami znajdującymi się w dokumentacji
W odpowiedzi otrzymasz obliczenia
wykonane przez nasz algorytm
  • Zarejestruj się w naszym serwisie
  • Potwierdź rejestrację klikając link aktywacyjny
    otrzymanym mailu
  • Zaloguj się
  • Pobierz swój klucz API
  • Przygotuj i wyślij zapytanie
    zgodnie z zaleceniami znajdującymi się w dokumentacji
  • W odpowiedzi otrzymasz obliczenia
    wykonane przez nasz algorytm

Pakowanie Wielu Paczek

Pojemnik

Id
Szer
Wys
Głęb
Waga max.
Ilość

Przedmioty

Id
Szer
Wys
Głęb
Waga
Ilość
VR

Parametry wizualizacji

  • rgb(245,245,245)
  • rgb(161,161,161)
  • rgb(230,230,230)
  • rgb(255,255,255)
  • rgb(227,144,22)
  • rgb(255,255,255)
  • rgb(142,132,122)
  • rgb(102,97,92)

Dane podstawowe

ADRESY SERWERÓW

  • us-east.api.3dbinpacking.com/packer/packIntoMany - USA (Virginia)
  • eu.api.3dbinpacking.com/packer/packIntoMany - Europa (Irlandia)
  • asia1.api.3dbinpacking.com/packer/packIntoMany - Asia Pacific (Singapore)
  • global-api.3dbinpacking.com/packer/packIntoMany - Adres globalny

PEM (X.509)

AKCEPTOWANE METODY PRZESYŁANIA DANYCH:

  • POST - Zalecane
  • GET

AKCEPTOWANE PROTOKOŁY:

  • https - Zalecane
  • http

SPOSOBY WYWOŁANIA:

  • jako parametr - Przykład GET: https://global-api.3dbinpacking.com/packer/packIntoMany?query={json_encoded_data}
  • jako JSON request

Parametry żądania

PARAMETRY WYMAGANE

username - Nazwa użytkownika

  • Typ danych: ciąg znaków

api_key - Klucz API. Możesz go znaleźć w panelu użytkownika po zalogowaniu

  • Typ danych: ciąg znaków

bins - Tablica parametrów pojemników

  • Typ danych: tablica
  • Klucze tablicy:
    • id - ID pojemnika. Dzięki niemu będzie możliwa jego identyfikacja w wynikach pakowania

      • Typ danych: ciąg znaków
    • w - Szerokość pojemnika

      • Typ danych: integer lub float
    • h - Wysokość pojemnika

      • Typ danych: integer lub float
    • d - Głębokość pojemnika

      • Typ danych: integer lub float
    • cost - Koszt wysyłki pojemnika. Wartość ta jest wykorzystywana przy pakowaniu z parametrem "optimization_mode" ustawionym na "cost"

      • Typ danych: integer lub float
    • q - Maksymalna ilość pojemników o podanych wymiarach

      • Typ danych:
        • - brak ustawionego parametru lub o wartości NULL - oznacza, że liczba pojemników jest nieskończona
        • - integer (1,2,itd...) - oznacza, że tylko taka liczba pojemników jest dostępna
      • Typ danych: integer
    • max_wg - Maksymalna waga pojemnika. Wartość ustawiona na "0" (zero) oznacza, że nie ma limitu obciążenia

      • Typ danych: integer lub float
  • Przykład:
    {"bins":[{"w": "10","h": "10","d": "10","id": "bin1","max_wg": "0","q": null,"cost":1.3}]}

items - Tablica parametrów przedmiotów

  • Typ danych: tablica
  • Ograniczenia: Maxymalna łączna liczba przedmiotów na jeden request = 4999
  • Klucze tablicy:
    • id - ID przedmiotu. Dzięki niemu będzie możliwa jego identyfikacja w wynikach pakowania

      • Typ danych: ciąg znaków
    • w - Szerokość przedmiotu

      • Typ danych: integer lub float
    • h - Wysokość przedmiotu

      • Typ danych: integer lub float
    • d - Głębokość przedmiotu

      • Typ danych: integer lub float
    • wg - Waga przedmiotu

      • Typ danych: integer lub float
    • vr - vertical rotation. Informacja, czy dany przedmiot może być obracany w pionie

      • Typ danych: integer
      • Dopuszczalne wartości:
        • 1 [domyślnie] - oznacza, że przedmiot może być obracany w pionie
        • 0 - oznacza, że przedmiot nie może być obracany w pionie
    • q - Ilość przedmiotów tych wymiarów do zapakowania

      • Typ danych: integer
    • group - przedmoioty, którym została nadana ta sama grupa będą pakowane razem, co daje możliwość oddzielenia od siebie np. żywności (grupa "X") i chemii (grupa "Y").

      • Typ danych: ciąg znaków
    • separate - Odseparowanie przedmiotów
      ustawienie tego parametru na "1" oznacza, że dane przedmioty nie mogą być pakowane razem z innymi przedmiotami

      • Typ danych: integer
      • Dopuszczalne wartości:
        • 1 - oznacza, że przedmioty będą odseparowane
        • 0 [domyślnie] - oznacza, że przedmioty nie będą odseparowane
    • limit_per_bin - Określa jak wiele przedmiotów może być spakowanych do jednego pojemnika

      • Typ danych: integer
    • acceptable_bins - Określa, które pojemniki mogą zostać użyte do zapakowania przedmiotów. Jeżeli parametr nie jest ustawiony, wtedy wszystkie pojemniki będą użyte. Podane wartości muszą zawierać ID pojemników podanych w parametrze "bins".

      • Typ danych: tablica
    • item_colors_schema - określa, który schemat kolorów ma być użyty

      • Typ danych: ciąg znaków
      • Dopuszczalne wartości:
        • default - zostaną użyte kolory zdefiniiowane w sekcji 'params' (wartość domyślna)
        • item - zostaną użyte kolory z sekcji 'item'
        • random - losowe kolory zostaną wygenerowane przez system
    • item_fill_color - Kolor wypełnienia przedmiotu

      • Typ danych: ciąg znaków
      • Dopuszczalne wartości: Wartości kolorów RGB odseparowane przecinkami "czerowny,zielony,niebieski", wartości 0-255
      • Przykład: "255,120,10"
    • item_border_color - Kolor krawędzi przedmiotu

      • Typ danych: ciąg znaków
      • Dopuszczalne wartości: Wartości kolorów RGB odseparowane przecinkami "czerowny,zielony,niebieski", wartości 0-255
      • Przykład: "255,120,10"
  • Przykład:
    {"items": [{"w": 5, "h": 5,"d": 5,"q": 2,"vr": 1,"id": "ITEM - 1","wg": 0,"group": "A","separate":0,"limit_per_bin":2,"acceptable_bins":["Bin1","Bin2"]},{"w": 20,"h": 7,"d": 6,"q": 1,"vr": 1,"id": "ITEM - 2","wg": 0}]}

PARAMETRY OPCJONALNE

optimization_mode - określa sposób optymalizacji pakowania

  • Typ danych: ciąg znaków
  • Dopuszczalne wartości:
    • bins_number [domyślnie] - jak najmniejsza liczba pojemników
    • bins_utilization - jak najmniejsza ilość wolnej przestrzeni w pojemnikach
    • cost - najmniejszy koszt przesyłki lub transportu (wymaga podania parametru "cost" dla każdego z pojemników)

images_width - Maksymalna szerokość generowanych obrazków

  • Typ danych: integer
  • Dopuszczalne wartości: 1 -250

images_height - Maksymalna wysokość generowanych obrazków

  • Typ danych: integer
  • Dopuszczalne wartości: 1 -250

images_background_color - Kolor tła

  • Typ danych: ciąg znaków
  • Dopuszczalne wartości: Wartości kolorów RGB odseparowane przecinkami "czerowny,zielony,niebieski", wartości 0-255
  • Przykład: "255,120,10"

images_bin_border_color - Kolor krawędzi pojemnika

  • Typ danych: ciąg znaków
  • Dopuszczalne wartości: Wartości kolorów RGB odseparowane przecinkami "czerowny,zielony,niebieski", wartości 0-255
  • Przykład: "255,120,10"

images_bin_dashed_line_color - Kolor przedniej (przerywanej) krawędzi pojemnika

  • Typ danych: ciąg znaków
  • Dopuszczalne wartości: Wartości kolorów RGB odseparowane przecinkami "czerowny,zielony,niebieski", wartości 0-255
  • Przykład: "255,120,10"

images_bin_fill_color - Kolor wypełnienia pojemnika

  • Typ danych: ciąg znaków
  • Dopuszczalne wartości: Wartości kolorów RGB odseparowane przecinkami "czerowny,zielony,niebieski", wartości 0-255
  • Przykład: "255,120,10"

images_item_border_color - Kolor krawędzi przedmiotu

  • Typ danych: ciąg znaków
  • Dopuszczalne wartości: Wartości kolorów RGB odseparowane przecinkami "czerowny,zielony,niebieski", wartości 0-255
  • Przykład: "255,120,10"

images_sbs_last_item_fill_color - Kolor wypełnienia ostatniego przedmiotu na obrazku "krok po kroku"

  • Typ danych: ciąg znaków
  • Dopuszczalne wartości: Wartości kolorów RGB odseparowane przecinkami "czerowny,zielony,niebieski", wartości 0-255
  • Przykład: "255,120,10"

images_sbs_last_item_border_color - Kolor krawędzi ostatniego przedmiotu na obrazku "krok po kroku"

  • Typ danych: ciąg znaków
  • Dopuszczalne wartości: Wartości kolorów RGB odseparowane przecinkami "czerowny,zielony,niebieski", wartości 0-255
  • Przykład: "255,120,10"

images_format - Format plików zwracanych obrazków

  • Typ danych: ciąg znaków
  • Dopuszczalne wartości: [ png , svg ]

images_sbs - Generuj grafikę pakowania "krok po kroku"

  • Typ danych: integer
  • Dopuszczalne wartości:
    • 0 [domyślnie] - oznacza, że grafika "krok po kroku" nie będzie generowana
    • 1 - oznacza, że grafika "krok po kroku" będzie generowana

images_complete - Generuj grafikę przedstawiającą obrazek końcowy zapakowania

  • Typ danych: integer
  • Dopuszczalne wartości:
    • 0 [domyślnie] - oznacza, że grafika przedstawiającą obrazek końcowy zapakowania nie będzie generowana
    • 1 - oznacza, że grafika przedstawiającą obrazek końcowy zapakowania będzie generowana

images_separated - Generuj grafikę przedstawiającą umiejscowienie każdego przedmiotu osobno

  • Typ danych: integer
  • Dopuszczalne wartości:
    • 0 [domyślnie] - oznacza, że grafika nie będzie generowana
    • 1 - oznacza, że grafika będzie generowana

item_coordinates - Zwróć współrzędne (x, y, z) dla każdego z przedmiotów

  • Typ danych: integer
  • Dopuszczalne wartości:
    • 0 [domyślnie] - oznacza, że grafika nie będzie generowana
    • 1 - oznacza, że grafika będzie generowana

stats - Zwróć statystyki (np. czas generowania obrazków)

  • Typ danych: integer
  • Dopuszczalne wartości:
    • 0 [domyślnie] - oznacza, że statystyki nie będą zwrócone w odpowiedzi
    • 1 - oznacza, że statystyki będą zwrócone w odpowiedzi

Parametry odpowiedzi

bins_packed - Lista zapakowanych pojemników.

  • Typ danych: tablica

errors - Lista ewentualnych błędów, które wystąpiły w żądaniu

  • Typ danych: tablica
  • Przykład: [{'level'}]
  • Możliwe zwracane wartości:
    • "critical" - błąd krytyczny, uniemożliwiający pakowanie
    • "warning" - ostrzeżenie o nieprawidłowych danych w zapytaniu

status - Status odpowiedzi

  • Typ danych: integer
  • Możliwe zwracane wartości:
    • 1 - odpowiedź nie zawierała błędów krytycznych
    • 0 - odpowiedź zawierała błędy krytyczne
    * błąd krytyczny - błąd uniemożliwiający pakowanie. Może nim być brak któregoś z wymaganych parametrów ("username","api_key") lub niewłaściwa wartość parametru (np. pole, które powinno zawierać liczbę, zawiera string).

not_packed_items - Przedmoioty, które posiadały niewłaściwe parametry

  • Typ danych: tablica

response_time - Czas odpowiedzi serwera

  • Typ danych: float

Przykłady

Żądanie

{"bins":[{"w":5,"h":5,"d":5,"max_wg":0,"id":"Bin1"},{"w":3,"h":3,"d":3,"max_wg":0,"id":"Bin2"}],"items":[{"w":5,"h":3,"d":2,"q":2,"vr":1,"wg":0,"id":"Item1"},{"w":3,"h":3,"d":3,"q":3,"vr":1,"wg":0,"id":"Item2"}],"username":"YOUR_USERNAME","api_key":"YOUR_API_KEY","params":{"images_background_color":"255,255,255","images_bin_border_color":"59,59,59","images_bin_fill_color":"230,230,230","images_item_border_color":"214,79,79","images_item_fill_color":"177,14,14","images_item_back_border_color":"215,103,103","images_sbs_last_item_fill_color":"99,93,93","images_sbs_last_item_border_color":"145,133,133","images_width":100,"images_height":100,"images_source":"file","images_sbs":1,"stats":1,"item_coordinates":1,"images_complete":1,"images_separated":1}}

Odpowiedź

{"response":{"bins_packed":[{"bin_data":{"w":5,"h":5,"d":5,"id":"Bin1","used_space":69.6,"weight":0,"used_weight":100},"image_complete":"...image_data...","images_generation_time":0.006,"packing_time":0.02697,"items":[{"id":"Item1","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"0","y1":"0","z1":"0","x2":3,"y2":5,"z2":2}},{"id":"Item2","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"0","y1":"0","z1":"2","x2":3,"y2":3,"z2":5}},{"id":"Item1","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"3","y1":"0","z1":"0","x2":5,"y2":5,"z2":3}}]},{"bin_data":{"w":3,"h":3,"d":3,"id":"Bin2","used_space":100},"image_complete":"...image_data...","images_generation_time":0.00269,"packing_time":0.02467,"items":[{"id":"Item2","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"0","y1":"0","z1":"0","x2":3,"y2":3,"z2":3}}]},{"bin_data":{"w":3,"h":3,"d":3,"id":"Bin2","used_space":100,"weight":0,"used_weight":100},"image_complete":"...image_data...","images_generation_time":0.00259,"packing_time":0.0252,"items":[{"id":"Item2","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"0","y1":"0","z1":"0","x2":3,"y2":3,"z2":3}}]}],"errors":[],"status":1,"not_packed_items":[],"response_time":0.09721}}

Żądanie

curl -X POST \
-H "Content-Type: application/json" \
-d '{"bins": [{"w": 5, "h": 5, "d": 5, "max_wg": 0, "id": "Bin1"},{"w": 3, "h": 3, "d": 3, "max_wg": 0, "id": "Bin2"}], "items": [{"w": 5, "h": 3, "d": 2, "q": 2, "vr": 1, "wg": 0, "id": "Item1"},{"w": 3, "h": 3, "d": 3, "q": 3, "vr": 1, "wg": 0, "id": "Item2"}], "username": "YOUR_USERNAME", "api_key": "YOUR_API_KEY", "params": {"images_background_color": "255,255,255", "images_bin_border_color": "59,59,59", "images_bin_fill_color": "230,230,230", "images_item_border_color": "214,79,79", "images_item_fill_color": "177,14,14", "images_item_back_border_color": "215,103,103", "images_sbs_last_item_fill_color": "99,93,93", "images_sbs_last_item_border_color": "145,133,133", "images_width": 100, "images_height": 100, "images_source": "file", "images_sbs": 1, "stats": 1, "item_coordinates": 1, "images_complete": 1, "images_separated": 1}}' \
https://eu.api.3dbinpacking.com/packer/packIntoMany \
-k
                        

Odpowiedź

{"response": {"bins_packed": [{"bin_data": {"w": 5, "h": 5, "d": 5, "id": "Bin1", "used_space": 69.6, "weight": 0, "used_weight": 100}, "image_complete": "...image_data...", "images_generation_time": 0.006, "packing_time": 0.02697, "items": [{"id": "Item1", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "0", "y1": "0", "z1": "0", "x2": 3, "y2": 5, "z2": 2}},{"id": "Item2", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "0", "y1": "0", "z1": "2", "x2": 3, "y2": 3, "z2": 5}},{"id": "Item1", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "3", "y1": "0", "z1": "0", "x2": 5, "y2": 5, "z2": 3}}]},{"bin_data": {"w": 3, "h": 3, "d": 3, "id": "Bin2", "used_space": 100}, "image_complete": "...image_data...", "images_generation_time": 0.00269, "packing_time": 0.02467, "items": [{"id": "Item2", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "0", "y1": "0", "z1": "0", "x2": 3, "y2": 3, "z2": 3}}]},{"bin_data": {"w": 3, "h": 3, "d": 3, "id": "Bin2", "used_space": 100, "weight": 0, "used_weight": 100}, "image_complete": "...image_data...", "images_generation_time": 0.00259, "packing_time": 0.0252, "items": [{"id": "Item2", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "0", "y1": "0", "z1": "0", "x2": 3, "y2": 3, "z2": 3}}]}], "errors": [], "status": 1, "not_packed_items": [], "response_time": 0.09721}}
                        $data = array(
                                    'bins' => array(
                                                    array(
                                                            'w' => '5', 
                                                            'h' => '5', 
                                                            'd' => '5', 
                                                            'max_wg' => '0', 
                                                            'id' => 'Bin1' 
                                                        ), 
                                                    array(
                                                            'w' => '3', 
                                                            'h' => '3', 
                                                            'd' => '3', 
                                                            'max_wg' => '0', 
                                                            'id' => 'Bin2' 
                                                        ) 
                                                ),
                                    'items' => array(
                                                    array(
                                                            'w' => '5', 
                                                            'h' => '3', 
                                                            'd' => '2', 
                                                            'q' => '2', 
                                                            'vr' => '1', 
                                                            'wg' => '0', 
                                                            'id' => 'Item1' 
                                                        ), 
                                                    array(
                                                            'w' => '3', 
                                                            'h' => '3', 
                                                            'd' => '3', 
                                                            'q' => '3', 
                                                            'vr' => '1', 
                                                            'wg' => '0', 
                                                            'id' => 'Item2' 
                                                        ) 
                                                ),
                                    'username' => 'YOUR_USERNAME', 
                                    'api_key' => 'YOUR_API_KEY',
                                    'params' => array(
                                                    'images_background_color' => '255,255,255', 
                                                    'images_bin_border_color' => '59,59,59', 
                                                    'images_bin_fill_color' => '230,230,230', 
                                                    'images_item_border_color' => '214,79,79', 
                                                    'images_item_fill_color' => '177,14,14', 
                                                    'images_item_back_border_color' => '215,103,103', 
                                                    'images_sbs_last_item_fill_color' => '99,93,93', 
                                                    'images_sbs_last_item_border_color' => '145,133,133', 
                                                    'images_width' => '100', 
                                                    'images_height' => '100', 
                                                    'images_source' => 'file', 
                                                    'images_sbs' => '1', 
                                                    'stats' => '1', 
                                                    'item_coordinates' => '1', 
                                                    'images_complete' => '1', 
                                                    'images_separated' => '1' 
                                                )
                        );
                        $query = json_encode($data);
                        
                        $url = "http://eu.api.3dbinpacking.com/packer/packIntoMany";
                        $prepared_query = 'query='.$query;
                        $ch = curl_init($url);
                        curl_setopt( $ch, CURLOPT_POST, true );
                        curl_setopt( $ch, CURLOPT_POSTFIELDS, $prepared_query );
                        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
                        curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
                        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
                        $resp = curl_exec($ch);
                        if (curl_errno($ch)) {
                            echo 'Error #' . curl_errno($ch) . ': ' . curl_error($ch).'<br>';
                        }
                        curl_close($ch);

                        $response = json_decode($resp,true);
                        // display errors
                        if(isset($response['response']['errors'])){
                          foreach($response['response']['errors'] as $error){
                            echo $error['message'].'<br>';
                          }
                        }
                        // display data
                        if( $response['response']['status'] > -1 ){
                          $b_packed= $response['response']['bins_packed'];
                          foreach ($b_packed as $bin){
                              echo "<h2>Bin id:{$bin['bin_data']['id']}</h2> 
                                <p> {$bin['bin_data']['w']} x {$bin['bin_data']['h']} x {$bin['bin_data']['d']}</p>
                                <p> Weight:{$bin['bin_data']['weight']}</p>
                                <p> Used weight:{ $bin['bin_data']['used_weight'] }</p>  
                                <img src=\"{$bin['image_complete']}\">
                                <h2>Items packed in this bin:</h2>";
                              $items = $bin['items'];
                              echo '<table style="text-align: center">
                                <tr><th>Item id</th>
                                    <th>Item dimensions</th>
                                    <th>Item weight</th>
                                    <th>Separated item</th>
                                    <th>Step by step</th></tr>';
                              foreach ( $items as $item){
                              echo "<tr><td>{$item['id']}</td>       
                                        <td> {$item['w']} x {$item['h']} x {$bin['bin_data']['d']}</td>
                                        <td> {$item['wg']}</td>
                                        <td><img src=\"{$item['image_separated']}\"></td>
                                        <td><img src=\"{$item['image_sbs']}\"></td>
                                    </tr>";
                              }    
                              echo '</table>';
                              echo '<hr>'; 

                          }
                        }
                        
                        #!/usr/bin/python
 
                        import httplib
                        import urllib
                        import json

                        conn = httplib.HTTPConnection(host='eu.api.3dbinpacking.com', port=80)
                        data = {"bins": [{"w": 5, "h": 5, "d": 5, "max_wg": 0, "id": "Bin1"},{"w": 3, "h": 3, "d": 3, "max_wg": 0, "id": "Bin2"}], "items": [{"w": 5, "h": 3, "d": 2, "q": 2, "vr": 1, "wg": 0, "id": "Item1"},{"w": 3, "h": 3, "d": 3, "q": 3, "vr": 1, "wg": 0, "id": "Item2"}], "username": "YOUR_USERNAME", "api_key": "YOUR_API_KEY", "params": {"images_background_color": "255,255,255", "images_bin_border_color": "59,59,59", "images_bin_fill_color": "230,230,230", "images_item_border_color": "214,79,79", "images_item_fill_color": "177,14,14", "images_item_back_border_color": "215,103,103", "images_sbs_last_item_fill_color": "99,93,93", "images_sbs_last_item_border_color": "145,133,133", "images_width": 100, "images_height": 100, "images_source": "file", "images_sbs": 1, "stats": 1, "item_coordinates": 1, "images_complete": 1, "images_separated": 1}}

                        params =  urllib.urlencode( {'query':json.dumps(data)} )
                        headers = {"Content-type": "application/x-www-form-urlencoded", 
                            "Accept": "text/plain"}
                        conn.request( "POST", "/packer/packIntoMany", params, headers )
                        content = conn.getresponse( ).read( )
                        conn.close( )
                        print content
                        
                        package javaapplication1;
 
                        import java.io.BufferedReader;
                        import java.io.IOException;
                        import java.io.InputStreamReader;
                        import java.io.OutputStreamWriter;
                        import java.net.HttpURLConnection;
                        import java.net.MalformedURLException;
                        import java.net.ProtocolException;
                        import java.net.URL;
                        import java.util.ArrayList;
                        import java.util.HashMap;
                        import java.util.List;
                        import java.util.Map;;
                        import org.json.simple.JSONObject;
                        import org.springframework.web.client.RestTemplate;

                        public class JavaApplication1 {

                            /**
                             * @param args the command line arguments
                             */
                            public static void main(String[] args) throws MalformedURLException, ProtocolException, IOException {
                                RestTemplate restTemplate = new RestTemplate();
                                JSONObject json = new JSONObject();

                                //SET BINS
                                List<Map<String , String>> bins  = new ArrayList<Map<String,String>>();

                                Map<String, String> bin1 = new HashMap<String, String>();
                                bin1.put("w", "5");
                                bin1.put("h", "5");
                                bin1.put("d", "5");
                                bin1.put("max_wg", "0");
                                bin1.put("id", "Bin1");
                                bins.add(bin1);
                                Map<String, String> bin2 = new HashMap<String, String>();
                                bin2.put("w", "3");
                                bin2.put("h", "3");
                                bin2.put("d", "3");
                                bin2.put("max_wg", "0");
                                bin2.put("id", "Bin2");
                                bins.add(bin2);
                                
                                //SET ITEMS
                                List<Map<String , String>> items  = new ArrayList<Map<String,String>>();
                                Map<String, String> item1 = new HashMap<String, String>();
                                item1.put("w", "5");
                                item1.put("h", "3");
                                item1.put("d", "2");
                                item1.put("q", "2");
                                item1.put("vr", "1");
                                item1.put("wg", "0");
                                item1.put("id", "Item1");
                                items.add(item1);
                                Map<String, String> item2 = new HashMap<String, String>();
                                item2.put("w", "3");
                                item2.put("h", "3");
                                item2.put("d", "3");
                                item2.put("q", "3");
                                item2.put("vr", "1");
                                item2.put("wg", "0");
                                item2.put("id", "Item2");
                                items.add(item2);
                                
                                //SET PARAMETERS
                                Map <String , String > params  = new HashMap <String , String >();
                                params.put("images_background_color", "255,255,255")
                                params.put("images_bin_border_color", "59,59,59")
                                params.put("images_bin_fill_color", "230,230,230")
                                params.put("images_item_border_color", "214,79,79")
                                params.put("images_item_fill_color", "177,14,14")
                                params.put("images_item_back_border_color", "215,103,103")
                                params.put("images_sbs_last_item_fill_color", "99,93,93")
                                params.put("images_sbs_last_item_border_color", "145,133,133")
                                params.put("images_width", "100")
                                params.put("images_height", "100")
                                params.put("images_source", "file")
                                params.put("images_sbs", "1")
                                params.put("stats", "1")
                                params.put("item_coordinates", "1")
                                params.put("images_complete", "1")
                                params.put("images_separated", "1")
                                
                                //ADD ELEMENTS TO JSON
                                json.put("username", "YOUR_USERNAME");
                                json.put("api_key", "YOUR_API_KEY");
                                json.put("items", items);
                                json.put("bins", bins);
                                json.put("params", params);

                                //CALL QUERY
                                HttpURLConnection conn;
                                URL addr = new URL("http://eu.api.3dbinpacking.com/packer/packIntoMany");
                                conn = (HttpURLConnection) addr.openConnection();
                                conn.setRequestMethod("POST");
                                conn.setDoOutput(true);
                                conn.connect();
                                OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());

                                // prepare POST body 
                                String query = "query=" + json.toString();

                                osw.write(query);
                                osw.flush();
                                osw.close();

                                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                                String response_json = br.readLine();

                                //DO SOMETHING COOL WITH THE RESPONSE
                                System.out.println(response_json);
                            }
                        }
                        
                        string data;
                        System.Net.HttpWebRequest req = System.Net.WebRequest.Create("https://eu.api.3dbinpacking.com/packer/packIntoMany") as System.Net.HttpWebRequest;

                        var request_data = new {username = "YOUR_USERNAME",
                                                api_key = "YOUR_API_KEY",
                                                items = new[] {
                                                                new { w = "5", h = "3", d = "2", q = "2", vr = "1", wg = "0", id = "Item1"}, 
                                                                new { w = "3", h = "3", d = "3", q = "3", vr = "1", wg = "0", id = "Item2"} 
                                                                },
                                                bins = new[] { 
                                                                new { w = "5", h = "5", d = "5", max_wg = "0", id = "Bin1"},
                                                                new { w = "3", h = "3", d = "3", max_wg = "0", id = "Bin2"}
                                                                },
                                                @params = new { images_background_color = "255,255,255", 
                                                               images_bin_border_color = "59,59,59", 
                                                               images_bin_fill_color = "230,230,230", 
                                                               images_item_border_color = "214,79,79", 
                                                               images_item_fill_color = "177,14,14", 
                                                               images_item_back_border_color = "215,103,103", 
                                                               images_sbs_last_item_fill_color = "99,93,93", 
                                                               images_sbs_last_item_border_color = "145,133,133", 
                                                               images_width = "100", 
                                                               images_height = "100", 
                                                               images_source = "file", 
                                                               images_sbs = "1", 
                                                               stats = "1", 
                                                               item_coordinates = "1", 
                                                               images_complete = "1", 
                                                               images_separated = "1"
                                                               }
                                            };

                        string json_str = JsonConvert.SerializeObject(request_data);

                        string queryParam = "query="+json_str;

                        byte[] postBytes = System.Text.Encoding.ASCII.GetBytes(queryParam);
                        req.Method = "POST";
                        req.ContentType = "application/x-www-form-urlencoded";
                        req.ContentLength = postBytes.Length;

                        System.IO.Stream postStream = req.GetRequestStream();
                        postStream.Write(postBytes, 0, postBytes.Length);
                        postStream.Close();

                        X509Certificate Cert = X509Certificate2.CreateFromCertFile("path_to_pem_key\eu.api.3dbinpacking.com.pem");
                        req.ClientCertificates.Add(Cert);

                        using (System.Net.HttpWebResponse response = req.GetResponse() as System.Net.HttpWebResponse)
                        {
                            System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream());
                            data = reader.ReadToEnd();
                        }