1 package com.neuronrobotics.bowlerstudio.printbed;
3 import java.io.BufferedWriter;
5 import java.io.FileWriter;
6 import java.io.IOException;
7 import java.lang.reflect.Type;
8 import java.nio.file.Files;
9 import java.util.ArrayList;
10 import java.util.Arrays;
11 import java.util.HashMap;
12 import java.util.HashSet;
13 import java.util.List;
15 import org.apache.commons.io.FileUtils;
16 import org.eclipse.jgit.api.errors.GitAPIException;
17 import org.eclipse.jgit.api.errors.InvalidRemoteException;
18 import org.eclipse.jgit.api.errors.TransportException;
20 import com.google.gson.Gson;
21 import com.google.gson.GsonBuilder;
22 import com.google.gson.reflect.TypeToken;
23 import com.neuronrobotics.bowlerstudio.creature.UserManagedPrintBedData;
24 import com.neuronrobotics.bowlerstudio.physics.TransformFactory;
25 import com.neuronrobotics.bowlerstudio.scripting.ScriptingEngine;
26 import com.neuronrobotics.sdk.addons.kinematics.math.TransformNR;
28 import eu.mihosoft.vrl.v3d.CSG;
29 import eu.mihosoft.vrl.v3d.Cube;
30 import eu.mihosoft.vrl.v3d.Transform;
31 import javafx.scene.paint.Color;
36 Type type =
new TypeToken<UserManagedPrintBedData>() {
38 Gson gson =
new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create();
39 public static String
file =
"printbed.json";
40 List<Color> colors = Arrays.asList(Color.WHITE, Color.GREY, Color.BLUE, Color.TAN);
42 HashMap<Integer, CSG> bedReps =
new HashMap<Integer, CSG>();
43 ArrayList<PrintBedObject> objects =
new ArrayList<PrintBedObject>();
45 private HashSet<String>
names =
new HashSet<String>();
57 }
catch (IOException e) {
63 public boolean init(File dir, ArrayList<CSG>
parts) {
67 File f =
new File(dir.getAbsolutePath() +
"/" +
file);
68 System.out.println(
"Searching for printbed at "+f);
70 System.out.println(
"Print Bed file found! "+f.getAbsolutePath());
74 bytes = Files.readAllBytes(f.toPath());
75 source =
new String(bytes,
"UTF-8");
76 database = gson.fromJson(source, type);
77 }
catch (Exception ex) {
82 System.out.println(
"Print Bed NOT file found! "+f.getAbsolutePath());
91 int index = bit.getPrintBedIndex();
92 int colorIndex = index % 4;
93 double zrot = -90 * (index);
94 double yval = index > 4 ?
database.
bedX * (index - 4) : 0;
98 bed.
setColor(colors.get(colorIndex));
99 bedReps.put(index, bed);
103 if (prepedBit !=
null && name.length() > 0) {
104 if(
names.contains(name))
107 System.out.println(bit.getName() +
" on " + index +
" rot " + zrot +
" y " + yval);
126 HashMap<Integer, ArrayList<CSG>> beds =
new HashMap<>();
129 ArrayList<String> formats = bit.getExportFormats();
130 String name = bit.getName();
131 int index = bit.getPrintBedIndex();
132 bit = bit.prepForManufacturing();
133 if (bit !=
null && name.length()>0) {
134 if(
names.contains(name))
139 if (beds.get(index) ==
null) {
140 beds.put(index,
new ArrayList<CSG>());
143 if (location !=
null) {
145 bit = bit.transformed(csfMove);
148 for (String s : formats)
149 bit.addExportFormat(s);
151 beds.get(index).add(bit);
154 ArrayList<CSG> bedsOutputs =
new ArrayList<CSG>();
155 for (Integer i : beds.keySet()) {
156 String name =
"Print-Bed-" + i;
157 ArrayList<CSG> bedComps = beds.get(i);
159 for (
CSG p : bedComps) {
168 for (String s : formats)
180 bedsOutputs.add(bed);
186 public ArrayList<CSG>
get() {
187 ArrayList<CSG> back =
new ArrayList<>();
188 for (
CSG c : bedReps.values()) {
192 back.addAll(pbo.get());
198 String content = gson.toJson(
database);
203 }
catch (Exception e) {
209 throws InvalidRemoteException, TransportException, GitAPIException, IOException {
214 BufferedWriter writer =
new BufferedWriter(
new FileWriter(f.getAbsolutePath()));
215 writer.write(content);
HashMap< String, TransformNR > locations
UserManagedPrintBedData database
ArrayList< CSG > makePrintBeds()
boolean init(File dir, ArrayList< CSG > parts)
PrintBedManager(File dir, ArrayList< CSG > parts)
void setHasPrintBed(boolean hasPrintBed)
PrintBedManager(String url, ArrayList< CSG > parts)
synchronized void saveLocal()
void write(String file, String content)
void addSaveListener(Runnable r)
static String locateGitUrl(File f)
static File fileFromGit(String remoteURI, String fileInRepo)
static File getRepositoryCloneDirectory(String remoteURI)
void addExportFormat(String exportFormat)
CSG rotz(Number degreesToRotate)
CSG prepForManufacturing()
CSG movey(Number howFarToMove)
CSG setManufacturing(PrepForManufacturing manufactuing)
ArrayList< String > getExportFormats()
CSG setColor(Color color)