diff --git a/common/jobs/job_pcb_render.cpp b/common/jobs/job_pcb_render.cpp index a2f01cb8c2..112781a1fb 100644 --- a/common/jobs/job_pcb_render.cpp +++ b/common/jobs/job_pcb_render.cpp @@ -91,6 +91,9 @@ JOB_PCB_RENDER::JOB_PCB_RENDER() : m_params.emplace_back( new JOB_PARAM( "zoom", &m_zoom, m_zoom ) ); m_params.emplace_back( new JOB_PARAM( "perspective", &m_perspective, m_perspective ) ); m_params.emplace_back( new JOB_PARAM( "floor", &m_floor, m_floor ) ); + m_params.emplace_back( new JOB_PARAM( "anti_alias", &m_antiAlias, m_antiAlias ) ); + m_params.emplace_back( new JOB_PARAM( "post_process", &m_postProcess, m_postProcess ) ); + m_params.emplace_back( new JOB_PARAM( "procedural_textures", &m_proceduralTextures, m_proceduralTextures ) ); m_params.emplace_back( new JOB_PARAM( "width", &m_width, m_width ) ); m_params.emplace_back( new JOB_PARAM( "height", &m_height, m_height ) ); diff --git a/common/jobs/job_pcb_render.h b/common/jobs/job_pcb_render.h index b663d617c1..5be03c4c3c 100644 --- a/common/jobs/job_pcb_render.h +++ b/common/jobs/job_pcb_render.h @@ -92,7 +92,10 @@ public: VECTOR3D m_rotation; VECTOR3D m_pan; VECTOR3D m_pivot; + bool m_proceduralTextures = false; bool m_floor = false; + bool m_antiAlias = true; + bool m_postProcess = false; VECTOR3D m_lightTopIntensity; VECTOR3D m_lightBottomIntensity; VECTOR3D m_lightCameraIntensity; diff --git a/pcbnew/dialogs/dialog_render_job.cpp b/pcbnew/dialogs/dialog_render_job.cpp index 656ebec9e6..bf1f633c62 100644 --- a/pcbnew/dialogs/dialog_render_job.cpp +++ b/pcbnew/dialogs/dialog_render_job.cpp @@ -29,12 +29,6 @@ static std::map bgStyleMap = { { JOB_PCB_RENDER::BG_STYLE::TRANSPARENT, _HKI( "Transparent" ) } }; -static std::map qualityMap = { - { JOB_PCB_RENDER::QUALITY::BASIC, _HKI( "Basic" ) }, - { JOB_PCB_RENDER::QUALITY::HIGH, _HKI( "High" ) }, - { JOB_PCB_RENDER::QUALITY::USER, _HKI( "User" ) } -}; - static std::map sideMap = { { JOB_PCB_RENDER::SIDE::BACK, _HKI( "Back" ) }, { JOB_PCB_RENDER::SIDE::BOTTOM, _HKI( "Bottom" ) }, @@ -55,9 +49,6 @@ DIALOG_RENDER_JOB::DIALOG_RENDER_JOB( wxWindow* aParent, JOB_PCB_RENDER* aJob ) for( const auto& [k, name] : bgStyleMap ) m_choiceBgStyle->Append( wxGetTranslation( name ) ); - for( const auto& [k, name] : qualityMap ) - m_choiceQuality->Append( wxGetTranslation( name ) ); - for( const auto& [k, name] : sideMap ) m_choiceSide->Append( wxGetTranslation( name ) ); @@ -107,27 +98,6 @@ void DIALOG_RENDER_JOB::setSelectedSide( JOB_PCB_RENDER::SIDE aSide ) } -JOB_PCB_RENDER::QUALITY DIALOG_RENDER_JOB::getSelectedQuality() -{ - int selIndx = m_choiceQuality->GetSelection(); - auto it = qualityMap.begin(); - std::advance( it, selIndx ); - return it->first; -} - - -void DIALOG_RENDER_JOB::setSelectedQuality( JOB_PCB_RENDER::QUALITY aQuality ) -{ - auto it = qualityMap.find( aQuality ); - - if( it != qualityMap.end() ) - { - int idx = std::distance( qualityMap.begin(), it ); - m_choiceQuality->SetSelection( idx ); - } -} - - JOB_PCB_RENDER::BG_STYLE DIALOG_RENDER_JOB::getSelectedBgStyle() { int selIndx = m_choiceBgStyle->GetSelection(); @@ -154,11 +124,14 @@ bool DIALOG_RENDER_JOB::TransferDataFromWindow() m_job->SetConfiguredOutputPath( m_textCtrlOutputFile->GetValue() ); m_job->m_format = getSelectedFormat(); - m_job->m_quality = getSelectedQuality(); + m_job->m_quality = JOB_PCB_RENDER::QUALITY::USER; m_job->m_bgStyle = getSelectedBgStyle(); m_job->m_side = getSelectedSide(); m_job->m_zoom = m_spinCtrlZoom->GetValue(); - m_job->m_floor = m_cbFloor->GetValue(); + m_job->m_proceduralTextures = m_cbRaytracing_proceduralTextures->GetValue(); + m_job->m_floor = m_cbRaytracing_addFloor->GetValue(); + m_job->m_antiAlias = m_cbRaytracing_antiAliasing->GetValue(); + m_job->m_postProcess = m_cbRaytracing_postProcessing->GetValue(); m_job->m_width = m_spinCtrlWidth->GetValue(); m_job->m_height = m_spinCtrlHeight->GetValue(); @@ -195,11 +168,13 @@ bool DIALOG_RENDER_JOB::TransferDataToWindow() setSelectedFormat( m_job->m_format ); setSelectedBgStyle( m_job->m_bgStyle ); - setSelectedQuality( m_job->m_quality ); setSelectedSide( m_job->m_side ); m_spinCtrlZoom->SetValue( m_job->m_zoom ); m_radioProjection->SetSelection( m_job->m_perspective ? 0 : 1 ); - m_cbFloor->SetValue( m_job->m_floor ); + m_cbRaytracing_proceduralTextures->SetValue( m_job->m_proceduralTextures ); + m_cbRaytracing_addFloor->SetValue( m_job->m_floor ); + m_cbRaytracing_antiAliasing->SetValue( m_job->m_antiAlias ); + m_cbRaytracing_postProcessing->SetValue( m_job->m_postProcess ); int width = m_job->m_width; int height = m_job->m_height; diff --git a/pcbnew/dialogs/dialog_render_job.h b/pcbnew/dialogs/dialog_render_job.h index 0d6b63ffed..c63c7fb6e3 100644 --- a/pcbnew/dialogs/dialog_render_job.h +++ b/pcbnew/dialogs/dialog_render_job.h @@ -37,9 +37,6 @@ public: JOB_PCB_RENDER::SIDE getSelectedSide(); void setSelectedSide( JOB_PCB_RENDER::SIDE aSide ); - JOB_PCB_RENDER::QUALITY getSelectedQuality(); - void setSelectedQuality( JOB_PCB_RENDER::QUALITY aSide ); - JOB_PCB_RENDER::BG_STYLE getSelectedBgStyle(); void setSelectedBgStyle( JOB_PCB_RENDER::BG_STYLE aBgStyle ); diff --git a/pcbnew/dialogs/dialog_render_job_base.cpp b/pcbnew/dialogs/dialog_render_job_base.cpp index faf4ddeef3..aef15df313 100644 --- a/pcbnew/dialogs/dialog_render_job_base.cpp +++ b/pcbnew/dialogs/dialog_render_job_base.cpp @@ -17,22 +17,23 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, bSizerMain = new wxBoxSizer( wxVERTICAL ); wxFlexGridSizer* fgSizerTop; - fgSizerTop = new wxFlexGridSizer( 0, 2, 6, 5 ); + fgSizerTop = new wxFlexGridSizer( 0, 2, 4, 5 ); + fgSizerTop->AddGrowableCol( 1 ); fgSizerTop->SetFlexibleDirection( wxBOTH ); fgSizerTop->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); m_textOutputPath = new wxStaticText( this, wxID_ANY, _("Output file:"), wxDefaultPosition, wxDefaultSize, 0 ); m_textOutputPath->Wrap( -1 ); - fgSizerTop->Add( m_textOutputPath, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT, 5 ); + fgSizerTop->Add( m_textOutputPath, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); m_textCtrlOutputFile = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_textCtrlOutputFile->SetMinSize( wxSize( 350,-1 ) ); - fgSizerTop->Add( m_textCtrlOutputFile, 0, 0, 5 ); + fgSizerTop->Add( m_textCtrlOutputFile, 0, wxEXPAND, 5 ); m_formatLabel = new wxStaticText( this, wxID_ANY, _("Format:"), wxDefaultPosition, wxDefaultSize, 0 ); m_formatLabel->Wrap( -1 ); - fgSizerTop->Add( m_formatLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT, 5 ); + fgSizerTop->Add( m_formatLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); wxArrayString m_choiceFormatChoices; m_choiceFormat = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceFormatChoices, 0 ); @@ -41,7 +42,7 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_dimensionsLabel = new wxStaticText( this, wxID_ANY, _("Dimensions:"), wxDefaultPosition, wxDefaultSize, 0 ); m_dimensionsLabel->Wrap( -1 ); - fgSizerTop->Add( m_dimensionsLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT, 5 ); + fgSizerTop->Add( m_dimensionsLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); wxBoxSizer* bSizer3; bSizer3 = new wxBoxSizer( wxHORIZONTAL ); @@ -67,34 +68,39 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, fgSizerTop->Add( bSizer3, 1, wxEXPAND, 5 ); - m_qualityLabel = new wxStaticText( this, wxID_ANY, _("Quality preset:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_qualityLabel->Wrap( -1 ); - fgSizerTop->Add( m_qualityLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT, 5 ); - - wxArrayString m_choiceQualityChoices; - m_choiceQuality = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceQualityChoices, 0 ); - m_choiceQuality->SetSelection( 0 ); - fgSizerTop->Add( m_choiceQuality, 0, 0, 5 ); - m_backgroundStyleLabel = new wxStaticText( this, wxID_ANY, _("Background style:"), wxDefaultPosition, wxDefaultSize, 0 ); m_backgroundStyleLabel->Wrap( -1 ); - fgSizerTop->Add( m_backgroundStyleLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT, 5 ); + fgSizerTop->Add( m_backgroundStyleLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); wxArrayString m_choiceBgStyleChoices; m_choiceBgStyle = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceBgStyleChoices, 0 ); m_choiceBgStyle->SetSelection( 0 ); fgSizerTop->Add( m_choiceBgStyle, 0, 0, 5 ); - m_staticText15 = new wxStaticText( this, wxID_ANY, _("Zoom:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText15->Wrap( -1 ); - fgSizerTop->Add( m_staticText15, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT, 5 ); - m_spinCtrlZoom = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 1, 0.1 ); - m_spinCtrlZoom->SetDigits( 2 ); - fgSizerTop->Add( m_spinCtrlZoom, 0, 0, 5 ); + bSizerMain->Add( fgSizerTop, 1, wxALL|wxEXPAND, 10 ); + + wxGridSizer* gSizer1; + gSizer1 = new wxGridSizer( 0, 1, 5, 0 ); + + m_cbRaytracing_proceduralTextures = new wxCheckBox( this, wxID_ANY, _("Procedural textures (slow)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_cbRaytracing_proceduralTextures->SetValue(true); + gSizer1->Add( m_cbRaytracing_proceduralTextures, 0, wxRIGHT|wxLEFT, 5 ); + + m_cbRaytracing_addFloor = new wxCheckBox( this, wxID_ANY, _("Add floor (slow)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_cbRaytracing_addFloor->SetValue(true); + gSizer1->Add( m_cbRaytracing_addFloor, 0, wxRIGHT|wxLEFT, 5 ); + + m_cbRaytracing_antiAliasing = new wxCheckBox( this, wxID_ANY, _("Anti-aliasing (slow)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_cbRaytracing_antiAliasing->SetValue(true); + gSizer1->Add( m_cbRaytracing_antiAliasing, 0, wxRIGHT|wxLEFT, 5 ); + + m_cbRaytracing_postProcessing = new wxCheckBox( this, wxID_ANY, _("Screen space ambient occlusions and global illumination reflections (slow)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_cbRaytracing_postProcessing->SetValue(true); + gSizer1->Add( m_cbRaytracing_postProcessing, 0, wxRIGHT|wxLEFT, 5 ); - bSizerMain->Add( fgSizerTop, 1, wxALL|wxEXPAND, 5 ); + bSizerMain->Add( gSizer1, 0, wxBOTTOM|wxRIGHT|wxLEFT, 10 ); wxBoxSizer* bSizerViewProjection; bSizerViewProjection = new wxBoxSizer( wxHORIZONTAL ); @@ -116,11 +122,16 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_choiceSide->SetSelection( 0 ); gbSizer1->Add( m_choiceSide, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), 0, 5 ); - m_cbFloor = new wxCheckBox( sbSizer1->GetStaticBox(), wxID_ANY, _("Add floor"), wxDefaultPosition, wxDefaultSize, 0 ); - gbSizer1->Add( m_cbFloor, wxGBPosition( 1, 0 ), wxGBSpan( 1, 2 ), 0, 5 ); + m_zoomLabel = new wxStaticText( sbSizer1->GetStaticBox(), wxID_ANY, _("Zoom:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_zoomLabel->Wrap( -1 ); + gbSizer1->Add( m_zoomLabel, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_spinCtrlZoom = new wxSpinCtrlDouble( sbSizer1->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 1, 0.1 ); + m_spinCtrlZoom->SetDigits( 2 ); + gbSizer1->Add( m_spinCtrlZoom, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - sbSizer1->Add( gbSizer1, 1, wxALL|wxEXPAND, 5 ); + sbSizer1->Add( gbSizer1, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); bSizerViewProjection->Add( sbSizer1, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 ); @@ -132,7 +143,7 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, bSizerViewProjection->Add( m_radioProjection, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - bSizerMain->Add( bSizerViewProjection, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 ); + bSizerMain->Add( bSizerViewProjection, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); wxStaticBoxSizer* sbSizerPositioning; sbSizerPositioning = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Positioning") ), wxVERTICAL ); @@ -162,7 +173,7 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_labelxx = new wxStaticText( sbSizerPositioning->GetStaticBox(), wxID_ANY, _("Pivot:"), wxDefaultPosition, wxDefaultSize, 0 ); m_labelxx->Wrap( -1 ); - fgSizer2->Add( m_labelxx, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT, 5 ); + fgSizer2->Add( m_labelxx, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); m_spinCtrlPivotX = new wxSpinCtrlDouble( sbSizerPositioning->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -10000, 10000, 0, 1 ); m_spinCtrlPivotX->SetDigits( 3 ); @@ -170,11 +181,11 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_spinCtrlPivotY = new wxSpinCtrlDouble( sbSizerPositioning->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -10000, 10000, 0, 1 ); m_spinCtrlPivotY->SetDigits( 3 ); - fgSizer2->Add( m_spinCtrlPivotY, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer2->Add( m_spinCtrlPivotY, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); m_spinCtrlPivotZ = new wxSpinCtrlDouble( sbSizerPositioning->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -10000, 10000, 0, 1 ); m_spinCtrlPivotZ->SetDigits( 3 ); - fgSizer2->Add( m_spinCtrlPivotZ, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer2->Add( m_spinCtrlPivotZ, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); m_labelMM1 = new wxStaticText( sbSizerPositioning->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 ); m_labelMM1->Wrap( -1 ); @@ -182,7 +193,7 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_labelxx2 = new wxStaticText( sbSizerPositioning->GetStaticBox(), wxID_ANY, _("Pan:"), wxDefaultPosition, wxDefaultSize, 0 ); m_labelxx2->Wrap( -1 ); - fgSizer2->Add( m_labelxx2, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT, 5 ); + fgSizer2->Add( m_labelxx2, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); m_spinCtrlPanX = new wxSpinCtrlDouble( sbSizerPositioning->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -10000, 10000, 0, 1 ); m_spinCtrlPanX->SetDigits( 3 ); @@ -190,11 +201,11 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_spinCtrlPanY = new wxSpinCtrlDouble( sbSizerPositioning->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -10000, 10000, 0, 1 ); m_spinCtrlPanY->SetDigits( 3 ); - fgSizer2->Add( m_spinCtrlPanY, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer2->Add( m_spinCtrlPanY, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); m_spinCtrlPanZ = new wxSpinCtrlDouble( sbSizerPositioning->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -10000, 10000, 0, 1 ); m_spinCtrlPanZ->SetDigits( 3 ); - fgSizer2->Add( m_spinCtrlPanZ, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer2->Add( m_spinCtrlPanZ, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); m_labelMM2 = new wxStaticText( sbSizerPositioning->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 ); m_labelMM2->Wrap( -1 ); @@ -202,7 +213,7 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_labelxx21 = new wxStaticText( sbSizerPositioning->GetStaticBox(), wxID_ANY, _("Rotation:"), wxDefaultPosition, wxDefaultSize, 0 ); m_labelxx21->Wrap( -1 ); - fgSizer2->Add( m_labelxx21, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT, 5 ); + fgSizer2->Add( m_labelxx21, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); m_spinCtrlRotX = new wxSpinCtrlDouble( sbSizerPositioning->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -10000, 10000, 0, 1 ); m_spinCtrlRotX->SetDigits( 3 ); @@ -210,27 +221,27 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_spinCtrlRotY = new wxSpinCtrlDouble( sbSizerPositioning->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -10000, 10000, 0, 1 ); m_spinCtrlRotY->SetDigits( 3 ); - fgSizer2->Add( m_spinCtrlRotY, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer2->Add( m_spinCtrlRotY, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); m_spinCtrlRotZ = new wxSpinCtrlDouble( sbSizerPositioning->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -10000, 10000, 0, 1 ); m_spinCtrlRotZ->SetDigits( 3 ); - fgSizer2->Add( m_spinCtrlRotZ, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer2->Add( m_spinCtrlRotZ, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); m_labelDeg1 = new wxStaticText( sbSizerPositioning->GetStaticBox(), wxID_ANY, _("°"), wxDefaultPosition, wxDefaultSize, 0 ); m_labelDeg1->Wrap( -1 ); fgSizer2->Add( m_labelDeg1, 0, wxALIGN_CENTER_VERTICAL, 5 ); - sbSizerPositioning->Add( fgSizer2, 1, wxALL|wxEXPAND, 5 ); + sbSizerPositioning->Add( fgSizer2, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizerMain->Add( sbSizerPositioning, 0, wxALL|wxEXPAND, 5 ); + bSizerMain->Add( sbSizerPositioning, 0, wxALL|wxEXPAND, 10 ); wxBoxSizer* bSizerLights; bSizerLights = new wxBoxSizer( wxHORIZONTAL ); wxStaticBoxSizer* sbSizerLightsIntensity; - sbSizerLightsIntensity = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Lights intensity") ), wxVERTICAL ); + sbSizerLightsIntensity = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Lights Intensity") ), wxVERTICAL ); wxGridBagSizer* gbSizer11; gbSizer11 = new wxGridBagSizer( 5, 5 ); @@ -239,7 +250,7 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_TopLabel = new wxStaticText( sbSizerLightsIntensity->GetStaticBox(), wxID_ANY, _("Top:"), wxDefaultPosition, wxDefaultSize, 0 ); m_TopLabel->Wrap( -1 ); - gbSizer11->Add( m_TopLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + gbSizer11->Add( m_TopLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); m_spinCtrlLightsTop = new wxSpinCtrlDouble( sbSizerLightsIntensity->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 1, 0, 0.1 ); m_spinCtrlLightsTop->SetDigits( 2 ); @@ -247,7 +258,7 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_bottomLabel = new wxStaticText( sbSizerLightsIntensity->GetStaticBox(), wxID_ANY, _("Bottom:"), wxDefaultPosition, wxDefaultSize, 0 ); m_bottomLabel->Wrap( -1 ); - gbSizer11->Add( m_bottomLabel, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT, 5 ); + gbSizer11->Add( m_bottomLabel, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 10 ); m_spinCtrlLightsBottom = new wxSpinCtrlDouble( sbSizerLightsIntensity->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 1, 0, 0.1 ); m_spinCtrlLightsBottom->SetDigits( 2 ); @@ -255,7 +266,7 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_sidesLabel = new wxStaticText( sbSizerLightsIntensity->GetStaticBox(), wxID_ANY, _("Side:"), wxDefaultPosition, wxDefaultSize, 0 ); m_sidesLabel->Wrap( -1 ); - gbSizer11->Add( m_sidesLabel, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT, 5 ); + gbSizer11->Add( m_sidesLabel, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); m_spinCtrlLightsSides = new wxSpinCtrlDouble( sbSizerLightsIntensity->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 1, 0.5, 0.1 ); m_spinCtrlLightsSides->SetDigits( 2 ); @@ -263,7 +274,7 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, m_cameraLabel = new wxStaticText( sbSizerLightsIntensity->GetStaticBox(), wxID_ANY, _("Camera:"), wxDefaultPosition, wxDefaultSize, 0 ); m_cameraLabel->Wrap( -1 ); - gbSizer11->Add( m_cameraLabel, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + gbSizer11->Add( m_cameraLabel, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 10 ); m_spinCtrlLightsCamera = new wxSpinCtrlDouble( sbSizerLightsIntensity->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 1, 0, 0.1 ); m_spinCtrlLightsCamera->SetDigits( 2 ); @@ -273,13 +284,13 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, gbSizer11->AddGrowableCol( 1 ); gbSizer11->AddGrowableCol( 3 ); - sbSizerLightsIntensity->Add( gbSizer11, 1, wxALL|wxEXPAND, 5 ); + sbSizerLightsIntensity->Add( gbSizer11, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); bSizerLights->Add( sbSizerLightsIntensity, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 ); wxStaticBoxSizer* sbSizerLightsPosition; - sbSizerLightsPosition = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Lights position") ), wxVERTICAL ); + sbSizerLightsPosition = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Lights Position") ), wxVERTICAL ); wxFlexGridSizer* fgSizer3; fgSizer3 = new wxFlexGridSizer( 0, 3, 5, 5 ); @@ -299,13 +310,13 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, fgSizer3->Add( m_labelDegrees, 0, wxALIGN_CENTER_VERTICAL, 5 ); - sbSizerLightsPosition->Add( fgSizer3, 1, wxALL|wxEXPAND, 5 ); + sbSizerLightsPosition->Add( fgSizer3, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizerLights->Add( sbSizerLightsPosition, 1, wxEXPAND, 5 ); + bSizerLights->Add( sbSizerLightsPosition, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - bSizerMain->Add( bSizerLights, 0, wxEXPAND, 5 ); + bSizerMain->Add( bSizerLights, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); m_sdbSizer1 = new wxStdDialogButtonSizer(); m_sdbSizer1OK = new wxButton( this, wxID_OK ); @@ -325,7 +336,6 @@ DIALOG_RENDER_JOB_BASE::DIALOG_RENDER_JOB_BASE( wxWindow* parent, wxWindowID id, // Connect Events m_choiceFormat->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_RENDER_JOB_BASE::OnFormatChoice ), NULL, this ); - m_choiceQuality->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_RENDER_JOB_BASE::OnFormatChoice ), NULL, this ); m_choiceBgStyle->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_RENDER_JOB_BASE::OnFormatChoice ), NULL, this ); m_choiceSide->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_RENDER_JOB_BASE::OnFormatChoice ), NULL, this ); } @@ -334,7 +344,6 @@ DIALOG_RENDER_JOB_BASE::~DIALOG_RENDER_JOB_BASE() { // Disconnect Events m_choiceFormat->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_RENDER_JOB_BASE::OnFormatChoice ), NULL, this ); - m_choiceQuality->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_RENDER_JOB_BASE::OnFormatChoice ), NULL, this ); m_choiceBgStyle->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_RENDER_JOB_BASE::OnFormatChoice ), NULL, this ); m_choiceSide->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_RENDER_JOB_BASE::OnFormatChoice ), NULL, this ); diff --git a/pcbnew/dialogs/dialog_render_job_base.fbp b/pcbnew/dialogs/dialog_render_job_base.fbp index 55290a7ee9..45a3bb5451 100644 --- a/pcbnew/dialogs/dialog_render_job_base.fbp +++ b/pcbnew/dialogs/dialog_render_job_base.fbp @@ -65,13 +65,13 @@ wxVERTICAL none - 5 + 10 wxALL|wxEXPAND 1 - + 2 wxBOTH - + 1 5 @@ -79,10 +79,10 @@ wxFLEX_GROWMODE_SPECIFIED none 0 - 6 + 4 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -144,7 +144,7 @@ 5 - + wxEXPAND 0 1 @@ -209,7 +209,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -337,7 +337,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -722,135 +722,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - 0 - - 0 - 0 - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 0 - 1 - - 1 - - 0 - 0 - wxID_ANY - Quality preset: - 0 - - 0 - - - 0 - - 1 - m_qualityLabel - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - - - -1 - - - - 5 - - 0 - - 1 - 1 - 1 - 1 - 0 - - 0 - 0 - - - - 1 - 0 - - 1 - - 1 - 0 - Dock - 0 - Left - 0 - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - - 0 - - 1 - m_choiceQuality - 1 - - - protected - 1 - - Resizable - 0 - 1 - - - ; ; forward_declare - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - OnFormatChoice - - - - 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -976,11 +848,25 @@ OnFormatChoice - + + + + 10 + wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 0 + + gSizer1 + none + 0 + 5 + 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT + wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -994,6 +880,7 @@ 1 0 + 1 1 1 @@ -1009,8 +896,7 @@ 0 0 wxID_ANY - Zoom: - 0 + Procedural textures (slow) 0 @@ -1018,7 +904,7 @@ 0 1 - m_staticText15 + m_cbRaytracing_proceduralTextures 1 @@ -1029,20 +915,23 @@ 1 - ; ; forward_declare + 0 + + wxFILTER_NONE + wxDefaultValidator + - -1 - + 5 - + wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -1056,11 +945,11 @@ 1 0 + 1 1 1 0 - 2 Dock 0 Left @@ -1072,18 +961,15 @@ 0 0 wxID_ANY - 0.1 - 1 - 100 + Add floor (slow) 0 - 0 0 1 - m_spinCtrlZoom + m_cbRaytracing_addFloor 1 @@ -1093,11 +979,144 @@ Resizable 1 - wxSP_ARROW_KEYS - ; ; forward_declare + + 0 - + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + + + + 1 + 0 + 1 + 1 + + 1 + 0 + Dock + 0 + Left + 0 + 1 + + 1 + + 0 + 0 + wxID_ANY + Anti-aliasing (slow) + + 0 + + + 0 + + 1 + m_cbRaytracing_antiAliasing + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + + + + 1 + 0 + 1 + 1 + + 1 + 0 + Dock + 0 + Left + 0 + 1 + + 1 + + 0 + 0 + wxID_ANY + Screen space ambient occlusions and global illumination reflections (slow) + + 0 + + + 0 + + 1 + m_cbRaytracing_postProcessing + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + @@ -1107,7 +1126,7 @@ 5 - wxEXPAND|wxTOP|wxBOTTOM + wxEXPAND|wxTOP|wxRIGHT|wxLEFT 0 @@ -1128,7 +1147,7 @@ none 5 - wxALL|wxEXPAND + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT 1 @@ -1275,14 +1294,14 @@ OnFormatChoice - + 5 - 2 + 1 0 - + wxALIGN_CENTER_VERTICAL|wxRIGHT 1 1 - + 1 1 1 @@ -1296,7 +1315,6 @@ 1 0 - 0 1 1 @@ -1312,7 +1330,8 @@ 0 0 wxID_ANY - Add floor + Zoom: + 0 0 @@ -1320,7 +1339,7 @@ 0 1 - m_cbFloor + m_zoomLabel 1 @@ -1334,10 +1353,75 @@ ; ; forward_declare 0 - - wxFILTER_NONE - wxDefaultValidator - + + + + -1 + + + + 5 + 1 + 1 + wxEXPAND|wxALIGN_CENTER_VERTICAL + 1 + 1 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + + + + 1 + 0 + 1 + + 1 + 0 + 2 + Dock + 0 + Left + 0 + 1 + + 1 + + 0 + 0 + wxID_ANY + 0.1 + 1 + 100 + + 0 + + 0 + + 0 + + 1 + m_spinCtrlZoom + 1 + + + protected + 1 + + Resizable + 1 + + wxSP_ARROW_KEYS + ; ; forward_declare + 0 + + @@ -1417,7 +1501,7 @@ - 5 + 10 wxALL|wxEXPAND 0 @@ -1430,7 +1514,7 @@ none 5 - wxALL|wxEXPAND + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT 1 5 @@ -1652,7 +1736,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT + wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 @@ -1779,7 +1863,7 @@ 5 - wxALIGN_CENTER_VERTICAL + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -1844,7 +1928,7 @@ 5 - wxALIGN_CENTER_VERTICAL + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -1971,7 +2055,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT + wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 @@ -2098,7 +2182,7 @@ 5 - wxALIGN_CENTER_VERTICAL + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -2163,7 +2247,7 @@ 5 - wxALIGN_CENTER_VERTICAL + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -2290,7 +2374,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT + wxALIGN_CENTER_VERTICAL|wxRIGHT 0 1 @@ -2417,7 +2501,7 @@ 5 - wxALIGN_CENTER_VERTICAL + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -2482,7 +2566,7 @@ 5 - wxALIGN_CENTER_VERTICAL + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -2613,7 +2697,7 @@ 5 - wxEXPAND + wxEXPAND|wxRIGHT|wxLEFT 0 @@ -2626,7 +2710,7 @@ 1 wxID_ANY - Lights intensity + Lights Intensity sbSizerLightsIntensity wxVERTICAL @@ -2634,7 +2718,7 @@ none 5 - wxALL|wxEXPAND + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT 1 @@ -2651,7 +2735,7 @@ 5 1 0 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + wxALIGN_CENTER_VERTICAL 0 1 @@ -2781,10 +2865,10 @@ - 5 + 10 1 2 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxLEFT 0 1 @@ -2917,7 +3001,7 @@ 5 1 0 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL 1 1 @@ -3047,10 +3131,10 @@ - 5 + 10 1 2 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + wxALIGN_CENTER_VERTICAL|wxLEFT 1 1 @@ -3185,11 +3269,11 @@ 5 - wxEXPAND + wxEXPAND|wxRIGHT|wxLEFT 1 wxID_ANY - Lights position + Lights Position sbSizerLightsPosition wxVERTICAL @@ -3197,7 +3281,7 @@ none 5 - wxALL|wxEXPAND + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT 1 3 diff --git a/pcbnew/dialogs/dialog_render_job_base.h b/pcbnew/dialogs/dialog_render_job_base.h index f23a5cc55e..9b30b6c28f 100644 --- a/pcbnew/dialogs/dialog_render_job_base.h +++ b/pcbnew/dialogs/dialog_render_job_base.h @@ -48,15 +48,16 @@ class DIALOG_RENDER_JOB_BASE : public DIALOG_SHIM wxStaticText* m_staticText19; wxSpinCtrl* m_spinCtrlHeight; wxStaticText* m_staticText182; - wxStaticText* m_qualityLabel; - wxChoice* m_choiceQuality; wxStaticText* m_backgroundStyleLabel; wxChoice* m_choiceBgStyle; - wxStaticText* m_staticText15; - wxSpinCtrlDouble* m_spinCtrlZoom; + wxCheckBox* m_cbRaytracing_proceduralTextures; + wxCheckBox* m_cbRaytracing_addFloor; + wxCheckBox* m_cbRaytracing_antiAliasing; + wxCheckBox* m_cbRaytracing_postProcessing; wxStaticText* m_sideLabel; wxChoice* m_choiceSide; - wxCheckBox* m_cbFloor; + wxStaticText* m_zoomLabel; + wxSpinCtrlDouble* m_spinCtrlZoom; wxRadioBox* m_radioProjection; wxStaticText* m_labelX; wxStaticText* m_labelY; diff --git a/pcbnew/pcbnew_jobs_handler.cpp b/pcbnew/pcbnew_jobs_handler.cpp index 6db1e1bbf4..33f581c849 100644 --- a/pcbnew/pcbnew_jobs_handler.cpp +++ b/pcbnew/pcbnew_jobs_handler.cpp @@ -493,24 +493,12 @@ int PCBNEW_JOBS_HANDLER::JobExportStep( JOB* aJob ) switch( aStepJob->m_format ) { - case JOB_EXPORT_PCB_3D::FORMAT::STEP: - params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::STEP; - break; - case JOB_EXPORT_PCB_3D::FORMAT::BREP: - params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::BREP; - break; - case JOB_EXPORT_PCB_3D::FORMAT::XAO: - params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::XAO; - break; - case JOB_EXPORT_PCB_3D::FORMAT::GLB: - params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::GLB; - break; - case JOB_EXPORT_PCB_3D::FORMAT::PLY: - params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::PLY; - break; - case JOB_EXPORT_PCB_3D::FORMAT::STL: - params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::STL; - break; + case JOB_EXPORT_PCB_3D::FORMAT::STEP: params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::STEP; break; + case JOB_EXPORT_PCB_3D::FORMAT::BREP: params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::BREP; break; + case JOB_EXPORT_PCB_3D::FORMAT::XAO: params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::XAO; break; + case JOB_EXPORT_PCB_3D::FORMAT::GLB: params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::GLB; break; + case JOB_EXPORT_PCB_3D::FORMAT::PLY: params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::PLY; break; + case JOB_EXPORT_PCB_3D::FORMAT::STL: params.m_Format = EXPORTER_STEP_PARAMS::FORMAT::STL; break; default: m_reporter->Report( _( "Unknown export format" ), RPT_SEVERITY_ERROR ); return CLI::EXIT_CODES::ERR_UNKNOWN; // shouldnt have gotten here @@ -586,81 +574,87 @@ int PCBNEW_JOBS_HANDLER::JobExportRender( JOB* aJob ) boardAdapter.m_IsBoardView = false; boardAdapter.m_IsPreviewer = true; // Force display 3D models, regardless of 3D viewer options - SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager(); - EDA_3D_VIEWER_SETTINGS* cfg = mgr.GetAppSettings( "3d_viewer" ); + SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager(); + EDA_3D_VIEWER_SETTINGS cfg; + + if( EDA_3D_VIEWER_SETTINGS* userCfg = mgr.GetAppSettings( "3d_viewer" ) ) + { + cfg.m_Render = userCfg->m_Render; + cfg.m_Camera = userCfg->m_Camera; + } if( aRenderJob->m_quality == JOB_PCB_RENDER::QUALITY::BASIC ) { // Silkscreen is pixelated without antialiasing - cfg->m_Render.raytrace_anti_aliasing = true; + cfg.m_Render.raytrace_anti_aliasing = true; - cfg->m_Render.raytrace_backfloor = false; - cfg->m_Render.raytrace_post_processing = false; + cfg.m_Render.raytrace_backfloor = aRenderJob->m_floor; + cfg.m_Render.raytrace_post_processing = aRenderJob->m_floor; - cfg->m_Render.raytrace_procedural_textures = false; - cfg->m_Render.raytrace_reflections = false; - cfg->m_Render.raytrace_shadows = false; + cfg.m_Render.raytrace_procedural_textures = false; + cfg.m_Render.raytrace_reflections = false; + cfg.m_Render.raytrace_shadows = aRenderJob->m_floor; // Better colors - cfg->m_Render.differentiate_plated_copper = true; + cfg.m_Render.differentiate_plated_copper = true; // Tracks below soldermask are not visible without refractions - cfg->m_Render.raytrace_refractions = true; - cfg->m_Render.raytrace_recursivelevel_refractions = 1; + cfg.m_Render.raytrace_refractions = true; + cfg.m_Render.raytrace_recursivelevel_refractions = 1; } else if( aRenderJob->m_quality == JOB_PCB_RENDER::QUALITY::HIGH ) { - cfg->m_Render.raytrace_anti_aliasing = true; - cfg->m_Render.raytrace_backfloor = true; - cfg->m_Render.raytrace_post_processing = true; - cfg->m_Render.raytrace_procedural_textures = true; - cfg->m_Render.raytrace_reflections = true; - cfg->m_Render.raytrace_shadows = true; - cfg->m_Render.raytrace_refractions = true; - cfg->m_Render.differentiate_plated_copper = true; + cfg.m_Render.raytrace_anti_aliasing = true; + cfg.m_Render.raytrace_backfloor = true; + cfg.m_Render.raytrace_post_processing = true; + cfg.m_Render.raytrace_procedural_textures = true; + cfg.m_Render.raytrace_reflections = true; + cfg.m_Render.raytrace_shadows = true; + cfg.m_Render.raytrace_refractions = true; + cfg.m_Render.differentiate_plated_copper = true; } - - if( aRenderJob->m_floor ) + else { - cfg->m_Render.raytrace_backfloor = true; - cfg->m_Render.raytrace_shadows = true; - cfg->m_Render.raytrace_post_processing = true; + cfg.m_Render.raytrace_anti_aliasing = aRenderJob->m_antiAlias; + cfg.m_Render.raytrace_backfloor = aRenderJob->m_floor; + cfg.m_Render.raytrace_post_processing = aRenderJob->m_postProcess; + cfg.m_Render.raytrace_procedural_textures = aRenderJob->m_proceduralTextures; } - cfg->m_Render.raytrace_lightColorTop = COLOR4D(aRenderJob->m_lightTopIntensity.x, + cfg.m_Render.raytrace_lightColorTop = COLOR4D( aRenderJob->m_lightTopIntensity.x, aRenderJob->m_lightTopIntensity.y, - aRenderJob->m_lightTopIntensity.z, 1.0); + aRenderJob->m_lightTopIntensity.z, 1.0 ); - cfg->m_Render.raytrace_lightColorBottom = COLOR4D(aRenderJob->m_lightBottomIntensity.x, + cfg.m_Render.raytrace_lightColorBottom = COLOR4D( aRenderJob->m_lightBottomIntensity.x, aRenderJob->m_lightBottomIntensity.y, - aRenderJob->m_lightBottomIntensity.z, 1.0); + aRenderJob->m_lightBottomIntensity.z, 1.0 ); - cfg->m_Render.raytrace_lightColorCamera = COLOR4D( aRenderJob->m_lightCameraIntensity.x, - aRenderJob->m_lightCameraIntensity.y, - aRenderJob->m_lightCameraIntensity.z, 1.0 ); + cfg.m_Render.raytrace_lightColorCamera = COLOR4D( aRenderJob->m_lightCameraIntensity.x, + aRenderJob->m_lightCameraIntensity.y, + aRenderJob->m_lightCameraIntensity.z, 1.0 ); COLOR4D lightColor( aRenderJob->m_lightSideIntensity.x, aRenderJob->m_lightSideIntensity.y, aRenderJob->m_lightSideIntensity.z, 1.0 ); - cfg->m_Render.raytrace_lightColor = { + cfg.m_Render.raytrace_lightColor = { lightColor, lightColor, lightColor, lightColor, lightColor, lightColor, lightColor, lightColor, }; int sideElevation = aRenderJob->m_lightSideElevation; - cfg->m_Render.raytrace_lightElevation = { + cfg.m_Render.raytrace_lightElevation = { sideElevation, sideElevation, sideElevation, sideElevation, -sideElevation, -sideElevation, -sideElevation, -sideElevation, }; - cfg->m_Render.raytrace_lightAzimuth = { + cfg.m_Render.raytrace_lightAzimuth = { 45, 135, 225, 315, 45, 135, 225, 315, }; - cfg->m_CurrentPreset = aRenderJob->m_colorPreset; - boardAdapter.m_Cfg = cfg; + cfg.m_CurrentPreset = aRenderJob->m_colorPreset; + boardAdapter.m_Cfg = &cfg; if( aRenderJob->m_bgStyle == JOB_PCB_RENDER::BG_STYLE::TRANSPARENT || ( aRenderJob->m_bgStyle == JOB_PCB_RENDER::BG_STYLE::DEFAULT @@ -702,13 +696,11 @@ int PCBNEW_JOBS_HANDLER::JobExportRender( JOB* aJob ) // First redraw resets lookat point to the board center, so set up the camera here camera.ViewCommand_T1( s_viewCmdMap[aRenderJob->m_side] ); - camera.SetLookAtPos_T1( - camera.GetLookAtPos_T1() - + SFVEC3F( aRenderJob->m_pivot.x, aRenderJob->m_pivot.y, aRenderJob->m_pivot.z ) - * cmTo3D ); + camera.SetLookAtPos_T1( camera.GetLookAtPos_T1() + SFVEC3F( aRenderJob->m_pivot.x, + aRenderJob->m_pivot.y, + aRenderJob->m_pivot.z ) * cmTo3D ); - camera.Pan_T1( - SFVEC3F( aRenderJob->m_pan.x, aRenderJob->m_pan.y, aRenderJob->m_pan.z ) ); + camera.Pan_T1( SFVEC3F( aRenderJob->m_pan.x, aRenderJob->m_pan.y, aRenderJob->m_pan.z ) ); camera.Zoom_T1( aRenderJob->m_zoom ); @@ -758,23 +750,20 @@ int PCBNEW_JOBS_HANDLER::JobExportRender( JOB* aJob ) image = image.Mirror( false ); image.SetOption( wxIMAGE_OPTION_QUALITY, 90 ); - image.SaveFile( outPath, - aRenderJob->m_format == JOB_PCB_RENDER::FORMAT::PNG ? wxBITMAP_TYPE_PNG - : wxBITMAP_TYPE_JPEG ); + image.SaveFile( outPath, aRenderJob->m_format == JOB_PCB_RENDER::FORMAT::PNG ? wxBITMAP_TYPE_PNG + : wxBITMAP_TYPE_JPEG ); } if( success ) { - m_reporter->Report( _( "Successfully created 3D render image" ) + wxS( "\n" ), - RPT_SEVERITY_INFO ); + m_reporter->Report( _( "Successfully created 3D render image" ) + wxS( "\n" ), RPT_SEVERITY_INFO ); + return CLI::EXIT_CODES::OK; } else { - m_reporter->Report( _( "Error creating 3D render image" ) + wxS( "\n" ), - RPT_SEVERITY_ERROR ); + m_reporter->Report( _( "Error creating 3D render image" ) + wxS( "\n" ), RPT_SEVERITY_ERROR ); + return CLI::EXIT_CODES::ERR_UNKNOWN; } - - return CLI::EXIT_CODES::OK; }