Message Boards Message Boards

Graphics Tools for Circuits

Posted 10 years ago

I am sharing a program for creating circuit diagrams. The share location is:

Circuit components examples are shown below.

enter image description here

The basic syntax is:

 DrawCircuit[<|"a" -> {0, 0}, "b" -> {1, 0}|>,
  {{{"a", "b"}, {Inductor["L"], Capacitor["C"]}}}, {{"a", 
    Node["a", TextOffset -> .75]}, {"b", 
    Node["b", TextOffset -> .75]}}, TextOffsetScale -> .75], 
 BaseStyle -> {12, Italic, FontFamily -> "Times"}]

with the output.

enter image description here

Here is a more complex example with code.

With[{a = .5, colV = RGBColor[.3, .3, .9], 
  colA = RGBColor[.9, .1, .1]},
    {{0, -a}, {3, -a}, {0, 0}, {1, 0}, {2, 0}, {3, 
      0}, {1, -a}, {2, -a}},
       8}, {ACVoltage["\!\(\*SubscriptBox[\(V\), \(rms\)]\), \!\(\*
        TextOffset -> 1.25]}}, {{1, 7}, {}}, {{2, 
       8}, {InlineMeter[Style["A", 14, Italic, colA], 
        InlineMeterDirectives -> colA]}},
     {{1, 3}, {}}, {{2, 6}, {}},
     {{3, 4}, {Resistor[Style["R", Italic], TextOffset -> -1]}},
     {{4, 5}, {Inductor[Style["L", Italic], TextOffset -> -1]}},
       6}, {Capacitor[Style["C", Italic], 
        TextOffset -> {0, -1.625}]}}, {OffsetPoints[{3, 
        5}, .125, .625, 
       WireDirectives -> colV], {InlineMeter[
        Style["\!\(\*SubscriptBox[\(V\), \(R, L\)]\)", 14, colV], 
        InlineMeterDirectives -> colV]}},
     {OffsetPoints[{5, 6}, .265, .625, 
       WireDirectives -> colV], {InlineMeter[
        Style["\!\(\*SubscriptBox[\(V\), \(C\)]\)", 14, colV], 
        InlineMeterDirectives -> colV]}},
     {OffsetPoints[{3, 6}, .1, 1.125, 
       WireDirectives -> colV], {InlineMeter[
        Style["V", 14, Italic, colV], 
        InlineMeterDirectives -> colV]}}
   }, BaseStyle -> {12, FontFamily -> "Times"}]]

enter image description here

POSTED BY: Terrence Honan
7 Replies

Perhaps this could be incorporated in Graphplot ?

POSTED BY: Kay Herbert

Looks very neat!

You could post this as an answer here (answers can even be posted without registering, though registration has its benefits...)

You might also be interested in the other answers there. Others have been working on circuit drawing mini-languages too.

POSTED BY: Szabolcs Horvát


I saw also other useful packages, such as units.

POSTED BY: Marcelo De Cicco

There are already a few posts on the community related with graph kind of GUI building. Some functionalities slightly overlap what a Modelica environment was built for, but others are used on completely different concepts. We know that building an efficient drag and drop interface, with snaps,etc, is currently not viable in Mathematica.

Can someone from WRI tell if this kind of interface object is being considered for future versions of Mathematica? It would greatly extend the GUI capabilities of Mathematica, and make the posted circuit tool viable to a much wider audience.

(by the way... great tool. Thank you)

POSTED BY: Pedro Fonseca

This is great! Very nice use of Associations. If I understood correctly the circuit layout is manual by coordinate specification. Are you aware of any algorithms that layout circuits automatically? Perhaps using Graph somehow with GraphLayout -> "GridEmbedding" or similar this could be solved?

POSTED BY: Vitaliy Kaurov

The data for node positions is represented in terms of Associations, so this only works with version 10. In earlier versions I represented the node data differently, but this struck me as a natural and appropriate place to use this new data structure. I am attaching an old version that should work with version 9. It is a .nb file with initialization cells that will generate a package when saved.

POSTED BY: Terrence Honan

Looks quite interesting. One caveat: it seems to very much dislike version 9 of Mathematica, at least on Ubuntu Linux. I had considerable difficulty scrolling, selecting cells, etc. Since it uses Association, if I saw correctly, this is strictly for version 10.

POSTED BY: Daniel Lichtblau
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
or Discard

Group Abstract Group Abstract