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.

Dopasowywanie Pojemnika

Opis działania

Algorytm ten umożliwia znalezienie rozmiaru pojemnika dla podanych przedmiotów.

Przykłady zastosowania algorytmu

Przykład 1:

Opakowanie własne - wariant 1 (bez ograniczania max. wymiaru)

Sklep internetowy posiada własną maszynę do tworzenia opakowań o wybranych wymiarach. W celu jej zaprogramowania należy obliczyć wymiary opakowania dla danego zamówienia.

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

przestrzeń w pojemniku
o wymiarach
?

Przedmioty do zapakowania:

Wymiary: 10x10x10
Ilość: 8

3DBinPacking wykonuje kalkulację wymiaru opakowania dla podanych przedmiotów i zwraca następujący wynik:

20x20x20

Zapakowano wszystkie 8 przedmiotów
Obliczony wymiar potrzebnego pojemnika: 20x20x20


Przykład 2:

Opakowanie własne - wariant 2 (z ograniczaniem max. wymiaru)

Sklep internetowy posiada własną maszynę do tworzenia opakowań o wybranych wymiarach. W celu jej zaprogramowania należy obliczyć wymiary opakowania dla danego zamówienia.

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

przestrzeń w pojemniku
o wymiarach max: 20x15x20

Przedmioty do zapakowania:

Wymiary: 10x10x10
Ilość: 8

3DBinPacking wykonuje kalkulację wymiaru opakowania dla podanych przedmiotów i zwraca następujący wynik:

20x10x20

Zapakowano 4 przedmioty
Obliczony wymiar potrzebnego pojemnika: 20x10x20

4 przedmioty niezapakowane (zbyt mała pojemność pojemnika)

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

Dopasowywanie Pojemnika

Pojemnik

Id
Szer
Wys
Głęb

Przedmioty

Id
Szer
Wys
Głęb
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/findBinSize - USA (Virginia)
  • eu.api.3dbinpacking.com/packer/findBinSize - Europa (Irlandia)
  • asia1.api.3dbinpacking.com/packer/findBinSize - Asia Pacific (Singapore)
  • global-api.3dbinpacking.com/packer/findBinSize - 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/findBinSize?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
  • Przykład:
    {"bins":[{"w": "10","h": "10","d": "10","id": "bin1"}]}

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
    • 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
    • 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"},{"w": 20,"h": 7,"d": 6,"q": 1,"vr": 1,"id": "ITEM - 2"}]}

PARAMETRY OPCJONALNE

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":0,"h":0,"d":0,"id":"Bin1"}],"items":[{"w":5,"h":3,"d":2,"q":2,"vr":1,"id":"Item1"},{"w":3,"h":3,"d":3,"q":3,"vr":1,"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":6,"d":6,"id":"Bin1","used_space":78.3333},"image_complete":"...image_data...","images_generation_time":0.02894,"packing_time":0.09116,"items":[{"id":"Item1","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"0","y1":"0","z1":"0","x2":2,"y2":5,"z2":3}},{"id":"Item1","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"0","y1":"5","z1":"0","x2":2,"y2":8,"z2":5}},{"id":"Item2","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"2","y1":"0","z1":"0","x2":5,"y2":3,"z2":3}},{"id":"Item2","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"2","y1":"3","z1":"0","x2":5,"y2":6,"z2":3}},{"id":"Item2","image_searated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"2","y1":"6","z1":"0","x2":5,"y2":9,"z2":3}}],"not_packed_items":[]},{"bin_data":{"w":3,"h":18,"d":3,"id":1,"used_space":70.3704},"image_complete":"...image_data...","images_generation_time":0.00363,"packing_time":0.08667,"items":[{"id":0,"image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"0","y1":"0","z1":"0","x2":2,"y2":5,"z2":3}},{"id":0,"image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"0","y1":"5","z1":"0","x2":2,"y2":10,"z2":3}},{"id":"1","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"0","y1":"10","z1":"0","x2":3,"y2":13,"z2":3}},{"id":"1","image_separated":"...image_data...","image_sbs":"...image_data...","coordinates":{"x1":"0","y1":"13","z1":"0","x2":3,"y2":16,"z2":3}}],"not_packed_items":[{"id":"1","q":1}]}],"errors":[],"status":1,"not_packed_items":[],"response_time":0.22307}}

Żądanie

curl -X POST \
-H "Content-Type: application/json" \
-d '{"bins": [{"w": 0, "h": 0, "d": 0, "id": "Bin1"}], "items": [{"w": 5, "h": 3, "d": 2, "q": 2, "vr": 1, "id": "Item1"},{"w": 3, "h": 3, "d": 3, "q": 3, "vr": 1, "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/findBinSize \
-k
                        

Odpowiedź

{"response": {"bins_packed": [{"bin_data": {"w": 5, "h": 6, "d": 6, "id": "Bin1", "used_space": 78.3333}, "image_complete": "...image_data...", "images_generation_time": 0.02894, "packing_time": 0.09116, "items": [{"id": "Item1", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "0", "y1": "0", "z1": "0", "x2": 2, "y2": 5, "z2": 3}},{"id": "Item1", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "0", "y1": "5", "z1": "0", "x2": 2, "y2": 8, "z2": 5}},{"id": "Item2", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "2", "y1": "0", "z1": "0", "x2": 5, "y2": 3, "z2": 3}},{"id": "Item2", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "2", "y1": "3", "z1": "0", "x2": 5, "y2": 6, "z2": 3}},{"id": "Item2", "image_searated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "2", "y1": "6", "z1": "0", "x2": 5, "y2": 9, "z2": 3}}], "not_packed_items": []},{"bin_data": {"w": 3, "h": 18, "d": 3, "id": 1, "used_space": 70.3704}, "image_complete": "...image_data...", "images_generation_time": 0.00363, "packing_time": 0.08667, "items": [{"id": 0, "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "0", "y1": "0", "z1": "0", "x2": 2, "y2": 5, "z2": 3}},{"id": 0, "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "0", "y1": "5", "z1": "0", "x2": 2, "y2": 10, "z2": 3}},{"id": "1", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "0", "y1": "10", "z1": "0", "x2": 3, "y2": 13, "z2": 3}},{"id": "1", "image_separated": "...image_data...", "image_sbs": "...image_data...", "coordinates": {"x1": "0", "y1": "13", "z1": "0", "x2": 3, "y2": 16, "z2": 3}}], "not_packed_items": [{"id": "1", "q": 1}]}], "errors": [], "status": 1, "not_packed_items": [], "response_time": 0.22307}}
                        $data = array(
                                    'bins' => array(
                                                    array(
                                                            'w' => '0', 
                                                            'h' => '0', 
                                                            'd' => '0', 
                                                            'id' => 'Bin1' 
                                                        ) 
                                                ),
                                    'items' => array(
                                                    array(
                                                            'w' => '5', 
                                                            'h' => '3', 
                                                            'd' => '2', 
                                                            'q' => '2', 
                                                            'vr' => '1', 
                                                            'id' => 'Item1' 
                                                        ), 
                                                    array(
                                                            'w' => '3', 
                                                            'h' => '3', 
                                                            'd' => '3', 
                                                            'q' => '3', 
                                                            'vr' => '1', 
                                                            '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/findBinSize";
                        $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": 0, "h": 0, "d": 0, "id": "Bin1"}], "items": [{"w": 5, "h": 3, "d": 2, "q": 2, "vr": 1, "id": "Item1"},{"w": 3, "h": 3, "d": 3, "q": 3, "vr": 1, "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/findBinSize", 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", "0");
                                bin1.put("h", "0");
                                bin1.put("d", "0");
                                bin1.put("id", "Bin1");
                                bins.add(bin1);
                                
                                //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("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("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/findBinSize");
                                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/findBinSize") 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", id = "Item1"}, 
                                                                new { w = "3", h = "3", d = "3", q = "3", vr = "1", id = "Item2"} 
                                                                },
                                                bins = new[] { 
                                                                new { w = "0", h = "0", d = "0", id = "Bin1"}
                                                                },
                                                @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();
                        }