one.empty3.feature.ClassSchemaBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of empty3-library-3d Show documentation
Show all versions of empty3-library-3d Show documentation
3D rendering engine. Plus modeling. Expected glsl textures 3d and 2d rendering
/*
* Copyright (c) 2022-2023. Manuel Daniel Dahmen
*
*
* Copyright 2012-2023 Manuel Daniel Dahmen
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package one.empty3.feature;
import net.miginfocom.swing.MigLayout;
import one.empty3.feature.facemorph.RunFeatures;
import one.empty3.feature.gui.LiveEffect;
import one.empty3.feature.histograms.Hist4Contour;
import one.empty3.feature.histograms.Histogram;
import one.empty3.feature.histograms.Histogram1;
import one.empty3.feature.selection.HighlightFeatures;
import one.empty3.feature.tryocr.ReadLines;
import one.empty3.feature.tryocr.SelectColor;
import one.empty3.io.ProcessFile;
import one.empty3.io.ProcessNFiles;
import one.empty3.library.Point2D;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.*;
import java.util.function.Consumer;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
* @author Manuel Dahmen
*/
public class ClassSchemaBuilder extends JFrame implements Serializable {
private static UUID uuid = UUID.randomUUID();
private int idFrame = 0;
public boolean processed = false;
private PartElement selectedPart;
private String directory = ".";
private boolean selectAndClickClass = false;
public List files = new ArrayList<>();
private boolean selectedActionDeleteClass = false;
private boolean selectedActionDeleteLink = false;
private boolean selectsAddLink = false;
private LiveEffect liveEffect;
private boolean cam;
private int maxRes = 0;
private String fileChooserDir = ".";
public String tempDir = "temp";
private File fileOut;
private TreeDiagram treeDiagram;
private File webcamFile;
public void setWebcamFile() {
this.webcamFile = new File(tempDir + File.separator + getUuid() +"_"+(this.idFrame++)+"_"+"webcam.jpg");
}
public File getWebcamFile() {
return webcamFile;
}
public DiagramElement getSelectedElement() {
return selectedElement;
}
public class DiagramElement implements Serializable {
protected int x = getWidth() / 2;
protected int y = getHeight() / 2;
protected String label = "DIAGRAM ELEMENT";
public DiagramElement() {
}
public void moveTo(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
@Override
public String toString() {
return "DiagramElement{" +
"x=" + x +
", y=" + y +
", label='" + label + '\'' +
'}';
}
}
class ListFilesElement extends DiagramElement {
File[] files;
public File[] getFiles() {
return files;
}
public void setFiles(File[] files) {
this.files = files;
}
@Override
public String toString() {
return "ListFilesElement{" +
"files=" + (files==null?"":Arrays.toString(files)) +
", x=" + x +
", y=" + y +
", label='" + label + '\'' +
'}';
}
}
private DiagramElement selectedElement;
private ClassElement selectedClassElement;
private Then selectedArrow;
class PartElement extends DiagramElement {
DiagramElement referenceElement;
DiagramElement element;//Nature de l'élément.
int x, y;
String label = "";
public DiagramElement getReferenceElement() {
return referenceElement;
}
public void setReferenceElement(DiagramElement referenceElement) {
this.referenceElement = referenceElement;
}
public DiagramElement getElement() {
return element;
}
public void setElement(DiagramElement element) {
this.element = element;
}
@Override
public int getX() {
return x;
}
@Override
public void setX(int x) {
this.x = x;
}
@Override
public int getY() {
return y;
}
@Override
public void setY(int y) {
this.y = y;
}
@Override
public String getLabel() {
return label;
}
@Override
public void setLabel(String label) {
this.label = label;
}
@Override
public String toString() {
return "PartElement{" +
"referenceElement=" + referenceElement +
", element=" + element +
", x=" + x +
", y=" + y +
", label='" + label + '\'' +
", x=" + x +
", y=" + y +
", label='" + label + '\'' +
'}';
}
}
class ClassElement extends DiagramElement {
protected Class theClass;
protected PartElement partAfter;
protected File[] files = new File[] {new File(".")};
protected String tmpFilename = tempDir+
File.separator+"temp-"+ getUuid() +".jpg";
private ProcessFile instance;
public ClassElement() {
x = getWidth() / 2;
y = getHeight() / 2;
partAfter = new PartElement();
partAfter.setReferenceElement(this);
partElements.add(partAfter);
}
public Class getTheClass() {
return theClass;
}
public void setTheClass(Class theClass) {
this.theClass = theClass;
}
public PartElement getPartAfter() {
return partAfter;
}
public void setPartAfter(PartElement partAfter) {
this.partAfter = partAfter;
}
public void setInputFiles(File[] filesP) {
this.files = filesP;
}
@Override
public String toString() {
return "ClassElement{" +
"theClass=" + theClass +
", partAfter=" + partAfter +
", files=" + (files==null?"":Arrays.toString(files)) +
", tmpFilename='" + tmpFilename + '\'' +
", x=" + x +
", y=" + y +
", label='" + label + '\'' +
'}';
}
public ProcessFile getInstance() {
if(instance==null) {
try {
instance = (ProcessFile) theClass
.getDeclaredConstructor().newInstance();
} catch (InstantiationException | IllegalAccessException | InvocationTargetException |
NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
return instance;
}
}
class ClassMultiInputElement extends ClassElement {
@Override
public String toString() {
return super.toString();
}
}
class Then extends DiagramElement {
ClassElement a, b;
public Then() {
x = getWidth() / 2;
y = getHeight() / 2;
}
public ClassElement getA() {
return a;
}
public void setA(ClassElement a) {
this.a = a;
}
public ClassElement getB() {
return b;
}
public void setB(ClassElement b) {
this.b = b;
}
@Override
public String toString() {
return "Then{" +
"x=" + x +
", y=" + y +
", label='" + label + '\'' +
", a=" + a +
", b=" + b +
'}';
}
}
private List diagramElements = new ArrayList();
private List partElements = new ArrayList();
ArrayList listProcessClasses = new ArrayList<>();
public ClassSchemaBuilder() {
initComponents();
addMouseMotionListener(new MouseMotionAdapter() {
private Point point;
private DiagramElement element;
private Point source;
private boolean isMouseDragged = false;
@Override
public void mouseDragged(MouseEvent e) {
if (!isMouseDragged && e.getButton() == 0 && (selectedElement == selectFromPoint(e.getX(), e.getY())
|| (selectedPart == selectPartFromPoint(e.getX(), e.getY()) || selectedPart == null))
) {
source = e.getPoint();
element = selectFromPoint(source.x, source.y);
if (element != null) {
labelStatus.setText("Drag element: " + element.label);
selectedElement = element;
}
}
point = e.getPoint();
if (!isMouseDragged && e.getButton() == 0)
isMouseDragged = true;
}
@Override
public void mouseMoved(MouseEvent e) {
if (isMouseDragged && element != null && point != null && e.getButton() == 0) {
element.moveTo(point.x, point.y);
PartElement partElement = selectPartFromPoint(e.getX(), e.getY());
isMouseDragged = false;
element = null;
}
isMouseDragged = false;
}
});
addMouseListener(new MouseListener() {
private static final int ADD_1 = 1;
private static final int ADD_2 = 2;
private int currentAction = 0;
@Override
public void mouseClicked(MouseEvent e) {
try {
if (selectAndClickClass) {
DiagramElement diagramElement = selectFromPoint(e.getX(), e.getY());
if (diagramElement instanceof ClassElement) {
((ClassElement) diagramElement).setInputFiles(files.get(files.size() - 1));
}
selectAndClickClass = false;
} else if (selectedActionDeleteClass) {
DiagramElement diagramElement = selectFromPoint(e.getX(), e.getY());
partElements.remove(((ClassElement) diagramElement).partAfter);
((ClassElement) diagramElement).partAfter = new PartElement();
diagramElements.remove(diagramElement);
buttonDeleteClass.setSelected(false);
selectedActionDeleteClass = false;
} else if (selectedActionDeleteLink) {
DiagramElement diagramElement = selectFromPoint(e.getX(), e.getY());
PartElement partElement = selectPartFromPoint(e.getX(), e.getY());
if (diagramElement instanceof ClassElement && partElement != null && partElement instanceof PartElement) {
((ClassElement) (diagramElement)).partAfter.referenceElement = null;
((ClassElement) (diagramElement)).partAfter.element = null;
buttonDeleteLink.setSelected(false);
selectedActionDeleteLink = false;
currentAction = 0;
}
} else if(selectsAddLink) {
if (currentAction == 0) {
if (selectFromPoint(e.getX(), e.getY()) != null &&
selectFromPoint(e.getX(), e.getY()).getClass().equals(ClassElement.class)) {
selectedElement = selectFromPoint(e.getX(), e.getY());
selectedPart = selectPartFromPoint(e.getX(), e.getY());
currentAction = ADD_1;
labelStatus.setText("Add link: Selected class : " + selectedElement.label + " Select class2 ...");
}
} else if (currentAction == ADD_1) {
DiagramElement diagramElement = selectFromPoint(e.getX(), e.getY());
if (diagramElement instanceof ClassElement && selectedElement instanceof ClassElement) {
if (((ClassElement) diagramElement).partAfter.element != null &&
((ClassElement) diagramElement).partAfter.element.equals(selectedClassElement)) {
((ClassElement) diagramElement).partAfter.element = null;
}
((ClassElement) selectedElement).partAfter.referenceElement = diagramElement;
((ClassElement) selectedElement).partAfter.element = diagramElement;
currentAction = 0;
labelStatus.setText("LINK ADDED : Selected element: " + selectedElement.label + " Class 2 element:" + diagramElement.label);
selectsAddLink = false;
buttonAddLink.setSelected(false);
}
}
}
} catch (NullPointerException ex) {
System.out.printf("Error : null");
}
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
Thread thread = new Thread(() -> {
while (true) {
drawAllElements();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
setWebcamFile();
}
private static UUID getUuid() {
return uuid;
}
private void buttonThenActionPerformed(ActionEvent e) {
diagramElements.add(new Then());
}
private void buttonAddToActionPerformed(ActionEvent e) {
ClassElement classElement = new ClassElement();
classElement.theClass = comboBox1.getSelectedItem().getClass();
diagramElements.add(classElement);
}
private void buttonAdd2filters(ActionEvent e) {
ClassElement classElement = new ClassElement();
classElement.theClass = comboBox2.getSelectedItem().getClass();
diagramElements.add(classElement);
}
private void buttonFilesActionPerformed(ActionEvent e) {
ListFilesElement listFilesElement = new ListFilesElement();
FileDialog fileDialog = new FileDialog(this, "Select file to open/save", FileDialog.LOAD);
//fileDialog.setLayout(new MigLayout());
fileDialog.setMultipleMode(true);
fileDialog.setVisible(true);
if ((fileDialog.getFiles()) != null) {
listFilesElement.setFiles(fileDialog.getFiles());
files.add(fileDialog.getFiles());
}
diagramElements.add(listFilesElement);
selectAndClickClass = true;
}
public void setMaxRes(int maxRes) {
this.maxRes = maxRes;
}
public int getMaxRes() {
return maxRes;
}
public void buttonGOActionPerformed(ActionEvent e) {
processed = false;
System.out.printf("Run processes\n");
System.out.printf("Check stack of processes (linked)\n");
System.out.printf("Check inputs (images files jpg mp4 decoder)\n");
System.out.printf("Check outputs (folders overwrite/change folder)\n");
System.out.printf("Run on images\n");
// select class which have no predecessor and have files[] attached.
List processes = new ArrayList<>();
for (DiagramElement classElement : diagramElements) {
if (classElement instanceof ClassElement) {
ClassElement ce = (ClassElement) classElement;
ClassElement first = ce;
ClassElement last = ce;
Class theClass = ce.getTheClass();
processes.add(ce.getInstance());
if (ce.partAfter.element != null && ce.partAfter.element != ce) {
if (ProcessFile.class.isAssignableFrom(theClass)) {
System.out.printf("Start process stack\n");
int n = 1;
while (ce.partAfter.element != null && ce.partAfter.element != ce) {
ce = (ClassElement) ce.partAfter.element;
processes.add(ce.getInstance());
last.getInstance().getProperties().sharePropertiesWith(ce.instance.getProperties());
last = ce;
processes.get(processes.size() - 1).setMaxRes(maxRes);
}
}
}
last = ce;
}
}
//ResourceBundle globalSettings = ResourceBundle.getBundle("settings.properties");
Properties globalSettings = new Properties();
try {
globalSettings.load(new FileInputStream("settings.properties"));
} catch (Exception ex) {
ex.printStackTrace();
}
tempDir = globalSettings.getProperty("tempDir") + File.separator;
if (tempDir == null)
tempDir = "temp/";
new File(tempDir).mkdirs();
if (files == null) {
System.out.printf("Error first.files==null");
}
for (File[] files : this.files) {
for (File f : files) {
System.out.printf("Run %d processes on file%s\n", processes.size(), f.getAbsolutePath());
if (f.getName().contains("webcam")) {
f = getWebcamFile();
}
if (processes.size() > 0) {
ProcessFile ce = processes.get(0);
int processNameOrder = listProcessClasses.indexOf(ce.getClass());
StringBuilder s = new StringBuilder();
s.append("-").append(listProcessClasses.indexOf(ce)).append(getUuid());
String s0 = "";
fileOut = new File(tempDir + File.separator + f.getName() + s.toString() + ".jpg");
if (!fileOut.exists()) {
fileOut.mkdirs();
}
System.out.printf("Process %s \nfrom: %s\n", processes.get(0).getClass().toString(), f.getAbsolutePath());
System.out.printf("Process %s \nto : %s\n", processes.get(0).getClass().toString(), fileOut.getAbsolutePath());
System.out.printf("Run process %d/%d on file%s\n", 0, processes.size(), f.getAbsolutePath());
if (f != null) {
ce.process(f, fileOut);
for (int i = 1; i < processes.size(); i++) {
ce = processes.get(i);
s0 = s.toString();
s.append("-").append(listProcessClasses.indexOf(ce)).append(getUuid());
System.out.printf("Process %s \nfrom: %s\n", ce.getClass().toString(), f.getName());
if (i == processes.size() - 1 && f.getName().contains("webcam")) {
setWebcamFile();
fileOut = getWebcamFile();
} else {
fileOut = new File(tempDir + File.separator + f.getName()
+ s + ".jpg");
}
File fileIn = new File(tempDir + File.separator + f.getName() //+ (i - 1)
+ s0 + ".jpg");
ce.addSource(f);//???
ce.addSource(fileIn);//???
try {
if (!fileOut.exists()) {
fileOut.mkdirs();
}
System.out.printf("Run process %d/%d on file%s\n", i, processes.size(), f.getAbsolutePath());
ce.process(fileIn, fileOut);
} catch (NullPointerException ex) {
ex.printStackTrace();
}
}
}
}
}
}
if(fileOut!=null) {
Logger.getAnonymousLogger().log(Level.INFO, "fileOut : " + fileOut.getAbsolutePath());
Logger.getAnonymousLogger().log(Level.INFO, "Exists? : " + fileOut.exists());
if (fileOut.exists()) {
liveEffect.setFileIn(fileOut);
processed = true;
} else {
System.err.println("Le fichier fileOut n'existe pas");
}
} else {
System.err.println("Le fichier fileOut est null");
}
}
private void buttonDeleteClassActionPerformed(ActionEvent e) {
selectedActionDeleteClass = ((JToggleButton) e.getSource()).isSelected();
}
private void buttonDeleteLinkActionPerformed(ActionEvent e) {
selectedActionDeleteLink = ((JToggleButton) e.getSource()).isSelected();
}
private void buttonAddLinkActionPerformed(ActionEvent e) {
//buttonAddLink.setSelected(!buttonAddLink.isSelected());
if(buttonAddLink.isSelected()) {
selectsAddLink = true;
labelStatus.setText("Method: Use click on class1, then class2 ");
} else if(!buttonAddLink.isSelected()){
selectsAddLink = false;
labelStatus.setText("Do nothing");
}
}
private void buttonLoadActionPerformed(ActionEvent e) {
String[] currentDirin = null;
String server = "";
int port = 0;
String username = "";
String password = "";
String[] classnamesArr = null;
JFileChooser jFileChooser = new JFileChooser(directory);
jFileChooser.setMultiSelectionEnabled(false);
if (JFileChooser.APPROVE_OPTION == jFileChooser.showOpenDialog(this)) {
File selectedFile = jFileChooser.getSelectedFile();
Properties appFile = new Properties();
if (selectedFile.getName().endsWith(".properties")) {
try {
appFile.load(new FileInputStream(selectedFile));
} catch (Exception ex) {
ex.printStackTrace();
}
currentDirin = (appFile.getProperty("in.directory")).split(",");
if ("local".equals(appFile.getProperty("in.device"))) {
server = "file";
port = 0;
username = "";
password = "";
} else {
server = (String) appFile.getProperty("host");
port = Integer.parseInt(appFile.getProperty("port"));
username = (String) appFile.getProperty("username");
password = (String) appFile.getProperty("password");
}
String maxFilesInDir0 = appFile.getProperty("maxFilesInDir");
String maxResStr = appFile.getProperty("maxRes");
if (maxResStr != null)
maxRes = Integer.parseInt(maxResStr);
/* String*/
String classnames = (String) appFile.getProperty("classname");
String class0 = (String) appFile.getProperty("class0");
String directoryOut = (String) appFile.getProperty("out.directory");
String sep = "";
int i = 0;
if (class0 == null || class0.equals("")) {
sep = "";
}
classnamesArr = classnames.split(",");
int j0 = diagramElements.size();
int j = j0;
for (i = 0; i < classnamesArr.length; i++) {
try {
ClassElement classElement = new ClassElement();
diagramElements.add(classElement);
classElement.theClass = Class.forName(classnamesArr[i]);
j++;
} catch (Exception ex) {
ex.printStackTrace();
}
}
for (i = j0; i < j0 + classnamesArr.length - 1; i++) {
((ClassElement) (diagramElements.get(i))).partAfter.element = diagramElements.get(i + 1);
((ClassElement) (diagramElements.get(i))).partAfter.referenceElement
= diagramElements.get(i);
}
} else {
// Load Java Data from toString.
try {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(selectedFile));
Date date = (Date) objectInputStream.readObject();
ClassSchemaBuilder c = new ClassSchemaBuilder();
c.diagramElements = (List) objectInputStream.readObject();
c.files = (List) objectInputStream.readObject();
c.partElements = (List) objectInputStream.readObject();
c.listProcessClasses = (ArrayList) objectInputStream.readObject();
c.setVisible(true);
} catch (IOException | ClassNotFoundException ex) {
ex.printStackTrace();
}
}
}
}
private void buttonSaveActionPerformed(ActionEvent e) {
JFileChooser jFileChooser = new JFileChooser(directory);
jFileChooser.setMultiSelectionEnabled(false);
if (JFileChooser.APPROVE_OPTION == jFileChooser.showOpenDialog(this)) {
File selectedFile = jFileChooser.getSelectedFile();
ObjectOutputStream oos = null;
try {
FileOutputStream fichier = new FileOutputStream(selectedFile);
oos = new ObjectOutputStream(fichier);
oos.writeObject(new Date());
oos.writeObject(this.diagramElements);
oos.writeObject(this.files);
oos.writeObject(this.partElements);
oos.writeObject(this.listProcessClasses);
oos.flush();
} catch (final IOException ex) {
ex.printStackTrace();
} finally {
try {
if (oos != null) {
oos.flush();
oos.close();
}
} catch (final IOException ex) {
ex.printStackTrace();
}
}
}
}
private void buttonCamActionPerformed(ActionEvent e) {
cam = ((JToggleButton) e.getSource()).isSelected();
if (liveEffect == null) {
liveEffect = new LiveEffect();
}
liveEffect.setVisible(true);
liveEffect.setVisible(cam);
liveEffect.setMainWindow(this);
/*if (cam)
if (!direstEffect.threadEffectDisplay.busy && direstEffect.threadEffectDisplay.isAlive())
direstEffect.threadEffectDisplay.start();
+/
*/
liveEffect.setVisible(true);
}
private void buttonPictureRecodeActionPerformed(ActionEvent e) {
JFileChooser jFileChooser = new JFileChooser(fileChooserDir);
jFileChooser.setFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
return Arrays.stream(ImageIO.getReaderFormatNames()).anyMatch(s -> f.toPath().endsWith(s.substring(s.lastIndexOf('.'))));
}
@Override
public String getDescription() {
return "All images known types";
}
});
jFileChooser.setMultiSelectionEnabled(true);
jFileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
jFileChooser.showOpenDialog(this);
final File[] selectedFiles = jFileChooser.getSelectedFiles();
if (selectedFiles != null) {
//for (int i = 0; i < selectedFiles.length; i++) {
//File selectedFile = selectedFiles[i];
this.files.add(selectedFiles);
buttonGOActionPerformed(null);
//}
} else {
Logger.getAnonymousLogger().log(Level.INFO, "Nothing chosen");
}
}
private void button3ActionPerformed(ActionEvent e) {
// TODO add your code here
}
private void buttonParameters(ActionEvent e) {
DialogMultFrames dialogMultFrames = new DialogMultFrames(this);
dialogMultFrames.setVisible(true);
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
comboBox1 = new JComboBox();
button2 = new JButton();
comboBox2 = new JComboBox();
button3 = new JButton();
button4 = new JButton();
buttonAddLink = new JToggleButton();
buttonFiles = new JButton();
buttonDeleteClass = new JToggleButton();
buttonDeleteLink = new JToggleButton();
buttonGO = new JButton();
buttonLoad = new JButton();
buttonSave = new JButton();
panel1 = new JPanel();
labelStatus = new JLabel();
button1 = new JButton();
buttonPictureRecode = new JButton();
buttonCam = new JToggleButton();
//======== this ========
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setTitle("Filter stack constructor");
setVisible(true);
var contentPane = getContentPane();
contentPane.setLayout(new MigLayout(
"insets 0,hidemode 3,gap 5 5",
// columns
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]",
// rows
"[fill]" +
"[fill]" +
"[fill]" +
"[]"));
//---- comboBox1 ----
comboBox1.setMaximumRowCount(20);
comboBox1.setAutoscrolls(true);
comboBox1.setLightWeightPopupEnabled(false);
comboBox1.setDoubleBuffered(true);
contentPane.add(comboBox1, "cell 0 0");
//---- button2 ----
button2.setText("Add");
button2.addActionListener(e -> buttonAddToActionPerformed(e));
contentPane.add(button2, "cell 0 0");
contentPane.add(comboBox2, "cell 0 0");
//---- button3 ----
button3.setText("Add + filter");
button3.addActionListener(e -> buttonAdd2filters(e));
contentPane.add(button3, "cell 0 0");
//---- button4 ----
button4.setText("Properties");
button4.addActionListener(e -> buttonParameters(e));
contentPane.add(button4, "cell 3 0");
//---- buttonAddLink ----
buttonAddLink.setText("Add link");
buttonAddLink.addActionListener(e -> buttonAddLinkActionPerformed(e));
contentPane.add(buttonAddLink, "cell 4 0");
//---- buttonFiles ----
buttonFiles.setText("Add input files");
buttonFiles.addActionListener(e -> buttonFilesActionPerformed(e));
contentPane.add(buttonFiles, "cell 4 0");
//---- buttonDeleteClass ----
buttonDeleteClass.setText("Delete class");
buttonDeleteClass.addActionListener(e -> buttonDeleteClassActionPerformed(e));
contentPane.add(buttonDeleteClass, "cell 4 0");
//---- buttonDeleteLink ----
buttonDeleteLink.setText("Delete link");
buttonDeleteLink.addActionListener(e -> buttonDeleteLinkActionPerformed(e));
contentPane.add(buttonDeleteLink, "cell 4 0");
//---- buttonGO ----
buttonGO.setText("Process GO");
buttonGO.addActionListener(e -> buttonGOActionPerformed(e));
contentPane.add(buttonGO, "cell 4 0");
//---- buttonLoad ----
buttonLoad.setText("Load");
buttonLoad.addActionListener(e -> buttonLoadActionPerformed(e));
contentPane.add(buttonLoad, "cell 4 0");
//---- buttonSave ----
buttonSave.setText("Save");
buttonSave.addActionListener(e -> buttonSaveActionPerformed(e));
contentPane.add(buttonSave, "cell 4 0");
//======== panel1 ========
{
panel1.setLayout(new MigLayout(
"hidemode 3",
// columns
"[fill]" +
"[fill]",
// rows
"[]" +
"[]" +
"[]"));
}
contentPane.add(panel1, "cell 0 1 5 2,dock center");
//---- labelStatus ----
labelStatus.setText("text");
contentPane.add(labelStatus, "cell 0 3 2 1");
//---- button1 ----
button1.setText("Open movie/recode");
contentPane.add(button1, "cell 4 3");
//---- buttonPictureRecode ----
buttonPictureRecode.setText("Open picture/recode");
buttonPictureRecode.addActionListener(e -> buttonPictureRecodeActionPerformed(e));
contentPane.add(buttonPictureRecode, "cell 4 3");
//---- buttonCam ----
buttonCam.setText("Open webcam");
buttonCam.addActionListener(e -> buttonCamActionPerformed(e));
contentPane.add(buttonCam, "cell 4 3");
setSize(1020, 540);
setLocationRelativeTo(getOwner());
// JFormDesigner - End of component initialization //GEN-END:initComponents
try {
listProcessClasses.add(Classification.class.newInstance());
listProcessClasses.add(CornerDetectProcess.class.newInstance());
listProcessClasses.add(CurveFitting.class.newInstance());
listProcessClasses.add(DBScanProcess.class.newInstance());
listProcessClasses.add(DericheFilterProcess.class.newInstance());
listProcessClasses.add(DiffEnergy.class.newInstance());
listProcessClasses.add(Draw.class.newInstance());
listProcessClasses.add(ExtremaProcess.class.newInstance());
listProcessClasses.add(GaussFilterProcess.class.newInstance());
listProcessClasses.add(GradProcess.class.newInstance());
listProcessClasses.add(HarrisProcess.class.newInstance());
listProcessClasses.add(Histogram.class.newInstance());
listProcessClasses.add(Histogram1.class.newInstance());
listProcessClasses.add(Hist4Contour.class.newInstance());
listProcessClasses.add(one.empty3.feature20220726.histograms.Hist4Contour2.class.newInstance());
listProcessClasses.add(Histogram0.class.newInstance());
listProcessClasses.add(Histogram2.class.newInstance());
listProcessClasses.add(Histogram3.class.newInstance());
listProcessClasses.add(HoughTransform.class.newInstance());
listProcessClasses.add(HoughTransformCircle.class.newInstance());
listProcessClasses.add(IdentNullProcess.class.newInstance());
listProcessClasses.add(IsleProcess.class.newInstance());
listProcessClasses.add(KMeans.class.newInstance());
listProcessClasses.add(Lines.class.newInstance());
listProcessClasses.add(Lines3.class.newInstance());
listProcessClasses.add(Lines4.class.newInstance());
listProcessClasses.add(Lines5.class.newInstance());
listProcessClasses.add(Lines5colors.class.newInstance());
listProcessClasses.add(Lines6.class.newInstance());
listProcessClasses.add(LocalExtremaProcess.class.newInstance());
listProcessClasses.add(MagnitudeProcess.class.newInstance());
listProcessClasses.add(ProxyValue.class.newInstance());
listProcessClasses.add(ProxyValue2.class.newInstance());
listProcessClasses.add(ReadLines.class.newInstance());
listProcessClasses.add(RegionLineCorner.class.newInstance());
listProcessClasses.add(SelectColor.class.newInstance());
listProcessClasses.add(Transform1.class.newInstance());
listProcessClasses.add(TrueHarrisProcess.class.newInstance());
listProcessClasses.add(Voronoi.class.newInstance());
listProcessClasses.add(HighlightFeatures.class.newInstance());
listProcessClasses.add(RunFeatures.class.newInstance());
listProcessClasses.add(GFG.class.newInstance());
listProcessClasses.add(Hist4Contour2.class.newInstance());
listProcessClasses.forEach(new Consumer() {
@Override
public void accept(ProcessFile processFile) {
comboBox1.addItem(processFile);
}
});
ArrayList listProcessClasses2process = new ArrayList();
listProcessClasses2process.add(ProcessPlusNormalize.class.newInstance());
listProcessClasses2process.forEach(new Consumer() {
@Override
public void accept(ProcessNFiles processsX2Process) {
comboBox2.addItem(processsX2Process);
}
});
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
}
public void drawElement(Graphics g, DiagramElement diagramElement) {
g.drawString(diagramElement.label, diagramElement.x, diagramElement.y);
if (diagramElement instanceof ClassElement) {
g.setColor(Color.WHITE);
g.drawString(((ClassElement) diagramElement).theClass.getName(), diagramElement.x, diagramElement.y + 32);
}
if (diagramElement instanceof ClassElement) {
if (((ClassElement) diagramElement).partAfter.element != null) {
int x = ((ClassElement) diagramElement).partAfter.element.x;
int y = ((ClassElement) diagramElement).partAfter.element.y;
g.setColor(Color.GREEN);
g.fillOval(diagramElement.x+40, diagramElement.y+40, 10,10);
g.setColor(Color.GRAY);
g.drawLine(diagramElement.x+40, diagramElement.y+40, x, y);
}
}
}
public DiagramElement selectFromPoint(int x, int y) {
double distance = 100000;
DiagramElement diagramElementNear = null;
for (DiagramElement diagramElement : diagramElements) {
if (Point2D.dist(new Point2D(x, y), new Point2D(diagramElement.x, diagramElement.y)) < distance) {
distance = Point2D.dist(new Point2D(x, y), new Point2D(diagramElement.x, diagramElement.y));
diagramElementNear = diagramElement;
}
}
return diagramElementNear;
}
private PartElement selectPartFromPoint(int x, int y) {
double distance = 100000;
DiagramElement diagramElementNear = selectFromPoint(x, y);
if (selectedElement == diagramElementNear) {
for (DiagramElement diagramElement : partElements) {
if (diagramElement != null)
if (Point2D.dist(new Point2D(x, y), new Point2D(diagramElement.x, diagramElement.y)) < distance) {
for (PartElement partElement : partElements) {
DiagramElement diagramElement1 = ((PartElement) partElement).getReferenceElement();
if (diagramElement == diagramElement1) {
distance = Point2D.dist(new Point2D(x, y), new Point2D(diagramElement.x, diagramElement.y));
selectedElement = diagramElement;
selectedPart = partElement;
}
}
}
}
}
return selectedPart;
}
public void drawAllElements() {
try {
trees();
//System.out.println(treeDiagram);
} catch (Throwable throwable) {
throwable.printStackTrace(System.out);
//throw throwable;
}
BufferedImage bi = new BufferedImage(panel1.getWidth(), panel1.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
g.setColor(Color.BLACK);
g.fillRect(0, 0, panel1.getWidth(), panel1.getHeight());
try {
Point location = MouseInfo.getPointerInfo().getLocation();
DiagramElement selected = selectFromPoint(location.x, location.y);
for (DiagramElement diagramElement : diagramElements) {
g.setColor(Color.WHITE);
if (diagramElement == selected)
g.setColor(Color.GREEN);
else if (selectedElement == diagramElement)
g.setColor(Color.BLUE);
drawElement(g, diagramElement);
}
Graphics graphics = panel1.getGraphics();
graphics.drawImage(bi, 0, 0, panel1.getWidth(), panel1.getHeight(), this);
} catch (NullPointerException ex) {
}
}
private void trees() {
treeDiagram = new TreeDiagram(diagramElements);
if(treeDiagram.head!=null) {
ArrayList diagramElements2 = new ArrayList<>();
List explore = new ArrayList<>();
List leaves = new ArrayList<>();
treeDiagram.head.searchForLeaves(leaves);
leaves.forEach(treeNodeDiagram -> {
DiagramElement element = treeNodeDiagram.getElement();
if (element instanceof ClassElement) {
treeNodeDiagram.setFile(((ClassElement) (element)).files[0]);
}
});
}
}
public void addClassToSchema() {
ClassElement classElement = new ClassElement();
diagramElements.add(classElement);
}
public void addThenToSchema() {
Then thenElement = new Then();
diagramElements.add(thenElement);
}
public static void main(String[] args) {
new ClassSchemaBuilder().setVisible(true);
}
@Override
public String toString() {
List f = new ArrayList<>();
for (File[] files2 : files) {
Collections.addAll(f, files2);
}
return "ClassSchemaBuilder{" +
"selectedPart=" + selectedPart +
", directory='" + directory + '\'' +
", files2=" + f +
", selectedElement=" + selectedElement +
", selectedArrow=" + selectedArrow +
", diagramElements=" + diagramElements +
", partElements=" + partElements +
", listProcessClasses=" + listProcessClasses +
'}';
}
private JButton buttonStop;
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
private JComboBox comboBox1;
private JButton button2;
private JComboBox comboBox2;
private JButton button3;
private JButton button4;
private JToggleButton buttonAddLink;
private JButton buttonFiles;
private JToggleButton buttonDeleteClass;
private JToggleButton buttonDeleteLink;
private JButton buttonGO;
private JButton buttonLoad;
private JButton buttonSave;
private JPanel panel1;
private JLabel labelStatus;
private JButton button1;
private JButton buttonPictureRecode;
private JToggleButton buttonCam;
// JFormDesigner - End of variables declaration //GEN-END:variables
public List getDiagramElements() {
return diagramElements;
}
public void setDiagramElements(List diagramElements) {
this.diagramElements = diagramElements;
}
}