From 8ccdd84a6f02b246bb2477ddeaa3cee28012b461 Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Sat, 9 Mar 2019 16:47:18 +0100 Subject: [PATCH] add support to map DIYLC pin indices to spice --- .../src/org/diylc/netlist/ISpiceMapper.java | 6 ++++ .../src/org/diylc/netlist/SpiceAnalyzer.java | 33 +++++++++++++----- diylc/diylc-swing/library/main.jar | Bin 613258 -> 613689 bytes diylc/diylc-swing/update.xml | 4 +++ 4 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java diff --git a/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java b/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java new file mode 100644 index 00000000..e662b2be --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java @@ -0,0 +1,6 @@ +package org.diylc.netlist; + +public interface ISpiceMapper { + + int mapToSpiceNode(int index); +} diff --git a/diylc/diylc-library/src/org/diylc/netlist/SpiceAnalyzer.java b/diylc/diylc-library/src/org/diylc/netlist/SpiceAnalyzer.java index 9a2c173b..1b49852e 100644 --- a/diylc/diylc-library/src/org/diylc/netlist/SpiceAnalyzer.java +++ b/diylc/diylc-library/src/org/diylc/netlist/SpiceAnalyzer.java @@ -72,7 +72,7 @@ public class SpiceAnalyzer extends NetlistAnalyzer implements INetlistAnalyzer { StringBuilder sb = new StringBuilder(); List groups = netlist.getSortedGroups(); - int unconnectedIndex = groups.size() + 1; + int unconnectedIndex = groups.size(); int maxLen = 0; for (IDIYComponent c : allComponents) { @@ -83,16 +83,33 @@ public class SpiceAnalyzer extends NetlistAnalyzer implements INetlistAnalyzer { for (IDIYComponent c : allComponents) { sb.append(fill(c.getName(), (int) (Math.ceil(maxLen / 5.0) * 5))); sb.append(" "); + int[] nodeIndices = new int[c.getControlPointCount()]; + + // find node indices for each control point for (int i = 0; i < c.getControlPointCount(); i++) { - int index = find(new Node(c, i), groups); - if (index < 0) - index = unconnectedIndex++; - else - index++; - sb.append(fill(Integer.toString(index), 5)); + int pointIndex = i; + + int nodeIndex = find(new Node(c, pointIndex), groups); + if (nodeIndex < 0) + nodeIndex = unconnectedIndex++; + + // 1-based convention + nodeIndex++; + + // remap if needed + if (c instanceof ISpiceMapper) + pointIndex = ((ISpiceMapper)c).mapToSpiceNode(pointIndex); + + nodeIndices[pointIndex] = nodeIndex; + } + + // output to spice + for (int i = 0; i < c.getControlPointCount(); i++) { + sb.append(fill(Integer.toString(nodeIndices[i]), 5)); sb.append(" "); } - sb.append(c.getValueForDisplay()); + + sb.append(c.getValue()); sb.append("
"); } diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index fcb89f30f76d1067cb3ffb3ac6cea88f9c25e3ca..7a5a9cd3ed3642aa9fbe1bacccedab29c4391bc2 100644 GIT binary patch delta 7828 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 JQ;+(L{{{0Np~wIL diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 7ffec6b6..0b2404e0 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2582,6 +2582,10 @@ NEW_FEATURE Ability to tag components and building blocks as favorites + + NEW_FEATURE + Generate SPICE-compatible netlist (still in beta stage) + IMPROVEMENT When in "Highlight Connected Area" mode, the status bar shows useful information making it harder to forget what the mode does