/alliance-5.0/xpat/src/XMX_grid.c

https://github.com/clothbot/Alliance-VLSI-CAD-System · C · 312 lines · 170 code · 50 blank · 92 comment · 21 complexity · acc608efd2df2937f0868c5677bf6b30 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 : XPAT |
  30. | |
  31. | File : Grid.c |
  32. | |
  33. | Authors : Jacomme Ludovic |
  34. | |
  35. | Date : 04.12.96 |
  36. | |
  37. \------------------------------------------------------------*/
  38. /*------------------------------------------------------------\
  39. | |
  40. | Include Files |
  41. | |
  42. \------------------------------------------------------------*/
  43. # include <stdio.h>
  44. # include <Xm/Xm.h>
  45. # include "mut.h"
  46. # include "aut.h"
  47. # include "pat.h"
  48. # include "XSB.h"
  49. # include "XPT.h"
  50. # include "XMX.h"
  51. # include "XMX_grid.h"
  52. /*------------------------------------------------------------\
  53. | |
  54. | Constants |
  55. | |
  56. \------------------------------------------------------------*/
  57. /*------------------------------------------------------------\
  58. | |
  59. | Types |
  60. | |
  61. \------------------------------------------------------------*/
  62. /*------------------------------------------------------------\
  63. | |
  64. | Variables |
  65. | |
  66. \------------------------------------------------------------*/
  67. /*------------------------------------------------------------\
  68. | |
  69. | Unit Grid |
  70. | |
  71. \------------------------------------------------------------*/
  72. float XpatUnitGridStep;
  73. long XpatUnitGridX;
  74. long XpatUnitGridY;
  75. long XpatUnitGridDx;
  76. long XpatUnitGridDy;
  77. long XpatPixelGridX;
  78. long XpatPixelGridY;
  79. /*------------------------------------------------------------\
  80. | |
  81. | User Unit Grid |
  82. | |
  83. \------------------------------------------------------------*/
  84. long XpatUnitUserGridDx;
  85. long XpatUnitUserGridDy;
  86. char XpatUnitUserGrid;
  87. /*------------------------------------------------------------\
  88. | |
  89. | Functions |
  90. | |
  91. \------------------------------------------------------------*/
  92. /*------------------------------------------------------------\
  93. | |
  94. | XpatInitializeUnitGrid |
  95. | |
  96. \------------------------------------------------------------*/
  97. void XpatInitializeUnitGrid()
  98. {
  99. autbegin();
  100. XpatUnitGridX = XPAT_DEFAULT_GRID_X;
  101. XpatUnitGridY = XPAT_DEFAULT_GRID_Y;
  102. XpatUnitGridDx = XPAT_DEFAULT_GRID_DX;
  103. XpatUnitGridDy = XPAT_DEFAULT_GRID_DY;
  104. XpatUnitUserGridDx = 4;
  105. XpatUnitUserGridDy = 4;
  106. XpatUnitUserGrid = XPAT_FALSE;
  107. XpatComputeUnitGrid();
  108. autend();
  109. }
  110. /*------------------------------------------------------------\
  111. | |
  112. | XpatComputeUnitGrid |
  113. | |
  114. \------------------------------------------------------------*/
  115. void XpatComputeUnitGrid()
  116. {
  117. float StepX;
  118. float StepY;
  119. autbegin();
  120. StepX = (float)(XpatGraphicDx) / (float)(XpatUnitGridDx);
  121. StepY = (float)(XpatGraphicDy) / (float)(XpatUnitGridDy);
  122. if ( StepX < StepY )
  123. {
  124. XpatUnitGridStep = StepX;
  125. XpatUnitGridDy = 1 + ( XpatGraphicDy / StepX );
  126. }
  127. else
  128. {
  129. XpatUnitGridStep = StepY;
  130. XpatUnitGridDx = 1 + ( XpatGraphicDx / StepY );
  131. }
  132. XpatPixelGridX = (float)(XpatUnitGridX) * XpatUnitGridStep;
  133. XpatPixelGridY = (float)(XpatUnitGridY) * XpatUnitGridStep;
  134. autend();
  135. }
  136. /*------------------------------------------------------------\
  137. | |
  138. | XpatResizeUnitGrid |
  139. | |
  140. \------------------------------------------------------------*/
  141. void XpatResizeUnitGrid()
  142. {
  143. autbegin();
  144. XpatUnitGridDx = 1 + ( XpatGraphicDx / XpatUnitGridStep );
  145. XpatUnitGridDy = 1 + ( XpatGraphicDy / XpatUnitGridStep );
  146. autend();
  147. }
  148. /*------------------------------------------------------------\
  149. | |
  150. | XpatDisplayUnitGrid |
  151. | |
  152. \------------------------------------------------------------*/
  153. char XpatDisplayUnitGrid( GraphicX1, GraphicY1, GraphicX2, GraphicY2 )
  154. Dimension GraphicX1;
  155. Dimension GraphicY1;
  156. Dimension GraphicX2;
  157. Dimension GraphicY2;
  158. {
  159. long X;
  160. long Y;
  161. long MaxGridX;
  162. long MaxGridY;
  163. long PixelX;
  164. long PixelY;
  165. long Xmin;
  166. long Ymin;
  167. char UserGrid;
  168. char UnitGrid;
  169. float Check;
  170. autbegin();
  171. if ( XpatUnitGridStep < XPAT_LOWER_GRID_STEP )
  172. {
  173. UnitGrid = 0;
  174. }
  175. else
  176. {
  177. UnitGrid = 1;
  178. }
  179. if ( XpatUnitUserGrid == 1 )
  180. {
  181. if ( XpatUnitUserGridDx > XpatUnitUserGridDy )
  182. {
  183. Check = ( XPAT_LOWER_GRID_STEP * 2 / XpatUnitUserGridDy );
  184. }
  185. else
  186. {
  187. Check = ( XPAT_LOWER_GRID_STEP * 2 / XpatUnitUserGridDy );
  188. }
  189. if ( XpatUnitGridStep < Check ) UserGrid = 0;
  190. else UserGrid = 1;
  191. }
  192. else
  193. {
  194. UserGrid = 0;
  195. }
  196. if ( ( UserGrid == 0 ) &&
  197. ( UnitGrid == 0 ) )
  198. {
  199. autend();
  200. return( XPAT_FALSE );
  201. }
  202. MaxGridX = XpatUnitGridX + XpatUnitGridDx;
  203. MaxGridY = XpatUnitGridY + XpatUnitGridDy;
  204. if ( UnitGrid )
  205. {
  206. for ( X = XpatUnitGridX; X < MaxGridX; X = X + 1 )
  207. {
  208. PixelX = ((float)(X) * XpatUnitGridStep);
  209. PixelX = PixelX - XpatPixelGridX;
  210. if ( ( PixelX <= GraphicX2 ) &&
  211. ( PixelX >= GraphicX1 ) )
  212. for ( Y = XpatUnitGridY; Y < MaxGridY; Y = Y + 1 )
  213. {
  214. PixelY = ((float)(Y) * XpatUnitGridStep);
  215. PixelY = PixelY - XpatPixelGridY;
  216. PixelY = XpatGraphicDy - PixelY;
  217. if ( ( PixelY <= GraphicY2 ) &&
  218. ( PixelY >= GraphicY1 ) )
  219. {
  220. XDrawPoint( XpatGraphicDisplay,
  221. XtWindow( XpatGraphicWindow ),
  222. XpatGridGC,
  223. PixelX, PixelY );
  224. }
  225. }
  226. }
  227. }
  228. if ( UserGrid )
  229. {
  230. Xmin = ( XpatUnitGridX / XpatUnitUserGridDx ) * XpatUnitUserGridDx;
  231. Ymin = ( XpatUnitGridY / XpatUnitUserGridDy ) * XpatUnitUserGridDy;
  232. for ( X = Xmin; X < MaxGridX ; X = X + XpatUnitUserGridDx )
  233. {
  234. PixelX = ((float)(X) * XpatUnitGridStep);
  235. PixelX = PixelX - XpatPixelGridX;
  236. if ( ( PixelX <= GraphicX2 ) &&
  237. ( PixelX >= GraphicX1 ) )
  238. for ( Y = Ymin; Y < MaxGridY; Y = Y + XpatUnitUserGridDy )
  239. {
  240. PixelY = ((float)(Y) * XpatUnitGridStep);
  241. PixelY = PixelY - XpatPixelGridY;
  242. PixelY = XpatGraphicDy - PixelY;
  243. if ( ( PixelY <= GraphicY2 ) &&
  244. ( PixelY >= GraphicY1 ) )
  245. {
  246. XDrawLine( XpatGraphicDisplay,
  247. XtWindow( XpatGraphicWindow ),
  248. XpatGridGC,
  249. PixelX - 2, PixelY,
  250. PixelX + 2, PixelY );
  251. XDrawLine( XpatGraphicDisplay,
  252. XtWindow( XpatGraphicWindow ),
  253. XpatGridGC,
  254. PixelX, PixelY + 2,
  255. PixelX, PixelY - 2 );
  256. }
  257. }
  258. }
  259. }
  260. autend();
  261. return( XPAT_TRUE );
  262. }