mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-11 01:32:08 +10:00
improve precision of exported files
This commit is contained in:
@@ -175,8 +175,9 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP
|
|||||||
* @param g2d
|
* @param g2d
|
||||||
* @param drawOptions specific drawing options
|
* @param drawOptions specific drawing options
|
||||||
* @param filter
|
* @param filter
|
||||||
|
* @param externalZoom
|
||||||
*/
|
*/
|
||||||
void draw(Graphics2D g2d, Set<DrawOption> drawOptions, IComponentFiler filter);
|
void draw(Graphics2D g2d, Set<DrawOption> drawOptions, IComponentFiler filter, Double externalZoom);
|
||||||
|
|
||||||
Double[] getAvailableZoomLevels();
|
Double[] getAvailableZoomLevels();
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import java.awt.Point;
|
|||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.RenderingHints;
|
import java.awt.RenderingHints;
|
||||||
import java.awt.geom.Area;
|
import java.awt.geom.Area;
|
||||||
|
import java.awt.geom.Line2D;
|
||||||
import java.awt.geom.Path2D;
|
import java.awt.geom.Path2D;
|
||||||
import java.awt.geom.PathIterator;
|
import java.awt.geom.PathIterator;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -122,12 +123,13 @@ public class DrawingManager {
|
|||||||
* @param controlPointSlot
|
* @param controlPointSlot
|
||||||
* @param componentSlot
|
* @param componentSlot
|
||||||
* @param dragInProgress
|
* @param dragInProgress
|
||||||
|
* @param externalZoom
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public List<IDIYComponent<?>> drawProject(Graphics2D g2d, Project project, Set<DrawOption> drawOptions,
|
public List<IDIYComponent<?>> drawProject(Graphics2D g2d, Project project, Set<DrawOption> drawOptions,
|
||||||
IComponentFiler filter, Rectangle selectionRect, Collection<IDIYComponent<?>> selectedComponents,
|
IComponentFiler filter, Rectangle selectionRect, Collection<IDIYComponent<?>> selectedComponents,
|
||||||
Set<IDIYComponent<?>> lockedComponents, Set<IDIYComponent<?>> groupedComponents, List<Point> controlPointSlot,
|
Set<IDIYComponent<?>> lockedComponents, Set<IDIYComponent<?>> groupedComponents, List<Point> controlPointSlot,
|
||||||
List<IDIYComponent<?>> componentSlot, boolean dragInProgress) {
|
List<IDIYComponent<?>> componentSlot, boolean dragInProgress, Double externalZoom) {
|
||||||
failedComponents.clear();
|
failedComponents.clear();
|
||||||
if (project == null) {
|
if (project == null) {
|
||||||
return failedComponents;
|
return failedComponents;
|
||||||
@@ -140,6 +142,9 @@ public class DrawingManager {
|
|||||||
zoom = 1 / Constants.PIXEL_SIZE;
|
zoom = 1 / Constants.PIXEL_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (externalZoom != null)
|
||||||
|
zoom *= externalZoom;
|
||||||
|
|
||||||
G2DWrapper g2dWrapper = new G2DWrapper(g2d, zoom);
|
G2DWrapper g2dWrapper = new G2DWrapper(g2d, zoom);
|
||||||
|
|
||||||
if (drawOptions.contains(DrawOption.ANTIALIASING)) {
|
if (drawOptions.contains(DrawOption.ANTIALIASING)) {
|
||||||
@@ -175,20 +180,23 @@ public class DrawingManager {
|
|||||||
GridType gridType = GridType.LINES;
|
GridType gridType = GridType.LINES;
|
||||||
if (drawOptions.contains(DrawOption.GRID) && gridType != GridType.NONE) {
|
if (drawOptions.contains(DrawOption.GRID) && gridType != GridType.NONE) {
|
||||||
double zoomStep = project.getGridSpacing().convertToPixels() * zoom;
|
double zoomStep = project.getGridSpacing().convertToPixels() * zoom;
|
||||||
|
float gridThickness = (float) (1f * (zoom > 1 ? 1 : zoom));
|
||||||
if (gridType == GridType.CROSSHAIR) {
|
if (gridType == GridType.CROSSHAIR) {
|
||||||
g2d.setStroke(new BasicStroke(1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10f, new float[] {
|
g2d.setStroke(new BasicStroke(gridThickness, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10f, new float[] {
|
||||||
(float) zoomStep / 2, (float) zoomStep / 2}, (float) zoomStep / 4));
|
(float) zoomStep / 2, (float) zoomStep / 2}, (float) zoomStep / 4));
|
||||||
} else if (gridType == GridType.DOT) {
|
} else if (gridType == GridType.DOT) {
|
||||||
g2d.setStroke(new BasicStroke(1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10f, new float[] {1f,
|
g2d.setStroke(new BasicStroke(gridThickness, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10f, new float[] {1f,
|
||||||
(float) zoomStep - 1}, 0f));
|
(float) zoomStep - 1}, 0f));
|
||||||
|
} else {
|
||||||
|
g2d.setStroke(ObjectCache.getInstance().fetchZoomableStroke(gridThickness));
|
||||||
}
|
}
|
||||||
|
|
||||||
g2dWrapper.setColor(theme.getGridColor());
|
g2dWrapper.setColor(theme.getGridColor());
|
||||||
for (double i = zoomStep; i < d.width; i += zoomStep) {
|
for (double i = zoomStep; i < d.width; i += zoomStep) {
|
||||||
g2dWrapper.drawLine((int) i, 0, (int) i, d.height - 1);
|
g2dWrapper.draw(new Line2D.Double(i, 0, i, d.height - 1));
|
||||||
}
|
}
|
||||||
for (double j = zoomStep; j < d.height; j += zoomStep) {
|
for (double j = zoomStep; j < d.height; j += zoomStep) {
|
||||||
g2dWrapper.drawLine(0, (int) j, d.width - 1, (int) j);
|
g2dWrapper.draw(new Line2D.Double(0, j, d.width - 1, j));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -436,7 +436,7 @@ public class Presenter implements IPlugInPort {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(Graphics2D g2d, Set<DrawOption> drawOptions, final IComponentFiler filter) {
|
public void draw(Graphics2D g2d, Set<DrawOption> drawOptions, final IComponentFiler filter, Double externalZoom) {
|
||||||
if (currentProject == null) {
|
if (currentProject == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -478,7 +478,10 @@ public class Presenter implements IPlugInPort {
|
|||||||
getLockedComponents(),
|
getLockedComponents(),
|
||||||
groupedComponents,
|
groupedComponents,
|
||||||
Arrays.asList(instantiationManager.getFirstControlPoint(),
|
Arrays.asList(instantiationManager.getFirstControlPoint(),
|
||||||
instantiationManager.getPotentialControlPoint()), componentSlotToDraw, dragInProgress);
|
instantiationManager.getPotentialControlPoint()),
|
||||||
|
componentSlotToDraw,
|
||||||
|
dragInProgress,
|
||||||
|
externalZoom);
|
||||||
List<String> failedComponentNames = new ArrayList<String>();
|
List<String> failedComponentNames = new ArrayList<String>();
|
||||||
for (IDIYComponent<?> component : failedComponents) {
|
for (IDIYComponent<?> component : failedComponents) {
|
||||||
failedComponentNames.add(component.getName());
|
failedComponentNames.add(component.getName());
|
||||||
|
|||||||
Binary file not shown.
@@ -293,13 +293,13 @@ public abstract class AbstractLeadedComponent<T> extends AbstractTransparentComp
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void drawLeads(Graphics2D g2d, double theta, double leadLength) {
|
private void drawLeads(Graphics2D g2d, double theta, double leadLength) {
|
||||||
int endX = (int) Math.round(points[0].x + Math.cos(theta) * leadLength);
|
double endX = points[0].x + Math.cos(theta) * leadLength;
|
||||||
int endY = (int) Math.round(points[0].y + Math.sin(theta) * leadLength);
|
double endY = points[0].y + Math.sin(theta) * leadLength;
|
||||||
g2d.drawLine(points[0].x, points[0].y, endX, endY);
|
g2d.draw(new Line2D.Double(points[0].x, points[0].y, endX, endY));
|
||||||
|
|
||||||
endX = (int) Math.round(points[1].x + Math.cos(theta - Math.PI) * leadLength);
|
endX = points[1].x + Math.cos(theta - Math.PI) * leadLength;
|
||||||
endY = (int) Math.round(points[1].y + Math.sin(theta - Math.PI) * leadLength);
|
endY = points[1].y + Math.sin(theta - Math.PI) * leadLength;
|
||||||
g2d.drawLine(points[1].x, points[1].y, endX, endY);
|
g2d.draw(new Line2D.Double(points[1].x, points[1].y, endX, endY));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawLead(Graphics2D g2d, ComponentState componentState, IDrawingObserver observer, boolean isCopperArea) {
|
private void drawLead(Graphics2D g2d, ComponentState componentState, IDrawingObserver observer, boolean isCopperArea) {
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -290,7 +290,7 @@ public class TemplateDialog extends JDialog {
|
|||||||
super.paint(g);
|
super.paint(g);
|
||||||
// Graphics2D g2d = (Graphics2D) g;
|
// Graphics2D g2d = (Graphics2D) g;
|
||||||
// AffineTransform transform = g2d.getTransform();
|
// AffineTransform transform = g2d.getTransform();
|
||||||
presenter.draw((Graphics2D) g, EnumSet.of(DrawOption.ZOOM, DrawOption.ANTIALIASING), null);
|
presenter.draw((Graphics2D) g, EnumSet.of(DrawOption.ZOOM, DrawOption.ANTIALIASING), null, null);
|
||||||
// g2d.setTransform(transform);
|
// g2d.setTransform(transform);
|
||||||
// Rectangle rect = canvasPanel.getBounds();
|
// Rectangle rect = canvasPanel.getBounds();
|
||||||
// BorderFactory.createEtchedBorder().paintBorder(canvasPanel,
|
// BorderFactory.createEtchedBorder().paintBorder(canvasPanel,
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ public class CanvasPanel extends JComponent implements Autoscroll {
|
|||||||
if (ConfigurationManager.getInstance().readBoolean(IPlugInPort.SHOW_GRID_KEY, true)) {
|
if (ConfigurationManager.getInstance().readBoolean(IPlugInPort.SHOW_GRID_KEY, true)) {
|
||||||
drawOptions.add(DrawOption.GRID);
|
drawOptions.add(DrawOption.GRID);
|
||||||
}
|
}
|
||||||
plugInPort.draw(g2d, drawOptions, null);
|
plugInPort.draw(g2d, drawOptions, null, null);
|
||||||
if (useHardwareAcceleration) {
|
if (useHardwareAcceleration) {
|
||||||
VolatileImage volatileImage = (VolatileImage) bufferImage;
|
VolatileImage volatileImage = (VolatileImage) bufferImage;
|
||||||
do {
|
do {
|
||||||
|
|||||||
@@ -318,8 +318,8 @@ public class UploadDialog extends ButtonDialog {
|
|||||||
zoomRatio = rect.getHeight() / d.getHeight();
|
zoomRatio = rect.getHeight() / d.getHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
g2d.scale(zoomRatio, zoomRatio);
|
// g2d.scale(zoomRatio, zoomRatio);
|
||||||
UploadDialog.this.plugInPort.draw(g2d, EnumSet.of(DrawOption.ANTIALIASING), null);
|
UploadDialog.this.plugInPort.draw(g2d, EnumSet.of(DrawOption.ANTIALIASING), null, zoomRatio);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getKeywords() {
|
public String getKeywords() {
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class ProjectDrawingProvider implements IDrawingProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(int page, Graphics g) {
|
public void draw(int page, Graphics g, double zoomFactor) {
|
||||||
EnumSet<DrawOption> drawOptions = EnumSet.of(DrawOption.ANTIALIASING);
|
EnumSet<DrawOption> drawOptions = EnumSet.of(DrawOption.ANTIALIASING);
|
||||||
if (useZoom) {
|
if (useZoom) {
|
||||||
drawOptions.add(DrawOption.ZOOM);
|
drawOptions.add(DrawOption.ZOOM);
|
||||||
@@ -67,7 +67,7 @@ public class ProjectDrawingProvider implements IDrawingProvider {
|
|||||||
if (ConfigurationManager.getInstance().readBoolean(IPlugInPort.OUTLINE_KEY, false)) {
|
if (ConfigurationManager.getInstance().readBoolean(IPlugInPort.OUTLINE_KEY, false)) {
|
||||||
drawOptions.add(DrawOption.OUTLINE_MODE);
|
drawOptions.add(DrawOption.OUTLINE_MODE);
|
||||||
}
|
}
|
||||||
plugInPort.draw((Graphics2D) g, drawOptions, null);
|
plugInPort.draw((Graphics2D) g, drawOptions, null, zoomFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -147,8 +147,8 @@ public class ProjectPreview extends JPanel implements PropertyChangeListener, IF
|
|||||||
// System.out.println(x + "," + y);
|
// System.out.println(x + "," + y);
|
||||||
|
|
||||||
// g2d.translate(x, y);
|
// g2d.translate(x, y);
|
||||||
g2d.scale(zoomRatio, zoomRatio);
|
// g2d.scale(zoomRatio, zoomRatio);
|
||||||
presenter.draw(g2d, EnumSet.noneOf(DrawOption.class), null);
|
presenter.draw(g2d, EnumSet.noneOf(DrawOption.class), null, zoomRatio);
|
||||||
|
|
||||||
g2d.setColor(Color.black);
|
g2d.setColor(Color.black);
|
||||||
g2d.drawRect(0, 0, d.width - (int) (1 / zoomRatio), d.height - (int) (1 / zoomRatio));
|
g2d.drawRect(0, 0, d.width - (int) (1 / zoomRatio), d.height - (int) (1 / zoomRatio));
|
||||||
|
|||||||
@@ -59,8 +59,8 @@ public class TraceMaskDrawingProvider implements IDrawingProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(int page, Graphics g) {
|
public void draw(int page, Graphics g, double zoomFactor) {
|
||||||
plugInPort.draw((Graphics2D) g, EnumSet.of(DrawOption.ANTIALIASING), new PCBLayerFiler(getUsedLayers()[page]));
|
plugInPort.draw((Graphics2D) g, EnumSet.of(DrawOption.ANTIALIASING), new PCBLayerFiler(getUsedLayers()[page]), zoomFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -2358,6 +2358,10 @@
|
|||||||
<releaseDate>2019-01-28 00:00:00.000 CET</releaseDate>
|
<releaseDate>2019-01-28 00:00:00.000 CET</releaseDate>
|
||||||
<name></name>
|
<name></name>
|
||||||
<changes>
|
<changes>
|
||||||
|
<org.diylc.appframework.update.Change>
|
||||||
|
<changeType>IMPROVEMENT</changeType>
|
||||||
|
<description>Better precision when exporting to PDF and PNG files</description>
|
||||||
|
</org.diylc.appframework.update.Change>
|
||||||
<org.diylc.appframework.update.Change>
|
<org.diylc.appframework.update.Change>
|
||||||
<changeType>BUG_FIX</changeType>
|
<changeType>BUG_FIX</changeType>
|
||||||
<description>"PCB Text" components are not included in trace mask exports</description>
|
<description>"PCB Text" components are not included in trace mask exports</description>
|
||||||
|
|||||||
Reference in New Issue
Block a user