/alliance-5.0/graal/src/GMX_grid.c

https://github.com/clothbot/Alliance-VLSI-CAD-System · C · 313 lines · 171 code · 50 blank · 92 comment · 21 complexity · 8186fda593b122ee67cb8af2a01e4008 MD5 · raw file

  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. | 675 Mass Ave, Cambridge, MA 02139, USA. |
  25. | |
  26. \------------------------------------------------------------*/
  27. /*------------------------------------------------------------\
  28. | |
  29. | Tool : GRAAL |
  30. | |
  31. | File : Grid.c |
  32. | |
  33. | Author : Jacomme Ludovic |
  34. | |
  35. | Date : 28.03.95 |
  36. | |
  37. \------------------------------------------------------------*/
  38. /*------------------------------------------------------------\
  39. | |
  40. | Include Files |
  41. | |
  42. \------------------------------------------------------------*/
  43. # include <stdio.h>
  44. # include <Xm/Xm.h>
  45. # include "mut.h"
  46. # include "mph.h"
  47. # include "rds.h"
  48. # include "rpr.h"
  49. # include "GSB.h"
  50. # include "GRM.h"
  51. # include "GMX.h"
  52. # include "GMX_grid.h"
  53. /*------------------------------------------------------------\
  54. | |
  55. | Constants |
  56. | |
  57. \------------------------------------------------------------*/
  58. /*------------------------------------------------------------\
  59. | |
  60. | Types |
  61. | |
  62. \------------------------------------------------------------*/
  63. /*------------------------------------------------------------\
  64. | |
  65. | Variables |
  66. | |
  67. \------------------------------------------------------------*/
  68. /*------------------------------------------------------------\
  69. | |
  70. | Lambda Grid |
  71. | |
  72. \------------------------------------------------------------*/
  73. float GraalLambdaGridStep;
  74. long GraalLambdaGridX;
  75. long GraalLambdaGridY;
  76. long GraalLambdaGridDx;
  77. long GraalLambdaGridDy;
  78. long GraalPixelGridX;
  79. long GraalPixelGridY;
  80. /*------------------------------------------------------------\
  81. | |
  82. | User Lambda Grid |
  83. | |
  84. \------------------------------------------------------------*/
  85. long GraalLambdaUserGridDx;
  86. long GraalLambdaUserGridDy;
  87. char GraalLambdaUserGrid;
  88. /*------------------------------------------------------------\
  89. | |
  90. | Functions |
  91. | |
  92. \------------------------------------------------------------*/
  93. /*------------------------------------------------------------\
  94. | |
  95. | GraalInitializeLambdaGrid |
  96. | |
  97. \------------------------------------------------------------*/
  98. void GraalInitializeLambdaGrid()
  99. {
  100. rdsbegin();
  101. GraalLambdaGridX = GRAAL_DEFAULT_GRID_X;
  102. GraalLambdaGridY = GRAAL_DEFAULT_GRID_Y;
  103. GraalLambdaGridDx = GRAAL_DEFAULT_GRID_DX;
  104. GraalLambdaGridDy = GRAAL_DEFAULT_GRID_DY;
  105. GraalLambdaUserGridDx = 4;
  106. GraalLambdaUserGridDy = 4;
  107. GraalLambdaUserGrid = GRAAL_FALSE;
  108. GraalComputeLambdaGrid();
  109. rdsend();
  110. }
  111. /*------------------------------------------------------------\
  112. | |
  113. | GraalComputeLambdaGrid |
  114. | |
  115. \------------------------------------------------------------*/
  116. void GraalComputeLambdaGrid()
  117. {
  118. float StepX;
  119. float StepY;
  120. rdsbegin();
  121. StepX = (float)(GraalGraphicDx) / (float)(GraalLambdaGridDx);
  122. StepY = (float)(GraalGraphicDy) / (float)(GraalLambdaGridDy);
  123. if ( StepX < StepY )
  124. {
  125. GraalLambdaGridStep = StepX;
  126. GraalLambdaGridDy = 1 + ( GraalGraphicDy / StepX );
  127. }
  128. else
  129. {
  130. GraalLambdaGridStep = StepY;
  131. GraalLambdaGridDx = 1 + ( GraalGraphicDx / StepY );
  132. }
  133. GraalPixelGridX = (float)(GraalLambdaGridX) * GraalLambdaGridStep;
  134. GraalPixelGridY = (float)(GraalLambdaGridY) * GraalLambdaGridStep;
  135. rdsend();
  136. }
  137. /*------------------------------------------------------------\
  138. | |
  139. | GraalResizeLambdaGrid |
  140. | |
  141. \------------------------------------------------------------*/
  142. void GraalResizeLambdaGrid()
  143. {
  144. rdsbegin();
  145. GraalLambdaGridDx = 1 + ( GraalGraphicDx / GraalLambdaGridStep );
  146. GraalLambdaGridDy = 1 + ( GraalGraphicDy / GraalLambdaGridStep );
  147. rdsend();
  148. }
  149. /*------------------------------------------------------------\
  150. | |
  151. | GraalDisplayLambdaGrid |
  152. | |
  153. \------------------------------------------------------------*/
  154. char GraalDisplayLambdaGrid( GraphicX1, GraphicY1, GraphicX2, GraphicY2 )
  155. Dimension GraphicX1;
  156. Dimension GraphicY1;
  157. Dimension GraphicX2;
  158. Dimension GraphicY2;
  159. {
  160. long X;
  161. long Y;
  162. long MaxGridX;
  163. long MaxGridY;
  164. long PixelX;
  165. long PixelY;
  166. long Xmin;
  167. long Ymin;
  168. char UserGrid;
  169. char LambdaGrid;
  170. float Check;
  171. rdsbegin();
  172. if ( GraalLambdaGridStep < GRAAL_LOWER_GRID_STEP )
  173. {
  174. LambdaGrid = 0;
  175. }
  176. else
  177. {
  178. LambdaGrid = 1;
  179. }
  180. if ( GraalLambdaUserGrid == 1 )
  181. {
  182. if ( GraalLambdaUserGridDx > GraalLambdaUserGridDy )
  183. {
  184. Check = ( GRAAL_LOWER_GRID_STEP / GraalLambdaUserGridDx );
  185. }
  186. else
  187. {
  188. Check = ( GRAAL_LOWER_GRID_STEP / GraalLambdaUserGridDy );
  189. }
  190. if ( GraalLambdaGridStep < Check ) UserGrid = 0;
  191. else UserGrid = 1;
  192. }
  193. else
  194. {
  195. UserGrid = 0;
  196. }
  197. if ( ( UserGrid == 0 ) &&
  198. ( LambdaGrid == 0 ) )
  199. {
  200. rdsend();
  201. return( GRAAL_FALSE );
  202. }
  203. MaxGridX = GraalLambdaGridX + GraalLambdaGridDx;
  204. MaxGridY = GraalLambdaGridY + GraalLambdaGridDy;
  205. if ( LambdaGrid )
  206. {
  207. for ( X = GraalLambdaGridX; X < MaxGridX; X = X + 1 )
  208. {
  209. PixelX = ((float)(X) * GraalLambdaGridStep);
  210. PixelX = PixelX - GraalPixelGridX;
  211. if ( ( PixelX <= GraphicX2 ) &&
  212. ( PixelX >= GraphicX1 ) )
  213. for ( Y = GraalLambdaGridY; Y < MaxGridY; Y = Y + 1 )
  214. {
  215. PixelY = ((float)(Y) * GraalLambdaGridStep);
  216. PixelY = PixelY - GraalPixelGridY;
  217. PixelY = GraalGraphicDy - PixelY;
  218. if ( ( PixelY <= GraphicY2 ) &&
  219. ( PixelY >= GraphicY1 ) )
  220. {
  221. XDrawPoint( GraalGraphicDisplay,
  222. XtWindow( GraalGraphicWindow ),
  223. GraalGridGC,
  224. PixelX, PixelY );
  225. }
  226. }
  227. }
  228. }
  229. if ( UserGrid )
  230. {
  231. Xmin = ( GraalLambdaGridX / GraalLambdaUserGridDx ) * GraalLambdaUserGridDx;
  232. Ymin = ( GraalLambdaGridY / GraalLambdaUserGridDy ) * GraalLambdaUserGridDy;
  233. for ( X = Xmin; X < MaxGridX ; X = X + GraalLambdaUserGridDx )
  234. {
  235. PixelX = ((float)(X) * GraalLambdaGridStep);
  236. PixelX = PixelX - GraalPixelGridX;
  237. if ( ( PixelX <= GraphicX2 ) &&
  238. ( PixelX >= GraphicX1 ) )
  239. for ( Y = Ymin; Y < MaxGridY; Y = Y + GraalLambdaUserGridDy )
  240. {
  241. PixelY = ((float)(Y) * GraalLambdaGridStep);
  242. PixelY = PixelY - GraalPixelGridY;
  243. PixelY = GraalGraphicDy - PixelY;
  244. if ( ( PixelY <= GraphicY2 ) &&
  245. ( PixelY >= GraphicY1 ) )
  246. {
  247. XDrawLine( GraalGraphicDisplay,
  248. XtWindow( GraalGraphicWindow ),
  249. GraalGridGC,
  250. PixelX - 2, PixelY,
  251. PixelX + 2, PixelY );
  252. XDrawLine( GraalGraphicDisplay,
  253. XtWindow( GraalGraphicWindow ),
  254. GraalGridGC,
  255. PixelX, PixelY + 2,
  256. PixelX, PixelY - 2 );
  257. }
  258. }
  259. }
  260. }
  261. rdsend();
  262. return( GRAAL_TRUE );
  263. }