Compare commits

...

4 Commits

Author SHA1 Message Date
Bane Stojkovic dcbaae07c6 Merge branch 'master' into feature/multimeter 2025-02-24 23:50:58 +01:00
Bane Stojkovic 2a010a9df3 Merge branch 'master' into feature/multimeter 2025-02-22 08:19:03 +01:00
Bane Stojkovic 6c8d07faef Merge branch 'master' into feature/multimeter 2025-02-15 09:56:19 +01:00
Bane Stojkovic ad0a467470 multimeter mode 2025-02-11 22:12:51 +01:00
6 changed files with 92 additions and 4 deletions
@@ -77,6 +77,7 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP
public static final String SHOW_RULERS_KEY = "showRulers";
public static final String SHOW_GRID_KEY = "showGrid";
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 EXTRA_SPACE_KEY = "extraSpace";
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.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.diylc.core.IDIYComponent;
public abstract class NetlistAnalyzer {
@@ -695,13 +695,22 @@ public class DrawingManager {
messageDispatcher.dispatchMessage(EventType.REPAINT);
}
public void findContinuityAreaAtPoint(Point2D p) {
if (continuityGraphCache == null)
public void setContinuityAreaAtPoint(Point2D p) {
if (continuityGraphCache == null) {
continuityGraphCache = getContinuityGraph();
}
currentContinuityAreas = continuityGraphCache.findAreasFor(p);
}
public List<Area> getContinuityAreaAtPoint(Point2D p) {
if (continuityGraphCache == null) {
continuityGraphCache = getContinuityGraph();
}
return continuityGraphCache.findAreasFor(p);
}
public List<ContinuityArea> getContinuityAreas() {
// Find all individual continuity areas for all components
List<ContinuityArea> preliminaryAreas = new ArrayList<ContinuityArea>();
@@ -48,6 +48,7 @@ import java.util.function.Supplier;
import java.util.stream.Collectors;
import javax.swing.JOptionPane;
import org.apache.log4j.Logger;
import org.diylc.appframework.miscutils.IConfigListener;
import org.diylc.appframework.miscutils.IConfigurationManager;
import org.diylc.appframework.miscutils.JarScanner;
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.SizeUnit;
import org.diylc.lang.LangUtil;
import org.diylc.netlist.ConnectivityNetlistAnalyzer;
import org.diylc.netlist.INetlistParser;
import org.diylc.netlist.Netlist;
import org.diylc.netlist.NetlistAnalyzer;
import org.diylc.netlist.NetlistBuilder;
import org.diylc.netlist.NetlistException;
import org.diylc.netlist.Summary;
import org.diylc.netlist.TreeException;
import org.diylc.serialization.ProjectFileManager;
import org.diylc.test.DIYTest;
import org.diylc.test.Snapshot;
@@ -202,6 +206,9 @@ public class Presenter implements IPlugInPort {
private int dragAction;
private Point2D previousScaledPoint;
// Multimeter
private Point2D firstMultimeterPoint;
private DIYTest test = null;
public Presenter(IView view, IConfigurationManager<?> configManager) {
@@ -212,6 +219,15 @@ public class Presenter implements IPlugInPort {
super();
this.view = view;
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>();
messageDispatcher = new MessageDispatcher<EventType>(true);
selectedComponents = new HashSet<IDIYComponent<?>>();
@@ -680,8 +696,29 @@ public class Presenter implements IPlugInPort {
projectFileManager.notifyFileChange();
}
} else if (configManager.readBoolean(HIGHLIGHT_CONTINUITY_AREA, false) || altDown) {
drawingManager.findContinuityAreaAtPoint(scaledPoint);
drawingManager.setContinuityAreaAtPoint(scaledPoint);
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 {
List<IDIYComponent<?>> newSelection = new ArrayList<IDIYComponent<?>>(selectedComponents);
List<IDIYComponent<?>> components = findComponentsAtScaled(scaledPoint, false);
@@ -103,6 +103,9 @@ public class ConfigPlugin implements IPlugIn {
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Highlight Connected Areas", IPlugInPort.HIGHLIGHT_CONTINUITY_AREA,
false), CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Multimeter Mode", IPlugInPort.MULTIMETER_MODE,
false), CONFIG_MENU);
try {
List<Language> languages = LangUtil.getAvailableLanguages();