1 /*------------------------------------------------------------\
2 | |
3 | This file is part of the Alliance CAD System Copyright |
4 | (C) Laboratoire LIP6 - D�partement ASIM Universite P&M Curie|
5 | |
6 | Home page : http://www-asim.lip6.fr/alliance/ |
7 | E-mail : mailto:alliance-users@asim.lip6.fr |
8 | |
9 | This progam is free software; you can redistribute it |
10 | and/or modify it under the terms of the GNU General Public |
11 | License as published by the Free Software Foundation; |
12 | either version 2 of the License, or (at your option) any |
13 | later version. |
14 | |
15 | Alliance VLSI CAD System is distributed in the hope that |
16 | it will be useful, but WITHOUT ANY WARRANTY; |
17 | without even the implied warranty of MERCHANTABILITY or |
18 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
19 | Public License for more details. |
20 | |
21 | You should have received a copy of the GNU General Public |
22 | License along with the GNU C Library; see the file COPYING. |
23 | If not, write to the Free Software Foundation, Inc., |
24 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
25 | |
26 \------------------------------------------------------------*/
27
28 /*------------------------------------------------------------\
29 | |
30 | Tool : GRAAL |
31 | |
32 | File : Grid.c |
33 | |
34 | Author : Jacomme Ludovic |
35 | |
36 | Date : 28.03.95 |
37 | |
38 \------------------------------------------------------------*/
39
40 /*------------------------------------------------------------\
41 | |
42 | Include Files |
43 | |
44 \------------------------------------------------------------*/
45
46 # include <stdio.h>
47 # include <Xm/Xm.h>
48
49 # include "mut.h"
50 # include "mph.h"
51 # include "rds.h"
52 # include "rpr.h"
53 # include "GSB.h"
54 # include "GRM.h"
55 # include "GMX.h"
56
57 # include "GMX_grid.h"
58
59 /*------------------------------------------------------------\
60 | |
61 | Constants |
62 | |
63 \------------------------------------------------------------*/
64 /*------------------------------------------------------------\
65 | |
66 | Types |
67 | |
68 \------------------------------------------------------------*/
69 /*------------------------------------------------------------\
70 | |
71 | Variables |
72 | |
73 \------------------------------------------------------------*/
74 /*------------------------------------------------------------\
75 | |
76 | Lambda Grid |
77 | |
78 \------------------------------------------------------------*/
79
80 float GraalLambdaGridStep;
81
82 long GraalLambdaGridX;
83 long GraalLambdaGridY;
84 long GraalLambdaGridDx;
85 long GraalLambdaGridDy;
86
87 long GraalPixelGridX;
88 long GraalPixelGridY;
89
90 /*------------------------------------------------------------\
91 | |
92 | User Lambda Grid |
93 | |
94 \------------------------------------------------------------*/
95
96 long GraalLambdaUserGridDx;
97 long GraalLambdaUserGridDy;
98 char GraalLambdaUserGrid;
99
100 /*------------------------------------------------------------\
101 | |
102 | Functions |
103 | |
104 \------------------------------------------------------------*/
105 /*------------------------------------------------------------\
106 | |
107 | GraalInitializeLambdaGrid |
108 | |
109 \------------------------------------------------------------*/
110
GraalInitializeLambdaGrid()111 void GraalInitializeLambdaGrid()
112
113 {
114 rdsbegin();
115
116 GraalLambdaGridX = GRAAL_DEFAULT_GRID_X;
117 GraalLambdaGridY = GRAAL_DEFAULT_GRID_Y;
118 GraalLambdaGridDx = GRAAL_DEFAULT_GRID_DX;
119 GraalLambdaGridDy = GRAAL_DEFAULT_GRID_DY;
120 GraalLambdaUserGridDx = 4;
121 GraalLambdaUserGridDy = 4;
122 GraalLambdaUserGrid = GRAAL_FALSE;
123
124 GraalComputeLambdaGrid();
125
126 rdsend();
127 }
128
129 /*------------------------------------------------------------\
130 | |
131 | GraalComputeLambdaGrid |
132 | |
133 \------------------------------------------------------------*/
134
GraalComputeLambdaGrid()135 void GraalComputeLambdaGrid()
136
137 {
138 float StepX;
139 float StepY;
140
141 rdsbegin();
142
143 StepX = (float)(GraalGraphicDx) / (float)(GraalLambdaGridDx);
144 StepY = (float)(GraalGraphicDy) / (float)(GraalLambdaGridDy);
145
146 if ( StepX < StepY )
147 {
148 GraalLambdaGridStep = StepX;
149 GraalLambdaGridDy = 1 + ( GraalGraphicDy / StepX );
150 }
151 else
152 {
153 GraalLambdaGridStep = StepY;
154 GraalLambdaGridDx = 1 + ( GraalGraphicDx / StepY );
155 }
156
157 GraalPixelGridX = (float)(GraalLambdaGridX) * GraalLambdaGridStep;
158 GraalPixelGridY = (float)(GraalLambdaGridY) * GraalLambdaGridStep;
159
160 rdsend();
161 }
162
163 /*------------------------------------------------------------\
164 | |
165 | GraalResizeLambdaGrid |
166 | |
167 \------------------------------------------------------------*/
168
GraalResizeLambdaGrid()169 void GraalResizeLambdaGrid()
170
171 {
172 rdsbegin();
173
174 GraalLambdaGridDx = 1 + ( GraalGraphicDx / GraalLambdaGridStep );
175 GraalLambdaGridDy = 1 + ( GraalGraphicDy / GraalLambdaGridStep );
176
177 rdsend();
178 }
179
180 /*------------------------------------------------------------\
181 | |
182 | GraalDisplayLambdaGrid |
183 | |
184 \------------------------------------------------------------*/
185
GraalDisplayLambdaGrid(GraphicX1,GraphicY1,GraphicX2,GraphicY2)186 char GraalDisplayLambdaGrid( GraphicX1, GraphicY1, GraphicX2, GraphicY2 )
187
188 Dimension GraphicX1;
189 Dimension GraphicY1;
190 Dimension GraphicX2;
191 Dimension GraphicY2;
192 {
193 long X;
194 long Y;
195 long MaxGridX;
196 long MaxGridY;
197 long PixelX;
198 long PixelY;
199 long Xmin;
200 long Ymin;
201 char UserGrid;
202 char LambdaGrid;
203 float Check;
204
205 rdsbegin();
206
207 if ( GraalLambdaGridStep < GRAAL_LOWER_GRID_STEP )
208 {
209 LambdaGrid = 0;
210 }
211 else
212 {
213 LambdaGrid = 1;
214 }
215
216 if ( GraalLambdaUserGrid == 1 )
217 {
218 if ( GraalLambdaUserGridDx > GraalLambdaUserGridDy )
219 {
220 Check = ( GRAAL_LOWER_GRID_STEP / GraalLambdaUserGridDx );
221 }
222 else
223 {
224 Check = ( GRAAL_LOWER_GRID_STEP / GraalLambdaUserGridDy );
225 }
226
227 if ( GraalLambdaGridStep < Check ) UserGrid = 0;
228 else UserGrid = 1;
229 }
230 else
231 {
232 UserGrid = 0;
233 }
234
235 if ( ( UserGrid == 0 ) &&
236 ( LambdaGrid == 0 ) )
237 {
238 rdsend();
239 return( GRAAL_FALSE );
240 }
241
242 MaxGridX = GraalLambdaGridX + GraalLambdaGridDx;
243 MaxGridY = GraalLambdaGridY + GraalLambdaGridDy;
244
245 if ( LambdaGrid )
246 {
247 for ( X = GraalLambdaGridX; X < MaxGridX; X = X + 1 )
248 {
249 PixelX = ((float)(X) * GraalLambdaGridStep);
250 PixelX = PixelX - GraalPixelGridX;
251
252 if ( ( PixelX <= GraphicX2 ) &&
253 ( PixelX >= GraphicX1 ) )
254
255 for ( Y = GraalLambdaGridY; Y < MaxGridY; Y = Y + 1 )
256 {
257 PixelY = ((float)(Y) * GraalLambdaGridStep);
258 PixelY = PixelY - GraalPixelGridY;
259 PixelY = GraalGraphicDy - PixelY;
260
261 if ( ( PixelY <= GraphicY2 ) &&
262 ( PixelY >= GraphicY1 ) )
263 {
264 XDrawPoint( GraalGraphicDisplay,
265 XtWindow( GraalGraphicWindow ),
266 GraalGridGC,
267 PixelX, PixelY );
268 }
269 }
270 }
271 }
272
273 if ( UserGrid )
274 {
275 Xmin = ( GraalLambdaGridX / GraalLambdaUserGridDx ) * GraalLambdaUserGridDx;
276 Ymin = ( GraalLambdaGridY / GraalLambdaUserGridDy ) * GraalLambdaUserGridDy;
277
278 for ( X = Xmin; X < MaxGridX ; X = X + GraalLambdaUserGridDx )
279 {
280 PixelX = ((float)(X) * GraalLambdaGridStep);
281 PixelX = PixelX - GraalPixelGridX;
282
283 if ( ( PixelX <= GraphicX2 ) &&
284 ( PixelX >= GraphicX1 ) )
285
286 for ( Y = Ymin; Y < MaxGridY; Y = Y + GraalLambdaUserGridDy )
287 {
288 PixelY = ((float)(Y) * GraalLambdaGridStep);
289 PixelY = PixelY - GraalPixelGridY;
290 PixelY = GraalGraphicDy - PixelY;
291
292 if ( ( PixelY <= GraphicY2 ) &&
293 ( PixelY >= GraphicY1 ) )
294 {
295 XDrawLine( GraalGraphicDisplay,
296 XtWindow( GraalGraphicWindow ),
297 GraalGridGC,
298 PixelX - 2, PixelY,
299 PixelX + 2, PixelY );
300
301 XDrawLine( GraalGraphicDisplay,
302 XtWindow( GraalGraphicWindow ),
303 GraalGridGC,
304 PixelX, PixelY + 2,
305 PixelX, PixelY - 2 );
306 }
307 }
308 }
309 }
310
311 rdsend();
312 return( GRAAL_TRUE );
313 }
314