Some improvements!
This commit is contained in:
parent
a0a3b269b0
commit
7a49772540
|
@ -3,6 +3,7 @@ package nl.andrewlalis.erme.control.actions;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import nl.andrewlalis.erme.model.MappingModel;
|
import nl.andrewlalis.erme.model.MappingModel;
|
||||||
import nl.andrewlalis.erme.model.Relation;
|
import nl.andrewlalis.erme.model.Relation;
|
||||||
|
import nl.andrewlalis.erme.view.DiagramPanel;
|
||||||
import nl.andrewlalis.erme.view.view_models.MappingModelViewModel;
|
import nl.andrewlalis.erme.view.view_models.MappingModelViewModel;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
@ -84,6 +85,7 @@ public class ExportToImageAction extends AbstractAction {
|
||||||
private BufferedImage renderModel() {
|
private BufferedImage renderModel() {
|
||||||
BufferedImage bufferedImage = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
|
BufferedImage bufferedImage = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
|
||||||
Graphics2D g2d = bufferedImage.createGraphics();
|
Graphics2D g2d = bufferedImage.createGraphics();
|
||||||
|
DiagramPanel.prepareGraphics(g2d);
|
||||||
final Rectangle bounds = this.model.getViewModel().getBounds(g2d);
|
final Rectangle bounds = this.model.getViewModel().getBounds(g2d);
|
||||||
BufferedImage outputImage = new BufferedImage(bounds.width, bounds.height + 20, BufferedImage.TYPE_INT_RGB);
|
BufferedImage outputImage = new BufferedImage(bounds.width, bounds.height + 20, BufferedImage.TYPE_INT_RGB);
|
||||||
g2d = outputImage.createGraphics();
|
g2d = outputImage.createGraphics();
|
||||||
|
@ -91,6 +93,7 @@ public class ExportToImageAction extends AbstractAction {
|
||||||
g2d.fillRect(outputImage.getMinX(), outputImage.getMinY(), outputImage.getWidth(), outputImage.getHeight());
|
g2d.fillRect(outputImage.getMinX(), outputImage.getMinY(), outputImage.getWidth(), outputImage.getHeight());
|
||||||
AffineTransform originalTransform = g2d.getTransform();
|
AffineTransform originalTransform = g2d.getTransform();
|
||||||
g2d.setTransform(AffineTransform.getTranslateInstance(-bounds.x, -bounds.y));
|
g2d.setTransform(AffineTransform.getTranslateInstance(-bounds.x, -bounds.y));
|
||||||
|
DiagramPanel.prepareGraphics(g2d);
|
||||||
|
|
||||||
List<Relation> selectedRelations = this.model.getSelectedRelations();
|
List<Relation> selectedRelations = this.model.getSelectedRelations();
|
||||||
this.model.getSelectedRelations().forEach(r -> r.setSelected(false));
|
this.model.getSelectedRelations().forEach(r -> r.setSelected(false));
|
||||||
|
|
|
@ -39,7 +39,9 @@ public class AddRelationAction extends AbstractAction {
|
||||||
JOptionPane.PLAIN_MESSAGE
|
JOptionPane.PLAIN_MESSAGE
|
||||||
);
|
);
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
this.model.addRelation(new Relation(this.model, new Point(0, 0), name));
|
Rectangle bounds = this.model.getRelationBounds();
|
||||||
|
Point center = new Point(bounds.x + bounds.width / 2, bounds.y + bounds.height / 2);
|
||||||
|
this.model.addRelation(new Relation(this.model, center, name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@ public class MappingModel implements Serializable, Viewable {
|
||||||
|
|
||||||
private transient Set<ModelChangeListener> changeListeners;
|
private transient Set<ModelChangeListener> changeListeners;
|
||||||
|
|
||||||
|
private final static long serialVersionUID = 6153776381873250304L;
|
||||||
|
|
||||||
public MappingModel() {
|
public MappingModel() {
|
||||||
this.relations = new HashSet<>();
|
this.relations = new HashSet<>();
|
||||||
this.changeListeners = new HashSet<>();
|
this.changeListeners = new HashSet<>();
|
||||||
|
@ -70,6 +72,20 @@ public class MappingModel implements Serializable, Viewable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Rectangle getRelationBounds() {
|
||||||
|
int minX = Integer.MAX_VALUE;
|
||||||
|
int minY = Integer.MAX_VALUE;
|
||||||
|
int maxX = Integer.MIN_VALUE;
|
||||||
|
int maxY = Integer.MIN_VALUE;
|
||||||
|
for (Relation r : this.getRelations()) {
|
||||||
|
minX = Math.min(minX, r.getPosition().x);
|
||||||
|
minY = Math.min(minY, r.getPosition().y);
|
||||||
|
maxX = Math.max(maxX, r.getPosition().x);
|
||||||
|
maxY = Math.max(maxY, r.getPosition().y);
|
||||||
|
}
|
||||||
|
return new Rectangle(minX, minY, maxX - minX, maxY - minY);
|
||||||
|
}
|
||||||
|
|
||||||
public void addChangeListener(ModelChangeListener listener) {
|
public void addChangeListener(ModelChangeListener listener) {
|
||||||
if (this.changeListeners == null) {
|
if (this.changeListeners == null) {
|
||||||
this.changeListeners = new HashSet<>();
|
this.changeListeners = new HashSet<>();
|
||||||
|
|
|
@ -100,9 +100,7 @@ public class DiagramPanel extends JPanel implements ModelChangeListener {
|
||||||
|
|
||||||
public Graphics2D getGraphics2D(Graphics g) {
|
public Graphics2D getGraphics2D(Graphics g) {
|
||||||
Graphics2D g2d = (Graphics2D) g;
|
Graphics2D g2d = (Graphics2D) g;
|
||||||
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
prepareGraphics(g2d);
|
||||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
|
||||||
g.setFont(g.getFont().deriveFont(14.0f));
|
|
||||||
return g2d;
|
return g2d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,4 +128,10 @@ public class DiagramPanel extends JPanel implements ModelChangeListener {
|
||||||
RemoveAttributeAction.getInstance().setModel(this.model);
|
RemoveAttributeAction.getInstance().setModel(this.model);
|
||||||
LoadSampleModelAction.getInstance().setDiagramPanel(this);
|
LoadSampleModelAction.getInstance().setDiagramPanel(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void prepareGraphics(Graphics2D g) {
|
||||||
|
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||||
|
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
|
g.setFont(g.getFont().deriveFont(14.0f));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue