r5531 - in trunk/eda/fped: . screens

werner at docs.openmoko.org werner at docs.openmoko.org
Sun Aug 23 00:55:39 CEST 2009

Author: werner
Date: 2009-08-23 00:55:39 +0200 (Sun, 23 Aug 2009)
New Revision: 5531

- when displaying loop iterations, we now use the active count, not just the 
  last count
- loop iterations now show the actual value, not the zero-based iteration 
- gui.html: added a GUI manual (in progress)

Modified: trunk/eda/fped/Makefile
--- trunk/eda/fped/Makefile	2009-08-22 22:48:09 UTC (rev 5530)
+++ trunk/eda/fped/Makefile	2009-08-22 22:55:39 UTC (rev 5531)
@@ -12,6 +12,8 @@
 PREFIX = /usr/local
+UPLOAD = werner at sita.openmoko.org:public_html/fped/
 OBJS = fped.o expr.o coord.o obj.o delete.o inst.o util.o error.o \
        unparse.o file.o dump.o kicad.o postscript.o meas.o \
        cpp.o lex.yy.o y.tab.o \
@@ -25,6 +27,8 @@
        stuff.xpm stuff_off.xpm meas_off.xpm \
        bright.xpm bright_off.xpm all.xpm all_off.xpm
+PNGS = intro-1.png intro-2.png intro-3.png intro-4.png intro-5.png intro-6.png
 SHELL = /bin/bash
 CFLAGS_GTK = `pkg-config --cflags gtk+-2.0`
 LIBS_GTK = `pkg-config --libs gtk+-2.0`
@@ -71,7 +75,7 @@
 # ----- Rules -----------------------------------------------------------------
-.PHONY:		all dep depend clean install uninstall
+.PHONY:		all dep depend clean install uninstall upload-manual
 .SUFFIXES:	.fig .xpm
@@ -102,6 +106,13 @@
 gui_tool.o gui.o: $(XPMS:%=icons/%)
+# ----- Upload the GUI manual -------------------------------------------------
+upload-manual:	$(XPMS:%=icons/%)
+		scp gui.html README $(UPLOAD)/
+		scp $(XPMS:%=icons/%) $(UPLOAD)/icons/
+		scp $(PNGS:%=screens/%) $(UPLOAD)/screens/
 # ----- Dependencies ----------------------------------------------------------
 dep depend .depend: lex.yy.c y.tab.h y.tab.c

Added: trunk/eda/fped/gui.html
--- trunk/eda/fped/gui.html	                        (rev 0)
+++ trunk/eda/fped/gui.html	2009-08-22 22:55:39 UTC (rev 5531)
@@ -0,0 +1,235 @@
+<TITLE>Fped GUI Manual</TITLE>
+<H1>Fped GUI Manual</H1>
+This manual introduces the basic concepts of Fped and explains the elements
+of the graphical user interface. Please refer to the file 
+<A href="README">README</A> for more
+technical details and a discussion of the scripting language used by fped.
+<H1>Objects and instances</H1>
+Footprints tend to be highly repetitive, with many pads placed in a
+simple geometrical pattern. With fped, the user specifies the elements
+to repeat and the way they are repeated. Fped then generates the
+repetitions automatically.
+Here is a simple example:
+  <LI> Start fped without a command-line argument.
+  <LI> Right-click on the yellow field that says "(root)" and select
+    "Add loop". An entry saying "_ = 0 ... 0 (0)" appears next to the
+    yellow field.
+    <P><IMG src="screens/intro-1.png">
+  <LI> Click on the underscore, type <B>n=1,5</B> and press Enter.
+    The entry should now show "n = 1 ... 5 (1 2 3 4 5)"
+    <P><IMG src="screens/intro-2.png">
+  <LI> Click on the dark-yellow vector icon on the right-hand side.
+    A red frame shows that it is selected.
+  <LI> Move the mouse pointer to the green dot in the middle of the
+    black canvas. A red circle appears when the pointer is over the
+    dot.
+  <LI> Press the left mouse button, drag a little to the right, and
+    release the mouse button. A white line appears and changes
+    to dark yellow after the button is released.
+  <LI> Click on the yellow line. It is now shown in bright yellow and
+    a number of text entry fields appear below the canvas.
+    <P><IMG src="screens/intro-3.png">
+  <LI> Click into the field on the top that probably says "0.1mm",
+    change it to <B>n*1mm</B> and press Enter.
+  <LI> Select "Zoom all" from the "View" drop-down menu. The canvas
+    should now show the green dot on the left, with a yellow arrow
+    pointing to the right, and four more even darker arrows following
+    that arrow.
+    <P><IMG src="screens/intro-4.png">
+  <LI> Click on the icon depicting a light-blue circle.
+  <LI> Move the mouse pointer over the green dot, then drag to the
+    circle at the end of the vector, and release the mouse button.
+    A series of partial circles should appear.
+    <P><IMG src="screens/intro-5.png">
+  <LI> Select "Zoom all" again to show the full circles.
+    <P><IMG src="screens/intro-6.png">
+The graphical items you have entered are a vector and a circle with the
+radius determined by the vector. We call these items "objects". Furthermore,
+you have defined a variable that gets set to the values from 1 to 5, in
+increments of one. Fped had repeatedly drawn the objects for each such
+value. We call the item that have been drawn "instances".
+The innermost vector and circle are highlighted. You can highlight other
+instances of the same objects by clicking on the numbers (1 2 3 4 5) shown
+next to the loop.
+Frames serve various purposes:
+  <LI> To structure the footprint drawing by grouping like elements.
+    For example, one may want to place pads, outline, and the keep-out
+    area in different frames, and probably subdivide some of those 
+    constructs even further.
+  <LI> To define an element that is used in several places. For example,
+    a pad.
+  <LI> To define a repetition through a loop or a table.
+  <LI> To set variables for child frames. 
+The right-hand side of the fped window shows the component being drawn on a
+black background. We call this the canvas. It is surrounded by a toolbar on
+the right side and a few buttons with visibility options at the top.
+<H2>The canvas</H2>
+<H2>Blue screen</H2>
+When an expression uses an unknown variable or evaluates to an incorrect
+value (e.g., a bare number where a dimension is expected), the
+instantiation fails. Fped indicates this by changing the background color
+of the canvas from black to blue. The cause of the failure is explained
+in the status bar at the bottom.
+In this state, the canvas is no longer updated when making changes until
+the problem has been resolved. The most common causes are a misspelt
+variable name in an expression, the use of a number without unit where a
+dimension is expected, or the removal of a variable that's still used
+If the location of the error is not obvious, the list of objects can be
+shown by selecting "Swap var&amp;code" from the View menu. The object
+in which the error occurred is shown in red. If the error occurred in a
+loop variable, the variable name is shown in red.
+<H2>Visibility options</H2>
+When working on a complex component, the number of elements shown can be
+overwhelming. The visibility options help to quickly hide irrelevant
+details and get one's bearings. They are located in the menu bar at the
+  <DT><IMG src="icons/all.xpm">&nbsp;<IMG src="icons/all_off.xpm"> 
+  <DD>Show all frames. If disabled, only show the currently active frame.
+  <DT><IMG src="icons/stuff.xpm">&nbsp;<IMG src="icons/stuff_off.xpm">
+  <DD>Show vectors and frames.
+  <DT><IMG src="icons/meas.xpm">&nbsp;<IMG src="icons/meas_off.xpm">
+  <DD>Show measurements.
+  <DT><IMG src="icons/bright.xpm">&nbsp;<IMG src="icons/bright_off.xpm">
+  <DD>Highlight the elements that will be exported to KiCad, i.e.,
+    the pads and the silk screen drawings. To show the component
+    exactly as it will appear in KiCad, also turn off vectors,
+    frames, and measurements.
+The visibility options can be combined.
+Tools are used to add new elements and to manipulate existing ones.
+  <DT><IMG src="icons/point.xpm">
+  <DD> The pointer. This is the default tool. The pointer is used to
+    select items and do move points of the selected item.
+    <P>
+    To move points, select the item, then move the mouse pointer over
+    the point to move. A red circle will appear under the mouse pointer.
+    Then drag the point to its new location and release the mouse button.
+  <DT><IMG src="icons/delete.xpm">&nbsp;<IMG src="icons/delete_off.xpm">
+  <DD> Delete the currently selected item. Whenever an item is selected,
+    the delete icon lights up. Clicking the icon deletes the item.
+    To undelete the item, press <B>U</B>.
+  <DT><IMG src="icons/vec.xpm">
+  <DD> Add a vector. To add a new vector, move the mouse pointer to the
+    new vector's starting point then drag towards the desired end point.
+    Vectors are normally specified via parameters. To enter the parameters,
+    click on the new vector.
+    <P>
+    Note that the starting point of the vector has to be in the same
+    frame as the vector being drawn. This limitation also applies to
+    points defining pads and silk-screen items.
+  <DT><IMG src="icons/frame.xpm">&nbsp;<IMG src="icons/frame_locked.xpm">
+    &nbsp;<IMG src="icons/frame_ready.xpm">
+  <DD> Add a frame reference. A frame reference inserts the content of a
+    frame into another frame. There are three steps in this process:
+    <UL>
+      <LI> Select the frame to be inserted and click on the frame icon.
+	A large black dot appears in the icon to indicate that a frame
+	reference has been chosen.
+      <LI> Select the frame into which to insert the reference. The dot
+	changes to green to indicate that the reference can now be placed.
+	If the dot stays black, then the selected frame is not a valid
+	destination, i.e., because the reference in turn references this
+	frame.
+      <LI> Click on the location at which to attach the reference. This
+	location can be either the end of a vector or the frame's origin.
+    </UL>
+    When finished, don't forget that the destination frame is still selected.
+    In order to add elements to the newly referenced frame, you have to
+    select it first.
+  <DT><IMG src="icons/pad.xpm">&nbsp;<IMG src="icons/rpad.xpm">
+  <DD> Add a pad. Pads are either rectangular or rounded. They are
+    defined by two points which are opposite corners of the rectangle
+    containing the pad. Move the mouse cursor to the first point, then
+    drag to the second point. The pad's name can be edited after selecting
+    the pad.
+  <DT><IMG src="icons/line.xpm">&nbsp;<IMG src="icons/rect.xpm">
+  <DD> Add a line or a rectangle. Similar to pads, lines and rectangles
+    are defined by two points. The width of the line can be edited after
+    selecting the line or rectangle.
+  <DT><IMG src="icons/circ.xpm">
+  <DD> Add circle or arc. Circles are defined by their center end a
+    point at their radius. An arc has a third point, which defines the
+    angle at which the arc ends. If this third point is not located on
+    the radius, the arc ends where an imaginary line between the center
+    and the end point would intersect with the radius.
+    <P>
+    An arc is made by first drawing a circle with the radius point at
+    the location where the arc should start. Then click and hold the
+    radius point to drag the end point to the desired location.
+    <P>
+    To change the radius point of a circle, first drag the end point,
+    then drag the radius point itself to that same location.
+  <DT><IMG src="icons/meas.xpm">&nbsp;<IMG src="icons/meas_x.xpm">&nbsp;
+    <IMG src="icons/meas_y.xpm">
+  <DD> Add a measurement. Measurements show the distance between points.
+    They can either measure diagonally or only horizontally or only vertically.
+    Unlike other items, measurements are not limited to points in the same
+    frame. Instead, they operate on the minimum, maximum, and next greater
+    coordinates of instances of objects.
+    <P>
+    A measurement is added as follows:
+    <UL>
+      <LI> Click on one of the three measurement icons to select the 
+	measurement type. All possible endpoints are highlighted.
+      <LI> Drag from the desired starting point. Now all the endpoints
+	available for this starting point are highlighted.
+      <LI> Drag to the endpoint and release the mouse button. The measurement
+	will now appear as a double-headed arrow and text between the two
+	points (if this is a diagonal measurement) or extending vertically or
+	horizontally from one of the two points.
+      <LI> To move the measurement arrow away from the two points, select
+	the measurement and set an offset.
+    </UL>
+    Sometimes, the second point becomes unavailable after selecting the
+    first point. This means that the two points are not a minimum or maximum,
+    or a minimum and the next greater neighbour. In this case, just try
+    another pair of points measuring the same distance.
+<H1>Keyboard shortcuts</H1>

Modified: trunk/eda/fped/gui_frame.c
--- trunk/eda/fped/gui_frame.c	2009-08-22 22:48:09 UTC (rev 5530)
+++ trunk/eda/fped/gui_frame.c	2009-08-22 22:55:39 UTC (rev 5531)
@@ -1013,7 +1013,7 @@
 	for (i = 0; i != loop->iterations; i++) {
 		label = add_activator(hbox, loop->active == i,
-		    loop_select_event, loop, "%d", i);
+		    loop_select_event, loop, "%g", loop->n+i);
 		gtk_object_set_data(GTK_OBJECT(box_of_label(label)), "value",
 		    (gpointer) (long) i);

Modified: trunk/eda/fped/obj.c
--- trunk/eda/fped/obj.c	2009-08-22 22:48:09 UTC (rev 5530)
+++ trunk/eda/fped/obj.c	2009-08-22 22:55:39 UTC (rev 5531)
@@ -238,7 +238,10 @@
 	loop->initialized = 0;
-	loop->iterations = n;
+	if (active) {
+		loop->n = from.n;
+		loop->iterations = n;
+	}
 	return 1;
@@ -279,6 +282,17 @@
+static void reset_all_loops(void)
+	const struct frame *frame;
+	struct loop *loop;
+	for (frame = frames; frame; frame = frame->next)
+		for (loop = frame->loops; loop; loop = loop->next)
+			loop->iterations = 0;
 int instantiate(void)
 	struct coord zero = { 0, 0 };
@@ -287,6 +301,7 @@
 	instantiation_error = NULL;
+	reset_all_loops();
 	ok = generate_frame(root_frame, zero, NULL, NULL, 1);
 	if (ok)
 		ok = instantiate_meas();

Modified: trunk/eda/fped/obj.h
--- trunk/eda/fped/obj.h	2009-08-22 22:48:09 UTC (rev 5530)
+++ trunk/eda/fped/obj.h	2009-08-22 22:55:39 UTC (rev 5531)
@@ -79,6 +79,7 @@
 	/* GUI use */
 	int active;	/* n-th iteration is active, 0 based */
+	double n;	/* start value when it was active */
 	int iterations;	/* iterations when it was active */
 	/* for evaluation */

Added: trunk/eda/fped/screens/intro-1.png
(Binary files differ)

Property changes on: trunk/eda/fped/screens/intro-1.png
Name: svn:mime-type
   + application/octet-stream

Added: trunk/eda/fped/screens/intro-2.png
(Binary files differ)

Property changes on: trunk/eda/fped/screens/intro-2.png
Name: svn:mime-type
   + application/octet-stream

Added: trunk/eda/fped/screens/intro-3.png
(Binary files differ)

Property changes on: trunk/eda/fped/screens/intro-3.png
Name: svn:mime-type
   + application/octet-stream

Added: trunk/eda/fped/screens/intro-4.png
(Binary files differ)

Property changes on: trunk/eda/fped/screens/intro-4.png
Name: svn:mime-type
   + application/octet-stream

Added: trunk/eda/fped/screens/intro-5.png
(Binary files differ)

Property changes on: trunk/eda/fped/screens/intro-5.png
Name: svn:mime-type
   + application/octet-stream

Added: trunk/eda/fped/screens/intro-6.png
(Binary files differ)

Property changes on: trunk/eda/fped/screens/intro-6.png
Name: svn:mime-type
   + application/octet-stream

More information about the commitlog mailing list