Circuit analysis algorithm that supports netlist extraction, 'Highlight connected Areas' and 'Guitar Wiring Analyzer' features improved to take PCB trace layer and component z-order into account for better accuracy

This commit is contained in:
Bane Stojkovic
2022-11-23 22:50:01 +01:00
parent ec5e1ae233
commit d3d98b3058
28 changed files with 447 additions and 160 deletions
Binary file not shown.
@@ -30,6 +30,7 @@ import org.diylc.components.transform.AbstractBoardTransformer;
import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.ILayer;
import org.diylc.core.Project;
import org.diylc.core.annotations.BomPolicy;
import org.diylc.core.annotations.ComponentDescriptor;
@@ -44,7 +45,7 @@ import org.diylc.utils.Constants;
zOrder = IDIYComponent.BOARD, instanceNamePrefix = "Board", description = "Perforated board with solder pads",
bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TAG,
keywordTag = "Perf Board", transformer = AbstractBoardTransformer.class, enableCache = true)
public class PerfBoard extends AbstractBoard {
public class PerfBoard extends AbstractBoard implements ILayer {
private static final long serialVersionUID = 1L;
@@ -119,6 +120,11 @@ public class PerfBoard extends AbstractBoard {
@Override
public String getControlPointNodeName(int index) {
return null;
}
@Override
public int getLayerId() {
return 1;
}
@Override
@@ -31,6 +31,7 @@ import org.diylc.components.transform.VeroBoardTransformer;
import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.ILayer;
import org.diylc.core.Project;
import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty;
@@ -41,7 +42,7 @@ import org.diylc.utils.Constants;
instanceNamePrefix = "Board",
description = "Perforated FR4 board with copper strips connecting 3 holes in a row (aka TriPad Board)",
keywordPolicy = KeywordPolicy.SHOW_TYPE_NAME, transformer = VeroBoardTransformer.class, enableCache = true)
public class TriPadBoard extends AbstractVeroBoard {
public class TriPadBoard extends AbstractVeroBoard implements ILayer {
private static final long serialVersionUID = 1L;
@@ -202,5 +203,10 @@ public class TriPadBoard extends AbstractVeroBoard {
@Override
public String getControlPointNodeName(int index) {
return null;
}
@Override
public int getLayerId() {
return 1;
}
}
@@ -31,6 +31,7 @@ import org.diylc.components.transform.VeroBoardTransformer;
import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.ILayer;
import org.diylc.core.Project;
import org.diylc.core.annotations.BomPolicy;
import org.diylc.core.annotations.ComponentDescriptor;
@@ -42,7 +43,7 @@ import org.diylc.utils.Constants;
description = "Perforated FR4 board with copper strips connecting all holes in a row",
bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TYPE_NAME,
transformer = VeroBoardTransformer.class, enableCache = true)
public class VeroBoard extends AbstractVeroBoard {
public class VeroBoard extends AbstractVeroBoard implements ILayer {
private static final long serialVersionUID = 1L;
@@ -110,7 +111,10 @@ public class VeroBoard extends AbstractVeroBoard {
}
}
@Override
public int getLayerId() {
return 1;
}
@Override
public String getControlPointNodeName(int index) {
@@ -27,6 +27,7 @@ import org.diylc.components.transform.SimpleComponentTransformer;
import org.diylc.core.ComponentState;
import org.diylc.core.CreationMethod;
import org.diylc.core.IDIYComponent;
import org.diylc.core.ILayer;
import org.diylc.core.VisibilityPolicy;
import org.diylc.core.annotations.BomPolicy;
import org.diylc.core.annotations.ComponentDescriptor;
@@ -40,7 +41,7 @@ import org.diylc.core.measures.SizeUnit;
description = "Straight copper trace", zOrder = IDIYComponent.TRACE, bomPolicy = BomPolicy.NEVER_SHOW,
autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB",
transformer = SimpleComponentTransformer.class)
public class CopperTrace extends AbstractLeadedComponent<Void> {
public class CopperTrace extends AbstractLeadedComponent<Void> implements ILayer {
private static final long serialVersionUID = 1L;
@@ -99,6 +100,11 @@ public class CopperTrace extends AbstractLeadedComponent<Void> {
public void setLayer(PCBLayer layer) {
this.layer = layer;
}
@Override
public int getLayerId() {
return getLayer().getId();
}
@Override
protected float getLeadThickness() {
@@ -28,6 +28,7 @@ import org.diylc.components.transform.SimpleComponentTransformer;
import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.ILayer;
import org.diylc.core.annotations.BomPolicy;
import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty;
@@ -40,7 +41,7 @@ import org.diylc.core.measures.SizeUnit;
zOrder = IDIYComponent.TRACE, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false,
keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class,
enableCache = true)
public class CurvedTrace extends AbstractCurvedComponent<Void> {
public class CurvedTrace extends AbstractCurvedComponent<Void> implements ILayer {
private static final long serialVersionUID = 1L;
@@ -88,6 +89,11 @@ public class CurvedTrace extends AbstractCurvedComponent<Void> {
public void setLayer(PCBLayer layer) {
this.layer = layer;
}
@Override
public int getLayerId() {
return getLayer().getId();
}
@Override
public Void getValue() {
@@ -32,6 +32,7 @@ import org.diylc.components.transform.SimpleComponentTransformer;
import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.ILayer;
import org.diylc.core.Project;
import org.diylc.core.VisibilityPolicy;
import org.diylc.core.annotations.BomPolicy;
@@ -43,7 +44,7 @@ import org.diylc.core.measures.SizeUnit;
@ComponentDescriptor(name = "Ground Fill", author = "Branislav Stojkovic", category = "Connectivity",
instanceNamePrefix = "GF", description = "Polygonal ground fill area", zOrder = IDIYComponent.TRACE,
bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, transformer = SimpleComponentTransformer.class)
public class GroundFill extends AbstractComponent<Void> {
public class GroundFill extends AbstractComponent<Void> implements ILayer {
private static final long serialVersionUID = 1L;
@@ -148,7 +149,11 @@ public class GroundFill extends AbstractComponent<Void> {
public void setLayer(PCBLayer layer) {
this.layer = layer;
}
@Override
public int getLayerId() {
return getLayer().getId();
}
@Deprecated
@Override
@@ -28,6 +28,7 @@ import org.diylc.components.transform.SimpleComponentTransformer;
import org.diylc.core.ComponentState;
import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.ILayer;
import org.diylc.core.Project;
import org.diylc.core.VisibilityPolicy;
import org.diylc.core.annotations.BomPolicy;
@@ -44,7 +45,7 @@ import org.diylc.utils.Constants;
description = "Copper solder pad, round or square", instanceNamePrefix = "Pad",
zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false,
keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class, enableCache = true)
public class SolderPad extends AbstractComponent<Void> {
public class SolderPad extends AbstractComponent<Void> implements ILayer {
private static final long serialVersionUID = 1L;
@@ -128,6 +129,11 @@ public class SolderPad extends AbstractComponent<Void> {
public void setLayer(PCBLayer layer) {
this.layer = layer;
}
@Override
public int getLayerId() {
return getLayer().getId();
}
@Override
public String getName() {
@@ -93,7 +93,7 @@ public class SpiceAnalyzer extends NetlistAnalyzer implements INetlistAnalyzer {
if (c instanceof ISpiceMapper)
pointIndex = ((ISpiceMapper)c).mapToSpiceNode(pointIndex);
int nodeIndex = find(new Node(c, pointIndex), groups);
int nodeIndex = find(new Node(c, pointIndex, 0), groups);
if (nodeIndex < 0)
nodeIndex = unconnectedIndex++;