You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

604 lines
19 KiB

16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
  1. /**
  2. * @file common_plot_functions.cpp
  3. * @brief Kicad: Common plotting Routines
  4. */
  5. #include <fctsys.h>
  6. #include <gr_basic.h>
  7. #include <trigo.h>
  8. #include <wxstruct.h>
  9. #include <base_struct.h>
  10. #include <common.h>
  11. #include <plot_common.h>
  12. #include <worksheet.h>
  13. #include <macros.h>
  14. #include <class_base_screen.h>
  15. #include <drawtxt.h>
  16. #include <class_title_block.h>
  17. wxString GetDefaultPlotExtension( PlotFormat aFormat )
  18. {
  19. switch( aFormat )
  20. {
  21. case PLOT_FORMAT_DXF:
  22. return DXF_PLOTTER::GetDefaultFileExtension();
  23. case PLOT_FORMAT_POST:
  24. return PS_PLOTTER::GetDefaultFileExtension();
  25. case PLOT_FORMAT_PDF:
  26. return PDF_PLOTTER::GetDefaultFileExtension();
  27. case PLOT_FORMAT_HPGL:
  28. return HPGL_PLOTTER::GetDefaultFileExtension();
  29. case PLOT_FORMAT_GERBER:
  30. return GERBER_PLOTTER::GetDefaultFileExtension();
  31. case PLOT_FORMAT_SVG:
  32. return SVG_PLOTTER::GetDefaultFileExtension();
  33. default:
  34. wxASSERT( false );
  35. return wxEmptyString;
  36. }
  37. }
  38. /* Plot sheet references
  39. * margin is in mils (1/1000 inch)
  40. */
  41. void PlotWorkSheet( PLOTTER* plotter, const TITLE_BLOCK& aTitleBlock,
  42. const PAGE_INFO& aPageInfo,
  43. int aSheetNumber, int aNumberOfSheets,
  44. const wxString &aSheetDesc,
  45. const wxString &aFilename )
  46. {
  47. static const int WSTEXTSIZE = 50; // Text size in mils
  48. int iusPerMil = plotter->GetIUsPerDecimil() * 10;
  49. wxSize pageSize = aPageInfo.GetSizeMils(); // in mils
  50. int xg, yg;
  51. wxPoint pos, ref;
  52. wxString msg;
  53. wxSize text_size;
  54. #if defined(KICAD_GOST)
  55. wxSize text_size2;
  56. wxSize text_size3;
  57. wxSize text_size1_5;
  58. #else
  59. int UpperLimit = VARIABLE_BLOCK_START_POSITION;
  60. #endif
  61. plotter->SetColor( BLACK );
  62. plotter->SetCurrentLineWidth( PLOTTER::DEFAULT_LINE_WIDTH );
  63. // Plot edge.
  64. ref.x = aPageInfo.GetLeftMarginMils() * iusPerMil;
  65. ref.y = aPageInfo.GetTopMarginMils() * iusPerMil;
  66. xg = ( pageSize.x - aPageInfo.GetRightMarginMils() ) * iusPerMil;
  67. yg = ( pageSize.y - aPageInfo.GetBottomMarginMils() ) * iusPerMil;
  68. #if defined(KICAD_GOST)
  69. plotter->MoveTo( ref );
  70. pos.x = xg;
  71. pos.y = ref.y;
  72. plotter->LineTo( pos );
  73. pos.x = xg;
  74. pos.y = yg;
  75. plotter->LineTo( pos );
  76. pos.x = ref.x;
  77. pos.y = yg;
  78. plotter->LineTo( pos );
  79. plotter->FinishTo( ref );
  80. #else
  81. for( unsigned ii = 0; ii < 2; ii++ )
  82. {
  83. plotter->MoveTo( ref );
  84. pos.x = xg;
  85. pos.y = ref.y;
  86. plotter->LineTo( pos );
  87. pos.x = xg;
  88. pos.y = yg;
  89. plotter->LineTo( pos );
  90. pos.x = ref.x;
  91. pos.y = yg;
  92. plotter->LineTo( pos );
  93. plotter->FinishTo( ref );
  94. ref.x += GRID_REF_W * iusPerMil;
  95. ref.y += GRID_REF_W * iusPerMil;
  96. xg -= GRID_REF_W * iusPerMil;
  97. yg -= GRID_REF_W * iusPerMil;
  98. }
  99. #endif
  100. text_size.x = WSTEXTSIZE * iusPerMil;
  101. text_size.y = WSTEXTSIZE * iusPerMil;
  102. // upper left corner in mils
  103. ref.x = aPageInfo.GetLeftMarginMils();
  104. ref.y = aPageInfo.GetTopMarginMils();
  105. // lower right corner in mils
  106. xg = ( pageSize.x - aPageInfo.GetRightMarginMils() );
  107. yg = ( pageSize.y - aPageInfo.GetBottomMarginMils() );
  108. #if defined(KICAD_GOST)
  109. for( Ki_WorkSheetData* WsItem = &WS_Segm1_LU;
  110. WsItem != NULL;
  111. WsItem = WsItem->Pnext )
  112. {
  113. pos.x = ( ref.x - WsItem->m_Posx ) * iusPerMil;
  114. pos.y = ( yg - WsItem->m_Posy ) * iusPerMil;
  115. msg.Empty();
  116. switch( WsItem->m_Type )
  117. {
  118. case WS_CADRE:
  119. break;
  120. case WS_PODPIS_LU:
  121. if( WsItem->m_Legende )
  122. msg = WsItem->m_Legende;
  123. plotter->Text( pos, BLACK,
  124. msg, TEXT_ORIENT_VERT, text_size,
  125. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_BOTTOM,
  126. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  127. break;
  128. case WS_SEGMENT_LU:
  129. plotter->MoveTo( pos );
  130. pos.x = ( ref.x - WsItem->m_Endx ) * iusPerMil;
  131. pos.y = ( yg - WsItem->m_Endy ) * iusPerMil;
  132. plotter->FinishTo( pos );
  133. break;
  134. }
  135. }
  136. for( Ki_WorkSheetData* WsItem = &WS_Segm1_LT;
  137. WsItem != NULL;
  138. WsItem = WsItem->Pnext )
  139. {
  140. pos.x = ( ref.x + WsItem->m_Posx ) * iusPerMil;
  141. pos.y = ( ref.y + WsItem->m_Posy ) * iusPerMil;
  142. msg.Empty();
  143. switch( WsItem->m_Type )
  144. {
  145. case WS_SEGMENT_LT:
  146. plotter->MoveTo( pos );
  147. pos.x = ( ref.x + WsItem->m_Endx ) * iusPerMil;
  148. pos.y = ( ref.y + WsItem->m_Endy ) * iusPerMil;
  149. plotter->FinishTo( pos );
  150. break;
  151. }
  152. }
  153. #else
  154. // Plot legend along the X axis.
  155. int ipas = ( xg - ref.x ) / PAS_REF;
  156. int gxpas = ( xg - ref.x ) / ipas;
  157. for( int ii = ref.x + gxpas, jj = 1; ipas > 0; ii += gxpas, jj++, ipas-- )
  158. {
  159. msg.Empty();
  160. msg << jj;
  161. if( ii < xg - PAS_REF / 2 )
  162. {
  163. pos.x = ii * iusPerMil;
  164. pos.y = ref.y * iusPerMil;
  165. plotter->MoveTo( pos );
  166. pos.x = ii * iusPerMil;
  167. pos.y = ( ref.y + GRID_REF_W ) * iusPerMil;
  168. plotter->FinishTo( pos );
  169. }
  170. pos.x = ( ii - gxpas / 2 ) * iusPerMil;
  171. pos.y = ( ref.y + GRID_REF_W / 2 ) * iusPerMil;
  172. plotter->Text( pos, BLACK,
  173. msg, TEXT_ORIENT_HORIZ, text_size,
  174. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
  175. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  176. if( ii < xg - PAS_REF / 2 )
  177. {
  178. pos.x = ii * iusPerMil;
  179. pos.y = yg * iusPerMil;
  180. plotter->MoveTo( pos );
  181. pos.x = ii * iusPerMil;
  182. pos.y = (yg - GRID_REF_W) * iusPerMil;
  183. plotter->FinishTo( pos );
  184. }
  185. pos.x = ( ii - gxpas / 2 ) * iusPerMil;
  186. pos.y = ( yg - GRID_REF_W / 2 ) * iusPerMil;
  187. plotter->Text( pos, BLACK,
  188. msg, TEXT_ORIENT_HORIZ, text_size,
  189. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
  190. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  191. }
  192. // Plot legend along the Y axis.
  193. ipas = ( yg - ref.y ) / PAS_REF;
  194. int gypas = ( yg - ref.y ) / ipas;
  195. for( int ii = ref.y + gypas, jj = 0; ipas > 0; ii += gypas, jj++, ipas-- )
  196. {
  197. if( jj < 26 )
  198. msg.Printf( wxT( "%c" ), jj + 'A' );
  199. else // I hope 52 identifiers are enough...
  200. msg.Printf( wxT( "%c" ), 'a' + jj - 26 );
  201. if( ii < yg - PAS_REF / 2 )
  202. {
  203. pos.x = ref.x * iusPerMil;
  204. pos.y = ii * iusPerMil;
  205. plotter->MoveTo( pos );
  206. pos.x = ( ref.x + GRID_REF_W ) * iusPerMil;
  207. pos.y = ii * iusPerMil;
  208. plotter->FinishTo( pos );
  209. }
  210. pos.x = ( ref.x + GRID_REF_W / 2 ) * iusPerMil;
  211. pos.y = ( ii - gypas / 2 ) * iusPerMil;
  212. plotter->Text( pos, BLACK,
  213. msg, TEXT_ORIENT_HORIZ, text_size,
  214. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
  215. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  216. if( ii < yg - PAS_REF / 2 )
  217. {
  218. pos.x = xg * iusPerMil;
  219. pos.y = ii * iusPerMil;
  220. plotter->MoveTo( pos );
  221. pos.x = ( xg - GRID_REF_W ) * iusPerMil;
  222. pos.y = ii * iusPerMil;
  223. plotter->FinishTo( pos );
  224. }
  225. pos.x = ( xg - GRID_REF_W / 2 ) * iusPerMil;
  226. pos.y = ( ii - gypas / 2 ) * iusPerMil;
  227. plotter->Text( pos, BLACK, msg, TEXT_ORIENT_HORIZ, text_size,
  228. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
  229. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  230. }
  231. #endif
  232. // Plot the worksheet.
  233. text_size.x = SIZETEXT * iusPerMil;
  234. text_size.y = SIZETEXT * iusPerMil;
  235. #if defined(KICAD_GOST)
  236. text_size2.x = SIZETEXT * iusPerMil * 2;
  237. text_size2.y = SIZETEXT * iusPerMil * 2;
  238. text_size3.x = SIZETEXT * iusPerMil * 3;
  239. text_size3.y = SIZETEXT * iusPerMil * 3;
  240. text_size1_5.x = SIZETEXT * iusPerMil * 1.5;
  241. text_size1_5.y = SIZETEXT * iusPerMil * 1.5;
  242. ref.x = pageSize.x - aPageInfo.GetRightMarginMils();
  243. ref.y = pageSize.y - aPageInfo.GetBottomMarginMils();
  244. if( aSheetNumber == 1 )
  245. {
  246. for( Ki_WorkSheetData* WsItem = &WS_Date;
  247. WsItem != NULL;
  248. WsItem = WsItem->Pnext )
  249. {
  250. pos.x = ( ref.x - WsItem->m_Posx ) * iusPerMil;
  251. pos.y = ( ref.y - WsItem->m_Posy ) * iusPerMil;
  252. msg.Empty();
  253. switch( WsItem->m_Type )
  254. {
  255. case WS_DATE:
  256. break;
  257. case WS_REV:
  258. break;
  259. case WS_KICAD_VERSION:
  260. break;
  261. case WS_PODPIS:
  262. if( WsItem->m_Legende )
  263. msg = WsItem->m_Legende;
  264. plotter->Text( pos, BLACK,
  265. msg, TEXT_ORIENT_HORIZ, text_size,
  266. GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER,
  267. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  268. break;
  269. case WS_SIZESHEET:
  270. break;
  271. case WS_IDENTSHEET:
  272. if( WsItem->m_Legende )
  273. msg = WsItem->m_Legende;
  274. if( aNumberOfSheets > 1 )
  275. msg << aSheetNumber;
  276. plotter->Text( pos, BLACK,
  277. msg, TEXT_ORIENT_HORIZ, text_size,
  278. GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER,
  279. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  280. break;
  281. case WS_SHEETS:
  282. if( WsItem->m_Legende )
  283. msg = WsItem->m_Legende;
  284. msg << aNumberOfSheets;
  285. plotter->Text( pos, BLACK,
  286. msg, TEXT_ORIENT_HORIZ, text_size,
  287. GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER,
  288. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  289. break;
  290. case WS_COMPANY_NAME:
  291. msg = aTitleBlock.GetCompany();
  292. if( !msg.IsEmpty() )
  293. {
  294. plotter->Text( pos, BLACK,
  295. msg, TEXT_ORIENT_HORIZ, text_size1_5,
  296. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
  297. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  298. }
  299. break;
  300. case WS_TITLE:
  301. msg = aTitleBlock.GetTitle();
  302. if( !msg.IsEmpty() )
  303. {
  304. plotter->Text( pos, BLACK,
  305. msg, TEXT_ORIENT_HORIZ, text_size1_5,
  306. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
  307. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  308. }
  309. break;
  310. case WS_COMMENT1:
  311. msg = aTitleBlock.GetComment1();
  312. if( !msg.IsEmpty() )
  313. {
  314. plotter->Text( pos, BLACK,
  315. msg, TEXT_ORIENT_HORIZ, text_size3,
  316. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
  317. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  318. pos.x = (aPageInfo.GetLeftMarginMils() + 1260) * iusPerMil;
  319. pos.y = (aPageInfo.GetTopMarginMils() + 270) * iusPerMil;
  320. plotter->Text( pos, BLACK,
  321. msg.GetData(), 1800, text_size2,
  322. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
  323. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  324. }
  325. break;
  326. case WS_COMMENT2:
  327. msg = aTitleBlock.GetComment2();
  328. if( !msg.IsEmpty() )
  329. {
  330. plotter->Text( pos, BLACK,
  331. msg, TEXT_ORIENT_HORIZ, text_size,
  332. GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER,
  333. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  334. }
  335. break;
  336. case WS_COMMENT3:
  337. msg = aTitleBlock.GetComment3();
  338. if( !msg.IsEmpty() )
  339. {
  340. plotter->Text( pos, BLACK,
  341. msg, TEXT_ORIENT_HORIZ, text_size,
  342. GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER,
  343. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  344. }
  345. break;
  346. case WS_COMMENT4:
  347. msg = aTitleBlock.GetComment4();
  348. if( !msg.IsEmpty() )
  349. {
  350. plotter->Text( pos, BLACK,
  351. msg, TEXT_ORIENT_HORIZ, text_size,
  352. GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER,
  353. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  354. }
  355. break;
  356. case WS_UPPER_SEGMENT:
  357. case WS_LEFT_SEGMENT:
  358. case WS_SEGMENT:
  359. plotter->MoveTo( pos );
  360. pos.x = ( ref.x - WsItem->m_Endx ) * iusPerMil;
  361. pos.y = ( ref.y - WsItem->m_Endy ) * iusPerMil;
  362. plotter->FinishTo( pos );
  363. break;
  364. }
  365. }
  366. }
  367. else
  368. {
  369. for( Ki_WorkSheetData* WsItem = &WS_CADRE_D;
  370. WsItem != NULL;
  371. WsItem = WsItem->Pnext )
  372. {
  373. pos.x = ( ref.x - WsItem->m_Posx ) * iusPerMil;
  374. pos.y = ( ref.y - WsItem->m_Posy ) * iusPerMil;
  375. msg.Empty();
  376. switch( WsItem->m_Type )
  377. {
  378. case WS_CADRE:
  379. // Begin list number > 1
  380. msg = aTitleBlock.GetComment1();
  381. if( !msg.IsEmpty() )
  382. {
  383. plotter->Text( pos, BLACK,
  384. msg, TEXT_ORIENT_HORIZ, text_size3,
  385. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
  386. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  387. pos.x = (aPageInfo.GetLeftMarginMils() + 1260) * iusPerMil;
  388. pos.y = (aPageInfo.GetTopMarginMils() + 270) * iusPerMil;
  389. plotter->Text( pos, BLACK,
  390. msg, 1800, text_size2,
  391. GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER,
  392. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  393. }
  394. break;
  395. case WS_PODPIS_D:
  396. if( WsItem->m_Legende )
  397. msg = WsItem->m_Legende;
  398. plotter->Text( pos, BLACK, msg, TEXT_ORIENT_HORIZ, text_size,
  399. GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER,
  400. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  401. break;
  402. case WS_IDENTSHEET_D:
  403. if( WsItem->m_Legende )
  404. msg = WsItem->m_Legende;
  405. msg << aSheetNumber;
  406. plotter->Text( pos, BLACK, msg, TEXT_ORIENT_HORIZ, text_size,
  407. GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER,
  408. PLOTTER::DEFAULT_LINE_WIDTH, false, false );
  409. break;
  410. case WS_LEFT_SEGMENT_D:
  411. case WS_SEGMENT_D:
  412. plotter->MoveTo( pos );
  413. pos.x = ( ref.x - WsItem->m_Endx ) * iusPerMil;
  414. pos.y = ( ref.y - WsItem->m_Endy ) * iusPerMil;
  415. plotter->FinishTo( pos );
  416. break;
  417. }
  418. }
  419. }
  420. #else
  421. ref.x = pageSize.x - GRID_REF_W - aPageInfo.GetRightMarginMils();
  422. ref.y = pageSize.y - GRID_REF_W - aPageInfo.GetBottomMarginMils();
  423. for( Ki_WorkSheetData* WsItem = &WS_Date;
  424. WsItem != NULL;
  425. WsItem = WsItem->Pnext )
  426. {
  427. bool bold = false;
  428. pos.x = ( ref.x - WsItem->m_Posx ) * iusPerMil;
  429. pos.y = ( ref.y - WsItem->m_Posy ) * iusPerMil;
  430. if( WsItem->m_Legende )
  431. msg = WsItem->m_Legende;
  432. else
  433. msg.Empty();
  434. switch( WsItem->m_Type )
  435. {
  436. case WS_DATE:
  437. msg += aTitleBlock.GetDate();
  438. bold = true;
  439. break;
  440. case WS_REV:
  441. msg += aTitleBlock.GetRevision();
  442. bold = true;
  443. break;
  444. case WS_KICAD_VERSION:
  445. msg += g_ProductName;
  446. break;
  447. case WS_SIZESHEET:
  448. msg += aPageInfo.GetType();
  449. break;
  450. case WS_IDENTSHEET:
  451. msg << aSheetNumber << wxT( "/" ) << aNumberOfSheets;
  452. break;
  453. case WS_FILENAME:
  454. {
  455. wxString fname, fext;
  456. wxFileName::SplitPath( aFilename, NULL, &fname, &fext );
  457. msg << fname << wxT( "." ) << fext;
  458. }
  459. break;
  460. case WS_FULLSHEETNAME:
  461. msg += aSheetDesc;
  462. break;
  463. case WS_COMPANY_NAME:
  464. msg += aTitleBlock.GetCompany();
  465. if( !msg.IsEmpty() )
  466. UpperLimit = std::max( UpperLimit, WsItem->m_Posy + SIZETEXT );
  467. bold = true;
  468. break;
  469. case WS_TITLE:
  470. msg += aTitleBlock.GetTitle();
  471. bold = true;
  472. break;
  473. case WS_COMMENT1:
  474. msg += aTitleBlock.GetComment1();
  475. if( !msg.IsEmpty() )
  476. UpperLimit = std::max( UpperLimit, WsItem->m_Posy + SIZETEXT );
  477. break;
  478. case WS_COMMENT2:
  479. msg += aTitleBlock.GetComment2();
  480. if( !msg.IsEmpty() )
  481. UpperLimit = std::max( UpperLimit, WsItem->m_Posy + SIZETEXT );
  482. break;
  483. case WS_COMMENT3:
  484. msg += aTitleBlock.GetComment3();
  485. if( !msg.IsEmpty() )
  486. UpperLimit = std::max( UpperLimit, WsItem->m_Posy + SIZETEXT );
  487. break;
  488. case WS_COMMENT4:
  489. msg += aTitleBlock.GetComment4();
  490. if( !msg.IsEmpty() )
  491. UpperLimit = std::max( UpperLimit, WsItem->m_Posy + SIZETEXT );
  492. break;
  493. case WS_UPPER_SEGMENT:
  494. if( UpperLimit == 0 )
  495. break;
  496. case WS_LEFT_SEGMENT:
  497. WS_MostUpperLine.m_Posy = WS_MostUpperLine.m_Endy
  498. = WS_MostLeftLine.m_Posy = UpperLimit;
  499. pos.y = (ref.y - WsItem->m_Posy) * iusPerMil;
  500. case WS_SEGMENT:
  501. {
  502. wxPoint auxpos;
  503. auxpos.x = ( ref.x - WsItem->m_Endx ) * iusPerMil;
  504. auxpos.y = ( ref.y - WsItem->m_Endy ) * iusPerMil;
  505. plotter->MoveTo( pos );
  506. plotter->FinishTo( auxpos );
  507. }
  508. break;
  509. }
  510. if( !msg.IsEmpty() )
  511. {
  512. plotter->Text( pos, BLACK,
  513. msg, TEXT_ORIENT_HORIZ, text_size,
  514. GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER,
  515. PLOTTER::DEFAULT_LINE_WIDTH, bold, false );
  516. }
  517. }
  518. #endif
  519. }