mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-13 02:32:09 +10:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dcbaae07c6 | |||
| 2a010a9df3 | |||
| 6c8d07faef | |||
| ad0a467470 |
@@ -77,6 +77,7 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP
|
|||||||
public static final String SHOW_RULERS_KEY = "showRulers";
|
public static final String SHOW_RULERS_KEY = "showRulers";
|
||||||
public static final String SHOW_GRID_KEY = "showGrid";
|
public static final String SHOW_GRID_KEY = "showGrid";
|
||||||
public static final String HIGHLIGHT_CONTINUITY_AREA = "highlightContinuityArea";
|
public static final String HIGHLIGHT_CONTINUITY_AREA = "highlightContinuityArea";
|
||||||
|
public static final String MULTIMETER_MODE = "multimeterMode";
|
||||||
public static final String HARDWARE_ACCELERATION = "hardwareAcceleration";
|
public static final String HARDWARE_ACCELERATION = "hardwareAcceleration";
|
||||||
public static final String EXTRA_SPACE_KEY = "extraSpace";
|
public static final String EXTRA_SPACE_KEY = "extraSpace";
|
||||||
public static final String FAVORITES_KEY = "favorites";
|
public static final String FAVORITES_KEY = "favorites";
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package org.diylc.netlist;
|
||||||
|
|
||||||
|
import java.awt.geom.Point2D;
|
||||||
|
import java.util.Optional;
|
||||||
|
import org.diylc.presenter.DrawingManager;
|
||||||
|
|
||||||
|
public class ConnectivityNetlistAnalyzer extends NetlistAnalyzer {
|
||||||
|
|
||||||
|
private Point2D point1;
|
||||||
|
private Point2D point2;
|
||||||
|
|
||||||
|
public ConnectivityNetlistAnalyzer(Point2D point1, Point2D point2) {
|
||||||
|
this.point1 = point1;
|
||||||
|
this.point2 = point2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Summary summarize(Netlist netlist, Node preferredOutput) throws TreeException {
|
||||||
|
Node node1 = netlist.getGroups().stream()
|
||||||
|
.flatMap(x -> x.getNodes().stream())
|
||||||
|
.filter(n -> n.getPoint2D().distance(point1) < DrawingManager.CONTROL_POINT_SIZE)
|
||||||
|
.findFirst().orElse(null);
|
||||||
|
|
||||||
|
Node node2 = netlist.getGroups().stream()
|
||||||
|
.flatMap(x -> x.getNodes().stream())
|
||||||
|
.filter(n -> n.getPoint2D().distance(point2) < DrawingManager.CONTROL_POINT_SIZE)
|
||||||
|
.findFirst().orElse(null);
|
||||||
|
|
||||||
|
if (node1 == null || node2 == null) {
|
||||||
|
return new Summary(netlist, "At least one of the selected points does not represent a node.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Tree treeBetween = constructTreeBetween(netlist, node1, node2);
|
||||||
|
|
||||||
|
return new Summary(netlist, Optional.ofNullable(treeBetween)
|
||||||
|
.map(x -> x.toAsciiString())
|
||||||
|
.orElse("No conection detected."));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,7 +24,6 @@ import java.util.HashSet;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import org.diylc.core.IDIYComponent;
|
import org.diylc.core.IDIYComponent;
|
||||||
|
|
||||||
public abstract class NetlistAnalyzer {
|
public abstract class NetlistAnalyzer {
|
||||||
|
|||||||
@@ -695,13 +695,22 @@ public class DrawingManager {
|
|||||||
messageDispatcher.dispatchMessage(EventType.REPAINT);
|
messageDispatcher.dispatchMessage(EventType.REPAINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void findContinuityAreaAtPoint(Point2D p) {
|
public void setContinuityAreaAtPoint(Point2D p) {
|
||||||
if (continuityGraphCache == null)
|
if (continuityGraphCache == null) {
|
||||||
continuityGraphCache = getContinuityGraph();
|
continuityGraphCache = getContinuityGraph();
|
||||||
|
}
|
||||||
|
|
||||||
currentContinuityAreas = continuityGraphCache.findAreasFor(p);
|
currentContinuityAreas = continuityGraphCache.findAreasFor(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Area> getContinuityAreaAtPoint(Point2D p) {
|
||||||
|
if (continuityGraphCache == null) {
|
||||||
|
continuityGraphCache = getContinuityGraph();
|
||||||
|
}
|
||||||
|
|
||||||
|
return continuityGraphCache.findAreasFor(p);
|
||||||
|
}
|
||||||
|
|
||||||
public List<ContinuityArea> getContinuityAreas() {
|
public List<ContinuityArea> getContinuityAreas() {
|
||||||
// Find all individual continuity areas for all components
|
// Find all individual continuity areas for all components
|
||||||
List<ContinuityArea> preliminaryAreas = new ArrayList<ContinuityArea>();
|
List<ContinuityArea> preliminaryAreas = new ArrayList<ContinuityArea>();
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ import java.util.function.Supplier;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
import org.diylc.appframework.miscutils.IConfigListener;
|
||||||
import org.diylc.appframework.miscutils.IConfigurationManager;
|
import org.diylc.appframework.miscutils.IConfigurationManager;
|
||||||
import org.diylc.appframework.miscutils.JarScanner;
|
import org.diylc.appframework.miscutils.JarScanner;
|
||||||
import org.diylc.appframework.miscutils.Utils;
|
import org.diylc.appframework.miscutils.Utils;
|
||||||
@@ -78,11 +79,14 @@ import org.diylc.core.annotations.IAutoCreator;
|
|||||||
import org.diylc.core.measures.Size;
|
import org.diylc.core.measures.Size;
|
||||||
import org.diylc.core.measures.SizeUnit;
|
import org.diylc.core.measures.SizeUnit;
|
||||||
import org.diylc.lang.LangUtil;
|
import org.diylc.lang.LangUtil;
|
||||||
|
import org.diylc.netlist.ConnectivityNetlistAnalyzer;
|
||||||
import org.diylc.netlist.INetlistParser;
|
import org.diylc.netlist.INetlistParser;
|
||||||
import org.diylc.netlist.Netlist;
|
import org.diylc.netlist.Netlist;
|
||||||
import org.diylc.netlist.NetlistAnalyzer;
|
import org.diylc.netlist.NetlistAnalyzer;
|
||||||
import org.diylc.netlist.NetlistBuilder;
|
import org.diylc.netlist.NetlistBuilder;
|
||||||
import org.diylc.netlist.NetlistException;
|
import org.diylc.netlist.NetlistException;
|
||||||
|
import org.diylc.netlist.Summary;
|
||||||
|
import org.diylc.netlist.TreeException;
|
||||||
import org.diylc.serialization.ProjectFileManager;
|
import org.diylc.serialization.ProjectFileManager;
|
||||||
import org.diylc.test.DIYTest;
|
import org.diylc.test.DIYTest;
|
||||||
import org.diylc.test.Snapshot;
|
import org.diylc.test.Snapshot;
|
||||||
@@ -202,6 +206,9 @@ public class Presenter implements IPlugInPort {
|
|||||||
private int dragAction;
|
private int dragAction;
|
||||||
private Point2D previousScaledPoint;
|
private Point2D previousScaledPoint;
|
||||||
|
|
||||||
|
// Multimeter
|
||||||
|
private Point2D firstMultimeterPoint;
|
||||||
|
|
||||||
private DIYTest test = null;
|
private DIYTest test = null;
|
||||||
|
|
||||||
public Presenter(IView view, IConfigurationManager<?> configManager) {
|
public Presenter(IView view, IConfigurationManager<?> configManager) {
|
||||||
@@ -212,6 +219,15 @@ public class Presenter implements IPlugInPort {
|
|||||||
super();
|
super();
|
||||||
this.view = view;
|
this.view = view;
|
||||||
this.configManager = configManager;
|
this.configManager = configManager;
|
||||||
|
this.configManager.addConfigListener(MULTIMETER_MODE, new IConfigListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void valueChanged(String name, Object value) {
|
||||||
|
if (Boolean.TRUE.equals(value)) {
|
||||||
|
firstMultimeterPoint = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
plugIns = new ArrayList<IPlugIn>();
|
plugIns = new ArrayList<IPlugIn>();
|
||||||
messageDispatcher = new MessageDispatcher<EventType>(true);
|
messageDispatcher = new MessageDispatcher<EventType>(true);
|
||||||
selectedComponents = new HashSet<IDIYComponent<?>>();
|
selectedComponents = new HashSet<IDIYComponent<?>>();
|
||||||
@@ -680,8 +696,29 @@ public class Presenter implements IPlugInPort {
|
|||||||
projectFileManager.notifyFileChange();
|
projectFileManager.notifyFileChange();
|
||||||
}
|
}
|
||||||
} else if (configManager.readBoolean(HIGHLIGHT_CONTINUITY_AREA, false) || altDown) {
|
} else if (configManager.readBoolean(HIGHLIGHT_CONTINUITY_AREA, false) || altDown) {
|
||||||
drawingManager.findContinuityAreaAtPoint(scaledPoint);
|
drawingManager.setContinuityAreaAtPoint(scaledPoint);
|
||||||
messageDispatcher.dispatchMessage(EventType.REPAINT);
|
messageDispatcher.dispatchMessage(EventType.REPAINT);
|
||||||
|
} else if (configManager.readBoolean(MULTIMETER_MODE, false)) {
|
||||||
|
if (firstMultimeterPoint == null) {
|
||||||
|
firstMultimeterPoint = scaledPoint;
|
||||||
|
} else {
|
||||||
|
ConnectivityNetlistAnalyzer connectivityNetlistAnalyzer = new ConnectivityNetlistAnalyzer(
|
||||||
|
firstMultimeterPoint, scaledPoint);
|
||||||
|
try {
|
||||||
|
List<Netlist> netlists = extractNetlists(false);
|
||||||
|
List<Summary> summarize = connectivityNetlistAnalyzer.summarize(netlists, null);
|
||||||
|
for (Summary s : summarize) {
|
||||||
|
LOG.info(s.getSummary());
|
||||||
|
}
|
||||||
|
} catch (NetlistException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (TreeException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
firstMultimeterPoint = null;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
List<IDIYComponent<?>> newSelection = new ArrayList<IDIYComponent<?>>(selectedComponents);
|
List<IDIYComponent<?>> newSelection = new ArrayList<IDIYComponent<?>>(selectedComponents);
|
||||||
List<IDIYComponent<?>> components = findComponentsAtScaled(scaledPoint, false);
|
List<IDIYComponent<?>> components = findComponentsAtScaled(scaledPoint, false);
|
||||||
|
|||||||
@@ -103,6 +103,9 @@ public class ConfigPlugin implements IPlugIn {
|
|||||||
swingUI.injectMenuAction(
|
swingUI.injectMenuAction(
|
||||||
ActionFactory.getInstance().createConfigAction(plugInPort, "Highlight Connected Areas", IPlugInPort.HIGHLIGHT_CONTINUITY_AREA,
|
ActionFactory.getInstance().createConfigAction(plugInPort, "Highlight Connected Areas", IPlugInPort.HIGHLIGHT_CONTINUITY_AREA,
|
||||||
false), CONFIG_MENU);
|
false), CONFIG_MENU);
|
||||||
|
swingUI.injectMenuAction(
|
||||||
|
ActionFactory.getInstance().createConfigAction(plugInPort, "Multimeter Mode", IPlugInPort.MULTIMETER_MODE,
|
||||||
|
false), CONFIG_MENU);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
List<Language> languages = LangUtil.getAvailableLanguages();
|
List<Language> languages = LangUtil.getAvailableLanguages();
|
||||||
|
|||||||
Reference in New Issue
Block a user