From cc6d4830b1777af062d4c6298c2eca1e5a7ea102 Mon Sep 17 00:00:00 2001 From: "Helmut.Neemann" Date: Wed, 11 May 2016 14:25:02 +0200 Subject: [PATCH] added IEEE Not shape --- .../digital/draw/shapes/ShapeFactory.java | 4 +- .../draw/shapes/ieee/IEEENotShape.java | 67 +++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java diff --git a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java index 85f7e8445..33ec71431 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java @@ -13,6 +13,7 @@ import de.neemann.digital.core.wiring.*; import de.neemann.digital.draw.elements.Tunnel; import de.neemann.digital.draw.library.ElementLibrary; import de.neemann.digital.draw.shapes.ieee.IEEEAndShape; +import de.neemann.digital.draw.shapes.ieee.IEEENotShape; import de.neemann.digital.draw.shapes.ieee.IEEEOrShape; import de.neemann.digital.draw.shapes.ieee.IEEEXOrShape; import de.neemann.digital.gui.LibrarySelector; @@ -55,6 +56,7 @@ public final class ShapeFactory { map.put(NOr.DESCRIPTION.getName(), (attributes, inputs, outputs) -> new IEEEOrShape(inputs, outputs, true)); map.put(XOr.DESCRIPTION.getName(), (attributes, inputs, outputs) -> new IEEEXOrShape(inputs, outputs, false)); map.put(XNOr.DESCRIPTION.getName(), (attributes, inputs, outputs) -> new IEEEXOrShape(inputs, outputs, true)); + map.put(Not.DESCRIPTION.getName(), (attributes, inputs, outputs) -> new IEEENotShape(inputs, outputs)); } else { map.put(And.DESCRIPTION.getName(), new CreatorSimple("&", And.DESCRIPTION, false)); map.put(Or.DESCRIPTION.getName(), new CreatorSimple("\u22651", Or.DESCRIPTION, false)); @@ -62,9 +64,9 @@ public final class ShapeFactory { map.put(NOr.DESCRIPTION.getName(), new CreatorSimple("\u22651", NOr.DESCRIPTION, true)); map.put(XOr.DESCRIPTION.getName(), new CreatorSimple("=1", XOr.DESCRIPTION, false)); map.put(XNOr.DESCRIPTION.getName(), new CreatorSimple("=1", XNOr.DESCRIPTION, true)); + map.put(Not.DESCRIPTION.getName(), new CreatorSimple("", Not.DESCRIPTION, true)); } - map.put(Not.DESCRIPTION.getName(), new CreatorSimple("", Not.DESCRIPTION, true)); map.put(RAMDualPort.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape("RAM", RAMDualPort.DESCRIPTION.getInputDescription(attr), RAMDualPort.DESCRIPTION.getOutputDescriptions(attr), attr.getLabel())); map.put(RAMSinglePort.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape("RAM", RAMSinglePort.DESCRIPTION.getInputDescription(attr), RAMSinglePort.DESCRIPTION.getOutputDescriptions(attr), attr.getLabel())); diff --git a/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java b/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java new file mode 100644 index 000000000..732451d03 --- /dev/null +++ b/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java @@ -0,0 +1,67 @@ +package de.neemann.digital.draw.shapes.ieee; + +import de.neemann.digital.core.Observer; +import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.Keys; +import de.neemann.digital.core.element.PinDescription; +import de.neemann.digital.draw.elements.IOState; +import de.neemann.digital.draw.elements.Pin; +import de.neemann.digital.draw.elements.Pins; +import de.neemann.digital.draw.graphics.Graphic; +import de.neemann.digital.draw.graphics.Polygon; +import de.neemann.digital.draw.graphics.Style; +import de.neemann.digital.draw.graphics.Vector; +import de.neemann.digital.draw.shapes.Interactor; +import de.neemann.digital.draw.shapes.Shape; + +import static de.neemann.digital.draw.shapes.GenericShape.SIZE; +import static de.neemann.digital.draw.shapes.GenericShape.SIZE2; + +/** + * IEEE Standard 91-1984 Not Shape + * + * @author hneemann + */ +public class IEEENotShape implements Shape { + private final PinDescription[] inputs; + private final PinDescription[] outputs; + private Pins pins; + + /** + * Creates a new instance + * + * @param inputs the inputs + * @param outputs the outputs + */ + public IEEENotShape(PinDescription[] inputs, PinDescription[] outputs) { + this.inputs = inputs; + this.outputs = outputs; + } + + @Override + public Pins getPins() { + if (pins == null) { + pins = new Pins(); + pins.add(new Pin(new Vector(0, 0), inputs[0])); + pins.add(new Pin(new Vector(SIZE * 2, 0), outputs[0])); + } + return pins; + } + + @Override + public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + return null; + } + + @Override + public void drawTo(Graphic graphic, boolean highLight) { + graphic.drawPolygon( + new Polygon(true) + .add(1, -SIZE2 - 2) + .add(SIZE - 1, 0) + .add(1, SIZE2 + 2), Style.NORMAL + ); + graphic.drawCircle(new Vector(SIZE + 1, -SIZE2 + 1), + new Vector(SIZE * 2 - 1, SIZE2 - 1), Style.NORMAL); + } +}