diff --git a/doc/xschem_man/developer_info.html b/doc/xschem_man/developer_info.html
index 60dc7112..232a1d67 100644
--- a/doc/xschem_man/developer_info.html
+++ b/doc/xschem_man/developer_info.html
@@ -507,8 +507,6 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
-
-
@@ -1271,9 +1269,10 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
wire [x1 y1 x2 y2] [pos] [prop] [sel]
Place a new wire
if no coordinates are given start a GUI wire placement
- wire_cut
+
wire_cut [x y]
start a wire cut operation. Point the mouse in the middle of a wire and
- click left button.
+ click left button.
+ if x and y are given cut wire at given point
xcb_info
For debug
zoom_box [x1 y1 x2 y2] [factor]
@@ -1314,6 +1313,10 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
+
+
+
+
@@ -1897,7 +1900,7 @@ xschem unselect_all
xschem setprop instance Vvdd spice_ignore true
 |
-
+
Delete a component together with its attached nets
@@ -1915,7 +1918,7 @@ xschem connected_nets
xschem delete
 |
-
+
Delete dangling nets and labels
@@ -1926,7 +1929,7 @@ xschem delete
xschem select_dangling_nets
 |
-
+
Change attributes of a group of components
@@ -1948,7 +1951,7 @@ foreach i [xschem selected_set] { xschem setprop instance $i L 3}
xschem unselect_all
 |
-
+
Copy a components with its wired terminals
@@ -1976,7 +1979,7 @@ xschem setprop instance [lindex [xschem selected_set] 1] lab VPP
 |
-
+
Transform a component into a short
@@ -2001,7 +2004,7 @@ xschem setprop instance Vvdd spice_ignore short
 |
-
+
Move a selected portion of the schematic
@@ -2016,7 +2019,7 @@ xschem setprop instance Vvdd spice_ignore short
xschem move_objects 100 0
 |
-
+
Rotate a selected portion of the schematic
@@ -2031,7 +2034,7 @@ xschem move_objects 100 0
xschem rotate 1100 -800
 |
-
+
Flip a selected portion of the schematic
@@ -2042,7 +2045,7 @@ xschem rotate 1100 -800
xschem flip 1100 -800
 |
-
+
Rotate in place a selected portion of the schematic
@@ -2058,7 +2061,78 @@ xschem flip 1100 -800
xschem rotate_in_place
 |
-
+
+
+
+ Move a wired object
+
+
+ # After selecting some objects ...
+ |
+  |
+
+
+ # ... we select only the first segments attached to their pins ...
+xschem connected_nets 2
+ |
+  |
+
+
+ # ... And then move the selection.
+xschem move_objects 100 0
+ |
+  |
+
+
+
+
+ Add and wire parallel devices
+
+
+ # Given this instance ...
+ |
+  |
+
+
+ # ... The following commands will copy-paste the object and move it
+# using the "connect by kissing" feature: when separating connected instances a wire is added.
+xschem select instance Q1
+xschem copy
+xschem paste 0 0
+xschem move_objects 120 0 kissing
+xschem unselect_all
+ |
+  |
+
+
+
+ Replace symbols
+
+
+ # In the following schematic we want to replace the nfet3/pfet3 with nfet and pfet
+# that have the bull connection pin.
+ |
+  |
+
+
+
+xschem search regex 1 model {fet_01v8} ;# select all instances that match "fet_01v8" model name
+set f {}
+foreach i [xschem selected_set] {
+ # Replace fet3 with fet in symbol reference
+ set newname [regsub {fet3} [xschem getprop instance $i cell::name] {fet}]
+ xschem replace_symbol $i $newname $f
+ # remove body attribute since it is now assigned to the bulk pin
+ xschem setprop instance $i body fast
+ set f fast ;# the f parameter is for optimzing (avoid pushing undo at each iteration)
+}
+xschem unselect_all
+xschem redraw
+ |
+  |
+
+
+
diff --git a/doc/xschem_man/developer_info_28.png b/doc/xschem_man/developer_info_28.png
new file mode 100644
index 00000000..9a66e788
Binary files /dev/null and b/doc/xschem_man/developer_info_28.png differ
diff --git a/doc/xschem_man/developer_info_29.png b/doc/xschem_man/developer_info_29.png
new file mode 100644
index 00000000..fb94f65e
Binary files /dev/null and b/doc/xschem_man/developer_info_29.png differ
diff --git a/doc/xschem_man/developer_info_30.png b/doc/xschem_man/developer_info_30.png
new file mode 100644
index 00000000..aa845dac
Binary files /dev/null and b/doc/xschem_man/developer_info_30.png differ
diff --git a/doc/xschem_man/developer_info_31.png b/doc/xschem_man/developer_info_31.png
new file mode 100644
index 00000000..5b789c43
Binary files /dev/null and b/doc/xschem_man/developer_info_31.png differ
diff --git a/doc/xschem_man/developer_info_32.png b/doc/xschem_man/developer_info_32.png
new file mode 100644
index 00000000..5e7800a4
Binary files /dev/null and b/doc/xschem_man/developer_info_32.png differ
diff --git a/doc/xschem_man/developer_info_33.png b/doc/xschem_man/developer_info_33.png
new file mode 100644
index 00000000..28f43de2
Binary files /dev/null and b/doc/xschem_man/developer_info_33.png differ
diff --git a/doc/xschem_man/developer_info_34.png b/doc/xschem_man/developer_info_34.png
new file mode 100644
index 00000000..5a7d30ef
Binary files /dev/null and b/doc/xschem_man/developer_info_34.png differ
diff --git a/src/scheduler.c b/src/scheduler.c
index 234d1602..47ee631f 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -2318,19 +2318,19 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
* if dx and dy are given move by that amount. */
else if(!strcmp(argv[1], "move_objects"))
{
+ int nparam = 0;
int kissing= 0;
int stretch = 0;
if(argc > 2) {
int i;
for(i = 2; i < argc; i++) {
- if(!strcmp(argv[i], "kissing")) kissing = 1;
- if(!strcmp(argv[i], "stretch")) stretch = 1;
+ if(!strcmp(argv[i], "kissing")) {kissing = 1; nparam++;}
+ if(!strcmp(argv[i], "stretch")) {stretch = 1; nparam++;}
}
}
- if(kissing | stretch) argc = 2;
if(stretch) select_attached_nets();
if(kissing) tclsetintvar("connect_by_kissing", 2);
- if(argc > 3) {
+ if(argc > 3 + nparam) {
move_objects(START,0,0,0);
move_objects( END,0,atof(argv[2]), atof(argv[3]));
}
@@ -3067,7 +3067,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
else if(!strcmp(argv[1], "replace_symbol"))
{
int inst, fast = 0;
- if(argc == 5) {
+ if(argc > 4) {
argc = 4;
if(!strcmp(argv[4], "fast")) {
fast = 1;
@@ -4389,12 +4389,17 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
}
else xctx->ui_state |= MENUSTARTWIRE;
}
- /* wire_cut
+ /* wire_cut [x y]
* start a wire cut operation. Point the mouse in the middle of a wire and
- * click left button. */
+ * click left button.
+ * if x and y are given cut wire at given point */
else if(!strcmp(argv[1], "wire_cut"))
{
- xctx->ui_state |= MENUSTARTWIRECUT;
+ if(argc > 3) {
+ break_wires_at_point(atof(argv[2]), atof(argv[3]));
+ } else {
+ xctx->ui_state |= MENUSTARTWIRECUT;
+ }
Tcl_ResetResult(interp);
}