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.

808 lines
28 KiB

10 months ago
10 months ago
  1. /*
  2. * This program source code file is part of KiCad, a free EDA CAD application.
  3. *
  4. * Copyright (C) 2024 Jon Evans <jon@craftyjon.com>
  5. * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
  6. *
  7. * This program is free software: you can redistribute it and/or modify it
  8. * under the terms of the GNU General Public License as published by the
  9. * Free Software Foundation, either version 3 of the License, or (at your
  10. * option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful, but
  13. * WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License along
  18. * with this program. If not, see <http://www.gnu.org/licenses/>.
  19. */
  20. #include <import_export.h>
  21. #include <api/api_enums.h>
  22. #include <api/board/board_types.pb.h>
  23. #include <api/board/board_commands.pb.h>
  24. #include <wx/wx.h>
  25. #include <board_stackup_manager/board_stackup.h>
  26. #include <padstack.h>
  27. #include <pcb_dimension.h>
  28. #include <pcb_track.h>
  29. #include <zones.h>
  30. #include <zone_settings.h>
  31. #include <project/board_project_settings.h>
  32. // Adding something new here? Add it to test_api_enums.cpp!
  33. using namespace kiapi::board;
  34. template<>
  35. types::PadType ToProtoEnum( PAD_ATTRIB aValue )
  36. {
  37. switch( aValue )
  38. {
  39. case PAD_ATTRIB::PTH: return types::PadType::PT_PTH;
  40. case PAD_ATTRIB::SMD: return types::PadType::PT_SMD;
  41. case PAD_ATTRIB::CONN: return types::PadType::PT_EDGE_CONNECTOR;
  42. case PAD_ATTRIB::NPTH: return types::PadType::PT_NPTH;
  43. default:
  44. wxCHECK_MSG( false, types::PadType::PT_UNKNOWN,
  45. "Unhandled case in ToProtoEnum<PAD_ATTRIB>");
  46. }
  47. }
  48. template<>
  49. PAD_ATTRIB FromProtoEnum( types::PadType aValue )
  50. {
  51. switch( aValue )
  52. {
  53. case types::PadType::PT_UNKNOWN:
  54. case types::PadType::PT_PTH: return PAD_ATTRIB::PTH;
  55. case types::PadType::PT_SMD: return PAD_ATTRIB::SMD;
  56. case types::PadType::PT_EDGE_CONNECTOR: return PAD_ATTRIB::CONN;
  57. case types::PadType::PT_NPTH: return PAD_ATTRIB::NPTH;
  58. default:
  59. wxCHECK_MSG( false, PAD_ATTRIB::PTH,
  60. "Unhandled case in FromProtoEnum<types::PadType>" );
  61. }
  62. }
  63. template<>
  64. types::DrillShape ToProtoEnum( PAD_DRILL_SHAPE aValue )
  65. {
  66. switch( aValue )
  67. {
  68. case PAD_DRILL_SHAPE::CIRCLE: return types::DrillShape::DS_CIRCLE;
  69. case PAD_DRILL_SHAPE::OBLONG: return types::DrillShape::DS_OBLONG;
  70. case PAD_DRILL_SHAPE::UNDEFINED: return types::DrillShape::DS_UNDEFINED;
  71. default:
  72. wxCHECK_MSG( false, types::DrillShape::DS_UNKNOWN,
  73. "Unhandled case in ToProtoEnum<PAD_DRILL_SHAPE>");
  74. }
  75. }
  76. template<>
  77. PAD_DRILL_SHAPE FromProtoEnum( types::DrillShape aValue )
  78. {
  79. switch( aValue )
  80. {
  81. case types::DrillShape::DS_CIRCLE: return PAD_DRILL_SHAPE::CIRCLE;
  82. case types::DrillShape::DS_OBLONG: return PAD_DRILL_SHAPE::OBLONG;
  83. case types::DrillShape::DS_UNKNOWN:
  84. case types::DrillShape::DS_UNDEFINED: return PAD_DRILL_SHAPE::UNDEFINED;
  85. default:
  86. wxCHECK_MSG( false, PAD_DRILL_SHAPE::UNDEFINED,
  87. "Unhandled case in FromProtoEnum<types::DrillShape>" );
  88. }
  89. }
  90. template<>
  91. types::PadStackShape ToProtoEnum( PAD_SHAPE aValue )
  92. {
  93. switch( aValue )
  94. {
  95. case PAD_SHAPE::CIRCLE: return types::PadStackShape::PSS_CIRCLE;
  96. case PAD_SHAPE::RECTANGLE: return types::PadStackShape::PSS_RECTANGLE;
  97. case PAD_SHAPE::OVAL: return types::PadStackShape::PSS_OVAL;
  98. case PAD_SHAPE::TRAPEZOID: return types::PadStackShape::PSS_TRAPEZOID;
  99. case PAD_SHAPE::ROUNDRECT: return types::PadStackShape::PSS_ROUNDRECT;
  100. case PAD_SHAPE::CHAMFERED_RECT: return types::PadStackShape::PSS_CHAMFEREDRECT;
  101. case PAD_SHAPE::CUSTOM: return types::PadStackShape::PSS_CUSTOM;
  102. default:
  103. wxCHECK_MSG( false, types::PadStackShape::PSS_UNKNOWN,
  104. "Unhandled case in ToProtoEnum<PAD_SHAPE>");
  105. }
  106. }
  107. template<>
  108. PAD_SHAPE FromProtoEnum( types::PadStackShape aValue )
  109. {
  110. switch( aValue )
  111. {
  112. case types::PadStackShape::PSS_UNKNOWN:
  113. case types::PadStackShape::PSS_CIRCLE: return PAD_SHAPE::CIRCLE;
  114. case types::PadStackShape::PSS_RECTANGLE: return PAD_SHAPE::RECTANGLE;
  115. case types::PadStackShape::PSS_OVAL: return PAD_SHAPE::OVAL;
  116. case types::PadStackShape::PSS_TRAPEZOID: return PAD_SHAPE::TRAPEZOID;
  117. case types::PadStackShape::PSS_ROUNDRECT: return PAD_SHAPE::ROUNDRECT;
  118. case types::PadStackShape::PSS_CHAMFEREDRECT: return PAD_SHAPE::CHAMFERED_RECT;
  119. case types::PadStackShape::PSS_CUSTOM: return PAD_SHAPE::CUSTOM;
  120. default:
  121. wxCHECK_MSG( false, PAD_SHAPE::CIRCLE,
  122. "Unhandled case in FromProtoEnum<types::PadStackShape>" );
  123. }
  124. }
  125. template<>
  126. types::PadStackType ToProtoEnum( PADSTACK::MODE aValue )
  127. {
  128. switch( aValue )
  129. {
  130. case PADSTACK::MODE::NORMAL: return types::PadStackType::PST_NORMAL;
  131. case PADSTACK::MODE::FRONT_INNER_BACK: return types::PadStackType::PST_FRONT_INNER_BACK;
  132. case PADSTACK::MODE::CUSTOM: return types::PadStackType::PST_CUSTOM;
  133. default:
  134. wxCHECK_MSG( false, types::PadStackType::PST_UNKNOWN,
  135. "Unhandled case in ToProtoEnum<PADSTACK::MODE>");
  136. }
  137. }
  138. template<>
  139. PADSTACK::MODE FromProtoEnum( types::PadStackType aValue )
  140. {
  141. switch( aValue )
  142. {
  143. case types::PadStackType::PST_UNKNOWN:
  144. case types::PadStackType::PST_NORMAL: return PADSTACK::MODE::NORMAL;
  145. case types::PadStackType::PST_FRONT_INNER_BACK: return PADSTACK::MODE::FRONT_INNER_BACK;
  146. case types::PadStackType::PST_CUSTOM: return PADSTACK::MODE::CUSTOM;
  147. default:
  148. wxCHECK_MSG( false, PADSTACK::MODE::NORMAL,
  149. "Unhandled case in FromProtoEnum<types::PadStackType>" );
  150. }
  151. }
  152. template<>
  153. types::ViaType ToProtoEnum( VIATYPE aValue )
  154. {
  155. switch( aValue )
  156. {
  157. case VIATYPE::THROUGH: return types::ViaType::VT_THROUGH;
  158. case VIATYPE::BLIND_BURIED: return types::ViaType::VT_BLIND_BURIED;
  159. case VIATYPE::MICROVIA: return types::ViaType::VT_MICRO;
  160. default:
  161. wxCHECK_MSG( false, types::ViaType::VT_UNKNOWN,
  162. "Unhandled case in ToProtoEnum<VIATYPE>");
  163. }
  164. }
  165. template<>
  166. VIATYPE FromProtoEnum( types::ViaType aValue )
  167. {
  168. switch( aValue )
  169. {
  170. case types::ViaType::VT_UNKNOWN:
  171. case types::ViaType::VT_THROUGH: return VIATYPE::THROUGH;
  172. case types::ViaType::VT_BLIND_BURIED: return VIATYPE::BLIND_BURIED;
  173. case types::ViaType::VT_MICRO: return VIATYPE::MICROVIA;
  174. default:
  175. wxCHECK_MSG( false, VIATYPE::THROUGH,
  176. "Unhandled case in FromProtoEnum<types::ViaType>" );
  177. }
  178. }
  179. template<>
  180. types::ZoneConnectionStyle ToProtoEnum( ZONE_CONNECTION aValue )
  181. {
  182. switch( aValue )
  183. {
  184. case ZONE_CONNECTION::INHERITED: return types::ZoneConnectionStyle::ZCS_INHERITED;
  185. case ZONE_CONNECTION::NONE: return types::ZoneConnectionStyle::ZCS_NONE;
  186. case ZONE_CONNECTION::THERMAL: return types::ZoneConnectionStyle::ZCS_THERMAL;
  187. case ZONE_CONNECTION::FULL: return types::ZoneConnectionStyle::ZCS_FULL;
  188. case ZONE_CONNECTION::THT_THERMAL: return types::ZoneConnectionStyle::ZCS_PTH_THERMAL;
  189. default:
  190. wxCHECK_MSG( false, types::ZoneConnectionStyle::ZCS_UNKNOWN,
  191. "Unhandled case in ToProtoEnum<ZONE_CONNECTION>");
  192. }
  193. }
  194. template<>
  195. ZONE_CONNECTION FromProtoEnum( types::ZoneConnectionStyle aValue )
  196. {
  197. switch( aValue )
  198. {
  199. case types::ZoneConnectionStyle::ZCS_UNKNOWN: return ZONE_CONNECTION::INHERITED;
  200. case types::ZoneConnectionStyle::ZCS_INHERITED: return ZONE_CONNECTION::INHERITED;
  201. case types::ZoneConnectionStyle::ZCS_NONE: return ZONE_CONNECTION::NONE;
  202. case types::ZoneConnectionStyle::ZCS_THERMAL: return ZONE_CONNECTION::THERMAL;
  203. case types::ZoneConnectionStyle::ZCS_FULL: return ZONE_CONNECTION::FULL;
  204. case types::ZoneConnectionStyle::ZCS_PTH_THERMAL: return ZONE_CONNECTION::THT_THERMAL;
  205. default:
  206. wxCHECK_MSG( false, ZONE_CONNECTION::INHERITED,
  207. "Unhandled case in FromProtoEnum<types::ZoneConnectionStyle>" );
  208. }
  209. }
  210. template<>
  211. types::UnconnectedLayerRemoval ToProtoEnum( PADSTACK::UNCONNECTED_LAYER_MODE aValue )
  212. {
  213. switch( aValue )
  214. {
  215. case PADSTACK::UNCONNECTED_LAYER_MODE::KEEP_ALL:
  216. return types::UnconnectedLayerRemoval::ULR_KEEP;
  217. case PADSTACK::UNCONNECTED_LAYER_MODE::REMOVE_ALL:
  218. return types::UnconnectedLayerRemoval::ULR_REMOVE;
  219. case PADSTACK::UNCONNECTED_LAYER_MODE::REMOVE_EXCEPT_START_AND_END:
  220. return types::UnconnectedLayerRemoval::ULR_REMOVE_EXCEPT_START_AND_END;
  221. default:
  222. wxCHECK_MSG( false, types::UnconnectedLayerRemoval::ULR_UNKNOWN,
  223. "Unhandled case in ToProtoEnum<PADSTACK::UNCONNECTED_LAYER_MODE>");
  224. }
  225. }
  226. template<>
  227. PADSTACK::UNCONNECTED_LAYER_MODE FromProtoEnum( types::UnconnectedLayerRemoval aValue )
  228. {
  229. switch( aValue )
  230. {
  231. case types::UnconnectedLayerRemoval::ULR_UNKNOWN:
  232. case types::UnconnectedLayerRemoval::ULR_KEEP:
  233. return PADSTACK::UNCONNECTED_LAYER_MODE::KEEP_ALL;
  234. case types::UnconnectedLayerRemoval::ULR_REMOVE:
  235. return PADSTACK::UNCONNECTED_LAYER_MODE::REMOVE_ALL;
  236. case types::UnconnectedLayerRemoval::ULR_REMOVE_EXCEPT_START_AND_END:
  237. return PADSTACK::UNCONNECTED_LAYER_MODE::REMOVE_EXCEPT_START_AND_END;
  238. default:
  239. wxCHECK_MSG( false, PADSTACK::UNCONNECTED_LAYER_MODE::KEEP_ALL,
  240. "Unhandled case in FromProtoEnum<types::UnconnectedLayerRemoval>");
  241. }
  242. }
  243. template<>
  244. types::IslandRemovalMode ToProtoEnum( ISLAND_REMOVAL_MODE aValue )
  245. {
  246. switch( aValue )
  247. {
  248. case ISLAND_REMOVAL_MODE::ALWAYS: return types::IslandRemovalMode::IRM_ALWAYS;
  249. case ISLAND_REMOVAL_MODE::NEVER: return types::IslandRemovalMode::IRM_NEVER;
  250. case ISLAND_REMOVAL_MODE::AREA: return types::IslandRemovalMode::IRM_AREA;
  251. default:
  252. wxCHECK_MSG( false, types::IslandRemovalMode::IRM_UNKNOWN,
  253. "Unhandled case in ToProtoEnum<ISLAND_REMOVAL_MODE>");
  254. }
  255. }
  256. template<>
  257. ISLAND_REMOVAL_MODE FromProtoEnum( types::IslandRemovalMode aValue )
  258. {
  259. switch( aValue )
  260. {
  261. case types::IslandRemovalMode::IRM_UNKNOWN:
  262. case types::IslandRemovalMode::IRM_ALWAYS: return ISLAND_REMOVAL_MODE::ALWAYS;
  263. case types::IslandRemovalMode::IRM_NEVER: return ISLAND_REMOVAL_MODE::NEVER;
  264. case types::IslandRemovalMode::IRM_AREA: return ISLAND_REMOVAL_MODE::AREA;
  265. default:
  266. wxCHECK_MSG( false, ISLAND_REMOVAL_MODE::ALWAYS,
  267. "Unhandled case in FromProtoEnum<types::IslandRemovalMode>" );
  268. }
  269. }
  270. template<>
  271. types::ZoneFillMode ToProtoEnum( ZONE_FILL_MODE aValue )
  272. {
  273. switch( aValue )
  274. {
  275. case ZONE_FILL_MODE::POLYGONS: return types::ZoneFillMode::ZFM_SOLID;
  276. case ZONE_FILL_MODE::HATCH_PATTERN: return types::ZoneFillMode::ZFM_HATCHED;
  277. default:
  278. wxCHECK_MSG( false, types::ZoneFillMode::ZFM_UNKNOWN,
  279. "Unhandled case in ToProtoEnum<ZONE_FILL_MODE>");
  280. }
  281. }
  282. template<>
  283. ZONE_FILL_MODE FromProtoEnum( types::ZoneFillMode aValue )
  284. {
  285. switch( aValue )
  286. {
  287. case types::ZoneFillMode::ZFM_UNKNOWN:
  288. case types::ZoneFillMode::ZFM_SOLID: return ZONE_FILL_MODE::POLYGONS;
  289. case types::ZoneFillMode::ZFM_HATCHED: return ZONE_FILL_MODE::HATCH_PATTERN;
  290. default:
  291. wxCHECK_MSG( false, ZONE_FILL_MODE::POLYGONS,
  292. "Unhandled case in FromProtoEnum<types::ZoneFillMode>" );
  293. }
  294. }
  295. template<>
  296. types::ZoneBorderStyle ToProtoEnum( ZONE_BORDER_DISPLAY_STYLE aValue )
  297. {
  298. switch( aValue )
  299. {
  300. case ZONE_BORDER_DISPLAY_STYLE::NO_HATCH: return types::ZoneBorderStyle::ZBS_SOLID;
  301. case ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL: return types::ZoneBorderStyle::ZBS_DIAGONAL_FULL;
  302. case ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE: return types::ZoneBorderStyle::ZBS_DIAGONAL_EDGE;
  303. case ZONE_BORDER_DISPLAY_STYLE::INVISIBLE_BORDER: return types::ZoneBorderStyle::ZBS_INVISIBLE;
  304. default:
  305. wxCHECK_MSG( false, types::ZoneBorderStyle::ZBS_UNKNOWN,
  306. "Unhandled case in ToProtoEnum<ZONE_BORDER_DISPLAY_STYLE>");
  307. }
  308. }
  309. template<>
  310. ZONE_BORDER_DISPLAY_STYLE FromProtoEnum( types::ZoneBorderStyle aValue )
  311. {
  312. switch( aValue )
  313. {
  314. case types::ZoneBorderStyle::ZBS_SOLID: return ZONE_BORDER_DISPLAY_STYLE::NO_HATCH;
  315. case types::ZoneBorderStyle::ZBS_DIAGONAL_FULL: return ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL;
  316. case types::ZoneBorderStyle::ZBS_UNKNOWN:
  317. case types::ZoneBorderStyle::ZBS_DIAGONAL_EDGE: return ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE;
  318. case types::ZoneBorderStyle::ZBS_INVISIBLE: return ZONE_BORDER_DISPLAY_STYLE::INVISIBLE_BORDER;
  319. default:
  320. wxCHECK_MSG( false, ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
  321. "Unhandled case in FromProtoEnum<types::ZoneHatchBorderMode>" );
  322. }
  323. }
  324. template<>
  325. types::PlacementRuleSourceType ToProtoEnum( RULE_AREA_PLACEMENT_SOURCE_TYPE aValue )
  326. {
  327. switch( aValue )
  328. {
  329. case RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME:
  330. return types::PlacementRuleSourceType::PRST_SHEET_NAME;
  331. case RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS:
  332. return types::PlacementRuleSourceType::PRST_COMPONENT_CLASS;
  333. default:
  334. wxCHECK_MSG( false, types::PlacementRuleSourceType::PRST_UNKNOWN,
  335. "Unhandled case in ToProtoEnum<RULE_AREA_PLACEMENT_SOURCE_TYPE>");
  336. }
  337. }
  338. template<>
  339. RULE_AREA_PLACEMENT_SOURCE_TYPE FromProtoEnum( types::PlacementRuleSourceType aValue )
  340. {
  341. switch( aValue )
  342. {
  343. case types::PlacementRuleSourceType::PRST_UNKNOWN:
  344. case types::PlacementRuleSourceType::PRST_SHEET_NAME:
  345. return RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME;
  346. case types::PlacementRuleSourceType::PRST_COMPONENT_CLASS:
  347. return RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS;
  348. default:
  349. wxCHECK_MSG( false, RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME,
  350. "Unhandled case in FromProtoEnum<types::PlacementRuleSourceType>" );
  351. }
  352. }
  353. template<>
  354. types::TeardropType ToProtoEnum( TEARDROP_TYPE aValue )
  355. {
  356. switch( aValue )
  357. {
  358. case TEARDROP_TYPE::TD_NONE: return types::TeardropType::TDT_NONE;
  359. case TEARDROP_TYPE::TD_UNSPECIFIED: return types::TeardropType::TDT_UNSPECIFIED;
  360. case TEARDROP_TYPE::TD_VIAPAD: return types::TeardropType::TDT_VIA_PAD;
  361. case TEARDROP_TYPE::TD_TRACKEND: return types::TeardropType::TDT_TRACK_END;
  362. default:
  363. wxCHECK_MSG( false, types::TeardropType::TDT_UNKNOWN,
  364. "Unhandled case in ToProtoEnum<TEARDROP_TYPE>");
  365. }
  366. }
  367. template<>
  368. TEARDROP_TYPE FromProtoEnum( types::TeardropType aValue )
  369. {
  370. switch( aValue )
  371. {
  372. case types::TeardropType::TDT_UNKNOWN:
  373. case types::TeardropType::TDT_NONE: return TEARDROP_TYPE::TD_NONE;
  374. case types::TeardropType::TDT_UNSPECIFIED: return TEARDROP_TYPE::TD_UNSPECIFIED;
  375. case types::TeardropType::TDT_VIA_PAD: return TEARDROP_TYPE::TD_VIAPAD;
  376. case types::TeardropType::TDT_TRACK_END: return TEARDROP_TYPE::TD_TRACKEND;
  377. default:
  378. wxCHECK_MSG( false, TEARDROP_TYPE::TD_NONE,
  379. "Unhandled case in FromProtoEnum<types::ZoneHatchBorderMode>" );
  380. }
  381. }
  382. template<>
  383. types::DimensionTextBorderStyle ToProtoEnum( DIM_TEXT_BORDER aValue )
  384. {
  385. switch( aValue )
  386. {
  387. case DIM_TEXT_BORDER::NONE: return types::DimensionTextBorderStyle::DTBS_NONE;
  388. case DIM_TEXT_BORDER::RECTANGLE: return types::DimensionTextBorderStyle::DTBS_RECTANGLE;
  389. case DIM_TEXT_BORDER::CIRCLE: return types::DimensionTextBorderStyle::DTBS_CIRCLE;
  390. case DIM_TEXT_BORDER::ROUNDRECT: return types::DimensionTextBorderStyle::DTBS_ROUNDRECT;
  391. default:
  392. wxCHECK_MSG( false, types::DimensionTextBorderStyle::DTBS_UNKNOWN,
  393. "Unhandled case in ToProtoEnum<DIM_TEXT_BORDER>");
  394. }
  395. }
  396. template<>
  397. DIM_TEXT_BORDER FromProtoEnum( types::DimensionTextBorderStyle aValue )
  398. {
  399. switch( aValue )
  400. {
  401. case types::DimensionTextBorderStyle::DTBS_UNKNOWN:
  402. case types::DimensionTextBorderStyle::DTBS_NONE: return DIM_TEXT_BORDER::NONE;
  403. case types::DimensionTextBorderStyle::DTBS_RECTANGLE: return DIM_TEXT_BORDER::RECTANGLE;
  404. case types::DimensionTextBorderStyle::DTBS_CIRCLE: return DIM_TEXT_BORDER::CIRCLE;
  405. case types::DimensionTextBorderStyle::DTBS_ROUNDRECT: return DIM_TEXT_BORDER::ROUNDRECT;
  406. default:
  407. wxCHECK_MSG( false, DIM_TEXT_BORDER::NONE,
  408. "Unhandled case in FromProtoEnum<types::DimensionTextBorderStyle>" );
  409. }
  410. }
  411. template<>
  412. types::DimensionUnitFormat ToProtoEnum( DIM_UNITS_FORMAT aValue )
  413. {
  414. switch( aValue )
  415. {
  416. case DIM_UNITS_FORMAT::NO_SUFFIX: return types::DimensionUnitFormat::DUF_NO_SUFFIX;
  417. case DIM_UNITS_FORMAT::BARE_SUFFIX: return types::DimensionUnitFormat::DUF_BARE_SUFFIX;
  418. case DIM_UNITS_FORMAT::PAREN_SUFFIX: return types::DimensionUnitFormat::DUF_PAREN_SUFFIX;
  419. default:
  420. wxCHECK_MSG( false, types::DimensionUnitFormat::DUF_UNKNOWN,
  421. "Unhandled case in ToProtoEnum<DIM_UNITS_FORMAT>");
  422. }
  423. }
  424. template<>
  425. DIM_UNITS_FORMAT FromProtoEnum( types::DimensionUnitFormat aValue )
  426. {
  427. switch( aValue )
  428. {
  429. case types::DimensionUnitFormat::DUF_UNKNOWN:
  430. case types::DimensionUnitFormat::DUF_NO_SUFFIX: return DIM_UNITS_FORMAT::NO_SUFFIX;
  431. case types::DimensionUnitFormat::DUF_BARE_SUFFIX: return DIM_UNITS_FORMAT::BARE_SUFFIX;
  432. case types::DimensionUnitFormat::DUF_PAREN_SUFFIX: return DIM_UNITS_FORMAT::PAREN_SUFFIX;
  433. default:
  434. wxCHECK_MSG( false, DIM_UNITS_FORMAT::NO_SUFFIX,
  435. "Unhandled case in FromProtoEnum<types::DimensionUnitFormat>" );
  436. }
  437. }
  438. template<>
  439. types::DimensionArrowDirection ToProtoEnum( DIM_ARROW_DIRECTION aValue )
  440. {
  441. switch( aValue )
  442. {
  443. case DIM_ARROW_DIRECTION::INWARD: return types::DimensionArrowDirection::DAD_INWARD;
  444. case DIM_ARROW_DIRECTION::OUTWARD: return types::DimensionArrowDirection::DAD_OUTWARD;
  445. default:
  446. wxCHECK_MSG( false, types::DimensionArrowDirection::DAD_UNKNOWN,
  447. "Unhandled case in ToProtoEnum<DIM_ARROW_DIRECTION>");
  448. }
  449. }
  450. template<>
  451. DIM_ARROW_DIRECTION FromProtoEnum( types::DimensionArrowDirection aValue )
  452. {
  453. switch( aValue )
  454. {
  455. case types::DimensionArrowDirection::DAD_INWARD: return DIM_ARROW_DIRECTION::INWARD;
  456. case types::DimensionArrowDirection::DAD_UNKNOWN:
  457. case types::DimensionArrowDirection::DAD_OUTWARD: return DIM_ARROW_DIRECTION::OUTWARD;
  458. default:
  459. wxCHECK_MSG( false, DIM_ARROW_DIRECTION::OUTWARD,
  460. "Unhandled case in FromProtoEnum<types::DimensionArrowDirection>" );
  461. }
  462. }
  463. template<>
  464. types::DimensionPrecision ToProtoEnum( DIM_PRECISION aValue )
  465. {
  466. switch( aValue )
  467. {
  468. case DIM_PRECISION::X: return types::DimensionPrecision::DP_FIXED_0;
  469. case DIM_PRECISION::X_X: return types::DimensionPrecision::DP_FIXED_1;
  470. case DIM_PRECISION::X_XX: return types::DimensionPrecision::DP_FIXED_2;
  471. case DIM_PRECISION::X_XXX: return types::DimensionPrecision::DP_FIXED_3;
  472. case DIM_PRECISION::X_XXXX: return types::DimensionPrecision::DP_FIXED_4;
  473. case DIM_PRECISION::X_XXXXX: return types::DimensionPrecision::DP_FIXED_5;
  474. case DIM_PRECISION::V_VV: return types::DimensionPrecision::DP_SCALED_IN_2;
  475. case DIM_PRECISION::V_VVV: return types::DimensionPrecision::DP_SCALED_IN_3;
  476. case DIM_PRECISION::V_VVVV: return types::DimensionPrecision::DP_SCALED_IN_4;
  477. case DIM_PRECISION::V_VVVVV: return types::DimensionPrecision::DP_SCALED_IN_5;
  478. default:
  479. wxCHECK_MSG( false, types::DimensionPrecision::DP_UNKNOWN,
  480. "Unhandled case in ToProtoEnum<DIM_PRECISION>");
  481. }
  482. }
  483. template<>
  484. DIM_PRECISION FromProtoEnum( types::DimensionPrecision aValue )
  485. {
  486. switch( aValue )
  487. {
  488. case types::DimensionPrecision::DP_FIXED_0: return DIM_PRECISION::X;
  489. case types::DimensionPrecision::DP_FIXED_1: return DIM_PRECISION::X_X;
  490. case types::DimensionPrecision::DP_FIXED_2: return DIM_PRECISION::X_XX;
  491. case types::DimensionPrecision::DP_FIXED_3: return DIM_PRECISION::X_XXX;
  492. case types::DimensionPrecision::DP_FIXED_4: return DIM_PRECISION::X_XXXX;
  493. case types::DimensionPrecision::DP_FIXED_5: return DIM_PRECISION::X_XXXXX;
  494. case types::DimensionPrecision::DP_UNKNOWN:
  495. case types::DimensionPrecision::DP_SCALED_IN_2: return DIM_PRECISION::V_VV;
  496. case types::DimensionPrecision::DP_SCALED_IN_3: return DIM_PRECISION::V_VVV;
  497. case types::DimensionPrecision::DP_SCALED_IN_4: return DIM_PRECISION::V_VVVV;
  498. case types::DimensionPrecision::DP_SCALED_IN_5: return DIM_PRECISION::V_VVVVV;
  499. default:
  500. wxCHECK_MSG( false, DIM_PRECISION::V_VV,
  501. "Unhandled case in FromProtoEnum<types::DimensionPrecision>" );
  502. }
  503. }
  504. template<>
  505. types::DimensionTextPosition ToProtoEnum( DIM_TEXT_POSITION aValue )
  506. {
  507. switch( aValue )
  508. {
  509. case DIM_TEXT_POSITION::OUTSIDE: return types::DimensionTextPosition::DTP_OUTSIDE;
  510. case DIM_TEXT_POSITION::INLINE: return types::DimensionTextPosition::DTP_INLINE;
  511. case DIM_TEXT_POSITION::MANUAL: return types::DimensionTextPosition::DTP_MANUAL;
  512. default:
  513. wxCHECK_MSG( false, types::DimensionTextPosition::DTP_UNKNOWN,
  514. "Unhandled case in ToProtoEnum<DIM_TEXT_POSITION>");
  515. }
  516. }
  517. template<>
  518. DIM_TEXT_POSITION FromProtoEnum( types::DimensionTextPosition aValue )
  519. {
  520. switch( aValue )
  521. {
  522. case types::DimensionTextPosition::DTP_UNKNOWN:
  523. case types::DimensionTextPosition::DTP_OUTSIDE: return DIM_TEXT_POSITION::OUTSIDE;
  524. case types::DimensionTextPosition::DTP_INLINE: return DIM_TEXT_POSITION::INLINE;
  525. case types::DimensionTextPosition::DTP_MANUAL: return DIM_TEXT_POSITION::MANUAL;
  526. default:
  527. wxCHECK_MSG( false, DIM_TEXT_POSITION::OUTSIDE,
  528. "Unhandled case in FromProtoEnum<types::DimensionTextPosition>" );
  529. }
  530. }
  531. template<>
  532. types::DimensionUnit ToProtoEnum( DIM_UNITS_MODE aValue )
  533. {
  534. switch( aValue )
  535. {
  536. case DIM_UNITS_MODE::INCH: return types::DimensionUnit::DU_INCHES;
  537. case DIM_UNITS_MODE::MILS: return types::DimensionUnit::DU_MILS;
  538. case DIM_UNITS_MODE::MM: return types::DimensionUnit::DU_MILLIMETERS;
  539. case DIM_UNITS_MODE::AUTOMATIC: return types::DimensionUnit::DU_AUTOMATIC;
  540. default:
  541. wxCHECK_MSG( false, types::DimensionUnit::DU_UNKNOWN,
  542. "Unhandled case in ToProtoEnum<DIM_UNITS_MODE>");
  543. }
  544. }
  545. template<>
  546. DIM_UNITS_MODE FromProtoEnum( types::DimensionUnit aValue )
  547. {
  548. switch( aValue )
  549. {
  550. case types::DimensionUnit::DU_INCHES: return DIM_UNITS_MODE::INCH;
  551. case types::DimensionUnit::DU_MILS: return DIM_UNITS_MODE::MILS;
  552. case types::DimensionUnit::DU_MILLIMETERS: return DIM_UNITS_MODE::MM;
  553. case types::DimensionUnit::DU_UNKNOWN:
  554. case types::DimensionUnit::DU_AUTOMATIC: return DIM_UNITS_MODE::AUTOMATIC;
  555. default:
  556. wxCHECK_MSG( false, DIM_UNITS_MODE::AUTOMATIC,
  557. "Unhandled case in FromProtoEnum<types::DimensionUnit>" );
  558. }
  559. }
  560. template<>
  561. commands::InactiveLayerDisplayMode ToProtoEnum( HIGH_CONTRAST_MODE aValue )
  562. {
  563. switch( aValue )
  564. {
  565. case HIGH_CONTRAST_MODE::NORMAL: return commands::InactiveLayerDisplayMode::ILDM_NORMAL;
  566. case HIGH_CONTRAST_MODE::DIMMED: return commands::InactiveLayerDisplayMode::ILDM_DIMMED;
  567. case HIGH_CONTRAST_MODE::HIDDEN: return commands::InactiveLayerDisplayMode::ILDM_HIDDEN;
  568. default:
  569. wxCHECK_MSG( false, commands::InactiveLayerDisplayMode::ILDM_NORMAL,
  570. "Unhandled case in ToProtoEnum<HIGH_CONTRAST_MODE>");
  571. }
  572. }
  573. template<>
  574. HIGH_CONTRAST_MODE FromProtoEnum( commands::InactiveLayerDisplayMode aValue )
  575. {
  576. switch( aValue )
  577. {
  578. case commands::InactiveLayerDisplayMode::ILDM_DIMMED: return HIGH_CONTRAST_MODE::DIMMED;
  579. case commands::InactiveLayerDisplayMode::ILDM_HIDDEN: return HIGH_CONTRAST_MODE::HIDDEN;
  580. case commands::InactiveLayerDisplayMode::ILDM_UNKNOWN:
  581. case commands::InactiveLayerDisplayMode::ILDM_NORMAL: return HIGH_CONTRAST_MODE::NORMAL;
  582. default:
  583. wxCHECK_MSG( false, HIGH_CONTRAST_MODE::NORMAL,
  584. "Unhandled case in FromProtoEnum<commands::InactiveLayerDisplayMode>" );
  585. }
  586. }
  587. template<>
  588. commands::NetColorDisplayMode ToProtoEnum( NET_COLOR_MODE aValue )
  589. {
  590. switch( aValue )
  591. {
  592. case NET_COLOR_MODE::ALL: return commands::NetColorDisplayMode::NCDM_ALL;
  593. case NET_COLOR_MODE::RATSNEST: return commands::NetColorDisplayMode::NCDM_RATSNEST;
  594. case NET_COLOR_MODE::OFF: return commands::NetColorDisplayMode::NCDM_OFF;
  595. default:
  596. wxCHECK_MSG( false, commands::NetColorDisplayMode::NCDM_UNKNOWN,
  597. "Unhandled case in ToProtoEnum<NET_COLOR_MODE>");
  598. }
  599. }
  600. template<>
  601. NET_COLOR_MODE FromProtoEnum( commands::NetColorDisplayMode aValue )
  602. {
  603. switch( aValue )
  604. {
  605. case commands::NetColorDisplayMode::NCDM_ALL: return NET_COLOR_MODE::ALL;
  606. case commands::NetColorDisplayMode::NCDM_OFF: return NET_COLOR_MODE::OFF;
  607. case commands::NetColorDisplayMode::NCDM_UNKNOWN:
  608. case commands::NetColorDisplayMode::NCDM_RATSNEST: return NET_COLOR_MODE::RATSNEST;
  609. default:
  610. wxCHECK_MSG( false, NET_COLOR_MODE::RATSNEST,
  611. "Unhandled case in FromProtoEnum<commands::NetColorDisplayMode>" );
  612. }
  613. }
  614. template<>
  615. commands::RatsnestDisplayMode ToProtoEnum( RATSNEST_MODE aValue )
  616. {
  617. switch( aValue )
  618. {
  619. case RATSNEST_MODE::ALL: return commands::RatsnestDisplayMode::RDM_ALL_LAYERS;
  620. case RATSNEST_MODE::VISIBLE: return commands::RatsnestDisplayMode::RDM_VISIBLE_LAYERS;
  621. default:
  622. wxCHECK_MSG( false, commands::RatsnestDisplayMode::RDM_UNKNOWN,
  623. "Unhandled case in ToProtoEnum<RATSNEST_MODE>");
  624. }
  625. }
  626. template<>
  627. RATSNEST_MODE FromProtoEnum( commands::RatsnestDisplayMode aValue )
  628. {
  629. switch( aValue )
  630. {
  631. case commands::RatsnestDisplayMode::RDM_VISIBLE_LAYERS: return RATSNEST_MODE::VISIBLE;
  632. case commands::RatsnestDisplayMode::RDM_UNKNOWN:
  633. case commands::RatsnestDisplayMode::RDM_ALL_LAYERS: return RATSNEST_MODE::ALL;
  634. default:
  635. wxCHECK_MSG( false, RATSNEST_MODE::ALL,
  636. "Unhandled case in FromProtoEnum<commands::RatsnestDisplayMode>" );
  637. }
  638. }
  639. template<>
  640. BoardStackupLayerType ToProtoEnum( BOARD_STACKUP_ITEM_TYPE aValue )
  641. {
  642. switch( aValue )
  643. {
  644. case BS_ITEM_TYPE_UNDEFINED: return BoardStackupLayerType::BSLT_UNDEFINED;
  645. case BS_ITEM_TYPE_COPPER: return BoardStackupLayerType::BSLT_COPPER;
  646. case BS_ITEM_TYPE_DIELECTRIC: return BoardStackupLayerType::BSLT_DIELECTRIC;
  647. case BS_ITEM_TYPE_SOLDERPASTE: return BoardStackupLayerType::BSLT_SOLDERPASTE;
  648. case BS_ITEM_TYPE_SOLDERMASK: return BoardStackupLayerType::BSLT_SOLDERMASK;
  649. case BS_ITEM_TYPE_SILKSCREEN: return BoardStackupLayerType::BSLT_SILKSCREEN;
  650. default:
  651. wxCHECK_MSG( false, BoardStackupLayerType::BSLT_UNKNOWN,
  652. "Unhandled case in ToProtoEnum<BOARD_STACKUP_ITEM_TYPE>");
  653. }
  654. }
  655. template<>
  656. BOARD_STACKUP_ITEM_TYPE FromProtoEnum( BoardStackupLayerType aValue )
  657. {
  658. switch( aValue )
  659. {
  660. case BoardStackupLayerType::BSLT_UNDEFINED: return BS_ITEM_TYPE_UNDEFINED;
  661. case BoardStackupLayerType::BSLT_COPPER: return BS_ITEM_TYPE_COPPER;
  662. case BoardStackupLayerType::BSLT_DIELECTRIC: return BS_ITEM_TYPE_DIELECTRIC;
  663. case BoardStackupLayerType::BSLT_SOLDERPASTE: return BS_ITEM_TYPE_SOLDERPASTE;
  664. case BoardStackupLayerType::BSLT_SOLDERMASK: return BS_ITEM_TYPE_SOLDERMASK;
  665. case BoardStackupLayerType::BSLT_SILKSCREEN: return BS_ITEM_TYPE_SILKSCREEN;
  666. default:
  667. wxCHECK_MSG( false, BS_ITEM_TYPE_UNDEFINED,
  668. "Unhandled case in FromProtoEnum<BoardStackupLayerType>" );
  669. }
  670. }
  671. // Adding something new here? Add it to test_api_enums.cpp!