53 std::vector<FP_3DMODEL>* aParentModelList ) :
55 m_parentFrame( aFrame ),
56 m_previewPane( nullptr ),
59 m_currentCamera( m_trackBallCamera ),
102 wxSpinButton* spinButtonList[] =
109 for( wxSpinButton* button : spinButtonList )
110 button->SetRange(INT_MIN, INT_MAX );
138 catch(
const std::system_error& e )
140 wxLogTrace( wxT(
"KI_TRACE_NAVLIB" ), e.what() );
172 for( wxEventType eventType : { wxEVT_MENU_OPEN, wxEVT_MENU_CLOSE, wxEVT_MENU_HIGHLIGHT } )
178 aFrame->Connect( EDA_EVT_UNITS_CHANGED,
208 wxCHECK_RET(
m_previewPane, wxT(
"Cannot load settings to null canvas" ) );
269 return wxString::Format( wxT(
"%.4f" ),
280 return wxString::Format( wxT(
"%.2f%s" ),
292 aValue /= 25.4 / 1e3;
294 return wxString::Format( wxT(
"%.6f%s" ),
329 xscale->ChangeValue( wxEmptyString );
330 yscale->ChangeValue( wxEmptyString );
331 zscale->ChangeValue( wxEmptyString );
333 xrot->ChangeValue( wxEmptyString );
334 yrot->ChangeValue( wxEmptyString );
335 zrot->ChangeValue( wxEmptyString );
337 xoff->ChangeValue( wxEmptyString );
338 yoff->ChangeValue( wxEmptyString );
339 zoff->ChangeValue( wxEmptyString );
447 wxSpinButton* spinCtrl = (wxSpinButton*) event.GetEventObject();
449 wxTextCtrl * textCtrl =
xscale;
458 if( wxGetMouseState().ShiftDown( ) )
462 textCtrl->GetValue() );
464 curr_value += ( step * aSign );
465 curr_value = std::max( 1/
MAX_SCALE, curr_value );
466 curr_value = std::min( curr_value,
MAX_SCALE );
474 wxSpinButton* spinCtrl = (wxSpinButton*) aEvent.GetEventObject();
475 wxTextCtrl* textCtrl =
xrot;
484 if( wxGetMouseState().ShiftDown( ) )
488 textCtrl->GetValue() );
490 curr_value += ( step * aSign );
500 wxSpinButton* spinCtrl = (wxSpinButton*) event.GetEventObject();
502 wxTextCtrl * textCtrl =
xoff;
511 if( wxGetMouseState().ShiftDown( ) )
518 if( wxGetMouseState().ShiftDown( ) )
523 textCtrl->GetValue() )
526 curr_value_mm += ( step_mm * aSign );
527 curr_value_mm = std::max( -
MAX_OFFSET, curr_value_mm );
528 curr_value_mm = std::min( curr_value_mm,
MAX_OFFSET );
536 wxTextCtrl* textCtrl = (wxTextCtrl*) event.GetEventObject();
540 if( event.ShiftDown( ) )
543 if( event.GetWheelRotation() >= 0 )
547 textCtrl->GetValue() );
550 curr_value = std::max( 1/
MAX_SCALE, curr_value );
551 curr_value = std::min( curr_value,
MAX_SCALE );
559 wxTextCtrl* textCtrl = (wxTextCtrl*) event.GetEventObject();
563 if( event.ShiftDown( ) )
566 if( event.GetWheelRotation() >= 0 )
570 textCtrl->GetValue() );
582 wxTextCtrl* textCtrl = (wxTextCtrl*) event.GetEventObject();
586 if( event.ShiftDown( ) )
593 if( event.ShiftDown( ) )
597 if( event.GetWheelRotation() >= 0 )
601 textCtrl->GetValue() )
604 curr_value_mm += step_mm;
605 curr_value_mm = std::max( -
MAX_OFFSET, curr_value_mm );
606 curr_value_mm = std::min( curr_value_mm,
MAX_OFFSET );
639 m_spaceMouse->SetFocus(
static_cast<bool>( aEvent.GetInt() ) );
656 if( aReloadRequired )
constexpr EDA_IU_SCALE pcbIUScale
constexpr EDA_IU_SCALE unityScale
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap)
#define RANGE_SCALE_3D
This defines the range that all coord will have to be rendered.
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
bool m_IsPreviewer
true if we're in a 3D preview panel, false for the standard 3D viewer
void SetBoard(BOARD *aBoard) noexcept
Set current board to be rendered.
EDA_3D_VIEWER_SETTINGS * m_Cfg
Container for design settings for a BOARD object.
void SetEnabledLayers(LSET aMask)
Change the bit-mask of enabled layers to aMask.
int GetBoardThickness() const
The full thickness of the board including copper and masks.
BOARD_STACKUP & GetStackupDescriptor()
void SetBoardThickness(int aThickness)
void SetParentGroup(PCB_GROUP *aGroup)
Manage layers needed to make a physical board.
void RemoveAll()
Delete all items in list and clear the list.
void BuildDefaultStackupList(const BOARD_DESIGN_SETTINGS *aSettings, int aActiveCopperLayersCount=0)
Create a default stackup, according to the current BOARD_DESIGN_SETTINGS settings.
Information pertinent to a Pcbnew printed circuit board.
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT, bool aSkipConnectivity=false) override
Removes an item from the container.
void SetBoardUse(BOARD_USE aUse)
Set what the board is going to be used for.
void SetProject(PROJECT *aProject, bool aReferenceOnly=false)
Link a board to a given project.
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Dialog helper object to sit in the inheritance tree between wxDialog and any class written by wxFormB...
Implement a canvas based on a wxGLCanvas.
void SetProjectionMode(int aMode)
void SetInfoBar(WX_INFOBAR *aInfoBar)
void SetAnimationEnabled(bool aEnable)
Enable or disable camera animation when switching to a pre-defined view.
void SetEventDispatcher(TOOL_DISPATCHER *aEventDispatcher)
Set a dispatcher that processes events and forwards them to tools.
void ReloadRequest(BOARD *aBoard=nullptr, S3D_CACHE *aCachePointer=nullptr)
void SetMovingSpeedMultiplier(int aMultiplier)
Set the camera animation moving speed multiplier option.
void Request_refresh(bool aRedrawImmediately=true)
Schedule a refresh update of the canvas.
Handle view actions for various 3D canvases.
VECTOR3D m_Offset
3D model offset (mm)
VECTOR3D m_Rotation
3D model rotation (degrees)
VECTOR3D m_Scale
3D model scaling factor (dimensionless)
A mix in class which holds the location of a wxWindow's KIWAY.
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
HOLDER_TYPE GetType() const
static LSET FrontMask()
Return a mask holding all technical layers and the external CU layer on front side.
static LSET BackMask()
Return a mask holding all technical layers and the external CU layer on back side.
static const wxGLAttributes GetAttributesList(ANTIALIASING_MODE aAntiAliasingMode, bool aAlpha=false)
Get a list of attributes to pass to wxGLCanvas.
Class PANEL_PREVIEW_3D_MODEL_BASE.
wxSpinButton * m_spinYrot
wxSpinButton * m_spinZrot
STD_BITMAP_BUTTON * m_bpvFront
wxSpinButton * m_spinXscale
wxSpinButton * m_spinYscale
wxSpinButton * m_spinXrot
wxBoxSizer * m_SizerPanelView
wxSpinButton * m_spinZoffset
wxStaticText * m_previewLabel
STD_BITMAP_BUTTON * m_bpvLeft
wxSpinButton * m_spinXoffset
wxSpinButton * m_spinYoffset
STD_BITMAP_BUTTON * m_bpSettings
STD_BITMAP_BUTTON * m_bpvRight
STD_BITMAP_BUTTON * m_bpvBodyStyle
STD_BITMAP_BUTTON * m_bpvBack
wxSpinButton * m_spinZscale
STD_BITMAP_BUTTON * m_bpUpdate
STD_BITMAP_BUTTON * m_bpvTop
STD_BITMAP_BUTTON * m_bpvISO
STD_BITMAP_BUTTON * m_bpvBottom
wxString formatOffsetValue(double aValue)
void onMouseWheelRot(wxMouseEvent &event) override
void View3DSettings(wxCommandEvent &event) override
void onOpacitySlider(wxCommandEvent &event) override
void setBodyStyleView(wxCommandEvent &event) override
void onMouseWheelScale(wxMouseEvent &event) override
EDA_3D_VIEWER_SETTINGS::RENDER_SETTINGS m_initialRender
true if the board body is show
void UpdateDummyFootprint(bool aRelaodRequired=true)
Copy shapes from the current shape list which are flagged for preview to the copy of footprint that i...
~PANEL_PREVIEW_3D_MODEL()
wxString formatScaleValue(double aValue)
void doIncrementRotation(wxSpinEvent &aEvent, double aSign)
void loadSettings()
Load 3D relevant settings from the user configuration.
void OnMenuEvent(wxMenuEvent &aEvent)
The TOOL_DISPATCHER needs these to work around some issues in wxWidgets where the menu events aren't ...
void onUnitsChanged(wxCommandEvent &aEvent)
void doIncrementOffset(wxSpinEvent &aEvent, double aSign)
BOARD_ADAPTER m_boardAdapter
PANEL_PREVIEW_3D_MODEL(wxWindow *aParent, PCB_BASE_FRAME *aFrame, FOOTPRINT *aFootprint, std::vector< FP_3DMODEL > *aParentModelList)
PCB_BASE_FRAME * m_parentFrame
EDA_3D_CANVAS * m_previewPane
void doIncrementScale(wxSpinEvent &aEvent, double aSign)
void updateOrientation(wxCommandEvent &event) override
It will receive the events from editing the fields.
wxString formatRotationValue(double aValue)
void onMouseWheelOffset(wxMouseEvent &event) override
std::unique_ptr< NL_FOOTPRINT_PROPERTIES_PLUGIN > m_spaceMouse
FOOTPRINT * m_dummyFootprint
void onPanelShownEvent(wxCommandEvent &aEvent)
void SetSelectedModel(int idx)
Set the currently selected index in the model list so that the scale/rotation/offset controls can be ...
std::vector< FP_3DMODEL > * m_parentModelList
EDA_UNITS m_userUnits
Index into m_parentInfoList.
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Return the BOARD_DESIGN_SETTINGS for the open project.
virtual COMMON_SETTINGS * GetCommonSettings() const
virtual SETTINGS_MANAGER & GetSettingsManager() const
static S3D_CACHE * Get3DCacheManager(PROJECT *aProject, bool updateProjDir=false)
Return a pointer to an instance of the 3D cache manager.
T * GetAppSettings(const wxString &aFilename)
Return a handle to the a given settings by type.
EDA_UNITS GetUserUnits() const
A modified version of the wxInfoBar class that allows us to:
An extension of WX_TEXT_ENTRY_DIALOG that uses UNIT_BINDER to request a dimension (e....
int GetValue()
Return the value in internal units.
static constexpr EDA_ANGLE ANGLE_0
KICOMMON_API double DoubleValueFromString(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, const wxString &aTextValue, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Convert aTextValue to a double.
KICOMMON_API wxString GetText(EDA_UNITS aUnits, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Get the units string for a given units type.
KICOMMON_API wxFont GetStatusFont(wxWindow *aWindow)
Declaration of the cogl_att_list class.
static double rotationFromString(const wxString &aValue)
Ensure -MAX_ROTATION <= rotation <= MAX_ROTATION.
#define OFFSET_INCREMENT_MM_FINE
#define OFFSET_INCREMENT_MIL
#define ROTATION_INCREMENT_FINE
#define OFFSET_INCREMENT_MM
#define ROTATION_INCREMENT
#define OFFSET_INCREMENT_MIL_FINE
#define SCALE_INCREMENT_FINE
#define PANEL_PREVIEW_3D_MODEL_ID
PGM_BASE & Pgm()
The global program "get" accessor.
int moving_speed_multiplier
bool use_board_editor_copper_colors
bool show_soldermask_bottom