/* * Embind bindings for KiCad WASM * Exposes core PCBnew objects to JavaScript * * This provides a foundation for future Pyodide integration. * * Note: GetBoard() is not available when KICAD_SCRIPTING=OFF. * These bindings expose the classes for use when a board reference * is obtained through other means (e.g., from the UI). */ #ifdef __EMSCRIPTEN__ #include #include #include #include #include using namespace emscripten; // Wrapper to return footprints as vector for JS iteration std::vector Board_GetFootprints(BOARD* board) { if (!board) return {}; std::vector result; for (FOOTPRINT* fp : board->Footprints()) { result.push_back(fp); } return result; } // Wrapper to return pads as vector std::vector Footprint_GetPads(FOOTPRINT* fp) { if (!fp) return {}; std::vector result; for (PAD* pad : fp->Pads()) { result.push_back(pad); } return result; } // Wrapper for GetFileName since it returns wxString std::string Board_GetFileName(BOARD* board) { if (!board) return ""; return board->GetFileName().ToStdString(); } // Wrapper for footprint reference std::string Footprint_GetReference(FOOTPRINT* fp) { if (!fp) return ""; return fp->GetReference().ToStdString(); } // Wrapper for footprint value std::string Footprint_GetValue(FOOTPRINT* fp) { if (!fp) return ""; return fp->GetValue().ToStdString(); } // Wrapper for pad number std::string Pad_GetNumber(PAD* pad) { if (!pad) return ""; return pad->GetNumber().ToStdString(); } // Wrapper for pad pin function std::string Pad_GetPinFunction(PAD* pad) { if (!pad) return ""; return pad->GetPinFunction().ToStdString(); } EMSCRIPTEN_BINDINGS(pcbnew) { // Register vector types for iteration register_vector("FootprintVector"); register_vector("PadVector"); // Helper functions that operate on pointers // Note: GetBoard() not available - will be added when Pyodide integration is done function("Board_GetFootprints", &Board_GetFootprints, allow_raw_pointers()); function("Board_GetFileName", &Board_GetFileName, allow_raw_pointers()); function("Footprint_GetPads", &Footprint_GetPads, allow_raw_pointers()); function("Footprint_GetReference", &Footprint_GetReference, allow_raw_pointers()); function("Footprint_GetValue", &Footprint_GetValue, allow_raw_pointers()); function("Pad_GetNumber", &Pad_GetNumber, allow_raw_pointers()); function("Pad_GetPinFunction", &Pad_GetPinFunction, allow_raw_pointers()); } #endif