25#include <wx/choicdlg.h>
27#include <wx/stdpaths.h>
28#include <wx/process.h>
141 brdFile.SetExt( wxT(
"step" ) );
142 path = brdFile.GetFullPath();
146 wxSizerItem* sizer_item =
bSizerTop->GetItem( 1UL );
147 wxWindow* widget = sizer_item->GetWindow();
152 _(
"Select a STEP export filename" ),
155 wxSize( -1, -1 ), wxFLP_SAVE | wxFLP_USE_TEXTCTRL );
194 tmpStr = wxEmptyString;
199 size_t bad_count = 0;
206 if( model.m_Scale.x != 1.0 ||
207 model.m_Scale.y != 1.0 ||
208 model.m_Scale.z != 1.0 )
210 bad_scales.Append( wxS(
"\n") );
211 bad_scales.Append( model.m_Filename );
220 if( !bad_scales.empty()
221 && !
Pgm().GetCommonSettings()->m_DoNotShowAgain.scaled_3d_models_warning )
223 wxString extendedMsg =
_(
"Non-unity scaled models:" ) + wxT(
"\n" ) + bad_scales;
226 "Model scaling is not reliable for mechanical export." ),
227 _(
"Model Scale Warning" ), wxOK | wxICON_WARNING );
228 msgDlg.SetExtendedMessage( extendedMsg );
234 Pgm().GetCommonSettings()->m_DoNotShowAgain.scaled_3d_models_warning =
true;
298 "Please save the PCB and try again" ) );
339 case 0: tolerance = 0.001;
break;
341 case 1: tolerance = 0.01;
break;
342 case 2: tolerance = 0.1;
break;
355 chainingEpsilon,
nullptr );
359 _(
"Board outline is missing or not closed using %.3f mm tolerance.\n"
360 "Run DRC for a full analysis." ), tolerance ) );
368 msg.Printf(
_(
"File '%s' already exists. Do you want overwrite this file?" ),
371 if( wxMessageBox( msg,
_(
"STEP Export" ), wxYES_NO | wxICON_QUESTION,
this ) == wxNO )
375 wxFileName appK2S( wxStandardPaths::Get().GetExecutablePath() );
378 if( appK2S.GetPath().Find(
"/Contents/Applications/pcbnew.app/Contents/MacOS" ) != wxNOT_FOUND )
380 appK2S.AppendDir( wxT(
".." ) );
381 appK2S.AppendDir( wxT(
".." ) );
382 appK2S.AppendDir( wxT(
".." ) );
383 appK2S.AppendDir( wxT(
".." ) );
384 appK2S.AppendDir( wxT(
"MacOS" ) );
387 if( wxGetEnv( wxT(
"KICAD_RUN_FROM_BUILD_DIR" ),
nullptr ) )
389 appK2S.RemoveLastDir();
390 appK2S.AppendDir(
"kicad" );
394 appK2S.SetName( wxT(
"kicad-cli" ) );
397 wxString cmdK2S = wxT(
"\"" );
398 cmdK2S.Append( appK2S.GetFullPath() );
399 cmdK2S.Append( wxT(
"\"" ) );
401 cmdK2S.Append( wxT(
" pcb" ) );
402 cmdK2S.Append( wxT(
" export" ) );
403 cmdK2S.Append( wxT(
" step" ) );
406 cmdK2S.Append( wxT(
" --no-unspecified" ) );
409 cmdK2S.Append( wxT(
" --no-dnp" ) );
412 cmdK2S.Append( wxT(
" --subst-models" ) );
415 cmdK2S.Append( wxT(
" --export-tracks" ) );
425 wxFAIL_MSG( wxT(
"Unsupported origin option: how did we get here?" ) );
429 cmdK2S.Append( wxT(
" --drill-origin" ) );
433 cmdK2S.Append( wxT(
" --grid-origin" ) );
449 cmdK2S.Append( wxString::Format( wxT(
" --user-origin=%c%.6fx%.6fmm%c" ),
450 quote, xOrg, yOrg, quote ) );
461 cmdK2S.Append( wxString::Format( wxT(
" --user-origin=%c%.6fx%.6fmm%c" ),
462 quote, xOrg, yOrg, quote ) );
469 cmdK2S.Append( wxString::Format( wxT(
" --min-distance=%c%.3fmm%c" ),
470 quote, tolerance, quote ) );
474 cmdK2S.Append( wxString::Format( wxT(
" -f -o %c%s%c" ),
479 cmdK2S.Append( wxString::Format( wxT(
" %c%s%c" ), dblquote,
m_boardPath, dblquote ) );
481 wxLogTrace(
traceKiCad2Step, wxT(
"export step command: %s" ), cmdK2S );
constexpr EDA_IU_SCALE pcbIUScale
BOX2I ComputeBoundingBox(bool aBoardEdgesOnly=false) const
Calculate the bounding box containing all board items (or board edge segments).
FOOTPRINTS & Footprints()
const wxString & GetFileName() const
const Vec GetCenter() const
Class DIALOG_EXPORT_STEP_BASE.
wxStdDialogButtonSizer * m_sdbSizer
wxCheckBox * m_cbExportTracks
wxCheckBox * m_cbSubstModels
TEXT_CTRL_EVAL * m_STEP_Xorg
TEXT_CTRL_EVAL * m_STEP_Yorg
wxRadioButton * m_rbGridOrigin
wxCheckBox * m_cbRemoveUnspecified
wxCheckBox * m_cbOverwriteFile
wxFilePickerCtrl * m_filePickerSTEP
wxCheckBox * m_cbRemoveDNP
wxBoxSizer * bSizerSTEPFile
wxRadioButton * m_rbBoardCenterOrigin
wxChoice * m_choiceTolerance
wxChoice * m_STEP_OrgUnitChoice
wxButton * m_sdbSizerCancel
wxRadioButton * m_rbUserDefinedOrigin
wxRadioButton * m_rbDrillAndPlotOrigin
STEP_ORIGIN_OPTION GetOriginOption()
int GetOrgUnitsChoice() const
@ STEP_ORIGIN_BOARD_CENTER
PCB_EDIT_FRAME * m_parent
void onUpdateXPos(wxUpdateUIEvent &aEvent) override
STEP_ORIGIN_OPTION m_origin
void onExportButton(wxCommandEvent &aEvent) override
DIALOG_EXPORT_STEP(PCB_EDIT_FRAME *aParent, const wxString &aBoardPath)
static int m_toleranceLastChoice
void onUpdateUnits(wxUpdateUIEvent &aEvent) override
bool GetNoUnspecifiedOption()
void onUpdateYPos(wxUpdateUIEvent &aEvent) override
static bool m_exportTracks
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
static wxString GetAutoSaveFilePrefix()
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
bool DoNotShowAgain() const
void DoNotShowCheckbox(wxString file, int line)
Checks the 'do not show again' setting for the dialog.
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
DIALOG_EXPORT_STEP m_ExportStep
PCBNEW_SETTINGS * GetPcbNewSettings() const
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
The main frame for Pcbnew.
void SetLastPath(LAST_PATH_TYPE aType, const wxString &aLastPath)
Set the path of the last file successfully read.
bool doAutoSave() override
Perform auto save when the board has been modified and not saved within the auto save interval.
void OnExportSTEP(wxCommandEvent &event)
Export the current BOARD to a STEP assembly.
wxString GetLastPath(LAST_PATH_TYPE aType)
Get the last path for a particular type.
bool IsContentModified() const override
Get if the current board has been modified but not saved.
Represent a set of closed polygons.
void SetValue(const wxString &aValue) override
Set a new value in evaluator buffer, and display it in the wxTextCtrl.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
This file is part of the common library.
bool BuildBoardPolygonOutlines(BOARD *aBoard, SHAPE_POLY_SET &aOutlines, int aErrorMax, int aChainingEpsilon, OUTLINE_ERROR_HANDLER *aErrorHandler, bool aAllowUseArcsInPolygons)
Extracts the board outlines and build a closed polygon from lines, arcs and circle items on edge cut ...
wxString AddFileExtListToFilter(const std::vector< std::string > &aExts)
Build the wildcard extension file dialog wildcard filter to add to the base message dialog.
const wxChar *const traceKiCad2Step
Flag to enable KiCad2Step debug tracing.
double DoubleValueFromString(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, const wxString &aTextValue, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Function DoubleValueFromString converts aTextValue to a double.
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
std::vector< FAB_LAYER_COLOR > dummy
constexpr double IUTomm(int iu) const
constexpr int mmToIU(double mm) const
wxLogTrace helper definitions.
Definition of file extensions used in Kicad.
#define FN_NORMALIZE_FLAGS
Default flags to pass to wxFileName::Normalize().