mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-21 00:21:25 +00:00
Push tool framework base down into TOOL_HOLDER.
This allows us to use it outside of EDA_BASE_FRAMEs (in this case, in PANEL_PREVIEW_3D.)
This commit is contained in:
parent
14788eec94
commit
d69ebfae49
3d-viewer
3d_cache/dialogs
3d_canvas
3d_settings.cpp3d_settings.hcreate_3Dgraphic_brd_items.cppcreate_layer_items.cppcreate_layer_poly.cppeda_3d_canvas.cppeda_3d_canvas.h
3d_rendering
3d_viewer
CMakeLists.txtbitmap2component
common
cvpcb
eeschema
include
kicad
pcb_calculator
pcbnew
@ -4,7 +4,7 @@
|
||||
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
||||
* Copyright (C) 2015 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
* Copyright (C) 2017 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2015-2018 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2015-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
@ -24,8 +24,12 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "panel_prev_model.h"
|
||||
#include "panel_prev_3d.h"
|
||||
#include <3d_canvas/eda_3d_canvas.h>
|
||||
#include <tool/tool_manager.h>
|
||||
#include <tool/tool_dispatcher.h>
|
||||
#include <tools/3d_actions.h>
|
||||
#include <tools/3d_controller.h>
|
||||
#include <base_units.h>
|
||||
#include <bitmaps.h>
|
||||
#include <class_board.h>
|
||||
@ -37,42 +41,11 @@
|
||||
|
||||
|
||||
PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, PCB_BASE_FRAME* aFrame, MODULE* aModule,
|
||||
std::vector<MODULE_3D_SETTINGS> *aParentModelList ) :
|
||||
PANEL_PREV_3D_BASE( aParent, wxID_ANY )
|
||||
std::vector<MODULE_3D_SETTINGS>* aParentModelList ) :
|
||||
PANEL_PREV_3D_BASE( aParent, wxID_ANY )
|
||||
{
|
||||
m_userUnits = aFrame->GetUserUnits();
|
||||
|
||||
initPanel();
|
||||
|
||||
m_parentModelList = aParentModelList;
|
||||
|
||||
m_dummyModule = new MODULE( *aModule );
|
||||
m_dummyBoard->Add( m_dummyModule );
|
||||
|
||||
// Set 3d viewer configuration for preview
|
||||
m_settings3Dviewer = new CINFO3D_VISU();
|
||||
|
||||
// Create the 3D canvas
|
||||
m_previewPane = new EDA_3D_CANVAS( this, COGL_ATT_LIST::GetAttributesList( true ),
|
||||
m_dummyBoard, *m_settings3Dviewer,
|
||||
aFrame->Prj().Get3DCacheManager() );
|
||||
|
||||
loadCommonSettings();
|
||||
|
||||
m_SizerPanelView->Add( m_previewPane, 1, wxEXPAND, 5 );
|
||||
}
|
||||
|
||||
|
||||
PANEL_PREV_3D::~PANEL_PREV_3D()
|
||||
{
|
||||
delete m_settings3Dviewer;
|
||||
delete m_dummyBoard;
|
||||
delete m_previewPane;
|
||||
}
|
||||
|
||||
|
||||
void PANEL_PREV_3D::initPanel()
|
||||
{
|
||||
m_dummyBoard = new BOARD();
|
||||
m_selected = -1;
|
||||
|
||||
@ -100,6 +73,58 @@ void PANEL_PREV_3D::initPanel()
|
||||
|
||||
for( wxSpinButton* button : spinButtonList )
|
||||
button->SetRange(INT_MIN, INT_MAX );
|
||||
|
||||
m_parentModelList = aParentModelList;
|
||||
|
||||
m_dummyModule = new MODULE( *aModule );
|
||||
m_dummyBoard->Add( m_dummyModule );
|
||||
|
||||
// Set 3d viewer configuration for preview
|
||||
m_settings3Dviewer = new EDA_3D_SETTINGS();
|
||||
|
||||
// Create the 3D canvas
|
||||
m_previewPane = new EDA_3D_CANVAS( this, COGL_ATT_LIST::GetAttributesList( true ),
|
||||
m_dummyBoard, *m_settings3Dviewer,
|
||||
aFrame->Prj().Get3DCacheManager() );
|
||||
|
||||
loadCommonSettings();
|
||||
|
||||
// Create the manager
|
||||
m_toolManager = new TOOL_MANAGER;
|
||||
m_toolManager->SetEnvironment( m_dummyBoard, nullptr, nullptr, this );
|
||||
|
||||
m_actions = new EDA_3D_ACTIONS();
|
||||
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
|
||||
m_previewPane->SetEventDispatcher( m_toolDispatcher );
|
||||
|
||||
// Register tools
|
||||
m_toolManager->RegisterTool( new EDA_3D_CONTROLLER );
|
||||
m_toolManager->InitTools();
|
||||
|
||||
// Run the viewer control tool, it is supposed to be always active
|
||||
m_toolManager->InvokeTool( "3DViewer.Control" );
|
||||
|
||||
m_SizerPanelView->Add( m_previewPane, 1, wxEXPAND, 5 );
|
||||
|
||||
for( wxEventType eventType : { wxEVT_MENU_OPEN, wxEVT_MENU_CLOSE, wxEVT_MENU_HIGHLIGHT } )
|
||||
Connect( eventType, wxMenuEventHandler( PANEL_PREV_3D::OnMenuEvent ), NULL, this );
|
||||
}
|
||||
|
||||
|
||||
PANEL_PREV_3D::~PANEL_PREV_3D()
|
||||
{
|
||||
delete m_settings3Dviewer;
|
||||
delete m_dummyBoard;
|
||||
delete m_previewPane;
|
||||
}
|
||||
|
||||
|
||||
void PANEL_PREV_3D::OnMenuEvent( wxMenuEvent& aEvent )
|
||||
{
|
||||
if( !m_toolDispatcher )
|
||||
aEvent.Skip();
|
||||
else
|
||||
m_toolDispatcher->DispatchWxEvent( aEvent );
|
||||
}
|
||||
|
||||
|
||||
@ -127,12 +152,12 @@ static double rotationFromString( const wxString& aValue )
|
||||
|
||||
if( rotation > MAX_ROTATION )
|
||||
{
|
||||
int n = rotation / MAX_ROTATION;
|
||||
int n = KiROUND( rotation / MAX_ROTATION );
|
||||
rotation -= MAX_ROTATION * n;
|
||||
}
|
||||
else if( rotation < -MAX_ROTATION )
|
||||
{
|
||||
int n = -rotation / MAX_ROTATION;
|
||||
int n = KiROUND( -rotation / MAX_ROTATION );
|
||||
rotation += MAX_ROTATION * n;
|
||||
}
|
||||
|
||||
@ -351,6 +376,7 @@ void PANEL_PREV_3D::onMouseWheelOffset( wxMouseEvent& event )
|
||||
if( m_userUnits == EDA_UNITS::INCHES )
|
||||
{
|
||||
step = OFFSET_INCREMENT_MIL/1000.0;
|
||||
|
||||
if( event.ShiftDown( ) )
|
||||
step = OFFSET_INCREMENT_MIL_FINE/1000.0;
|
||||
}
|
||||
@ -372,13 +398,10 @@ void PANEL_PREV_3D::UpdateDummyModule( bool aReloadRequired )
|
||||
{
|
||||
m_dummyModule->Models().clear();
|
||||
|
||||
for( size_t i = 0; i < m_parentModelList->size(); ++i )
|
||||
for( MODULE_3D_SETTINGS& model : *m_parentModelList)
|
||||
{
|
||||
if( m_parentModelList->at( i ).m_Preview )
|
||||
{
|
||||
m_dummyModule->Models().insert( m_dummyModule->Models().end(),
|
||||
m_parentModelList->at( i ) );
|
||||
}
|
||||
if( model.m_Preview )
|
||||
m_dummyModule->Models().push_back( model );
|
||||
}
|
||||
|
||||
if( aReloadRequired )
|
@ -39,7 +39,7 @@
|
||||
#include "panel_prev_3d_base.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <tools_holder.h>
|
||||
#include <3d_canvas/eda_3d_canvas.h>
|
||||
#include <3d_viewer_id.h>
|
||||
|
||||
@ -66,20 +66,20 @@
|
||||
class S3D_CACHE;
|
||||
class FILENAME_RESOLVER;
|
||||
class BOARD;
|
||||
class CINFO3D_VISU;
|
||||
class EDA_3D_SETTINGS;
|
||||
class MODULE;
|
||||
|
||||
class PANEL_PREV_3D: public PANEL_PREV_3D_BASE
|
||||
class PANEL_PREV_3D: public EDA_3D_SETTINGS_HOLDER, public TOOLS_HOLDER, public PANEL_PREV_3D_BASE
|
||||
{
|
||||
public:
|
||||
PANEL_PREV_3D( wxWindow* aParent, PCB_BASE_FRAME* aFrame, MODULE* aModule,
|
||||
std::vector<MODULE_3D_SETTINGS> *aParentModelList );
|
||||
std::vector<MODULE_3D_SETTINGS>* aParentModelList );
|
||||
|
||||
~PANEL_PREV_3D();
|
||||
|
||||
private:
|
||||
EDA_3D_CANVAS* m_previewPane;
|
||||
CINFO3D_VISU* m_settings3Dviewer;
|
||||
EDA_3D_SETTINGS* m_settings3Dviewer;
|
||||
|
||||
BOARD* m_dummyBoard;
|
||||
MODULE* m_dummyModule;
|
||||
@ -91,8 +91,6 @@ private:
|
||||
|
||||
// Methods of the class
|
||||
private:
|
||||
void initPanel();
|
||||
|
||||
/**
|
||||
* Load 3D relevant settings from the user configuration
|
||||
*/
|
||||
@ -184,6 +182,15 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
/**
|
||||
* The TOOL_DISPATCHER needs these to work around some issues in wxWidgets where the menu
|
||||
* events aren't captured by the menus themselves.
|
||||
*/
|
||||
void OnMenuEvent( wxMenuEvent& aEvent );
|
||||
|
||||
wxWindow* GetToolCanvas() const override { return m_previewPane; }
|
||||
EDA_3D_SETTINGS* GetSettings() override { return m_settings3Dviewer; }
|
||||
|
||||
/**
|
||||
* @brief SetModelDataIdx - Sets the currently selected index in the model list so that
|
||||
* the scale/rotation/offset controls can be updated.
|
@ -28,7 +28,7 @@
|
||||
*/
|
||||
|
||||
#include "../3d_rendering/ccamera.h"
|
||||
#include "cinfo3d_visu.h"
|
||||
#include "3d_settings.h"
|
||||
#include <3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.h>
|
||||
#include <class_board.h>
|
||||
#include <3d_math.h>
|
||||
@ -44,17 +44,17 @@
|
||||
* "KI_TRACE_EDA_CINFO3D_VISU". See the wxWidgets documentation on wxLogTrace for
|
||||
* more information.
|
||||
*/
|
||||
const wxChar *CINFO3D_VISU::m_logTrace = wxT( "KI_TRACE_EDA_CINFO3D_VISU" );
|
||||
const wxChar *EDA_3D_SETTINGS::m_logTrace = wxT( "KI_TRACE_EDA_CINFO3D_VISU" );
|
||||
|
||||
|
||||
CINFO3D_VISU G_null_CINFO3D_VISU;
|
||||
EDA_3D_SETTINGS G_null_EDA_3D_SETTINGS;
|
||||
|
||||
|
||||
CINFO3D_VISU::CINFO3D_VISU() :
|
||||
EDA_3D_SETTINGS::EDA_3D_SETTINGS() :
|
||||
m_currentCamera( m_trackBallCamera ),
|
||||
m_trackBallCamera( RANGE_SCALE_3D )
|
||||
{
|
||||
wxLogTrace( m_logTrace, wxT( "CINFO3D_VISU::CINFO3D_VISU" ) );
|
||||
wxLogTrace( m_logTrace, wxT( "EDA_3D_SETTINGS::EDA_3D_SETTINGS" ) );
|
||||
|
||||
m_board = NULL;
|
||||
m_3d_model_manager = NULL;
|
||||
@ -73,8 +73,6 @@ CINFO3D_VISU::CINFO3D_VISU() :
|
||||
|
||||
m_boardBoundingBox.Reset();
|
||||
|
||||
m_layers_container2D.clear();
|
||||
m_layers_holes2D.clear();
|
||||
m_through_holes_inner.Clear();
|
||||
m_through_holes_outer.Clear();
|
||||
|
||||
@ -94,7 +92,6 @@ CINFO3D_VISU::CINFO3D_VISU() :
|
||||
m_calc_seg_min_factor3DU = 0.0f;
|
||||
m_calc_seg_max_factor3DU = 0.0f;
|
||||
|
||||
|
||||
memset( m_layerZcoordTop, 0, sizeof( m_layerZcoordTop ) );
|
||||
memset( m_layerZcoordBottom, 0, sizeof( m_layerZcoordBottom ) );
|
||||
|
||||
@ -122,13 +119,13 @@ CINFO3D_VISU::CINFO3D_VISU() :
|
||||
}
|
||||
|
||||
|
||||
CINFO3D_VISU::~CINFO3D_VISU()
|
||||
EDA_3D_SETTINGS::~EDA_3D_SETTINGS()
|
||||
{
|
||||
destroyLayers();
|
||||
}
|
||||
|
||||
|
||||
bool CINFO3D_VISU::Is3DLayerEnabled( PCB_LAYER_ID aLayer ) const
|
||||
bool EDA_3D_SETTINGS::Is3DLayerEnabled( PCB_LAYER_ID aLayer ) const
|
||||
{
|
||||
wxASSERT( aLayer < PCB_LAYER_ID_COUNT );
|
||||
|
||||
@ -211,7 +208,7 @@ bool CINFO3D_VISU::Is3DLayerEnabled( PCB_LAYER_ID aLayer ) const
|
||||
}
|
||||
|
||||
|
||||
bool CINFO3D_VISU::GetFlag( DISPLAY3D_FLG aFlag ) const
|
||||
bool EDA_3D_SETTINGS::GetFlag( DISPLAY3D_FLG aFlag ) const
|
||||
{
|
||||
wxASSERT( aFlag < FL_LAST );
|
||||
|
||||
@ -219,14 +216,14 @@ bool CINFO3D_VISU::GetFlag( DISPLAY3D_FLG aFlag ) const
|
||||
}
|
||||
|
||||
|
||||
void CINFO3D_VISU::SetFlag( DISPLAY3D_FLG aFlag, bool aState )
|
||||
void EDA_3D_SETTINGS::SetFlag( DISPLAY3D_FLG aFlag, bool aState )
|
||||
{
|
||||
wxASSERT( aFlag < FL_LAST );
|
||||
|
||||
m_drawFlags[aFlag] = aState;
|
||||
}
|
||||
|
||||
bool CINFO3D_VISU::ShouldModuleBeDisplayed( MODULE_ATTR_T aModuleAttributs ) const
|
||||
bool EDA_3D_SETTINGS::ShouldModuleBeDisplayed( MODULE_ATTR_T aModuleAttributs ) const
|
||||
{
|
||||
if( ( ( aModuleAttributs == MOD_DEFAULT ) &&
|
||||
GetFlag( FL_MODULE_ATTRIBUTES_NORMAL ) ) ||
|
||||
@ -246,12 +243,12 @@ bool CINFO3D_VISU::ShouldModuleBeDisplayed( MODULE_ATTR_T aModuleAttributs ) con
|
||||
#define COPPER_THICKNESS KiROUND( 0.035 * IU_PER_MM ) // for 35 um
|
||||
#define TECH_LAYER_THICKNESS KiROUND( 0.04 * IU_PER_MM )
|
||||
|
||||
int CINFO3D_VISU::GetCopperThicknessBIU() const
|
||||
int EDA_3D_SETTINGS::GetCopperThicknessBIU() const
|
||||
{
|
||||
return COPPER_THICKNESS;
|
||||
}
|
||||
|
||||
unsigned int CINFO3D_VISU::GetNrSegmentsCircle( float aDiameter3DU ) const
|
||||
unsigned int EDA_3D_SETTINGS::GetNrSegmentsCircle( float aDiameter3DU ) const
|
||||
{
|
||||
wxASSERT( aDiameter3DU > 0.0f );
|
||||
|
||||
@ -259,7 +256,7 @@ unsigned int CINFO3D_VISU::GetNrSegmentsCircle( float aDiameter3DU ) const
|
||||
}
|
||||
|
||||
|
||||
unsigned int CINFO3D_VISU::GetNrSegmentsCircle( int aDiameterBIU ) const
|
||||
unsigned int EDA_3D_SETTINGS::GetNrSegmentsCircle( int aDiameterBIU ) const
|
||||
{
|
||||
wxASSERT( aDiameterBIU > 0 );
|
||||
|
||||
@ -268,7 +265,7 @@ unsigned int CINFO3D_VISU::GetNrSegmentsCircle( int aDiameterBIU ) const
|
||||
}
|
||||
|
||||
|
||||
double CINFO3D_VISU::GetCircleCorrectionFactor( int aNrSides ) const
|
||||
double EDA_3D_SETTINGS::GetCircleCorrectionFactor( int aNrSides ) const
|
||||
{
|
||||
wxASSERT( aNrSides >= 3 );
|
||||
|
||||
@ -276,9 +273,9 @@ double CINFO3D_VISU::GetCircleCorrectionFactor( int aNrSides ) const
|
||||
}
|
||||
|
||||
|
||||
void CINFO3D_VISU::InitSettings( REPORTER* aStatusTextReporter, REPORTER* aWarningTextReporter )
|
||||
void EDA_3D_SETTINGS::InitSettings( REPORTER* aStatusTextReporter, REPORTER* aWarningTextReporter )
|
||||
{
|
||||
wxLogTrace( m_logTrace, wxT( "CINFO3D_VISU::InitSettings" ) );
|
||||
wxLogTrace( m_logTrace, wxT( "EDA_3D_SETTINGS::InitSettings" ) );
|
||||
|
||||
// Calculates the board bounding box
|
||||
// First, use only the board outlines
|
||||
@ -309,8 +306,7 @@ void CINFO3D_VISU::InitSettings( REPORTER* aStatusTextReporter, REPORTER* aWarni
|
||||
// Calculate the convertion to apply to all positions.
|
||||
m_biuTo3Dunits = RANGE_SCALE_3D / std::max( m_boardSize.x, m_boardSize.y );
|
||||
|
||||
m_epoxyThickness3DU = m_board->GetDesignSettings().GetBoardThickness() *
|
||||
m_biuTo3Dunits;
|
||||
m_epoxyThickness3DU = m_board->GetDesignSettings().GetBoardThickness() * m_biuTo3Dunits;
|
||||
|
||||
// !TODO: use value defined by user (currently use default values by ctor
|
||||
m_copperThickness3DU = COPPER_THICKNESS * m_biuTo3Dunits;
|
||||
@ -450,7 +446,7 @@ void CINFO3D_VISU::InitSettings( REPORTER* aStatusTextReporter, REPORTER* aWarni
|
||||
#ifdef PRINT_STATISTICS_3D_VIEWER
|
||||
unsigned stats_stopCreateLayersTime = GetRunningMicroSecs();
|
||||
|
||||
printf( "CINFO3D_VISU::InitSettings times\n" );
|
||||
printf( "EDA_3D_SETTINGS::InitSettings times\n" );
|
||||
printf( " CreateBoardPoly: %.3f ms\n",
|
||||
(float)( stats_stopCreateBoardPolyTime - stats_startCreateBoardPolyTime ) / 1e3 );
|
||||
printf( " CreateLayers and holes: %.3f ms\n",
|
||||
@ -460,7 +456,7 @@ void CINFO3D_VISU::InitSettings( REPORTER* aStatusTextReporter, REPORTER* aWarni
|
||||
}
|
||||
|
||||
|
||||
bool CINFO3D_VISU::createBoardPolygon()
|
||||
bool EDA_3D_SETTINGS::createBoardPolygon()
|
||||
{
|
||||
m_board_poly.RemoveAllContours();
|
||||
|
||||
@ -470,7 +466,7 @@ bool CINFO3D_VISU::createBoardPolygon()
|
||||
}
|
||||
|
||||
|
||||
float CINFO3D_VISU::GetModulesZcoord3DIU( bool aIsFlipped ) const
|
||||
float EDA_3D_SETTINGS::GetModulesZcoord3DIU( bool aIsFlipped ) const
|
||||
{
|
||||
if( aIsFlipped )
|
||||
{
|
||||
@ -489,23 +485,7 @@ float CINFO3D_VISU::GetModulesZcoord3DIU( bool aIsFlipped ) const
|
||||
}
|
||||
|
||||
|
||||
void CINFO3D_VISU::CameraSetType( CAMERA_TYPE aCameraType )
|
||||
{
|
||||
switch( aCameraType )
|
||||
{
|
||||
case CAMERA_TYPE::TRACKBALL:
|
||||
m_currentCamera = m_trackBallCamera;
|
||||
break;
|
||||
|
||||
default:
|
||||
wxLogMessage( wxT( "CINFO3D_VISU::CameraSetType() error: unknown camera type %d" ),
|
||||
(int)aCameraType );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SFVEC3F CINFO3D_VISU::GetLayerColor( PCB_LAYER_ID aLayerId ) const
|
||||
SFVEC3F EDA_3D_SETTINGS::GetLayerColor( PCB_LAYER_ID aLayerId ) const
|
||||
{
|
||||
wxASSERT( aLayerId < PCB_LAYER_ID_COUNT );
|
||||
|
||||
@ -515,13 +495,13 @@ SFVEC3F CINFO3D_VISU::GetLayerColor( PCB_LAYER_ID aLayerId ) const
|
||||
}
|
||||
|
||||
|
||||
SFVEC3F CINFO3D_VISU::GetItemColor( int aItemId ) const
|
||||
SFVEC3F EDA_3D_SETTINGS::GetItemColor( int aItemId ) const
|
||||
{
|
||||
return GetColor( m_colors->GetColor( aItemId ) );
|
||||
}
|
||||
|
||||
|
||||
SFVEC3F CINFO3D_VISU::GetColor( COLOR4D aColor ) const
|
||||
SFVEC3F EDA_3D_SETTINGS::GetColor( COLOR4D aColor ) const
|
||||
{
|
||||
return SFVEC3F( aColor.r, aColor.g, aColor.b );
|
||||
}
|
@ -22,13 +22,8 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file cinfo3d_visu.h
|
||||
* @brief Handles data related with the board to be visualized
|
||||
*/
|
||||
|
||||
#ifndef CINFO3D_VISU_H
|
||||
#define CINFO3D_VISU_H
|
||||
#ifndef EDA_3D_SETTINGS_H
|
||||
#define EDA_3D_SETTINGS_H
|
||||
|
||||
#include <vector>
|
||||
#include "../3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h"
|
||||
@ -67,16 +62,16 @@ typedef std::map< PCB_LAYER_ID, SHAPE_POLY_SET *> MAP_POLY;
|
||||
|
||||
|
||||
/**
|
||||
* Class CINFO3D_VISU
|
||||
* Class EDA_3D_SETTINGS
|
||||
* Helper class to handle information needed to display 3D board
|
||||
*/
|
||||
class CINFO3D_VISU
|
||||
class EDA_3D_SETTINGS
|
||||
{
|
||||
public:
|
||||
|
||||
CINFO3D_VISU();
|
||||
EDA_3D_SETTINGS();
|
||||
|
||||
~CINFO3D_VISU();
|
||||
~EDA_3D_SETTINGS();
|
||||
|
||||
/**
|
||||
* @brief Set3DCacheManager - Update the Cache manager pointer
|
||||
@ -203,12 +198,6 @@ class CINFO3D_VISU
|
||||
*/
|
||||
float GetModulesZcoord3DIU( bool aIsFlipped ) const ;
|
||||
|
||||
/**
|
||||
* @brief CameraSetType - Set the camera type to use
|
||||
* @param aCameraType: camera type to use in this canvas
|
||||
*/
|
||||
void CameraSetType( CAMERA_TYPE aCameraType );
|
||||
|
||||
/**
|
||||
* @brief CameraGet - get current camera in use
|
||||
* @return a camera
|
||||
@ -283,14 +272,20 @@ class CINFO3D_VISU
|
||||
* @param aLayerId: layer id
|
||||
* @return position in 3D unities
|
||||
*/
|
||||
float GetLayerTopZpos3DU( PCB_LAYER_ID aLayerId ) const { return m_layerZcoordTop[aLayerId]; }
|
||||
float GetLayerTopZpos3DU( PCB_LAYER_ID aLayerId ) const
|
||||
{
|
||||
return m_layerZcoordTop[aLayerId];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GetLayerBottomZpos3DU - Get the bottom z position
|
||||
* @param aLayerId: layer id
|
||||
* @return position in 3D unities
|
||||
*/
|
||||
float GetLayerBottomZpos3DU( PCB_LAYER_ID aLayerId ) const { return m_layerZcoordBottom[aLayerId]; }
|
||||
float GetLayerBottomZpos3DU( PCB_LAYER_ID aLayerId ) const
|
||||
{
|
||||
return m_layerZcoordBottom[aLayerId];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GetMapLayers - Get the map of container that have the objects per layer
|
||||
@ -320,8 +315,10 @@ class CINFO3D_VISU
|
||||
* @brief GetThroughHole_Outer_poly_NPTH -
|
||||
* @return
|
||||
*/
|
||||
const SHAPE_POLY_SET &GetThroughHole_Outer_poly_NPTH() const {
|
||||
return m_through_outer_holes_poly_NPTH; }
|
||||
const SHAPE_POLY_SET &GetThroughHole_Outer_poly_NPTH() const
|
||||
{
|
||||
return m_through_outer_holes_poly_NPTH;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GetThroughHole_Vias_Outer -
|
||||
@ -337,17 +334,19 @@ class CINFO3D_VISU
|
||||
|
||||
/**
|
||||
* @brief GetThroughHole_Vias_Outer_poly -
|
||||
* @return
|
||||
*/
|
||||
const SHAPE_POLY_SET &GetThroughHole_Vias_Outer_poly() const {
|
||||
return m_through_outer_holes_vias_poly; }
|
||||
const SHAPE_POLY_SET &GetThroughHole_Vias_Outer_poly() const
|
||||
{
|
||||
return m_through_outer_holes_vias_poly;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GetThroughHole_Vias_Inner_poly -
|
||||
* @return
|
||||
*/
|
||||
const SHAPE_POLY_SET &GetThroughHole_Vias_Inner_poly() const {
|
||||
return m_through_inner_holes_vias_poly; }
|
||||
const SHAPE_POLY_SET &GetThroughHole_Vias_Inner_poly() const
|
||||
{
|
||||
return m_through_inner_holes_vias_poly;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GetThroughHole_Inner - Get the ThroughHole container
|
||||
@ -680,7 +679,15 @@ private:
|
||||
|
||||
};
|
||||
|
||||
/// This is a dummy visualization configuration
|
||||
extern CINFO3D_VISU G_null_CINFO3D_VISU;
|
||||
|
||||
#endif // CINFO3D_VISU_H
|
||||
/// This is a dummy visualization configuration
|
||||
extern EDA_3D_SETTINGS G_null_EDA_3D_SETTINGS;
|
||||
|
||||
|
||||
class EDA_3D_SETTINGS_HOLDER
|
||||
{
|
||||
public:
|
||||
virtual EDA_3D_SETTINGS* GetSettings() = 0;
|
||||
};
|
||||
|
||||
#endif // EDA_3D_SETTINGS_H
|
@ -30,7 +30,7 @@
|
||||
* board_items_to_polygon_shape_transform.cpp
|
||||
*/
|
||||
|
||||
#include "cinfo3d_visu.h"
|
||||
#include "3d_settings.h"
|
||||
#include "../3d_rendering/3d_render_raytracing/shapes2D/cring2d.h"
|
||||
#include "../3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.h"
|
||||
#include "../3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.h"
|
||||
@ -87,10 +87,10 @@ void addTextSegmToContainer( int x0, int y0, int xf, int yf, void* aData )
|
||||
// Based on
|
||||
// void TEXTE_PCB::TransformShapeWithClearanceToPolygonSet
|
||||
// board_items_to_polygon_shape_transform.cpp
|
||||
void CINFO3D_VISU::AddShapeWithClearanceToContainer( const TEXTE_PCB* aText,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aClearanceValue )
|
||||
void EDA_3D_SETTINGS::AddShapeWithClearanceToContainer( const TEXTE_PCB* aText,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aClearanceValue )
|
||||
{
|
||||
wxSize size = aText->GetTextSize();
|
||||
|
||||
@ -131,10 +131,10 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const TEXTE_PCB* aText,
|
||||
}
|
||||
|
||||
|
||||
void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DIMENSION* aDimension,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aClearanceValue )
|
||||
void EDA_3D_SETTINGS::AddShapeWithClearanceToContainer( const DIMENSION* aDimension,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aClearanceValue )
|
||||
{
|
||||
AddShapeWithClearanceToContainer(&aDimension->Text(), aDstContainer, aLayerId, aClearanceValue);
|
||||
|
||||
@ -168,10 +168,10 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DIMENSION* aDimension
|
||||
// Based on
|
||||
// void MODULE::TransformGraphicShapesWithClearanceToPolygonSet
|
||||
// board_items_to_polygon_shape_transform.cpp#L204
|
||||
void CINFO3D_VISU::AddGraphicsShapesWithClearanceToContainer( const MODULE* aModule,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aInflateValue )
|
||||
void EDA_3D_SETTINGS::AddGraphicsShapesWithClearanceToContainer( const MODULE* aModule,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aInflateValue )
|
||||
{
|
||||
std::vector<TEXTE_MODULE *> texts; // List of TEXTE_MODULE to convert
|
||||
EDGE_MODULE* outline;
|
||||
@ -234,8 +234,8 @@ void CINFO3D_VISU::AddGraphicsShapesWithClearanceToContainer( const MODULE* aMod
|
||||
}
|
||||
|
||||
|
||||
COBJECT2D *CINFO3D_VISU::createNewTrack( const TRACK* aTrack,
|
||||
int aClearanceValue ) const
|
||||
COBJECT2D *EDA_3D_SETTINGS::createNewTrack( const TRACK* aTrack,
|
||||
int aClearanceValue ) const
|
||||
{
|
||||
SFVEC2F start3DU( aTrack->GetStart().x * m_biuTo3Dunits,
|
||||
-aTrack->GetStart().y * m_biuTo3Dunits ); // y coord is inverted
|
||||
@ -281,9 +281,9 @@ COBJECT2D *CINFO3D_VISU::createNewTrack( const TRACK* aTrack,
|
||||
// Based on:
|
||||
// void D_PAD:: TransformShapeWithClearanceToPolygon(
|
||||
// board_items_to_polygon_shape_transform.cpp
|
||||
void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
wxSize aClearanceValue ) const
|
||||
void EDA_3D_SETTINGS::createNewPadWithClearance( const D_PAD* aPad,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
wxSize aClearanceValue ) const
|
||||
{
|
||||
// note: for most of shapes, aClearanceValue.x = aClearanceValue.y
|
||||
// only rectangular and oval shapes can have different values
|
||||
@ -295,7 +295,7 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
|
||||
if( !dx || !dy )
|
||||
{
|
||||
wxLogTrace( m_logTrace,
|
||||
wxT( "CINFO3D_VISU::createNewPadWithClearance - found an invalid pad" ) );
|
||||
wxT( "EDA_3D_SETTINGS::createNewPadWithClearance - found an invalid pad" ) );
|
||||
|
||||
return;
|
||||
}
|
||||
@ -517,13 +517,13 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
|
||||
// Based on:
|
||||
// BuildPadDrillShapePolygon
|
||||
// board_items_to_polygon_shape_transform.cpp
|
||||
COBJECT2D *CINFO3D_VISU::createNewPadDrill( const D_PAD* aPad, int aInflateValue )
|
||||
COBJECT2D *EDA_3D_SETTINGS::createNewPadDrill( const D_PAD* aPad, int aInflateValue )
|
||||
{
|
||||
wxSize drillSize = aPad->GetDrillSize();
|
||||
|
||||
if( !drillSize.x || !drillSize.y )
|
||||
{
|
||||
wxLogTrace( m_logTrace, wxT( "CINFO3D_VISU::createNewPadDrill - found an invalid pad" ) );
|
||||
wxLogTrace( m_logTrace, wxT( "EDA_3D_SETTINGS::createNewPadDrill - found an invalid pad" ) );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -568,11 +568,11 @@ COBJECT2D *CINFO3D_VISU::createNewPadDrill( const D_PAD* aPad, int aInflateValue
|
||||
}
|
||||
|
||||
|
||||
void CINFO3D_VISU::AddPadsShapesWithClearanceToContainer( const MODULE* aModule,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aInflateValue,
|
||||
bool aSkipNPTHPadsWihNoCopper )
|
||||
void EDA_3D_SETTINGS::AddPadsShapesWithClearanceToContainer( const MODULE* aModule,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aInflateValue,
|
||||
bool aSkipNPTHPadsWihNoCopper )
|
||||
{
|
||||
wxSize margin;
|
||||
|
||||
@ -631,13 +631,13 @@ void CINFO3D_VISU::AddPadsShapesWithClearanceToContainer( const MODULE* aModule,
|
||||
|
||||
// based on TransformArcToPolygon function from
|
||||
// common/convert_basic_shapes_to_polygon.cpp
|
||||
void CINFO3D_VISU::TransformArcToSegments( const wxPoint &aCentre,
|
||||
const wxPoint &aStart,
|
||||
double aArcAngle,
|
||||
int aCircleToSegmentsCount,
|
||||
int aWidth,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
const BOARD_ITEM &aBoardItem )
|
||||
void EDA_3D_SETTINGS::TransformArcToSegments( const wxPoint &aCentre,
|
||||
const wxPoint &aStart,
|
||||
double aArcAngle,
|
||||
int aCircleToSegmentsCount,
|
||||
int aWidth,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
const BOARD_ITEM &aBoardItem )
|
||||
{
|
||||
wxPoint arc_start, arc_end;
|
||||
int delta = 3600 / aCircleToSegmentsCount; // rotate angle in 0.1 degree
|
||||
@ -708,10 +708,10 @@ void CINFO3D_VISU::TransformArcToSegments( const wxPoint &aCentre,
|
||||
// Based on
|
||||
// TransformShapeWithClearanceToPolygon
|
||||
// board_items_to_polygon_shape_transform.cpp#L431
|
||||
void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSegment,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aClearanceValue )
|
||||
void EDA_3D_SETTINGS::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSegment,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId,
|
||||
int aClearanceValue )
|
||||
{
|
||||
// The full width of the lines to create
|
||||
// The extra 1 protects the inner/outer radius values from degeneracy
|
||||
@ -799,9 +799,9 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
|
||||
// Based on
|
||||
// TransformSolidAreasShapesToPolygonSet
|
||||
// board_items_to_polygon_shape_transform.cpp
|
||||
void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneContainer,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId )
|
||||
void EDA_3D_SETTINGS::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneContainer,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
PCB_LAYER_ID aLayerId )
|
||||
{
|
||||
// Copy the polys list because we have to simplify it
|
||||
SHAPE_POLY_SET polyList = SHAPE_POLY_SET( aZoneContainer->GetFilledPolysList(), true );
|
||||
@ -880,9 +880,9 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
|
||||
|
||||
|
||||
|
||||
void CINFO3D_VISU::buildPadShapeThickOutlineAsSegments( const D_PAD* aPad,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
int aWidth )
|
||||
void EDA_3D_SETTINGS::buildPadShapeThickOutlineAsSegments( const D_PAD* aPad,
|
||||
CGENERICCONTAINER2D *aDstContainer,
|
||||
int aWidth )
|
||||
{
|
||||
if( aPad->GetShape() == PAD_SHAPE_CIRCLE ) // Draw a ring
|
||||
{
|
||||
|
@ -30,7 +30,7 @@
|
||||
* board_items_to_polygon_shape_transform.cpp
|
||||
*/
|
||||
|
||||
#include "cinfo3d_visu.h"
|
||||
#include "3d_settings.h"
|
||||
#include "../3d_rendering/3d_render_raytracing/shapes2D/cring2d.h"
|
||||
#include "../3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.h"
|
||||
#include "../3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.h"
|
||||
@ -58,69 +58,44 @@
|
||||
|
||||
#include <profile.h>
|
||||
|
||||
void CINFO3D_VISU::destroyLayers()
|
||||
void EDA_3D_SETTINGS::destroyLayers()
|
||||
{
|
||||
if( !m_layers_poly.empty() )
|
||||
{
|
||||
for( MAP_POLY::iterator ii = m_layers_poly.begin();
|
||||
ii != m_layers_poly.end();
|
||||
++ii )
|
||||
{
|
||||
delete ii->second;
|
||||
ii->second = NULL;
|
||||
}
|
||||
for( auto& poly : m_layers_poly )
|
||||
delete poly.second;
|
||||
|
||||
m_layers_poly.clear();
|
||||
}
|
||||
|
||||
if( !m_layers_inner_holes_poly.empty() )
|
||||
{
|
||||
for( MAP_POLY::iterator ii = m_layers_inner_holes_poly.begin();
|
||||
ii != m_layers_inner_holes_poly.end();
|
||||
++ii )
|
||||
{
|
||||
delete ii->second;
|
||||
ii->second = NULL;
|
||||
}
|
||||
for( auto& poly : m_layers_inner_holes_poly )
|
||||
delete poly.second;
|
||||
|
||||
m_layers_inner_holes_poly.clear();
|
||||
}
|
||||
|
||||
if( !m_layers_outer_holes_poly.empty() )
|
||||
{
|
||||
for( MAP_POLY::iterator ii = m_layers_outer_holes_poly.begin();
|
||||
ii != m_layers_outer_holes_poly.end();
|
||||
++ii )
|
||||
{
|
||||
delete ii->second;
|
||||
ii->second = NULL;
|
||||
}
|
||||
for( auto& poly : m_layers_outer_holes_poly )
|
||||
delete poly.second;
|
||||
|
||||
m_layers_outer_holes_poly.clear();
|
||||
}
|
||||
|
||||
if( !m_layers_container2D.empty() )
|
||||
{
|
||||
for( MAP_CONTAINER_2D::iterator ii = m_layers_container2D.begin();
|
||||
ii != m_layers_container2D.end();
|
||||
++ii )
|
||||
{
|
||||
delete ii->second;
|
||||
ii->second = NULL;
|
||||
}
|
||||
for( auto& poly : m_layers_container2D )
|
||||
delete poly.second;
|
||||
|
||||
m_layers_container2D.clear();
|
||||
}
|
||||
|
||||
if( !m_layers_holes2D.empty() )
|
||||
{
|
||||
for( MAP_CONTAINER_2D::iterator ii = m_layers_holes2D.begin();
|
||||
ii != m_layers_holes2D.end();
|
||||
++ii )
|
||||
{
|
||||
delete ii->second;
|
||||
ii->second = NULL;
|
||||
}
|
||||
for( auto& poly : m_layers_holes2D )
|
||||
delete poly.second;
|
||||
|
||||
m_layers_holes2D.clear();
|
||||
}
|
||||
@ -138,7 +113,7 @@ void CINFO3D_VISU::destroyLayers()
|
||||
}
|
||||
|
||||
|
||||
void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
void EDA_3D_SETTINGS::createLayers( REPORTER *aStatusTextReporter )
|
||||
{
|
||||
destroyLayers();
|
||||
|
||||
@ -146,14 +121,14 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
// Based on: https://github.com/KiCad/kicad-source-mirror/blob/master/3d-viewer/3d_draw.cpp#L692
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef PRINT_STATISTICS_3D_VIEWER
|
||||
#ifdef PRINT_STATISTICS_3D_VIEWER
|
||||
unsigned stats_startCopperLayersTime = GetRunningMicroSecs();
|
||||
|
||||
unsigned start_Time = stats_startCopperLayersTime;
|
||||
#endif
|
||||
|
||||
PCB_LAYER_ID cu_seq[MAX_CU_LAYERS];
|
||||
LSET cu_set = LSET::AllCuMask( m_copperLayersCount );
|
||||
LSET cu_set = LSET::AllCuMask( m_copperLayersCount );
|
||||
|
||||
m_stats_nr_tracks = 0;
|
||||
m_stats_track_med_width = 0;
|
||||
@ -168,7 +143,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
trackList.clear();
|
||||
trackList.reserve( m_board->Tracks().size() );
|
||||
|
||||
for( auto track : m_board->Tracks() )
|
||||
for( TRACK* track : m_board->Tracks() )
|
||||
{
|
||||
if( !Is3DLayerEnabled( track->GetLayer() ) ) // Skip non enabled layers
|
||||
continue;
|
||||
@ -241,10 +216,8 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Create tracks as objects and add it to container
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
|
||||
for( PCB_LAYER_ID curr_layer_id : layer_id )
|
||||
{
|
||||
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
|
||||
|
||||
wxASSERT( m_layers_container2D.find( curr_layer_id ) != m_layers_container2D.end() );
|
||||
|
||||
CBVHCONTAINER2D *layerContainer = m_layers_container2D[curr_layer_id];
|
||||
@ -272,10 +245,8 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Create VIAS and THTs objects and add it to holes containers
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
|
||||
for( PCB_LAYER_ID curr_layer_id : layer_id )
|
||||
{
|
||||
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
|
||||
|
||||
// ADD TRACKS
|
||||
unsigned int nTracks = trackList.size();
|
||||
|
||||
@ -324,7 +295,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
hole_inner_radius + thickness,
|
||||
*track ) );
|
||||
}
|
||||
else if( lIdx == 0 ) // it only adds once the THT holes
|
||||
else if( curr_layer_id == layer_id[0] ) // it only adds once the THT holes
|
||||
{
|
||||
// Add through hole object
|
||||
// /////////////////////////////////////////////////////////
|
||||
@ -356,10 +327,8 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Create VIAS and THTs objects and add it to holes containers
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
|
||||
for( PCB_LAYER_ID curr_layer_id : layer_id )
|
||||
{
|
||||
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
|
||||
|
||||
// ADD TRACKS
|
||||
const unsigned int nTracks = trackList.size();
|
||||
|
||||
@ -420,7 +389,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
TransformCircleToPolygon( *layerInnerHolesPoly, via->GetStart(),
|
||||
holediameter / 2, ARC_HIGH_DEF );
|
||||
}
|
||||
else if( lIdx == 0 ) // it only adds once the THT holes
|
||||
else if( curr_layer_id == layer_id[0] ) // it only adds once the THT holes
|
||||
{
|
||||
const int holediameter = via->GetDrillValue();
|
||||
const int hole_outer_radius = (holediameter / 2)+ GetCopperThicknessBIU();
|
||||
@ -457,10 +426,8 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
if( GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS )
|
||||
&& ( m_render_engine == RENDER_ENGINE::OPENGL_LEGACY ) )
|
||||
{
|
||||
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
|
||||
for( PCB_LAYER_ID curr_layer_id : layer_id )
|
||||
{
|
||||
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
|
||||
|
||||
wxASSERT( m_layers_poly.find( curr_layer_id ) != m_layers_poly.end() );
|
||||
|
||||
SHAPE_POLY_SET *layerPoly = m_layers_poly[curr_layer_id];
|
||||
@ -488,9 +455,9 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add holes of modules
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
for( auto module : m_board->Modules() )
|
||||
for( MODULE* module : m_board->Modules() )
|
||||
{
|
||||
for( auto pad : module->Pads() )
|
||||
for( D_PAD* pad : module->Pads() )
|
||||
{
|
||||
const wxSize padHole = pad->GetDrillSize();
|
||||
|
||||
@ -520,9 +487,9 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add contours of the pad holes (pads can be Circle or Segment holes)
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
for( auto module : m_board->Modules() )
|
||||
for( MODULE* module : m_board->Modules() )
|
||||
{
|
||||
for( auto pad : module->Pads() )
|
||||
for( D_PAD* pad : module->Pads() )
|
||||
{
|
||||
const wxSize padHole = pad->GetDrillSize();
|
||||
|
||||
@ -535,7 +502,6 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
if( pad->GetAttribute () != PAD_ATTRIB_HOLE_NOT_PLATED )
|
||||
{
|
||||
pad->BuildPadDrillShapePolygon( m_through_outer_holes_poly, inflate );
|
||||
|
||||
pad->BuildPadDrillShapePolygon( m_through_inner_holes_poly, 0 );
|
||||
}
|
||||
else
|
||||
@ -553,16 +519,14 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add modules PADs objects to containers
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
|
||||
for( PCB_LAYER_ID curr_layer_id : layer_id )
|
||||
{
|
||||
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
|
||||
|
||||
wxASSERT( m_layers_container2D.find( curr_layer_id ) != m_layers_container2D.end() );
|
||||
|
||||
CBVHCONTAINER2D *layerContainer = m_layers_container2D[curr_layer_id];
|
||||
|
||||
// ADD PADS
|
||||
for( auto module : m_board->Modules() )
|
||||
for( MODULE* module : m_board->Modules() )
|
||||
{
|
||||
// Note: NPTH pads are not drawn on copper layers when the pad
|
||||
// has same shape as its hole
|
||||
@ -590,10 +554,8 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
if( GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS )
|
||||
&& ( m_render_engine == RENDER_ENGINE::OPENGL_LEGACY ) )
|
||||
{
|
||||
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
|
||||
for( PCB_LAYER_ID curr_layer_id : layer_id )
|
||||
{
|
||||
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
|
||||
|
||||
wxASSERT( m_layers_poly.find( curr_layer_id ) != m_layers_poly.end() );
|
||||
|
||||
SHAPE_POLY_SET *layerPoly = m_layers_poly[curr_layer_id];
|
||||
@ -613,8 +575,9 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
true );
|
||||
|
||||
// Micro-wave modules may have items on copper layers
|
||||
module->TransformGraphicTextWithClearanceToPolygonSet(
|
||||
curr_layer_id, *layerPoly, 0 );
|
||||
module->TransformGraphicTextWithClearanceToPolygonSet( curr_layer_id,
|
||||
*layerPoly,
|
||||
0 );
|
||||
|
||||
transformGraphicModuleEdgeToPolygonSet( module, curr_layer_id, *layerPoly );
|
||||
}
|
||||
@ -628,10 +591,8 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add graphic item on copper layers to object containers
|
||||
// /////////////////////////////////////////////////////////////////////////
|
||||
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
|
||||
for( PCB_LAYER_ID curr_layer_id : layer_id )
|
||||
{
|
||||
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
|
||||
|
||||
wxASSERT( m_layers_container2D.find( curr_layer_id ) != m_layers_container2D.end() );
|
||||
|
||||
CBVHCONTAINER2D *layerContainer = m_layers_container2D[curr_layer_id];
|
||||
@ -686,18 +647,16 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
if( GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS )
|
||||
&& ( m_render_engine == RENDER_ENGINE::OPENGL_LEGACY ) )
|
||||
{
|
||||
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
|
||||
for( PCB_LAYER_ID cur_layer_id : layer_id )
|
||||
{
|
||||
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
|
||||
wxASSERT( m_layers_poly.find( cur_layer_id ) != m_layers_poly.end() );
|
||||
|
||||
wxASSERT( m_layers_poly.find( curr_layer_id ) != m_layers_poly.end() );
|
||||
|
||||
SHAPE_POLY_SET *layerPoly = m_layers_poly[curr_layer_id];
|
||||
SHAPE_POLY_SET *layerPoly = m_layers_poly[cur_layer_id];
|
||||
|
||||
// ADD GRAPHIC ITEMS ON COPPER LAYERS (texts)
|
||||
for( auto item : m_board->Drawings() )
|
||||
for( BOARD_ITEM* item : m_board->Drawings() )
|
||||
{
|
||||
if( !item->IsOnLayer( curr_layer_id ) )
|
||||
if( !item->IsOnLayer( cur_layer_id ) )
|
||||
continue;
|
||||
|
||||
switch( item->Type() )
|
||||
@ -712,7 +671,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
default:
|
||||
wxLogTrace( m_logTrace, wxT( "createLayers: item type: %d not implemented" ),
|
||||
item->Type() );
|
||||
item->Type() );
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -775,10 +734,8 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
&& ( m_render_engine == RENDER_ENGINE::OPENGL_LEGACY ) )
|
||||
{
|
||||
// ADD COPPER ZONES
|
||||
for( int ii = 0; ii < m_board->GetAreaCount(); ++ii )
|
||||
for( ZONE_CONTAINER* zone : m_board->Zones() )
|
||||
{
|
||||
const ZONE_CONTAINER* zone = m_board->GetArea( ii );
|
||||
|
||||
if( zone == nullptr )
|
||||
break;
|
||||
|
||||
@ -844,21 +801,17 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
if( aStatusTextReporter )
|
||||
aStatusTextReporter->Report( _( "Simplify holes contours" ) );
|
||||
|
||||
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
|
||||
for( PCB_LAYER_ID layer : layer_id )
|
||||
{
|
||||
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
|
||||
|
||||
if( m_layers_outer_holes_poly.find( curr_layer_id ) !=
|
||||
m_layers_outer_holes_poly.end() )
|
||||
if( m_layers_outer_holes_poly.find( layer ) != m_layers_outer_holes_poly.end() )
|
||||
{
|
||||
// found
|
||||
SHAPE_POLY_SET *polyLayer = m_layers_outer_holes_poly[curr_layer_id];
|
||||
SHAPE_POLY_SET *polyLayer = m_layers_outer_holes_poly[layer];
|
||||
polyLayer->Simplify( SHAPE_POLY_SET::PM_FAST );
|
||||
|
||||
wxASSERT( m_layers_inner_holes_poly.find( curr_layer_id ) !=
|
||||
m_layers_inner_holes_poly.end() );
|
||||
wxASSERT( m_layers_inner_holes_poly.find( layer ) != m_layers_inner_holes_poly.end() );
|
||||
|
||||
polyLayer = m_layers_inner_holes_poly[curr_layer_id];
|
||||
polyLayer = m_layers_inner_holes_poly[layer];
|
||||
polyLayer->Simplify( SHAPE_POLY_SET::PM_FAST );
|
||||
}
|
||||
}
|
||||
@ -919,7 +872,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
const PCB_LAYER_ID curr_layer_id = *seq;
|
||||
|
||||
if( !Is3DLayerEnabled( curr_layer_id ) )
|
||||
continue;
|
||||
continue;
|
||||
|
||||
CBVHCONTAINER2D *layerContainer = new CBVHCONTAINER2D;
|
||||
m_layers_container2D[curr_layer_id] = layerContainer;
|
||||
@ -929,7 +882,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add drawing objects
|
||||
// /////////////////////////////////////////////////////////////////////
|
||||
for( auto item : m_board->Drawings() )
|
||||
for( BOARD_ITEM* item : m_board->Drawings() )
|
||||
{
|
||||
if( !item->IsOnLayer( curr_layer_id ) )
|
||||
continue;
|
||||
@ -965,7 +918,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add drawing contours
|
||||
// /////////////////////////////////////////////////////////////////////
|
||||
for( auto item : m_board->Drawings() )
|
||||
for( BOARD_ITEM* item : m_board->Drawings() )
|
||||
{
|
||||
if( !item->IsOnLayer( curr_layer_id ) )
|
||||
continue;
|
||||
@ -988,13 +941,13 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add modules tech layers - objects
|
||||
// /////////////////////////////////////////////////////////////////////
|
||||
for( auto module : m_board->Modules() )
|
||||
for( MODULE* module : m_board->Modules() )
|
||||
{
|
||||
if( (curr_layer_id == F_SilkS) || (curr_layer_id == B_SilkS) )
|
||||
{
|
||||
int linewidth = g_DrawDefaultLineThickness;
|
||||
|
||||
for( auto pad : module->Pads() )
|
||||
for( D_PAD* pad : module->Pads() )
|
||||
{
|
||||
if( !pad->IsOnLayer( curr_layer_id ) )
|
||||
continue;
|
||||
@ -1014,13 +967,13 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
// Add modules tech layers - contours
|
||||
// /////////////////////////////////////////////////////////////////////
|
||||
for( auto module : m_board->Modules() )
|
||||
for( MODULE* module : m_board->Modules() )
|
||||
{
|
||||
if( (curr_layer_id == F_SilkS) || (curr_layer_id == B_SilkS) )
|
||||
{
|
||||
const int linewidth = g_DrawDefaultLineThickness;
|
||||
|
||||
for( auto pad : module->Pads() )
|
||||
for( D_PAD* pad : module->Pads() )
|
||||
{
|
||||
if( !pad->IsOnLayer( curr_layer_id ) )
|
||||
continue;
|
||||
@ -1053,9 +1006,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
if( !zone->IsOnLayer( curr_layer_id ) )
|
||||
continue;
|
||||
|
||||
AddSolidAreasShapesToContainer( zone,
|
||||
layerContainer,
|
||||
curr_layer_id );
|
||||
AddSolidAreasShapesToContainer( zone, layerContainer, curr_layer_id );
|
||||
}
|
||||
|
||||
for( int ii = 0; ii < m_board->GetAreaCount(); ++ii )
|
||||
@ -1093,26 +1044,22 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
|
||||
|
||||
if( !m_layers_holes2D.empty() )
|
||||
{
|
||||
for( MAP_CONTAINER_2D::iterator ii = m_layers_holes2D.begin();
|
||||
ii != m_layers_holes2D.end();
|
||||
++ii )
|
||||
{
|
||||
((CBVHCONTAINER2D *)(ii->second))->BuildBVH();
|
||||
}
|
||||
for( auto& hole : m_layers_holes2D)
|
||||
hole.second->BuildBVH();
|
||||
}
|
||||
|
||||
// We only need the Solder mask to initialize the BVH
|
||||
// because..?
|
||||
if( (CBVHCONTAINER2D *)m_layers_container2D[B_Mask] )
|
||||
((CBVHCONTAINER2D *)m_layers_container2D[B_Mask])->BuildBVH();
|
||||
if( m_layers_container2D[B_Mask] )
|
||||
m_layers_container2D[B_Mask]->BuildBVH();
|
||||
|
||||
if( (CBVHCONTAINER2D *)m_layers_container2D[F_Mask] )
|
||||
((CBVHCONTAINER2D *)m_layers_container2D[F_Mask])->BuildBVH();
|
||||
if( m_layers_container2D[F_Mask] )
|
||||
m_layers_container2D[F_Mask]->BuildBVH();
|
||||
|
||||
#ifdef PRINT_STATISTICS_3D_VIEWER
|
||||
unsigned stats_endHolesBVHTime = GetRunningMicroSecs();
|
||||
|
||||
printf( "CINFO3D_VISU::createLayers times\n" );
|
||||
printf( "EDA_3D_SETTINGS::createLayers times\n" );
|
||||
printf( " Copper Layers: %.3f ms\n",
|
||||
(float)( stats_endCopperLayersTime - stats_startCopperLayersTime ) / 1e3 );
|
||||
printf( " Holes BVH creation: %.3f ms\n",
|
||||
|
@ -30,7 +30,7 @@
|
||||
* board_items_to_polygon_shape_transform.cpp
|
||||
*/
|
||||
|
||||
#include "cinfo3d_visu.h"
|
||||
#include "3d_settings.h"
|
||||
#include <convert_basic_shapes_to_polygon.h>
|
||||
#include <class_edge_mod.h>
|
||||
#include <class_module.h>
|
||||
@ -38,9 +38,9 @@
|
||||
|
||||
// This is the same function as in board_items_to_polygon_shape_transform.cpp
|
||||
// but it adds the rect/trapezoid shapes with a different winding
|
||||
void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
|
||||
SHAPE_POLY_SET& aCornerBuffer,
|
||||
wxSize aInflateValue ) const
|
||||
void EDA_3D_SETTINGS::buildPadShapePolygon( const D_PAD* aPad,
|
||||
SHAPE_POLY_SET& aCornerBuffer,
|
||||
wxSize aInflateValue ) const
|
||||
{
|
||||
wxPoint corners[4];
|
||||
wxPoint PadShapePos = aPad->ShapePos(); /* Note: for pad having a shape offset,
|
||||
@ -105,9 +105,9 @@ void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
|
||||
}
|
||||
|
||||
|
||||
void CINFO3D_VISU::buildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
|
||||
SHAPE_POLY_SET& aCornerBuffer,
|
||||
int aWidth ) const
|
||||
void EDA_3D_SETTINGS::buildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
|
||||
SHAPE_POLY_SET& aCornerBuffer,
|
||||
int aWidth ) const
|
||||
{
|
||||
if( aPad->GetShape() == PAD_SHAPE_CIRCLE ) // Draw a ring
|
||||
{
|
||||
@ -139,10 +139,10 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
|
||||
|
||||
// Based on the same function name in board_items_to_polyshape_transform.cpp
|
||||
// It was implemented here to allow dynamic segments count per pad shape
|
||||
void CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon( const PADS& aPads, PCB_LAYER_ID aLayer,
|
||||
SHAPE_POLY_SET& aCornerBuffer,
|
||||
int aInflateValue,
|
||||
bool aSkipNPTHPadsWihNoCopper ) const
|
||||
void EDA_3D_SETTINGS::transformPadsShapesWithClearanceToPolygon( const PADS& aPads, PCB_LAYER_ID aLayer,
|
||||
SHAPE_POLY_SET& aCornerBuffer,
|
||||
int aInflateValue,
|
||||
bool aSkipNPTHPadsWihNoCopper ) const
|
||||
{
|
||||
wxSize margin;
|
||||
for( auto pad : aPads )
|
||||
@ -198,9 +198,9 @@ void CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon( const PADS& aPads,
|
||||
}
|
||||
}
|
||||
|
||||
void CINFO3D_VISU::transformGraphicModuleEdgeToPolygonSet( const MODULE *aModule,
|
||||
PCB_LAYER_ID aLayer,
|
||||
SHAPE_POLY_SET& aCornerBuffer ) const
|
||||
void EDA_3D_SETTINGS::transformGraphicModuleEdgeToPolygonSet( const MODULE *aModule,
|
||||
PCB_LAYER_ID aLayer,
|
||||
SHAPE_POLY_SET& aCornerBuffer ) const
|
||||
{
|
||||
for( auto item : aModule->GraphicalItems() )
|
||||
{
|
||||
|
@ -85,7 +85,7 @@ END_EVENT_TABLE()
|
||||
|
||||
|
||||
EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow *aParent, const int *aAttribList, BOARD *aBoard,
|
||||
CINFO3D_VISU &aSettings , S3D_CACHE *a3DCachePointer ) :
|
||||
EDA_3D_SETTINGS &aSettings , S3D_CACHE *a3DCachePointer ) :
|
||||
HIDPI_GL_CANVAS( aParent, wxID_ANY, aAttribList, wxDefaultPosition, wxDefaultSize,
|
||||
wxFULL_REPAINT_ON_RESIZE ),
|
||||
m_eventDispatcher( nullptr ),
|
||||
@ -153,10 +153,11 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow *aParent, const int *aAttribList, BOARD *
|
||||
wxEVT_LEFT_UP, wxEVT_LEFT_DOWN, wxEVT_LEFT_DCLICK,
|
||||
wxEVT_RIGHT_UP, wxEVT_RIGHT_DOWN, wxEVT_RIGHT_DCLICK,
|
||||
wxEVT_MIDDLE_UP, wxEVT_MIDDLE_DOWN, wxEVT_MIDDLE_DCLICK,
|
||||
wxEVT_MOTION, wxEVT_MOUSEWHEEL, wxEVT_CHAR, wxEVT_CHAR_HOOK
|
||||
wxEVT_MOTION, wxEVT_MOUSEWHEEL, wxEVT_CHAR, wxEVT_CHAR_HOOK,
|
||||
#if wxCHECK_VERSION( 3, 1, 0 ) || defined( USE_OSX_MAGNIFY_EVENT )
|
||||
, wxEVT_MAGNIFY
|
||||
wxEVT_MAGNIFY,
|
||||
#endif
|
||||
wxEVT_MENU_OPEN, wxEVT_MENU_CLOSE, wxEVT_MENU_HIGHLIGHT
|
||||
};
|
||||
|
||||
for( wxEventType eventType : events )
|
||||
|
@ -26,7 +26,7 @@
|
||||
#define EDA_3D_CANVAS_H
|
||||
|
||||
|
||||
#include "cinfo3d_visu.h"
|
||||
#include "3d_settings.h"
|
||||
#include "3d_rendering/c3d_render_base.h"
|
||||
#include "3d_cache/3d_cache.h"
|
||||
#include <gal/hidpi_gl_canvas.h>
|
||||
@ -56,7 +56,7 @@ class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
|
||||
EDA_3D_CANVAS( wxWindow *aParent,
|
||||
const int *aAttribList = 0,
|
||||
BOARD *aBoard = NULL,
|
||||
CINFO3D_VISU &aSettings = G_null_CINFO3D_VISU,
|
||||
EDA_3D_SETTINGS &aSettings = G_null_EDA_3D_SETTINGS,
|
||||
S3D_CACHE *a3DCachePointer = NULL );
|
||||
|
||||
~EDA_3D_CANVAS();
|
||||
@ -212,7 +212,7 @@ private:
|
||||
float m_camera_moving_speed; // 1.0f will be 1:1
|
||||
unsigned m_strtime_camera_movement; // Ticktime of camera movement start
|
||||
|
||||
CINFO3D_VISU& m_settings; // Pre-computed 3D information and visual
|
||||
EDA_3D_SETTINGS& m_settings; // Pre-computed 3D information and visual
|
||||
// settings to render the board
|
||||
C3D_RENDER_BASE* m_3d_render;
|
||||
C3D_RENDER_RAYTRACING* m_3d_render_raytracing;
|
||||
|
@ -44,7 +44,7 @@
|
||||
*/
|
||||
#define UNITS3D_TO_UNITSPCB (IU_PER_MM)
|
||||
|
||||
C3D_RENDER_OGL_LEGACY::C3D_RENDER_OGL_LEGACY( CINFO3D_VISU &aSettings ) :
|
||||
C3D_RENDER_OGL_LEGACY::C3D_RENDER_OGL_LEGACY( EDA_3D_SETTINGS &aSettings ) :
|
||||
C3D_RENDER_BASE( aSettings )
|
||||
{
|
||||
wxLogTrace( m_logTrace, wxT( "C3D_RENDER_OGL_LEGACY::C3D_RENDER_OGL_LEGACY" ) );
|
||||
|
@ -59,7 +59,7 @@ typedef std::map< wxString, C_OGL_3DMODEL * > MAP_3DMODEL;
|
||||
class C3D_RENDER_OGL_LEGACY : public C3D_RENDER_BASE
|
||||
{
|
||||
public:
|
||||
explicit C3D_RENDER_OGL_LEGACY( CINFO3D_VISU &aSettings );
|
||||
explicit C3D_RENDER_OGL_LEGACY( EDA_3D_SETTINGS &aSettings );
|
||||
|
||||
~C3D_RENDER_OGL_LEGACY();
|
||||
|
||||
|
@ -46,7 +46,7 @@
|
||||
// convertLinearToSRGB
|
||||
//#include <glm/gtc/color_space.hpp>
|
||||
|
||||
C3D_RENDER_RAYTRACING::C3D_RENDER_RAYTRACING( CINFO3D_VISU &aSettings ) :
|
||||
C3D_RENDER_RAYTRACING::C3D_RENDER_RAYTRACING( EDA_3D_SETTINGS &aSettings ) :
|
||||
C3D_RENDER_BASE( aSettings ),
|
||||
m_postshader_ssao( aSettings.CameraGet() )
|
||||
{
|
||||
|
@ -59,7 +59,7 @@ typedef enum
|
||||
class C3D_RENDER_RAYTRACING : public C3D_RENDER_BASE
|
||||
{
|
||||
public:
|
||||
explicit C3D_RENDER_RAYTRACING( CINFO3D_VISU &aSettings );
|
||||
explicit C3D_RENDER_RAYTRACING( EDA_3D_SETTINGS &aSettings );
|
||||
|
||||
~C3D_RENDER_RAYTRACING();
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
||||
const wxChar * C3D_RENDER_BASE::m_logTrace = wxT( "KI_TRACE_3D_RENDER" );
|
||||
|
||||
|
||||
C3D_RENDER_BASE::C3D_RENDER_BASE(CINFO3D_VISU &aSettings) :
|
||||
C3D_RENDER_BASE::C3D_RENDER_BASE( EDA_3D_SETTINGS &aSettings) :
|
||||
m_settings( aSettings )
|
||||
{
|
||||
wxLogTrace( m_logTrace, wxT( "C3D_RENDER_BASE::C3D_RENDER_BASE" ) );
|
||||
|
@ -32,7 +32,7 @@
|
||||
|
||||
|
||||
#include <pcb_base_frame.h>
|
||||
#include "../3d_canvas/cinfo3d_visu.h"
|
||||
#include "3d_canvas/3d_settings.h"
|
||||
#include <reporter.h>
|
||||
|
||||
#include <widgets/busy_indicator.h>
|
||||
@ -47,7 +47,7 @@ class C3D_RENDER_BASE
|
||||
// Operations
|
||||
public:
|
||||
|
||||
explicit C3D_RENDER_BASE( CINFO3D_VISU &aSettings );
|
||||
explicit C3D_RENDER_BASE( EDA_3D_SETTINGS &aSettings );
|
||||
|
||||
virtual ~C3D_RENDER_BASE() = 0;
|
||||
|
||||
@ -107,7 +107,7 @@ protected:
|
||||
std::unique_ptr<BUSY_INDICATOR> CreateBusyIndicator() const;
|
||||
|
||||
/// settings refrence in use for this render
|
||||
CINFO3D_VISU &m_settings;
|
||||
EDA_3D_SETTINGS &m_settings;
|
||||
|
||||
/// flag if the opengl specific for this render was already initialized
|
||||
bool m_is_opengl_initialized;
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#include "dialog_3D_view_option_base.h"
|
||||
#include <3d_viewer/eda_3d_viewer.h>
|
||||
#include <3d_canvas/cinfo3d_visu.h>
|
||||
#include <3d_canvas/3d_settings.h>
|
||||
#include <bitmaps.h>
|
||||
|
||||
class DIALOG_3D_VIEW_OPTIONS : public DIALOG_3D_VIEW_OPTIONS_BASE
|
||||
@ -33,8 +33,8 @@ public:
|
||||
explicit DIALOG_3D_VIEW_OPTIONS( EDA_3D_VIEWER* parent );
|
||||
|
||||
private:
|
||||
EDA_3D_VIEWER* m_parent;
|
||||
CINFO3D_VISU& m_3Dprms;
|
||||
EDA_3D_VIEWER* m_parent;
|
||||
EDA_3D_SETTINGS& m_settings;
|
||||
|
||||
void initDialog();
|
||||
|
||||
@ -58,7 +58,7 @@ void EDA_3D_VIEWER::Install3DViewOptionDialog( wxCommandEvent& event )
|
||||
|
||||
|
||||
DIALOG_3D_VIEW_OPTIONS::DIALOG_3D_VIEW_OPTIONS( EDA_3D_VIEWER* parent )
|
||||
:DIALOG_3D_VIEW_OPTIONS_BASE( parent ), m_3Dprms( parent->GetSettings() )
|
||||
: DIALOG_3D_VIEW_OPTIONS_BASE( parent ), m_settings( *parent->GetSettings() )
|
||||
{
|
||||
m_parent = parent;
|
||||
|
||||
@ -94,23 +94,23 @@ void DIALOG_3D_VIEW_OPTIONS::initDialog()
|
||||
bool DIALOG_3D_VIEW_OPTIONS::TransferDataToWindow()
|
||||
{
|
||||
// Check/uncheck checkboxes
|
||||
m_checkBoxRealisticMode->SetValue( m_3Dprms.GetFlag( FL_USE_REALISTIC_MODE ) );
|
||||
m_checkBoxBoardBody->SetValue( m_3Dprms.GetFlag( FL_SHOW_BOARD_BODY ) );
|
||||
m_checkBoxCuThickness->SetValue( m_3Dprms.GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) );
|
||||
m_checkBoxAreas->SetValue( m_3Dprms.GetFlag( FL_ZONE ) );
|
||||
m_checkBoxBoundingBoxes->SetValue( m_3Dprms.GetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX ) );
|
||||
m_checkBoxRealisticMode->SetValue( m_settings.GetFlag( FL_USE_REALISTIC_MODE ) );
|
||||
m_checkBoxBoardBody->SetValue( m_settings.GetFlag( FL_SHOW_BOARD_BODY ) );
|
||||
m_checkBoxCuThickness->SetValue( m_settings.GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) );
|
||||
m_checkBoxAreas->SetValue( m_settings.GetFlag( FL_ZONE ) );
|
||||
m_checkBoxBoundingBoxes->SetValue( m_settings.GetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX ) );
|
||||
|
||||
m_checkBox3DshapesTH->SetValue( m_3Dprms.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL ) );
|
||||
m_checkBox3DshapesSMD->SetValue( m_3Dprms.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT ) );
|
||||
m_checkBox3DshapesVirtual->SetValue( m_3Dprms.GetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL ) );
|
||||
m_checkBox3DshapesTH->SetValue( m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL ) );
|
||||
m_checkBox3DshapesSMD->SetValue( m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT ) );
|
||||
m_checkBox3DshapesVirtual->SetValue( m_settings.GetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL ) );
|
||||
|
||||
m_checkBoxSilkscreen->SetValue( m_3Dprms.GetFlag( FL_SILKSCREEN ) );
|
||||
m_checkBoxSolderMask->SetValue( m_3Dprms.GetFlag( FL_SOLDERMASK ) );
|
||||
m_checkBoxSolderpaste->SetValue( m_3Dprms.GetFlag( FL_SOLDERPASTE ) );
|
||||
m_checkBoxAdhesive->SetValue( m_3Dprms.GetFlag( FL_ADHESIVE ) );
|
||||
m_checkBoxComments->SetValue( m_3Dprms.GetFlag( FL_COMMENTS ) );
|
||||
m_checkBoxECO->SetValue( m_3Dprms.GetFlag( FL_ECO ) );
|
||||
m_checkBoxSubtractMaskFromSilk->SetValue( m_3Dprms.GetFlag( FL_SUBTRACT_MASK_FROM_SILK ) );
|
||||
m_checkBoxSilkscreen->SetValue( m_settings.GetFlag( FL_SILKSCREEN ) );
|
||||
m_checkBoxSolderMask->SetValue( m_settings.GetFlag( FL_SOLDERMASK ) );
|
||||
m_checkBoxSolderpaste->SetValue( m_settings.GetFlag( FL_SOLDERPASTE ) );
|
||||
m_checkBoxAdhesive->SetValue( m_settings.GetFlag( FL_ADHESIVE ) );
|
||||
m_checkBoxComments->SetValue( m_settings.GetFlag( FL_COMMENTS ) );
|
||||
m_checkBoxECO->SetValue( m_settings.GetFlag( FL_ECO ) );
|
||||
m_checkBoxSubtractMaskFromSilk->SetValue( m_settings.GetFlag( FL_SUBTRACT_MASK_FROM_SILK ) );
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -119,27 +119,27 @@ bool DIALOG_3D_VIEW_OPTIONS::TransferDataToWindow()
|
||||
bool DIALOG_3D_VIEW_OPTIONS::TransferDataFromWindow()
|
||||
{
|
||||
// Set render mode
|
||||
m_3Dprms.SetFlag( FL_USE_REALISTIC_MODE, m_checkBoxRealisticMode->GetValue() );
|
||||
m_settings.SetFlag( FL_USE_REALISTIC_MODE, m_checkBoxRealisticMode->GetValue() );
|
||||
|
||||
// Set visibility of items
|
||||
m_3Dprms.SetFlag( FL_SHOW_BOARD_BODY, m_checkBoxBoardBody->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS, m_checkBoxCuThickness->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_ZONE, m_checkBoxAreas->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX, m_checkBoxBoundingBoxes->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_SUBTRACT_MASK_FROM_SILK, m_checkBoxSubtractMaskFromSilk->GetValue() );
|
||||
m_settings.SetFlag( FL_SHOW_BOARD_BODY, m_checkBoxBoardBody->GetValue() );
|
||||
m_settings.SetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS, m_checkBoxCuThickness->GetValue() );
|
||||
m_settings.SetFlag( FL_ZONE, m_checkBoxAreas->GetValue() );
|
||||
m_settings.SetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX, m_checkBoxBoundingBoxes->GetValue() );
|
||||
m_settings.SetFlag( FL_SUBTRACT_MASK_FROM_SILK, m_checkBoxSubtractMaskFromSilk->GetValue() );
|
||||
|
||||
// Set 3D shapes visibility
|
||||
m_3Dprms.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL, m_checkBox3DshapesTH->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT, m_checkBox3DshapesSMD->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL, m_checkBox3DshapesVirtual->GetValue() );
|
||||
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL, m_checkBox3DshapesTH->GetValue() );
|
||||
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT, m_checkBox3DshapesSMD->GetValue() );
|
||||
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL, m_checkBox3DshapesVirtual->GetValue() );
|
||||
|
||||
// Set Layer visibility
|
||||
m_3Dprms.SetFlag( FL_SILKSCREEN, m_checkBoxSilkscreen->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_SOLDERMASK, m_checkBoxSolderMask->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_SOLDERPASTE, m_checkBoxSolderpaste->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_ADHESIVE, m_checkBoxAdhesive->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_COMMENTS, m_checkBoxComments->GetValue() );
|
||||
m_3Dprms.SetFlag( FL_ECO, m_checkBoxECO->GetValue( ) );
|
||||
m_settings.SetFlag( FL_SILKSCREEN, m_checkBoxSilkscreen->GetValue() );
|
||||
m_settings.SetFlag( FL_SOLDERMASK, m_checkBoxSolderMask->GetValue() );
|
||||
m_settings.SetFlag( FL_SOLDERPASTE, m_checkBoxSolderpaste->GetValue() );
|
||||
m_settings.SetFlag( FL_ADHESIVE, m_checkBoxAdhesive->GetValue() );
|
||||
m_settings.SetFlag( FL_COMMENTS, m_checkBoxComments->GetValue() );
|
||||
m_settings.SetFlag( FL_ECO, m_checkBoxECO->GetValue( ) );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -33,13 +33,12 @@
|
||||
#include <3d_viewer_id.h>
|
||||
#include "../common_ogl/cogl_att_list.h"
|
||||
#include <3d_viewer/tools/3d_actions.h>
|
||||
#include <3d_viewer/tools/3d_viewer_control.h>
|
||||
#include <3d_viewer/tools/3d_controller.h>
|
||||
#include <bitmaps.h>
|
||||
#include <board_stackup_manager/class_board_stackup.h>
|
||||
#include <board_stackup_manager/stackup_predefined_prms.h>
|
||||
#include <class_board.h>
|
||||
#include <dpi_scaling.h>
|
||||
#include <gestfich.h>
|
||||
#include <layers_id_colors_and_visibility.h>
|
||||
#include <pgm_base.h>
|
||||
#include <project.h>
|
||||
@ -131,7 +130,7 @@ EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway, PCB_BASE_FRAME *aParent, const wxSt
|
||||
|
||||
// Register tools
|
||||
m_toolManager->RegisterTool( new COMMON_CONTROL );
|
||||
m_toolManager->RegisterTool( new EDA_3D_VIEWER_CONTROL );
|
||||
m_toolManager->RegisterTool( new EDA_3D_CONTROLLER );
|
||||
m_toolManager->InitTools();
|
||||
|
||||
// Run the viewer control tool, it is supposed to be always active
|
||||
@ -218,8 +217,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
|
||||
int id = event.GetId();
|
||||
bool isChecked = event.IsChecked();
|
||||
|
||||
wxLogTrace( m_logTrace,
|
||||
"EDA_3D_VIEWER::Process_Special_Functions id %d isChecked %d",
|
||||
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::Process_Special_Functions id %d isChecked %d",
|
||||
id, isChecked );
|
||||
|
||||
if( m_canvas == NULL )
|
||||
@ -332,9 +330,7 @@ void EDA_3D_VIEWER::OnRenderEngineSelection( wxCommandEvent &event )
|
||||
"OpenGL Legacy" );
|
||||
|
||||
if( old_engine != m_settings.RenderEngineGet() )
|
||||
{
|
||||
RenderEngineChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -433,25 +429,16 @@ void EDA_3D_VIEWER::LoadSettings( APP_SETTINGS_BASE *aCfg )
|
||||
m_settings.SetFlag( FL_AXIS, cfg->m_Render.show_axis );
|
||||
|
||||
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL, cfg->m_Render.show_footprints_normal );
|
||||
|
||||
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT, cfg->m_Render.show_footprints_insert );
|
||||
|
||||
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL, cfg->m_Render.show_footprints_virtual );
|
||||
|
||||
m_settings.SetFlag( FL_ZONE, cfg->m_Render.show_zones );
|
||||
|
||||
m_settings.SetFlag( FL_ADHESIVE, cfg->m_Render.show_adhesive );
|
||||
|
||||
m_settings.SetFlag( FL_SILKSCREEN, cfg->m_Render.show_silkscreen );
|
||||
|
||||
m_settings.SetFlag( FL_SOLDERMASK, cfg->m_Render.show_soldermask );
|
||||
|
||||
m_settings.SetFlag( FL_SOLDERPASTE, cfg->m_Render.show_solderpaste );
|
||||
|
||||
m_settings.SetFlag( FL_COMMENTS, cfg->m_Render.show_comments );
|
||||
|
||||
m_settings.SetFlag( FL_ECO, cfg->m_Render.show_eco );
|
||||
|
||||
m_settings.SetFlag( FL_SHOW_BOARD_BODY, cfg->m_Render.show_board_body );
|
||||
|
||||
m_settings.GridSet( static_cast<GRID3D_TYPE>( cfg->m_Render.grid_type ) );
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
||||
* Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@gmail.com>
|
||||
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
@ -32,7 +32,7 @@
|
||||
#ifndef EDA_3D_VIEWER_H
|
||||
#define EDA_3D_VIEWER_H
|
||||
|
||||
#include "../3d_canvas/cinfo3d_visu.h"
|
||||
#include "3d_canvas/3d_settings.h"
|
||||
#include "../3d_canvas/eda_3d_canvas.h"
|
||||
#include <kiway_player.h>
|
||||
#include <wx/colourdata.h>
|
||||
@ -62,7 +62,7 @@ enum EDA_3D_VIEWER_STATUSBAR
|
||||
/**
|
||||
* Create and handle a window for the 3d viewer connected to a Kiway and a pcbboard
|
||||
*/
|
||||
class EDA_3D_VIEWER : public KIWAY_PLAYER
|
||||
class EDA_3D_VIEWER : public EDA_3D_SETTINGS_HOLDER, public KIWAY_PLAYER
|
||||
{
|
||||
|
||||
public:
|
||||
@ -77,7 +77,7 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
|
||||
|
||||
BOARD* GetBoard() { return Parent()->GetBoard(); }
|
||||
|
||||
EDA_3D_CANVAS* GetCanvas() { return m_canvas; }
|
||||
wxWindow* GetToolCanvas() const override { return m_canvas; }
|
||||
|
||||
/**
|
||||
* Request reloading the 3D view. However the request will be executed
|
||||
@ -104,7 +104,7 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
|
||||
/**
|
||||
* @return current settings
|
||||
*/
|
||||
CINFO3D_VISU &GetSettings() { return m_settings; }
|
||||
EDA_3D_SETTINGS* GetSettings() override { return &m_settings; }
|
||||
|
||||
/**
|
||||
* Get a SFVEC3D from a wx colour dialog
|
||||
@ -209,7 +209,7 @@ private:
|
||||
|
||||
ACTION_TOOLBAR* m_mainToolBar;
|
||||
EDA_3D_CANVAS* m_canvas;
|
||||
CINFO3D_VISU m_settings;
|
||||
EDA_3D_SETTINGS m_settings;
|
||||
|
||||
TOOL_DISPATCHER* m_toolDispatcher;
|
||||
|
||||
|
327
3d-viewer/3d_viewer/tools/3d_controller.cpp
Normal file
327
3d-viewer/3d_viewer/tools/3d_controller.cpp
Normal file
@ -0,0 +1,327 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <tool/actions.h>
|
||||
#include <tool/tool_manager.h>
|
||||
#include <eda_3d_canvas.h>
|
||||
#include <eda_3d_viewer.h>
|
||||
#include <id.h>
|
||||
#include <kiface_i.h>
|
||||
#include <3d_viewer_id.h>
|
||||
#include <tools/3d_controller.h>
|
||||
#include "3d_actions.h"
|
||||
|
||||
|
||||
bool EDA_3D_CONTROLLER::Init()
|
||||
{
|
||||
CONDITIONAL_MENU& ctxMenu = m_menu.GetMenu();
|
||||
|
||||
ctxMenu.AddItem( ACTIONS::zoomIn, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( ACTIONS::zoomOut, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
ctxMenu.AddSeparator();
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewTop, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewBottom, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
ctxMenu.AddSeparator();
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewRight, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewLeft, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
ctxMenu.AddSeparator();
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewFront, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewBack, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
ctxMenu.AddSeparator();
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::moveLeft, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::moveRight, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::moveUp, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::moveDown, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_CONTROLLER::Reset( RESET_REASON aReason )
|
||||
{
|
||||
TOOLS_HOLDER* holder = m_toolMgr->GetToolHolder();
|
||||
|
||||
m_canvas = dynamic_cast<EDA_3D_CANVAS*>( holder->GetToolCanvas() );
|
||||
m_settings = dynamic_cast<EDA_3D_SETTINGS_HOLDER*>( holder )->GetSettings();
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::UpdateMenu( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
ACTION_MENU* actionMenu = aEvent.Parameter<ACTION_MENU*>();
|
||||
CONDITIONAL_MENU* conditionalMenu = dynamic_cast<CONDITIONAL_MENU*>( actionMenu );
|
||||
SELECTION dummySel;
|
||||
|
||||
if( conditionalMenu )
|
||||
conditionalMenu->Evaluate( dummySel );
|
||||
|
||||
if( actionMenu )
|
||||
actionMenu->UpdateAll();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::Main( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
// Main loop: keep receiving events
|
||||
while( TOOL_EVENT* evt = Wait() )
|
||||
{
|
||||
if( evt->IsClick( BUT_RIGHT ) )
|
||||
m_menu.ShowContextMenu();
|
||||
else
|
||||
evt->SetPassEvent();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::ViewControl( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
m_canvas->SetView3D( aEvent.Parameter<intptr_t>() );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::PanControl( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
switch( aEvent.Parameter<intptr_t>() )
|
||||
{
|
||||
case ACTIONS::CURSOR_UP: m_canvas->SetView3D( WXK_UP ); break;
|
||||
case ACTIONS::CURSOR_DOWN: m_canvas->SetView3D( WXK_DOWN ); break;
|
||||
case ACTIONS::CURSOR_LEFT: m_canvas->SetView3D( WXK_LEFT ); break;
|
||||
case ACTIONS::CURSOR_RIGHT: m_canvas->SetView3D( WXK_RIGHT ); break;
|
||||
default: wxFAIL; break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#define ROT_ANGLE 10.0
|
||||
|
||||
int EDA_3D_CONTROLLER::RotateView( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
switch( aEvent.Parameter<intptr_t>() )
|
||||
{
|
||||
case ID_ROTATE3D_X_NEG: m_settings->CameraGet().RotateX( -glm::radians( ROT_ANGLE ) ); break;
|
||||
case ID_ROTATE3D_X_POS: m_settings->CameraGet().RotateX( glm::radians( ROT_ANGLE ) ); break;
|
||||
case ID_ROTATE3D_Y_NEG: m_settings->CameraGet().RotateY( -glm::radians( ROT_ANGLE ) ); break;
|
||||
case ID_ROTATE3D_Y_POS: m_settings->CameraGet().RotateY( glm::radians( ROT_ANGLE ) ); break;
|
||||
case ID_ROTATE3D_Z_NEG: m_settings->CameraGet().RotateZ( -glm::radians( ROT_ANGLE ) ); break;
|
||||
case ID_ROTATE3D_Z_POS: m_settings->CameraGet().RotateZ( glm::radians( ROT_ANGLE ) ); break;
|
||||
default: wxFAIL; break;
|
||||
}
|
||||
|
||||
if( m_settings->RenderEngineGet() == RENDER_ENGINE::OPENGL_LEGACY )
|
||||
m_canvas->Request_refresh();
|
||||
else
|
||||
m_canvas->RenderRaytracingRequest();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::ToggleOrtho( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
m_settings->CameraGet().ToggleProjection();
|
||||
|
||||
if( m_settings->RenderEngineGet() == RENDER_ENGINE::OPENGL_LEGACY )
|
||||
m_canvas->Request_refresh();
|
||||
else
|
||||
m_canvas->RenderRaytracingRequest();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::ToggleVisibility( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
DISPLAY3D_FLG flag = aEvent.Parameter<DISPLAY3D_FLG>();
|
||||
|
||||
m_settings->SetFlag( flag, !m_settings->GetFlag( flag ) );
|
||||
|
||||
switch( flag )
|
||||
{
|
||||
case FL_RENDER_OPENGL_SHOW_MODEL_BBOX:
|
||||
case FL_RENDER_RAYTRACING_SHADOWS:
|
||||
case FL_RENDER_RAYTRACING_REFRACTIONS:
|
||||
case FL_RENDER_RAYTRACING_REFLECTIONS:
|
||||
case FL_RENDER_RAYTRACING_ANTI_ALIASING:
|
||||
case FL_AXIS:
|
||||
m_canvas->Request_refresh();
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
EDA_3D_VIEWER* viewer = dynamic_cast<EDA_3D_VIEWER*>( m_toolMgr->GetToolHolder() );
|
||||
|
||||
if( viewer )
|
||||
viewer->NewDisplay( true );
|
||||
else
|
||||
m_canvas->Request_refresh();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::On3DGridSelection( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
GRID3D_TYPE grid = aEvent.Parameter<GRID3D_TYPE>();
|
||||
m_settings->GridSet( grid );
|
||||
|
||||
if( m_canvas )
|
||||
m_canvas->Request_refresh();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::ZoomRedraw( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
m_canvas->Request_refresh();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::ZoomInOut( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
bool direction = aEvent.IsAction( &ACTIONS::zoomIn );
|
||||
return doZoomInOut( direction, true );
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::ZoomInOutCenter( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
bool direction = aEvent.IsAction( &ACTIONS::zoomInCenter );
|
||||
return doZoomInOut( direction, false );
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::doZoomInOut( bool aDirection, bool aCenterOnCursor )
|
||||
{
|
||||
if( m_canvas )
|
||||
{
|
||||
m_canvas->SetView3D( aDirection ? WXK_F1 : WXK_F2 );
|
||||
m_canvas->DisplayStatus();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_CONTROLLER::ZoomFitScreen( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
if( m_canvas )
|
||||
{
|
||||
m_canvas->SetView3D( WXK_HOME );
|
||||
m_canvas->DisplayStatus();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_CONTROLLER::setTransitions()
|
||||
{
|
||||
Go( &EDA_3D_CONTROLLER::Main, EDA_3D_ACTIONS::controlActivate.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::UpdateMenu, ACTIONS::updateMenu.MakeEvent() );
|
||||
|
||||
// Pan control
|
||||
Go( &EDA_3D_CONTROLLER::PanControl, ACTIONS::panUp.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::PanControl, ACTIONS::panDown.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::PanControl, ACTIONS::panLeft.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::PanControl, ACTIONS::panRight.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::PanControl, EDA_3D_ACTIONS::moveUp.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::PanControl, EDA_3D_ACTIONS::moveDown.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::PanControl, EDA_3D_ACTIONS::moveLeft.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::PanControl, EDA_3D_ACTIONS::moveRight.MakeEvent() );
|
||||
|
||||
// View rotation
|
||||
Go( &EDA_3D_CONTROLLER::ViewControl, EDA_3D_ACTIONS::viewTop.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ViewControl, EDA_3D_ACTIONS::viewBottom.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ViewControl, EDA_3D_ACTIONS::viewLeft.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ViewControl, EDA_3D_ACTIONS::viewRight.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ViewControl, EDA_3D_ACTIONS::viewFront.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ViewControl, EDA_3D_ACTIONS::viewBack.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ViewControl, EDA_3D_ACTIONS::pivotCenter.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ViewControl, EDA_3D_ACTIONS::homeView.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ViewControl, EDA_3D_ACTIONS::resetView.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::RotateView, EDA_3D_ACTIONS::rotateXCW.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::RotateView, EDA_3D_ACTIONS::rotateXCCW.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::RotateView, EDA_3D_ACTIONS::rotateYCW.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::RotateView, EDA_3D_ACTIONS::rotateYCCW.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::RotateView, EDA_3D_ACTIONS::rotateZCW.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::RotateView, EDA_3D_ACTIONS::rotateZCCW.MakeEvent() );
|
||||
|
||||
// Zoom control
|
||||
Go( &EDA_3D_CONTROLLER::ZoomRedraw, ACTIONS::zoomRedraw.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ZoomInOut, ACTIONS::zoomIn.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ZoomInOut, ACTIONS::zoomOut.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ZoomInOutCenter, ACTIONS::zoomInCenter.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ZoomInOutCenter, ACTIONS::zoomOutCenter.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ZoomFitScreen, ACTIONS::zoomFitScreen.MakeEvent() );
|
||||
|
||||
// Grid
|
||||
Go( &EDA_3D_CONTROLLER::On3DGridSelection, EDA_3D_ACTIONS::noGrid.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::On3DGridSelection, EDA_3D_ACTIONS::show10mmGrid.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::On3DGridSelection, EDA_3D_ACTIONS::show5mmGrid.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::On3DGridSelection, EDA_3D_ACTIONS::show2_5mmGrid.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::On3DGridSelection, EDA_3D_ACTIONS::show1mmGrid.MakeEvent() );
|
||||
|
||||
// Visibility
|
||||
Go( &EDA_3D_CONTROLLER::ToggleOrtho, EDA_3D_ACTIONS::toggleOrtho.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::attributesTHT.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::attributesSMD.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::attributesVirtual.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::showCopperThickness.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::showBoundingBoxes.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::renderShadows.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::proceduralTextures.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::addFloor.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::showRefractions.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::showReflections.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::antiAliasing.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::postProcessing.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::toggleRealisticMode.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::toggleBoardBody.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::showAxis.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::toggleZones.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::toggleAdhesive.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::toggleSilk.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::toggleSolderMask.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::toggleSolderPaste.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::toggleComments.MakeEvent() );
|
||||
Go( &EDA_3D_CONTROLLER::ToggleVisibility, EDA_3D_ACTIONS::toggleECO.MakeEvent() );
|
||||
}
|
||||
|
||||
|
@ -27,22 +27,25 @@
|
||||
#include <tool/tool_interactive.h>
|
||||
|
||||
class EDA_3D_VIEWER;
|
||||
class EDA_3D_SETTINGS;
|
||||
|
||||
|
||||
/**
|
||||
* 3D_VIEWER_CONTROL
|
||||
* EDA_3D_CONTROLLER
|
||||
*
|
||||
* Handles actions that are shared between different applications
|
||||
* Handles view actions for various 3D canvases.
|
||||
*/
|
||||
|
||||
class EDA_3D_VIEWER_CONTROL : public TOOL_INTERACTIVE
|
||||
class EDA_3D_CONTROLLER : public TOOL_INTERACTIVE
|
||||
{
|
||||
public:
|
||||
EDA_3D_VIEWER_CONTROL() :
|
||||
EDA_3D_CONTROLLER() :
|
||||
TOOL_INTERACTIVE( "3DViewer.Control" ),
|
||||
m_frame( nullptr )
|
||||
m_canvas( nullptr ),
|
||||
m_settings( nullptr )
|
||||
{ }
|
||||
|
||||
~EDA_3D_VIEWER_CONTROL() override { }
|
||||
~EDA_3D_CONTROLLER() override { }
|
||||
|
||||
/// @copydoc TOOL_INTERACTIVE::Init()
|
||||
bool Init() override;
|
||||
@ -73,10 +76,11 @@ private:
|
||||
///> Sets up handlers for various events.
|
||||
void setTransitions() override;
|
||||
|
||||
///> Pointer to the currently used edit frame.
|
||||
EDA_3D_VIEWER* m_frame;
|
||||
|
||||
int doZoomInOut( bool aDirection, bool aCenterOnCursor );
|
||||
|
||||
private:
|
||||
EDA_3D_CANVAS* m_canvas;
|
||||
EDA_3D_SETTINGS* m_settings;
|
||||
};
|
||||
|
||||
#endif
|
@ -1,318 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <tool/actions.h>
|
||||
#include <tool/tool_manager.h>
|
||||
#include <eda_3d_viewer.h>
|
||||
#include <id.h>
|
||||
#include <kiface_i.h>
|
||||
#include <3d_viewer_id.h>
|
||||
#include "3d_viewer_control.h"
|
||||
#include "3d_actions.h"
|
||||
|
||||
|
||||
bool EDA_3D_VIEWER_CONTROL::Init()
|
||||
{
|
||||
CONDITIONAL_MENU& ctxMenu = m_menu.GetMenu();
|
||||
|
||||
ctxMenu.AddItem( ACTIONS::zoomIn, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( ACTIONS::zoomOut, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
ctxMenu.AddSeparator();
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewTop, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewBottom, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
ctxMenu.AddSeparator();
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewRight, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewLeft, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
ctxMenu.AddSeparator();
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewFront, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::viewBack, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
ctxMenu.AddSeparator();
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::moveLeft, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::moveRight, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::moveUp, SELECTION_CONDITIONS::ShowAlways );
|
||||
ctxMenu.AddItem( EDA_3D_ACTIONS::moveDown, SELECTION_CONDITIONS::ShowAlways );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER_CONTROL::Reset( RESET_REASON aReason )
|
||||
{
|
||||
m_frame = getEditFrame<EDA_3D_VIEWER>();
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::UpdateMenu( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
ACTION_MENU* actionMenu = aEvent.Parameter<ACTION_MENU*>();
|
||||
CONDITIONAL_MENU* conditionalMenu = dynamic_cast<CONDITIONAL_MENU*>( actionMenu );
|
||||
SELECTION dummySel;
|
||||
|
||||
if( conditionalMenu )
|
||||
conditionalMenu->Evaluate( dummySel );
|
||||
|
||||
if( actionMenu )
|
||||
actionMenu->UpdateAll();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::Main( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
// Main loop: keep receiving events
|
||||
while( TOOL_EVENT* evt = Wait() )
|
||||
{
|
||||
if( evt->IsClick( BUT_RIGHT ) )
|
||||
m_menu.ShowContextMenu();
|
||||
else
|
||||
evt->SetPassEvent();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::ViewControl( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
m_frame->GetCanvas()->SetView3D( aEvent.Parameter<intptr_t>() );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::PanControl( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
switch( aEvent.Parameter<intptr_t>() )
|
||||
{
|
||||
case ACTIONS::CURSOR_UP: m_frame->GetCanvas()->SetView3D( WXK_UP ); break;
|
||||
case ACTIONS::CURSOR_DOWN: m_frame->GetCanvas()->SetView3D( WXK_DOWN ); break;
|
||||
case ACTIONS::CURSOR_LEFT: m_frame->GetCanvas()->SetView3D( WXK_LEFT ); break;
|
||||
case ACTIONS::CURSOR_RIGHT: m_frame->GetCanvas()->SetView3D( WXK_RIGHT ); break;
|
||||
default: wxFAIL; break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#define ROT_ANGLE 10.0
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::RotateView( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
CINFO3D_VISU& settings = m_frame->GetSettings();
|
||||
|
||||
switch( aEvent.Parameter<intptr_t>() )
|
||||
{
|
||||
case ID_ROTATE3D_X_NEG: settings.CameraGet().RotateX( -glm::radians( ROT_ANGLE ) ); break;
|
||||
case ID_ROTATE3D_X_POS: settings.CameraGet().RotateX( glm::radians( ROT_ANGLE ) ); break;
|
||||
case ID_ROTATE3D_Y_NEG: settings.CameraGet().RotateY( -glm::radians( ROT_ANGLE ) ); break;
|
||||
case ID_ROTATE3D_Y_POS: settings.CameraGet().RotateY( glm::radians( ROT_ANGLE ) ); break;
|
||||
case ID_ROTATE3D_Z_NEG: settings.CameraGet().RotateZ( -glm::radians( ROT_ANGLE ) ); break;
|
||||
case ID_ROTATE3D_Z_POS: settings.CameraGet().RotateZ( glm::radians( ROT_ANGLE ) ); break;
|
||||
default: wxFAIL; break;
|
||||
}
|
||||
|
||||
if( settings.RenderEngineGet() == RENDER_ENGINE::OPENGL_LEGACY )
|
||||
m_frame->GetCanvas()->Request_refresh();
|
||||
else
|
||||
m_frame->GetCanvas()->RenderRaytracingRequest();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::ToggleOrtho( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
m_frame->GetSettings().CameraGet().ToggleProjection();
|
||||
|
||||
if( m_frame->GetSettings().RenderEngineGet() == RENDER_ENGINE::OPENGL_LEGACY )
|
||||
m_frame->GetCanvas()->Request_refresh();
|
||||
else
|
||||
m_frame->GetCanvas()->RenderRaytracingRequest();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::ToggleVisibility( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
DISPLAY3D_FLG flag = aEvent.Parameter<DISPLAY3D_FLG>();
|
||||
CINFO3D_VISU& settings = m_frame->GetSettings();
|
||||
|
||||
settings.SetFlag( flag, !settings.GetFlag( flag ) );
|
||||
|
||||
switch( flag )
|
||||
{
|
||||
case FL_RENDER_OPENGL_SHOW_MODEL_BBOX:
|
||||
case FL_RENDER_RAYTRACING_SHADOWS:
|
||||
case FL_RENDER_RAYTRACING_REFRACTIONS:
|
||||
case FL_RENDER_RAYTRACING_REFLECTIONS:
|
||||
case FL_RENDER_RAYTRACING_ANTI_ALIASING:
|
||||
case FL_AXIS:
|
||||
m_frame->GetCanvas()->Request_refresh();
|
||||
break;
|
||||
default:
|
||||
m_frame->NewDisplay( true );
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::On3DGridSelection( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
GRID3D_TYPE grid = aEvent.Parameter<GRID3D_TYPE>();
|
||||
m_frame->GetSettings().GridSet( grid );
|
||||
|
||||
if( m_frame->GetCanvas() )
|
||||
m_frame->GetCanvas()->Request_refresh();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::ZoomRedraw( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
m_frame->GetCanvas()->Request_refresh();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::ZoomInOut( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
bool direction = aEvent.IsAction( &ACTIONS::zoomIn );
|
||||
return doZoomInOut( direction, true );
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::ZoomInOutCenter( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
bool direction = aEvent.IsAction( &ACTIONS::zoomInCenter );
|
||||
return doZoomInOut( direction, false );
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::doZoomInOut( bool aDirection, bool aCenterOnCursor )
|
||||
{
|
||||
if( m_frame->GetCanvas() )
|
||||
{
|
||||
m_frame->GetCanvas()->SetView3D( aDirection ? WXK_F1 : WXK_F2 );
|
||||
m_frame->GetCanvas()->DisplayStatus();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int EDA_3D_VIEWER_CONTROL::ZoomFitScreen( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
if( m_frame->GetCanvas() )
|
||||
{
|
||||
m_frame->GetCanvas()->SetView3D( WXK_HOME );
|
||||
m_frame->GetCanvas()->DisplayStatus();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_VIEWER_CONTROL::setTransitions()
|
||||
{
|
||||
Go( &EDA_3D_VIEWER_CONTROL::Main, EDA_3D_ACTIONS::controlActivate.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::UpdateMenu, ACTIONS::updateMenu.MakeEvent() );
|
||||
|
||||
// Pan control
|
||||
Go( &EDA_3D_VIEWER_CONTROL::PanControl, ACTIONS::panUp.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::PanControl, ACTIONS::panDown.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::PanControl, ACTIONS::panLeft.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::PanControl, ACTIONS::panRight.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::PanControl, EDA_3D_ACTIONS::moveUp.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::PanControl, EDA_3D_ACTIONS::moveDown.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::PanControl, EDA_3D_ACTIONS::moveLeft.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::PanControl, EDA_3D_ACTIONS::moveRight.MakeEvent() );
|
||||
|
||||
// View rotation
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ViewControl, EDA_3D_ACTIONS::viewTop.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ViewControl, EDA_3D_ACTIONS::viewBottom.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ViewControl, EDA_3D_ACTIONS::viewLeft.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ViewControl, EDA_3D_ACTIONS::viewRight.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ViewControl, EDA_3D_ACTIONS::viewFront.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ViewControl, EDA_3D_ACTIONS::viewBack.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ViewControl, EDA_3D_ACTIONS::pivotCenter.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ViewControl, EDA_3D_ACTIONS::homeView.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ViewControl, EDA_3D_ACTIONS::resetView.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::RotateView, EDA_3D_ACTIONS::rotateXCW.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::RotateView, EDA_3D_ACTIONS::rotateXCCW.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::RotateView, EDA_3D_ACTIONS::rotateYCW.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::RotateView, EDA_3D_ACTIONS::rotateYCCW.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::RotateView, EDA_3D_ACTIONS::rotateZCW.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::RotateView, EDA_3D_ACTIONS::rotateZCCW.MakeEvent() );
|
||||
|
||||
// Zoom control
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ZoomRedraw, ACTIONS::zoomRedraw.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ZoomInOut, ACTIONS::zoomIn.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ZoomInOut, ACTIONS::zoomOut.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ZoomInOutCenter, ACTIONS::zoomInCenter.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ZoomInOutCenter, ACTIONS::zoomOutCenter.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ZoomFitScreen, ACTIONS::zoomFitScreen.MakeEvent() );
|
||||
|
||||
// Grid
|
||||
Go( &EDA_3D_VIEWER_CONTROL::On3DGridSelection, EDA_3D_ACTIONS::noGrid.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::On3DGridSelection, EDA_3D_ACTIONS::show10mmGrid.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::On3DGridSelection, EDA_3D_ACTIONS::show5mmGrid.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::On3DGridSelection, EDA_3D_ACTIONS::show2_5mmGrid.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::On3DGridSelection, EDA_3D_ACTIONS::show1mmGrid.MakeEvent() );
|
||||
|
||||
// Visibility
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleOrtho, EDA_3D_ACTIONS::toggleOrtho.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::attributesTHT.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::attributesSMD.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::attributesVirtual.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::showCopperThickness.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::showBoundingBoxes.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::renderShadows.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::proceduralTextures.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::addFloor.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::showRefractions.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::showReflections.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::antiAliasing.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::postProcessing.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::toggleRealisticMode.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::toggleBoardBody.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::showAxis.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::toggleZones.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::toggleAdhesive.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::toggleSilk.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::toggleSolderMask.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::toggleSolderPaste.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::toggleComments.MakeEvent() );
|
||||
Go( &EDA_3D_VIEWER_CONTROL::ToggleVisibility, EDA_3D_ACTIONS::toggleECO.MakeEvent() );
|
||||
}
|
||||
|
||||
|
@ -34,8 +34,8 @@ set(3D-VIEWER_SRCS
|
||||
${DIR_DLG}/3d_cache_dialogs.cpp
|
||||
${DIR_DLG}/dlg_select_3dmodel.cpp
|
||||
${DIR_DLG}/panel_prev_3d_base.cpp
|
||||
${DIR_DLG}/panel_prev_model.cpp
|
||||
3d_canvas/cinfo3d_visu.cpp
|
||||
${DIR_DLG}/panel_prev_3d.cpp
|
||||
3d_canvas/3d_settings.cpp
|
||||
3d_canvas/create_layer_items.cpp
|
||||
3d_canvas/create_3Dgraphic_brd_items.cpp
|
||||
3d_canvas/create_layer_poly.cpp
|
||||
@ -86,14 +86,14 @@ set(3D-VIEWER_SRCS
|
||||
3d_rendering/cpostshader.cpp
|
||||
3d_rendering/cpostshader_ssao.cpp
|
||||
3d_rendering/ctrack_ball.cpp
|
||||
3d_viewer/3d_menubar.cpp
|
||||
3d_rendering/test_cases.cpp
|
||||
3d_rendering/trackball.cpp
|
||||
3d_viewer/3d_menubar.cpp
|
||||
3d_viewer/3d_toolbar.cpp
|
||||
3d_viewer/dialogs/dialog_3D_view_option.cpp
|
||||
3d_viewer/dialogs/dialog_3D_view_option_base.cpp
|
||||
3d_viewer/tools/3d_actions.cpp
|
||||
3d_viewer/tools/3d_viewer_control.cpp
|
||||
3d_viewer/tools/3d_controller.cpp
|
||||
3d_viewer/eda_3d_viewer.cpp
|
||||
3d_viewer/3d_viewer_settings.cpp
|
||||
common_ogl/cogl_att_list.cpp
|
||||
|
@ -151,13 +151,8 @@ BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
{
|
||||
SetKiway( this, aKiway );
|
||||
|
||||
wxString unitList[] =
|
||||
{
|
||||
_("mm"), _("Inch"), _("DPI")
|
||||
};
|
||||
|
||||
for( int ii = 0; ii < 3; ii++ )
|
||||
m_PixelUnit->Append( unitList[ii] );
|
||||
for( wxString unit : { _( "mm" ), _( "Inch" ), _( "DPI" ) } )
|
||||
m_PixelUnit->Append( unit );
|
||||
|
||||
LoadSettings( config() );
|
||||
|
||||
@ -202,6 +197,12 @@ BM2CMP_FRAME::~BM2CMP_FRAME()
|
||||
}
|
||||
|
||||
|
||||
wxWindow* BM2CMP_FRAME::GetToolCanvas() const
|
||||
{
|
||||
return m_Notebook->GetCurrentPage();
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
|
||||
{
|
||||
EDA_BASE_FRAME::LoadSettings( aCfg );
|
||||
|
@ -75,16 +75,15 @@ public:
|
||||
int GetOutputDPI();
|
||||
|
||||
private:
|
||||
EDA_UNITS m_unit; // The units for m_outputSize (mm, inch, dpi)
|
||||
double m_outputSize; // The size in m_unit of the output image, depending on
|
||||
// the user settings. Set to the initial image size
|
||||
int m_originalDPI; // The image DPI if specified in file, or 0 if unknown
|
||||
int m_originalSizePixels; // The original image size read from file, in pixels
|
||||
EDA_UNITS m_unit; // The units for m_outputSize (mm, inch, dpi)
|
||||
double m_outputSize; // The size in m_unit of the output image, depending on
|
||||
// the user settings. Set to the initial image size
|
||||
int m_originalDPI; // The image DPI if specified in file, or 0 if unknown
|
||||
int m_originalSizePixels; // The original image size read from file, in pixels
|
||||
};
|
||||
|
||||
class BM2CMP_FRAME : public BM2CMP_FRAME_BASE
|
||||
{
|
||||
|
||||
public:
|
||||
BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent );
|
||||
~BM2CMP_FRAME();
|
||||
@ -155,20 +154,22 @@ private:
|
||||
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||
void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||
|
||||
wxWindow* GetToolCanvas() const override;
|
||||
|
||||
private:
|
||||
wxImage m_Pict_Image;
|
||||
wxBitmap m_Pict_Bitmap;
|
||||
wxImage m_Greyscale_Image;
|
||||
wxBitmap m_Greyscale_Bitmap;
|
||||
wxImage m_NB_Image;
|
||||
wxBitmap m_BN_Bitmap;
|
||||
IMAGE_SIZE m_outputSizeX;
|
||||
IMAGE_SIZE m_outputSizeY;
|
||||
bool m_Negative;
|
||||
wxString m_BitmapFileName;
|
||||
wxString m_ConvertedFileName;
|
||||
bool m_exportToClipboard;
|
||||
bool m_AspectRatioLocked;
|
||||
double m_AspectRatio;
|
||||
wxImage m_Pict_Image;
|
||||
wxBitmap m_Pict_Bitmap;
|
||||
wxImage m_Greyscale_Image;
|
||||
wxBitmap m_Greyscale_Bitmap;
|
||||
wxImage m_NB_Image;
|
||||
wxBitmap m_BN_Bitmap;
|
||||
IMAGE_SIZE m_outputSizeX;
|
||||
IMAGE_SIZE m_outputSizeY;
|
||||
bool m_Negative;
|
||||
wxString m_BitmapFileName;
|
||||
wxString m_ConvertedFileName;
|
||||
bool m_exportToClipboard;
|
||||
bool m_AspectRatioLocked;
|
||||
double m_AspectRatio;
|
||||
};
|
||||
#endif// BITMOP2CMP_GUI_H_
|
||||
|
@ -335,6 +335,7 @@ set( COMMON_SRCS
|
||||
searchhelpfilefullpath.cpp
|
||||
status_popup.cpp
|
||||
systemdirsappend.cpp
|
||||
tools_holder.cpp
|
||||
trace_helpers.cpp
|
||||
undo_redo_container.cpp
|
||||
utf8.cpp
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user