Lever 2502N import switch (#981)

* Add 4P3T AxLabs Lever Switch variant

* Add 2502N Lever Switch

* Bridge is now pos1 and neck pos5 as expected

Re-worked acording to the diagram here:
https://guitarpartscenter.eu/en_US/p/ALPHA-SW-2502N-5-Way-Lever-Switch-ADWH/23036
This commit is contained in:
Martin Morrell
2025-12-21 20:58:20 +00:00
committed by GitHub
parent aa4f4c9c66
commit ce7753744a
3 changed files with 88 additions and 5 deletions
@@ -151,8 +151,13 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
g2d.draw(body[2]);
if (getShowMarkers()) {
String[] markers =
SwitchUtils.getSwitchingMarkers(this, getControlPointCount(), false);
String[] markers;
if(type == LeverSwitchType.DP3T_5pos_2502N) {
markers = new String[]{"1", "2", "3", "4", "5", "6", "7", "8"};
} else {
markers = SwitchUtils.getSwitchingMarkers(this, getControlPointCount(), false);
}
double theta = getAngle().getValueRad();
g2d.setColor(MARKER_COLOR);
@@ -203,11 +208,13 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
|| type == LeverSwitchType.DP3T_5pos) {
x += terminalLength;
yOffset = 7;
} else if (type == LeverSwitchType.DP3T_5pos_Import) {
} else if (type == LeverSwitchType.DP3T_5pos_Import || type == LeverSwitchType.DP3T_5pos_2502N) {
yOffset = 10;
} else if (type == LeverSwitchType._6_WAY_OG) {
x += terminalLength;
yOffset = 8;
} else if (type == LeverSwitchType._4P3T) {
yOffset = 8;
} else {
yOffset = 12;
}
@@ -236,6 +243,11 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
- (waferLength - terminalSpacing * 12) / 2, waferThickness,
waferLength)));
}
if (type == LeverSwitchType._4P3T) {
waferArea.add(new Area(new Rectangle2D.Double(x - terminalLength / 2 - waferThickness / 2 + waferSpacing, y
- (waferLength - terminalSpacing * 8) / 2, waferThickness,
waferLength)));
}
double theta = getAngle().getValueRad();
@@ -299,6 +311,7 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
}
break;
case DP3T_5pos_Import:
case DP3T_5pos_2502N:
controlPoints = new Point2D[8];
terminalSpacing *= 1.5;
for (int i = 0; i < controlPoints.length; i++) {
@@ -332,6 +345,13 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
controlPoints[i + 24] = new Point2D.Double(x + waferSpacing * 2, y + i * terminalSpacing + (i >= 6 ? terminalSpacing : 0));
}
break;
case _4P3T:
controlPoints = new Point2D[16];
for (int i = 0; i < controlPoints.length / 2; i++) {
controlPoints[i] = new Point2D.Double(x, y + i * terminalSpacing + (i >= 4 ? terminalSpacing : 0));
controlPoints[i + 8] = new Point2D.Double(x + waferSpacing, y + i * terminalSpacing + (i >= 4 ? terminalSpacing : 0));
}
break;
}
// Rotate if needed
@@ -464,6 +484,12 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
case _6P5T:
return ((index1 == 0 || index1 == 12 || index1 == 24) && index2 - index1 == position + 1)
|| ((index2 == 11 || index2 == 23 || index2 == 35) && index2 - index1 == 5 - position);
case _4P3T:
return ((index1 == 0 || index1 == 8) && index2 - index1 == position + 1)
|| ((index2 == 7 || index2 == 15) && index2 - index1 == 3 - position);
case DP3T_5pos_2502N:
positionConnections = DP3T_5pos_2502N_CONNECTIONS.get(position);
break;
}
if (positionConnections != null) {
@@ -542,6 +568,32 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
) // position 6
);
private static final List<List<int[]>> DP3T_5pos_2502N_CONNECTIONS = Arrays.asList(
Arrays.asList(
new int[] { 0, 3 }
), // position 1
Arrays.asList(
new int[] { 0, 3 },
new int[] { 1, 3 },
new int[] { 4, 7 },
new int[] { 5, 7 }
), // position 2
Arrays.asList(
new int[] { 0, 3 },
new int[] { 2, 3 },
new int[] { 6, 7 }
), // position 3
Arrays.asList(
new int[] { 1, 3 },
new int[] { 2, 3 },
new int[] { 5, 7 }
), // position 4
Arrays.asList(
new int[] { 2, 3 },
new int[] { 6, 7 }
) // position 5
);
@DynamicEditableProperty(source = LeverSwitchPositionPropertyValueSource.class)
@EditableProperty(name = "Selected Position")
@Override
@@ -576,7 +628,9 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
DP4T("DP4T (4-Position Tele)", 4),
_6_WAY_OG("DP4T (6-Position Oak Grigsby)", 6),
DP5T("DP5T", 5),
_6P5T("6P5T (5-Position 6 Pole AxLabs)", 5);
_6P5T("6P5T (5-Position 6 Pole AxLabs)", 5),
_4P3T("4P3T (3-Position 3 Pole AxLabs)", 3),
DP3T_5pos_2502N("DP3T (Import 5-Position 2502N)", 5);
private final int positionCount;
private String title;
@@ -43,6 +43,19 @@ public class LeverSwitchTests extends AbstractSwitchTests {
leverSwitch.setValue(LeverSwitchType._6P5T);
testSwitch(leverSwitch, validCombinations);
}
@Test
public void testLeverSwitch4P3T() {
LeverSwitch leverSwitch = new LeverSwitch();
String[] validCombinations = new String[] {
"0,0,1", "0,4,7", "0,8,9", "0,12,15",
"1,0,2", "1,5,7", "1,8,10", "1,13,15",
"2,0,3", "2,6,7", "2,8,11", "2,14,15",
};
leverSwitch.setValue(LeverSwitchType._4P3T);
testSwitch(leverSwitch, validCombinations);
}
@Test
public void testLeverSwitchImport() {
@@ -65,4 +78,20 @@ public class LeverSwitchTests extends AbstractSwitchTests {
leverSwitch.setValue(LeverSwitchType._6_WAY_OG);
testSwitch(leverSwitch, validCombinations);
}
@Test
public void testLeverSwitchImport2502N() {
LeverSwitch leverSwitch = new LeverSwitch();
String[] validCombinations = new String[] {
"0,0,3",
"1,0,3", "1,1,3", "1,4,7", "1,5,7",
"2,0,3", "2,2,3", "2,6,7",
"3,1,3", "3,2,3", "3,5,7",
"4,2,3", "4,6,7",
};
leverSwitch.setValue(LeverSwitchType.DP3T_5pos_2502N);
testSwitch(leverSwitch, validCombinations);
}
}
+1 -1
View File
@@ -129,7 +129,7 @@ INSERT INTO diylc_knowledge_base (category, section, content) ('Component Types'
"type" : "java.lang.Boolean"
}, {
"name" : "Type",
"type" : "org.diylc.components.guitar.LeverSwitch$LeverSwitchType(DP3T (Standard 3-Position Strat),DP3T (Standard 5-Position Strat),DP3T (Import 5-Position Strat),4P5T (Super/Mega),DP4T (4-Position Tele),DP4T (6-Position Oak Grigsby),DP5T,6P5T (5-Position 6 Pole AxLabs))"
"type" : "org.diylc.components.guitar.LeverSwitch$LeverSwitchType(DP3T (Standard 3-Position Strat),DP3T (Standard 5-Position Strat),DP3T (Import 5-Position Strat),4P5T (Super/Mega),DP4T (4-Position Tele),DP4T (6-Position Oak Grigsby),DP5T,6P5T (5-Position 6 Pole AxLabs)),4P3T (3-Position 3 Pole AxLabs),DP3T (Import 5-Position 2502N)"
}, {
"name" : "Angle",
"type" : "org.diylc.core.Angle"