Browse Source

Fix some issues in STEP exporter

7.0
jean-pierre charras 3 years ago
parent
commit
b8dfbe02ad
  1. 2
      common/jobs/job_export_step.cpp
  2. 10
      pcbnew/exporters/step/kicad2step.cpp
  3. 1
      pcbnew/exporters/step/pcb/base.h
  4. 3
      pcbnew/exporters/step/pcb/oce_utils.cpp

2
common/jobs/job_export_step.cpp

@ -29,6 +29,6 @@ JOB_EXPORT_STEP::JOB_EXPORT_STEP( bool aIsCli ) : JOB( "step", aIsCli )
m_substModels = false;
m_xOrigin = 0.0;
m_yOrigin = 0.0;
m_minDistance = 0.0;
m_minDistance = 0.01; // 0.01 mm is a good value to connect 2 items of the board outlines
m_gui = false;
}

10
pcbnew/exporters/step/kicad2step.cpp

@ -46,6 +46,8 @@
#include <Standard_Version.hxx>
#include <locale_io.h>
#define OCC_VERSION_MIN 0x070500
#if OCC_VERSION_HEX < OCC_VERSION_MIN
@ -240,11 +242,17 @@ int KICAD2STEP::DoRun()
return CLI::EXIT_CODES::ERR_INVALID_OUTPUT_CONFLICT;
}
LOCALE_IO dummy;
wxString outfile = out_fname.GetFullPath();
KICADPCB pcb( fname.GetName() );
pcb.SetOrigin( m_params.m_xOrigin, m_params.m_yOrigin );
pcb.SetMinDistance( m_params.m_minDistance );
// Set the min dist in mm to consider 2 points at the same place
// This is also the tolerance to consider 2 lines or arcs are connected
// A min value (0.001mm) is needed to have closed board outlines
// 0.01 mm is a good value
pcb.SetMinDistance( std::max( m_params.m_minDistance, MIN_ACCEPTABLE_DISTANCE ) );
ReportMessage( wxString::Format( _( "Read file: '%s'\n" ), m_params.m_filename ) );
Message::DefaultMessenger()->RemovePrinters( STANDARD_TYPE( Message_PrinterOStream ) );

1
pcbnew/exporters/step/pcb/base.h

@ -36,6 +36,7 @@
///< Default minimum distance between points to treat them as separate ones (mm)
static constexpr double MIN_DISTANCE = 0.01;
static constexpr double MIN_ACCEPTABLE_DISTANCE = 0.001;
namespace SEXPR
{

3
pcbnew/exporters/step/pcb/oce_utils.cpp

@ -678,6 +678,9 @@ void PCBMODEL::SetBoardColor( double r, double g, double b )
void PCBMODEL::SetMinDistance( double aDistance )
{
// Ensure a minimal value (in mm)
aDistance = std::max( aDistance, MIN_ACCEPTABLE_DISTANCE );
// m_minDistance2 keeps a squared distance value
m_minDistance2 = aDistance * aDistance;
BRepBuilderAPI::Precision( aDistance );

Loading…
Cancel
Save