diff --git a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java index 912db2ea..31ff5a85 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java @@ -210,7 +210,7 @@ public class DrawingManager { failedComponents.add(component); } Area area = g2dWrapper.finishedDrawingComponent(); - if (trackArea && area != null && !area.isEmpty()) { + if (trackArea && area != null && !area.isEmpty()) { componentAreaMap.put(component, area); lastDrawnStateMap.put(component, state); } diff --git a/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java b/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java index e3c25d51..040782c9 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java +++ b/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java @@ -438,7 +438,8 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver { public void setStroke(Stroke s) { if (this.zoom > 1 && s.getClass() == BasicStroke.class) { BasicStroke bs = (BasicStroke) s; - if (bs.getLineWidth() == 1) + // make thin lines even thinner to compensate for zoom factor + if (bs.getLineWidth() <= 2) s = ObjectCache.getInstance().fetchBasicStroke((float) (bs.getLineWidth() / zoom)); } canvasGraphics.setStroke(s); diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 7e62f27b..8d25e11d 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/DIL_IC.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/DIL_IC.java index f9bd92e9..f0e7cc82 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/DIL_IC.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/DIL_IC.java @@ -178,13 +178,13 @@ public class DIL_IC extends AbstractTransparentComponent { Point firstPoint = controlPoints[0]; controlPoints = new Point[pinCount.getValue()]; controlPoints[0] = firstPoint; - int pinSpacing = (int) this.pinSpacing.convertToPixels(); - int rowSpacing = (int) this.rowSpacing.convertToPixels(); + double pinSpacing = this.pinSpacing.convertToPixels(); + double rowSpacing = this.rowSpacing.convertToPixels(); // Update control points. - int dx1; - int dy1; - int dx2; - int dy2; + double dx1; + double dy1; + double dx2; + double dy2; for (int i = 0; i < pinCount.getValue() / 2; i++) { switch (orientation) { case DEFAULT: @@ -214,21 +214,21 @@ public class DIL_IC extends AbstractTransparentComponent { default: throw new RuntimeException("Unexpected orientation: " + orientation); } - controlPoints[i] = new Point(firstPoint.x + dx1, firstPoint.y + dy1); - controlPoints[i + pinCount.getValue() / 2] = new Point(firstPoint.x + dx2, firstPoint.y + dy2); + controlPoints[i] = new Point((int) (firstPoint.x + dx1), (int) (firstPoint.y + dy1)); + controlPoints[i + pinCount.getValue() / 2] = new Point((int) (firstPoint.x + dx2), (int) (firstPoint.y + dy2)); } } public Area[] getBody() { if (body == null) { body = new Area[2]; - int x = controlPoints[0].x; - int y = controlPoints[0].y; - int width; - int height; - int pinSize = (int) PIN_SIZE.convertToPixels(); - int pinSpacing = (int) this.pinSpacing.convertToPixels(); - int rowSpacing = (int) this.rowSpacing.convertToPixels(); + double x = controlPoints[0].x; + double y = controlPoints[0].y; + double width; + double height; + double pinSize = PIN_SIZE.convertToPixels(); + double pinSpacing = this.pinSpacing.convertToPixels(); + double rowSpacing = this.rowSpacing.convertToPixels(); Area indentation = null; int indentationSize = getClosestOdd(INDENT_SIZE.convertToPixels()); switch (orientation) { diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java index 96aa7ee2..90aff526 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java @@ -164,10 +164,10 @@ public class SIL_IC extends AbstractTransparentComponent { Point firstPoint = controlPoints[0]; controlPoints = new Point[pinCount.getValue()]; controlPoints[0] = firstPoint; - int pinSpacing = (int) this.pinSpacing.convertToPixels(); + double pinSpacing = this.pinSpacing.convertToPixels(); // Update control points. - int dx1; - int dy1; + double dx1; + double dy1; for (int i = 0; i < pinCount.getValue(); i++) { switch (orientation) { case DEFAULT: @@ -189,7 +189,7 @@ public class SIL_IC extends AbstractTransparentComponent { default: throw new RuntimeException("Unexpected orientation: " + orientation); } - controlPoints[i] = new Point(firstPoint.x + dx1, firstPoint.y + dy1); + controlPoints[i] = new Point((int) (firstPoint.x + dx1), (int) (firstPoint.y + dy1)); } } @@ -199,9 +199,9 @@ public class SIL_IC extends AbstractTransparentComponent { int x = controlPoints[0].x; int y = controlPoints[0].y; int thickness = getClosestOdd(THICKNESS.convertToPixels()); - int width; - int height; - int pinSpacing = (int) this.pinSpacing.convertToPixels(); + double width; + double height; + double pinSpacing = (int) this.pinSpacing.convertToPixels(); Area indentation = null; int indentationSize = getClosestOdd(INDENT_SIZE.convertToPixels()); switch (orientation) { diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 7e62f27b..8d25e11d 100644 Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 48e19981..d5668cc4 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 9c8abb80..e4f63c4c 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -1704,7 +1704,11 @@ NEW_FEATURE - Red ticks on both rulers track selection bounds, blue tick tracks cursor position + Red ticks on both rulers mark selection bounds, blue tick tracks cursor position + + + BUG_FIX + Issues with DIL and SIL IC pin alignment when using metric grid and pin spacing https://github.com/bancika/diy-layout-creator/releases