Skip to content

add SPICE subcircuit import dialog#269

Open
esaruoho wants to merge 1 commit intopfalstad:v3-devfrom
esaruoho:add-spice-import
Open

add SPICE subcircuit import dialog#269
esaruoho wants to merge 1 commit intopfalstad:v3-devfrom
esaruoho:add-spice-import

Conversation

@esaruoho
Copy link
Copy Markdown

@esaruoho esaruoho commented Mar 2, 2026

Summary

Ports the origin/spiceimport branch to v3-dev. Adds File > "Import Subcircuit From Spice..." which opens a dialog where users can paste SPICE netlist text to create a CircuitJS1 subcircuit model.

Supported SPICE elements

  • Passive: R (resistor), C (capacitor), L (inductor)
  • Semiconductor: D (diode with .model), Q (BJT with area scaling, parasitic RC/RB/RE, junction CJE/CJC), J (JFET with VTO/BETA)
  • Sources: V (voltage), I (current)
  • Controlled sources: E (VCVS), G (VCCS), H (CCVS), F (CCCS), B (behavioral)
  • Directives: .model (NPN/PNP/D/NJF/PJF), .subckt/.ends, .rename
  • Advanced: POLY() polynomial sources, VALUE={expression} syntax, continuation lines (+), area-scaled transistor model variants

Changes

  • 2 new files: BetterStringTokenizer.java (flexible SPICE tokenizer), ImportFromSpiceDialog.java (695-line parser and dialog)
  • Menus.java — add "Import Subcircuit From Spice..." menu item
  • CommandManager.java — add importfromspice command handler
  • CustomCompositeModel.java — add setName() to ExtListEntry (for .rename directive)
  • EditCompositeModelDialog.java — add loadModel() method and defaultName field for external model loading (used by SPICE importer to bypass createModel() which requires an existing circuit)
  • TransistorModel.java — fix getModelWithName() to use 2-arg constructor TransistorModel(name, 1e-13) instead of no-arg constructor, ensuring proper initialization of emission coefficients and other defaults

Test plan

  • File > Import Subcircuit From Spice — verify dialog opens
  • Paste a simple SPICE subcircuit (e.g. voltage divider) — verify it creates a subcircuit model
  • Paste a BJT amplifier subcircuit with .model — verify transistor parameters are imported
  • Paste a subcircuit with controlled sources (E, G) — verify expression parsing
  • Paste a subcircuit with POLY() controlled sources — verify polynomial conversion
  • Verify the pin layout dialog opens with correct pin count and default name
  • Verify existing subcircuit creation (File > Create Subcircuit) still works

🤖 Generated with Claude Code

Port the spiceimport branch to v3-dev. Adds File > "Import Subcircuit
From Spice..." which parses SPICE netlist text and creates a
CustomCompositeModel subcircuit.

Supported SPICE elements: R, C, L, D, Q (BJT with area/RC/RB/RE/CJE/CJC),
J (JFET), V, I, E (VCVS), G (VCCS), H (CCVS), F (CCCS), B (behavioral).
Handles .model (NPN/PNP/D/NJF/PJF), .subckt/.ends, .rename, POLY(),
VALUE={expr}, continuation lines, and area-scaled transistor models.

New files:
- BetterStringTokenizer.java - flexible tokenizer for SPICE parsing
- ImportFromSpiceDialog.java - main SPICE import dialog and parser

Modified files:
- Menus.java - add menu item
- CommandManager.java - add command handler
- CustomCompositeModel.java - add setName() to ExtListEntry
- EditCompositeModelDialog.java - add loadModel() and defaultName for
  external model loading
- TransistorModel.java - fix getModelWithName to use 2-arg constructor
  for proper initialization

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant