ADDED: Initial support for importing Solidworks PCB files
This commit is contained in:
parent
9537fd4e45
commit
55c00f1845
|
@ -588,7 +588,7 @@ void OPENGL_RENDER_LIST::DrawAllCameraCulledSubtractLayer( bool aDrawMiddle,
|
|||
|
||||
void OPENGL_RENDER_LIST::ApplyScalePosition( float aZposition, float aZscale )
|
||||
{
|
||||
wxASSERT( aZscale > FLT_EPSILON );
|
||||
wxCHECK2( aZscale > FLT_EPSILON, aZscale = FLT_EPSILON + 1 );
|
||||
|
||||
m_zPositionTransformation = aZposition;
|
||||
m_zScaleTransformation = aZscale;
|
||||
|
|
|
@ -366,6 +366,11 @@ wxString AltiumCircuitMakerPcbFileWildcard()
|
|||
return _( "Altium Circuit Maker PCB files" ) + AddFileExtListToFilter( { "CMPcbDoc" } );
|
||||
}
|
||||
|
||||
wxString SolidworksPcbFileWildcard()
|
||||
{
|
||||
return _( "Solidworks PCB files" ) + AddFileExtListToFilter( { "SWPcbDoc" } );
|
||||
}
|
||||
|
||||
wxString FabmasterPcbFileWildcard()
|
||||
{
|
||||
return _( "Fabmaster PCB files" ) + AddFileExtListToFilter( { "txt", "fab" } );
|
||||
|
|
|
@ -227,6 +227,7 @@ extern wxString CadstarPcbArchiveFileWildcard();
|
|||
extern wxString AltiumDesignerPcbFileWildcard();
|
||||
extern wxString AltiumCircuitStudioPcbFileWildcard();
|
||||
extern wxString AltiumCircuitMakerPcbFileWildcard();
|
||||
extern wxString SolidworksPcbFileWildcard();
|
||||
extern wxString FabmasterPcbFileWildcard();
|
||||
extern wxString PdfFileWildcard();
|
||||
extern wxString PSFileWildcard();
|
||||
|
|
|
@ -117,6 +117,9 @@ bool AskLoadBoardFileName( PCB_EDIT_FRAME* aParent, int* aCtl, wxString* aFileNa
|
|||
// Import Altium Designer board files.
|
||||
{ AltiumDesignerPcbFileWildcard(), IO_MGR::ALTIUM_DESIGNER },
|
||||
|
||||
// Import Solidworks PCB (based on Altium) board files.
|
||||
{ SolidworksPcbFileWildcard(), IO_MGR::SOLIDWORKS_PCB },
|
||||
|
||||
// Import Cadstar PCB Archive board files.
|
||||
{ CadstarPcbArchiveFileWildcard(), IO_MGR::CADSTAR_PCB_ARCHIVE },
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <plugins/altium/altium_circuit_maker_plugin.h>
|
||||
#include <plugins/altium/altium_circuit_studio_plugin.h>
|
||||
#include <plugins/altium/altium_designer_plugin.h>
|
||||
#include <plugins/altium/solidworks_pcb_plugin.h>
|
||||
#include <plugins/cadstar/cadstar_pcb_archive_plugin.h>
|
||||
#include <plugins/fabmaster/fabmaster_plugin.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
|
@ -206,6 +207,9 @@ static IO_MGR::REGISTER_PLUGIN registerAltiumCircuitStudioPlugin( IO_MGR::ALTIUM
|
|||
wxT( "Altium Circuit Studio" ),
|
||||
[]() -> PLUGIN* { return new ALTIUM_CIRCUIT_STUDIO_PLUGIN; } );
|
||||
static IO_MGR::REGISTER_PLUGIN registerAltiumCircuitMakerPlugin( IO_MGR::ALTIUM_CIRCUIT_MAKER,
|
||||
wxT( "Solidworks PCB" ),
|
||||
[]() -> PLUGIN* { return new SOLIDWORKS_PCB_PLUGIN; } );
|
||||
static IO_MGR::REGISTER_PLUGIN registerSolidworksPCBPlugin( IO_MGR::SOLIDWORKS_PCB,
|
||||
wxT( "Altium Circuit Maker" ),
|
||||
[]() -> PLUGIN* { return new ALTIUM_CIRCUIT_MAKER_PLUGIN; } );
|
||||
static IO_MGR::REGISTER_PLUGIN registerCadstarArchivePlugin( IO_MGR::CADSTAR_PCB_ARCHIVE,
|
||||
|
|
|
@ -60,6 +60,7 @@ public:
|
|||
ALTIUM_DESIGNER,
|
||||
ALTIUM_CIRCUIT_STUDIO,
|
||||
ALTIUM_CIRCUIT_MAKER,
|
||||
SOLIDWORKS_PCB,
|
||||
CADSTAR_PCB_ARCHIVE,
|
||||
GEDA_PCB, ///< Geda PCB file formats.
|
||||
// add your type here.
|
||||
|
|
|
@ -8,6 +8,7 @@ set( ALTIUM2PCBNEW_SRCS
|
|||
altium_parser_pcb.cpp
|
||||
altium_pcb.cpp
|
||||
altium_rule_transformer.cpp
|
||||
solidworks_pcb_plugin.cpp
|
||||
)
|
||||
|
||||
add_library( altium2pcbnew STATIC ${ALTIUM2PCBNEW_SRCS} )
|
||||
|
@ -19,3 +20,7 @@ target_link_libraries( altium2pcbnew
|
|||
target_include_directories( altium2pcbnew
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR} )
|
||||
|
||||
target_include_directories( altium2pcbnew PRIVATE
|
||||
$<TARGET_PROPERTY:magic_enum,INTERFACE_INCLUDE_DIRECTORIES>
|
||||
)
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
#include <wx/wfstream.h>
|
||||
#include <wx/zstream.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <magic_enum.hpp>
|
||||
|
||||
|
||||
constexpr double BOLD_FACTOR = 1.75; // CSS font-weight-normal is 400; bold is 700
|
||||
|
@ -500,9 +501,14 @@ void ALTIUM_PCB::Parse( const ALTIUM_COMPOUND_FILE& altiumPcbFi
|
|||
const CFB::COMPOUND_FILE_ENTRY* file = altiumPcbFile.FindStream( mappedFile );
|
||||
|
||||
if( file != nullptr )
|
||||
{
|
||||
fp( altiumPcbFile, file );
|
||||
}
|
||||
else if( isRequired )
|
||||
wxLogError( _( "File not found: '%s'." ), FormatPath( mappedFile ) );
|
||||
{
|
||||
wxLogError( _( "File not found: '%s' for directory '%s'." ), FormatPath( mappedFile ),
|
||||
magic_enum::enum_name( directory ) );
|
||||
}
|
||||
}
|
||||
|
||||
// fixup zone priorities since Altium stores them in the opposite order
|
||||
|
|
|
@ -0,0 +1,135 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <wx/string.h>
|
||||
|
||||
#include <solidworks_pcb_plugin.h>
|
||||
#include <altium_pcb.h>
|
||||
#include "plugins/altium/altium_parser.h"
|
||||
|
||||
#include <board.h>
|
||||
|
||||
#include <compoundfilereader.h>
|
||||
#include <utf.h>
|
||||
|
||||
SOLIDWORKS_PCB_PLUGIN::SOLIDWORKS_PCB_PLUGIN()
|
||||
{
|
||||
m_board = nullptr;
|
||||
m_props = nullptr;
|
||||
}
|
||||
|
||||
|
||||
SOLIDWORKS_PCB_PLUGIN::~SOLIDWORKS_PCB_PLUGIN()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
const wxString SOLIDWORKS_PCB_PLUGIN::PluginName() const
|
||||
{
|
||||
return wxT( "Solidworks PCB" );
|
||||
}
|
||||
|
||||
|
||||
const wxString SOLIDWORKS_PCB_PLUGIN::GetFileExtension() const
|
||||
{
|
||||
return wxT( "SWPcbDoc" );
|
||||
}
|
||||
|
||||
|
||||
BOARD* SOLIDWORKS_PCB_PLUGIN::Load( const wxString& aFileName, BOARD* aAppendToMe,
|
||||
const STRING_UTF8_MAP* aProperties, PROJECT* aProject,
|
||||
PROGRESS_REPORTER* aProgressReporter )
|
||||
{
|
||||
m_props = aProperties;
|
||||
|
||||
m_board = aAppendToMe ? aAppendToMe : new BOARD();
|
||||
|
||||
// Give the filename to the board if it's new
|
||||
if( !aAppendToMe )
|
||||
m_board->SetFileName( aFileName );
|
||||
|
||||
// clang-format off
|
||||
const std::map<ALTIUM_PCB_DIR, std::string> mapping = {
|
||||
{ ALTIUM_PCB_DIR::FILE_HEADER, "FileHeader" },
|
||||
{ ALTIUM_PCB_DIR::ARCS6, "D2864697BB2D411B857EBD69D74447" },
|
||||
{ ALTIUM_PCB_DIR::BOARD6, "21CE7E3D9BFF41679BACA1184CAF54" },
|
||||
{ ALTIUM_PCB_DIR::BOARDREGIONS, "67075A4119214CE4AB174F9B1A9A41" },
|
||||
{ ALTIUM_PCB_DIR::CLASSES6, "1122D4F14A924F9CA5C2060AF370E0" },
|
||||
{ ALTIUM_PCB_DIR::COMPONENTS6, "208CAE8E44BD43D5B3CCA426D9331B" },
|
||||
{ ALTIUM_PCB_DIR::COMPONENTBODIES6, "6DDF94E6CB364893BED31C189F9AF3" },
|
||||
{ ALTIUM_PCB_DIR::DIMENSIONS6, "6148AE8C77B042798B46830E96BB24" },
|
||||
{ ALTIUM_PCB_DIR::FILLS6, "5944DE0E258C41E2B0B382AC964048" },
|
||||
{ ALTIUM_PCB_DIR::MODELS, "874F98A7E25A48EDAD394EB891E503" },
|
||||
{ ALTIUM_PCB_DIR::NETS6, "0201837ACD434D55B34BBC68B75BAB" },
|
||||
{ ALTIUM_PCB_DIR::PADS6, "E4D0C33E25824886ABC7FEEAE7B521" },
|
||||
{ ALTIUM_PCB_DIR::POLYGONS6, "7ABD4252549749DD8DB16804819AC3" },
|
||||
{ ALTIUM_PCB_DIR::REGIONS6, "6B3892541AB94CD999291D590B5C86" }, // probably wrong; in as a placeholder
|
||||
{ ALTIUM_PCB_DIR::RULES6, "7009830ADF65423FA6CCB73A77E710" },
|
||||
{ ALTIUM_PCB_DIR::SHAPEBASEDREGIONS6, "91241C66300E4490965070BA56F6F7" },
|
||||
{ ALTIUM_PCB_DIR::TEXTS6, "4AF3D139533041489C2A57BBF9890D" },
|
||||
{ ALTIUM_PCB_DIR::TRACKS6, "5D0C6E18E16A4BBFAA256C24B79EAE" },
|
||||
{ ALTIUM_PCB_DIR::VIAS6, "2AF5387F097242D3A1095B6FAC3397" },
|
||||
{ ALTIUM_PCB_DIR::WIDESTRINGS6, "9B378679AF85466C8673A41EE46393" }
|
||||
|
||||
/*
|
||||
* Understood but not needed:
|
||||
* 04A8F96E0E4C478C813AE57CACCD0F - Legacy text storage
|
||||
* 01F1BD1AA06E4D6A9D1ABF0BBFF4A4 - Fwd/Back compatibility messages
|
||||
*
|
||||
* Not yet used by KiCad:
|
||||
* 7C01505E39124E67BCCAB1883B8FB7 - Design Rule Checker Options6
|
||||
* 63B31A3709B54882BFA96424906BE8 - EmbeddedFonts6
|
||||
* 8B83C7E94C1D419B9B2D5505479820 - Pin Swap Options6
|
||||
* F78C10230A794F5C93ACB50AC693B2 - Advanced Placer Options6
|
||||
*
|
||||
* No data yet on:
|
||||
* 1C0DB1ED572645BEB65D029D20406C
|
||||
* 2AA5C1C72BF14315A47DD931B84A79
|
||||
* 6468C28D32CC4867AB374091CC8431
|
||||
* 6B3892541AB94CD999291D590B5C86
|
||||
* 8675F4105E444E6D9B2BEE6273769D
|
||||
* B983FCC2B6DE46E0B94006B6393235
|
||||
* D6551D22B6DB44659C3F32F7E1949D
|
||||
*
|
||||
* Not yet identified:
|
||||
* D06DD2E4A51C4A3EA96D9ED8C8F3F3
|
||||
* F9C465994DE840579ED19E820C19C2
|
||||
*
|
||||
* Region-like objects that don't map cleanly (maybe Solidworks sketches?)
|
||||
* 84958494F3F54075975C4E199DB8EB
|
||||
* 2E731D36D1F049428744F0661F3E44
|
||||
*/
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
ALTIUM_COMPOUND_FILE altiumPcbFile( aFileName );
|
||||
|
||||
try
|
||||
{
|
||||
// Parse File
|
||||
ALTIUM_PCB pcb( m_board, aProgressReporter );
|
||||
pcb.Parse( altiumPcbFile, mapping );
|
||||
}
|
||||
catch( CFB::CFBException& exception )
|
||||
{
|
||||
THROW_IO_ERROR( exception.what() );
|
||||
}
|
||||
|
||||
return m_board;
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef KICAD_SOLIDWORKS_PCB_PLUGIN_H
|
||||
#define KICAD_SOLIDWORKS_PCB_PLUGIN_H
|
||||
|
||||
|
||||
#include <io_mgr.h>
|
||||
|
||||
class SOLIDWORKS_PCB_PLUGIN : public PLUGIN
|
||||
{
|
||||
public:
|
||||
const wxString PluginName() const override;
|
||||
|
||||
BOARD* Load( const wxString& aFileName, BOARD* aAppendToMe, const STRING_UTF8_MAP* aProperties,
|
||||
PROJECT* aProject = nullptr,
|
||||
PROGRESS_REPORTER* aProgressReporter = nullptr ) override;
|
||||
|
||||
const wxString GetFileExtension() const override;
|
||||
|
||||
long long GetLibraryTimestamp( const wxString& aLibraryPath ) const override
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
SOLIDWORKS_PCB_PLUGIN();
|
||||
~SOLIDWORKS_PCB_PLUGIN();
|
||||
|
||||
private:
|
||||
const STRING_UTF8_MAP* m_props;
|
||||
BOARD* m_board;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif //KICAD_SOLIDWORKS_PCB_PLUGIN_H
|
Loading…
Reference in New Issue