KiCad PCB EDA Suite
Loading...
Searching...
No Matches
job_export_pcb_3d.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2023 Mark Roszko <[email protected]>
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
22#include <jobs/job_registry.h>
23#include <base_units.h>
24#include <i18n_utility.h>
25
26
29class JOB_PARAM_MM_TO_PCB_IU : public JOB_PARAM<double>
30{
31public:
32 JOB_PARAM_MM_TO_PCB_IU( const std::string& aJsonPath, double* aPtr, double aDefaultMM ) :
33 JOB_PARAM<double>( aJsonPath, aPtr, aDefaultMM )
34 {
35 }
36
37 void FromJson( const nlohmann::json& j ) const override
38 {
39 *m_ptr = j.value( m_jsonPath, m_default ) * pcbIUScale.IU_PER_MM;
40 }
41
42 void ToJson( nlohmann::json& j ) override { j[m_jsonPath] = *m_ptr / pcbIUScale.IU_PER_MM; }
43};
44
67
69{
70 switch( m_Format )
71 {
72 case EXPORTER_STEP_PARAMS::FORMAT::STEP: return wxS( "step" );
73 case EXPORTER_STEP_PARAMS::FORMAT::STEPZ: return wxS( "stpz" );
74 case EXPORTER_STEP_PARAMS::FORMAT::BREP: return wxS( "brep" );
75 case EXPORTER_STEP_PARAMS::FORMAT::XAO: return wxS( "xao" );
76 case EXPORTER_STEP_PARAMS::FORMAT::GLB: return wxS( "glb" );
77 case EXPORTER_STEP_PARAMS::FORMAT::PLY: return wxS( "ply" );
78 case EXPORTER_STEP_PARAMS::FORMAT::STL: return wxS( "stl" );
79 case EXPORTER_STEP_PARAMS::FORMAT::U3D: return wxS( "u3d" );
80 case EXPORTER_STEP_PARAMS::FORMAT::PDF: return wxS( "pdf" );
81 default: return wxEmptyString; // shouldn't happen
82 }
83}
84
85
87{
88 switch( m_Format )
89 {
90 // honestly these names shouldn't be translated since they are mostly industry standard acronyms
91 case EXPORTER_STEP_PARAMS::FORMAT::STEP: return wxS( "STEP" );
92 case EXPORTER_STEP_PARAMS::FORMAT::STEPZ: return wxS( "STPZ" );
93 case EXPORTER_STEP_PARAMS::FORMAT::BREP: return wxS( "BREP" );
94 case EXPORTER_STEP_PARAMS::FORMAT::XAO: return wxS( "XAO" );
95 case EXPORTER_STEP_PARAMS::FORMAT::GLB: return wxS( "Binary GLTF" );
96 case EXPORTER_STEP_PARAMS::FORMAT::PLY: return wxS( "PLY" );
97 case EXPORTER_STEP_PARAMS::FORMAT::STL: return wxS( "STL" );
98 case EXPORTER_STEP_PARAMS::FORMAT::U3D: return wxS( "Universal 3D" );
99 case EXPORTER_STEP_PARAMS::FORMAT::PDF: return wxS( "PDF" );
100 default: return wxEmptyString; // shouldn't happen
101 }
102}
103
104
106 JOB( "3d", false ),
107 m_hasUserOrigin( false ),
108 m_filename(),
111 m_vrmlModelDir( wxEmptyString ),
112 m_vrmlRelativePaths( false )
113{
114 m_params.emplace_back( new JOB_PARAM<bool>( "overwrite", &m_3dparams.m_Overwrite,
115 m_3dparams.m_Overwrite ) );
116 m_params.emplace_back( new JOB_PARAM<bool>( "use_grid_origin", &m_3dparams.m_UseGridOrigin,
117 m_3dparams.m_UseGridOrigin ) );
118 m_params.emplace_back( new JOB_PARAM<bool>( "use_drill_origin", &m_3dparams.m_UseDrillOrigin,
119 m_3dparams.m_UseDrillOrigin ) );
120 m_params.emplace_back( new JOB_PARAM<bool>( "use_defined_origin", &m_3dparams.m_UseDefinedOrigin,
121 m_3dparams.m_UseDefinedOrigin ) );
122 m_params.emplace_back( new JOB_PARAM<bool>( "use_pcb_center_origin", &m_3dparams.m_UsePcbCenterOrigin,
123 m_3dparams.m_UsePcbCenterOrigin ) );
124 m_params.emplace_back( new JOB_PARAM<bool>( "board_only", &m_3dparams.m_BoardOnly,
125 m_3dparams.m_BoardOnly ) );
126 m_params.emplace_back( new JOB_PARAM<bool>( "include_unspecified", &m_3dparams.m_IncludeUnspecified,
127 m_3dparams.m_IncludeUnspecified ) );
128 m_params.emplace_back( new JOB_PARAM<bool>( "include_dnp", &m_3dparams.m_IncludeDNP,
129 m_3dparams.m_IncludeDNP ) );
130 m_params.emplace_back( new JOB_PARAM<bool>( "subst_models", &m_3dparams.m_SubstModels,
131 m_3dparams.m_SubstModels ) );
132 m_params.emplace_back( new JOB_PARAM<bool>( "optimize_step", &m_3dparams.m_OptimizeStep,
133 m_3dparams.m_OptimizeStep ) );
134 m_params.emplace_back( new JOB_PARAM<bool>( "has_user_origin", &m_hasUserOrigin,
135 m_hasUserOrigin ) );
136 m_params.emplace_back( new JOB_PARAM_MM_TO_PCB_IU( "user_origin.x", &m_3dparams.m_Origin.x,
137 m_3dparams.m_Origin.x ) );
138 m_params.emplace_back( new JOB_PARAM_MM_TO_PCB_IU( "user_origin.y", &m_3dparams.m_Origin.y,
139 m_3dparams.m_Origin.y ) );
140 m_params.emplace_back( new JOB_PARAM<double>( "board_outlines_chaining_epsilon",
141 &m_3dparams.m_BoardOutlinesChainingEpsilon,
142 m_3dparams.m_BoardOutlinesChainingEpsilon ) );
143 m_params.emplace_back( new JOB_PARAM<bool>( "cut_vias_in_body", &m_3dparams.m_CutViasInBody,
144 m_3dparams.m_CutViasInBody ) );
145 m_params.emplace_back( new JOB_PARAM<bool>( "export_board_body", &m_3dparams.m_ExportBoardBody,
146 m_3dparams.m_ExportBoardBody ) );
147 m_params.emplace_back( new JOB_PARAM<bool>( "export_components", &m_3dparams.m_ExportComponents,
148 m_3dparams.m_ExportComponents ) );
149 m_params.emplace_back( new JOB_PARAM<bool>( "export_tracks", &m_3dparams.m_ExportTracksVias,
150 m_3dparams.m_ExportTracksVias ) );
151 m_params.emplace_back( new JOB_PARAM<bool>( "export_pads", &m_3dparams.m_ExportPads,
152 m_3dparams.m_ExportPads ) );
153 m_params.emplace_back( new JOB_PARAM<bool>( "export_zones", &m_3dparams.m_ExportZones,
154 m_3dparams.m_ExportZones ) );
155 m_params.emplace_back( new JOB_PARAM<bool>( "export_inner_copper", &m_3dparams.m_ExportInnerCopper,
156 m_3dparams.m_ExportInnerCopper ) );
157 m_params.emplace_back( new JOB_PARAM<bool>( "export_silkscreen", &m_3dparams.m_ExportSilkscreen,
158 m_3dparams.m_ExportSilkscreen ) );
159 m_params.emplace_back( new JOB_PARAM<bool>( "export_soldermask", &m_3dparams.m_ExportSoldermask,
160 m_3dparams.m_ExportSoldermask ) );
161 m_params.emplace_back( new JOB_PARAM<bool>( "fuse_shapes", &m_3dparams.m_FuseShapes,
162 m_3dparams.m_FuseShapes ) );
163 m_params.emplace_back( new JOB_PARAM<bool>( "fill_all_vias", &m_3dparams.m_FillAllVias,
164 m_3dparams.m_FillAllVias ) );
165 m_params.emplace_back( new JOB_PARAM<bool>( "extra_pad_thickness", &m_3dparams.m_ExtraPadThickness,
166 m_3dparams.m_ExtraPadThickness ) );
167 m_params.emplace_back( new JOB_PARAM<wxString>( "net_filter", &m_3dparams.m_NetFilter,
168 m_3dparams.m_NetFilter ) );
169 m_params.emplace_back( new JOB_PARAM<wxString>( "component_filter", &m_3dparams.m_ComponentFilter,
170 m_3dparams.m_ComponentFilter ) );
171 m_params.emplace_back( new JOB_PARAM<wxString>( "vrml_model_dir", &m_vrmlModelDir, m_vrmlModelDir ) );
172 m_params.emplace_back( new JOB_PARAM<bool>( "vrml_relative_paths", &m_vrmlRelativePaths,
174 m_params.emplace_back( new JOB_PARAM<JOB_EXPORT_PCB_3D::VRML_UNITS>( "vrml_units", &m_vrmlUnits,
175 m_vrmlUnits ) );
176 m_params.emplace_back( new JOB_PARAM<JOB_EXPORT_PCB_3D::FORMAT>( "format", &m_format, m_format ) );
177 m_params.emplace_back( new JOB_PARAM<EXPORTER_STEP_PARAMS::FORMAT>( "occt_format", &m_3dparams.m_Format,
178 m_3dparams.m_Format ) );
179 m_params.emplace_back( new JOB_PARAM<wxString>( "variant", &m_variant, m_variant ) );
180}
181
182
184{
185 return _( "3D model export" );
186}
187
188
190{
191 return _( "Export 3D Model Job Settings" );
192}
193
194
212
213REGISTER_JOB( pcb_export_3d, _HKI( "PCB: Export 3D Model" ), KIWAY::FACE_PCB, JOB_EXPORT_PCB_3D );
constexpr EDA_IU_SCALE pcbIUScale
Definition base_units.h:121
wxString GetFormatName() const
wxString GetDefaultExportExtension() const
JOB_EXPORT_PCB_3D::FORMAT m_format
wxString GetSettingsDialogTitle() const override
void SetStepFormat(EXPORTER_STEP_PARAMS::FORMAT aFormat)
wxString GetDefaultDescription() const override
EXPORTER_STEP_PARAMS m_3dparams
Despite the name; also used for other formats.
std::string m_jsonPath
Definition job.h:47
A coordinate held in PCB internal units, as every consumer of EXPORTER_STEP_PARAMS expects,...
JOB_PARAM_MM_TO_PCB_IU(const std::string &aJsonPath, double *aPtr, double aDefaultMM)
void FromJson(const nlohmann::json &j) const override
void ToJson(nlohmann::json &j) override
JOB_PARAM(const std::string &aJsonPath, double *aPtr, double aDefault)
Definition job.h:55
double m_default
Definition job.h:70
double * m_ptr
Definition job.h:69
std::vector< JOB_PARAM_BASE * > m_params
Definition job.h:277
JOB(const std::string &aType, bool aOutputIsDirectory)
Definition job.cpp:26
@ FACE_PCB
pcbnew DSO
Definition kiway.h:348
#define _(s)
Some functions to handle hotkeys in KiCad.
NLOHMANN_JSON_SERIALIZE_ENUM(JOB_EXPORT_PCB_3D::FORMAT, { { JOB_EXPORT_PCB_3D::FORMAT::UNKNOWN, nullptr }, { JOB_EXPORT_PCB_3D::FORMAT::STEPZ, "stpz" }, { JOB_EXPORT_PCB_3D::FORMAT::STEP, "step" }, { JOB_EXPORT_PCB_3D::FORMAT::BREP, "brep" }, { JOB_EXPORT_PCB_3D::FORMAT::GLB, "glb" }, { JOB_EXPORT_PCB_3D::FORMAT::VRML, "vrml" }, { JOB_EXPORT_PCB_3D::FORMAT::XAO, "xao" }, { JOB_EXPORT_PCB_3D::FORMAT::PLY, "ply" }, { JOB_EXPORT_PCB_3D::FORMAT::STL, "stl" }, { JOB_EXPORT_PCB_3D::FORMAT::U3D, "u3d" }, { JOB_EXPORT_PCB_3D::FORMAT::PDF, "pdf" }, }) NLOHMANN_JSON_SERIALIZE_ENUM(JOB_EXPORT_PCB_3D
#define REGISTER_JOB(job_name, title, face, T)
#define _HKI(x)
Definition page_info.cpp:40