Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 396c150472 | |||
| c47ff3a8fc | |||
| bf7fdafef5 | |||
| 35bf22edea | |||
| f249ba6b9e | |||
| 0d2475d4f6 | |||
| 2ae30b9630 | |||
| e751c20e93 | |||
| 12ac7fe809 | |||
| 1ae9c17cb0 | |||
| 75d0accc5a | |||
| 54179e2d7b | |||
| 732281f3d7 | |||
| 1a4b40d36c | |||
| 55c48c6b24 | |||
| b7fece1edb | |||
| 3ba4434b66 | |||
| e369ea6200 | |||
| 3e043a8387 | |||
| 1dfef6dd6b | |||
| ab16636860 |
@@ -1,39 +1,3 @@
|
||||
Switch setup: [ 3-Way-Switch.Middle:Push Pull.ON1:Rhythm Circuit.ON1 ]
|
||||
|
||||
Bridge.South Finish <-> Lead Tone.1 <-> Lead Volume.3 <-> Neck.North Finish
|
||||
Bridge.South Start <-> GND <-> Lead Tone Cap.2 <-> Lead Volume.1 <-> Neck.North Start <-> Output.Sleeve <-> RC Tone Cap.1 <-> RC Volume.1
|
||||
Lead Tone Cap.1 <-> Lead Tone.2
|
||||
Lead Volume.2 <-> Output.Tip
|
||||
RC Tone Cap.2 <-> RC Tone.2
|
||||
RC Tone.1 <-> RC Volume.3
|
||||
|
||||
Switch setup: [ 3-Way-Switch.Middle:Push Pull.ON1:Rhythm Circuit.ON2 ]
|
||||
|
||||
Bridge.South Finish <-> Neck.North Finish <-> RC Tone.1 <-> RC Volume.3
|
||||
Bridge.South Start <-> GND <-> Lead Tone Cap.2 <-> Lead Volume.1 <-> Neck.North Start <-> Output.Sleeve <-> RC Tone Cap.1 <-> RC Volume.1
|
||||
Lead Tone Cap.1 <-> Lead Tone.2
|
||||
Lead Tone.1 <-> Lead Volume.3
|
||||
Output.Tip <-> RC Volume.2
|
||||
RC Tone Cap.2 <-> RC Tone.2
|
||||
|
||||
Switch setup: [ 3-Way-Switch.Rhythm:Push Pull.ON1:Rhythm Circuit.ON1 ]
|
||||
|
||||
Bridge.South Start <-> GND <-> Lead Tone Cap.2 <-> Lead Volume.1 <-> Neck.North Start <-> Output.Sleeve <-> RC Tone Cap.1 <-> RC Volume.1
|
||||
Lead Tone Cap.1 <-> Lead Tone.2
|
||||
Lead Tone.1 <-> Lead Volume.3 <-> Neck.North Finish
|
||||
Lead Volume.2 <-> Output.Tip
|
||||
RC Tone Cap.2 <-> RC Tone.2
|
||||
RC Tone.1 <-> RC Volume.3
|
||||
|
||||
Switch setup: [ 3-Way-Switch.Rhythm:Push Pull.ON1:Rhythm Circuit.ON2 ]
|
||||
|
||||
Bridge.South Start <-> GND <-> Lead Tone Cap.2 <-> Lead Volume.1 <-> Neck.North Start <-> Output.Sleeve <-> RC Tone Cap.1 <-> RC Volume.1
|
||||
Lead Tone Cap.1 <-> Lead Tone.2
|
||||
Lead Tone.1 <-> Lead Volume.3
|
||||
Neck.North Finish <-> RC Tone.1 <-> RC Volume.3
|
||||
Output.Tip <-> RC Volume.2
|
||||
RC Tone Cap.2 <-> RC Tone.2
|
||||
|
||||
Switch setup: [ 3-Way-Switch.Treble:Push Pull.ON1:Rhythm Circuit.ON1 ]
|
||||
|
||||
Bridge.South Finish <-> Lead Tone.1 <-> Lead Volume.3
|
||||
@@ -72,3 +36,39 @@ Switch setup: [ Push Pull.ON2:Rhythm Circuit.ON2 ]
|
||||
Output.Tip <-> RC Volume.2
|
||||
RC Tone Cap.2 <-> RC Tone.2
|
||||
|
||||
Switch setup: [ 3-Way-Switch.Middle:Push Pull.ON1:Rhythm Circuit.ON1 ]
|
||||
|
||||
Bridge.South Finish <-> Lead Tone.1 <-> Lead Volume.3 <-> Neck.North Finish
|
||||
Bridge.South Start <-> GND <-> Lead Tone Cap.2 <-> Lead Volume.1 <-> Neck.North Start <-> Output.Sleeve <-> RC Tone Cap.1 <-> RC Volume.1
|
||||
Lead Tone Cap.1 <-> Lead Tone.2
|
||||
Lead Volume.2 <-> Output.Tip
|
||||
RC Tone Cap.2 <-> RC Tone.2
|
||||
RC Tone.1 <-> RC Volume.3
|
||||
|
||||
Switch setup: [ 3-Way-Switch.Middle:Push Pull.ON1:Rhythm Circuit.ON2 ]
|
||||
|
||||
Bridge.South Finish <-> Neck.North Finish <-> RC Tone.1 <-> RC Volume.3
|
||||
Bridge.South Start <-> GND <-> Lead Tone Cap.2 <-> Lead Volume.1 <-> Neck.North Start <-> Output.Sleeve <-> RC Tone Cap.1 <-> RC Volume.1
|
||||
Lead Tone Cap.1 <-> Lead Tone.2
|
||||
Lead Tone.1 <-> Lead Volume.3
|
||||
Output.Tip <-> RC Volume.2
|
||||
RC Tone Cap.2 <-> RC Tone.2
|
||||
|
||||
Switch setup: [ 3-Way-Switch.Rhythm:Push Pull.ON1:Rhythm Circuit.ON1 ]
|
||||
|
||||
Bridge.South Start <-> GND <-> Lead Tone Cap.2 <-> Lead Volume.1 <-> Neck.North Start <-> Output.Sleeve <-> RC Tone Cap.1 <-> RC Volume.1
|
||||
Lead Tone Cap.1 <-> Lead Tone.2
|
||||
Lead Tone.1 <-> Lead Volume.3 <-> Neck.North Finish
|
||||
Lead Volume.2 <-> Output.Tip
|
||||
RC Tone Cap.2 <-> RC Tone.2
|
||||
RC Tone.1 <-> RC Volume.3
|
||||
|
||||
Switch setup: [ 3-Way-Switch.Rhythm:Push Pull.ON1:Rhythm Circuit.ON2 ]
|
||||
|
||||
Bridge.South Start <-> GND <-> Lead Tone Cap.2 <-> Lead Volume.1 <-> Neck.North Start <-> Output.Sleeve <-> RC Tone Cap.1 <-> RC Volume.1
|
||||
Lead Tone Cap.1 <-> Lead Tone.2
|
||||
Lead Tone.1 <-> Lead Volume.3
|
||||
Neck.North Finish <-> RC Tone.1 <-> RC Volume.3
|
||||
Output.Tip <-> RC Volume.2
|
||||
RC Tone Cap.2 <-> RC Tone.2
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 232 KiB After Width: | Height: | Size: 231 KiB |
|
Before Width: | Height: | Size: 293 KiB After Width: | Height: | Size: 293 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 195 KiB After Width: | Height: | Size: 196 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 200 KiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 601 KiB After Width: | Height: | Size: 601 KiB |
|
Before Width: | Height: | Size: 350 KiB After Width: | Height: | Size: 350 KiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 156 KiB |
@@ -1,3 +1,20 @@
|
||||
Switch setup: [ SW1.Treble:SW2.ON1 ]
|
||||
|
||||
Bucker.North Finish <-> Bucker.North Start <-> Bucker.South Finish <-> C1.2 <-> J1.Sleeve <-> Single.North Start <-> VR1.1 <-> VR2.1
|
||||
Bucker.South Start <-> VR1.3
|
||||
C1.1 <-> VR3.2
|
||||
J1.Tip <-> VR1.2 <-> VR3.1
|
||||
Single.North Finish <-> VR2.3
|
||||
|
||||
Switch setup: [ SW1.Treble:SW2.ON2 ]
|
||||
|
||||
Bucker.North Finish <-> Bucker.South Finish
|
||||
Bucker.North Start <-> C1.2 <-> J1.Sleeve <-> Single.North Start <-> VR1.1 <-> VR2.1
|
||||
Bucker.South Start <-> VR1.3
|
||||
C1.1 <-> VR3.2
|
||||
J1.Tip <-> VR1.2 <-> VR3.1
|
||||
Single.North Finish <-> VR2.3
|
||||
|
||||
Switch setup: [ SW1.Middle:SW2.ON1 ]
|
||||
|
||||
Bucker.North Finish <-> Bucker.North Start <-> Bucker.South Finish <-> C1.2 <-> J1.Sleeve <-> Single.North Start <-> VR1.1 <-> VR2.1
|
||||
@@ -32,20 +49,3 @@ Switch setup: [ SW1.Rhythm:SW2.ON2 ]
|
||||
J1.Tip <-> VR2.2 <-> VR3.1
|
||||
Single.North Finish <-> VR2.3
|
||||
|
||||
Switch setup: [ SW1.Treble:SW2.ON1 ]
|
||||
|
||||
Bucker.North Finish <-> Bucker.North Start <-> Bucker.South Finish <-> C1.2 <-> J1.Sleeve <-> Single.North Start <-> VR1.1 <-> VR2.1
|
||||
Bucker.South Start <-> VR1.3
|
||||
C1.1 <-> VR3.2
|
||||
J1.Tip <-> VR1.2 <-> VR3.1
|
||||
Single.North Finish <-> VR2.3
|
||||
|
||||
Switch setup: [ SW1.Treble:SW2.ON2 ]
|
||||
|
||||
Bucker.North Finish <-> Bucker.South Finish
|
||||
Bucker.North Start <-> C1.2 <-> J1.Sleeve <-> Single.North Start <-> VR1.1 <-> VR2.1
|
||||
Bucker.South Start <-> VR1.3
|
||||
C1.1 <-> VR3.2
|
||||
J1.Tip <-> VR1.2 <-> VR3.1
|
||||
Single.North Finish <-> VR2.3
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Switch setup: [ ALL ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> SW1.1
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
@@ -16,7 +16,54 @@ Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON1 ]
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Sleeve <-> L4.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
J2.Sleeve <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Sleeve
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
@@ -27,136 +74,125 @@ Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON2 ]
|
||||
J2.Tip <-> L4.2
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> L4.1 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.2
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> L4.1 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.2
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Sleeve <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J2.Tip <-> L7.2
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Sleeve <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J2.Tip <-> L7.2
|
||||
J2.Sleeve <-> L4.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L4.1 <-> L6.2 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L7.2
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L4.1 <-> L6.2 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L7.2
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Sleeve <-> L4.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
J2.Sleeve <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Sleeve
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> L4.1 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.2
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON1:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> L4.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Sleeve <-> L4.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> L4.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> L4.1 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
Impedance.2 <-> J2.Tip
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> Impedance.2 <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> L4.1 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.2
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
@@ -166,142 +202,128 @@ Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON2 ]
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Sleeve <-> L7.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Sleeve <-> L7.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> L7.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> L4.1 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> L7.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> Impedance.2 <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
J2.Sleeve <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J2.Tip <-> L7.2
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON1:SW1.ON1:SW1.ON1:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
J2.Sleeve <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L4.2 <-> Level.3
|
||||
J2.Sleeve <-> L7.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> L4.1 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
J2.Sleeve <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L4.2 <-> Level.3
|
||||
L7.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON1:SW1.ON1:SW1.ON2:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> L4.1 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L4.2 <-> Level.3
|
||||
Impedance.2 <-> J2.Sleeve
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L7.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
J2.Sleeve <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L7.2 <-> Level.3
|
||||
J2.Tip <-> L7.2
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Sleeve <-> L7.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
@@ -313,130 +335,68 @@ Switch setup: [ SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON1:SW1.ON2 ]
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L7.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L4.1 <-> L6.2 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L7.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON2:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L4.1 <-> L6.2 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
Impedance.2 <-> J2.Sleeve
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L7.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L4.1 <-> L6.2 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Sleeve
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J2.Tip <-> L7.2
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON1:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> L7.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Sleeve
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L4.2 <-> Level.3
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> Impedance.2 <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L4.1 <-> L6.2 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
Impedance.2 <-> J2.Tip
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L4.2 <-> Level.3
|
||||
L7.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON2:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> Impedance.2 <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L3.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L4.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Sleeve
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L7.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Sleeve
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L7.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> J4.Tip
|
||||
@@ -448,10 +408,50 @@ Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON1 ]
|
||||
J5.Tip <-> L3.1 <-> L6.1 <-> R1.2
|
||||
L7.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L4.1 <-> L6.2 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L7.2
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON1:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L6.2 <-> L7.2 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
J2.Tip <-> L4.1 <-> L7.1 <-> Level.1
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON1 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
C2.+ <-> R1.2 <-> R1.2 <-> R1.2
|
||||
C2.- <-> C2.- <-> J2.Sleeve <-> J4.Sleeve <-> J5.Sleeve <-> J6.Center <-> L4.1 <-> L6.2 <-> L7.1 <-> Level.1 <-> R1.1 <-> R1.2 <-> TL072.4
|
||||
Impedance.1 <-> Level.2
|
||||
Impedance.2 <-> J2.Tip
|
||||
J4.Tip <-> J5.Tip <-> L3.1 <-> L6.1
|
||||
L7.2 <-> Level.3
|
||||
|
||||
Switch setup: [ SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON2:SW1.ON2 ]
|
||||
|
||||
4001.A <-> C2.+ <-> J6.Sleeve
|
||||
4001.K <-> R1.1 <-> TL072.5
|
||||
4001.K <-> R1.1 <-> TL072.8
|
||||
C1.1 <-> R1.1 <-> R1.1
|
||||
C1.1 <-> R1.1 <-> TL072.3
|
||||
C1.2 <-> TL072.1 <-> TL072.2
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
Switch setup: [ Split.ON1:SW1.Treble ]
|
||||
|
||||
Bridge.North Finish <-> Bridge.South Finish
|
||||
Bridge.North Start <-> Cbleed.1 <-> Volume.3
|
||||
Bridge.South Start <-> J1.Sleeve <-> Neck.North Finish <-> Volume.1
|
||||
Cbleed.2 <-> Rbleed.2
|
||||
J1.Tip <-> Rbleed.1 <-> Volume.2
|
||||
Neck.North Start <-> Neck.South Start
|
||||
|
||||
Switch setup: [ Split.ON1:SW1.Middle ]
|
||||
|
||||
Bridge.North Finish <-> Bridge.South Finish
|
||||
@@ -16,14 +25,12 @@ Switch setup: [ Split.ON1:SW1.Rhythm ]
|
||||
J1.Tip <-> Rbleed.1 <-> Volume.2
|
||||
Neck.North Start <-> Neck.South Start
|
||||
|
||||
Switch setup: [ Split.ON1:SW1.Treble ]
|
||||
Switch setup: [ Split.ON2:SW1.Treble ]
|
||||
|
||||
Bridge.North Finish <-> Bridge.South Finish
|
||||
Bridge.North Finish <-> Bridge.South Finish <-> Bridge.South Start <-> J1.Sleeve <-> Neck.North Finish <-> Neck.North Start <-> Neck.South Start <-> Volume.1
|
||||
Bridge.North Start <-> Cbleed.1 <-> Volume.3
|
||||
Bridge.South Start <-> J1.Sleeve <-> Neck.North Finish <-> Volume.1
|
||||
Cbleed.2 <-> Rbleed.2
|
||||
J1.Tip <-> Rbleed.1 <-> Volume.2
|
||||
Neck.North Start <-> Neck.South Start
|
||||
|
||||
Switch setup: [ Split.ON2:SW1.Middle ]
|
||||
|
||||
@@ -39,10 +46,3 @@ Switch setup: [ Split.ON2:SW1.Rhythm ]
|
||||
Cbleed.2 <-> Rbleed.2
|
||||
J1.Tip <-> Rbleed.1 <-> Volume.2
|
||||
|
||||
Switch setup: [ Split.ON2:SW1.Treble ]
|
||||
|
||||
Bridge.North Finish <-> Bridge.South Finish <-> Bridge.South Start <-> J1.Sleeve <-> Neck.North Finish <-> Neck.North Start <-> Neck.South Start <-> Volume.1
|
||||
Bridge.North Start <-> Cbleed.1 <-> Volume.3
|
||||
Cbleed.2 <-> Rbleed.2
|
||||
J1.Tip <-> Rbleed.1 <-> Volume.2
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 805 KiB After Width: | Height: | Size: 805 KiB |
|
Before Width: | Height: | Size: 268 KiB After Width: | Height: | Size: 268 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 720 KiB After Width: | Height: | Size: 721 KiB |
|
Before Width: | Height: | Size: 506 KiB After Width: | Height: | Size: 506 KiB |
|
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 208 KiB |
|
Before Width: | Height: | Size: 268 KiB After Width: | Height: | Size: 268 KiB |
@@ -1,175 +1,3 @@
|
||||
Switch setup: [ SW1.OFF:SW6.ON1,SW1.ON2:SW6.ON1 ]
|
||||
|
||||
.047 uF.1 <-> J1.Tip
|
||||
.047 uF.2 <-> 1 M.2 <-> R1.2
|
||||
.1 <-> R2.1
|
||||
.2 <-> 1 M.1 <-> 1N4007.A <-> BASS-CLEAN.1 <-> BASS-LEAD.1 <-> C1.- <-> C2.1 <-> C20.2 <-> C5.1 <-> C6.1 <-> C6.2 <-> C8.2 <-> CLEAN GAIN.1 <-> CLEAN GAIN.3 <-> D11.K <-> D13.K <-> D2.K <-> D3.A <-> D4.A <-> D5.K <-> D7.K <-> J1.Sleeve <-> J1.Tip Switch <-> LEAD GAIN.1 <-> LEAD GAIN.3 <-> LEAD VOL.1 <-> LEAD VOL.3 <-> MASTER VOL.1 <-> MIDDLE--CLEAN.1 <-> MIDDLE-LEAD.1 <-> R11.1 <-> R12.1 <-> R2.2 <-> R20.2 <-> R21.2 <-> R24.2 <-> R27.2 <-> R3.2 <-> R39.1 <-> R7.1 <-> R8.1 <-> R9.1 <-> RY1.COM2 <-> RY1.NC2 <-> RY1.NO2 <-> RY2.COM2 <-> RY2.NC2 <-> RY2.NO2
|
||||
.A <-> C31.- <-> R42.2
|
||||
.K <-> R54.1
|
||||
1N4007.K <-> C8.1 <-> D7.A <-> R15.2
|
||||
BASS-CLEAN.2 <-> BASS-CLEAN.3 <-> R29.2
|
||||
BASS-LEAD.2 <-> BASS-LEAD.3 <-> R28.2
|
||||
C1.+ <-> C2.2 <-> R3.1 <-> R4.1 <-> V1.8 <-> V1.9
|
||||
C10.1 <-> C12.2 <-> C15.1 <-> C17.2 <-> R19.1 <-> V2.6
|
||||
C10.2 <-> DUAL BASS 2--LEAD.3
|
||||
C11.1 <-> C14.2 <-> R23.2
|
||||
C11.2 <-> R22.2
|
||||
C12.1 <-> C13.1 <-> DUAL BASS 2--LEAD.2 <-> R23.1
|
||||
C13.2 <-> C21.1 <-> TREBLE-LEAD.3
|
||||
C14.1 <-> MIDDLE-LEAD.2
|
||||
C15.2 <-> DUAL BASS-CLEAN.3
|
||||
C16.1 <-> C19.2 <-> R26.2
|
||||
C16.2 <-> R25.2
|
||||
C17.1 <-> C18.1 <-> DUAL BASS-CLEAN.2 <-> R26.1
|
||||
C18.2 <-> C23.1 <-> TREBLE-CLEAN.3
|
||||
C19.1 <-> MIDDLE--CLEAN.2
|
||||
C20.1 <-> R22.1 <-> R28.1 <-> TREBLE-LEAD.1
|
||||
C21.2 <-> MIDDLE-LEAD.3
|
||||
C22.1 <-> R25.1 <-> R29.1 <-> TREBLE-CLEAN.1
|
||||
C23.2 <-> MIDDLE--CLEAN.3
|
||||
C24.1 <-> MASTER VOL.2
|
||||
C24.2 <-> R30.2
|
||||
C25.1 <-> R32.2 <-> V3.7
|
||||
C25.2 <-> R33.2 <-> R38.1 <-> RESONANCE.1
|
||||
C26.1 <-> R36.2
|
||||
C26.2 <-> C28.1 <-> R34.1
|
||||
C27.1 <-> R37.2
|
||||
C27.2 <-> C28.2 <-> R35.1
|
||||
C29.1 <-> PRESENCE.2
|
||||
C29.2 <-> PRESENCE.1
|
||||
C3.1 <-> R8.2 <-> R9.2
|
||||
C3.2 <-> C4.2 <-> R5.2 <-> V1.6
|
||||
C30.+ <-> C31.+ <-> C33.- <-> D10.A <-> D9.A <-> J30.J30Sleeve <-> R43.1 <-> V1.5
|
||||
C30.- <-> R36.1 <-> R37.1 <-> R42.1 <-> R43.2
|
||||
C32.+1 <-> R34.2 <-> R35.2 <-> R40.2 <-> R41.2
|
||||
C32.+2 <-> R41.1 <-> R48.1 <-> V6.6
|
||||
C32.- <-> J29.J29Sleeve
|
||||
C33.+1 <-> C33.+2 <-> D6.K <-> D8.K <-> FH2.1
|
||||
C34.2 <-> C5.2 <-> R6.1 <-> RY1.COM1
|
||||
C35.1 <-> PRESENCE.3 <-> RESONANCE.2 <-> RESONANCE.3
|
||||
C4.1 <-> C7.+1 <-> C7.+2 <-> R10.1 <-> R10.2 <-> R18.2 <-> R19.2 <-> R4.2 <-> R40.1 <-> R5.1 <-> R6.2 <-> R7.2 <-> V1.7
|
||||
C7.- <-> J59.J59Sleeve
|
||||
C9.1 <-> R18.1
|
||||
C9.2 <-> R17.1 <-> R20.1 <-> V2.7
|
||||
CLEAN GAIN.2 <-> RY1.NC1
|
||||
CP RY.Coil1 <-> D12.K
|
||||
D1.A <-> D3.K <-> D4.K <-> D5.A
|
||||
D1.K <-> D2.A
|
||||
D10.K <-> D6.A
|
||||
D12.A <-> R39.2
|
||||
D8.A <-> D9.K
|
||||
DUAL BASS 2--LEAD.1 <-> R24.1
|
||||
DUAL BASS-CLEAN.1 <-> R27.1
|
||||
FEEDBACK (NFB).1 <-> R38.2
|
||||
FH1.1 <-> IEC1.Neutral
|
||||
IEC1.Earth <-> J32.J32Sleeve
|
||||
J36.J36Sleeve <-> J60.Sleeve <-> J61.Sleeve <-> V5.8
|
||||
J38.J38Sleeve <-> V7.1 <-> V7.8
|
||||
J60.Tip <-> J61.Tip
|
||||
LEAD GAIN.2 <-> RY1.NO1
|
||||
LEAD VOL.2 <-> R16.1
|
||||
R13.2 <-> R14.1
|
||||
R14.2 <-> R15.1 <-> R16.2 <-> R17.2
|
||||
R30.1 <-> R31.1 <-> R32.1 <-> R33.1
|
||||
R31.2 <-> V3.8
|
||||
R46.1 <-> R47.1
|
||||
R46.2 <-> V4.4
|
||||
R47.2 <-> V5.4
|
||||
R48.2 <-> V6.4
|
||||
R50.2 <-> R51.2
|
||||
R51.1 <-> V4.5
|
||||
R52.1 <-> V6.5
|
||||
R52.2 <-> R53.2
|
||||
RY2.NO1 <-> TREBLE-LEAD.2
|
||||
V4.3 <-> V5.3
|
||||
V6.3 <-> V7.3
|
||||
|
||||
Switch setup: [ SW1.OFF:SW6.ON2,SW1.ON2:SW6.ON2 ]
|
||||
|
||||
.047 uF.1 <-> J1.Tip
|
||||
.047 uF.2 <-> 1 M.2 <-> R1.2
|
||||
.1 <-> R2.1
|
||||
.2 <-> 1 M.1 <-> 1N4007.A <-> BASS-CLEAN.1 <-> BASS-LEAD.1 <-> C1.- <-> C2.1 <-> C20.2 <-> C34.1 <-> C6.1 <-> C6.2 <-> C8.2 <-> CLEAN GAIN.1 <-> CLEAN GAIN.3 <-> D11.K <-> D13.K <-> D2.K <-> D3.A <-> D4.A <-> D5.K <-> D7.K <-> J1.Sleeve <-> J1.Tip Switch <-> LEAD GAIN.1 <-> LEAD GAIN.3 <-> LEAD VOL.1 <-> LEAD VOL.3 <-> MASTER VOL.1 <-> MIDDLE--CLEAN.1 <-> MIDDLE-LEAD.1 <-> R11.1 <-> R12.1 <-> R2.2 <-> R20.2 <-> R21.2 <-> R24.2 <-> R27.2 <-> R3.2 <-> R39.1 <-> R7.1 <-> R8.1 <-> R9.1 <-> RY1.COM2 <-> RY1.NC2 <-> RY1.NO2 <-> RY2.COM2 <-> RY2.NC2 <-> RY2.NO2
|
||||
.A <-> C31.- <-> R42.2
|
||||
.K <-> R54.1
|
||||
1N4007.K <-> C8.1 <-> D7.A <-> R15.2
|
||||
BASS-CLEAN.2 <-> BASS-CLEAN.3 <-> R29.2
|
||||
BASS-LEAD.2 <-> BASS-LEAD.3 <-> R28.2
|
||||
C1.+ <-> C2.2 <-> R3.1 <-> R4.1 <-> V1.8 <-> V1.9
|
||||
C10.1 <-> C12.2 <-> C15.1 <-> C17.2 <-> R19.1 <-> V2.6
|
||||
C10.2 <-> DUAL BASS 2--LEAD.3
|
||||
C11.1 <-> C14.2 <-> R23.2
|
||||
C11.2 <-> R22.2
|
||||
C12.1 <-> C13.1 <-> DUAL BASS 2--LEAD.2 <-> R23.1
|
||||
C13.2 <-> C21.1 <-> TREBLE-LEAD.3
|
||||
C14.1 <-> MIDDLE-LEAD.2
|
||||
C15.2 <-> DUAL BASS-CLEAN.3
|
||||
C16.1 <-> C19.2 <-> R26.2
|
||||
C16.2 <-> R25.2
|
||||
C17.1 <-> C18.1 <-> DUAL BASS-CLEAN.2 <-> R26.1
|
||||
C18.2 <-> C23.1 <-> TREBLE-CLEAN.3
|
||||
C19.1 <-> MIDDLE--CLEAN.2
|
||||
C20.1 <-> R22.1 <-> R28.1 <-> TREBLE-LEAD.1
|
||||
C21.2 <-> MIDDLE-LEAD.3
|
||||
C22.1 <-> R25.1 <-> R29.1 <-> TREBLE-CLEAN.1
|
||||
C23.2 <-> MIDDLE--CLEAN.3
|
||||
C24.1 <-> MASTER VOL.2
|
||||
C24.2 <-> R30.2
|
||||
C25.1 <-> R32.2 <-> V3.7
|
||||
C25.2 <-> R33.2 <-> R38.1 <-> RESONANCE.1
|
||||
C26.1 <-> R36.2
|
||||
C26.2 <-> C28.1 <-> R34.1
|
||||
C27.1 <-> R37.2
|
||||
C27.2 <-> C28.2 <-> R35.1
|
||||
C29.1 <-> PRESENCE.2
|
||||
C29.2 <-> PRESENCE.1
|
||||
C3.1 <-> R8.2 <-> R9.2
|
||||
C3.2 <-> C4.2 <-> R5.2 <-> V1.6
|
||||
C30.+ <-> C31.+ <-> C33.- <-> D10.A <-> D9.A <-> J30.J30Sleeve <-> R43.1 <-> V1.5
|
||||
C30.- <-> R36.1 <-> R37.1 <-> R42.1 <-> R43.2
|
||||
C32.+1 <-> R34.2 <-> R35.2 <-> R40.2 <-> R41.2
|
||||
C32.+2 <-> R41.1 <-> R48.1 <-> V6.6
|
||||
C32.- <-> J29.J29Sleeve
|
||||
C33.+1 <-> C33.+2 <-> D6.K <-> D8.K <-> FH2.1
|
||||
C34.2 <-> C5.2 <-> R6.1 <-> RY1.COM1
|
||||
C35.1 <-> PRESENCE.3 <-> RESONANCE.2 <-> RESONANCE.3
|
||||
C4.1 <-> C7.+1 <-> C7.+2 <-> R10.1 <-> R10.2 <-> R18.2 <-> R19.2 <-> R4.2 <-> R40.1 <-> R5.1 <-> R6.2 <-> R7.2 <-> V1.7
|
||||
C7.- <-> J59.J59Sleeve
|
||||
C9.1 <-> R18.1
|
||||
C9.2 <-> R17.1 <-> R20.1 <-> V2.7
|
||||
CLEAN GAIN.2 <-> RY1.NC1
|
||||
CP RY.Coil1 <-> D12.K
|
||||
D1.A <-> D3.K <-> D4.K <-> D5.A
|
||||
D1.K <-> D2.A
|
||||
D10.K <-> D6.A
|
||||
D12.A <-> R39.2
|
||||
D8.A <-> D9.K
|
||||
DUAL BASS 2--LEAD.1 <-> R24.1
|
||||
DUAL BASS-CLEAN.1 <-> R27.1
|
||||
FEEDBACK (NFB).1 <-> R38.2
|
||||
FH1.1 <-> IEC1.Neutral
|
||||
IEC1.Earth <-> J32.J32Sleeve
|
||||
J36.J36Sleeve <-> J60.Sleeve <-> J61.Sleeve <-> V5.8
|
||||
J38.J38Sleeve <-> V7.1 <-> V7.8
|
||||
J60.Tip <-> J61.Tip
|
||||
LEAD GAIN.2 <-> RY1.NO1
|
||||
LEAD VOL.2 <-> R16.1
|
||||
R13.2 <-> R14.1
|
||||
R14.2 <-> R15.1 <-> R16.2 <-> R17.2
|
||||
R30.1 <-> R31.1 <-> R32.1 <-> R33.1
|
||||
R31.2 <-> V3.8
|
||||
R46.1 <-> R47.1
|
||||
R46.2 <-> V4.4
|
||||
R47.2 <-> V5.4
|
||||
R48.2 <-> V6.4
|
||||
R50.2 <-> R51.2
|
||||
R51.1 <-> V4.5
|
||||
R52.1 <-> V6.5
|
||||
R52.2 <-> R53.2
|
||||
RY2.NO1 <-> TREBLE-LEAD.2
|
||||
V4.3 <-> V5.3
|
||||
V6.3 <-> V7.3
|
||||
|
||||
Switch setup: [ SW1.ON1:SW6.ON1 ]
|
||||
|
||||
.047 uF.1 <-> J1.Tip
|
||||
@@ -340,3 +168,175 @@ Switch setup: [ SW1.ON1:SW6.ON2 ]
|
||||
V4.3 <-> V5.3
|
||||
V6.3 <-> V7.3
|
||||
|
||||
Switch setup: [ SW1.OFF:SW6.ON1, SW1.ON2:SW6.ON1 ]
|
||||
|
||||
.047 uF.1 <-> J1.Tip
|
||||
.047 uF.2 <-> 1 M.2 <-> R1.2
|
||||
.1 <-> R2.1
|
||||
.2 <-> 1 M.1 <-> 1N4007.A <-> BASS-CLEAN.1 <-> BASS-LEAD.1 <-> C1.- <-> C2.1 <-> C20.2 <-> C5.1 <-> C6.1 <-> C6.2 <-> C8.2 <-> CLEAN GAIN.1 <-> CLEAN GAIN.3 <-> D11.K <-> D13.K <-> D2.K <-> D3.A <-> D4.A <-> D5.K <-> D7.K <-> J1.Sleeve <-> J1.Tip Switch <-> LEAD GAIN.1 <-> LEAD GAIN.3 <-> LEAD VOL.1 <-> LEAD VOL.3 <-> MASTER VOL.1 <-> MIDDLE--CLEAN.1 <-> MIDDLE-LEAD.1 <-> R11.1 <-> R12.1 <-> R2.2 <-> R20.2 <-> R21.2 <-> R24.2 <-> R27.2 <-> R3.2 <-> R39.1 <-> R7.1 <-> R8.1 <-> R9.1 <-> RY1.COM2 <-> RY1.NC2 <-> RY1.NO2 <-> RY2.COM2 <-> RY2.NC2 <-> RY2.NO2
|
||||
.A <-> C31.- <-> R42.2
|
||||
.K <-> R54.1
|
||||
1N4007.K <-> C8.1 <-> D7.A <-> R15.2
|
||||
BASS-CLEAN.2 <-> BASS-CLEAN.3 <-> R29.2
|
||||
BASS-LEAD.2 <-> BASS-LEAD.3 <-> R28.2
|
||||
C1.+ <-> C2.2 <-> R3.1 <-> R4.1 <-> V1.8 <-> V1.9
|
||||
C10.1 <-> C12.2 <-> C15.1 <-> C17.2 <-> R19.1 <-> V2.6
|
||||
C10.2 <-> DUAL BASS 2--LEAD.3
|
||||
C11.1 <-> C14.2 <-> R23.2
|
||||
C11.2 <-> R22.2
|
||||
C12.1 <-> C13.1 <-> DUAL BASS 2--LEAD.2 <-> R23.1
|
||||
C13.2 <-> C21.1 <-> TREBLE-LEAD.3
|
||||
C14.1 <-> MIDDLE-LEAD.2
|
||||
C15.2 <-> DUAL BASS-CLEAN.3
|
||||
C16.1 <-> C19.2 <-> R26.2
|
||||
C16.2 <-> R25.2
|
||||
C17.1 <-> C18.1 <-> DUAL BASS-CLEAN.2 <-> R26.1
|
||||
C18.2 <-> C23.1 <-> TREBLE-CLEAN.3
|
||||
C19.1 <-> MIDDLE--CLEAN.2
|
||||
C20.1 <-> R22.1 <-> R28.1 <-> TREBLE-LEAD.1
|
||||
C21.2 <-> MIDDLE-LEAD.3
|
||||
C22.1 <-> R25.1 <-> R29.1 <-> TREBLE-CLEAN.1
|
||||
C23.2 <-> MIDDLE--CLEAN.3
|
||||
C24.1 <-> MASTER VOL.2
|
||||
C24.2 <-> R30.2
|
||||
C25.1 <-> R32.2 <-> V3.7
|
||||
C25.2 <-> R33.2 <-> R38.1 <-> RESONANCE.1
|
||||
C26.1 <-> R36.2
|
||||
C26.2 <-> C28.1 <-> R34.1
|
||||
C27.1 <-> R37.2
|
||||
C27.2 <-> C28.2 <-> R35.1
|
||||
C29.1 <-> PRESENCE.2
|
||||
C29.2 <-> PRESENCE.1
|
||||
C3.1 <-> R8.2 <-> R9.2
|
||||
C3.2 <-> C4.2 <-> R5.2 <-> V1.6
|
||||
C30.+ <-> C31.+ <-> C33.- <-> D10.A <-> D9.A <-> J30.J30Sleeve <-> R43.1 <-> V1.5
|
||||
C30.- <-> R36.1 <-> R37.1 <-> R42.1 <-> R43.2
|
||||
C32.+1 <-> R34.2 <-> R35.2 <-> R40.2 <-> R41.2
|
||||
C32.+2 <-> R41.1 <-> R48.1 <-> V6.6
|
||||
C32.- <-> J29.J29Sleeve
|
||||
C33.+1 <-> C33.+2 <-> D6.K <-> D8.K <-> FH2.1
|
||||
C34.2 <-> C5.2 <-> R6.1 <-> RY1.COM1
|
||||
C35.1 <-> PRESENCE.3 <-> RESONANCE.2 <-> RESONANCE.3
|
||||
C4.1 <-> C7.+1 <-> C7.+2 <-> R10.1 <-> R10.2 <-> R18.2 <-> R19.2 <-> R4.2 <-> R40.1 <-> R5.1 <-> R6.2 <-> R7.2 <-> V1.7
|
||||
C7.- <-> J59.J59Sleeve
|
||||
C9.1 <-> R18.1
|
||||
C9.2 <-> R17.1 <-> R20.1 <-> V2.7
|
||||
CLEAN GAIN.2 <-> RY1.NC1
|
||||
CP RY.Coil1 <-> D12.K
|
||||
D1.A <-> D3.K <-> D4.K <-> D5.A
|
||||
D1.K <-> D2.A
|
||||
D10.K <-> D6.A
|
||||
D12.A <-> R39.2
|
||||
D8.A <-> D9.K
|
||||
DUAL BASS 2--LEAD.1 <-> R24.1
|
||||
DUAL BASS-CLEAN.1 <-> R27.1
|
||||
FEEDBACK (NFB).1 <-> R38.2
|
||||
FH1.1 <-> IEC1.Neutral
|
||||
IEC1.Earth <-> J32.J32Sleeve
|
||||
J36.J36Sleeve <-> J60.Sleeve <-> J61.Sleeve <-> V5.8
|
||||
J38.J38Sleeve <-> V7.1 <-> V7.8
|
||||
J60.Tip <-> J61.Tip
|
||||
LEAD GAIN.2 <-> RY1.NO1
|
||||
LEAD VOL.2 <-> R16.1
|
||||
R13.2 <-> R14.1
|
||||
R14.2 <-> R15.1 <-> R16.2 <-> R17.2
|
||||
R30.1 <-> R31.1 <-> R32.1 <-> R33.1
|
||||
R31.2 <-> V3.8
|
||||
R46.1 <-> R47.1
|
||||
R46.2 <-> V4.4
|
||||
R47.2 <-> V5.4
|
||||
R48.2 <-> V6.4
|
||||
R50.2 <-> R51.2
|
||||
R51.1 <-> V4.5
|
||||
R52.1 <-> V6.5
|
||||
R52.2 <-> R53.2
|
||||
RY2.NO1 <-> TREBLE-LEAD.2
|
||||
V4.3 <-> V5.3
|
||||
V6.3 <-> V7.3
|
||||
|
||||
Switch setup: [ SW1.OFF:SW6.ON2, SW1.ON2:SW6.ON2 ]
|
||||
|
||||
.047 uF.1 <-> J1.Tip
|
||||
.047 uF.2 <-> 1 M.2 <-> R1.2
|
||||
.1 <-> R2.1
|
||||
.2 <-> 1 M.1 <-> 1N4007.A <-> BASS-CLEAN.1 <-> BASS-LEAD.1 <-> C1.- <-> C2.1 <-> C20.2 <-> C34.1 <-> C6.1 <-> C6.2 <-> C8.2 <-> CLEAN GAIN.1 <-> CLEAN GAIN.3 <-> D11.K <-> D13.K <-> D2.K <-> D3.A <-> D4.A <-> D5.K <-> D7.K <-> J1.Sleeve <-> J1.Tip Switch <-> LEAD GAIN.1 <-> LEAD GAIN.3 <-> LEAD VOL.1 <-> LEAD VOL.3 <-> MASTER VOL.1 <-> MIDDLE--CLEAN.1 <-> MIDDLE-LEAD.1 <-> R11.1 <-> R12.1 <-> R2.2 <-> R20.2 <-> R21.2 <-> R24.2 <-> R27.2 <-> R3.2 <-> R39.1 <-> R7.1 <-> R8.1 <-> R9.1 <-> RY1.COM2 <-> RY1.NC2 <-> RY1.NO2 <-> RY2.COM2 <-> RY2.NC2 <-> RY2.NO2
|
||||
.A <-> C31.- <-> R42.2
|
||||
.K <-> R54.1
|
||||
1N4007.K <-> C8.1 <-> D7.A <-> R15.2
|
||||
BASS-CLEAN.2 <-> BASS-CLEAN.3 <-> R29.2
|
||||
BASS-LEAD.2 <-> BASS-LEAD.3 <-> R28.2
|
||||
C1.+ <-> C2.2 <-> R3.1 <-> R4.1 <-> V1.8 <-> V1.9
|
||||
C10.1 <-> C12.2 <-> C15.1 <-> C17.2 <-> R19.1 <-> V2.6
|
||||
C10.2 <-> DUAL BASS 2--LEAD.3
|
||||
C11.1 <-> C14.2 <-> R23.2
|
||||
C11.2 <-> R22.2
|
||||
C12.1 <-> C13.1 <-> DUAL BASS 2--LEAD.2 <-> R23.1
|
||||
C13.2 <-> C21.1 <-> TREBLE-LEAD.3
|
||||
C14.1 <-> MIDDLE-LEAD.2
|
||||
C15.2 <-> DUAL BASS-CLEAN.3
|
||||
C16.1 <-> C19.2 <-> R26.2
|
||||
C16.2 <-> R25.2
|
||||
C17.1 <-> C18.1 <-> DUAL BASS-CLEAN.2 <-> R26.1
|
||||
C18.2 <-> C23.1 <-> TREBLE-CLEAN.3
|
||||
C19.1 <-> MIDDLE--CLEAN.2
|
||||
C20.1 <-> R22.1 <-> R28.1 <-> TREBLE-LEAD.1
|
||||
C21.2 <-> MIDDLE-LEAD.3
|
||||
C22.1 <-> R25.1 <-> R29.1 <-> TREBLE-CLEAN.1
|
||||
C23.2 <-> MIDDLE--CLEAN.3
|
||||
C24.1 <-> MASTER VOL.2
|
||||
C24.2 <-> R30.2
|
||||
C25.1 <-> R32.2 <-> V3.7
|
||||
C25.2 <-> R33.2 <-> R38.1 <-> RESONANCE.1
|
||||
C26.1 <-> R36.2
|
||||
C26.2 <-> C28.1 <-> R34.1
|
||||
C27.1 <-> R37.2
|
||||
C27.2 <-> C28.2 <-> R35.1
|
||||
C29.1 <-> PRESENCE.2
|
||||
C29.2 <-> PRESENCE.1
|
||||
C3.1 <-> R8.2 <-> R9.2
|
||||
C3.2 <-> C4.2 <-> R5.2 <-> V1.6
|
||||
C30.+ <-> C31.+ <-> C33.- <-> D10.A <-> D9.A <-> J30.J30Sleeve <-> R43.1 <-> V1.5
|
||||
C30.- <-> R36.1 <-> R37.1 <-> R42.1 <-> R43.2
|
||||
C32.+1 <-> R34.2 <-> R35.2 <-> R40.2 <-> R41.2
|
||||
C32.+2 <-> R41.1 <-> R48.1 <-> V6.6
|
||||
C32.- <-> J29.J29Sleeve
|
||||
C33.+1 <-> C33.+2 <-> D6.K <-> D8.K <-> FH2.1
|
||||
C34.2 <-> C5.2 <-> R6.1 <-> RY1.COM1
|
||||
C35.1 <-> PRESENCE.3 <-> RESONANCE.2 <-> RESONANCE.3
|
||||
C4.1 <-> C7.+1 <-> C7.+2 <-> R10.1 <-> R10.2 <-> R18.2 <-> R19.2 <-> R4.2 <-> R40.1 <-> R5.1 <-> R6.2 <-> R7.2 <-> V1.7
|
||||
C7.- <-> J59.J59Sleeve
|
||||
C9.1 <-> R18.1
|
||||
C9.2 <-> R17.1 <-> R20.1 <-> V2.7
|
||||
CLEAN GAIN.2 <-> RY1.NC1
|
||||
CP RY.Coil1 <-> D12.K
|
||||
D1.A <-> D3.K <-> D4.K <-> D5.A
|
||||
D1.K <-> D2.A
|
||||
D10.K <-> D6.A
|
||||
D12.A <-> R39.2
|
||||
D8.A <-> D9.K
|
||||
DUAL BASS 2--LEAD.1 <-> R24.1
|
||||
DUAL BASS-CLEAN.1 <-> R27.1
|
||||
FEEDBACK (NFB).1 <-> R38.2
|
||||
FH1.1 <-> IEC1.Neutral
|
||||
IEC1.Earth <-> J32.J32Sleeve
|
||||
J36.J36Sleeve <-> J60.Sleeve <-> J61.Sleeve <-> V5.8
|
||||
J38.J38Sleeve <-> V7.1 <-> V7.8
|
||||
J60.Tip <-> J61.Tip
|
||||
LEAD GAIN.2 <-> RY1.NO1
|
||||
LEAD VOL.2 <-> R16.1
|
||||
R13.2 <-> R14.1
|
||||
R14.2 <-> R15.1 <-> R16.2 <-> R17.2
|
||||
R30.1 <-> R31.1 <-> R32.1 <-> R33.1
|
||||
R31.2 <-> V3.8
|
||||
R46.1 <-> R47.1
|
||||
R46.2 <-> V4.4
|
||||
R47.2 <-> V5.4
|
||||
R48.2 <-> V6.4
|
||||
R50.2 <-> R51.2
|
||||
R51.1 <-> V4.5
|
||||
R52.1 <-> V6.5
|
||||
R52.2 <-> R53.2
|
||||
RY2.NO1 <-> TREBLE-LEAD.2
|
||||
V4.3 <-> V5.3
|
||||
V6.3 <-> V7.3
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ Switch setup: [ ALL ]
|
||||
100k.1 <-> 150p.1
|
||||
100k.2 <-> 100k.2 <-> 22u 450v.+ <-> 470k.2 <-> 470k.2 <-> 47k.2 <-> 4k7.1 <-> 4k7.2 <-> 820.2
|
||||
100u 100v.+ <-> 270 3W.1
|
||||
10k 2W.1 <-> 1k 2w.2 <-> 1k 2W.2 <-> L2.1
|
||||
10k 2W.1 <-> 1k 2W.2 <-> 1k 2w.2 <-> L2.1
|
||||
1k5.2 <-> 1k5.2
|
||||
D1.K <-> D3.A
|
||||
D2.K <-> D4.A
|
||||
|
||||
@@ -13,7 +13,7 @@ Switch setup: [ ALL ]
|
||||
100k.1 <-> 150p.1
|
||||
100k.2 <-> 100k.2 <-> 22u 450v.+ <-> 470k.2 <-> 470k.2 <-> 47k.2 <-> 4k7.1 <-> 4k7.2 <-> 820.2
|
||||
100u 100v.+ <-> 270 3W.1
|
||||
10k 2W.1 <-> 1k 2w.2 <-> 1k 2W.2 <-> L2.1
|
||||
10k 2W.1 <-> 1k 2W.2 <-> 1k 2w.2 <-> L2.1
|
||||
1k5.2 <-> 1k5.2
|
||||
D1.K <-> D3.A
|
||||
D2.K <-> D4.A
|
||||
|
||||
|
Before Width: | Height: | Size: 3.6 MiB After Width: | Height: | Size: 3.6 MiB |
|
Before Width: | Height: | Size: 251 KiB After Width: | Height: | Size: 251 KiB |
|
Before Width: | Height: | Size: 2.5 MiB After Width: | Height: | Size: 2.5 MiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 13 MiB After Width: | Height: | Size: 13 MiB |
|
Before Width: | Height: | Size: 358 KiB After Width: | Height: | Size: 358 KiB |
|
Before Width: | Height: | Size: 862 KiB After Width: | Height: | Size: 862 KiB |
|
Before Width: | Height: | Size: 314 KiB After Width: | Height: | Size: 314 KiB |
|
Before Width: | Height: | Size: 3.8 MiB After Width: | Height: | Size: 3.8 MiB |
|
Before Width: | Height: | Size: 351 KiB After Width: | Height: | Size: 351 KiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 582 KiB After Width: | Height: | Size: 582 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 251 KiB After Width: | Height: | Size: 251 KiB |
|
Before Width: | Height: | Size: 266 KiB After Width: | Height: | Size: 266 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 202 KiB After Width: | Height: | Size: 204 KiB |
|
Before Width: | Height: | Size: 274 KiB After Width: | Height: | Size: 275 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 216 KiB |
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 308 KiB After Width: | Height: | Size: 308 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 226 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 213 KiB After Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 318 KiB After Width: | Height: | Size: 319 KiB |
|
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 141 KiB |
@@ -0,0 +1,102 @@
|
||||
OK,Failed,Total Time,Avg Time
|
||||
38,59,278979,2876
|
||||
|
||||
|
||||
File,Status,Message,Time
|
||||
12v_supply.diy,OK,,3351
|
||||
211.diy,FAILED,Images do not match!,1890
|
||||
255.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,3323
|
||||
2555X BOARD LAYOUT RESaddTSRELAYnew.diy,FAILED,Images do not match!;Netlists do not match with switches,18596
|
||||
259.diy,FAILED,Images do not match!,3580
|
||||
291.diy,OK,,998
|
||||
315.diy,OK,,4401
|
||||
331.diy,FAILED,Images do not match!,1607
|
||||
360.diy,OK,,498
|
||||
367.diy,FAILED,Images do not match!,3097
|
||||
374.diy,FAILED,Images do not match!,2103
|
||||
414.diy,OK,,490
|
||||
419.diy,FAILED,Images do not match!,2224
|
||||
448.diy,OK,,1509
|
||||
451.diy,FAILED,Images do not match!,5089
|
||||
480.diy,OK,,893
|
||||
523.diy,OK,,1088
|
||||
537.diy,FAILED,Images do not match!,1706
|
||||
543.diy,FAILED,Images do not match!,1238
|
||||
546.diy,OK,,283
|
||||
548.diy,OK,,1104
|
||||
560.diy,OK,,1155
|
||||
562.diy,FAILED,Netlists do not match with switches,2258
|
||||
565.diy,OK,,1002
|
||||
578.diy,FAILED,Images do not match!,3484
|
||||
580.diy,FAILED,Images do not match!,3701
|
||||
581.diy,FAILED,Images do not match!,10362
|
||||
606.diy,FAILED,Images do not match!,2130
|
||||
610.diy,OK,,1311
|
||||
614.diy,OK,,982
|
||||
6Y6 Express 2.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,2895
|
||||
801.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,450
|
||||
9V_supply_regulated.diy,FAILED,Images do not match!,2301
|
||||
ALU board with interface.diy,OK,,1149
|
||||
AllTube Schem.diy,OK,,4021
|
||||
Blue 7.diy,OK,,257
|
||||
BrownfaceReverb Schematic 2.diy,OK,,1449
|
||||
Bus decoder board (RL,Z2,Z1,Z0).diy,FAILED,Images do not match!,4038
|
||||
DR18Tagstrip.diy,FAILED,Images do not match!,7686
|
||||
Deluxe_Micro_EF80_Layout.diy,FAILED,Images do not match!,4101
|
||||
Fender_Bassman_5F6_5F6A.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,544
|
||||
IIc+.diy,FAILED,Images do not match!,2567
|
||||
Ibanez Balance-Master Mod.diy,OK,,991
|
||||
LM386 Voltage Converter.diy,FAILED,Images do not match!,1709
|
||||
LargeBandMaster.diy,FAILED,Images do not match!,50814
|
||||
Lectrolab schematic.diy,OK,,2194
|
||||
PCF DI Cable Diagram.diy,OK,,1320
|
||||
ProTremoVerb Schematic.diy,OK,,2041
|
||||
RAM board 2.diy,FAILED,Images do not match!,6668
|
||||
RR2104_Master_Volume_6V6_Schematic.diy,OK,,878
|
||||
Radio Amp Noval.diy,FAILED,Images do not match!,2495
|
||||
Register board (LSB).diy,FAILED,Images do not match!,3256
|
||||
Rix 18 watt.diy,OK,,247
|
||||
Rix AC15 Xlite.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,202
|
||||
Rix Baby Blue.diy,OK,,256
|
||||
Rix Bassman.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,1838
|
||||
Rix JD stout.diy,FAILED,Netlists do not match with switches;Netlists do not match without switches,210
|
||||
Rix Junior AB763.diy,OK,,696
|
||||
Rix Junior.diy,OK,,242
|
||||
Rix Plexi 6V6.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,368
|
||||
Rix Pro Jr.diy,OK,,235
|
||||
Silvertone 1484 v6f.diy,FAILED,Images do not match!,16076
|
||||
Stack Pointer board.diy,FAILED,Images do not match!,3606
|
||||
Synth Oscllator_v1.diy,FAILED,Images do not match!,3241
|
||||
Thunderbolt Mk3.diy,OK,,233
|
||||
antiquity_fuzz.diy,FAILED,Images do not match!,1833
|
||||
b_blender.diy,FAILED,Images do not match!,1749
|
||||
bixonix_expandora.diy,FAILED,Images do not match!,2173
|
||||
dallas_rangemaster_pcb.diy,FAILED,Images do not match!,2082
|
||||
deacy.diy,FAILED,Images do not match!,527
|
||||
dist_layout.diy,FAILED,Images do not match!,2051
|
||||
dyna_comp_perf.diy,FAILED,Images do not match!,2149
|
||||
eh_octave_multiplexer.diy,FAILED,Images do not match!,1875
|
||||
fetzer_ruby.diy,FAILED,Images do not match!,1795
|
||||
fetzer_valve.diy,FAILED,Images do not match!,1934
|
||||
fetzer_valve_deluxe_2.diy,FAILED,Images do not match!,4194
|
||||
fetzer_valve_deluxe_perf.diy,FAILED,Images do not match!,2301
|
||||
flexi_clip.diy,FAILED,Images do not match!,2916
|
||||
ga5t_preamp.diy,FAILED,Images do not match!,2591
|
||||
jfet boost.diy,OK,,56
|
||||
lp switch + pots.diy,FAILED,Netlists do not match with switches,1232
|
||||
lxh2_marshall_amp_sim.diy,FAILED,Images do not match!,2460
|
||||
orange_treble_bass_booster_2.diy,FAILED,Images do not match!,2055
|
||||
puzzle87_comp.diy,FAILED,Images do not match!,2224
|
||||
rangemaster.diy,FAILED,Images do not match!,344
|
||||
roger_mayer_octavia_vero.diy,FAILED,Images do not match!,1839
|
||||
ruby.diy,FAILED,Images do not match!,360
|
||||
shaka_hv.diy,FAILED,Images do not match!,2100
|
||||
signal_gen.diy,FAILED,Images do not match!,1743
|
||||
slo2.diy,FAILED,Images do not match!,5183
|
||||
soapdodger2.diy,FAILED,Images do not match!,3172
|
||||
splitter2.diy,FAILED,Images do not match!;Netlists do not match with switches;Netlists do not match without switches,2225
|
||||
standard strat.diy,OK,,1619
|
||||
tda1521a-2.diy,FAILED,Images do not match!,879
|
||||
timmy7.diy,FAILED,Images do not match!,1942
|
||||
travelcaster3 (new format).diy,FAILED,Netlists do not match with switches,392
|
||||
wah2.diy,FAILED,Images do not match!,2257
|
||||
|
@@ -0,0 +1,102 @@
|
||||
OK,Failed,Total Time,Avg Time
|
||||
97,0,166731,1718
|
||||
|
||||
|
||||
File,Status,Message,Time
|
||||
12v_supply.diy,OK,,3536
|
||||
211.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,1793
|
||||
255.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,4205
|
||||
2555X BOARD LAYOUT RESaddTSRELAYnew.diy,OK,,6859
|
||||
259.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,2890
|
||||
291.diy,OK,,1282
|
||||
315.diy,OK,,4164
|
||||
331.diy,OK,,896
|
||||
360.diy,OK,,668
|
||||
367.diy,OK,,1104
|
||||
374.diy,OK,,1980
|
||||
414.diy,OK,,486
|
||||
419.diy,OK,,1433
|
||||
448.diy,OK,,3171
|
||||
451.diy,OK,,2006
|
||||
480.diy,OK,,994
|
||||
523.diy,OK,,960
|
||||
537.diy,OK,,963
|
||||
543.diy,OK,,892
|
||||
546.diy,OK,,338
|
||||
548.diy,OK,,1017
|
||||
560.diy,OK,,1216
|
||||
562.diy,OK,,1746
|
||||
565.diy,OK,,1049
|
||||
578.diy,OK,,2598
|
||||
580.diy,OK,,1719
|
||||
581.diy,OK,,4322
|
||||
606.diy,OK,,1386
|
||||
610.diy,OK,,1561
|
||||
614.diy,OK,,1179
|
||||
6Y6 Express 2.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,3103
|
||||
801.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,678
|
||||
9V_supply_regulated.diy,OK,<html>File was opened, but there were some issues with it:<br><br>Could not recognize component type Transformer<br></html,2332
|
||||
ALU board with interface.diy,OK,,1288
|
||||
AllTube Schem.diy,OK,,2148
|
||||
Blue 7.diy,OK,,202
|
||||
BrownfaceReverb Schematic 2.diy,OK,,1385
|
||||
Bus decoder board (RL,Z2,Z1,Z0).diy,OK,,1452
|
||||
DR18Tagstrip.diy,OK,,2783
|
||||
Deluxe_Micro_EF80_Layout.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,1274
|
||||
Fender_Bassman_5F6_5F6A.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,588
|
||||
IIc+.diy,OK,,1639
|
||||
Ibanez Balance-Master Mod.diy,OK,,1395
|
||||
LM386 Voltage Converter.diy,OK,,888
|
||||
LargeBandMaster.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,14763
|
||||
Lectrolab schematic.diy,OK,,1388
|
||||
PCF DI Cable Diagram.diy,OK,,895
|
||||
ProTremoVerb Schematic.diy,OK,,2463
|
||||
RAM board 2.diy,OK,,3320
|
||||
RR2104_Master_Volume_6V6_Schematic.diy,OK,,1574
|
||||
Radio Amp Noval.diy,OK,,1871
|
||||
Register board (LSB).diy,OK,,1097
|
||||
Rix 18 watt.diy,OK,,273
|
||||
Rix AC15 Xlite.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,383
|
||||
Rix Baby Blue.diy,OK,,266
|
||||
Rix Bassman.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,889
|
||||
Rix JD stout.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,249
|
||||
Rix Junior AB763.diy,OK,,295
|
||||
Rix Junior.diy,OK,,301
|
||||
Rix Plexi 6V6.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,459
|
||||
Rix Pro Jr.diy,OK,,475
|
||||
Silvertone 1484 v6f.diy,OK,,5147
|
||||
Stack Pointer board.diy,OK,,1385
|
||||
Synth Oscllator_v1.diy,OK,,4212
|
||||
Thunderbolt Mk3.diy,OK,,289
|
||||
antiquity_fuzz.diy,OK,,1113
|
||||
b_blender.diy,OK,<html>File was opened, but there were some issues with it:<br><br>Could not recognize component type Jack<br></html,1346
|
||||
bixonix_expandora.diy,OK,,1136
|
||||
dallas_rangemaster_pcb.diy,OK,,1415
|
||||
deacy.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,445
|
||||
dist_layout.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,1192
|
||||
dyna_comp_perf.diy,OK,,1117
|
||||
eh_octave_multiplexer.diy,OK,,1344
|
||||
fetzer_ruby.diy,OK,,1757
|
||||
fetzer_valve.diy,OK,,1914
|
||||
fetzer_valve_deluxe_2.diy,OK,,1194
|
||||
fetzer_valve_deluxe_perf.diy,OK,,1290
|
||||
flexi_clip.diy,OK,<html>File was opened, but there were some issues with it:<br><br>Unsupported toggle switch dimensions<br></html,1714
|
||||
ga5t_preamp.diy,OK,,1100
|
||||
jfet boost.diy,OK,,59
|
||||
lp switch + pots.diy,OK,,2001
|
||||
lxh2_marshall_amp_sim.diy,OK,,1296
|
||||
orange_treble_bass_booster_2.diy,OK,<html>File was opened, but there were some issues with it:<br><br>Could not recognize component type Jack<br></html,1646
|
||||
puzzle87_comp.diy,OK,<html>File was opened, but there were some issues with it:<br><br>Could not recognize component type Jack<br></html,1186
|
||||
rangemaster.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,134
|
||||
roger_mayer_octavia_vero.diy,OK,,1024
|
||||
ruby.diy,OK,,267
|
||||
shaka_hv.diy,OK,,1461
|
||||
signal_gen.diy,OK,<html>File was opened, but there were some issues with it:<br><br>Could not recognize component type Jack<br></html,1151
|
||||
slo2.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,3912
|
||||
soapdodger2.diy,OK,<html>File was opened, but there were some issues with it:<br><br>Could not recognize component type Jack<br></html,3460
|
||||
splitter2.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,2201
|
||||
standard strat.diy,OK,,3600
|
||||
tda1521a-2.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,629
|
||||
timmy7.diy,OK,<html>File was opened, but there were some issues with it:<br><br>The project references unknown component properties, most likely because it was created with a newer version of DIYLC.<br></html,1049
|
||||
travelcaster3 (new format).diy,OK,,632
|
||||
wah2.diy,OK,,1384
|
||||
|
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version" : "6.9.0",
|
||||
"version" : "6.10.0",
|
||||
"categories" : {
|
||||
"Boards" : [ {
|
||||
"name" : "Blank Board",
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.diylc</groupId>
|
||||
<artifactId>diylc-parent</artifactId>
|
||||
<version>6.9.0</version>
|
||||
<version>6.10.0</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>diylc-core</artifactId>
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
package org.diylc.common;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.diylc.core.IDIYComponent;
|
||||
@@ -29,6 +30,10 @@ public class BuildingBlock {
|
||||
|
||||
private String name;
|
||||
private Collection<IDIYComponent<?>> components;
|
||||
// the dates are set only on factory blocks in import-defaults/blocks.xml, and a withdrawn
|
||||
// factory block carries nothing but its name and deletedOn
|
||||
private LocalDateTime createdOn;
|
||||
private LocalDateTime deletedOn;
|
||||
|
||||
public BuildingBlock(String name, Collection<IDIYComponent<?>> components) {
|
||||
super();
|
||||
@@ -52,6 +57,22 @@ public class BuildingBlock {
|
||||
this.components = components;
|
||||
}
|
||||
|
||||
public LocalDateTime getCreatedOn() {
|
||||
return createdOn;
|
||||
}
|
||||
|
||||
public void setCreatedOn(LocalDateTime createdOn) {
|
||||
this.createdOn = createdOn;
|
||||
}
|
||||
|
||||
public LocalDateTime getDeletedOn() {
|
||||
return deletedOn;
|
||||
}
|
||||
|
||||
public void setDeletedOn(LocalDateTime deletedOn) {
|
||||
this.deletedOn = deletedOn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
|
||||
@@ -27,6 +27,7 @@ public interface IBlockProcessor {
|
||||
|
||||
public static final String BLOCKS_KEY = "buildingBlocks";
|
||||
public static final String DEFAULT_BLOCKS_IMPORTED_KEY = "defaultBlocksImported";
|
||||
public static final String DEFAULT_BLOCKS_IMPORT_DATE_KEY = "defaultBlocksImportDate";
|
||||
|
||||
/**
|
||||
* Prefix that marks a string as a reference to a building block rather than a component class
|
||||
|
||||
@@ -43,6 +43,10 @@ public interface IVariantProcessor {
|
||||
void deleteVariant(ComponentType type, String variantName);
|
||||
|
||||
void setDefaultVariant(ComponentType type, String variantName);
|
||||
|
||||
void setDefaultModel(ComponentType type, String[] model);
|
||||
|
||||
boolean isDefaultModel(ComponentType type, String[] model);
|
||||
|
||||
int importVariants(String fileName) throws IOException;
|
||||
|
||||
|
||||
@@ -1,357 +1,359 @@
|
||||
/*
|
||||
|
||||
DIY Layout Creator (DIYLC).
|
||||
Copyright (c) 2009-2025 held jointly by the individual authors.
|
||||
|
||||
This file is part of DIYLC.
|
||||
|
||||
DIYLC is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
DIYLC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with DIYLC. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
package org.diylc.components;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.Shape;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.diylc.core.IDIYComponent;
|
||||
import org.diylc.core.Project;
|
||||
import org.diylc.core.annotations.EditableProperty;
|
||||
import org.diylc.core.measures.Size;
|
||||
|
||||
/**
|
||||
* Abstract implementation of {@link IDIYComponent} that contains component name and toString.
|
||||
*
|
||||
* IMPORTANT: to improve performance, all fields except for <code>Point</code> and
|
||||
* <code>Point</code> arrays should be immutable. Failing to comply with this can result in annoying
|
||||
* and hard to trace bugs.
|
||||
*
|
||||
* @author Branislav Stojkovic
|
||||
*
|
||||
* @param <T>
|
||||
*/
|
||||
public abstract class AbstractComponent<T> implements IDIYComponent<T> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
protected UUID id = UUID.randomUUID();
|
||||
protected String name = "";
|
||||
|
||||
public static Color SELECTION_COLOR = Color.red;
|
||||
public static Color LABEL_COLOR = Color.black;
|
||||
public static Color LABEL_COLOR_SELECTED = Color.red;
|
||||
public static Font LABEL_FONT = new Font("Square721 BT", Font.PLAIN, 14);
|
||||
public static Color METAL_COLOR = Color.decode("#759DAF");
|
||||
public static Color LIGHT_METAL_COLOR = Color.decode("#EEEEEE");
|
||||
public static Color COPPER_COLOR = Color.decode("#DA8A67");
|
||||
public static Color GOLD_COLOR = Color.decode("#F4B301");
|
||||
public static Color BRASS_COLOR = Color.decode("#B8860B");
|
||||
public static Color FR4_COLOR = Color.decode("#6B9B6B");
|
||||
public static Color FR4_LIGHT_COLOR = Color.decode("#BABE71");
|
||||
public static Color PHENOLIC_COLOR = Color.decode("#F8EBB3");
|
||||
public static Color PHENOLIC_DARK_COLOR = Color.decode("#CD8500");
|
||||
|
||||
@EditableProperty(defaultable = false)
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getId() {
|
||||
if (id == null) {
|
||||
id = UUID.randomUUID();
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setId(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canControlPointOverlap(int index) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name == null ? "(null)" : name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getValueForDisplay() {
|
||||
if (getValue() == null)
|
||||
return "";
|
||||
|
||||
Object val = getValue();
|
||||
if (val.getClass().isArray()) {
|
||||
return String.join(" / ", Arrays.stream((Object[])val).map(x -> x == null ? "" : x.toString()).collect(Collectors.toList()));
|
||||
}
|
||||
return val.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the closest odd number, i.e. x when x is odd, or x + 1 when x is even.
|
||||
*
|
||||
* @param x
|
||||
* @return
|
||||
*/
|
||||
protected int getClosestOdd(double x) {
|
||||
return ((int) x / 2) * 2 + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the closest odd number, i.e. x when x is odd, or x + 1 when x is even.
|
||||
*
|
||||
* @param x
|
||||
* @return
|
||||
*/
|
||||
protected int getClosestOdd(Size s) {
|
||||
double x = s.convertToPixels();
|
||||
return ((int) x / 2) * 2 + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns darker color if possible, or lighter if it's already dark
|
||||
*
|
||||
* @param color
|
||||
* @return
|
||||
*/
|
||||
protected Color darkerOrLighter(Color color) {
|
||||
float[] hsb = new float[3];
|
||||
Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), hsb);
|
||||
return new Color(Color.HSBtoRGB(hsb[0], hsb[1], hsb[2] > 0.5 ? hsb[2] - 0.25f : hsb[2] + 0.25f));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param clip
|
||||
* @return true if none of the control points lie in the clip rectangle.
|
||||
*/
|
||||
protected boolean checkPointsClipped(Shape clip) {
|
||||
if (clip == null) {
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < getControlPointCount(); i++) {
|
||||
if (clip.contains(getControlPoint(i))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
double minX = Integer.MAX_VALUE;
|
||||
double minY = Integer.MAX_VALUE;
|
||||
double maxX = Integer.MIN_VALUE;
|
||||
double maxY = Integer.MIN_VALUE;
|
||||
for (int i = 0; i < getControlPointCount(); i++) {
|
||||
Point2D p = getControlPoint(i);
|
||||
if (minX > p.getX()) {
|
||||
minX = p.getX();
|
||||
}
|
||||
if (maxX < p.getX()) {
|
||||
maxX = p.getX();
|
||||
}
|
||||
if (minY > p.getY()) {
|
||||
minY = p.getY();
|
||||
}
|
||||
if (maxY < p.getY()) {
|
||||
maxY = p.getY();
|
||||
}
|
||||
}
|
||||
double margin = getClipMargin();
|
||||
Rectangle2D rect = new Rectangle2D.Double(minX - margin, minY - margin,
|
||||
maxX - minX + 2 * margin, maxY - minY + 2 * margin);
|
||||
return !clip.intersects(rect);
|
||||
}
|
||||
|
||||
/**
|
||||
* Distance in pixels that the drawing may reach beyond the bounding box of the control points,
|
||||
* such as half the width of a stroke running through them. {@link #checkPointsClipped(Shape)}
|
||||
* widens the box by this much before testing it against the clip. The margin must stay positive,
|
||||
* because {@link Shape#intersects(Rectangle2D)} reports a box with no width or height as disjoint
|
||||
* from everything, which would hide a straight horizontal or vertical component whose control
|
||||
* points all lie outside the clip.
|
||||
*
|
||||
* @return margin around the control points.
|
||||
*/
|
||||
protected double getClipMargin() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public IDIYComponent<T> clone() throws CloneNotSupportedException {
|
||||
try {
|
||||
// Instantiate object of the same type
|
||||
Class<?> clazz = this.getClass();
|
||||
AbstractComponent<T> newInstance = (AbstractComponent<T>) clazz.getDeclaredConstructor().newInstance();
|
||||
while (AbstractComponent.class.isAssignableFrom(clazz)) {
|
||||
Field[] fields = clazz.getDeclaredFields();
|
||||
clazz = clazz.getSuperclass();
|
||||
// fields = this.getClass().getDeclaredFields();
|
||||
// Copy over all non-static, non-final fields that are declared
|
||||
// in AbstractComponent or one of it's child classes
|
||||
for (Field field : fields) {
|
||||
if (!Modifier.isStatic(field.getModifiers()) && !Modifier.isFinal(field.getModifiers())) {
|
||||
field.setAccessible(true);
|
||||
Object value = field.get(this);
|
||||
|
||||
if (field.getName().equalsIgnoreCase("id")) {
|
||||
value = getId();
|
||||
}
|
||||
|
||||
// Deep copy point arrays.
|
||||
// TODO: something nicer
|
||||
if (value != null && value.getClass().isArray()
|
||||
&& Point2D.class.isAssignableFrom(value.getClass().getComponentType())) {
|
||||
Object newArray = Array.newInstance(value.getClass().getComponentType(), Array.getLength(value));
|
||||
for (int i = 0; i < Array.getLength(value); i++) {
|
||||
Point2D p = (Point2D) Array.get(value, i);
|
||||
if (p != null)
|
||||
Array.set(newArray, i, new Point2D.Double(p.getX(), p.getY()));
|
||||
}
|
||||
value = newArray;
|
||||
}
|
||||
// Deep copy points.
|
||||
// TODO: something nicer
|
||||
if (value != null && value instanceof Point2D) {
|
||||
Point2D p = (Point2D) value;
|
||||
value = new Point2D.Double(p.getX(), p.getY());
|
||||
}
|
||||
|
||||
field.set(newInstance, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return newInstance;
|
||||
} catch (Exception e) {
|
||||
throw new CloneNotSupportedException("Could not clone the component. Reason: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equalsTo(IDIYComponent<?> other) {
|
||||
if (other == null)
|
||||
return false;
|
||||
if (!other.getClass().equals(this.getClass()))
|
||||
return false;
|
||||
Class<?> clazz = this.getClass();
|
||||
while (AbstractComponent.class.isAssignableFrom(clazz)) {
|
||||
Field[] fields = clazz.getDeclaredFields();
|
||||
clazz = clazz.getSuperclass();
|
||||
// fields = this.getClass().getDeclaredFields();
|
||||
// Copy over all non-static, non-final and non-transient fields that are declared
|
||||
// in
|
||||
// AbstractComponent or one of it's child classes
|
||||
for (Field field : fields) {
|
||||
if (!Modifier.isStatic(field.getModifiers()) && !Modifier.isFinal(field.getModifiers()) &&
|
||||
!Modifier.isTransient(field.getModifiers())) {
|
||||
field.setAccessible(true);
|
||||
try {
|
||||
Object value = field.get(this);
|
||||
Object otherValue = field.get(other);
|
||||
if (!compareObjects(value, otherValue))
|
||||
return false;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean compareObjects(Object o1, Object o2) {
|
||||
if (o1 == null && o2 == null)
|
||||
return true;
|
||||
if (o1 == null || o2 == null)
|
||||
return false;
|
||||
if (o1.getClass().isArray()) {
|
||||
if (o1.getClass().getComponentType() == byte.class)
|
||||
return Arrays.equals((byte[]) o1, (byte[]) o2);
|
||||
if (o1.getClass().getComponentType() == double.class)
|
||||
return Arrays.equals((double[]) o1, (double[]) o2);
|
||||
if (o1.getClass().getComponentType() == int.class)
|
||||
return Arrays.equals((int[]) o1, (int[]) o2);
|
||||
return Arrays.equals((Object[]) o1, (Object[]) o2);
|
||||
}
|
||||
return o1.equals(o2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getControlPointNodeName(int index) {
|
||||
return Integer.toString(index + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getInternalLinkName(int index1, int index2) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPointMoveFreely(int pointIndex) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stretchBetween(Point2D first, Point2D second) {
|
||||
int count = getControlPointCount();
|
||||
// fresh instances because implementations are free to keep the point objects they are handed
|
||||
setControlPoint(new Point2D.Double(first.getX(), first.getY()), 0);
|
||||
if (count > 1) {
|
||||
setControlPoint(new Point2D.Double(second.getX(), second.getY()), count - 1);
|
||||
}
|
||||
for (int i = 1; i < count - 1; i++) {
|
||||
setControlPoint(getStretchedPoint(first, second, i), i);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Decides where a control point that is neither of the two ends lands when the component is
|
||||
* stretched between them, see {@link #stretchBetween(Point2D, Point2D)}. The default spaces the
|
||||
* points evenly along the straight line joining the ends. Override to place a point that carries
|
||||
* a meaning of its own, such as one that positions a label.
|
||||
*
|
||||
* @param first
|
||||
* @param second
|
||||
* @param index
|
||||
* @return position of the control point at the specified index.
|
||||
*/
|
||||
protected Point2D getStretchedPoint(Point2D first, Point2D second, int index) {
|
||||
double t = (double) index / (getControlPointCount() - 1);
|
||||
return new Point2D.Double(first.getX() + t * (second.getX() - first.getX()),
|
||||
first.getY() + t * (second.getY() - first.getY()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2D getCachingBounds() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createdIn(Project project) {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
||||
DIY Layout Creator (DIYLC).
|
||||
Copyright (c) 2009-2025 held jointly by the individual authors.
|
||||
|
||||
This file is part of DIYLC.
|
||||
|
||||
DIYLC is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
DIYLC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with DIYLC. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
package org.diylc.components;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.Shape;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.diylc.core.IDIYComponent;
|
||||
import org.diylc.core.Project;
|
||||
import org.diylc.core.annotations.EditableProperty;
|
||||
import org.diylc.core.measures.Size;
|
||||
|
||||
/**
|
||||
* Abstract implementation of {@link IDIYComponent} that contains component name and toString.
|
||||
*
|
||||
* IMPORTANT: to improve performance, all fields except for <code>Point</code> and
|
||||
* <code>Point</code> arrays should be immutable. Failing to comply with this can result in annoying
|
||||
* and hard to trace bugs.
|
||||
*
|
||||
* @author Branislav Stojkovic
|
||||
*
|
||||
* @param <T>
|
||||
*/
|
||||
public abstract class AbstractComponent<T> implements IDIYComponent<T> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
protected UUID id = UUID.randomUUID();
|
||||
protected String name = "";
|
||||
|
||||
public static Color SELECTION_COLOR = Color.red;
|
||||
public static Color LABEL_COLOR = Color.black;
|
||||
public static Color LABEL_COLOR_SELECTED = Color.red;
|
||||
public static Font LABEL_FONT = new Font("Square721 BT", Font.PLAIN, 14);
|
||||
public static Color METAL_COLOR = Color.decode("#759DAF");
|
||||
public static Color LIGHT_METAL_COLOR = Color.decode("#EEEEEE");
|
||||
public static Color PIN_COLOR = Color.decode("#00B2EE");
|
||||
public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
public static Color COPPER_COLOR = Color.decode("#DA8A67");
|
||||
public static Color GOLD_COLOR = Color.decode("#F4B301");
|
||||
public static Color BRASS_COLOR = Color.decode("#B8860B");
|
||||
public static Color FR4_COLOR = Color.decode("#6B9B6B");
|
||||
public static Color FR4_LIGHT_COLOR = Color.decode("#BABE71");
|
||||
public static Color PHENOLIC_COLOR = Color.decode("#F8EBB3");
|
||||
public static Color PHENOLIC_DARK_COLOR = Color.decode("#CD8500");
|
||||
|
||||
@EditableProperty(defaultable = false)
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getId() {
|
||||
if (id == null) {
|
||||
id = UUID.randomUUID();
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setId(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canControlPointOverlap(int index) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name == null ? "(null)" : name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getValueForDisplay() {
|
||||
if (getValue() == null)
|
||||
return "";
|
||||
|
||||
Object val = getValue();
|
||||
if (val.getClass().isArray()) {
|
||||
return String.join(" / ", Arrays.stream((Object[])val).map(x -> x == null ? "" : x.toString()).collect(Collectors.toList()));
|
||||
}
|
||||
return val.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the closest odd number, i.e. x when x is odd, or x + 1 when x is even.
|
||||
*
|
||||
* @param x
|
||||
* @return
|
||||
*/
|
||||
protected int getClosestOdd(double x) {
|
||||
return ((int) x / 2) * 2 + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the closest odd number, i.e. x when x is odd, or x + 1 when x is even.
|
||||
*
|
||||
* @param x
|
||||
* @return
|
||||
*/
|
||||
protected int getClosestOdd(Size s) {
|
||||
double x = s.convertToPixels();
|
||||
return ((int) x / 2) * 2 + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns darker color if possible, or lighter if it's already dark
|
||||
*
|
||||
* @param color
|
||||
* @return
|
||||
*/
|
||||
protected Color darkerOrLighter(Color color) {
|
||||
float[] hsb = new float[3];
|
||||
Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), hsb);
|
||||
return new Color(Color.HSBtoRGB(hsb[0], hsb[1], hsb[2] > 0.5 ? hsb[2] - 0.25f : hsb[2] + 0.25f));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param clip
|
||||
* @return true if none of the control points lie in the clip rectangle.
|
||||
*/
|
||||
protected boolean checkPointsClipped(Shape clip) {
|
||||
if (clip == null) {
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < getControlPointCount(); i++) {
|
||||
if (clip.contains(getControlPoint(i))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
double minX = Integer.MAX_VALUE;
|
||||
double minY = Integer.MAX_VALUE;
|
||||
double maxX = Integer.MIN_VALUE;
|
||||
double maxY = Integer.MIN_VALUE;
|
||||
for (int i = 0; i < getControlPointCount(); i++) {
|
||||
Point2D p = getControlPoint(i);
|
||||
if (minX > p.getX()) {
|
||||
minX = p.getX();
|
||||
}
|
||||
if (maxX < p.getX()) {
|
||||
maxX = p.getX();
|
||||
}
|
||||
if (minY > p.getY()) {
|
||||
minY = p.getY();
|
||||
}
|
||||
if (maxY < p.getY()) {
|
||||
maxY = p.getY();
|
||||
}
|
||||
}
|
||||
double margin = getClipMargin();
|
||||
Rectangle2D rect = new Rectangle2D.Double(minX - margin, minY - margin,
|
||||
maxX - minX + 2 * margin, maxY - minY + 2 * margin);
|
||||
return !clip.intersects(rect);
|
||||
}
|
||||
|
||||
/**
|
||||
* Distance in pixels that the drawing may reach beyond the bounding box of the control points,
|
||||
* such as half the width of a stroke running through them. {@link #checkPointsClipped(Shape)}
|
||||
* widens the box by this much before testing it against the clip. The margin must stay positive,
|
||||
* because {@link Shape#intersects(Rectangle2D)} reports a box with no width or height as disjoint
|
||||
* from everything, which would hide a straight horizontal or vertical component whose control
|
||||
* points all lie outside the clip.
|
||||
*
|
||||
* @return margin around the control points.
|
||||
*/
|
||||
protected double getClipMargin() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public IDIYComponent<T> clone() throws CloneNotSupportedException {
|
||||
try {
|
||||
// Instantiate object of the same type
|
||||
Class<?> clazz = this.getClass();
|
||||
AbstractComponent<T> newInstance = (AbstractComponent<T>) clazz.getDeclaredConstructor().newInstance();
|
||||
while (AbstractComponent.class.isAssignableFrom(clazz)) {
|
||||
Field[] fields = clazz.getDeclaredFields();
|
||||
clazz = clazz.getSuperclass();
|
||||
// fields = this.getClass().getDeclaredFields();
|
||||
// Copy over all non-static, non-final fields that are declared
|
||||
// in AbstractComponent or one of it's child classes
|
||||
for (Field field : fields) {
|
||||
if (!Modifier.isStatic(field.getModifiers()) && !Modifier.isFinal(field.getModifiers())) {
|
||||
field.setAccessible(true);
|
||||
Object value = field.get(this);
|
||||
|
||||
if (field.getName().equalsIgnoreCase("id")) {
|
||||
value = getId();
|
||||
}
|
||||
|
||||
// Deep copy point arrays.
|
||||
// TODO: something nicer
|
||||
if (value != null && value.getClass().isArray()
|
||||
&& Point2D.class.isAssignableFrom(value.getClass().getComponentType())) {
|
||||
Object newArray = Array.newInstance(value.getClass().getComponentType(), Array.getLength(value));
|
||||
for (int i = 0; i < Array.getLength(value); i++) {
|
||||
Point2D p = (Point2D) Array.get(value, i);
|
||||
if (p != null)
|
||||
Array.set(newArray, i, new Point2D.Double(p.getX(), p.getY()));
|
||||
}
|
||||
value = newArray;
|
||||
}
|
||||
// Deep copy points.
|
||||
// TODO: something nicer
|
||||
if (value != null && value instanceof Point2D) {
|
||||
Point2D p = (Point2D) value;
|
||||
value = new Point2D.Double(p.getX(), p.getY());
|
||||
}
|
||||
|
||||
field.set(newInstance, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return newInstance;
|
||||
} catch (Exception e) {
|
||||
throw new CloneNotSupportedException("Could not clone the component. Reason: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equalsTo(IDIYComponent<?> other) {
|
||||
if (other == null)
|
||||
return false;
|
||||
if (!other.getClass().equals(this.getClass()))
|
||||
return false;
|
||||
Class<?> clazz = this.getClass();
|
||||
while (AbstractComponent.class.isAssignableFrom(clazz)) {
|
||||
Field[] fields = clazz.getDeclaredFields();
|
||||
clazz = clazz.getSuperclass();
|
||||
// fields = this.getClass().getDeclaredFields();
|
||||
// Copy over all non-static, non-final and non-transient fields that are declared
|
||||
// in
|
||||
// AbstractComponent or one of it's child classes
|
||||
for (Field field : fields) {
|
||||
if (!Modifier.isStatic(field.getModifiers()) && !Modifier.isFinal(field.getModifiers()) &&
|
||||
!Modifier.isTransient(field.getModifiers())) {
|
||||
field.setAccessible(true);
|
||||
try {
|
||||
Object value = field.get(this);
|
||||
Object otherValue = field.get(other);
|
||||
if (!compareObjects(value, otherValue))
|
||||
return false;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean compareObjects(Object o1, Object o2) {
|
||||
if (o1 == null && o2 == null)
|
||||
return true;
|
||||
if (o1 == null || o2 == null)
|
||||
return false;
|
||||
if (o1.getClass().isArray()) {
|
||||
if (o1.getClass().getComponentType() == byte.class)
|
||||
return Arrays.equals((byte[]) o1, (byte[]) o2);
|
||||
if (o1.getClass().getComponentType() == double.class)
|
||||
return Arrays.equals((double[]) o1, (double[]) o2);
|
||||
if (o1.getClass().getComponentType() == int.class)
|
||||
return Arrays.equals((int[]) o1, (int[]) o2);
|
||||
return Arrays.equals((Object[]) o1, (Object[]) o2);
|
||||
}
|
||||
return o1.equals(o2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getControlPointNodeName(int index) {
|
||||
return Integer.toString(index + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getInternalLinkName(int index1, int index2) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPointMoveFreely(int pointIndex) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stretchBetween(Point2D first, Point2D second) {
|
||||
int count = getControlPointCount();
|
||||
// fresh instances because implementations are free to keep the point objects they are handed
|
||||
setControlPoint(new Point2D.Double(first.getX(), first.getY()), 0);
|
||||
if (count > 1) {
|
||||
setControlPoint(new Point2D.Double(second.getX(), second.getY()), count - 1);
|
||||
}
|
||||
for (int i = 1; i < count - 1; i++) {
|
||||
setControlPoint(getStretchedPoint(first, second, i), i);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Decides where a control point that is neither of the two ends lands when the component is
|
||||
* stretched between them, see {@link #stretchBetween(Point2D, Point2D)}. The default spaces the
|
||||
* points evenly along the straight line joining the ends. Override to place a point that carries
|
||||
* a meaning of its own, such as one that positions a label.
|
||||
*
|
||||
* @param first
|
||||
* @param second
|
||||
* @param index
|
||||
* @return position of the control point at the specified index.
|
||||
*/
|
||||
protected Point2D getStretchedPoint(Point2D first, Point2D second, int index) {
|
||||
double t = (double) index / (getControlPointCount() - 1);
|
||||
return new Point2D.Double(first.getX() + t * (second.getX() - first.getX()),
|
||||
first.getY() + t * (second.getY() - first.getY()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2D getCachingBounds() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createdIn(Project project) {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,7 +106,10 @@ public class Group implements Comparable<Group> {
|
||||
|
||||
@Override
|
||||
public int compareTo(Group o) {
|
||||
return toString().compareToIgnoreCase(o.toString());
|
||||
String text = toString();
|
||||
String otherText = o.toString();
|
||||
int comparison = text.compareToIgnoreCase(otherText);
|
||||
return comparison != 0 ? comparison : text.compareTo(otherText);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,6 +23,7 @@ package org.diylc.netlist;
|
||||
|
||||
import java.awt.geom.Point2D;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
@@ -39,7 +40,14 @@ public class Node implements Comparable<Node> {
|
||||
|
||||
/** Pin names that mark an absent connection, so repeats of them are not one net. */
|
||||
private static final Set<String> NON_NET_NAMES =
|
||||
new HashSet<String>(Arrays.asList("NC", "RSV"));
|
||||
new HashSet<String>(Arrays.asList("NC", "RSV", "IC"));
|
||||
|
||||
/**
|
||||
* Orders points top to bottom, then left to right. Breaks ties between parts that share a name:
|
||||
* where a part sits is the same in every run, unlike the order a hash set yields it in.
|
||||
*/
|
||||
static final Comparator<Point2D> LOCATION_ORDER = Comparator.nullsLast(
|
||||
Comparator.comparingDouble(Point2D::getY).thenComparingDouble(Point2D::getX));
|
||||
|
||||
private IDIYComponent<?> component;
|
||||
private int pointIndex;
|
||||
@@ -137,6 +145,15 @@ public class Node implements Comparable<Node> {
|
||||
|
||||
@Override
|
||||
public int compareTo(Node o) {
|
||||
return toString().compareToIgnoreCase(o.toString());
|
||||
String name = toString();
|
||||
String otherName = o.toString();
|
||||
int comparison = name.compareToIgnoreCase(otherName);
|
||||
if (comparison == 0) {
|
||||
comparison = name.compareTo(otherName);
|
||||
}
|
||||
if (comparison == 0) {
|
||||
comparison = LOCATION_ORDER.compare(getPoint2D(), o.getPoint2D());
|
||||
}
|
||||
return comparison != 0 ? comparison : Integer.compare(pointIndex, o.pointIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
*/
|
||||
package org.diylc.netlist;
|
||||
|
||||
import java.awt.geom.Point2D;
|
||||
|
||||
import org.diylc.core.IDIYComponent;
|
||||
import org.diylc.core.ISwitch;
|
||||
|
||||
@@ -84,9 +86,20 @@ public class Position implements Comparable<Position> {
|
||||
@Override
|
||||
public int compareTo(Position o) {
|
||||
int comparison = getSwitchName().compareToIgnoreCase(o.getSwitchName());
|
||||
return comparison != 0
|
||||
? comparison
|
||||
: Integer.compare(position, o.position);
|
||||
if (comparison == 0) {
|
||||
comparison = getSwitchName().compareTo(o.getSwitchName());
|
||||
}
|
||||
// switches that share a name keep apart by location, so a setup reads the same in every run
|
||||
if (comparison == 0) {
|
||||
comparison = Node.LOCATION_ORDER.compare(getSwitchLocation(), o.getSwitchLocation());
|
||||
}
|
||||
return comparison != 0 ? comparison : Integer.compare(position, o.position);
|
||||
}
|
||||
|
||||
private Point2D getSwitchLocation() {
|
||||
return theSwitch instanceof IDIYComponent<?> component && component.getControlPointCount() > 0
|
||||
? component.getControlPoint(0)
|
||||
: null;
|
||||
}
|
||||
|
||||
String getSwitchName() {
|
||||
|
||||
@@ -124,6 +124,7 @@ public class SwitchSetup implements Comparable<SwitchSetup> {
|
||||
}
|
||||
|
||||
// Same earliest full configuration: use the description as a tie-breaker.
|
||||
return toString().compareToIgnoreCase(o.toString());
|
||||
int comparison = toString().compareToIgnoreCase(o.toString());
|
||||
return comparison != 0 ? comparison : toString().compareTo(o.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package org.diylc.presenter;
|
||||
|
||||
import java.io.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
@@ -28,6 +29,7 @@ import com.thoughtworks.xstream.io.xml.DomDriver;
|
||||
import com.thoughtworks.xstream.security.AnyTypePermission;
|
||||
|
||||
import org.diylc.common.BlockInstantiationMode;
|
||||
import org.diylc.common.BuildingBlock;
|
||||
import org.diylc.common.BuildingBlockPackage;
|
||||
import org.diylc.common.ComponentType;
|
||||
import org.diylc.common.IBlockProcessor;
|
||||
@@ -42,7 +44,7 @@ public class BuildingBlockManager {
|
||||
|
||||
private static final String BLOCKS_FILE_NAME = "import-defaults/blocks.xml";
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(VariantManager.class);
|
||||
private static final Logger LOG = Logger.getLogger(BuildingBlockManager.class);
|
||||
|
||||
private IConfigurationManager<?> configManager;
|
||||
private XStream xStream;
|
||||
@@ -58,44 +60,80 @@ public class BuildingBlockManager {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void importDefaultBlocks() {
|
||||
// import default templates from variants.xml file only if we didn't do it already
|
||||
if (!configManager.readBoolean(IPlugInPort.DEFAULT_BLOCKS_IMPORTED_KEY, false)) {
|
||||
try {
|
||||
InputStream inputStream = Presenter.class.getResourceAsStream("/" + BLOCKS_FILE_NAME);
|
||||
if (inputStream == null) {
|
||||
return;
|
||||
}
|
||||
BufferedInputStream in = new BufferedInputStream(inputStream);
|
||||
Map<String, List<IDIYComponent<?>>> defaults =
|
||||
(Map<String, List<IDIYComponent<?>>>) ProjectFileManager.xStreamSerializer
|
||||
.fromXML(in);
|
||||
in.close();
|
||||
|
||||
Map<String, List<IDIYComponent<?>>> blocksMap =
|
||||
(Map<String, List<IDIYComponent<?>>>) configManager.readObject(IPlugInPort.BLOCKS_KEY,
|
||||
null);
|
||||
if (blocksMap == null)
|
||||
blocksMap = new HashMap<String, List<IDIYComponent<?>>>();
|
||||
|
||||
// merge default blocks with user's
|
||||
for (Map.Entry<String, List<IDIYComponent<?>>> entry : defaults.entrySet()) {
|
||||
if (!blocksMap.containsKey(entry.getKey()))
|
||||
blocksMap.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
// update templates and a flag marking that we imported them
|
||||
configManager.writeValue(IPlugInPort.DEFAULT_BLOCKS_IMPORTED_KEY, true);
|
||||
configManager.writeValue(IPlugInPort.BLOCKS_KEY, blocksMap);
|
||||
int importCount = defaults.size();
|
||||
if (importCount > 0) {
|
||||
LOG.info(String.format("Imported %d default building blocks", importCount));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOG.error("Could not load default blocks", e);
|
||||
try {
|
||||
InputStream inputStream = Presenter.class.getResourceAsStream("/" + BLOCKS_FILE_NAME);
|
||||
if (inputStream == null) {
|
||||
return;
|
||||
}
|
||||
BufferedInputStream in = new BufferedInputStream(inputStream);
|
||||
List<BuildingBlock> defaults =
|
||||
(List<BuildingBlock>) ProjectFileManager.xStreamSerializer.fromXML(in);
|
||||
in.close();
|
||||
importDefaultBlocks(defaults);
|
||||
} catch (Exception e) {
|
||||
LOG.error("Could not load default blocks", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
void importDefaultBlocks(List<BuildingBlock> defaults) {
|
||||
LocalDateTime importDate = (LocalDateTime) configManager
|
||||
.readObject(IPlugInPort.DEFAULT_BLOCKS_IMPORT_DATE_KEY, LocalDateTime.MIN);
|
||||
|
||||
Map<String, List<IDIYComponent<?>>> blocksMap =
|
||||
(Map<String, List<IDIYComponent<?>>>) configManager.readObject(IPlugInPort.BLOCKS_KEY,
|
||||
null);
|
||||
if (blocksMap == null) {
|
||||
blocksMap = new HashMap<String, List<IDIYComponent<?>>>();
|
||||
}
|
||||
|
||||
// as with variants, the import date is the latest date in the bundled file rather than the
|
||||
// clock, and never moves backwards
|
||||
LocalDateTime newImportDate = importDate;
|
||||
List<String> deletedNames = new ArrayList<String>();
|
||||
int importCount = 0;
|
||||
|
||||
for (BuildingBlock block : defaults) {
|
||||
if (block.getCreatedOn() != null && block.getCreatedOn().isAfter(newImportDate)) {
|
||||
newImportDate = block.getCreatedOn();
|
||||
}
|
||||
if (block.getDeletedOn() != null && block.getDeletedOn().isAfter(newImportDate)) {
|
||||
newImportDate = block.getDeletedOn();
|
||||
}
|
||||
// a deletion stub keeps nothing but its name, so a missing createdOn only means an old
|
||||
// entry when the block has not been deleted
|
||||
boolean created = block.getCreatedOn() == null ? block.getDeletedOn() == null
|
||||
: importDate.compareTo(block.getCreatedOn()) < 0;
|
||||
boolean deleted =
|
||||
block.getDeletedOn() != null && importDate.compareTo(block.getDeletedOn()) < 0;
|
||||
if (deleted && !created) {
|
||||
if (blocksMap.remove(block.getName()) != null) {
|
||||
deletedNames.add(block.getName());
|
||||
}
|
||||
} else if (created && block.getDeletedOn() == null
|
||||
&& !blocksMap.containsKey(block.getName())) {
|
||||
// a user who had the block before the import date existed keeps their copy, edited or
|
||||
// not, and one who deleted it gets it back once
|
||||
blocksMap.put(block.getName(), new ArrayList<IDIYComponent<?>>(block.getComponents()));
|
||||
importCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// the flag stays so that older versions, which know nothing else, do not import again
|
||||
configManager.writeValue(IPlugInPort.DEFAULT_BLOCKS_IMPORTED_KEY, true);
|
||||
configManager.writeValue(IPlugInPort.DEFAULT_BLOCKS_IMPORT_DATE_KEY, newImportDate);
|
||||
configManager.writeValue(IPlugInPort.BLOCKS_KEY, blocksMap);
|
||||
for (String name : deletedNames) {
|
||||
removeFromRecent(name);
|
||||
}
|
||||
if (importCount > 0) {
|
||||
LOG.info(String.format("Imported %d default building blocks", importCount));
|
||||
}
|
||||
if (!deletedNames.isEmpty()) {
|
||||
LOG.info(String.format("Deleted %d withdrawn default building blocks", deletedNames.size()));
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public int importBlocks(String fileName) throws IOException {
|
||||
LOG.debug(String.format("importBlocks(%s)", fileName));
|
||||
@@ -221,14 +259,15 @@ public class BuildingBlockManager {
|
||||
blocks.put(blockName, blockComponents);
|
||||
|
||||
if (System.getProperty("org.diylc.WriteStaticBlocks", "false").equalsIgnoreCase("true")) {
|
||||
Map<String, List<IDIYComponent<?>>> defaultBlockMap =
|
||||
new HashMap<String, List<IDIYComponent<?>>>();
|
||||
defaultBlockMap.put(blockName, blockComponents);
|
||||
BuildingBlock defaultBlock = new BuildingBlock(blockName, blockComponents);
|
||||
defaultBlock.setCreatedOn(LocalDateTime.now().withNano(0));
|
||||
List<BuildingBlock> defaultBlocks = new ArrayList<BuildingBlock>();
|
||||
defaultBlocks.add(defaultBlock);
|
||||
try {
|
||||
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(BLOCKS_FILE_NAME));
|
||||
XStream xStream = new XStream(new DomDriver());
|
||||
xStream.addPermission(AnyTypePermission.ANY);
|
||||
xStream.toXML(defaultBlockMap, out);
|
||||
xStream.toXML(defaultBlocks, out);
|
||||
out.close();
|
||||
LOG.info("Saved default blocks");
|
||||
} catch (IOException e) {
|
||||
@@ -248,11 +287,16 @@ public class BuildingBlockManager {
|
||||
blocks.remove(blockName);
|
||||
configManager.writeValue(IBlockProcessor.BLOCKS_KEY, blocks);
|
||||
}
|
||||
removeFromRecent(blockName);
|
||||
}
|
||||
|
||||
// drop the block from the recently used list too, so it doesn't linger as a dead entry
|
||||
// drop the block from the recently used list too, so it doesn't linger as a dead entry
|
||||
@SuppressWarnings("unchecked")
|
||||
private void removeFromRecent(String blockName) {
|
||||
List<String> recent =
|
||||
(List<String>) configManager.readObject(IPlugInPort.RECENT_COMPONENTS_KEY, null);
|
||||
if (recent != null && recent.remove(IBlockProcessor.BLOCK_PREFIX + blockName))
|
||||
if (recent != null && recent.remove(IBlockProcessor.BLOCK_PREFIX + blockName)) {
|
||||
configManager.writeValue(IPlugInPort.RECENT_COMPONENTS_KEY, recent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2868,17 +2868,21 @@ public class Presenter implements IPlugInPort {
|
||||
controlPointMap.clear();
|
||||
}
|
||||
|
||||
// try to find a default template if none is provided
|
||||
if (componentType != null && template == null) {
|
||||
String defaultTemplate = getDefaultVariant(componentType);
|
||||
List<Template> templates = getVariantsFor(componentType);
|
||||
if (templates != null && defaultTemplate != null)
|
||||
for (Template t : templates) {
|
||||
if (t.getName().equals(defaultTemplate)) {
|
||||
template = t;
|
||||
break;
|
||||
// try to find a default model or template if none is provided
|
||||
if (componentType != null && template == null && model == null) {
|
||||
model = variantManager.getDefaultModel(componentType);
|
||||
if (model == null) {
|
||||
String defaultTemplate = getDefaultVariant(componentType);
|
||||
List<Template> templates = getVariantsFor(componentType);
|
||||
if (templates != null && defaultTemplate != null) {
|
||||
for (Template t : templates) {
|
||||
if (t.getName().equals(defaultTemplate)) {
|
||||
template = t;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -3064,28 +3068,19 @@ public class Presenter implements IPlugInPort {
|
||||
variantManager.deleteVariant(type, templateName);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void setDefaultVariant(ComponentType type, String templateName) {
|
||||
LOG.debug(String.format("setTemplateDefault(%s, %s)", type, templateName));
|
||||
Map<String, String> defaultTemplateMap =
|
||||
(Map<String, String>) configManager.readObject(DEFAULT_TEMPLATES_KEY, null);
|
||||
if (defaultTemplateMap == null)
|
||||
defaultTemplateMap = new HashMap<String, String>();
|
||||
variantManager.setDefaultVariant(type, templateName);
|
||||
}
|
||||
|
||||
// try by class name and then by old category.type format
|
||||
String key1 = type.getInstanceClass().getCanonicalName();
|
||||
String key2 = type.getCategory() + "." + type.getName();
|
||||
@Override
|
||||
public void setDefaultModel(ComponentType type, String[] model) {
|
||||
variantManager.setDefaultModel(type, model);
|
||||
}
|
||||
|
||||
if (templateName.equals(defaultTemplateMap.get(key1)) || templateName.equals(defaultTemplateMap.get(key2))) {
|
||||
defaultTemplateMap.remove(key1);
|
||||
defaultTemplateMap.remove(key2);
|
||||
} else {
|
||||
// get rid of legacy key
|
||||
defaultTemplateMap.remove(key2);
|
||||
defaultTemplateMap.put(key1, templateName);
|
||||
}
|
||||
configManager.writeValue(DEFAULT_TEMPLATES_KEY, defaultTemplateMap);
|
||||
@Override
|
||||
public boolean isDefaultModel(ComponentType type, String[] model) {
|
||||
return variantManager.isDefaultModel(type, model);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
@@ -46,6 +47,9 @@ import org.diylc.serialization.ProjectFileManager;
|
||||
public class VariantManager {
|
||||
|
||||
private static final String VARIANTS_FILE_NAME = "import-defaults/variants.xml";
|
||||
// marks a default that names a datasheet model rather than a variant; older versions find no
|
||||
// variant by that name and simply place the component without a default
|
||||
private static final String DATASHEET_MODEL_PREFIX = "datasheet:";
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(VariantManager.class);
|
||||
|
||||
@@ -82,6 +86,11 @@ public class VariantManager {
|
||||
if (variantMap == null)
|
||||
variantMap = new HashMap<String, List<Template>>();
|
||||
|
||||
// the import date records how far the bundled file reaches, not when it was read, so that
|
||||
// running an older build first does not mark the variants of a newer build as already seen;
|
||||
// it never moves backwards, so running an older build after a newer one changes nothing
|
||||
LocalDateTime newImportDate = importDate;
|
||||
|
||||
// merge default variants with user's
|
||||
for (Map.Entry<String, List<Template>> entry : defaults.entrySet()) {
|
||||
List<Template> existingVariants = variantMap.computeIfAbsent(entry.getKey(), key -> new ArrayList<Template>());
|
||||
@@ -90,6 +99,12 @@ public class VariantManager {
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
for (Template variant : entry.getValue()) {
|
||||
if (variant.getCreatedOn() != null && variant.getCreatedOn().isAfter(newImportDate)) {
|
||||
newImportDate = variant.getCreatedOn();
|
||||
}
|
||||
if (variant.getDeletedOn() != null && variant.getDeletedOn().isAfter(newImportDate)) {
|
||||
newImportDate = variant.getDeletedOn();
|
||||
}
|
||||
// a deletion stub keeps nothing but its name, so a missing createdOn only means an old
|
||||
// entry when the variant has not been deleted
|
||||
boolean created = variant.getCreatedOn() == null ? variant.getDeletedOn() == null
|
||||
@@ -112,8 +127,7 @@ public class VariantManager {
|
||||
}
|
||||
|
||||
// update templates and a flag marking that we imported them
|
||||
configManager.writeValue(IPlugInPort.DEFAULT_TEMPLATES_IMPORT_DATE_KEY,
|
||||
LocalDateTime.now());
|
||||
configManager.writeValue(IPlugInPort.DEFAULT_TEMPLATES_IMPORT_DATE_KEY, newImportDate);
|
||||
configManager.writeValue(IPlugInPort.TEMPLATES_KEY, variantMap);
|
||||
if (importCount > 0) {
|
||||
LOG.info(String.format("Imported default %d variants", importCount));
|
||||
@@ -261,6 +275,67 @@ public class VariantManager {
|
||||
return defaultTemplateMap.get(key2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes the variant the default of its type, replacing whatever variant or model was the
|
||||
* default before, or clears the default if the variant already is it.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public void setDefaultVariant(ComponentType type, String variantName) {
|
||||
Map<String, String> defaultTemplateMap =
|
||||
(Map<String, String>) configManager.readObject(IPlugInPort.DEFAULT_TEMPLATES_KEY, null);
|
||||
if (defaultTemplateMap == null) {
|
||||
defaultTemplateMap = new HashMap<String, String>();
|
||||
}
|
||||
|
||||
// try by class name and then by old category.type format
|
||||
String key1 = type.getInstanceClass().getCanonicalName();
|
||||
String key2 = type.getCategory() + "." + type.getName();
|
||||
|
||||
if (variantName.equals(defaultTemplateMap.get(key1))
|
||||
|| variantName.equals(defaultTemplateMap.get(key2))) {
|
||||
defaultTemplateMap.remove(key1);
|
||||
defaultTemplateMap.remove(key2);
|
||||
LOG.info(String.format("Cleared default of %s, was %s", type.getName(), variantName));
|
||||
} else {
|
||||
// get rid of legacy key
|
||||
defaultTemplateMap.remove(key2);
|
||||
defaultTemplateMap.put(key1, variantName);
|
||||
LOG.info(String.format("Set default of %s to %s", type.getName(), variantName));
|
||||
}
|
||||
configManager.writeValue(IPlugInPort.DEFAULT_TEMPLATES_KEY, defaultTemplateMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as {@link #setDefaultVariant(ComponentType, String)} for a datasheet model, sharing the
|
||||
* single default slot of the type.
|
||||
*/
|
||||
public void setDefaultModel(ComponentType type, String[] model) {
|
||||
setDefaultVariant(type, encodeModel(type, model));
|
||||
}
|
||||
|
||||
public boolean isDefaultModel(ComponentType type, String[] model) {
|
||||
return encodeModel(type, model).equals(getDefaultVariant(type));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the datasheet row pinned as the default of the type, or null when the default is a
|
||||
* variant, nothing is pinned, or the pinned model is no longer in the datasheet.
|
||||
*/
|
||||
public String[] getDefaultModel(ComponentType type) {
|
||||
String defaultVariant = getDefaultVariant(type);
|
||||
List<String[]> datasheet = type.getDatasheet();
|
||||
if (defaultVariant == null || !defaultVariant.startsWith(DATASHEET_MODEL_PREFIX)
|
||||
|| datasheet == null) {
|
||||
return null;
|
||||
}
|
||||
for (String[] row : datasheet) {
|
||||
if (defaultVariant.equals(encodeModel(type, row))) {
|
||||
return row;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void deleteVariant(ComponentType type, String templateName) {
|
||||
LOG.debug(String.format("deleteTemplate(%s, %s)", type, templateName));
|
||||
@@ -294,4 +369,11 @@ public class VariantManager {
|
||||
}
|
||||
configManager.writeValue(IPlugInPort.TEMPLATES_KEY, templateMap);
|
||||
}
|
||||
|
||||
// a model is identified by its path through the datasheet submenus, the same columns the
|
||||
// toolbox matches when a model is clicked
|
||||
private String encodeModel(ComponentType type, String[] model) {
|
||||
int depth = Math.min(type.getDatasheetCreationStepCount(), model.length);
|
||||
return DATASHEET_MODEL_PREFIX + String.join("|", Arrays.copyOf(model, depth));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<map>
|
||||
<entry>
|
||||
<string>TO-92 w/ 3 Leads</string>
|
||||
<list>
|
||||
<list>
|
||||
<org.diylc.common.BuildingBlock>
|
||||
<name>TO-92 w/ 3 Leads</name>
|
||||
<createdOn>2026-01-01T00:00:00</createdOn>
|
||||
<components class="list">
|
||||
<diylc.connectivity.Jumper>
|
||||
<name>J1</name>
|
||||
<alpha>127</alpha>
|
||||
@@ -73,11 +74,12 @@
|
||||
<folded>false</folded>
|
||||
<pinSpacing value="0.05" unit="in"/>
|
||||
</diylc.semiconductors.TransistorTO92>
|
||||
</list>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>TO-92 w/ 2 Leads</string>
|
||||
<list>
|
||||
</components>
|
||||
</org.diylc.common.BuildingBlock>
|
||||
<org.diylc.common.BuildingBlock>
|
||||
<name>TO-92 w/ 2 Leads</name>
|
||||
<createdOn>2026-01-01T00:00:00</createdOn>
|
||||
<components class="list">
|
||||
<diylc.connectivity.Jumper>
|
||||
<name>J1</name>
|
||||
<alpha>127</alpha>
|
||||
@@ -131,11 +133,12 @@
|
||||
<folded>false</folded>
|
||||
<pinSpacing value="0.05" unit="in"/>
|
||||
</diylc.semiconductors.TransistorTO92>
|
||||
</list>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Title Block</string>
|
||||
<list>
|
||||
</components>
|
||||
</org.diylc.common.BuildingBlock>
|
||||
<org.diylc.common.BuildingBlock>
|
||||
<name>Title Block</name>
|
||||
<createdOn>2026-01-01T00:00:00</createdOn>
|
||||
<components class="list">
|
||||
<org.diylc.components.shapes.Rectangle>
|
||||
<name>RECT1</name>
|
||||
<alpha>127</alpha>
|
||||
@@ -735,6 +738,6 @@
|
||||
<verticalAlignment>CENTER</verticalAlignment>
|
||||
<orientation>DEFAULT</orientation>
|
||||
</org.diylc.components.misc.Label>
|
||||
</list>
|
||||
</entry>
|
||||
</map>
|
||||
</components>
|
||||
</org.diylc.common.BuildingBlock>
|
||||
</list>
|
||||
@@ -885,7 +885,7 @@
|
||||
<awt-color hex="acaca7"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Electrode Labels</string>
|
||||
<string>Pin Names</string>
|
||||
<string>1,2,3,4,5,6,7,8,9</string>
|
||||
</entry>
|
||||
<entry>
|
||||
@@ -924,7 +924,7 @@
|
||||
<awt-color hex="acaca7"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Electrode Labels</string>
|
||||
<string>Pin Names</string>
|
||||
<string>1,2,3,4,5,6,7,8,9</string>
|
||||
</entry>
|
||||
<entry>
|
||||
@@ -948,232 +948,27 @@
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>Chassis Noval 9A (12A?7)</name>
|
||||
<values>
|
||||
<entry>
|
||||
<string>Color</string>
|
||||
<awt-color hex="f7f7ef"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Mount</string>
|
||||
<diylc.tube.TubeSocket_-Mount>CHASSIS</diylc.tube.TubeSocket_-Mount>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<awt-color hex="acaca7"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Electrode Labels</string>
|
||||
<string>A,G,C,H,H,A,G,C,CT</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Base</string>
|
||||
<diylc.tube.TubeSocket_-Base>B9A</diylc.tube.TubeSocket_-Base>
|
||||
</entry>
|
||||
</values>
|
||||
<points>
|
||||
<point x="0.0" y="0.0"/>
|
||||
<point x="0.2" y="0.145"/>
|
||||
<point x="0.075" y="0.235"/>
|
||||
<point x="-0.08" y="0.235"/>
|
||||
<point x="-0.205" y="0.145"/>
|
||||
<point x="-0.25" y="0.0"/>
|
||||
<point x="-0.205" y="-0.15"/>
|
||||
<point x="-0.08" y="-0.24"/>
|
||||
<point x="0.075" y="-0.24"/>
|
||||
<point x="0.2" y="-0.15"/>
|
||||
</points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2022-10-30T13:25:15.3894874</createdOn>
|
||||
<deletedOn>2026-11-02T14:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>Chassis Noval 9CV (EL84)</name>
|
||||
<values>
|
||||
<entry>
|
||||
<string>Color</string>
|
||||
<awt-color hex="f7f7ef"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Mount</string>
|
||||
<diylc.tube.TubeSocket_-Mount>CHASSIS</diylc.tube.TubeSocket_-Mount>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<awt-color hex="acaca7"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Electrode Labels</string>
|
||||
<string>n/c,G,C,H,H,n/c,P,n/c,S</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Base</string>
|
||||
<diylc.tube.TubeSocket_-Base>B9A</diylc.tube.TubeSocket_-Base>
|
||||
</entry>
|
||||
</values>
|
||||
<points>
|
||||
<point x="0.0" y="0.0"/>
|
||||
<point x="0.2" y="0.145"/>
|
||||
<point x="0.075" y="0.235"/>
|
||||
<point x="-0.08" y="0.235"/>
|
||||
<point x="-0.205" y="0.145"/>
|
||||
<point x="-0.25" y="0.0"/>
|
||||
<point x="-0.205" y="-0.15"/>
|
||||
<point x="-0.08" y="-0.24"/>
|
||||
<point x="0.075" y="-0.24"/>
|
||||
<point x="0.2" y="-0.15"/>
|
||||
</points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2022-10-30T13:25:15.3894874</createdOn>
|
||||
<deletedOn>2026-11-02T14:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>Chassis Octal 5T</name>
|
||||
<values>
|
||||
<entry>
|
||||
<string>Color</string>
|
||||
<awt-color hex="f7f7ef"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Mount</string>
|
||||
<diylc.tube.TubeSocket_-Mount>CHASSIS</diylc.tube.TubeSocket_-Mount>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<awt-color hex="acaca7"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Electrode Labels</string>
|
||||
<string>n/c,H,n/c,P,n/c,P,n/c,H</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Base</string>
|
||||
<diylc.tube.TubeSocket_-Base>OCTAL</diylc.tube.TubeSocket_-Base>
|
||||
</entry>
|
||||
</values>
|
||||
<points>
|
||||
<point x="0.0" y="0.0"/>
|
||||
<point x="0.315" y="0.13"/>
|
||||
<point x="0.13" y="0.315"/>
|
||||
<point x="-0.13" y="0.315"/>
|
||||
<point x="-0.315" y="0.13"/>
|
||||
<point x="-0.315" y="-0.13"/>
|
||||
<point x="-0.13" y="-0.315"/>
|
||||
<point x="0.13" y="-0.315"/>
|
||||
<point x="0.315" y="-0.13"/>
|
||||
</points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2022-10-30T13:25:15.3894874</createdOn>
|
||||
<deletedOn>2026-11-02T14:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>Chassis Octal 7AC (6?6)</name>
|
||||
<values>
|
||||
<entry>
|
||||
<string>Color</string>
|
||||
<awt-color hex="f7f7ef"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Mount</string>
|
||||
<diylc.tube.TubeSocket_-Mount>CHASSIS</diylc.tube.TubeSocket_-Mount>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<awt-color hex="acaca7"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Electrode Labels</string>
|
||||
<string>n/c,H,P,S,G,n/c,H,C</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Base</string>
|
||||
<diylc.tube.TubeSocket_-Base>OCTAL</diylc.tube.TubeSocket_-Base>
|
||||
</entry>
|
||||
</values>
|
||||
<points>
|
||||
<point x="0.0" y="0.0"/>
|
||||
<point x="0.315" y="0.13"/>
|
||||
<point x="0.13" y="0.315"/>
|
||||
<point x="-0.13" y="0.315"/>
|
||||
<point x="-0.315" y="0.13"/>
|
||||
<point x="-0.315" y="-0.13"/>
|
||||
<point x="-0.13" y="-0.315"/>
|
||||
<point x="0.13" y="-0.315"/>
|
||||
<point x="0.315" y="-0.13"/>
|
||||
</points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2022-10-30T13:25:15.3894874</createdOn>
|
||||
<deletedOn>2026-11-02T14:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>Chassis 7-pin 7BK</name>
|
||||
<values>
|
||||
<entry>
|
||||
<string>Color</string>
|
||||
<awt-color hex="f7f7ef"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Mount</string>
|
||||
<diylc.tube.TubeSocket_-Mount>CHASSIS</diylc.tube.TubeSocket_-Mount>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<awt-color hex="acaca7"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Electrode Labels</string>
|
||||
<string>G,IS,H,H,P,S,C</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Base</string>
|
||||
<diylc.tube.TubeSocket_-Base>B7G</diylc.tube.TubeSocket_-Base>
|
||||
</entry>
|
||||
</values>
|
||||
<points>
|
||||
<point x="0.0" y="0.0"/>
|
||||
<point x="0.165" y="0.165"/>
|
||||
<point x="0.0" y="0.235"/>
|
||||
<point x="-0.17" y="0.165"/>
|
||||
<point x="-0.24" y="0.0"/>
|
||||
<point x="-0.17" y="-0.17"/>
|
||||
<point x="0.0" y="-0.24"/>
|
||||
<point x="0.165" y="-0.17"/>
|
||||
</points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2022-10-30T13:25:15.3894874</createdOn>
|
||||
<deletedOn>2026-11-02T14:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>Chassis Octal 8ET (EL34)</name>
|
||||
<values>
|
||||
<entry>
|
||||
<string>Color</string>
|
||||
<awt-color hex="f7f7ef"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Mount</string>
|
||||
<diylc.tube.TubeSocket_-Mount>CHASSIS</diylc.tube.TubeSocket_-Mount>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<awt-color hex="acaca7"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Electrode Labels</string>
|
||||
<string>IS,H,P,S,G,n/c,H,C</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Base</string>
|
||||
<diylc.tube.TubeSocket_-Base>OCTAL</diylc.tube.TubeSocket_-Base>
|
||||
</entry>
|
||||
</values>
|
||||
<points>
|
||||
<point x="0.0" y="0.0"/>
|
||||
<point x="0.315" y="0.13"/>
|
||||
<point x="0.13" y="0.315"/>
|
||||
<point x="-0.13" y="0.315"/>
|
||||
<point x="-0.315" y="0.13"/>
|
||||
<point x="-0.315" y="-0.13"/>
|
||||
<point x="-0.13" y="-0.315"/>
|
||||
<point x="0.13" y="-0.315"/>
|
||||
<point x="0.315" y="-0.13"/>
|
||||
</points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2022-10-30T13:25:15.3894874</createdOn>
|
||||
<deletedOn>2026-11-02T14:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
</list>
|
||||
</entry>
|
||||
@@ -2984,183 +2779,43 @@
|
||||
<list>
|
||||
<org.diylc.core.Template>
|
||||
<name>HS10</name>
|
||||
<values>
|
||||
<entry><string>Value</string><null/></entry>
|
||||
<entry><string>Power Rating</string><org.diylc.core.measures.Power value="10.0" unit="W"/></entry>
|
||||
<entry><string>Length</string><org.diylc.core.measures.Size value="15.9" unit="mm"/></entry>
|
||||
<entry><string>Width</string><org.diylc.core.measures.Size value="16.5" unit="mm"/></entry>
|
||||
<entry><string>Lead Length</string><org.diylc.core.measures.Size value="7.05" unit="mm"/></entry>
|
||||
<entry><string>Lip Width</string><org.diylc.core.measures.Size value="4.1" unit="mm"/></entry>
|
||||
<entry><string>Mounting Holes</string><diylc.passive.HeatSinkResistor_-MountingHoleCount>TWO_DIAGONAL</diylc.passive.HeatSinkResistor_-MountingHoleCount></entry>
|
||||
<entry><string>Hole Spacing</string><org.diylc.core.measures.Size value="11.3" unit="mm"/></entry>
|
||||
<entry><string>Hole Diameter</string><org.diylc.core.measures.Size value="2.4" unit="mm"/></entry>
|
||||
<entry><string>Lead Diameter</string><org.diylc.core.measures.Size value="2.0" unit="mm"/></entry>
|
||||
</values>
|
||||
<points><point x="0.0" y="0.0"/><point x="1.181" y="0.0"/></points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2026-04-02T18:38:00.0000000</createdOn>
|
||||
<deletedOn>2026-11-04T12:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>HS15</name>
|
||||
<values>
|
||||
<entry><string>Value</string><null/></entry>
|
||||
<entry><string>Power Rating</string><org.diylc.core.measures.Power value="15.0" unit="W"/></entry>
|
||||
<entry><string>Length</string><org.diylc.core.measures.Size value="19.9" unit="mm"/></entry>
|
||||
<entry><string>Width</string><org.diylc.core.measures.Size value="21.0" unit="mm"/></entry>
|
||||
<entry><string>Lead Length</string><org.diylc.core.measures.Size value="8.3" unit="mm"/></entry>
|
||||
<entry><string>Lip Width</string><org.diylc.core.measures.Size value="5.1" unit="mm"/></entry>
|
||||
<entry><string>Mounting Holes</string><diylc.passive.HeatSinkResistor_-MountingHoleCount>TWO_DIAGONAL</diylc.passive.HeatSinkResistor_-MountingHoleCount></entry>
|
||||
<entry><string>Hole Spacing</string><org.diylc.core.measures.Size value="14.3" unit="mm"/></entry>
|
||||
<entry><string>Hole Diameter</string><org.diylc.core.measures.Size value="2.4" unit="mm"/></entry>
|
||||
<entry><string>Lead Diameter</string><org.diylc.core.measures.Size value="2.0" unit="mm"/></entry>
|
||||
</values>
|
||||
<points><point x="0.0" y="0.0"/><point x="1.437" y="0.0"/></points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2026-04-02T18:38:00.0000000</createdOn>
|
||||
<deletedOn>2026-11-04T12:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>HS25</name>
|
||||
<values>
|
||||
<entry><string>Value</string><null/></entry>
|
||||
<entry><string>Power Rating</string><org.diylc.core.measures.Power value="25.0" unit="W"/></entry>
|
||||
<entry><string>Length</string><org.diylc.core.measures.Size value="27.3" unit="mm"/></entry>
|
||||
<entry><string>Width</string><org.diylc.core.measures.Size value="28.0" unit="mm"/></entry>
|
||||
<entry><string>Lead Length</string><org.diylc.core.measures.Size value="11.85" unit="mm"/></entry>
|
||||
<entry><string>Lip Width</string><org.diylc.core.measures.Size value="8.2" unit="mm"/></entry>
|
||||
<entry><string>Mounting Holes</string><diylc.passive.HeatSinkResistor_-MountingHoleCount>TWO_DIAGONAL</diylc.passive.HeatSinkResistor_-MountingHoleCount></entry>
|
||||
<entry><string>Hole Spacing</string><org.diylc.core.measures.Size value="18.3" unit="mm"/></entry>
|
||||
<entry><string>Hole Diameter</string><org.diylc.core.measures.Size value="3.2" unit="mm"/></entry>
|
||||
<entry><string>Lead Diameter</string><org.diylc.core.measures.Size value="2.0" unit="mm"/></entry>
|
||||
</values>
|
||||
<points><point x="0.0" y="0.0"/><point x="2.008" y="0.0"/></points>
|
||||
<defaultFlag>true</defaultFlag>
|
||||
<createdOn>2026-04-02T18:38:00.0000000</createdOn>
|
||||
<deletedOn>2026-11-04T12:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>HS50</name>
|
||||
<values>
|
||||
<entry><string>Value</string><null/></entry>
|
||||
<entry><string>Power Rating</string><org.diylc.core.measures.Power value="50.0" unit="W"/></entry>
|
||||
<entry><string>Length</string><org.diylc.core.measures.Size value="49.1" unit="mm"/></entry>
|
||||
<entry><string>Width</string><org.diylc.core.measures.Size value="29.7" unit="mm"/></entry>
|
||||
<entry><string>Lead Length</string><org.diylc.core.measures.Size value="11.7" unit="mm"/></entry>
|
||||
<entry><string>Lip Width</string><org.diylc.core.measures.Size value="8.3" unit="mm"/></entry>
|
||||
<entry><string>Mounting Holes</string><diylc.passive.HeatSinkResistor_-MountingHoleCount>TWO_DIAGONAL</diylc.passive.HeatSinkResistor_-MountingHoleCount></entry>
|
||||
<entry><string>Hole Spacing</string><org.diylc.core.measures.Size value="39.7" unit="mm"/></entry>
|
||||
<entry><string>Hole Diameter</string><org.diylc.core.measures.Size value="3.2" unit="mm"/></entry>
|
||||
<entry><string>Lead Diameter</string><org.diylc.core.measures.Size value="2.0" unit="mm"/></entry>
|
||||
</values>
|
||||
<points><point x="0.0" y="0.0"/><point x="2.854" y="0.0"/></points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2026-04-02T18:38:00.0000000</createdOn>
|
||||
<deletedOn>2026-11-04T12:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>HS75</name>
|
||||
<values>
|
||||
<entry><string>Value</string><null/></entry>
|
||||
<entry><string>Power Rating</string><org.diylc.core.measures.Power value="75.0" unit="W"/></entry>
|
||||
<entry><string>Length</string><org.diylc.core.measures.Size value="48.7" unit="mm"/></entry>
|
||||
<entry><string>Width</string><org.diylc.core.measures.Size value="47.5" unit="mm"/></entry>
|
||||
<entry><string>Lead Length</string><org.diylc.core.measures.Size value="11.65" unit="mm"/></entry>
|
||||
<entry><string>Lip Width</string><org.diylc.core.measures.Size value="10.5" unit="mm"/></entry>
|
||||
<entry><string>Mounting Holes</string><diylc.passive.HeatSinkResistor_-MountingHoleCount>FOUR</diylc.passive.HeatSinkResistor_-MountingHoleCount></entry>
|
||||
<entry><string>Hole Spacing</string><org.diylc.core.measures.Size value="29.0" unit="mm"/></entry>
|
||||
<entry><string>Hole Diameter</string><org.diylc.core.measures.Size value="4.4" unit="mm"/></entry>
|
||||
<entry><string>Lead Diameter</string><org.diylc.core.measures.Size value="3.2" unit="mm"/></entry>
|
||||
</values>
|
||||
<points><point x="0.0" y="0.0"/><point x="2.835" y="0.0"/></points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2026-04-02T18:38:00.0000000</createdOn>
|
||||
<deletedOn>2026-11-04T12:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>HS100</name>
|
||||
<values>
|
||||
<entry><string>Value</string><null/></entry>
|
||||
<entry><string>Power Rating</string><org.diylc.core.measures.Power value="100.0" unit="W"/></entry>
|
||||
<entry><string>Length</string><org.diylc.core.measures.Size value="65.2" unit="mm"/></entry>
|
||||
<entry><string>Width</string><org.diylc.core.measures.Size value="47.5" unit="mm"/></entry>
|
||||
<entry><string>Lead Length</string><org.diylc.core.measures.Size value="11.4" unit="mm"/></entry>
|
||||
<entry><string>Lip Width</string><org.diylc.core.measures.Size value="10.5" unit="mm"/></entry>
|
||||
<entry><string>Mounting Holes</string><diylc.passive.HeatSinkResistor_-MountingHoleCount>FOUR</diylc.passive.HeatSinkResistor_-MountingHoleCount></entry>
|
||||
<entry><string>Hole Spacing</string><org.diylc.core.measures.Size value="35.0" unit="mm"/></entry>
|
||||
<entry><string>Hole Diameter</string><org.diylc.core.measures.Size value="4.4" unit="mm"/></entry>
|
||||
<entry><string>Lead Diameter</string><org.diylc.core.measures.Size value="3.2" unit="mm"/></entry>
|
||||
</values>
|
||||
<points><point x="0.0" y="0.0"/><point x="3.465" y="0.0"/></points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2026-04-02T18:38:00.0000000</createdOn>
|
||||
<deletedOn>2026-11-04T12:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>HS150</name>
|
||||
<values>
|
||||
<entry><string>Value</string><null/></entry>
|
||||
<entry><string>Power Rating</string><org.diylc.core.measures.Power value="150.0" unit="W"/></entry>
|
||||
<entry><string>Length</string><org.diylc.core.measures.Size value="97.7" unit="mm"/></entry>
|
||||
<entry><string>Width</string><org.diylc.core.measures.Size value="47.5" unit="mm"/></entry>
|
||||
<entry><string>Lead Length</string><org.diylc.core.measures.Size value="11.65" unit="mm"/></entry>
|
||||
<entry><string>Lip Width</string><org.diylc.core.measures.Size value="10.5" unit="mm"/></entry>
|
||||
<entry><string>Mounting Holes</string><diylc.passive.HeatSinkResistor_-MountingHoleCount>SIX</diylc.passive.HeatSinkResistor_-MountingHoleCount></entry>
|
||||
<entry><string>Hole Spacing</string><org.diylc.core.measures.Size value="29.0" unit="mm"/></entry>
|
||||
<entry><string>Hole Diameter</string><org.diylc.core.measures.Size value="4.4" unit="mm"/></entry>
|
||||
<entry><string>Lead Diameter</string><org.diylc.core.measures.Size value="3.2" unit="mm"/></entry>
|
||||
</values>
|
||||
<points><point x="0.0" y="0.0"/><point x="4.764" y="0.0"/></points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2026-04-02T18:38:00.0000000</createdOn>
|
||||
<deletedOn>2026-11-04T12:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>HS200</name>
|
||||
<values>
|
||||
<entry><string>Value</string><null/></entry>
|
||||
<entry><string>Power Rating</string><org.diylc.core.measures.Power value="200.0" unit="W"/></entry>
|
||||
<entry><string>Length</string><org.diylc.core.measures.Size value="89.7" unit="mm"/></entry>
|
||||
<entry><string>Width</string><org.diylc.core.measures.Size value="72.5" unit="mm"/></entry>
|
||||
<entry><string>Lead Length</string><org.diylc.core.measures.Size value="28.0" unit="mm"/></entry>
|
||||
<entry><string>Lip Width</string><org.diylc.core.measures.Size value="15.3" unit="mm"/></entry>
|
||||
<entry><string>Mounting Holes</string><diylc.passive.HeatSinkResistor_-MountingHoleCount>SIX</diylc.passive.HeatSinkResistor_-MountingHoleCount></entry>
|
||||
<entry><string>Hole Spacing</string><org.diylc.core.measures.Size value="35.0" unit="mm"/></entry>
|
||||
<entry><string>Hole Diameter</string><org.diylc.core.measures.Size value="5.1" unit="mm"/></entry>
|
||||
<entry><string>Lead Diameter</string><org.diylc.core.measures.Size value="6.0" unit="mm"/></entry>
|
||||
</values>
|
||||
<points><point x="0.0" y="0.0"/><point x="5.736" y="0.0"/></points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2026-04-02T18:38:00.0000000</createdOn>
|
||||
<deletedOn>2026-11-04T12:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>HS250</name>
|
||||
<values>
|
||||
<entry><string>Value</string><null/></entry>
|
||||
<entry><string>Power Rating</string><org.diylc.core.measures.Power value="250.0" unit="W"/></entry>
|
||||
<entry><string>Length</string><org.diylc.core.measures.Size value="109.7" unit="mm"/></entry>
|
||||
<entry><string>Width</string><org.diylc.core.measures.Size value="72.5" unit="mm"/></entry>
|
||||
<entry><string>Lead Length</string><org.diylc.core.measures.Size value="28.65" unit="mm"/></entry>
|
||||
<entry><string>Lip Width</string><org.diylc.core.measures.Size value="15.3" unit="mm"/></entry>
|
||||
<entry><string>Mounting Holes</string><diylc.passive.HeatSinkResistor_-MountingHoleCount>SIX</diylc.passive.HeatSinkResistor_-MountingHoleCount></entry>
|
||||
<entry><string>Hole Spacing</string><org.diylc.core.measures.Size value="44.5" unit="mm"/></entry>
|
||||
<entry><string>Hole Diameter</string><org.diylc.core.measures.Size value="5.1" unit="mm"/></entry>
|
||||
<entry><string>Lead Diameter</string><org.diylc.core.measures.Size value="6.0" unit="mm"/></entry>
|
||||
</values>
|
||||
<points><point x="0.0" y="0.0"/><point x="6.575" y="0.0"/></points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2026-04-02T18:38:00.0000000</createdOn>
|
||||
<deletedOn>2026-11-04T12:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
<org.diylc.core.Template>
|
||||
<name>HS300</name>
|
||||
<values>
|
||||
<entry><string>Value</string><null/></entry>
|
||||
<entry><string>Power Rating</string><org.diylc.core.measures.Power value="300.0" unit="W"/></entry>
|
||||
<entry><string>Length</string><org.diylc.core.measures.Size value="127.7" unit="mm"/></entry>
|
||||
<entry><string>Width</string><org.diylc.core.measures.Size value="72.5" unit="mm"/></entry>
|
||||
<entry><string>Lead Length</string><org.diylc.core.measures.Size value="28.35" unit="mm"/></entry>
|
||||
<entry><string>Lip Width</string><org.diylc.core.measures.Size value="13.5" unit="mm"/></entry>
|
||||
<entry><string>Mounting Holes</string><diylc.passive.HeatSinkResistor_-MountingHoleCount>SIX</diylc.passive.HeatSinkResistor_-MountingHoleCount></entry>
|
||||
<entry><string>Hole Spacing</string><org.diylc.core.measures.Size value="52.0" unit="mm"/></entry>
|
||||
<entry><string>Hole Diameter</string><org.diylc.core.measures.Size value="6.6" unit="mm"/></entry>
|
||||
<entry><string>Lead Diameter</string><org.diylc.core.measures.Size value="6.0" unit="mm"/></entry>
|
||||
</values>
|
||||
<points><point x="0.0" y="0.0"/><point x="7.260" y="0.0"/></points>
|
||||
<defaultFlag>false</defaultFlag>
|
||||
<createdOn>2026-04-02T18:38:00.0000000</createdOn>
|
||||
<deletedOn>2026-11-04T12:00:00</deletedOn>
|
||||
</org.diylc.core.Template>
|
||||
</list>
|
||||
</entry>
|
||||
|
||||
@@ -502,7 +502,7 @@
|
||||
<minor>10</minor>
|
||||
<build>0</build>
|
||||
</versionNumber>
|
||||
<releaseDate>2026-10-30 00:00:00.000 CET</releaseDate>
|
||||
<releaseDate>2026-11-06 00:00:00.000 CET</releaseDate>
|
||||
<name></name>
|
||||
<changes>
|
||||
<org.diylc.appframework.update.Change>
|
||||
@@ -514,16 +514,32 @@
|
||||
<description>Added 'Pin Labels' property to 'SIP IC' and 'Multiwatt IC' to show pin names or pin numbers next to the pins</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Re-modeled factory variants of Resistor component type as datasheet in order to make them available to the AI; this will produce more accurate AI-driven edits</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Derive the z-order of a building blocks placed as a single component based on its child components</description>
|
||||
<changeType>NEW_FEATURE</changeType>
|
||||
<description>Added datasheets to 'DIP IC', 'SIP IC' and 'Multiwatt IC' - pick a part by its number from the component's submenu to set its pin count, spacing and pin names at once - more than 100 chips in total; the AI Assistant can place these parts by part number too</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>NEW_FEATURE</changeType>
|
||||
<description>Added datasheets to 'DIP IC', 'SIP IC' and 'Multiwatt IC' - pick a part by its number from the component's submenu to set its pin count, spacing and pin names at once - more than 100 chips in total; the AI Assistant can place these parts by part number too</description>
|
||||
<description>Added datasheets to 'Transistor (TO-92)', 'Transistor (TO-1)', 'Transistor (TO-126)', 'Transistor (TO-220)' and 'Transistor (TO-3)' - pick a part by its number from the component's submenu to set its value and pinout at once - more than 250 transistors, JFETs, MOSFETs and voltage regulators used in guitar effects, hi-fi, radio and synth projects; the AI Assistant can place these parts by part number too</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>NEW_FEATURE</changeType>
|
||||
<description>Added 'Pinout' property to 'Transistor (TO-3)' and a terminal in the mounting hole next to the pins, so the case (collector) can be wired and shows up in netlists and AI analysis</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>NEW_FEATURE</changeType>
|
||||
<description>Added a datasheet to 'Tube Socket' - pick a tube by its type from the component's submenu to set its base and electrode labels at once - more than 180 preamp, power, rectifier, radio, space-charge and Soviet tubes; the AI Assistant can place these tubes by type too</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>NEW_FEATURE</changeType>
|
||||
<description>Added the UX4 base to 'Tube Socket', with the 300B, 2A3, 6A3 and 45 triodes and the 5Z3 rectifier in its datasheet</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>NEW_FEATURE</changeType>
|
||||
<description>Added datasheets to 'Diode (plastic)' and 'Diode (glass)' - pick a part by its number from the component's submenu to draw it at its real package size and colours - more than 300 rectifiers, Schottky, signal, germanium and zener diodes, including the Japanese clippers of classic overdrive pedals; the AI Assistant can place these parts by part number too</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>NEW_FEATURE</changeType>
|
||||
<description>Added 'Pin Names', 'Pin Labels' and 'Thickness' to 'Sub-Mini Tube' to name each lead and draw flat bulbs, and a datasheet with popular Western and Soviet sub-miniature tubes such as 6021, 6111, 5840, 5672, 6N16B and 6N17B that sets leads, bulb size and lead names at once</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>NEW_FEATURE</changeType>
|
||||
@@ -533,10 +549,42 @@
|
||||
<changeType>NEW_FEATURE</changeType>
|
||||
<description>Added a datasheet to 'Enclosure' with Hammond 1590, 1550, 1441 and 1444 enclosures and the 125B size - more than 130 variations</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>NEW_FEATURE</changeType>
|
||||
<description>Datasheet models in a component's drop-down menu now have the same pin as saved variants, so a model such as a 2N3904 can be made the default that is placed when the component is clicked; a component has one default, so pinning a model replaces a pinned variant and the other way round</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Re-modeled factory variants of 'Resistor' and 'Heat Sink Resistor' component types as datasheets in order to make them available to the AI; this will produce more accurate AI-driven edits</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Derive the z-order of a building blocks placed as a single component based on its child components</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Moved 'Enclosure', cutouts, 'Drill Hole' and 'Dial Scale' to the new 'Hardware' category</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Pins of transistors, 'SIP IC', 'DIP Switch' and 'Bridge Rectifier' are now drawn on top of the body, so they stay visible whatever the body transparency, and pins are drawn in the same color on every component, including 'DIP IC', 'Bridge Rectifier', 'LED Bar Graph', trimmers and PCB-mounted 'Tube Socket'</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>'Electrode Labels' of 'Tube Socket' is now called 'Pin Names', as on ICs, and the new 'Pin Labels' property shows pin names, pin numbers or nothing</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Added B-E-C, C-E-B and S-D-G transistor pinouts and ADJ-IN-OUT, IN-OUT-GND and IN-OUT-ADJ regulator pinouts</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>The '+N' variant count next to a component in the component tree is now a button - click it to pick one of the component's variants or datasheet parts from a drop-down menu, without having to right-click the component</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>'Transistor (TO-1)' now shows the tab on the rim of the metal can next to pin 1, as on the real part, so the orientation is easy to tell at a glance; turn it off with the new 'Flange' property</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>BUG_FIX</changeType>
|
||||
<description>'DIP IC' with 'Display Pin #s' set to 'No' numbered its pins in the wrong order in netlists and AI analysis, e.g. pin 8 of an 8-pin IC was reported as pin 5</description>
|
||||
@@ -553,6 +601,22 @@
|
||||
<changeType>BUG_FIX</changeType>
|
||||
<description>'SIP IC' body was drawn too short when 'Pin Spacing' is not a multiple of 0.1 inch, leaving the last pin outside the body</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>BUG_FIX</changeType>
|
||||
<description>SPICE netlists listed the pins of transistors with E-C-B pinout in the wrong order</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>BUG_FIX</changeType>
|
||||
<description>'Tube Socket' variants with electrode labels connected pins that share a label in netlists and AI analysis, e.g. both anodes of a 12AX7 or both heater ends; these variants are replaced by the datasheet</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>BUG_FIX</changeType>
|
||||
<description>'Tube Socket' with a Noval, 7-pin or Duodecar base on a chassis mount did not rotate its mounting notches with the pins when 'Angle' was changed</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>BUG_FIX</changeType>
|
||||
<description>'Sub-Mini Tube' with circular leads numbered the body centre as lead 1 in netlists and AI analysis, so every real lead was reported one number too high</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
</changes>
|
||||
<url>https://github.com/bancika/diy-layout-creator/releases</url>
|
||||
</org.diylc.appframework.update.Version>
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
*
|
||||
* DIY Layout Creator (DIYLC).
|
||||
* Copyright (c) 2009-2025 held jointly by the individual authors.
|
||||
*
|
||||
* This file is part of DIYLC.
|
||||
*
|
||||
* DIYLC is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* DIYLC is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with DIYLC. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.diylc.netlist;
|
||||
|
||||
import java.awt.geom.Point2D;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.diylc.testcomponents.OnePointTestComponent;
|
||||
import org.diylc.testcomponents.SwitchTestComponent;
|
||||
|
||||
public class NetlistSortingTest {
|
||||
|
||||
@Test
|
||||
public void namesDifferingOnlyInCaseSortTheSameEitherWay() {
|
||||
Node lower = new Node(new OnePointTestComponent("1k 2w", "2", new Point2D.Double(0, 0)), 0);
|
||||
Node upper = new Node(new OnePointTestComponent("1k 2W", "2", new Point2D.Double(0, 0)), 0);
|
||||
|
||||
Assert.assertEquals(sorted(lower, upper), sorted(upper, lower));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sameNamedPartsSortByLocation() {
|
||||
Node top = new Node(new OnePointTestComponent("R1", "1", new Point2D.Double(50, 0)), 0);
|
||||
Node bottom = new Node(new OnePointTestComponent("R1", "1", new Point2D.Double(0, 10)), 0);
|
||||
|
||||
Assert.assertEquals(Arrays.asList(top, bottom), sorted(bottom, top));
|
||||
Assert.assertEquals(Arrays.asList(top, bottom), sorted(top, bottom));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sameNamedSwitchesKeepTheirPlaceInASetup() {
|
||||
SwitchTestComponent upper = switchAt(0);
|
||||
SwitchTestComponent lower = switchAt(10);
|
||||
|
||||
SwitchSetup upperOn = setup(new Position(lower, 1), new Position(upper, 0));
|
||||
SwitchSetup lowerOn = setup(new Position(upper, 1), new Position(lower, 0));
|
||||
|
||||
Assert.assertEquals("SW1.ON:SW1.OFF", upperOn.toString());
|
||||
Assert.assertEquals("SW1.OFF:SW1.ON", lowerOn.toString());
|
||||
Assert.assertEquals(-Integer.signum(lowerOn.compareTo(upperOn)),
|
||||
Integer.signum(upperOn.compareTo(lowerOn)));
|
||||
Assert.assertNotEquals(0, upperOn.compareTo(lowerOn));
|
||||
}
|
||||
|
||||
private static List<Node> sorted(Node... nodes) {
|
||||
List<Node> list = new ArrayList<Node>(Arrays.asList(nodes));
|
||||
Collections.sort(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
private static SwitchTestComponent switchAt(double y) {
|
||||
SwitchTestComponent component = new SwitchTestComponent("SW1");
|
||||
component.setControlPoint(new Point2D.Double(0, y), 0);
|
||||
component.setControlPoint(new Point2D.Double(10, y), 1);
|
||||
return component;
|
||||
}
|
||||
|
||||
private static SwitchSetup setup(Position... positions) {
|
||||
return new SwitchSetup(new ArrayList<Position>(Arrays.asList(positions)));
|
||||
}
|
||||
}
|
||||
@@ -87,6 +87,8 @@ public class NodeNameTest {
|
||||
public void railNameRejectsPinsThatNameNoNet() {
|
||||
Assert.assertNull(Node.railName("NC_1"));
|
||||
Assert.assertNull(Node.railName("RSV_2"));
|
||||
// a tube pin marked "internal connection" must not be used as a tie point
|
||||
Assert.assertNull(Node.railName("IC"));
|
||||
Assert.assertNull(Node.railName(null));
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,246 @@
|
||||
/*
|
||||
|
||||
DIY Layout Creator (DIYLC).
|
||||
Copyright (c) 2009-2025 held jointly by the individual authors.
|
||||
|
||||
This file is part of DIYLC.
|
||||
|
||||
DIYLC is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
DIYLC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with DIYLC. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
package org.diylc.presenter;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.awt.geom.Point2D;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.diylc.appframework.miscutils.IConfigListener;
|
||||
import org.diylc.appframework.miscutils.IConfigurationManager;
|
||||
import org.diylc.common.BuildingBlock;
|
||||
import org.diylc.common.IBlockProcessor;
|
||||
import org.diylc.common.IPlugInPort;
|
||||
import org.diylc.core.IDIYComponent;
|
||||
import org.diylc.testcomponents.TwoPointTestComponent;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Covers {@link BuildingBlockManager#importDefaultBlocks(List)}: factory blocks reach existing
|
||||
* users by their {@code createdOn}, withdrawn ones leave by their {@code deletedOn}, and the
|
||||
* recorded import date comes from the bundled file rather than the clock.
|
||||
*/
|
||||
public class DefaultBlockImportTest {
|
||||
|
||||
private static final LocalDateTime OLDER_RELEASE = LocalDateTime.of(2026, 1, 1, 0, 0);
|
||||
private static final LocalDateTime NEWER_RELEASE = LocalDateTime.of(2026, 6, 1, 0, 0);
|
||||
|
||||
private MapConfigurationManager configManager;
|
||||
private BuildingBlockManager manager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
configManager = new MapConfigurationManager();
|
||||
manager = new BuildingBlockManager(configManager, null, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void freshInstallImportsEveryBlock() {
|
||||
manager.importDefaultBlocks(
|
||||
Arrays.asList(block("Old", OLDER_RELEASE), block("New", NEWER_RELEASE)));
|
||||
|
||||
assertTrue(blocks().containsKey("Old"));
|
||||
assertTrue(blocks().containsKey("New"));
|
||||
assertEquals(NEWER_RELEASE, importDate());
|
||||
assertTrue(configManager.readBoolean(IPlugInPort.DEFAULT_BLOCKS_IMPORTED_KEY, false));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void configFromTheOneTimeImportGetsTheMissingBlocksWithoutDuplicates() {
|
||||
List<IDIYComponent<?>> kept = components();
|
||||
Map<String, List<IDIYComponent<?>>> userBlocks = new HashMap<String, List<IDIYComponent<?>>>();
|
||||
userBlocks.put("Old", kept);
|
||||
configManager.writeValue(IPlugInPort.BLOCKS_KEY, userBlocks);
|
||||
configManager.writeValue(IPlugInPort.DEFAULT_BLOCKS_IMPORTED_KEY, true);
|
||||
|
||||
manager.importDefaultBlocks(
|
||||
Arrays.asList(block("Old", OLDER_RELEASE), block("New", OLDER_RELEASE)));
|
||||
|
||||
assertEquals(2, blocks().size());
|
||||
assertSame(kept, blocks().get("Old"));
|
||||
assertTrue(blocks().containsKey("New"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void blockOfANewerReleaseArrivesAfterAnOlderReleaseRanFirst() {
|
||||
manager.importDefaultBlocks(Arrays.asList(block("Old", OLDER_RELEASE)));
|
||||
manager.importDefaultBlocks(
|
||||
Arrays.asList(block("Old", OLDER_RELEASE), block("New", NEWER_RELEASE)));
|
||||
|
||||
assertTrue(blocks().containsKey("New"));
|
||||
assertEquals(NEWER_RELEASE, importDate());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void olderReleaseRunAfterANewerOneLeavesTheImportDate() {
|
||||
manager.importDefaultBlocks(
|
||||
Arrays.asList(block("Old", OLDER_RELEASE), block("New", NEWER_RELEASE)));
|
||||
manager.importDefaultBlocks(Arrays.asList(block("Old", OLDER_RELEASE)));
|
||||
|
||||
assertEquals(NEWER_RELEASE, importDate());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void factoryBlockDeletedByTheUserIsNotImportedAgain() {
|
||||
manager.importDefaultBlocks(Arrays.asList(block("Old", OLDER_RELEASE)));
|
||||
blocks().remove("Old");
|
||||
|
||||
manager.importDefaultBlocks(Arrays.asList(block("Old", OLDER_RELEASE)));
|
||||
|
||||
assertFalse(blocks().containsKey("Old"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void userBlockOfTheSameNameIsKept() {
|
||||
List<IDIYComponent<?>> own = components();
|
||||
Map<String, List<IDIYComponent<?>>> userBlocks = new HashMap<String, List<IDIYComponent<?>>>();
|
||||
userBlocks.put("New", own);
|
||||
configManager.writeValue(IPlugInPort.BLOCKS_KEY, userBlocks);
|
||||
|
||||
manager.importDefaultBlocks(Arrays.asList(block("New", OLDER_RELEASE)));
|
||||
|
||||
assertSame(own, blocks().get("New"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withdrawnBlockIsRemovedFromTheRecentlyUsedListToo() {
|
||||
manager.importDefaultBlocks(Arrays.asList(block("Old", OLDER_RELEASE)));
|
||||
List<String> recent =
|
||||
new ArrayList<String>(Arrays.asList(IBlockProcessor.BLOCK_PREFIX + "Old"));
|
||||
configManager.writeValue(IPlugInPort.RECENT_COMPONENTS_KEY, recent);
|
||||
|
||||
manager.importDefaultBlocks(Arrays.asList(withdrawn("Old", NEWER_RELEASE)));
|
||||
|
||||
assertFalse(blocks().containsKey("Old"));
|
||||
assertTrue(recent.isEmpty());
|
||||
assertEquals(NEWER_RELEASE, importDate());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void blockRecreatedByTheUserAfterTheWithdrawalIsKept() {
|
||||
manager.importDefaultBlocks(Arrays.asList(withdrawn("Old", OLDER_RELEASE)));
|
||||
blocks().put("Old", components());
|
||||
|
||||
manager.importDefaultBlocks(Arrays.asList(withdrawn("Old", OLDER_RELEASE)));
|
||||
|
||||
assertTrue(blocks().containsKey("Old"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void blockCreatedAndWithdrawnSinceTheLastImportNeverArrives() {
|
||||
BuildingBlock shortLived = withdrawn("Short-lived", NEWER_RELEASE);
|
||||
shortLived.setCreatedOn(OLDER_RELEASE);
|
||||
|
||||
manager.importDefaultBlocks(Arrays.asList(shortLived));
|
||||
|
||||
assertFalse(blocks().containsKey("Short-lived"));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private Map<String, List<IDIYComponent<?>>> blocks() {
|
||||
return (Map<String, List<IDIYComponent<?>>>) configManager.readObject(IPlugInPort.BLOCKS_KEY,
|
||||
null);
|
||||
}
|
||||
|
||||
private LocalDateTime importDate() {
|
||||
return (LocalDateTime) configManager.readObject(IPlugInPort.DEFAULT_BLOCKS_IMPORT_DATE_KEY,
|
||||
null);
|
||||
}
|
||||
|
||||
private static List<IDIYComponent<?>> components() {
|
||||
return new ArrayList<IDIYComponent<?>>(Arrays.asList(
|
||||
new TwoPointTestComponent("R1", new Point2D.Double(0, 0), new Point2D.Double(10, 0))));
|
||||
}
|
||||
|
||||
private static BuildingBlock block(String name, LocalDateTime createdOn) {
|
||||
BuildingBlock block = new BuildingBlock(name, components());
|
||||
block.setCreatedOn(createdOn);
|
||||
return block;
|
||||
}
|
||||
|
||||
private static BuildingBlock withdrawn(String name, LocalDateTime deletedOn) {
|
||||
BuildingBlock block = new BuildingBlock(name, null);
|
||||
block.setDeletedOn(deletedOn);
|
||||
return block;
|
||||
}
|
||||
|
||||
private static class MapConfigurationManager implements IConfigurationManager<Object> {
|
||||
|
||||
private final Map<String, Object> values = new HashMap<String, Object>();
|
||||
|
||||
@Override
|
||||
public void addConfigListener(String key, IConfigListener listener) {}
|
||||
|
||||
@Override
|
||||
public boolean readBoolean(String key, boolean defaultValue) {
|
||||
return (Boolean) readObject(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString(String key, String defaultValue) {
|
||||
return (String) readObject(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInt(String key, int defaultValue) {
|
||||
return (Integer) readObject(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float readFloat(String key, float defaultValue) {
|
||||
return (Float) readObject(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double readDouble(String key, double defaultValue) {
|
||||
return (Double) readObject(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object readObject(String key, Object defaultValue) {
|
||||
return values.containsKey(key) ? values.get(key) : defaultValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeValue(String key, Object value) {
|
||||
values.put(key, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getSerializer() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(String appName) {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
/*
|
||||
|
||||
DIY Layout Creator (DIYLC).
|
||||
Copyright (c) 2009-2025 held jointly by the individual authors.
|
||||
|
||||
This file is part of DIYLC.
|
||||
|
||||
DIYLC is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
DIYLC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with DIYLC. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
package org.diylc.presenter;
|
||||
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.diylc.appframework.miscutils.IConfigListener;
|
||||
import org.diylc.appframework.miscutils.IConfigurationManager;
|
||||
import org.diylc.common.ComponentType;
|
||||
import org.diylc.common.IPlugInPort;
|
||||
import org.diylc.core.CreationMethod;
|
||||
import org.diylc.core.annotations.BomPolicy;
|
||||
import org.diylc.core.annotations.KeywordPolicy;
|
||||
import org.diylc.testcomponents.TwoPointTestComponent;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Covers the single default slot that variants and datasheet models share, see
|
||||
* {@code docs/plans/default-datasheet-model.md}.
|
||||
*/
|
||||
public class VariantManagerTest {
|
||||
|
||||
private static final String[] NPN = new String[] {"BJT (NPN)", "2N3904", "BJT_EBC"};
|
||||
private static final String[] PNP = new String[] {"BJT (PNP)", "2N3906", "BJT_EBC"};
|
||||
|
||||
private MapConfigurationManager configManager;
|
||||
private ComponentType type;
|
||||
private VariantManager manager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
configManager = new MapConfigurationManager();
|
||||
type = createType(new ArrayList<String[]>(Arrays.asList(NPN, PNP)));
|
||||
manager = new VariantManager(configManager, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pinningAModelMakesItTheDefault() {
|
||||
manager.setDefaultModel(type, NPN);
|
||||
|
||||
assertTrue(manager.isDefaultModel(type, NPN));
|
||||
assertFalse(manager.isDefaultModel(type, PNP));
|
||||
assertArrayEquals(NPN, manager.getDefaultModel(type));
|
||||
assertEquals("datasheet:BJT (NPN)|2N3904", manager.getDefaultVariant(type));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pinningTheDefaultModelAgainClearsIt() {
|
||||
manager.setDefaultModel(type, NPN);
|
||||
manager.setDefaultModel(type, NPN);
|
||||
|
||||
assertFalse(manager.isDefaultModel(type, NPN));
|
||||
assertNull(manager.getDefaultModel(type));
|
||||
assertNull(manager.getDefaultVariant(type));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pinningAnotherModelReplacesTheDefault() {
|
||||
manager.setDefaultModel(type, NPN);
|
||||
manager.setDefaultModel(type, PNP);
|
||||
|
||||
assertFalse(manager.isDefaultModel(type, NPN));
|
||||
assertArrayEquals(PNP, manager.getDefaultModel(type));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void modelAndVariantReplaceEachOther() {
|
||||
manager.setDefaultVariant(type, "My variant");
|
||||
manager.setDefaultModel(type, NPN);
|
||||
|
||||
assertArrayEquals(NPN, manager.getDefaultModel(type));
|
||||
|
||||
manager.setDefaultVariant(type, "My variant");
|
||||
|
||||
assertEquals("My variant", manager.getDefaultVariant(type));
|
||||
assertNull(manager.getDefaultModel(type));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void modelMissingFromTheDatasheetIsNoDefault() {
|
||||
manager.setDefaultModel(type, NPN);
|
||||
ComponentType reduced = createType(new ArrayList<String[]>(Arrays.<String[]>asList(PNP)));
|
||||
|
||||
assertNull(manager.getDefaultModel(reduced));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void legacyKeyIsReadAndReplacedOnWrite() {
|
||||
String legacyKey = type.getCategory() + "." + type.getName();
|
||||
Map<String, String> defaults = new HashMap<String, String>();
|
||||
defaults.put(legacyKey, "Old variant");
|
||||
configManager.writeValue(IPlugInPort.DEFAULT_TEMPLATES_KEY, defaults);
|
||||
|
||||
assertEquals("Old variant", manager.getDefaultVariant(type));
|
||||
|
||||
manager.setDefaultModel(type, PNP);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, String> written = (Map<String, String>) configManager
|
||||
.readObject(IPlugInPort.DEFAULT_TEMPLATES_KEY, null);
|
||||
assertFalse(written.containsKey(legacyKey));
|
||||
assertArrayEquals(PNP, manager.getDefaultModel(type));
|
||||
}
|
||||
|
||||
private static ComponentType createType(List<String[]> datasheet) {
|
||||
return new ComponentType("Test Transistor", "", CreationMethod.SINGLE_CLICK, "Test", "Q", "",
|
||||
null, TwoPointTestComponent.class, 0, false, BomPolicy.SHOW_ALL_NAMES, false, null,
|
||||
KeywordPolicy.NEVER_SHOW, null, false, datasheet, 2);
|
||||
}
|
||||
|
||||
private static class MapConfigurationManager implements IConfigurationManager<Object> {
|
||||
|
||||
private final Map<String, Object> values = new HashMap<String, Object>();
|
||||
|
||||
@Override
|
||||
public void addConfigListener(String key, IConfigListener listener) {}
|
||||
|
||||
@Override
|
||||
public boolean readBoolean(String key, boolean defaultValue) {
|
||||
return (Boolean) readObject(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readString(String key, String defaultValue) {
|
||||
return (String) readObject(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInt(String key, int defaultValue) {
|
||||
return (Integer) readObject(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float readFloat(String key, float defaultValue) {
|
||||
return (Float) readObject(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double readDouble(String key, double defaultValue) {
|
||||
return (Double) readObject(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object readObject(String key, Object defaultValue) {
|
||||
return values.containsKey(key) ? values.get(key) : defaultValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeValue(String key, Object value) {
|
||||
values.put(key, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getSerializer() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(String appName) {}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.diylc</groupId>
|
||||
<artifactId>diylc-parent</artifactId>
|
||||
<version>6.9.0</version>
|
||||
<version>6.10.0</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>diylc-library</artifactId>
|
||||
|
||||
@@ -64,8 +64,6 @@ public abstract class AbstractMakerBoard extends AbstractTransparentComponent<Vo
|
||||
public static final Color ESP_BLACK = Color.decode("#3E3E3E");
|
||||
public static final Color WEMOS_BLUE = Color.decode("#006699");
|
||||
|
||||
public static Color PIN_COLOR = Color.decode("#00B2EE");
|
||||
public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
public static Color HEADER_BODY_COLOR = Color.decode("#222222");
|
||||
public static Color HEADER_BORDER_COLOR = Color.decode("#111111");
|
||||
public static Color MOUNTING_HOLE_COLOR = Color.decode("#B8860B");
|
||||
|
||||
@@ -74,8 +74,6 @@ public class LEDBarGraph extends AbstractLabeledComponent<String> {
|
||||
|
||||
public static Color BODY_COLOR = Color.decode("#2B2B2B");
|
||||
public static Color BORDER_COLOR = Color.decode("#1A1A1A");
|
||||
public static Color PIN_COLOR = METAL_COLOR;
|
||||
public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
// A bar graph is a scale, not a lamp: green most of the way up, yellow for the last two and
|
||||
// red for the topmost, as on a level or VU meter.
|
||||
public static Color SEGMENT_GREEN = Color.decode("#43A047");
|
||||
|
||||
@@ -59,8 +59,6 @@ public class DIPSwitch extends AbstractTransparentComponent<String> implements I
|
||||
|
||||
public static Color BODY_COLOR = Color.decode("#E84E46");
|
||||
public static Color BORDER_COLOR = BODY_COLOR.darker();
|
||||
public static Color PIN_COLOR = Color.decode("#00B2EE");
|
||||
public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
public static Color TICK_COLOR = Color.white;
|
||||
public static Color LABEL_COLOR = Color.white;
|
||||
public static int EDGE_RADIUS = 2;
|
||||
@@ -330,23 +328,6 @@ public class DIPSwitch extends AbstractTransparentComponent<String> implements I
|
||||
}
|
||||
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
|
||||
Area mainArea = getBody()[0];
|
||||
if (!outlineMode) {
|
||||
int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2;
|
||||
for (Point2D point : controlPoints) {
|
||||
g2d.setColor(PIN_COLOR);
|
||||
int pinWidth = getClosestOdd(pinSize
|
||||
/ (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180 ? 2f
|
||||
: 1f));
|
||||
int pinHeight = getClosestOdd(pinSize
|
||||
/ (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180 ? 1f
|
||||
: 2f));
|
||||
g2d.fillRect((int) Math.round(point.getX() - pinWidth / 2), (int) Math.round(point.getY() - pinHeight / 2),
|
||||
pinWidth, pinHeight);
|
||||
g2d.setColor(PIN_BORDER_COLOR);
|
||||
g2d.drawRect((int) Math.round(point.getX() - pinWidth / 2), (int) Math.round(point.getY() - pinHeight / 2),
|
||||
pinWidth, pinHeight);
|
||||
}
|
||||
}
|
||||
Composite oldComposite = applyAlpha(g2d, componentState);
|
||||
g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : getBodyColor());
|
||||
g2d.fill(mainArea);
|
||||
@@ -390,6 +371,30 @@ public class DIPSwitch extends AbstractTransparentComponent<String> implements I
|
||||
}
|
||||
}
|
||||
|
||||
// the pins sit under the body, so they are drawn over it to stay visible whatever its alpha
|
||||
int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2;
|
||||
int pinWidth = getClosestOdd(pinSize
|
||||
/ (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180 ? 2f
|
||||
: 1f));
|
||||
int pinHeight = getClosestOdd(pinSize
|
||||
/ (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180 ? 1f
|
||||
: 2f));
|
||||
Color pinBorderColor = outlineMode ? ((Theme) ConfigurationManager.getInstance()
|
||||
.readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME)).getOutlineColor()
|
||||
: PIN_BORDER_COLOR;
|
||||
for (Point2D point : controlPoints) {
|
||||
int pinX = (int) Math.round(point.getX() - pinWidth / 2);
|
||||
int pinY = (int) Math.round(point.getY() - pinHeight / 2);
|
||||
if (!outlineMode) {
|
||||
g2d.setColor(PIN_COLOR);
|
||||
drawingObserver.startTracking();
|
||||
g2d.fillRect(pinX, pinY, pinWidth, pinHeight);
|
||||
drawingObserver.stopTracking();
|
||||
}
|
||||
g2d.setColor(pinBorderColor);
|
||||
g2d.drawRect(pinX, pinY, pinWidth, pinHeight);
|
||||
}
|
||||
|
||||
// Draw label.
|
||||
g2d.setFont(project.getFont());
|
||||
Color finalLabelColor;
|
||||
|
||||
@@ -64,8 +64,6 @@ public class MiniRelay extends AbstractLabeledComponent<String> implements IGerb
|
||||
|
||||
public static Color BODY_COLOR = Color.gray;
|
||||
public static Color BORDER_COLOR = Color.gray.darker();
|
||||
public static Color PIN_COLOR = Color.decode("#00B2EE");
|
||||
public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
public static Color INDENT_COLOR = Color.gray.darker();
|
||||
public static Color LABEL_COLOR = Color.white;
|
||||
public static int EDGE_RADIUS = 6;
|
||||
|
||||
@@ -60,8 +60,6 @@ public class PinHeader extends AbstractTransparentComponent<Void> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public static Color BODY_COLOR = Color.gray;
|
||||
public static Color PIN_COLOR = Color.decode("#00B2EE");
|
||||
public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
public static Color INDENT_COLOR = Color.gray.darker();
|
||||
public static Size PIN_SIZE = new Size(0.03d, SizeUnit.in);
|
||||
public static Size INDENT_SIZE = new Size(0.1d, SizeUnit.in);
|
||||
|
||||
@@ -57,8 +57,6 @@ public class TactileMicroSwitch extends AbstractLabeledComponent<String> impleme
|
||||
|
||||
private static final Color BODY_COLOR = Color.lightGray;
|
||||
private static final Color BORDER_COLOR = Color.gray.darker();
|
||||
private static final Color PIN_COLOR = METAL_COLOR;
|
||||
private static final Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
private static final Color INDENT_COLOR = Color.gray.darker();
|
||||
private static final Color LABEL_COLOR = Color.white;
|
||||
private static final Size PIN_SIZE = new Size(0.04d, SizeUnit.in);
|
||||
|
||||
@@ -56,8 +56,6 @@ public class ThonkJack3_5 extends AbstractTransparentComponent<String> {
|
||||
private static Color SHAFT_COLOR = Color.lightGray;
|
||||
private static Color SHAFT_BORDER_COLOR = SHAFT_COLOR.darker();
|
||||
private static Color HOLE_COLOR = Color.decode("#111111");
|
||||
public static Color PIN_COLOR = METAL_COLOR;
|
||||
public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
public static Size PIN_SIZE = new Size(0.03d, SizeUnit.in);
|
||||
protected static Display DISPLAY = Display.NAME;
|
||||
|
||||
|
||||
@@ -70,8 +70,6 @@ public class AudioTransformer extends AbstractMultiPartComponent<String> impleme
|
||||
public static Color CORE_BORDER_COLOR = CORE_COLOR.darker();
|
||||
public static Color COIL_COLOR = Color.decode("#DDDDDD");
|
||||
public static Color COIL_BORDER_COLOR = COIL_COLOR.darker();
|
||||
public static Color PIN_COLOR = Color.decode("#00B2EE");
|
||||
public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
public static Color LABEL_COLOR = Color.white;
|
||||
public static int EDGE_RADIUS = 6;
|
||||
public static Size PIN_SIZE = new Size(0.03d, SizeUnit.in);
|
||||
|
||||
@@ -59,7 +59,6 @@ public class BoxTrimmer extends AbstractTransparentComponent<Resistance> {
|
||||
public static Size BODY_LENGTH = new Size(0.375d, SizeUnit.in); // 9.53mm from datasheet
|
||||
public static Color BODY_COLOR = Color.decode("#4477BB");
|
||||
public static Color BORDER_COLOR = BODY_COLOR.darker();
|
||||
public static Color PIN_COLOR = METAL_COLOR;
|
||||
public static Color SCREW_COLOR = BRASS_COLOR;
|
||||
protected String name;
|
||||
private Resistance value = new Resistance(10d, ResistanceUnit.K);
|
||||
@@ -245,7 +244,7 @@ public class BoxTrimmer extends AbstractTransparentComponent<Resistance> {
|
||||
g2d.drawLine(bodyX + 2 + screwSize / 2 - slotLen / 2, bodyY,
|
||||
bodyX + 2 + screwSize / 2 + slotLen / 2, bodyY);
|
||||
|
||||
// Draw three pins at bottom (light gray)
|
||||
// Draw three pins at bottom
|
||||
g2d.setColor(PIN_COLOR);
|
||||
int pinSpacing = bodyWidth / 4;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
|
||||
@@ -40,6 +40,8 @@ import org.diylc.components.AbstractLeadedComponent;
|
||||
import org.diylc.components.transform.SimpleComponentTransformer;
|
||||
import org.diylc.core.CreationMethod;
|
||||
import org.diylc.core.IDIYComponent;
|
||||
import org.diylc.core.IDatasheetSupport;
|
||||
import org.diylc.core.annotations.AiNote;
|
||||
import org.diylc.core.annotations.ComponentDescriptor;
|
||||
import org.diylc.core.annotations.EditableProperty;
|
||||
import org.diylc.core.annotations.PositiveMeasureValidator;
|
||||
@@ -54,11 +56,14 @@ import org.diylc.core.Project;
|
||||
import org.diylc.core.Theme;
|
||||
import org.diylc.utils.Constants;
|
||||
|
||||
@AiNote("A datasheet model is an Arcol HS part such as HS25 or HS100 and sets 'Power Rating' and the whole housing - body size, lips, mounting holes, lead length and diameter - but never the resistance; set 'Value' separately")
|
||||
@ComponentDescriptor(name = "Heat Sink Resistor", author = "Branislav Stojkovic", category = "Passive",
|
||||
creationMethod = CreationMethod.SINGLE_CLICK, instanceNamePrefix = "R",
|
||||
description = "Power resistor with heatsink; similar to Arcol HS series",
|
||||
zOrder = IDIYComponent.COMPONENT, transformer = SimpleComponentTransformer.class, enableCache = true)
|
||||
public class HeatSinkResistor extends AbstractLeadedComponent<Resistance> implements IGerberComponentSimple {
|
||||
zOrder = IDIYComponent.COMPONENT, transformer = SimpleComponentTransformer.class, enableCache = true,
|
||||
enableDatasheet = true, datasheetCreationStepCount = 2, datasheetModelColumn = 1)
|
||||
public class HeatSinkResistor extends AbstractLeadedComponent<Resistance>
|
||||
implements IGerberComponentSimple, IDatasheetSupport {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@@ -107,6 +112,37 @@ public class HeatSinkResistor extends AbstractLeadedComponent<Resistance> implem
|
||||
leadLength = DEFAULT_LEAD_LENGTH;
|
||||
}
|
||||
|
||||
public HeatSinkResistor(String[] model) {
|
||||
this();
|
||||
|
||||
applyModel(model);
|
||||
}
|
||||
|
||||
// columns: series, part, power, body length, total width, lead length, lip width, mounting holes,
|
||||
// hole spacing, hole diameter, lead diameter; the resistance is not part of a row because the
|
||||
// housing depends only on the part
|
||||
@Override
|
||||
public void applyModel(String[] model) {
|
||||
setPower(Power.parseCapacitance(model[2]));
|
||||
setLength(Size.parseSize(model[3]));
|
||||
setWidth(Size.parseSize(model[4]));
|
||||
setLeadLength(Size.parseSize(model[5]));
|
||||
setLipSize(Size.parseSize(model[6]));
|
||||
setMountingHoles(parseMountingHoles(model[7]));
|
||||
setHorizontalHoleSpacing(Size.parseSize(model[8]));
|
||||
setMountingHoleDiameter(Size.parseSize(model[9]));
|
||||
setTerminalLeadDiameter(Size.parseSize(model[10]));
|
||||
}
|
||||
|
||||
private static MountingHoleCount parseMountingHoles(String label) {
|
||||
for (MountingHoleCount value : MountingHoleCount.values()) {
|
||||
if (value.toString().equalsIgnoreCase(label)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("Unknown mounting holes: " + label);
|
||||
}
|
||||
|
||||
private MountingHoleCount holeCount() {
|
||||
return mountingHoles == null ? MountingHoleCount.TWO_DIAGONAL : mountingHoles;
|
||||
}
|
||||
|
||||
@@ -59,8 +59,6 @@ public class MiniaturePotentiometer extends AbstractPotentiometer {
|
||||
private static Color BORDER_COLOR = BODY_COLOR.darker();
|
||||
private static Color SHAFT_COLOR = Color.lightGray;
|
||||
private static Color SHAFT_BORDER_COLOR = SHAFT_COLOR.darker();
|
||||
public static Color PIN_COLOR = METAL_COLOR;
|
||||
public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
public static Size PIN_SIZE = new Size(0.03d, SizeUnit.in);
|
||||
protected static Display DISPLAY = Display.NAME;
|
||||
|
||||
@@ -319,9 +317,9 @@ public class MiniaturePotentiometer extends AbstractPotentiometer {
|
||||
|
||||
if (!outlineMode) {
|
||||
if (bracket != null) {
|
||||
g2d.setColor(PIN_COLOR);
|
||||
g2d.setColor(METAL_COLOR);
|
||||
g2d.fill(bracket);
|
||||
g2d.setColor(PIN_BORDER_COLOR);
|
||||
g2d.setColor(METAL_COLOR.darker());
|
||||
g2d.draw(bracket);
|
||||
}
|
||||
if (rivet1 != null) {
|
||||
|
||||
@@ -70,8 +70,7 @@ public class MultiSectionCapacitor extends AbstractLabeledComponent<Capacitance[
|
||||
public static Color BODY_COLOR = Color.decode("#6B6DCE");
|
||||
public static Color BASE_COLOR = Color.decode("#333333");
|
||||
public static Color BORDER_COLOR = BODY_COLOR.darker();
|
||||
public static Color PIN_COLOR = METAL_COLOR;// Color.decode("#00B2EE");
|
||||
// public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
public static Color TERMINAL_COLOR = METAL_COLOR;
|
||||
public static Color LABEL_COLOR = Color.white;
|
||||
public static Size PIN_SIZE = new Size(0.08d, SizeUnit.in);
|
||||
// public static Size PIN_SPACING = new Size(0.05d, SizeUnit.in);
|
||||
@@ -89,7 +88,7 @@ public class MultiSectionCapacitor extends AbstractLabeledComponent<Capacitance[
|
||||
private Color baseColor = BASE_COLOR;
|
||||
private Color borderColor = BORDER_COLOR;
|
||||
private Color labelColor = LABEL_COLOR;
|
||||
private Color pinColor = PIN_COLOR;
|
||||
private Color pinColor = TERMINAL_COLOR;
|
||||
protected Display display = Display.NAME;
|
||||
// private Size pinSpacing = PIN_SPACING;
|
||||
private Size diameter = BODY_DIAMETER;
|
||||
@@ -455,7 +454,7 @@ public class MultiSectionCapacitor extends AbstractLabeledComponent<Capacitance[
|
||||
margin = 6 * width / 32;
|
||||
area = new Area(new Ellipse2D.Double(margin, margin, width - 2 * margin + 1, width - 2 * margin + 1));
|
||||
g2d.fill(area);
|
||||
g2d.setColor(PIN_COLOR);
|
||||
g2d.setColor(TERMINAL_COLOR);
|
||||
int pinSize = 2 * width / 32;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
g2d.fillOval((i == 1 ? width * 3 / 8 : width / 2) - pinSize / 2, height / 2 + (i - 1) * (height / 5), pinSize, pinSize);
|
||||
|
||||
@@ -71,8 +71,6 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
|
||||
private static Color BORDER_COLOR = Color.decode("#8E8E38");
|
||||
private static Color SHAFT_COLOR = Color.decode("#FFFFE0");
|
||||
private static Color SHAFT_BORDER_COLOR = Color.decode("#8E8E38");
|
||||
public static Color PIN_COLOR = Color.decode("#00B2EE");
|
||||
public static Color PIN_BORDER_COLOR = PIN_COLOR.darker();
|
||||
public static Size PIN_SIZE = new Size(0.03d, SizeUnit.in);
|
||||
protected static Display DISPLAY = Display.NAME;
|
||||
|
||||
|
||||