Gazer / oregano

Schematic capture and circuit simulator

This URL has Read+Write access

Ricardo Markiewicz (author)
Sun May 11 19:49:31 -0700 2008
commit  43e20254af6333cfd14e6d997f9952906edd5138
tree    81893f450d68bc5098a18f5b3ab9a5bf5316eb6e
parent  1a992a9a1c878617d052cbbdd5c8679a2b09a622
oregano / TODO
100644 127 lines (86 sloc) 3.668 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
TODO list for Oregano.
---------------------
* Documentation : User manual, quick reference, doc for developers ,etc
 
* Add a BUGs file that describe bugs by #.
 
* Autorefdes, find highest N and go from there?
 
> If in the simulation I set a start time quite greater than 0, and use
> some pulse and/or sine generator to simulate the input to the circuit,
> then I got no output (because of no input is present). It looks like
> the imput is present only for a duration of tstop - tsart, and always
> starting at time=0
 
* Use library_name::symbol_name as key to hash the symbols.
 
* Methods to save/load ItemData's (save first).
 
* Context menus: make it possible to have entries that only show up when there are
  x selected items (e.g. 1 or 1+).
  Example: edit properties should only work with 1 selected part.
 
* Draw more symbols (JFETs, real zener diode, more opamps)
 
<property>
  label: Period <--- add this?
  name : per
  value: 1.0
</property>
 
* Undo/redo
 
* Find and plug memory leaks
 
* Finish printing code
 
* Voltage/current meters at nodes
 
* New Sheet widget (resizable). (Gazer: Maybe fixed page model like Orcad)
 
* Tooltips for sheet-items?
  new member: note = text for tooltip.
  autoshow/keybinding.
  item-data holds the text and sheet-item checks for leave/enter notify.
  show properties...?
 
* Hierarchic schematics (use a schematic as a part).
 
 
+-------------------------+
| IDEAS |
+-------------------------+
CRITICAL:
 
  netlists
 
  nodes at wire endpoints.
 
  wires försvinner ur noder ibland när man roterar...
   dela upp count i wire/part och skriv ut när man går över debug-nod-plupparna
 
 
TODO:
 
  split node->count into wires adn parts (to get connection dots...)
 
 
Structures
----------
 
Pins
Pins are stored in a hash table, using the coordinate (x,y) as key.
      
Wires
All Wires are stored in a list.
 
SheetNodes
For every position on the sheet that is populated with at least
one pin, there is a SheetNode. This SheetNode contains a list of
pins that are connected to it, as well as a list of wires. (The
SheetNode might also contain a pointer to the NetNode that this
node is part of?)
 
NetNodes
NetNodes are the nodes that correspond to the spice netlist nodes.
A NetNode holds a list of SheetNodes.
 
 
Algorithms
----------
 
Lookup
Pins are easy to retrieve at a certain coordinate; just perform a
hash table lookup at (x, y).
 
When we need to see if there is a wire at a certain position,
we can use the gnome_canvas_get_item_at () function. This doesn't
work reliably though, since it depends on the wire being on top and
also uses the close_enough variable, which makes it non-exact.
 
Another method would be to search through all the wires contained
within the sheet to see if any of them matches the given coordinate.
This could be slow and inefficient, but maybe not, given that there
will not be thousands of wires in a normal circuit, but rather
hundreds. However, this is still not the best way to do it.
Scalability is a goal, so this must be taken in consideration.
 
To see if a wire crosses a pin, we would have to search through
all the pins and check for matches.
 
Moving/Removing/Adding
Parts
Wires
Groups of parts/wires
 
REMEMBER
--------
 
We must be able to do a "reconnect all nodes"-thing. A function that goes
through all the parts/wires and makes sure that things that are on the
same node are connected and so on. This means we cannot depend on any
canvas helper stuff, like signals from items etc.
 
When loading schematic files from disk, we need to read the node structure
and not build it on the fly. Unless it will be efficient enough...