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.

568 lines
19 KiB

14 years ago
14 years ago
* KIWAY Milestone A): Make major modules into DLL/DSOs. ! The initial testing of this commit should be done using a Debug build so that all the wxASSERT()s are enabled. Also, be sure and keep enabled the USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it off is senseless anyways. If you want stable code, go back to a prior version, the one tagged with "stable". * Relocate all functionality out of the wxApp derivative into more finely targeted purposes: a) DLL/DSO specific b) PROJECT specific c) EXE or process specific d) configuration file specific data e) configuration file manipulations functions. All of this functionality was blended into an extremely large wxApp derivative and that was incompatible with the desire to support multiple concurrently loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects. An amazing amount of organization come from simply sorting each bit of functionality into the proper box. * Switch to wxConfigBase from wxConfig everywhere except instantiation. * Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD, PGM_SINGLE_TOP, * Remove "Return" prefix on many function names. * Remove obvious comments from CMakeLists.txt files, and from else() and endif()s. * Fix building boost for use in a DSO on linux. * Remove some of the assumptions in the CMakeLists.txt files that windows had to be the host platform when building windows binaries. * Reduce the number of wxStrings being constructed at program load time via static construction. * Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that these functions are useful even when the wxConfigBase comes from another source, as is the case in the KICAD_MANAGER_FRAME. * Move the setting of the KIPRJMOD environment variable into class PROJECT, so that it can be moved into a project variable soon, and out of FP_LIB_TABLE. * Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all its child wxFrames and wxDialogs now have a Kiway() member function which returns a KIWAY& that that window tree branch is in support of. This is like wxWindows DNA in that child windows get this member with proper value at time of construction. * Anticipate some of the needs for milestones B) and C) and make code adjustments now in an effort to reduce work in those milestones. * No testing has been done for python scripting, since milestone C) has that being largely reworked and re-thought-out.
12 years ago
14 years ago
14 years ago
++PCBNew * Removed Pcb_Frame argument from BOARD() constructor, since it precludes having a BOARD being edited by more than one editor, it was a bad design. And this meant removing m_PcbFrame from BOARD. * removed BOARD::SetWindowFrame(), and BOARD::m_PcbFrame * Removed the global BOARD_DESIGN_SETTINGS which was in class_board.cpp * added BOARD_DESIGN_SETTINGS to the BOARD class, a full instance * a couple dialogs now only change BOARD_DESIGN_SETTINGS when OK is pressed, such as dialog_mask_clearance, dialog_drc, etc. * Removed common/pcbcommon.cpp's int g_CurrentVersionPCB = 1 and replaced it with build_version.h's #define BOARD_FILE_VERSION, although there may be a better place for this constant. * Made the public functions in PARAM_CFG_ARRAY be type const. void SaveParam(..) const and void ReadParam(..) const * PARAM_CFG_BASE now has virtual destructor since we have various way of destroying the derived class and boost::ptr_vector must be told about this. * Pass const PARAM_CFG_ARRAY& instead of PARAM_CFG_ARRAY so that we can use an automatic PARAM_CFG_ARRAY which is on the stack.\ * PCB_EDIT_FRAME::GetProjectFileParameters() may no longer cache the array, since it has to access the current BOARD and the BOARD can change. Remember BOARD_DESIGN_SETTINGS are now in the BOARD. * Made the m_BoundingBox member private, this was a brutally hard task, and indicative of the lack of commitment to accessors and object oriented design on the part of KiCad developers. We must do better. Added BOARD::GetBoundingBox, SetBoundingBox(), ComputeBoundingBox(). * Added PCB_BASE_FRAME::GetBoardBoundingBox() which calls BOARD::ComputeBoundingBox()
14 years ago
14 years ago
14 years ago
14 years ago
14 years ago
14 years ago
14 years ago
  1. /*
  2. * This program source code file is part of KiCad, a free EDA CAD application.
  3. *
  4. * Copyright (C) 2009-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
  5. * Copyright (C) 1992-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License
  9. * as published by the Free Software Foundation; either version 2
  10. * of the License, or (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, you may find one here:
  19. * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
  20. * or you may search the http://www.gnu.org website for the version 2 license,
  21. * or you may write to the Free Software Foundation, Inc.,
  22. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
  23. */
  24. #ifndef BOARD_DESIGN_SETTINGS_H_
  25. #define BOARD_DESIGN_SETTINGS_H_
  26. #include <pcbstruct.h> // NB_COLORS
  27. #include <class_pad.h>
  28. #include <class_track.h>
  29. #include <class_netclass.h>
  30. #include <config_params.h>
  31. // Some default values for the board editor and the fp editor (given in mm)
  32. #define DEFAULT_TEXT_MODULE_SIZE 1.0
  33. #define DEFAULT_GR_MODULE_THICKNESS 0.15 // given in mm
  34. // Board thickness, mainly for 3D view:
  35. #define DEFAULT_BOARD_THICKNESS_MM 1.6
  36. // Default values for some board items (given in mm)
  37. #define DEFAULT_TEXT_PCB_SIZE 1.5
  38. #define DEFAULT_TEXT_PCB_THICKNESS 0.3
  39. #define DEFAULT_PCB_EDGE_THICKNESS 0.15
  40. #define DEFAULT_GRAPHIC_THICKNESS 0.2
  41. #define DEFAULT_SOLDERMASK_CLEARANCE 0.2
  42. #define DEFAULT_SOLDERMASK_MIN_WIDTH Millimeter2iu( 0.0 )
  43. #define DEFAULT_CUSTOMTRACKWIDTH 0.2
  44. #define DEFAULT_TRACKMINWIDTH 0.2 // track width min value
  45. #define DEFAULT_VIASMINSIZE 0.4 // vias (not micro vias) min diameter
  46. #define DEFAULT_VIASMINDRILL 0.3 // vias (not micro vias) min drill diameter
  47. #define DEFAULT_MICROVIASMINSIZE 0.2 // micro vias (not vias) min diameter
  48. #define DEFAULT_MICROVIASMINDRILL 0.1 // micro vias (not vias) min drill diameter
  49. /**
  50. * Struct VIA_DIMENSION
  51. * is a small helper container to handle a stock of specific vias each with
  52. * unique diameter and drill sizes in the BOARD class.
  53. */
  54. struct VIA_DIMENSION
  55. {
  56. int m_Diameter; // <= 0 means use Netclass via diameter
  57. int m_Drill; // <= 0 means use Netclass via drill
  58. VIA_DIMENSION()
  59. {
  60. m_Diameter = 0;
  61. m_Drill = 0;
  62. }
  63. VIA_DIMENSION( int aDiameter, int aDrill )
  64. {
  65. m_Diameter = aDiameter;
  66. m_Drill = aDrill;
  67. }
  68. bool operator==( const VIA_DIMENSION& aOther ) const
  69. {
  70. return ( m_Diameter == aOther.m_Diameter ) && ( m_Drill == aOther.m_Drill );
  71. }
  72. bool operator<( const VIA_DIMENSION& aOther ) const
  73. {
  74. if( m_Diameter != aOther.m_Diameter )
  75. return m_Diameter < aOther.m_Diameter;
  76. return m_Drill < aOther.m_Drill;
  77. }
  78. };
  79. /**
  80. * Class BOARD_DESIGN_SETTINGS
  81. * contains design settings for a BOARD object.
  82. */
  83. class BOARD_DESIGN_SETTINGS
  84. {
  85. public:
  86. // The first value is the current netclass via size
  87. /// Vias size and drill list
  88. std::vector<VIA_DIMENSION> m_ViasDimensionsList;
  89. // The first value is the current netclass track width
  90. /// Track width list
  91. std::vector<int> m_TrackWidthList;
  92. /// List of current netclasses. There is always the default netclass.
  93. NETCLASSES m_NetClasses;
  94. bool m_MicroViasAllowed; ///< true to allow micro vias
  95. bool m_BlindBuriedViaAllowed; ///< true to allow blind/buried vias
  96. VIATYPE_T m_CurrentViaType; ///< via type (VIA_BLIND_BURIED, VIA_THROUGH VIA_MICROVIA)
  97. /// if true, when creating a new track starting on an existing track, use this track width
  98. bool m_UseConnectedTrackWidth;
  99. int m_DrawSegmentWidth; ///< current graphic line width (not EDGE layer)
  100. int m_EdgeSegmentWidth; ///< current graphic line width (EDGE layer only)
  101. int m_PcbTextWidth; ///< current Pcb (not module) Text width
  102. wxSize m_PcbTextSize; ///< current Pcb (not module) Text size
  103. int m_TrackMinWidth; ///< track min value for width ((min copper size value
  104. int m_ViasMinSize; ///< vias (not micro vias) min diameter
  105. int m_ViasMinDrill; ///< vias (not micro vias) min drill diameter
  106. int m_MicroViasMinSize; ///< micro vias (not vias) min diameter
  107. int m_MicroViasMinDrill; ///< micro vias (not vias) min drill diameter
  108. // Global mask margins:
  109. int m_SolderMaskMargin; ///< Solder mask margin
  110. int m_SolderMaskMinWidth; ///< Solder mask min width
  111. // 2 areas near than m_SolderMaskMinWidth
  112. // are merged
  113. int m_SolderPasteMargin; ///< Solder paste margin absolute value
  114. double m_SolderPasteMarginRatio; ///< Solder pask margin ratio value of pad size
  115. ///< The final margin is the sum of these 2 values
  116. // Variables used in footprint edition (default value in item/footprint creation)
  117. int m_ModuleSegmentWidth; ///< Default width for all graphic lines
  118. // Note: the default layer is the active layer
  119. wxSize m_ModuleTextSize; ///< Default footprint texts size
  120. int m_ModuleTextWidth; ///< Default footprint texts thickness
  121. wxString m_RefDefaultText; ///< Default ref text on fp creation
  122. // if empty, use footprint name as default
  123. bool m_RefDefaultVisibility; ///< Default ref text visibility on fp creation
  124. int m_RefDefaultlayer; ///< Default ref text layer on fp creation
  125. // should be a LAYER_ID, but use an int
  126. // to save this param in config
  127. wxString m_ValueDefaultText; ///< Default value text on fp creation
  128. // if empty, use footprint name as default
  129. bool m_ValueDefaultVisibility; ///< Default value text visibility on fp creation
  130. int m_ValueDefaultlayer; ///< Default value text layer on fp creation
  131. // should be a LAYER_ID, but use an int
  132. // to save this param in config
  133. // Miscellaneous
  134. wxPoint m_AuxOrigin; ///< origin for plot exports
  135. wxPoint m_GridOrigin; ///< origin for grid offsets
  136. D_PAD m_Pad_Master; ///< A dummy pad to store all default parameters
  137. // when importing values or create a new pad
  138. private:
  139. /// Index for #m_ViasDimensionsList to select the current via size.
  140. /// 0 is the index selection of the default value Netclass
  141. unsigned m_viaSizeIndex;
  142. // Index for m_TrackWidthList to select the value.
  143. /// 0 is the index selection of the default value Netclass
  144. unsigned m_trackWidthIndex;
  145. ///> Use custom values for track/via sizes (not specified in net class nor in the size lists).
  146. bool m_useCustomTrackVia;
  147. ///> Custom track width (used after UseCustomTrackViaSize( true ) was called).
  148. int m_customTrackWidth;
  149. ///> Custom via size (used after UseCustomTrackViaSize( true ) was called).
  150. VIA_DIMENSION m_customViaSize;
  151. int m_copperLayerCount; ///< Number of copper layers for this design
  152. LSET m_enabledLayers; ///< Bit-mask for layer enabling
  153. LSET m_visibleLayers; ///< Bit-mask for layer visibility
  154. int m_visibleElements; ///< Bit-mask for element category visibility
  155. int m_boardThickness; ///< Board thickness for 3D viewer
  156. /// Current net class name used to display netclass info.
  157. /// This is also the last used netclass after starting a track.
  158. wxString m_currentNetClassName;
  159. public:
  160. BOARD_DESIGN_SETTINGS();
  161. /**
  162. * Function GetDefault
  163. * @return the default netclass.
  164. */
  165. inline NETCLASSPTR GetDefault() const
  166. {
  167. return m_NetClasses.GetDefault();
  168. }
  169. /**
  170. * Function GetCurrentNetClassName
  171. * @return the current net class name.
  172. */
  173. inline const wxString& GetCurrentNetClassName() const
  174. {
  175. return m_currentNetClassName;
  176. }
  177. /**
  178. * Function UseNetClassTrack
  179. * returns true if netclass values should be used to obtain appropriate track width.
  180. */
  181. inline bool UseNetClassTrack() const
  182. {
  183. return ( m_trackWidthIndex == 0 && !m_useCustomTrackVia );
  184. }
  185. /**
  186. * Function UseNetClassVia
  187. * returns true if netclass values should be used to obtain appropriate via size.
  188. */
  189. inline bool UseNetClassVia() const
  190. {
  191. return ( m_viaSizeIndex == 0 && !m_useCustomTrackVia );
  192. }
  193. /**
  194. * Function SetCurrentNetClass
  195. * Must be called after a netclass selection (or after a netclass parameter change
  196. * Initialize vias and tracks values displayed in comb boxes of the auxiliary toolbar
  197. * and some others parameters (netclass name ....)
  198. * @param aNetClassName = the new netclass name
  199. * @return true if lists of tracks and vias sizes are modified
  200. */
  201. bool SetCurrentNetClass( const wxString& aNetClassName );
  202. /**
  203. * Function GetBiggestClearanceValue
  204. * @return the biggest clearance value found in NetClasses list
  205. */
  206. int GetBiggestClearanceValue();
  207. /**
  208. * Function GetSmallestClearanceValue
  209. * @return the smallest clearance value found in NetClasses list
  210. */
  211. int GetSmallestClearanceValue();
  212. /**
  213. * Function GetCurrentMicroViaSize
  214. * @return the current micro via size,
  215. * that is the current netclass value
  216. */
  217. int GetCurrentMicroViaSize();
  218. /**
  219. * Function GetCurrentMicroViaDrill
  220. * @return the current micro via drill,
  221. * that is the current netclass value
  222. */
  223. int GetCurrentMicroViaDrill();
  224. /**
  225. * Function GetTrackWidthIndex
  226. * @return the current track width list index.
  227. */
  228. inline unsigned GetTrackWidthIndex() const { return m_trackWidthIndex; }
  229. /**
  230. * Function SetTrackWidthIndex
  231. * sets the current track width list index to \a aIndex.
  232. *
  233. * @param aIndex is the track width list index.
  234. */
  235. void SetTrackWidthIndex( unsigned aIndex );
  236. /**
  237. * Function GetCurrentTrackWidth
  238. * @return the current track width, according to the selected options
  239. * ( using the default netclass value or a preset/custom value )
  240. * the default netclass is always in m_TrackWidthList[0]
  241. */
  242. inline int GetCurrentTrackWidth() const
  243. {
  244. return m_useCustomTrackVia ? m_customTrackWidth : m_TrackWidthList[m_trackWidthIndex];
  245. }
  246. /**
  247. * Function SetCustomTrackWidth
  248. * Sets custom width for track (i.e. not available in netclasses or preset list). To have
  249. * it returned with GetCurrentTrackWidth() you need to enable custom track & via sizes
  250. * (UseCustomTrackViaSize()).
  251. * @param aWidth is the new track width.
  252. */
  253. inline void SetCustomTrackWidth( int aWidth )
  254. {
  255. m_customTrackWidth = aWidth;
  256. }
  257. /**
  258. * Function GetCustomTrackWidth
  259. * @return Current custom width for a track.
  260. */
  261. inline int GetCustomTrackWidth() const
  262. {
  263. return m_customTrackWidth;
  264. }
  265. /**
  266. * Function GetViaSizeIndex
  267. * @return the current via size list index.
  268. */
  269. inline unsigned GetViaSizeIndex() const
  270. {
  271. return m_viaSizeIndex;
  272. }
  273. /**
  274. * Function SetViaSizeIndex
  275. * sets the current via size list index to \a aIndex.
  276. *
  277. * @param aIndex is the via size list index.
  278. */
  279. void SetViaSizeIndex( unsigned aIndex );
  280. /**
  281. * Function GetCurrentViaSize
  282. * @return the current via size, according to the selected options
  283. * ( using the default netclass value or a preset/custom value )
  284. * the default netclass is always in m_TrackWidthList[0]
  285. */
  286. inline int GetCurrentViaSize() const
  287. {
  288. if( m_useCustomTrackVia )
  289. return m_customViaSize.m_Diameter;
  290. else
  291. return m_ViasDimensionsList[m_viaSizeIndex].m_Diameter;
  292. }
  293. /**
  294. * Function SetCustomViaSize
  295. * Sets custom size for via diameter (i.e. not available in netclasses or preset list). To have
  296. * it returned with GetCurrentViaSize() you need to enable custom track & via sizes
  297. * (UseCustomTrackViaSize()).
  298. * @param aSize is the new drill diameter.
  299. */
  300. inline void SetCustomViaSize( int aSize )
  301. {
  302. m_customViaSize.m_Diameter = aSize;
  303. }
  304. /**
  305. * Function GetCustomViaSize
  306. * @return Current custom size for the via diameter.
  307. */
  308. inline int GetCustomViaSize() const
  309. {
  310. return m_customViaSize.m_Diameter;
  311. }
  312. /**
  313. * Function GetCurrentViaDrill
  314. * @return the current via size, according to the selected options
  315. * ( using the default netclass value or a preset/custom value )
  316. * the default netclass is always in m_TrackWidthList[0]
  317. */
  318. int GetCurrentViaDrill() const;
  319. /**
  320. * Function SetCustomViaDrill
  321. * Sets custom size for via drill (i.e. not available in netclasses or preset list). To have
  322. * it returned with GetCurrentViaDrill() you need to enable custom track & via sizes
  323. * (UseCustomTrackViaSize()).
  324. * @param aDrill is the new drill size.
  325. */
  326. inline void SetCustomViaDrill( int aDrill )
  327. {
  328. m_customViaSize.m_Drill = aDrill;
  329. }
  330. /**
  331. * Function GetCustomViaDrill
  332. * @return Current custom size for the via drill.
  333. */
  334. inline int GetCustomViaDrill() const
  335. {
  336. return m_customViaSize.m_Drill;
  337. }
  338. /**
  339. * Function UseCustomTrackViaSize
  340. * Enables/disables custom track/via size settings. If enabled, values set with
  341. * SetCustomTrackWidth()/SetCustomViaSize()/SetCustomViaDrill() are used for newly created
  342. * tracks and vias.
  343. * @param aEnabled decides if custom settings should be used for new tracks/vias.
  344. */
  345. inline void UseCustomTrackViaSize( bool aEnabled )
  346. {
  347. m_useCustomTrackVia = aEnabled;
  348. }
  349. /**
  350. * Function UseCustomTrackViaSize
  351. * @return True if custom sizes of tracks & vias are enabled, false otherwise.
  352. */
  353. inline bool UseCustomTrackViaSize() const
  354. {
  355. return m_useCustomTrackVia;
  356. }
  357. /**
  358. * Function GetVisibleLayers
  359. * returns a bit-mask of all the layers that are visible
  360. * @return int - the visible layers in bit-mapped form.
  361. */
  362. inline LSET GetVisibleLayers() const
  363. {
  364. return m_visibleLayers;
  365. }
  366. /**
  367. * Function SetVisibleAlls
  368. * Set the bit-mask of all visible elements categories,
  369. * including enabled layers
  370. */
  371. void SetVisibleAlls();
  372. /**
  373. * Function SetVisibleLayers
  374. * changes the bit-mask of visible layers
  375. * @param aMask = The new bit-mask of visible layers
  376. */
  377. inline void SetVisibleLayers( LSET aMask )
  378. {
  379. m_visibleLayers = aMask & m_enabledLayers;
  380. }
  381. /**
  382. * Function IsLayerVisible
  383. * tests whether a given layer is visible
  384. * @param aLayerId = The layer to be tested
  385. * @return bool - true if the layer is visible.
  386. */
  387. inline bool IsLayerVisible( LAYER_ID aLayerId ) const
  388. {
  389. // If a layer is disabled, it is automatically invisible
  390. return (m_visibleLayers & m_enabledLayers)[aLayerId];
  391. }
  392. /**
  393. * Function SetLayerVisibility
  394. * changes the visibility of a given layer
  395. * @param aLayerId = The layer to be changed
  396. * @param aNewState = The new visibility state of the layer
  397. */
  398. void SetLayerVisibility( LAYER_ID aLayerId, bool aNewState );
  399. /**
  400. * Function GetVisibleElements
  401. * returns a bit-mask of all the element categories that are visible
  402. * @return int - the visible element categories in bit-mapped form.
  403. */
  404. inline int GetVisibleElements() const
  405. {
  406. return m_visibleElements;
  407. }
  408. /**
  409. * Function SetVisibleElements
  410. * changes the bit-mask of visible element categories
  411. * @param aMask = The new bit-mask of visible element categories
  412. */
  413. inline void SetVisibleElements( int aMask )
  414. {
  415. m_visibleElements = aMask;
  416. }
  417. /**
  418. * Function IsElementVisible
  419. * tests whether a given element category is visible. Keep this as an
  420. * inline function.
  421. * @param aElementCategory is from the enum by the same name
  422. * @return bool - true if the element is visible.
  423. * @see enum PCB_VISIBLE
  424. */
  425. inline bool IsElementVisible( int aElementCategory ) const
  426. {
  427. assert( aElementCategory >= 0 && aElementCategory < END_PCB_VISIBLE_LIST );
  428. return ( m_visibleElements & ( 1 << aElementCategory ) );
  429. }
  430. /**
  431. * Function SetElementVisibility
  432. * changes the visibility of an element category
  433. * @param aElementCategory is from the enum by the same name
  434. * @param aNewState = The new visibility state of the element category
  435. * @see enum PCB_VISIBLE
  436. */
  437. void SetElementVisibility( int aElementCategory, bool aNewState );
  438. /**
  439. * Function GetEnabledLayers
  440. * returns a bit-mask of all the layers that are enabled
  441. * @return int - the enabled layers in bit-mapped form.
  442. */
  443. inline LSET GetEnabledLayers() const
  444. {
  445. return m_enabledLayers;
  446. }
  447. /**
  448. * Function SetEnabledLayers
  449. * changes the bit-mask of enabled layers
  450. * @param aMask = The new bit-mask of enabled layers
  451. */
  452. void SetEnabledLayers( LSET aMask );
  453. /**
  454. * Function IsLayerEnabled
  455. * tests whether a given layer is enabled
  456. * @param aLayerId = The layer to be tested
  457. * @return bool - true if the layer is enabled
  458. */
  459. inline bool IsLayerEnabled( LAYER_ID aLayerId ) const
  460. {
  461. return m_enabledLayers[aLayerId];
  462. }
  463. /**
  464. * Function GetCopperLayerCount
  465. * @return int - the number of neabled copper layers
  466. */
  467. inline int GetCopperLayerCount() const
  468. {
  469. return m_copperLayerCount;
  470. }
  471. /**
  472. * Function SetCopperLayerCount
  473. * do what its name says...
  474. * @param aNewLayerCount = The new number of enabled copper layers
  475. */
  476. void SetCopperLayerCount( int aNewLayerCount );
  477. /**
  478. * Function AppendConfigs
  479. * appends to @a aResult the configuration setting accessors which will later
  480. * allow reading or writing of configuration file information directly into
  481. * this object.
  482. */
  483. void AppendConfigs( PARAM_CFG_ARRAY* aResult );
  484. inline int GetBoardThickness() const { return m_boardThickness; }
  485. inline void SetBoardThickness( int aThickness ) { m_boardThickness = aThickness; }
  486. private:
  487. void formatNetClass( NETCLASS* aNetClass, OUTPUTFORMATTER* aFormatter, int aNestLevel,
  488. int aControlBits ) const throw( IO_ERROR );
  489. };
  490. #endif // BOARD_DESIGN_SETTINGS_H_