gerbvhtdocs/doxygen/draw-gdk_8c-source.html

1083 lines
93 KiB
HTML
Raw Blame History

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>gerbv: src/draw-gdk.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="classes.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="dirs.html"><span>Directories</span></a></li>
<li><a href="examples.html"><span>Examples</span></a></li>
</ul>
</div>
<div class="navpath"><a class="el" href="dir_0fba06f62092f0c8d9ff47b96507f331.html">src</a>
</div>
</div>
<div class="contents">
<h1>draw-gdk.c</h1><a href="draw-gdk_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> * gEDA - GNU Electronic Design Automation</span>
<a name="l00003"></a>00003 <span class="comment"> * This file is a part of gerbv.</span>
<a name="l00004"></a>00004 <span class="comment"> *</span>
<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2000-2003 Stefan Petersen (spe@stacken.kth.se)</span>
<a name="l00006"></a>00006 <span class="comment"> *</span>
<a name="l00007"></a>00007 <span class="comment"> * $Id$</span>
<a name="l00008"></a>00008 <span class="comment"> *</span>
<a name="l00009"></a>00009 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
<a name="l00010"></a>00010 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
<a name="l00011"></a>00011 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00012"></a>00012 <span class="comment"> * (at your option) any later version.</span>
<a name="l00013"></a>00013 <span class="comment"> *</span>
<a name="l00014"></a>00014 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
<a name="l00015"></a>00015 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00016"></a>00016 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<a name="l00017"></a>00017 <span class="comment"> * GNU General Public License for more details.</span>
<a name="l00018"></a>00018 <span class="comment"> *</span>
<a name="l00019"></a>00019 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
<a name="l00020"></a>00020 <span class="comment"> * along with this program; if not, write to the Free Software</span>
<a name="l00021"></a>00021 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA</span>
<a name="l00022"></a>00022 <span class="comment"> */</span>
<a name="l00023"></a>00023
<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#include &lt;config.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;math.h&gt;</span> <span class="comment">/* ceil(), atan2() */</span>
<a name="l00036"></a>00036
<a name="l00037"></a>00037 <span class="preprocessor">#ifdef HAVE_STRING_H</span>
<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#endif</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span>
<a name="l00041"></a>00041 <span class="preprocessor">#include &lt;gtk/gtk.h&gt;</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include "<a class="code" href="gerbv_8h.html" title="The main header file for the libgerbv library.">gerbv.h</a>"</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include "<a class="code" href="draw-gdk_8h.html" title="Header info for the GDK rendering functions.">draw-gdk.h</a>"</span>
<a name="l00044"></a>00044
<a name="l00045"></a>00045 <span class="preprocessor">#undef round</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define round(x) ceil((double)(x))</span>
<a name="l00047"></a>00047 <span class="preprocessor"></span>
<a name="l00048"></a>00048 <span class="preprocessor">#define dprintf if(DEBUG) printf</span>
<a name="l00049"></a>00049 <span class="preprocessor"></span>
<a name="l00050"></a>00050 <span class="comment">/*</span>
<a name="l00051"></a>00051 <span class="comment"> * If you want to rotate a</span>
<a name="l00052"></a>00052 <span class="comment"> * column vector v by t degrees using matrix M, use</span>
<a name="l00053"></a>00053 <span class="comment"> *</span>
<a name="l00054"></a>00054 <span class="comment"> * M = {{cos t, -sin t}, {sin t, cos t}} in M*v.</span>
<a name="l00055"></a>00055 <span class="comment"> *</span>
<a name="l00056"></a>00056 <span class="comment"> * From comp.graphics.algorithms Frequently Asked Questions</span>
<a name="l00057"></a>00057 <span class="comment"> *</span>
<a name="l00058"></a>00058 <span class="comment"> * Due reverse defintion of X-axis in GTK you have to negate</span>
<a name="l00059"></a>00059 <span class="comment"> * angels.</span>
<a name="l00060"></a>00060 <span class="comment"> *</span>
<a name="l00061"></a>00061 <span class="comment"> */</span>
<a name="l00062"></a>00062 <span class="keyword">static</span> GdkPoint
<a name="l00063"></a>00063 rotate_point(GdkPoint point, <span class="keywordtype">int</span> angle)
<a name="l00064"></a>00064 {
<a name="l00065"></a>00065 <span class="keywordtype">double</span> sint, cost;
<a name="l00066"></a>00066 GdkPoint returned;
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="keywordflow">if</span> (angle == 0)
<a name="l00069"></a>00069 <span class="keywordflow">return</span> point;
<a name="l00070"></a>00070
<a name="l00071"></a>00071 sint = sin(-(<span class="keywordtype">double</span>)angle * M_PI / 180.0);
<a name="l00072"></a>00072 cost = cos(-(<span class="keywordtype">double</span>)angle * M_PI / 180.0);
<a name="l00073"></a>00073
<a name="l00074"></a>00074 returned.x = (int)round(cost * (<span class="keywordtype">double</span>)point.x - sint * (double)point.y);
<a name="l00075"></a>00075 returned.y = (int)round(sint * (<span class="keywordtype">double</span>)point.x + cost * (double)point.y);
<a name="l00076"></a>00076
<a name="l00077"></a>00077 <span class="keywordflow">return</span> returned;
<a name="l00078"></a>00078 }
<a name="l00079"></a>00079
<a name="l00080"></a>00080
<a name="l00081"></a>00081 <span class="comment">/*</span>
<a name="l00082"></a>00082 <span class="comment"> * Aperture macro primitive 1 (Circle)</span>
<a name="l00083"></a>00083 <span class="comment"> */</span>
<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00085"></a>00085 gerbv_gdk_draw_prim1(GdkPixmap *pixmap, GdkGC *gc, <span class="keywordtype">double</span> *p,
<a name="l00086"></a>00086 <span class="keywordtype">double</span> scale, gint x, gint y)
<a name="l00087"></a>00087 {
<a name="l00088"></a>00088 <span class="keyword">const</span> <span class="keywordtype">int</span> exposure_idx = 0;
<a name="l00089"></a>00089 <span class="keyword">const</span> <span class="keywordtype">int</span> diameter_idx = 1;
<a name="l00090"></a>00090 <span class="keyword">const</span> <span class="keywordtype">int</span> x_offset_idx = 2;
<a name="l00091"></a>00091 <span class="keyword">const</span> <span class="keywordtype">int</span> y_offset_idx = 3;
<a name="l00092"></a>00092 <span class="keyword">const</span> gint full_circle = 23360;
<a name="l00093"></a>00093 GdkGC *local_gc = gdk_gc_new(pixmap);
<a name="l00094"></a>00094 gint dia = round(fabs(p[diameter_idx] * scale));
<a name="l00095"></a>00095 gint real_x = x - dia / 2;
<a name="l00096"></a>00096 gint real_y = y - dia / 2;
<a name="l00097"></a>00097 GdkColor color;
<a name="l00098"></a>00098
<a name="l00099"></a>00099 gdk_gc_copy(local_gc, gc);
<a name="l00100"></a>00100
<a name="l00101"></a>00101 real_x += (int)(p[x_offset_idx] * (<span class="keywordtype">double</span>)scale);
<a name="l00102"></a>00102 real_y -= (int)(p[y_offset_idx] * (<span class="keywordtype">double</span>)scale);
<a name="l00103"></a>00103
<a name="l00104"></a>00104 <span class="comment">/* Exposure */</span>
<a name="l00105"></a>00105 <span class="keywordflow">if</span> (p[exposure_idx] == 0.0) {
<a name="l00106"></a>00106 color.pixel = 0;
<a name="l00107"></a>00107 gdk_gc_set_foreground(local_gc, &amp;color);
<a name="l00108"></a>00108 }
<a name="l00109"></a>00109
<a name="l00110"></a>00110 gdk_gc_set_line_attributes(local_gc,
<a name="l00111"></a>00111 1, <span class="comment">/* outline always 1 pixels */</span>
<a name="l00112"></a>00112 GDK_LINE_SOLID,
<a name="l00113"></a>00113 GDK_CAP_BUTT,
<a name="l00114"></a>00114 GDK_JOIN_MITER);
<a name="l00115"></a>00115
<a name="l00116"></a>00116 <span class="comment">/* </span>
<a name="l00117"></a>00117 <span class="comment"> * A filled circle </span>
<a name="l00118"></a>00118 <span class="comment"> */</span>
<a name="l00119"></a>00119 gdk_draw_arc(pixmap, local_gc, 1, real_x, real_y, dia, dia,
<a name="l00120"></a>00120 0, full_circle);
<a name="l00121"></a>00121
<a name="l00122"></a>00122 gdk_gc_unref(local_gc);
<a name="l00123"></a>00123
<a name="l00124"></a>00124 <span class="keywordflow">return</span>;
<a name="l00125"></a>00125 } <span class="comment">/* gerbv_gdk_draw_prim1 */</span>
<a name="l00126"></a>00126
<a name="l00127"></a>00127
<a name="l00128"></a>00128 <span class="comment">/*</span>
<a name="l00129"></a>00129 <span class="comment"> * Aperture macro primitive 4 (outline)</span>
<a name="l00130"></a>00130 <span class="comment"> * - Start point is not included in number of points.</span>
<a name="l00131"></a>00131 <span class="comment"> * - Outline is 1 pixel.</span>
<a name="l00132"></a>00132 <span class="comment"> */</span>
<a name="l00133"></a>00133 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00134"></a>00134 gerbv_gdk_draw_prim4(GdkPixmap *pixmap, GdkGC *gc, <span class="keywordtype">double</span> *p,
<a name="l00135"></a>00135 <span class="keywordtype">double</span> scale, gint x, gint y)
<a name="l00136"></a>00136 {
<a name="l00137"></a>00137 <span class="keyword">const</span> <span class="keywordtype">int</span> exposure_idx = 0;
<a name="l00138"></a>00138 <span class="keyword">const</span> <span class="keywordtype">int</span> nuf_points_idx = 1;
<a name="l00139"></a>00139 <span class="keyword">const</span> <span class="keywordtype">int</span> first_x_idx = 2;
<a name="l00140"></a>00140 <span class="keyword">const</span> <span class="keywordtype">int</span> first_y_idx = 3;
<a name="l00141"></a>00141 <span class="keyword">const</span> <span class="keywordtype">int</span> rotext_idx = 4;
<a name="l00142"></a>00142 GdkGC *local_gc = gdk_gc_new(pixmap);
<a name="l00143"></a>00143 <span class="keywordtype">int</span> nuf_points, point;
<a name="l00144"></a>00144 <span class="keywordtype">double</span> rotation;
<a name="l00145"></a>00145 GdkPoint *points;
<a name="l00146"></a>00146 GdkColor color;
<a name="l00147"></a>00147
<a name="l00148"></a>00148 <span class="comment">/* Include start point */</span>
<a name="l00149"></a>00149 nuf_points = (int)p[nuf_points_idx] + 1;
<a name="l00150"></a>00150 points = (GdkPoint *)g_malloc(<span class="keyword">sizeof</span>(GdkPoint) * nuf_points);
<a name="l00151"></a>00151 <span class="keywordflow">if</span> (!points) {
<a name="l00152"></a>00152 g_free(points);
<a name="l00153"></a>00153 <span class="keywordflow">return</span>;
<a name="l00154"></a>00154 }
<a name="l00155"></a>00155
<a name="l00156"></a>00156 rotation = p[(nuf_points - 1) * 2 + rotext_idx];
<a name="l00157"></a>00157 <span class="keywordflow">for</span> (point = 0; point &lt; nuf_points; point++) {
<a name="l00158"></a>00158 points[point].x = (int)round(scale * p[point * 2 + first_x_idx]);
<a name="l00159"></a>00159 points[point].y = -(int)round(scale * p[point * 2 + first_y_idx]);
<a name="l00160"></a>00160 <span class="keywordflow">if</span> (rotation != 0.0)
<a name="l00161"></a>00161 points[point] = rotate_point(points[point], rotation);
<a name="l00162"></a>00162 points[point].x += x;
<a name="l00163"></a>00163 points[point].y += y;
<a name="l00164"></a>00164 }
<a name="l00165"></a>00165
<a name="l00166"></a>00166 gdk_gc_copy(local_gc, gc);
<a name="l00167"></a>00167
<a name="l00168"></a>00168 <span class="comment">/* Exposure */</span>
<a name="l00169"></a>00169 <span class="keywordflow">if</span> (p[exposure_idx] == 0.0) {
<a name="l00170"></a>00170 color.pixel = 0;
<a name="l00171"></a>00171 gdk_gc_set_foreground(local_gc, &amp;color);
<a name="l00172"></a>00172 }
<a name="l00173"></a>00173
<a name="l00174"></a>00174 gdk_gc_set_line_attributes(local_gc,
<a name="l00175"></a>00175 1, <span class="comment">/* outline always 1 pixels */</span>
<a name="l00176"></a>00176 GDK_LINE_SOLID,
<a name="l00177"></a>00177 GDK_CAP_BUTT,
<a name="l00178"></a>00178 GDK_JOIN_MITER);
<a name="l00179"></a>00179 gdk_draw_polygon(pixmap, local_gc, 1, points, nuf_points);
<a name="l00180"></a>00180
<a name="l00181"></a>00181 g_free(points);
<a name="l00182"></a>00182
<a name="l00183"></a>00183 gdk_gc_unref(local_gc);
<a name="l00184"></a>00184
<a name="l00185"></a>00185 <span class="keywordflow">return</span>;
<a name="l00186"></a>00186 } <span class="comment">/* gerbv_gdk_draw_prim4 */</span>
<a name="l00187"></a>00187
<a name="l00188"></a>00188
<a name="l00189"></a>00189 <span class="comment">/*</span>
<a name="l00190"></a>00190 <span class="comment"> * Aperture macro primitive 5 (polygon)</span>
<a name="l00191"></a>00191 <span class="comment"> */</span>
<a name="l00192"></a>00192 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00193"></a>00193 gerbv_gdk_draw_prim5(GdkPixmap *pixmap, GdkGC *gc, <span class="keywordtype">double</span> *p,
<a name="l00194"></a>00194 <span class="keywordtype">double</span> scale, gint x, gint y)
<a name="l00195"></a>00195 {
<a name="l00196"></a>00196 <span class="keyword">const</span> <span class="keywordtype">int</span> exposure_idx = 0;
<a name="l00197"></a>00197 <span class="keyword">const</span> <span class="keywordtype">int</span> nuf_vertices_idx = 1;
<a name="l00198"></a>00198 <span class="keyword">const</span> <span class="keywordtype">int</span> center_x_idx = 2;
<a name="l00199"></a>00199 <span class="keyword">const</span> <span class="keywordtype">int</span> center_y_idx = 3;
<a name="l00200"></a>00200 <span class="keyword">const</span> <span class="keywordtype">int</span> diameter_idx = 4;
<a name="l00201"></a>00201 <span class="keyword">const</span> <span class="keywordtype">int</span> rotation_idx = 5;
<a name="l00202"></a>00202 <span class="keywordtype">int</span> nuf_vertices, i;
<a name="l00203"></a>00203 <span class="keywordtype">double</span> vertex, tick, rotation, radius;
<a name="l00204"></a>00204 GdkPoint *points;
<a name="l00205"></a>00205 GdkGC *local_gc = gdk_gc_new(pixmap);
<a name="l00206"></a>00206 GdkColor color;
<a name="l00207"></a>00207
<a name="l00208"></a>00208 nuf_vertices = (int)p[nuf_vertices_idx];
<a name="l00209"></a>00209 points = (GdkPoint *)g_malloc(<span class="keyword">sizeof</span>(GdkPoint) * nuf_vertices);
<a name="l00210"></a>00210 <span class="keywordflow">if</span> (!points) {
<a name="l00211"></a>00211 g_free(points);
<a name="l00212"></a>00212 <span class="keywordflow">return</span>;
<a name="l00213"></a>00213 }
<a name="l00214"></a>00214
<a name="l00215"></a>00215 gdk_gc_copy(local_gc, gc);
<a name="l00216"></a>00216
<a name="l00217"></a>00217 <span class="comment">/* Exposure */</span>
<a name="l00218"></a>00218 <span class="keywordflow">if</span> (p[exposure_idx] == 0.0) {
<a name="l00219"></a>00219 color.pixel = 0;
<a name="l00220"></a>00220 gdk_gc_set_foreground(local_gc, &amp;color);
<a name="l00221"></a>00221 }
<a name="l00222"></a>00222
<a name="l00223"></a>00223 tick = 2 * M_PI / (double)nuf_vertices;
<a name="l00224"></a>00224 rotation = -p[rotation_idx] * M_PI / 180.0;
<a name="l00225"></a>00225 radius = p[diameter_idx] / 2.0;
<a name="l00226"></a>00226 <span class="keywordflow">for</span> (i = 0; i &lt; nuf_vertices; i++) {
<a name="l00227"></a>00227 vertex = tick * (double)i + rotation;
<a name="l00228"></a>00228 points[i].x = (int)round(scale * radius * cos(vertex)) + x +
<a name="l00229"></a>00229 p[center_x_idx];
<a name="l00230"></a>00230 points[i].y = (int)round(scale * radius * sin(vertex)) + y +
<a name="l00231"></a>00231 p[center_y_idx];
<a name="l00232"></a>00232 }
<a name="l00233"></a>00233
<a name="l00234"></a>00234 gdk_draw_polygon(pixmap, local_gc, 1, points, nuf_vertices);
<a name="l00235"></a>00235
<a name="l00236"></a>00236 gdk_gc_unref(local_gc);
<a name="l00237"></a>00237
<a name="l00238"></a>00238 g_free(points);
<a name="l00239"></a>00239 <span class="keywordflow">return</span>;
<a name="l00240"></a>00240 } <span class="comment">/* gerbv_gdk_draw_prim5 */</span>
<a name="l00241"></a>00241
<a name="l00242"></a>00242
<a name="l00243"></a>00243 <span class="comment">/*</span>
<a name="l00244"></a>00244 <span class="comment"> * Doesn't handle and explicit x,y yet</span>
<a name="l00245"></a>00245 <span class="comment"> * Questions:</span>
<a name="l00246"></a>00246 <span class="comment"> * - is "gap" distance between edges of circles or distance between</span>
<a name="l00247"></a>00247 <span class="comment"> * center of line of circle?</span>
<a name="l00248"></a>00248 <span class="comment"> */</span>
<a name="l00249"></a>00249 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00250"></a>00250 gerbv_gdk_draw_prim6(GdkPixmap *pixmap, GdkGC *gc, <span class="keywordtype">double</span> *p,
<a name="l00251"></a>00251 <span class="keywordtype">double</span> scale, gint x, gint y)
<a name="l00252"></a>00252 {
<a name="l00253"></a>00253 <span class="keyword">const</span> <span class="keywordtype">int</span> outside_dia_idx = 2;
<a name="l00254"></a>00254 <span class="keyword">const</span> <span class="keywordtype">int</span> ci_thickness_idx = 3;
<a name="l00255"></a>00255 <span class="keyword">const</span> <span class="keywordtype">int</span> gap_idx = 4;
<a name="l00256"></a>00256 <span class="keyword">const</span> <span class="keywordtype">int</span> nuf_circles_idx = 5;
<a name="l00257"></a>00257 <span class="keyword">const</span> <span class="keywordtype">int</span> ch_thickness_idx = 6;
<a name="l00258"></a>00258 <span class="keyword">const</span> <span class="keywordtype">int</span> ch_length_idx = 7;
<a name="l00259"></a>00259 <span class="keyword">const</span> <span class="keywordtype">int</span> rotation_idx = 8;
<a name="l00260"></a>00260 GdkGC *local_gc = gdk_gc_new(pixmap);
<a name="l00261"></a>00261 <span class="keywordtype">double</span> real_dia;
<a name="l00262"></a>00262 <span class="keywordtype">double</span> real_gap;
<a name="l00263"></a>00263 <span class="keywordtype">int</span> circle;
<a name="l00264"></a>00264 GdkPoint crosshair[4];
<a name="l00265"></a>00265 <span class="keywordtype">int</span> point;
<a name="l00266"></a>00266
<a name="l00267"></a>00267 gdk_gc_copy(local_gc, gc);
<a name="l00268"></a>00268 gdk_gc_set_line_attributes(local_gc,
<a name="l00269"></a>00269 (<span class="keywordtype">int</span>)round(scale * p[ci_thickness_idx]),
<a name="l00270"></a>00270 GDK_LINE_SOLID,
<a name="l00271"></a>00271 GDK_CAP_BUTT,
<a name="l00272"></a>00272 GDK_JOIN_MITER);
<a name="l00273"></a>00273
<a name="l00274"></a>00274 real_dia = p[outside_dia_idx] - p[ci_thickness_idx] / 2.0;
<a name="l00275"></a>00275 real_gap = p[gap_idx] + p[ci_thickness_idx];
<a name="l00276"></a>00276
<a name="l00277"></a>00277 <span class="keywordflow">for</span> (circle = 0; circle != (int)p[nuf_circles_idx]; circle++) {
<a name="l00278"></a>00278 <span class="comment">/* </span>
<a name="l00279"></a>00279 <span class="comment"> * Non filled circle </span>
<a name="l00280"></a>00280 <span class="comment"> */</span>
<a name="l00281"></a>00281 <span class="keyword">const</span> gint full_circle = 23360;
<a name="l00282"></a>00282 gint dia = (real_dia - real_gap * circle) * scale;
<a name="l00283"></a>00283 gdk_draw_arc(pixmap, local_gc, 0, x - dia / 2, y - dia / 2,
<a name="l00284"></a>00284 dia, dia, 0, full_circle);
<a name="l00285"></a>00285
<a name="l00286"></a>00286 }
<a name="l00287"></a>00287
<a name="l00288"></a>00288 <span class="comment">/*</span>
<a name="l00289"></a>00289 <span class="comment"> * Cross Hair </span>
<a name="l00290"></a>00290 <span class="comment"> */</span>
<a name="l00291"></a>00291 memset(crosshair, 0, <span class="keyword">sizeof</span>(GdkPoint) * 4);
<a name="l00292"></a>00292 crosshair[0].x = (int)((p[ch_length_idx] / 2.0) * scale);
<a name="l00293"></a>00293 <span class="comment">/*crosshair[0].y = 0;*/</span>
<a name="l00294"></a>00294 crosshair[1].x = -crosshair[0].x;
<a name="l00295"></a>00295 <span class="comment">/*crosshair[1].y = 0;*/</span>
<a name="l00296"></a>00296 <span class="comment">/*crosshair[2].x = 0;*/</span>
<a name="l00297"></a>00297 crosshair[2].y = crosshair[0].x;
<a name="l00298"></a>00298 <span class="comment">/*crosshair[3].x = 0;*/</span>
<a name="l00299"></a>00299 crosshair[3].y = -crosshair[0].x;
<a name="l00300"></a>00300
<a name="l00301"></a>00301 gdk_gc_set_line_attributes(local_gc,
<a name="l00302"></a>00302 (<span class="keywordtype">int</span>)round(scale * p[ch_thickness_idx]),
<a name="l00303"></a>00303 GDK_LINE_SOLID,
<a name="l00304"></a>00304 GDK_CAP_BUTT,
<a name="l00305"></a>00305 GDK_JOIN_MITER);
<a name="l00306"></a>00306
<a name="l00307"></a>00307 <span class="keywordflow">for</span> (point = 0; point &lt; 4; point++) {
<a name="l00308"></a>00308 crosshair[point] = rotate_point(crosshair[point],
<a name="l00309"></a>00309 p[rotation_idx]);
<a name="l00310"></a>00310 crosshair[point].x += x;
<a name="l00311"></a>00311 crosshair[point].y += y;
<a name="l00312"></a>00312 }
<a name="l00313"></a>00313 gdk_draw_line(pixmap, local_gc,
<a name="l00314"></a>00314 crosshair[0].x, crosshair[0].y,
<a name="l00315"></a>00315 crosshair[1].x, crosshair[1].y);
<a name="l00316"></a>00316 gdk_draw_line(pixmap, local_gc,
<a name="l00317"></a>00317 crosshair[2].x, crosshair[2].y,
<a name="l00318"></a>00318 crosshair[3].x, crosshair[3].y);
<a name="l00319"></a>00319
<a name="l00320"></a>00320 gdk_gc_unref(local_gc);
<a name="l00321"></a>00321
<a name="l00322"></a>00322 <span class="keywordflow">return</span>;
<a name="l00323"></a>00323 } <span class="comment">/* gerbv_gdk_draw_prim6 */</span>
<a name="l00324"></a>00324
<a name="l00325"></a>00325
<a name="l00326"></a>00326 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00327"></a>00327 gerbv_gdk_draw_prim7(GdkPixmap *pixmap, GdkGC *gc, <span class="keywordtype">double</span> *p,
<a name="l00328"></a>00328 <span class="keywordtype">double</span> scale, gint x, gint y)
<a name="l00329"></a>00329 {
<a name="l00330"></a>00330 <span class="keyword">const</span> <span class="keywordtype">int</span> outside_dia_idx = 2;
<a name="l00331"></a>00331 <span class="keyword">const</span> <span class="keywordtype">int</span> inside_dia_idx = 3;
<a name="l00332"></a>00332 <span class="keyword">const</span> <span class="keywordtype">int</span> ch_thickness_idx = 4;
<a name="l00333"></a>00333 <span class="keyword">const</span> <span class="keywordtype">int</span> rotation_idx = 5;
<a name="l00334"></a>00334 <span class="keyword">const</span> gint full_circle = 23360;
<a name="l00335"></a>00335 GdkGCValues gc_val;
<a name="l00336"></a>00336 <span class="keywordtype">int</span> diameter, i;
<a name="l00337"></a>00337 GdkGC *local_gc = gdk_gc_new(pixmap);
<a name="l00338"></a>00338 GdkPoint point[4];
<a name="l00339"></a>00339 <span class="keywordtype">double</span> ci_thickness = (p[outside_dia_idx] -
<a name="l00340"></a>00340 p[inside_dia_idx]) / 2.0;
<a name="l00341"></a>00341
<a name="l00342"></a>00342 gdk_gc_copy(local_gc, gc);
<a name="l00343"></a>00343 gdk_gc_set_line_attributes(local_gc,
<a name="l00344"></a>00344 (<span class="keywordtype">int</span>)round(scale * ci_thickness),
<a name="l00345"></a>00345 GDK_LINE_SOLID,
<a name="l00346"></a>00346 GDK_CAP_BUTT,
<a name="l00347"></a>00347 GDK_JOIN_MITER);
<a name="l00348"></a>00348
<a name="l00349"></a>00349 <span class="comment">/* </span>
<a name="l00350"></a>00350 <span class="comment"> * Non filled circle </span>
<a name="l00351"></a>00351 <span class="comment"> */</span>
<a name="l00352"></a>00352 diameter = (p[inside_dia_idx] + ci_thickness) * scale;
<a name="l00353"></a>00353 gdk_draw_arc(pixmap, local_gc, 0, x - diameter / 2, y - diameter / 2,
<a name="l00354"></a>00354 diameter, diameter, 0, full_circle);
<a name="l00355"></a>00355
<a name="l00356"></a>00356 <span class="comment">/*</span>
<a name="l00357"></a>00357 <span class="comment"> * Cross hair</span>
<a name="l00358"></a>00358 <span class="comment"> */</span>
<a name="l00359"></a>00359 <span class="comment">/* Calculate the end points of the crosshair */</span>
<a name="l00360"></a>00360 <span class="comment">/* GDK doesn't always remove all of the circle (round of error probably)</span>
<a name="l00361"></a>00361 <span class="comment"> I extend the crosshair line with 2 (one pixel in each end) to make </span>
<a name="l00362"></a>00362 <span class="comment"> sure all of the circle is removed with the crosshair */</span>
<a name="l00363"></a>00363 <span class="keywordflow">for</span> (i = 0; i &lt; 4; i++) {
<a name="l00364"></a>00364 point[i].x = round((p[outside_dia_idx] / 2.0) * scale) + 2;
<a name="l00365"></a>00365 point[i].y = 0;
<a name="l00366"></a>00366 point[i] = rotate_point(point[i], p[rotation_idx] + 90 * i);
<a name="l00367"></a>00367 point[i].x += x;
<a name="l00368"></a>00368 point[i].y += y;
<a name="l00369"></a>00369 }
<a name="l00370"></a>00370
<a name="l00371"></a>00371 gdk_gc_set_line_attributes(local_gc,
<a name="l00372"></a>00372 (<span class="keywordtype">int</span>)round(scale * p[ch_thickness_idx]),
<a name="l00373"></a>00373 GDK_LINE_SOLID,
<a name="l00374"></a>00374 GDK_CAP_BUTT,
<a name="l00375"></a>00375 GDK_JOIN_MITER);
<a name="l00376"></a>00376
<a name="l00377"></a>00377 <span class="comment">/* The cross hair should "cut out" parts of the circle, hence inverse */</span>
<a name="l00378"></a>00378 gdk_gc_get_values(local_gc, &amp;gc_val);
<a name="l00379"></a>00379 <span class="keywordflow">if</span> (gc_val.foreground.pixel == 1)
<a name="l00380"></a>00380 gc_val.foreground.pixel = 0;
<a name="l00381"></a>00381 <span class="keywordflow">else</span>
<a name="l00382"></a>00382 gc_val.foreground.pixel = 1;
<a name="l00383"></a>00383 gdk_gc_set_foreground(local_gc, &amp;(gc_val.foreground));
<a name="l00384"></a>00384
<a name="l00385"></a>00385 <span class="comment">/* Draw the actual cross */</span>
<a name="l00386"></a>00386 gdk_draw_line(pixmap, local_gc,
<a name="l00387"></a>00387 point[0].x, point[0].y, point[2].x, point[2].y);
<a name="l00388"></a>00388 gdk_draw_line(pixmap, local_gc,
<a name="l00389"></a>00389 point[1].x, point[1].y, point[3].x, point[3].y);
<a name="l00390"></a>00390
<a name="l00391"></a>00391 gdk_gc_unref(local_gc);
<a name="l00392"></a>00392
<a name="l00393"></a>00393 <span class="keywordflow">return</span>;
<a name="l00394"></a>00394 } <span class="comment">/* gerbv_gdk_draw_prim7 */</span>
<a name="l00395"></a>00395
<a name="l00396"></a>00396
<a name="l00397"></a>00397 <span class="comment">/*</span>
<a name="l00398"></a>00398 <span class="comment"> * Doesn't handle and explicit x,y yet</span>
<a name="l00399"></a>00399 <span class="comment"> */</span>
<a name="l00400"></a>00400 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00401"></a>00401 gerbv_gdk_draw_prim20(GdkPixmap *pixmap, GdkGC *gc, <span class="keywordtype">double</span> *p,
<a name="l00402"></a>00402 <span class="keywordtype">double</span> scale, gint x, gint y)
<a name="l00403"></a>00403 {
<a name="l00404"></a>00404 <span class="keyword">const</span> <span class="keywordtype">int</span> exposure_idx = 0;
<a name="l00405"></a>00405 <span class="keyword">const</span> <span class="keywordtype">int</span> linewidth_idx = 1;
<a name="l00406"></a>00406 <span class="keyword">const</span> <span class="keywordtype">int</span> start_x_idx = 2;
<a name="l00407"></a>00407 <span class="keyword">const</span> <span class="keywordtype">int</span> start_y_idx = 3;
<a name="l00408"></a>00408 <span class="keyword">const</span> <span class="keywordtype">int</span> end_x_idx = 4;
<a name="l00409"></a>00409 <span class="keyword">const</span> <span class="keywordtype">int</span> end_y_idx = 5;
<a name="l00410"></a>00410 <span class="keyword">const</span> <span class="keywordtype">int</span> rotation_idx = 6;
<a name="l00411"></a>00411 <span class="keyword">const</span> <span class="keywordtype">int</span> nuf_points = 2;
<a name="l00412"></a>00412 GdkGC *local_gc = gdk_gc_new(pixmap);
<a name="l00413"></a>00413 GdkPoint points[nuf_points];
<a name="l00414"></a>00414 GdkColor color;
<a name="l00415"></a>00415 <span class="keywordtype">int</span> i;
<a name="l00416"></a>00416
<a name="l00417"></a>00417 gdk_gc_copy(local_gc, gc);
<a name="l00418"></a>00418
<a name="l00419"></a>00419 <span class="comment">/* Exposure */</span>
<a name="l00420"></a>00420 <span class="keywordflow">if</span> (p[exposure_idx] == 0.0) {
<a name="l00421"></a>00421 color.pixel = 0;
<a name="l00422"></a>00422 gdk_gc_set_foreground(local_gc, &amp;color);
<a name="l00423"></a>00423 }
<a name="l00424"></a>00424
<a name="l00425"></a>00425 gdk_gc_set_line_attributes(local_gc,
<a name="l00426"></a>00426 (<span class="keywordtype">int</span>)round(scale * p[linewidth_idx]),
<a name="l00427"></a>00427 GDK_LINE_SOLID,
<a name="l00428"></a>00428 GDK_CAP_BUTT,
<a name="l00429"></a>00429 GDK_JOIN_MITER);
<a name="l00430"></a>00430
<a name="l00431"></a>00431 points[0].x = (p[start_x_idx] * scale);
<a name="l00432"></a>00432 points[0].y = (p[start_y_idx] * scale);
<a name="l00433"></a>00433 points[1].x = (p[end_x_idx] * scale);
<a name="l00434"></a>00434 points[1].y = (p[end_y_idx] * scale);
<a name="l00435"></a>00435
<a name="l00436"></a>00436 <span class="keywordflow">for</span> (i = 0; i &lt; nuf_points; i++) {
<a name="l00437"></a>00437 points[i] = rotate_point(points[i], -p[rotation_idx]);
<a name="l00438"></a>00438 points[i].x = x + points[i].x;
<a name="l00439"></a>00439 points[i].y = y - points[i].y;
<a name="l00440"></a>00440 }
<a name="l00441"></a>00441
<a name="l00442"></a>00442 gdk_draw_line(pixmap, local_gc,
<a name="l00443"></a>00443 points[0].x, points[0].y,
<a name="l00444"></a>00444 points[1].x, points[1].y);
<a name="l00445"></a>00445
<a name="l00446"></a>00446 gdk_gc_unref(local_gc);
<a name="l00447"></a>00447
<a name="l00448"></a>00448 <span class="keywordflow">return</span>;
<a name="l00449"></a>00449 } <span class="comment">/* gerbv_gdk_draw_prim20 */</span>
<a name="l00450"></a>00450
<a name="l00451"></a>00451
<a name="l00452"></a>00452 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00453"></a>00453 gerbv_gdk_draw_prim21(GdkPixmap *pixmap, GdkGC *gc, <span class="keywordtype">double</span> *p,
<a name="l00454"></a>00454 <span class="keywordtype">double</span> scale, gint x, gint y)
<a name="l00455"></a>00455 {
<a name="l00456"></a>00456 <span class="keyword">const</span> <span class="keywordtype">int</span> exposure_idx = 0;
<a name="l00457"></a>00457 <span class="keyword">const</span> <span class="keywordtype">int</span> width_idx = 1;
<a name="l00458"></a>00458 <span class="keyword">const</span> <span class="keywordtype">int</span> height_idx = 2;
<a name="l00459"></a>00459 <span class="keyword">const</span> <span class="keywordtype">int</span> exp_x_idx = 3;
<a name="l00460"></a>00460 <span class="keyword">const</span> <span class="keywordtype">int</span> exp_y_idx = 4;
<a name="l00461"></a>00461 <span class="keyword">const</span> <span class="keywordtype">int</span> rotation_idx = 5;
<a name="l00462"></a>00462 <span class="keyword">const</span> <span class="keywordtype">int</span> nuf_points = 4;
<a name="l00463"></a>00463 GdkPoint points[nuf_points];
<a name="l00464"></a>00464 GdkColor color;
<a name="l00465"></a>00465 GdkGC *local_gc = gdk_gc_new(pixmap);
<a name="l00466"></a>00466 <span class="keywordtype">int</span> half_width, half_height;
<a name="l00467"></a>00467 <span class="keywordtype">int</span> i;
<a name="l00468"></a>00468
<a name="l00469"></a>00469 half_width = (int)round(p[width_idx] * scale / 2.0);
<a name="l00470"></a>00470 half_height =(int)round(p[height_idx] * scale / 2.0);
<a name="l00471"></a>00471
<a name="l00472"></a>00472 points[0].x = half_width;
<a name="l00473"></a>00473 points[0].y = half_height;
<a name="l00474"></a>00474
<a name="l00475"></a>00475 points[1].x = half_width;
<a name="l00476"></a>00476 points[1].y = -half_height;
<a name="l00477"></a>00477
<a name="l00478"></a>00478 points[2].x = -half_width;
<a name="l00479"></a>00479 points[2].y = -half_height;
<a name="l00480"></a>00480
<a name="l00481"></a>00481 points[3].x = -half_width;
<a name="l00482"></a>00482 points[3].y = half_height;
<a name="l00483"></a>00483
<a name="l00484"></a>00484 <span class="keywordflow">for</span> (i = 0; i &lt; nuf_points; i++) {
<a name="l00485"></a>00485 points[i] = rotate_point(points[i], p[rotation_idx]);
<a name="l00486"></a>00486 points[i].x += (x + (int)(p[exp_x_idx] * scale));
<a name="l00487"></a>00487 points[i].y += (y - (int)(p[exp_y_idx] * scale));
<a name="l00488"></a>00488 }
<a name="l00489"></a>00489
<a name="l00490"></a>00490 gdk_gc_copy(local_gc, gc);
<a name="l00491"></a>00491
<a name="l00492"></a>00492 <span class="comment">/* Exposure */</span>
<a name="l00493"></a>00493 <span class="keywordflow">if</span> (p[exposure_idx] == 0.0) {
<a name="l00494"></a>00494 color.pixel = 0;
<a name="l00495"></a>00495 gdk_gc_set_foreground(local_gc, &amp;color);
<a name="l00496"></a>00496 }
<a name="l00497"></a>00497
<a name="l00498"></a>00498 gdk_draw_polygon(pixmap, local_gc, 1, points, nuf_points);
<a name="l00499"></a>00499
<a name="l00500"></a>00500 gdk_gc_unref(local_gc);
<a name="l00501"></a>00501
<a name="l00502"></a>00502 <span class="keywordflow">return</span>;
<a name="l00503"></a>00503 } <span class="comment">/* gerbv_gdk_draw_prim21 */</span>
<a name="l00504"></a>00504
<a name="l00505"></a>00505
<a name="l00506"></a>00506 <span class="comment">/*</span>
<a name="l00507"></a>00507 <span class="comment"> * Doesn't handle explicit x,y yet</span>
<a name="l00508"></a>00508 <span class="comment"> */</span>
<a name="l00509"></a>00509 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00510"></a>00510 gerbv_gdk_draw_prim22(GdkPixmap *pixmap, GdkGC *gc, <span class="keywordtype">double</span> *p,
<a name="l00511"></a>00511 <span class="keywordtype">double</span> scale, gint x, gint y)
<a name="l00512"></a>00512 {
<a name="l00513"></a>00513 <span class="keyword">const</span> <span class="keywordtype">int</span> exposure_idx = 0;
<a name="l00514"></a>00514 <span class="keyword">const</span> <span class="keywordtype">int</span> width_idx = 1;
<a name="l00515"></a>00515 <span class="keyword">const</span> <span class="keywordtype">int</span> height_idx = 2;
<a name="l00516"></a>00516 <span class="keyword">const</span> <span class="keywordtype">int</span> x_lower_left_idx = 3;
<a name="l00517"></a>00517 <span class="keyword">const</span> <span class="keywordtype">int</span> y_lower_left_idx = 4;
<a name="l00518"></a>00518 <span class="keyword">const</span> <span class="keywordtype">int</span> rotation_idx = 5;
<a name="l00519"></a>00519 <span class="keyword">const</span> <span class="keywordtype">int</span> nuf_points = 4;
<a name="l00520"></a>00520 GdkPoint points[nuf_points];
<a name="l00521"></a>00521 GdkGC *local_gc = gdk_gc_new(pixmap);
<a name="l00522"></a>00522 GdkColor color;
<a name="l00523"></a>00523 <span class="keywordtype">int</span> i;
<a name="l00524"></a>00524
<a name="l00525"></a>00525 points[0].x = (int)round(p[x_lower_left_idx] * scale);
<a name="l00526"></a>00526 points[0].y = (int)round(p[y_lower_left_idx] * scale);
<a name="l00527"></a>00527
<a name="l00528"></a>00528 points[1].x = (int)round((p[x_lower_left_idx] + p[width_idx])
<a name="l00529"></a>00529 * scale);
<a name="l00530"></a>00530 points[1].y = (int)round(p[y_lower_left_idx] * scale);
<a name="l00531"></a>00531
<a name="l00532"></a>00532 points[2].x = (int)round((p[x_lower_left_idx] + p[width_idx])
<a name="l00533"></a>00533 * scale);
<a name="l00534"></a>00534 points[2].y = (int)round((p[y_lower_left_idx] - p[height_idx])
<a name="l00535"></a>00535 * scale);
<a name="l00536"></a>00536
<a name="l00537"></a>00537 points[3].x = (int)round(p[x_lower_left_idx] * scale);
<a name="l00538"></a>00538 points[3].y = (int)round((p[y_lower_left_idx] - p[height_idx])
<a name="l00539"></a>00539 * scale);
<a name="l00540"></a>00540
<a name="l00541"></a>00541 <span class="keywordflow">for</span> (i = 0; i &lt; nuf_points; i++) {
<a name="l00542"></a>00542 points[i] = rotate_point(points[i], p[rotation_idx]);
<a name="l00543"></a>00543 points[i].x += x;
<a name="l00544"></a>00544 points[i].y += y;
<a name="l00545"></a>00545 }
<a name="l00546"></a>00546
<a name="l00547"></a>00547 gdk_gc_copy(local_gc, gc);
<a name="l00548"></a>00548
<a name="l00549"></a>00549 <span class="comment">/* Exposure */</span>
<a name="l00550"></a>00550 <span class="keywordflow">if</span> (p[exposure_idx] == 0.0) {
<a name="l00551"></a>00551 color.pixel = 0;
<a name="l00552"></a>00552 gdk_gc_set_foreground(local_gc, &amp;color);
<a name="l00553"></a>00553 }
<a name="l00554"></a>00554
<a name="l00555"></a>00555 gdk_draw_polygon(pixmap, local_gc, 1, points, nuf_points);
<a name="l00556"></a>00556
<a name="l00557"></a>00557 gdk_gc_unref(local_gc);
<a name="l00558"></a>00558
<a name="l00559"></a>00559 <span class="keywordflow">return</span>;
<a name="l00560"></a>00560 } <span class="comment">/* gerbv_gdk_draw_prim22 */</span>
<a name="l00561"></a>00561
<a name="l00562"></a>00562
<a name="l00563"></a>00563 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00564"></a>00564 gerbv_gdk_draw_amacro(GdkPixmap *pixmap, GdkGC *gc,
<a name="l00565"></a>00565 gerbv_simplified_amacro_t *s, <span class="keywordtype">double</span> scale,
<a name="l00566"></a>00566 gint x, gint y)
<a name="l00567"></a>00567 {
<a name="l00568"></a>00568 gerbv_simplified_amacro_t *ls = s;
<a name="l00569"></a>00569
<a name="l00570"></a>00570 dprintf(<span class="stringliteral">"Drawing simplified aperture macros:\n"</span>);
<a name="l00571"></a>00571 <span class="keywordflow">while</span> (ls != NULL) {
<a name="l00572"></a>00572
<a name="l00573"></a>00573 <span class="keywordflow">switch</span> (ls-&gt;type) {
<a name="l00574"></a>00574 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e12374aa4d6be02b88c38208a8d57568e0e25">GERBV_APTYPE_MACRO_CIRCLE</a>:
<a name="l00575"></a>00575 gerbv_gdk_draw_prim1(pixmap, gc, ls-&gt;parameter, scale, x, y);
<a name="l00576"></a>00576 dprintf(<span class="stringliteral">" Circle\n"</span>);
<a name="l00577"></a>00577 <span class="keywordflow">break</span>;
<a name="l00578"></a>00578 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e123745da38f5ee1b382588d0990bb2c7a61d">GERBV_APTYPE_MACRO_OUTLINE</a>:
<a name="l00579"></a>00579 gerbv_gdk_draw_prim4(pixmap, gc, ls-&gt;parameter, scale, x, y);
<a name="l00580"></a>00580 dprintf(<span class="stringliteral">" Outline\n"</span>);
<a name="l00581"></a>00581 <span class="keywordflow">break</span>;
<a name="l00582"></a>00582 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e1237a102b604a3b05bf6c141edacf5ed1126">GERBV_APTYPE_MACRO_POLYGON</a>:
<a name="l00583"></a>00583 gerbv_gdk_draw_prim5(pixmap, gc, ls-&gt;parameter, scale, x, y);
<a name="l00584"></a>00584 dprintf(<span class="stringliteral">" Polygon\n"</span>);
<a name="l00585"></a>00585 <span class="keywordflow">break</span>;
<a name="l00586"></a>00586 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e1237e76651c204dbffde21b0dc5332565e18">GERBV_APTYPE_MACRO_MOIRE</a>:
<a name="l00587"></a>00587 gerbv_gdk_draw_prim6(pixmap, gc, ls-&gt;parameter, scale, x, y);
<a name="l00588"></a>00588 dprintf(<span class="stringliteral">" Moir<69>\n"</span>);
<a name="l00589"></a>00589 <span class="keywordflow">break</span>;
<a name="l00590"></a>00590 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e1237dabe9b77a94c2120f39baed9ac18df4e">GERBV_APTYPE_MACRO_THERMAL</a>:
<a name="l00591"></a>00591 gerbv_gdk_draw_prim7(pixmap, gc, ls-&gt;parameter, scale, x, y);
<a name="l00592"></a>00592 dprintf(<span class="stringliteral">" Thermal\n"</span>);
<a name="l00593"></a>00593 <span class="keywordflow">break</span>;
<a name="l00594"></a>00594 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e123705b2b411854f499ec367cba6143dd725">GERBV_APTYPE_MACRO_LINE20</a>:
<a name="l00595"></a>00595 gerbv_gdk_draw_prim20(pixmap, gc, ls-&gt;parameter, scale, x, y);
<a name="l00596"></a>00596 dprintf(<span class="stringliteral">" Line 20\n"</span>);
<a name="l00597"></a>00597 <span class="keywordflow">break</span>;
<a name="l00598"></a>00598 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e123706618241ba60c1d2e90a63a13033a419">GERBV_APTYPE_MACRO_LINE21</a>:
<a name="l00599"></a>00599 gerbv_gdk_draw_prim21(pixmap, gc, ls-&gt;parameter, scale, x, y);
<a name="l00600"></a>00600 dprintf(<span class="stringliteral">" Line 21\n"</span>);
<a name="l00601"></a>00601 <span class="keywordflow">break</span>;
<a name="l00602"></a>00602 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e1237e52e5a1629e8f1e68c29b66eb78e6021">GERBV_APTYPE_MACRO_LINE22</a>:
<a name="l00603"></a>00603 gerbv_gdk_draw_prim22(pixmap, gc, ls-&gt;parameter, scale, x, y);
<a name="l00604"></a>00604 dprintf(<span class="stringliteral">" Line 22\n"</span>);
<a name="l00605"></a>00605 <span class="keywordflow">break</span>;
<a name="l00606"></a>00606 <span class="keywordflow">default</span>:
<a name="l00607"></a>00607 GERB_FATAL_ERROR(<span class="stringliteral">"Unknown simplified aperture macro"</span>);
<a name="l00608"></a>00608 }
<a name="l00609"></a>00609
<a name="l00610"></a>00610 ls = ls-&gt;next;
<a name="l00611"></a>00611 }
<a name="l00612"></a>00612
<a name="l00613"></a>00613 } <span class="comment">/* gerbv_gdk_draw_amacro */</span>
<a name="l00614"></a>00614
<a name="l00615"></a>00615
<a name="l00616"></a>00616 <span class="comment">/*</span>
<a name="l00617"></a>00617 <span class="comment"> * Draws a circle _centered_ at x,y with diameter dia</span>
<a name="l00618"></a>00618 <span class="comment"> */</span>
<a name="l00619"></a>00619 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00620"></a>00620 gerbv_gdk_draw_circle(GdkPixmap *pixmap, GdkGC *gc,
<a name="l00621"></a>00621 gint filled, gint x, gint y, gint dia)
<a name="l00622"></a>00622 {
<a name="l00623"></a>00623 <span class="keyword">static</span> <span class="keyword">const</span> gint full_circle = 23360;
<a name="l00624"></a>00624 gint real_x = x - dia / 2;
<a name="l00625"></a>00625 gint real_y = y - dia / 2;
<a name="l00626"></a>00626
<a name="l00627"></a>00627 gdk_draw_arc(pixmap, gc, filled, real_x, real_y, dia, dia, 0, full_circle);
<a name="l00628"></a>00628
<a name="l00629"></a>00629 <span class="keywordflow">return</span>;
<a name="l00630"></a>00630 } <span class="comment">/* gerbv_gdk_draw_circle */</span>
<a name="l00631"></a>00631
<a name="l00632"></a>00632
<a name="l00633"></a>00633 <span class="comment">/*</span>
<a name="l00634"></a>00634 <span class="comment"> * Draws a rectangle _centered_ at x,y with sides x_side, y_side</span>
<a name="l00635"></a>00635 <span class="comment"> */</span>
<a name="l00636"></a>00636 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00637"></a>00637 gerbv_gdk_draw_rectangle(GdkPixmap *pixmap, GdkGC *gc,
<a name="l00638"></a>00638 gint filled, gint x, gint y, gint x_side, gint y_side)
<a name="l00639"></a>00639 {
<a name="l00640"></a>00640
<a name="l00641"></a>00641 gint real_x = x - x_side / 2;
<a name="l00642"></a>00642 gint real_y = y - y_side / 2;
<a name="l00643"></a>00643
<a name="l00644"></a>00644 gdk_draw_rectangle(pixmap, gc, filled, real_x, real_y, x_side, y_side);
<a name="l00645"></a>00645
<a name="l00646"></a>00646 <span class="keywordflow">return</span>;
<a name="l00647"></a>00647 } <span class="comment">/* gerbv_gdk_draw_rectangle */</span>
<a name="l00648"></a>00648
<a name="l00649"></a>00649
<a name="l00650"></a>00650 <span class="comment">/*</span>
<a name="l00651"></a>00651 <span class="comment"> * Draws an oval _centered_ at x,y with x axis x_axis and y axis y_axis</span>
<a name="l00652"></a>00652 <span class="comment"> */</span>
<a name="l00653"></a>00653 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00654"></a>00654 gerbv_gdk_draw_oval(GdkPixmap *pixmap, GdkGC *gc,
<a name="l00655"></a>00655 gint filled, gint x, gint y, gint x_axis, gint y_axis)
<a name="l00656"></a>00656 {
<a name="l00657"></a>00657 gint delta = 0;
<a name="l00658"></a>00658 GdkGC *local_gc = gdk_gc_new(pixmap);
<a name="l00659"></a>00659
<a name="l00660"></a>00660 gdk_gc_copy(local_gc, gc);
<a name="l00661"></a>00661
<a name="l00662"></a>00662 <span class="keywordflow">if</span> (x_axis &gt; y_axis) {
<a name="l00663"></a>00663 <span class="comment">/* Draw in x axis */</span>
<a name="l00664"></a>00664 delta = x_axis / 2 - y_axis / 2;
<a name="l00665"></a>00665 gdk_gc_set_line_attributes(local_gc, y_axis,
<a name="l00666"></a>00666 GDK_LINE_SOLID,
<a name="l00667"></a>00667 GDK_CAP_ROUND,
<a name="l00668"></a>00668 GDK_JOIN_MITER);
<a name="l00669"></a>00669 gdk_draw_line(pixmap, local_gc, x - delta, y, x + delta, y);
<a name="l00670"></a>00670 } <span class="keywordflow">else</span> {
<a name="l00671"></a>00671 <span class="comment">/* Draw in y axis */</span>
<a name="l00672"></a>00672 delta = y_axis / 2 - x_axis / 2;
<a name="l00673"></a>00673 gdk_gc_set_line_attributes(local_gc, x_axis,
<a name="l00674"></a>00674 GDK_LINE_SOLID,
<a name="l00675"></a>00675 GDK_CAP_ROUND,
<a name="l00676"></a>00676 GDK_JOIN_MITER);
<a name="l00677"></a>00677 gdk_draw_line(pixmap, local_gc, x, y - delta, x, y + delta);
<a name="l00678"></a>00678 }
<a name="l00679"></a>00679
<a name="l00680"></a>00680 gdk_gc_unref(local_gc);
<a name="l00681"></a>00681
<a name="l00682"></a>00682 <span class="keywordflow">return</span>;
<a name="l00683"></a>00683 } <span class="comment">/* gerbv_gdk_draw_oval */</span>
<a name="l00684"></a>00684
<a name="l00685"></a>00685
<a name="l00686"></a>00686 <span class="comment">/*</span>
<a name="l00687"></a>00687 <span class="comment"> * Draws an arc </span>
<a name="l00688"></a>00688 <span class="comment"> * Draws an arc _centered_ at x,y</span>
<a name="l00689"></a>00689 <span class="comment"> * direction: 0 counterclockwise, 1 clockwise</span>
<a name="l00690"></a>00690 <span class="comment"> */</span>
<a name="l00691"></a>00691 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00692"></a>00692 gerbv_gdk_draw_arc(GdkPixmap *pixmap, GdkGC *gc,
<a name="l00693"></a>00693 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y,
<a name="l00694"></a>00694 <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height,
<a name="l00695"></a>00695 <span class="keywordtype">double</span> angle1, <span class="keywordtype">double</span> angle2)
<a name="l00696"></a>00696 {
<a name="l00697"></a>00697 gint real_x = x - width / 2;
<a name="l00698"></a>00698 gint real_y = y - height / 2;
<a name="l00699"></a>00699
<a name="l00700"></a>00700 gdk_draw_arc(pixmap, gc, FALSE, real_x, real_y, width, height,
<a name="l00701"></a>00701 (gint)(angle1 * 64.0), (gint)(angle2 - angle1) * 64.0);
<a name="l00702"></a>00702
<a name="l00703"></a>00703 <span class="keywordflow">return</span>;
<a name="l00704"></a>00704 } <span class="comment">/* gerbv_gdk_draw_arc */</span>
<a name="l00705"></a>00705
<a name="l00706"></a>00706 <span class="keywordtype">void</span>
<a name="l00707"></a>00707 draw_gdk_render_polygon_object (<a class="code" href="structgerbv__net.html">gerbv_net_t</a> *oldNet, <a class="code" href="structgerbv__image__t.html">gerbv_image_t</a> *image, <span class="keywordtype">double</span> sr_x, <span class="keywordtype">double</span> sr_y,
<a name="l00708"></a>00708 <span class="keywordtype">double</span> unit_scale, <span class="keywordtype">double</span> trans_x, <span class="keywordtype">double</span> trans_y, GdkGC *gc, GdkGC *pgc,
<a name="l00709"></a>00709 GdkPixmap **pixmap) {
<a name="l00710"></a>00710 <a class="code" href="structgerbv__net.html">gerbv_net_t</a> *currentNet;
<a name="l00711"></a>00711 gint x1,x2,y1,y2,cp_x=0,cp_y=0,cir_width=0,cir_height=0;
<a name="l00712"></a>00712 GdkPoint *points = NULL;
<a name="l00713"></a>00713 <span class="keywordtype">int</span> pointArraySize=0;
<a name="l00714"></a>00714 <span class="keywordtype">int</span> curr_point_idx = 0;
<a name="l00715"></a>00715 <span class="keywordtype">int</span> steps,i;
<a name="l00716"></a>00716 <span class="keywordtype">double</span> angleDiff;
<a name="l00717"></a>00717
<a name="l00718"></a>00718 <span class="comment">/* save the first net in the polygon as the "ID" net pointer</span>
<a name="l00719"></a>00719 <span class="comment"> in case we are saving this net to the selection array */</span>
<a name="l00720"></a>00720 curr_point_idx = 0;
<a name="l00721"></a>00721 pointArraySize = 0;
<a name="l00722"></a>00722
<a name="l00723"></a>00723 <span class="keywordflow">for</span> (currentNet = oldNet-&gt;<a class="code" href="structgerbv__net.html#74453be5449de76efa6cc12df4b2886c">next</a>; currentNet!=NULL; currentNet = currentNet-&gt;<a class="code" href="structgerbv__net.html#74453be5449de76efa6cc12df4b2886c">next</a>){
<a name="l00724"></a>00724 x1 = (int)round((image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#3f145d47793e723d09e5a75758b25295">offsetA</a> + currentNet-&gt;<a class="code" href="structgerbv__net.html#6189e51df43105b4225cb6324f34d87f">start_x</a> + sr_x) * unit_scale + trans_x);
<a name="l00725"></a>00725 y1 = (int)round((-image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#db9f3d343e14f84e23181b17c0bf3a73">offsetB</a> - currentNet-&gt;<a class="code" href="structgerbv__net.html#8a34ce21baab8da09fdf6301f211ff6f">start_y</a> - sr_y) * unit_scale + trans_y);
<a name="l00726"></a>00726 x2 = (int)round((image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#3f145d47793e723d09e5a75758b25295">offsetA</a> + currentNet-&gt;<a class="code" href="structgerbv__net.html#5e221f216fd25e09358da99191821d25">stop_x</a> + sr_x) * unit_scale + trans_x);
<a name="l00727"></a>00727 y2 = (int)round((-image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#db9f3d343e14f84e23181b17c0bf3a73">offsetB</a> - currentNet-&gt;<a class="code" href="structgerbv__net.html#322975adbc33c1a642fb5e8cfadd2eb7">stop_y</a> - sr_y) * unit_scale + trans_y);
<a name="l00728"></a>00728
<a name="l00729"></a>00729 <span class="comment">/* </span>
<a name="l00730"></a>00730 <span class="comment"> * If circle segment, scale and translate that one too</span>
<a name="l00731"></a>00731 <span class="comment"> */</span>
<a name="l00732"></a>00732 <span class="keywordflow">if</span> (currentNet-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>) {
<a name="l00733"></a>00733 cir_width = (int)round(currentNet-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;width * unit_scale);
<a name="l00734"></a>00734 cir_height = (int)round(currentNet-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;height * unit_scale);
<a name="l00735"></a>00735 cp_x = (int)round((image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#3f145d47793e723d09e5a75758b25295">offsetA</a> + currentNet-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;cp_x) *
<a name="l00736"></a>00736 unit_scale + trans_x);
<a name="l00737"></a>00737 cp_y = (int)round((image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#db9f3d343e14f84e23181b17c0bf3a73">offsetB</a> - currentNet-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;cp_y) *
<a name="l00738"></a>00738 unit_scale + trans_y);
<a name="l00739"></a>00739 }
<a name="l00740"></a>00740
<a name="l00741"></a>00741 <span class="keywordflow">switch</span> (currentNet-&gt;<a class="code" href="structgerbv__net.html#ad3bee195bd0592bf1521e94a5451d42">interpolation</a>) {
<a name="l00742"></a>00742 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5eafb605f54313fd8299abb57f749a5f72">GERBV_INTERPOLATION_x10</a> :
<a name="l00743"></a>00743 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5e162b6f84fe9933e3d8f8d9d712222584">GERBV_INTERPOLATION_LINEARx01</a> :
<a name="l00744"></a>00744 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5e713750d93715d25cc1306fb07cfc3090">GERBV_INTERPOLATION_LINEARx001</a> :
<a name="l00745"></a>00745 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5efc1b3a7c8e48bfbf95dc57b3e3042d2d">GERBV_INTERPOLATION_LINEARx1</a> :
<a name="l00746"></a>00746 <span class="keywordflow">if</span> (pointArraySize &lt; (curr_point_idx + 1)) {
<a name="l00747"></a>00747 points = (GdkPoint *)g_realloc(points,<span class="keyword">sizeof</span>(GdkPoint) * (curr_point_idx + 1));
<a name="l00748"></a>00748 pointArraySize = (curr_point_idx + 1);
<a name="l00749"></a>00749 }
<a name="l00750"></a>00750 points[curr_point_idx].x = x2;
<a name="l00751"></a>00751 points[curr_point_idx].y = y2;
<a name="l00752"></a>00752 curr_point_idx++;
<a name="l00753"></a>00753 <span class="keywordflow">break</span>;
<a name="l00754"></a>00754 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5e922b94e7291b681b05cded85daa1eb98">GERBV_INTERPOLATION_CW_CIRCULAR</a> :
<a name="l00755"></a>00755 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5ef738d54521d612942753090b943a7426">GERBV_INTERPOLATION_CCW_CIRCULAR</a> :
<a name="l00756"></a>00756 <span class="comment">/* we need to chop up the arc into small lines for rendering</span>
<a name="l00757"></a>00757 <span class="comment"> with GDK */</span>
<a name="l00758"></a>00758 angleDiff = currentNet-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;angle2 - currentNet-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;angle1;
<a name="l00759"></a>00759 steps = (int) abs(angleDiff);
<a name="l00760"></a>00760 <span class="keywordflow">if</span> (pointArraySize &lt; (curr_point_idx + steps)) {
<a name="l00761"></a>00761 points = (GdkPoint *)g_realloc(points,<span class="keyword">sizeof</span>(GdkPoint) * (curr_point_idx + steps));
<a name="l00762"></a>00762 pointArraySize = (curr_point_idx + steps);
<a name="l00763"></a>00763 }
<a name="l00764"></a>00764 <span class="keywordflow">for</span> (i=0; i&lt;steps; i++){
<a name="l00765"></a>00765 points[curr_point_idx].x = cp_x + cir_width / 2.0 * cos ((currentNet-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;angle1 +
<a name="l00766"></a>00766 (angleDiff * i) / steps)*M_PI/180);
<a name="l00767"></a>00767 points[curr_point_idx].y = cp_y - cir_width / 2.0 * sin ((currentNet-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;angle1 +
<a name="l00768"></a>00768 (angleDiff * i) / steps)*M_PI/180);
<a name="l00769"></a>00769 curr_point_idx++;
<a name="l00770"></a>00770 }
<a name="l00771"></a>00771 <span class="keywordflow">break</span>;
<a name="l00772"></a>00772 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5e9a0c81abf80482847b58c54d3ea4218e">GERBV_INTERPOLATION_PAREA_END</a> :
<a name="l00773"></a>00773 gdk_gc_copy(pgc, gc);
<a name="l00774"></a>00774 gdk_gc_set_line_attributes(pgc, 1,
<a name="l00775"></a>00775 GDK_LINE_SOLID,
<a name="l00776"></a>00776 GDK_CAP_PROJECTING,
<a name="l00777"></a>00777 GDK_JOIN_MITER);
<a name="l00778"></a>00778 gdk_draw_polygon(*pixmap, pgc, 1, points, curr_point_idx);
<a name="l00779"></a>00779 g_free(points);
<a name="l00780"></a>00780 points = NULL;
<a name="l00781"></a>00781 <span class="keywordflow">return</span>;
<a name="l00782"></a>00782 <span class="keywordflow">default</span>:
<a name="l00783"></a>00783 <span class="keywordflow">break</span>;
<a name="l00784"></a>00784 }
<a name="l00785"></a>00785 }
<a name="l00786"></a>00786 <span class="keywordflow">return</span>;
<a name="l00787"></a>00787 }
<a name="l00788"></a>00788
<a name="l00789"></a>00789 <span class="comment">/*</span>
<a name="l00790"></a>00790 <span class="comment"> * Convert a gerber image to a GDK clip mask to be used when creating pixmap</span>
<a name="l00791"></a>00791 <span class="comment"> */</span>
<a name="l00792"></a>00792 <span class="keywordtype">int</span>
<a name="l00793"></a>00793 draw_gdk_image_to_pixmap(GdkPixmap **pixmap, <a class="code" href="structgerbv__image__t.html">gerbv_image_t</a> *image,
<a name="l00794"></a>00794 <span class="keywordtype">double</span> scale, <span class="keywordtype">double</span> trans_x, <span class="keywordtype">double</span> trans_y,
<a name="l00795"></a>00795 <a class="code" href="gerbv_8h.html#42e426131be82b5e215429994035f465">gerbv_polarity_t</a> polarity, gchar drawMode, <a class="code" href="structgerbv__selection__info__t.html">gerbv_selection_info_t</a> *selectionInfo)
<a name="l00796"></a>00796 {
<a name="l00797"></a>00797 GdkGC *gc = gdk_gc_new(*pixmap);
<a name="l00798"></a>00798 GdkGC *pgc = gdk_gc_new(*pixmap);
<a name="l00799"></a>00799 GdkGCValues gc_values;
<a name="l00800"></a>00800 <span class="keyword">struct </span><a class="code" href="structgerbv__net.html">gerbv_net</a> *net;
<a name="l00801"></a>00801 gint x1, y1, x2, y2;
<a name="l00802"></a>00802 <span class="keywordtype">int</span> p1, p2, p3;
<a name="l00803"></a>00803 <span class="keywordtype">int</span> cir_width = 0, cir_height = 0;
<a name="l00804"></a>00804 <span class="keywordtype">int</span> cp_x = 0, cp_y = 0;
<a name="l00805"></a>00805 <span class="keywordtype">double</span> unit_scale;
<a name="l00806"></a>00806 GdkColor transparent, opaque;
<a name="l00807"></a>00807
<a name="l00808"></a>00808
<a name="l00809"></a>00809 <span class="keywordflow">if</span> (image == NULL || image-&gt;<a class="code" href="structgerbv__image__t.html#4ce3cbd8ab0949d0da18653890184120">netlist</a> == NULL) {
<a name="l00810"></a>00810 <span class="comment">/*</span>
<a name="l00811"></a>00811 <span class="comment"> * Destroy GCs before exiting</span>
<a name="l00812"></a>00812 <span class="comment"> */</span>
<a name="l00813"></a>00813 gdk_gc_unref(gc);
<a name="l00814"></a>00814 gdk_gc_unref(pgc);
<a name="l00815"></a>00815
<a name="l00816"></a>00816 <span class="keywordflow">return</span> 0;
<a name="l00817"></a>00817 }
<a name="l00818"></a>00818
<a name="l00819"></a>00819 <span class="comment">/* Set up the two "colors" we have */</span>
<a name="l00820"></a>00820 opaque.pixel = 0; <span class="comment">/* opaque will not let color through */</span>
<a name="l00821"></a>00821 transparent.pixel = 1; <span class="comment">/* transparent will let color through */</span>
<a name="l00822"></a>00822
<a name="l00823"></a>00823 <span class="comment">/*</span>
<a name="l00824"></a>00824 <span class="comment"> * Clear clipmask and set draw color depending image on image polarity</span>
<a name="l00825"></a>00825 <span class="comment"> */</span>
<a name="l00826"></a>00826 <span class="keywordflow">if</span> (polarity == <a class="code" href="gerbv_8h.html#42e426131be82b5e215429994035f4653f7beb089cc8fa9de323dca063c3e3f3">GERBV_POLARITY_NEGATIVE</a>) {
<a name="l00827"></a>00827 gdk_gc_set_foreground(gc, &amp;transparent);
<a name="l00828"></a>00828 gdk_draw_rectangle(*pixmap, gc, TRUE, 0, 0, -1, -1);
<a name="l00829"></a>00829 gdk_gc_set_foreground(gc, &amp;opaque);
<a name="l00830"></a>00830 } <span class="keywordflow">else</span> {
<a name="l00831"></a>00831 gdk_gc_set_foreground(gc, &amp;opaque);
<a name="l00832"></a>00832 gdk_draw_rectangle(*pixmap, gc, TRUE, 0, 0, -1, -1);
<a name="l00833"></a>00833 gdk_gc_set_foreground(gc, &amp;transparent);
<a name="l00834"></a>00834 }
<a name="l00835"></a>00835
<a name="l00836"></a>00836 <span class="keywordflow">for</span> (net = image-&gt;<a class="code" href="structgerbv__image__t.html#4ce3cbd8ab0949d0da18653890184120">netlist</a>-&gt;<a class="code" href="structgerbv__net.html#74453be5449de76efa6cc12df4b2886c">next</a> ; net != NULL; net = <a class="code" href="gerb__image_8c.html#c2046be95412bbb90c3a80d799bb47d9" title="Return the next net entry which corresponds to a unique visible object.">gerbv_image_return_next_renderable_object</a>(net)) {
<a name="l00837"></a>00837 <span class="keywordtype">int</span> repeat_X=1, repeat_Y=1;
<a name="l00838"></a>00838 <span class="keywordtype">double</span> repeat_dist_X=0.0, repeat_dist_Y=0.0;
<a name="l00839"></a>00839 <span class="keywordtype">int</span> repeat_i, repeat_j;
<a name="l00840"></a>00840
<a name="l00841"></a>00841 <span class="comment">/*</span>
<a name="l00842"></a>00842 <span class="comment"> * If step_and_repeat (%SR%) used, repeat the drawing;</span>
<a name="l00843"></a>00843 <span class="comment"> */</span>
<a name="l00844"></a>00844 repeat_X = net-&gt;<a class="code" href="structgerbv__net.html#13bb1433bc8ba893ab8d18dc83b3ec0c">layer</a>-&gt;<a class="code" href="structgerbv__layer__t.html#51f386fd6abbc0f34f9f3d732deb22ee">stepAndRepeat</a>.X;
<a name="l00845"></a>00845 repeat_Y = net-&gt;<a class="code" href="structgerbv__net.html#13bb1433bc8ba893ab8d18dc83b3ec0c">layer</a>-&gt;<a class="code" href="structgerbv__layer__t.html#51f386fd6abbc0f34f9f3d732deb22ee">stepAndRepeat</a>.Y;
<a name="l00846"></a>00846 repeat_dist_X = net-&gt;<a class="code" href="structgerbv__net.html#13bb1433bc8ba893ab8d18dc83b3ec0c">layer</a>-&gt;<a class="code" href="structgerbv__layer__t.html#51f386fd6abbc0f34f9f3d732deb22ee">stepAndRepeat</a>.dist_X;
<a name="l00847"></a>00847 repeat_dist_Y = net-&gt;<a class="code" href="structgerbv__net.html#13bb1433bc8ba893ab8d18dc83b3ec0c">layer</a>-&gt;<a class="code" href="structgerbv__layer__t.html#51f386fd6abbc0f34f9f3d732deb22ee">stepAndRepeat</a>.dist_Y;
<a name="l00848"></a>00848
<a name="l00849"></a>00849 <span class="keywordflow">if</span> (drawMode == DRAW_SELECTIONS) {
<a name="l00850"></a>00850 <span class="keywordtype">int</span> i;
<a name="l00851"></a>00851 gboolean foundNet = FALSE;
<a name="l00852"></a>00852
<a name="l00853"></a>00853 <span class="keywordflow">for</span> (i=0; i&lt;selectionInfo-&gt;<a class="code" href="structgerbv__selection__info__t.html#0d5d16901c7c3660c772caf63d85209c">selectedNodeArray</a>-&gt;len; i++){
<a name="l00854"></a>00854 gerbv_selection_item_t sItem = g_array_index (selectionInfo-&gt;<a class="code" href="structgerbv__selection__info__t.html#0d5d16901c7c3660c772caf63d85209c">selectedNodeArray</a>,
<a name="l00855"></a>00855 gerbv_selection_item_t, i);
<a name="l00856"></a>00856 <span class="keywordflow">if</span> (sItem.net == net)
<a name="l00857"></a>00857 foundNet = TRUE;
<a name="l00858"></a>00858 }
<a name="l00859"></a>00859 <span class="keywordflow">if</span> (!foundNet)
<a name="l00860"></a>00860 <span class="keywordflow">continue</span>;
<a name="l00861"></a>00861 }
<a name="l00862"></a>00862
<a name="l00863"></a>00863 <span class="keywordflow">for</span>(repeat_i = 0; repeat_i &lt; repeat_X; repeat_i++) {
<a name="l00864"></a>00864 <span class="keywordflow">for</span>(repeat_j = 0; repeat_j &lt; repeat_Y; repeat_j++) {
<a name="l00865"></a>00865 <span class="keywordtype">double</span> sr_x = repeat_i * repeat_dist_X;
<a name="l00866"></a>00866 <span class="keywordtype">double</span> sr_y = repeat_j * repeat_dist_Y;
<a name="l00867"></a>00867
<a name="l00868"></a>00868 unit_scale = scale;
<a name="l00869"></a>00869
<a name="l00870"></a>00870 <span class="comment">/*</span>
<a name="l00871"></a>00871 <span class="comment"> * Scale points with window scaling and translate them</span>
<a name="l00872"></a>00872 <span class="comment"> */</span>
<a name="l00873"></a>00873 x1 = (int)round((image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#3f145d47793e723d09e5a75758b25295">offsetA</a> + net-&gt;<a class="code" href="structgerbv__net.html#6189e51df43105b4225cb6324f34d87f">start_x</a> + sr_x) * unit_scale +
<a name="l00874"></a>00874 trans_x);
<a name="l00875"></a>00875 y1 = (int)round((-image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#db9f3d343e14f84e23181b17c0bf3a73">offsetB</a> - net-&gt;<a class="code" href="structgerbv__net.html#8a34ce21baab8da09fdf6301f211ff6f">start_y</a> - sr_y) * unit_scale +
<a name="l00876"></a>00876 trans_y);
<a name="l00877"></a>00877 x2 = (int)round((image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#3f145d47793e723d09e5a75758b25295">offsetA</a> + net-&gt;<a class="code" href="structgerbv__net.html#5e221f216fd25e09358da99191821d25">stop_x</a> + sr_x) * unit_scale +
<a name="l00878"></a>00878 trans_x);
<a name="l00879"></a>00879 y2 = (int)round((-image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#db9f3d343e14f84e23181b17c0bf3a73">offsetB</a> - net-&gt;<a class="code" href="structgerbv__net.html#322975adbc33c1a642fb5e8cfadd2eb7">stop_y</a> - sr_y) * unit_scale +
<a name="l00880"></a>00880 trans_y);
<a name="l00881"></a>00881
<a name="l00882"></a>00882 <span class="comment">/* </span>
<a name="l00883"></a>00883 <span class="comment"> * If circle segment, scale and translate that one too</span>
<a name="l00884"></a>00884 <span class="comment"> */</span>
<a name="l00885"></a>00885 <span class="keywordflow">if</span> (net-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>) {
<a name="l00886"></a>00886 cir_width = (int)round(net-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;width * unit_scale);
<a name="l00887"></a>00887 cir_height = (int)round(net-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;height * unit_scale);
<a name="l00888"></a>00888 cp_x = (int)round((image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#3f145d47793e723d09e5a75758b25295">offsetA</a> + net-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;cp_x) *
<a name="l00889"></a>00889 unit_scale + trans_x);
<a name="l00890"></a>00890 cp_y = (int)round((image-&gt;<a class="code" href="structgerbv__image__t.html#ee14513fd6f516dc355948f49a10375c">info</a>-&gt;<a class="code" href="structgerbv__image__info.html#db9f3d343e14f84e23181b17c0bf3a73">offsetB</a> - net-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;cp_y) *
<a name="l00891"></a>00891 unit_scale + trans_y);
<a name="l00892"></a>00892 }
<a name="l00893"></a>00893
<a name="l00894"></a>00894 <span class="comment">/*</span>
<a name="l00895"></a>00895 <span class="comment"> * Set GdkFunction depending on if this (gerber) layer is inverted</span>
<a name="l00896"></a>00896 <span class="comment"> * and allow for the photoplot being negative.</span>
<a name="l00897"></a>00897 <span class="comment"> */</span>
<a name="l00898"></a>00898 gdk_gc_set_function(gc, GDK_COPY);
<a name="l00899"></a>00899 <span class="keywordflow">if</span> ((net-&gt;<a class="code" href="structgerbv__net.html#13bb1433bc8ba893ab8d18dc83b3ec0c">layer</a>-&gt;<a class="code" href="structgerbv__layer__t.html#5a34fe35525dd75b47c4c5908daedc9c">polarity</a> == <a class="code" href="gerbv_8h.html#42e426131be82b5e215429994035f4651d2d9836da807afaa7c732d93749a478">GERBV_POLARITY_CLEAR</a>) != (polarity == <a class="code" href="gerbv_8h.html#42e426131be82b5e215429994035f4653f7beb089cc8fa9de323dca063c3e3f3">GERBV_POLARITY_NEGATIVE</a>))
<a name="l00900"></a>00900 gdk_gc_set_foreground(gc, &amp;opaque);
<a name="l00901"></a>00901 <span class="keywordflow">else</span>
<a name="l00902"></a>00902 gdk_gc_set_foreground(gc, &amp;transparent);
<a name="l00903"></a>00903
<a name="l00904"></a>00904 <span class="comment">/*</span>
<a name="l00905"></a>00905 <span class="comment"> * Polygon Area Fill routines</span>
<a name="l00906"></a>00906 <span class="comment"> */</span>
<a name="l00907"></a>00907 <span class="keywordflow">switch</span> (net-&gt;<a class="code" href="structgerbv__net.html#ad3bee195bd0592bf1521e94a5451d42">interpolation</a>) {
<a name="l00908"></a>00908 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5e418a4b1cc85b83c63417078058325eef">GERBV_INTERPOLATION_PAREA_START</a> :
<a name="l00909"></a>00909 draw_gdk_render_polygon_object (net,image,sr_x,sr_y,unit_scale,trans_x,trans_y,gc,pgc,pixmap);
<a name="l00910"></a>00910 <span class="keywordflow">continue</span>;
<a name="l00911"></a>00911 <span class="comment">/* make sure we completely skip over any deleted nodes */</span>
<a name="l00912"></a>00912 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5e7a2e8951f757b4eb9e621e6c6876bfda">GERBV_INTERPOLATION_DELETED</a>:
<a name="l00913"></a>00913 <span class="keywordflow">continue</span>;
<a name="l00914"></a>00914 <span class="keywordflow">default</span> :
<a name="l00915"></a>00915 <span class="keywordflow">break</span>;
<a name="l00916"></a>00916 }
<a name="l00917"></a>00917
<a name="l00918"></a>00918 <span class="comment">/*</span>
<a name="l00919"></a>00919 <span class="comment"> * If aperture state is off we allow use of undefined apertures.</span>
<a name="l00920"></a>00920 <span class="comment"> * This happens when gerber files starts, but hasn't decided on </span>
<a name="l00921"></a>00921 <span class="comment"> * which aperture to use.</span>
<a name="l00922"></a>00922 <span class="comment"> */</span>
<a name="l00923"></a>00923 <span class="keywordflow">if</span> (image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>] == NULL) {
<a name="l00924"></a>00924 <span class="comment">/* Commenting this out since it gets emitted every time you click on the screen </span>
<a name="l00925"></a>00925 <span class="comment"> if (net-&gt;aperture_state != GERBV_APERTURE_STATE_OFF)</span>
<a name="l00926"></a>00926 <span class="comment"> GERB_MESSAGE("Aperture D%d is not defined\n", net-&gt;aperture);</span>
<a name="l00927"></a>00927 <span class="comment"> */</span>
<a name="l00928"></a>00928 <span class="keywordflow">continue</span>;
<a name="l00929"></a>00929 }
<a name="l00930"></a>00930
<a name="l00931"></a>00931 <span class="keywordflow">switch</span> (net-&gt;<a class="code" href="structgerbv__net.html#5cabb2f3b512a328ff8dc7e6ef0c803b">aperture_state</a>) {
<a name="l00932"></a>00932 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#1bde819e0800e9b6efd3718c28b6c8f5522a02cbf231eae94b370a73e021bdc1">GERBV_APERTURE_STATE_ON</a> :
<a name="l00933"></a>00933 p1 = (int)round(image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>]-&gt;parameter[0] * unit_scale);
<a name="l00934"></a>00934 <span class="keywordflow">if</span> (image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>]-&gt;type == <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e1237aeafcbf11dd893e46930f813e353c27a">GERBV_APTYPE_RECTANGLE</a>)
<a name="l00935"></a>00935 gdk_gc_set_line_attributes(gc, p1,
<a name="l00936"></a>00936 GDK_LINE_SOLID,
<a name="l00937"></a>00937 GDK_CAP_PROJECTING,
<a name="l00938"></a>00938 GDK_JOIN_MITER);
<a name="l00939"></a>00939 <span class="keywordflow">else</span>
<a name="l00940"></a>00940 gdk_gc_set_line_attributes(gc, p1,
<a name="l00941"></a>00941 GDK_LINE_SOLID,
<a name="l00942"></a>00942 GDK_CAP_ROUND,
<a name="l00943"></a>00943 GDK_JOIN_MITER);
<a name="l00944"></a>00944
<a name="l00945"></a>00945 <span class="keywordflow">switch</span> (net-&gt;<a class="code" href="structgerbv__net.html#ad3bee195bd0592bf1521e94a5451d42">interpolation</a>) {
<a name="l00946"></a>00946 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5eafb605f54313fd8299abb57f749a5f72">GERBV_INTERPOLATION_x10</a> :
<a name="l00947"></a>00947 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5e162b6f84fe9933e3d8f8d9d712222584">GERBV_INTERPOLATION_LINEARx01</a> :
<a name="l00948"></a>00948 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5e713750d93715d25cc1306fb07cfc3090">GERBV_INTERPOLATION_LINEARx001</a> :
<a name="l00949"></a>00949 GERB_MESSAGE(<span class="stringliteral">"Linear != x1\n"</span>);
<a name="l00950"></a>00950 gdk_gc_set_line_attributes(gc, p1,
<a name="l00951"></a>00951 GDK_LINE_ON_OFF_DASH,
<a name="l00952"></a>00952 GDK_CAP_ROUND,
<a name="l00953"></a>00953 GDK_JOIN_MITER);
<a name="l00954"></a>00954 gdk_draw_line(*pixmap, gc, x1, y1, x2, y2);
<a name="l00955"></a>00955 gdk_gc_set_line_attributes(gc, p1,
<a name="l00956"></a>00956 GDK_LINE_SOLID,
<a name="l00957"></a>00957 GDK_CAP_ROUND,
<a name="l00958"></a>00958 GDK_JOIN_MITER);
<a name="l00959"></a>00959 <span class="keywordflow">break</span>;
<a name="l00960"></a>00960 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5efc1b3a7c8e48bfbf95dc57b3e3042d2d">GERBV_INTERPOLATION_LINEARx1</a> :
<a name="l00961"></a>00961 <span class="keywordflow">if</span> (image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>]-&gt;type != <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e1237aeafcbf11dd893e46930f813e353c27a">GERBV_APTYPE_RECTANGLE</a>)
<a name="l00962"></a>00962 gdk_draw_line(*pixmap, gc, x1, y1, x2, y2);
<a name="l00963"></a>00963 <span class="keywordflow">else</span> {
<a name="l00964"></a>00964 gint dx, dy;
<a name="l00965"></a>00965 GdkPoint poly[6];
<a name="l00966"></a>00966
<a name="l00967"></a>00967 dx = (int)round(image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>]-&gt;parameter[0]
<a name="l00968"></a>00968 * unit_scale / 2);
<a name="l00969"></a>00969 dy = (int)round(image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>]-&gt;parameter[1]
<a name="l00970"></a>00970 * unit_scale / 2);
<a name="l00971"></a>00971 <span class="keywordflow">if</span>(x1 &gt; x2) dx = -dx;
<a name="l00972"></a>00972 <span class="keywordflow">if</span>(y1 &gt; y2) dy = -dy;
<a name="l00973"></a>00973 poly[0].x = x1 - dx; poly[0].y = y1 - dy;
<a name="l00974"></a>00974 poly[1].x = x1 - dx; poly[1].y = y1 + dy;
<a name="l00975"></a>00975 poly[2].x = x2 - dx; poly[2].y = y2 + dy;
<a name="l00976"></a>00976 poly[3].x = x2 + dx; poly[3].y = y2 + dy;
<a name="l00977"></a>00977 poly[4].x = x2 + dx; poly[4].y = y2 - dy;
<a name="l00978"></a>00978 poly[5].x = x1 + dx; poly[5].y = y1 - dy;
<a name="l00979"></a>00979 gdk_draw_polygon(*pixmap, gc, 1, poly, 6);
<a name="l00980"></a>00980 }
<a name="l00981"></a>00981 <span class="keywordflow">break</span>;
<a name="l00982"></a>00982 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5e922b94e7291b681b05cded85daa1eb98">GERBV_INTERPOLATION_CW_CIRCULAR</a> :
<a name="l00983"></a>00983 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#f06070b85e638637eae8960cdaa2cf5ef738d54521d612942753090b943a7426">GERBV_INTERPOLATION_CCW_CIRCULAR</a> :
<a name="l00984"></a>00984 gerbv_gdk_draw_arc(*pixmap, gc, cp_x, cp_y, cir_width, cir_height,
<a name="l00985"></a>00985 net-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;angle1, net-&gt;<a class="code" href="structgerbv__net.html#d3b4aebb1c8b89627580795063c7cf75">cirseg</a>-&gt;angle2);
<a name="l00986"></a>00986 <span class="keywordflow">break</span>;
<a name="l00987"></a>00987 <span class="keywordflow">default</span> :
<a name="l00988"></a>00988 <span class="keywordflow">break</span>;
<a name="l00989"></a>00989 }
<a name="l00990"></a>00990 <span class="keywordflow">break</span>;
<a name="l00991"></a>00991 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#1bde819e0800e9b6efd3718c28b6c8f521b7ab32e7803243140cc7abc199eed1">GERBV_APERTURE_STATE_OFF</a> :
<a name="l00992"></a>00992 <span class="keywordflow">break</span>;
<a name="l00993"></a>00993 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#1bde819e0800e9b6efd3718c28b6c8f5e29aaa9ec01ade417353bc82c42fafcc">GERBV_APERTURE_STATE_FLASH</a> :
<a name="l00994"></a>00994 p1 = (int)round(image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>]-&gt;parameter[0] * unit_scale);
<a name="l00995"></a>00995 p2 = (int)round(image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>]-&gt;parameter[1] * unit_scale);
<a name="l00996"></a>00996 p3 = (int)round(image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>]-&gt;parameter[2] * unit_scale);
<a name="l00997"></a>00997
<a name="l00998"></a>00998 <span class="keywordflow">switch</span> (image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>]-&gt;type) {
<a name="l00999"></a>00999 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e1237562331d94d824b3711bd0c8b7296e366">GERBV_APTYPE_CIRCLE</a> :
<a name="l01000"></a>01000 gerbv_gdk_draw_circle(*pixmap, gc, TRUE, x2, y2, p1);
<a name="l01001"></a>01001 <span class="comment">/*</span>
<a name="l01002"></a>01002 <span class="comment"> * If circle has an inner diameter we must remove</span>
<a name="l01003"></a>01003 <span class="comment"> * that part of the circle to make a hole in it.</span>
<a name="l01004"></a>01004 <span class="comment"> * We should actually support square holes too,</span>
<a name="l01005"></a>01005 <span class="comment"> * but due to laziness I don't.</span>
<a name="l01006"></a>01006 <span class="comment"> */</span>
<a name="l01007"></a>01007 <span class="keywordflow">if</span> (p2) {
<a name="l01008"></a>01008 <span class="comment">//if (p3) GERB_COMPILE_WARNING("Should be a square hole in this aperture.\n");</span>
<a name="l01009"></a>01009 gdk_gc_get_values(gc, &amp;gc_values);
<a name="l01010"></a>01010 <span class="keywordflow">if</span> (gc_values.foreground.pixel == opaque.pixel) {
<a name="l01011"></a>01011 gdk_gc_set_foreground(gc, &amp;transparent);
<a name="l01012"></a>01012 gerbv_gdk_draw_circle(*pixmap, gc, TRUE, x2, y2, p2);
<a name="l01013"></a>01013 gdk_gc_set_foreground(gc, &amp;opaque);
<a name="l01014"></a>01014 } <span class="keywordflow">else</span> {
<a name="l01015"></a>01015 gdk_gc_set_foreground(gc, &amp;opaque);
<a name="l01016"></a>01016 gerbv_gdk_draw_circle(*pixmap, gc, TRUE, x2, y2, p2);
<a name="l01017"></a>01017 gdk_gc_set_foreground(gc, &amp;transparent);
<a name="l01018"></a>01018 }
<a name="l01019"></a>01019 }
<a name="l01020"></a>01020
<a name="l01021"></a>01021 <span class="keywordflow">break</span>;
<a name="l01022"></a>01022 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e1237aeafcbf11dd893e46930f813e353c27a">GERBV_APTYPE_RECTANGLE</a>:
<a name="l01023"></a>01023 gerbv_gdk_draw_rectangle(*pixmap, gc, TRUE, x2, y2, p1, p2);
<a name="l01024"></a>01024 <span class="keywordflow">break</span>;
<a name="l01025"></a>01025 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e12374498025ab88968326d79bab43020469f">GERBV_APTYPE_OVAL</a> :
<a name="l01026"></a>01026 gerbv_gdk_draw_oval(*pixmap, gc, TRUE, x2, y2, p1, p2);
<a name="l01027"></a>01027 <span class="keywordflow">break</span>;
<a name="l01028"></a>01028 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e12379f80359e7ff5ff5fdf024434ec98fc7d">GERBV_APTYPE_POLYGON</a> :
<a name="l01029"></a>01029 <span class="comment">//GERB_COMPILE_WARNING("Very bad at drawing polygons.\n");</span>
<a name="l01030"></a>01030 gerbv_gdk_draw_circle(*pixmap, gc, TRUE, x2, y2, p1);
<a name="l01031"></a>01031 <span class="keywordflow">break</span>;
<a name="l01032"></a>01032 <span class="keywordflow">case</span> <a class="code" href="gerbv_8h.html#c99303749c4afdc6a24eafbfa37e1237555091fa58982b0afde79e6eb51215a7">GERBV_APTYPE_MACRO</a> :
<a name="l01033"></a>01033 gerbv_gdk_draw_amacro(*pixmap, gc,
<a name="l01034"></a>01034 image-&gt;<a class="code" href="structgerbv__image__t.html#b40defce85ca280ecf3804fad90fc308">aperture</a>[net-&gt;<a class="code" href="structgerbv__net.html#f4db0779d7e69e16f525fef3044897fd">aperture</a>]-&gt;simplified,
<a name="l01035"></a>01035 unit_scale, x2, y2);
<a name="l01036"></a>01036 <span class="keywordflow">break</span>;
<a name="l01037"></a>01037 <span class="keywordflow">default</span> :
<a name="l01038"></a>01038 GERB_MESSAGE(<span class="stringliteral">"Unknown aperture type\n"</span>);
<a name="l01039"></a>01039 <span class="keywordflow">return</span> 0;
<a name="l01040"></a>01040 }
<a name="l01041"></a>01041 <span class="keywordflow">break</span>;
<a name="l01042"></a>01042 <span class="keywordflow">default</span> :
<a name="l01043"></a>01043 GERB_MESSAGE(<span class="stringliteral">"Unknown aperture state\n"</span>);
<a name="l01044"></a>01044 <span class="keywordflow">return</span> 0;
<a name="l01045"></a>01045 }
<a name="l01046"></a>01046 }
<a name="l01047"></a>01047 }
<a name="l01048"></a>01048 }
<a name="l01049"></a>01049 <span class="comment">/*</span>
<a name="l01050"></a>01050 <span class="comment"> * Destroy GCs before exiting</span>
<a name="l01051"></a>01051 <span class="comment"> */</span>
<a name="l01052"></a>01052 gdk_gc_unref(gc);
<a name="l01053"></a>01053 gdk_gc_unref(pgc);
<a name="l01054"></a>01054
<a name="l01055"></a>01055 <span class="keywordflow">return</span> 1;
<a name="l01056"></a>01056
<a name="l01057"></a>01057 } <span class="comment">/* image2pixmap */</span>
<a name="l01058"></a>01058
<a name="l01059"></a>01059
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Aug 19 00:14:48 2008 for gerbv by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>