From 8416c1fc37912fd06ba354f1c8fffd0a7fee731e Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Sat, 2 Jan 2021 16:05:29 -0500 Subject: [PATCH] 3D Viewer: remove all instances of "C" prefix from object names. --- 3d-viewer/3d_cache/3d_cache.cpp | 48 +- 3d-viewer/3d_cache/3d_cache.h | 4 +- .../3d_cache/dialogs/dlg_select_3dmodel.cpp | 2 +- 3d-viewer/3d_cache/dialogs/panel_prev_3d.cpp | 2 +- 3d-viewer/3d_cache/dialogs/panel_prev_3d.h | 8 +- 3d-viewer/3d_canvas/board_adapter.cpp | 2 +- 3d-viewer/3d_canvas/board_adapter.h | 105 ++-- .../3d_canvas/create_3Dgraphic_brd_items.cpp | 125 ++--- 3d-viewer/3d_canvas/create_layer_items.cpp | 52 +- 3d-viewer/3d_canvas/eda_3d_canvas.cpp | 84 ++- 3d-viewer/3d_canvas/eda_3d_canvas.h | 45 +- .../3d_model_viewer/c3d_model_viewer.cpp | 87 ++- 3d-viewer/3d_model_viewer/c3d_model_viewer.h | 8 +- .../c3d_render_createscene_ogl_legacy.cpp | 272 +++++----- .../c3d_render_ogl_legacy.cpp | 212 ++++---- .../c3d_render_ogl_legacy.h | 144 ++--- .../3d_render_ogl_legacy/c_ogl_3dmodel.cpp | 53 +- .../3d_render_ogl_legacy/c_ogl_3dmodel.h | 33 +- .../3d_render_ogl_legacy/clayer_triangles.cpp | 250 ++++----- .../3d_render_ogl_legacy/clayer_triangles.h | 232 +++----- .../3d_render_ogl_legacy/ogl_legacy_utils.cpp | 39 +- .../3d_render_ogl_legacy/ogl_legacy_utils.h | 37 +- .../accelerators/caccelerator.cpp | 8 +- .../accelerators/caccelerator.h | 19 +- .../accelerators/cbvh_packet_traversal.cpp | 60 +- .../accelerators/cbvh_pbrt.cpp | 259 ++++----- .../accelerators/cbvh_pbrt.h | 62 +-- .../accelerators/ccontainer.cpp | 28 +- .../accelerators/ccontainer.h | 38 +- .../accelerators/ccontainer2d.cpp | 246 ++------- .../accelerators/ccontainer2d.h | 72 ++- .../c3d_render_createscene.cpp | 513 ++++++++---------- .../c3d_render_raytracing.cpp | 253 +++++---- .../c3d_render_raytracing.h | 136 ++--- .../3d_render_raytracing/cfrustum.cpp | 12 +- .../3d_render_raytracing/cfrustum.h | 31 +- .../3d_render_raytracing/clight.h | 83 ++- .../3d_render_raytracing/cmaterial.cpp | 130 ++--- .../3d_render_raytracing/cmaterial.h | 190 +++---- .../3d_render_raytracing/hitinfo.h | 4 +- .../3d_render_raytracing/raypacket.cpp | 34 +- .../3d_render_raytracing/raypacket.h | 23 +- .../3d_render_raytracing/shapes2D/cbbox2d.cpp | 64 ++- .../3d_render_raytracing/shapes2D/cbbox2d.h | 54 +- .../shapes2D/cfilledcircle2d.cpp | 50 +- .../shapes2D/cfilledcircle2d.h | 24 +- .../shapes2D/citemlayercsg2d.cpp | 28 +- .../shapes2D/citemlayercsg2d.h | 39 +- .../shapes2D/cobject2d.cpp | 32 +- .../3d_render_raytracing/shapes2D/cobject2d.h | 74 ++- .../shapes2D/cpolygon2d.cpp | 62 +-- .../shapes2D/cpolygon2d.h | 50 +- .../shapes2D/cpolygon4pts2d.cpp | 69 +-- .../shapes2D/cpolygon4pts2d.h | 42 +- .../3d_render_raytracing/shapes2D/cring2d.cpp | 73 +-- .../3d_render_raytracing/shapes2D/cring2d.h | 26 +- .../shapes2D/croundsegment2d.cpp | 40 +- .../shapes2D/croundsegment2d.h | 55 +- .../shapes2D/ctriangle2d.cpp | 31 +- .../shapes2D/ctriangle2d.h | 41 +- .../3d_render_raytracing/shapes3D/cbbox.cpp | 126 ++--- .../3d_render_raytracing/shapes3D/cbbox.h | 40 +- .../shapes3D/cbbox_ray.cpp | 6 +- .../shapes3D/ccylinder.cpp | 47 +- .../3d_render_raytracing/shapes3D/ccylinder.h | 14 +- .../shapes3D/cdummyblock.cpp | 12 +- .../shapes3D/cdummyblock.h | 20 +- .../shapes3D/clayeritem.cpp | 57 +- .../shapes3D/clayeritem.h | 22 +- .../3d_render_raytracing/shapes3D/cobject.cpp | 28 +- .../3d_render_raytracing/shapes3D/cobject.h | 79 ++- .../3d_render_raytracing/shapes3D/cplane.cpp | 43 +- .../3d_render_raytracing/shapes3D/cplane.h | 15 +- .../shapes3D/croundseg.cpp | 101 ++-- .../3d_render_raytracing/shapes3D/croundseg.h | 42 +- .../shapes3D/ctriangle.cpp | 113 ++-- .../3d_render_raytracing/shapes3D/ctriangle.h | 40 +- 3d-viewer/3d_rendering/c3d_render_base.cpp | 12 +- 3d-viewer/3d_rendering/c3d_render_base.h | 22 +- 3d-viewer/3d_rendering/ccamera.cpp | 89 ++- 3d-viewer/3d_rendering/ccamera.h | 67 ++- 3d-viewer/3d_rendering/ccolorrgb.cpp | 16 +- 3d-viewer/3d_rendering/ccolorrgb.h | 22 +- 3d-viewer/3d_rendering/cimage.cpp | 41 +- 3d-viewer/3d_rendering/cimage.h | 24 +- 3d-viewer/3d_rendering/cpostshader.cpp | 49 +- 3d-viewer/3d_rendering/cpostshader.h | 62 +-- 3d-viewer/3d_rendering/cpostshader_ssao.cpp | 24 +- 3d-viewer/3d_rendering/cpostshader_ssao.h | 18 +- 3d-viewer/3d_rendering/ctrack_ball.cpp | 32 +- 3d-viewer/3d_rendering/ctrack_ball.h | 12 +- 3d-viewer/3d_rendering/test_cases.cpp | 79 +-- 3d-viewer/3d_viewer/eda_3d_viewer.cpp | 4 +- 3d-viewer/3d_viewer/eda_3d_viewer.h | 6 +- 3d-viewer/3d_viewer/tools/3d_controller.h | 2 +- 3d-viewer/common_ogl/cogl_att_list.cpp | 23 +- 3d-viewer/common_ogl/cogl_att_list.h | 18 +- 3d-viewer/common_ogl/ogl_utils.cpp | 2 +- 3d-viewer/common_ogl/ogl_utils.h | 2 +- 99 files changed, 2731 insertions(+), 3599 deletions(-) diff --git a/3d-viewer/3d_cache/3d_cache.cpp b/3d-viewer/3d_cache/3d_cache.cpp index 8e964aac2b..dc9dfcc4a5 100644 --- a/3d-viewer/3d_cache/3d_cache.cpp +++ b/3d-viewer/3d_cache/3d_cache.cpp @@ -80,7 +80,7 @@ static bool isSHA1Same( const unsigned char* shaA, const unsigned char* shaB ) n static bool checkTag( const char* aTag, void* aPluginMgrPtr ) { - if( NULL == aTag || NULL == aPluginMgrPtr ) + if( nullptr == aTag || nullptr == aPluginMgrPtr ) return false; S3D_PLUGIN_MANAGER *pp = (S3D_PLUGIN_MANAGER*) aPluginMgrPtr; @@ -149,8 +149,8 @@ private: S3D_CACHE_ENTRY::S3D_CACHE_ENTRY() { - sceneData = NULL; - renderData = NULL; + sceneData = nullptr; + renderData = nullptr; memset( sha1sum, 0, 20 ); } @@ -159,14 +159,14 @@ S3D_CACHE_ENTRY::~S3D_CACHE_ENTRY() { delete sceneData; - if( NULL != renderData ) + if( nullptr != renderData ) S3D::Destroy3DModel( &renderData ); } void S3D_CACHE_ENTRY::SetSHA1( const unsigned char* aSHA1Sum ) { - if( NULL == aSHA1Sum ) + if( nullptr == aSHA1Sum ) { wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [BUG] NULL passed for aSHA1Sum", __FILE__, __FUNCTION__, __LINE__ ); @@ -217,7 +217,7 @@ S3D_CACHE::~S3D_CACHE() SCENEGRAPH* S3D_CACHE::load( const wxString& aModelFile, S3D_CACHE_ENTRY** aCachePtr ) { if( aCachePtr ) - *aCachePtr = NULL; + *aCachePtr = nullptr; wxString full3Dpath = m_FNResolver->ResolvePath( aModelFile ); @@ -226,7 +226,7 @@ SCENEGRAPH* S3D_CACHE::load( const wxString& aModelFile, S3D_CACHE_ENTRY** aCach // the model cannot be found; we cannot proceed wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [3D model] could not find model '%s'\n", __FILE__, __FUNCTION__, __LINE__, aModelFile ); - return NULL; + return nullptr; } // check cache if file is already loaded @@ -259,13 +259,13 @@ SCENEGRAPH* S3D_CACHE::load( const wxString& aModelFile, S3D_CACHE_ENTRY** aCach if( reload ) { - if( NULL != mi->second->sceneData ) + if( nullptr != mi->second->sceneData ) { S3D::DestroyNode( mi->second->sceneData ); - mi->second->sceneData = NULL; + mi->second->sceneData = nullptr; } - if( NULL != mi->second->renderData ) + if( nullptr != mi->second->renderData ) S3D::Destroy3DModel( &mi->second->renderData ); mi->second->sceneData = m_Plugins->Load3DModel( full3Dpath, @@ -273,7 +273,7 @@ SCENEGRAPH* S3D_CACHE::load( const wxString& aModelFile, S3D_CACHE_ENTRY** aCach } } - if( NULL != aCachePtr ) + if( nullptr != aCachePtr ) *aCachePtr = mi->second; return mi->second->sceneData; @@ -293,7 +293,7 @@ SCENEGRAPH* S3D_CACHE::Load( const wxString& aModelFile ) SCENEGRAPH* S3D_CACHE::checkCache( const wxString& aFileName, S3D_CACHE_ENTRY** aCachePtr ) { if( aCachePtr ) - *aCachePtr = NULL; + *aCachePtr = nullptr; unsigned char sha1sum[20]; @@ -322,7 +322,7 @@ SCENEGRAPH* S3D_CACHE::checkCache( const wxString& aFileName, S3D_CACHE_ENTRY** *aCachePtr = ep; } - return NULL; + return nullptr; } S3D_CACHE_ENTRY* ep = new S3D_CACHE_ENTRY; @@ -338,7 +338,7 @@ SCENEGRAPH* S3D_CACHE::checkCache( const wxString& aFileName, S3D_CACHE_ENTRY** m_CacheList.pop_back(); delete ep; - return NULL; + return nullptr; } if( aCachePtr ) @@ -354,7 +354,7 @@ SCENEGRAPH* S3D_CACHE::checkCache( const wxString& aFileName, S3D_CACHE_ENTRY** ep->sceneData = m_Plugins->Load3DModel( aFileName, ep->pluginInfo ); - if( NULL != ep->sceneData ) + if( nullptr != ep->sceneData ) saveCacheData( ep ); return ep->sceneData; @@ -371,7 +371,7 @@ bool S3D_CACHE::getSHA1( const wxString& aFileName, unsigned char* aSHA1Sum ) return false; } - if( NULL == aSHA1Sum ) + if( nullptr == aSHA1Sum ) { wxLogTrace( MASK_3D_CACHE, "%s\n * [BUG] NULL pointer passed for aMD5Sum", __FILE__, __FUNCTION__, __LINE__ ); @@ -385,7 +385,7 @@ bool S3D_CACHE::getSHA1( const wxString& aFileName, unsigned char* aSHA1Sum ) FILE* fp = fopen( aFileName.ToUTF8(), "rb" ); #endif - if( NULL == fp ) + if( nullptr == fp ) return false; boost::uuids::detail::sha1 dblock; @@ -446,12 +446,12 @@ bool S3D_CACHE::loadCacheData( S3D_CACHE_ENTRY* aCacheItem ) return false; } - if( NULL != aCacheItem->sceneData ) + if( nullptr != aCacheItem->sceneData ) S3D::DestroyNode( (SGNODE*) aCacheItem->sceneData ); aCacheItem->sceneData = (SCENEGRAPH*)S3D::ReadCache( fname.ToUTF8(), m_Plugins, checkTag ); - if( NULL == aCacheItem->sceneData ) + if( nullptr == aCacheItem->sceneData ) return false; return true; @@ -460,7 +460,7 @@ bool S3D_CACHE::loadCacheData( S3D_CACHE_ENTRY* aCacheItem ) bool S3D_CACHE::saveCacheData( S3D_CACHE_ENTRY* aCacheItem ) { - if( NULL == aCacheItem ) + if( nullptr == aCacheItem ) { wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * NULL passed for aCacheItem", __FILE__, __FUNCTION__, __LINE__ ); @@ -468,7 +468,7 @@ bool S3D_CACHE::saveCacheData( S3D_CACHE_ENTRY* aCacheItem ) return false; } - if( NULL == aCacheItem->sceneData ) + if( nullptr == aCacheItem->sceneData ) { wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * aCacheItem has no valid scene data", __FILE__, __FUNCTION__, __LINE__ ); @@ -665,11 +665,11 @@ void S3D_CACHE::ClosePlugins() S3DMODEL* S3D_CACHE::GetModel( const wxString& aModelFileName ) { - S3D_CACHE_ENTRY* cp = NULL; + S3D_CACHE_ENTRY* cp = nullptr; SCENEGRAPH* sp = load( aModelFileName, &cp ); if( !sp ) - return NULL; + return nullptr; if( !cp ) { @@ -677,7 +677,7 @@ S3DMODEL* S3D_CACHE::GetModel( const wxString& aModelFileName ) "%s:%s:%d\n * [BUG] model loaded with no associated S3D_CACHE_ENTRY", __FILE__, __FUNCTION__, __LINE__ ); - return NULL; + return nullptr; } if( cp->renderData ) diff --git a/3d-viewer/3d_cache/3d_cache.h b/3d-viewer/3d_cache/3d_cache.h index cf9840092e..3ee726652b 100644 --- a/3d-viewer/3d_cache/3d_cache.h +++ b/3d-viewer/3d_cache/3d_cache.h @@ -146,7 +146,7 @@ private: * @param aCachePtr is an optional return address for cache entry pointer. * @return SCENEGRAPH object associated with file name or NULL on error. */ - SCENEGRAPH* checkCache( const wxString& aFileName, S3D_CACHE_ENTRY** aCachePtr = NULL ); + SCENEGRAPH* checkCache( const wxString& aFileName, S3D_CACHE_ENTRY** aCachePtr = nullptr ); /** * Calculate the SHA1 hash of the given file. @@ -164,7 +164,7 @@ private: bool saveCacheData( S3D_CACHE_ENTRY* aCacheItem ); // the real load function (can supply a cache entry pointer to member functions) - SCENEGRAPH* load( const wxString& aModelFile, S3D_CACHE_ENTRY** aCachePtr = NULL ); + SCENEGRAPH* load( const wxString& aModelFile, S3D_CACHE_ENTRY** aCachePtr = nullptr ); /// cache entries std::list< S3D_CACHE_ENTRY* > m_CacheList; diff --git a/3d-viewer/3d_cache/dialogs/dlg_select_3dmodel.cpp b/3d-viewer/3d_cache/dialogs/dlg_select_3dmodel.cpp index 32da8ed987..6473f2f3de 100644 --- a/3d-viewer/3d_cache/dialogs/dlg_select_3dmodel.cpp +++ b/3d-viewer/3d_cache/dialogs/dlg_select_3dmodel.cpp @@ -57,7 +57,7 @@ DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheMana m_modelViewer = NULL; m_modelViewer = new C3D_MODEL_VIEWER( m_pane3Dviewer, - COGL_ATT_LIST::GetAttributesList( ANTIALIASING_MODE::AA_8X ), + OGL_ATT_LIST::GetAttributesList( ANTIALIASING_MODE::AA_8X ), m_cache ); m_modelViewer->SetMinSize( wxSize( 400, -1 ) ); m_Sizer3Dviewer->Add( m_modelViewer, 1, wxEXPAND|wxRIGHT, 5 ); diff --git a/3d-viewer/3d_cache/dialogs/panel_prev_3d.cpp b/3d-viewer/3d_cache/dialogs/panel_prev_3d.cpp index 16d82f0db6..074ebc4958 100644 --- a/3d-viewer/3d_cache/dialogs/panel_prev_3d.cpp +++ b/3d-viewer/3d_cache/dialogs/panel_prev_3d.cpp @@ -91,7 +91,7 @@ PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, PCB_BASE_FRAME* aFrame, FOOTPRI // Create the 3D canvas m_previewPane = new EDA_3D_CANVAS( this, - COGL_ATT_LIST::GetAttributesList( ANTIALIASING_MODE::AA_8X ), + OGL_ATT_LIST::GetAttributesList( ANTIALIASING_MODE::AA_8X ), m_dummyBoard, m_boardAdapter, m_currentCamera, aFrame->Prj().Get3DCacheManager() ); diff --git a/3d-viewer/3d_cache/dialogs/panel_prev_3d.h b/3d-viewer/3d_cache/dialogs/panel_prev_3d.h index 08b267556f..9a029f5b5a 100644 --- a/3d-viewer/3d_cache/dialogs/panel_prev_3d.h +++ b/3d-viewer/3d_cache/dialogs/panel_prev_3d.h @@ -88,7 +88,7 @@ public: wxWindow* GetToolCanvas() const override { return m_previewPane; } BOARD_ADAPTER& GetAdapter() override { return m_boardAdapter; } - CCAMERA& GetCurrentCamera() override { return m_currentCamera; } + CAMERA& GetCurrentCamera() override { return m_currentCamera; } /** * Set the currently selected index in the model list so that the scale/rotation/offset @@ -111,7 +111,7 @@ private: /** * It will receive the events from editing the fields. */ - void updateOrientation( wxCommandEvent &event ) override; + void updateOrientation( wxCommandEvent& event ) override; void onMouseWheelScale( wxMouseEvent& event ) override; void onMouseWheelRot( wxMouseEvent& event ) override; @@ -198,8 +198,8 @@ private: EDA_3D_CANVAS* m_previewPane; WX_INFOBAR* m_infobar; BOARD_ADAPTER m_boardAdapter; - CCAMERA& m_currentCamera; - CTRACK_BALL m_trackBallCamera; + CAMERA& m_currentCamera; + TRACK_BALL m_trackBallCamera; BOARD* m_dummyBoard; FOOTPRINT* m_dummyFootprint; diff --git a/3d-viewer/3d_canvas/board_adapter.cpp b/3d-viewer/3d_canvas/board_adapter.cpp index 0c91dbdb18..c2c233a596 100644 --- a/3d-viewer/3d_canvas/board_adapter.cpp +++ b/3d-viewer/3d_canvas/board_adapter.cpp @@ -439,7 +439,7 @@ void BOARD_ADAPTER::InitSettings( REPORTER* aStatusReporter, REPORTER* aWarningR boardMin.z = m_layerZcoordTop[B_Adhes]; boardMax.z = m_layerZcoordTop[F_Adhes]; - m_boardBoundingBox = CBBOX( boardMin, boardMax ); + m_boardBoundingBox = BBOX_3D( boardMin, boardMax ); #ifdef PRINT_STATISTICS_3D_VIEWER unsigned stats_startCreateBoardPolyTime = GetRunningMicroSecs(); diff --git a/3d-viewer/3d_canvas/board_adapter.h b/3d-viewer/3d_canvas/board_adapter.h index 2aaa8d6e87..9cddc76611 100644 --- a/3d-viewer/3d_canvas/board_adapter.h +++ b/3d-viewer/3d_canvas/board_adapter.h @@ -50,7 +50,7 @@ class COLOR_SETTINGS; /// A type that stores a container of 2d objects for each layer id -typedef std::map< PCB_LAYER_ID, CBVHCONTAINER2D *> MAP_CONTAINER_2D; +typedef std::map< PCB_LAYER_ID, BVH_CONTAINER_2D *> MAP_CONTAINER_2D_BASE; /// A type that stores polysets for each layer id typedef std::map< PCB_LAYER_ID, SHAPE_POLY_SET *> MAP_POLY; @@ -76,7 +76,7 @@ public: * * @param aCachePointer: the pointer to the 3D cache manager. */ - void Set3DCacheManager( S3D_CACHE *aCachePointer ) noexcept + void Set3DCacheManager( S3D_CACHE* aCachePointer ) noexcept { m_3d_model_manager = aCachePointer; } @@ -122,7 +122,7 @@ public: * * @param aBoard board to process. */ - void SetBoard( BOARD *aBoard ) noexcept + void SetBoard( BOARD* aBoard ) noexcept { m_board = aBoard; } @@ -132,7 +132,7 @@ public: * * @return BOARD pointer */ - const BOARD *GetBoard() const noexcept + const BOARD* GetBoard() const noexcept { return m_board; } @@ -165,7 +165,7 @@ public: * * @return the board bbox in 3D units. */ - const CBBOX &GetBBox3DU() const noexcept + const BBOX_3D& GetBBox3DU() const noexcept { return m_boardBoundingBox; } @@ -232,7 +232,7 @@ public: * * @return board center vector position in 3D units. */ - const SFVEC3F &GetBoardCenter3DU() const noexcept + const SFVEC3F& GetBoardCenter3DU() const noexcept { return m_boardCenter; } @@ -317,7 +317,7 @@ public: * * @return the shape polygon */ - const SHAPE_POLY_SET &GetBoardPoly() const noexcept + const SHAPE_POLY_SET& GetBoardPoly() const noexcept { return m_board_poly; } @@ -371,17 +371,17 @@ public: * * @return the map containers of this board */ - const MAP_CONTAINER_2D &GetMapLayers() const noexcept + const MAP_CONTAINER_2D_BASE& GetMapLayers() const noexcept { return m_layers_container2D; } - const CBVHCONTAINER2D* GetPlatedPads_Front() const noexcept + const BVH_CONTAINER_2D* GetPlatedPads_Front() const noexcept { return m_platedpads_container2D_F_Cu; } - const CBVHCONTAINER2D* GetPlatedPads_Back() const noexcept + const BVH_CONTAINER_2D* GetPlatedPads_Back() const noexcept { return m_platedpads_container2D_B_Cu; } @@ -391,7 +391,7 @@ public: * * @return the map containers of holes from this board. */ - const MAP_CONTAINER_2D &GetMapLayersHoles() const noexcept + const MAP_CONTAINER_2D_BASE& GetMapLayersHoles() const noexcept { return m_layers_holes2D; } @@ -401,7 +401,7 @@ public: * * @return a container with holes. */ - const CBVHCONTAINER2D &GetThroughHole_Outer() const noexcept + const BVH_CONTAINER_2D& GetThroughHole_Outer() const noexcept { return m_through_holes_outer; } @@ -411,22 +411,22 @@ public: * * @return a container with holes. */ - const CBVHCONTAINER2D& GetThroughHole_Outer_Ring() const noexcept + const BVH_CONTAINER_2D& GetThroughHole_Outer_Ring() const noexcept { return m_through_holes_outer_ring; } - const SHAPE_POLY_SET &GetThroughHole_Outer_poly() const noexcept + const SHAPE_POLY_SET& GetThroughHole_Outer_poly() const noexcept { return m_through_outer_holes_poly; } - const SHAPE_POLY_SET &GetThroughHole_Outer_Ring_poly() const noexcept + const SHAPE_POLY_SET& GetThroughHole_Outer_Ring_poly() const noexcept { return m_through_outer_ring_holes_poly; } - const SHAPE_POLY_SET &GetThroughHole_Outer_poly_NPTH() const noexcept + const SHAPE_POLY_SET& GetThroughHole_Outer_poly_NPTH() const noexcept { return m_through_outer_holes_poly_NPTH; } @@ -434,12 +434,12 @@ public: /** * @return a container with via THT holes only. */ - const CBVHCONTAINER2D &GetThroughHole_Vias_Outer() const noexcept + const BVH_CONTAINER_2D& GetThroughHole_Vias_Outer() const noexcept { return m_through_holes_vias_outer; } - const SHAPE_POLY_SET &GetThroughHole_Vias_Outer_poly() const noexcept + const SHAPE_POLY_SET& GetThroughHole_Vias_Outer_poly() const noexcept { return m_through_outer_holes_vias_poly; } @@ -449,7 +449,7 @@ public: * * @return a container with holes. */ - const CBVHCONTAINER2D &GetThroughHole_Inner() const noexcept + const BVH_CONTAINER_2D& GetThroughHole_Inner() const noexcept { return m_through_holes_inner; } @@ -521,7 +521,7 @@ public: * * @return the map with polygon's layers. */ - const MAP_POLY &GetPolyMap() const noexcept + const MAP_POLY& GetPolyMap() const noexcept { return m_layers_poly; } @@ -536,12 +536,12 @@ public: return m_B_Cu_PlatedPads_poly; } - const MAP_POLY &GetPolyMapHoles_Inner() const noexcept + const MAP_POLY& GetPolyMapHoles_Inner() const noexcept { return m_layers_inner_holes_poly; } - const MAP_POLY &GetPolyMapHoles_Outer() const noexcept + const MAP_POLY& GetPolyMapHoles_Outer() const noexcept { return m_layers_outer_holes_poly; } @@ -557,52 +557,49 @@ public: void destroyLayers(); // Helper functions to create the board - void createNewTrack( const TRACK* aTrack, CGENERICCONTAINER2D *aDstContainer, + void createNewTrack( const TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer, int aClearanceValue ); - void createNewPadWithClearance( const PAD *aPad, CGENERICCONTAINER2D *aDstContainer, + void createNewPadWithClearance( const PAD *aPad, CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayer, wxSize aClearanceValue ) const; - COBJECT2D *createNewPadDrill( const PAD* aPad, int aInflateValue ); + OBJECT_2D *createNewPadDrill( const PAD* aPad, int aInflateValue ); - void AddPadsWithClearanceToContainer( const FOOTPRINT *aFootprint, - CGENERICCONTAINER2D *aDstContainer, + void AddPadsWithClearanceToContainer( const FOOTPRINT* aFootprint, + CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId, int aInflateValue, bool aSkipNPTHPadsWihNoCopper, bool aSkipPlatedPads, bool aSkipNonPlatedPads ); - void AddFPShapesWithClearanceToContainer( const FOOTPRINT *aFootprint, - CGENERICCONTAINER2D *aDstContainer, + void AddFPShapesWithClearanceToContainer( const FOOTPRINT* aFootprint, + CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId, int aInflateValue ); - void AddShapeWithClearanceToContainer( const PCB_TEXT *aText, - CGENERICCONTAINER2D *aDstContainer, + void AddShapeWithClearanceToContainer( const PCB_TEXT* aText, CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId, int aClearanceValue ); - void AddShapeWithClearanceToContainer( const PCB_SHAPE *aShape, - CGENERICCONTAINER2D *aDstContainer, + void AddShapeWithClearanceToContainer( const PCB_SHAPE* aShape, CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId, int aClearanceValue ); - void AddShapeWithClearanceToContainer( const DIMENSION_BASE *aDimension, - CGENERICCONTAINER2D *aDstContainer, + void AddShapeWithClearanceToContainer( const DIMENSION_BASE* aDimension, + CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId, int aClearanceValue ); - void AddSolidAreasShapesToContainer( const ZONE *aZoneContainer, - CGENERICCONTAINER2D *aDstContainer, + void AddSolidAreasShapesToContainer( const ZONE* aZoneContainer, CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId ); - void TransformArcToSegments( const wxPoint &aCentre, const wxPoint &aStart, double aArcAngle, + void TransformArcToSegments( const wxPoint& aCentre, const wxPoint& aStart, double aArcAngle, int aCircleToSegmentsCount, int aWidth, - CGENERICCONTAINER2D *aDstContainer, const BOARD_ITEM &aBoardItem ); + CONTAINER_2D_BASE* aDstContainer, const BOARD_ITEM& aBoardItem ); - void buildPadShapeThickOutlineAsSegments( const PAD *aPad, CGENERICCONTAINER2D *aDstContainer, + void buildPadShapeThickOutlineAsSegments( const PAD* aPad, CONTAINER_2D_BASE* aDstContainer, int aWidth ); // Helper functions to create poly contours - void buildPadShapeThickOutlineAsPolygon( const PAD *aPad, SHAPE_POLY_SET &aCornerBuffer, + void buildPadShapeThickOutlineAsPolygon( const PAD* aPad, SHAPE_POLY_SET& aCornerBuffer, int aWidth) const; - void transformFPShapesToPolygon( const FOOTPRINT *aFootprint, PCB_LAYER_ID aLayer, + void transformFPShapesToPolygon( const FOOTPRINT* aFootprint, PCB_LAYER_ID aLayer, SHAPE_POLY_SET& aCornerBuffer ) const; public: @@ -668,7 +665,7 @@ private: // Pcb board bounding boxes /// 3d bounding box of the pcb board in 3d units - CBBOX m_boardBoundingBox; + BBOX_3D m_boardBoundingBox; /// It contains polygon contours for each layer MAP_POLY m_layers_poly; @@ -701,33 +698,33 @@ private: // 2D element containers /// It contains the 2d elements of each layer - MAP_CONTAINER_2D m_layers_container2D; + MAP_CONTAINER_2D_BASE m_layers_container2D; - CBVHCONTAINER2D* m_platedpads_container2D_F_Cu; - CBVHCONTAINER2D* m_platedpads_container2D_B_Cu; + BVH_CONTAINER_2D* m_platedpads_container2D_F_Cu; + BVH_CONTAINER_2D* m_platedpads_container2D_B_Cu; /// It contains the holes per each layer - MAP_CONTAINER_2D m_layers_holes2D; + MAP_CONTAINER_2D_BASE m_layers_holes2D; /// It contains the list of throughHoles of the board, /// the radius of the hole is inflated with the copper thickness - CBVHCONTAINER2D m_through_holes_outer; + BVH_CONTAINER_2D m_through_holes_outer; /// It contains the list of throughHoles of the board, /// the radius of the hole is inflated with the annular ring size - CBVHCONTAINER2D m_through_holes_outer_ring; + BVH_CONTAINER_2D m_through_holes_outer_ring; /// It contains the list of throughHoles of the board, /// the radius is the inner hole - CBVHCONTAINER2D m_through_holes_inner; + BVH_CONTAINER_2D m_through_holes_inner; /// It contains the list of throughHoles vias of the board, /// the radius of the hole is inflated with the copper thickness - CBVHCONTAINER2D m_through_holes_vias_outer; + BVH_CONTAINER_2D m_through_holes_vias_outer; /// It contains the list of throughHoles vias of the board, /// the radius of the hole - CBVHCONTAINER2D m_through_holes_vias_inner; + BVH_CONTAINER_2D m_through_holes_vias_inner; // Layers information @@ -787,7 +784,7 @@ private: * "KI_TRACE_EDA_CINFO3D_VISU". See the wxWidgets documentation on wxLogTrace for * more information. */ - static const wxChar *m_logTrace; + static const wxChar* m_logTrace; }; @@ -796,7 +793,7 @@ class EDA_3D_BOARD_HOLDER { public: virtual BOARD_ADAPTER& GetAdapter() = 0; - virtual CCAMERA& GetCurrentCamera() = 0; + virtual CAMERA& GetCurrentCamera() = 0; virtual ~EDA_3D_BOARD_HOLDER() {}; }; diff --git a/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp b/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp index a00a675b1d..041245ad16 100644 --- a/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp +++ b/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp @@ -59,7 +59,7 @@ // But addTextSegmToContainer is a call-back function, // so we cannot send them as arguments. static int s_textWidth; -static CGENERICCONTAINER2D* s_dstcontainer = nullptr; +static CONTAINER_2D_BASE* s_dstcontainer = nullptr; static float s_biuTo3Dunits; static const BOARD_ITEM* s_boardItem = nullptr; @@ -71,11 +71,11 @@ void addTextSegmToContainer( int x0, int y0, int xf, int yf, void* aData ) const SFVEC2F end3DU ( xf * s_biuTo3Dunits, -yf * s_biuTo3Dunits ); if( Is_segment_a_circle( start3DU, end3DU ) ) - s_dstcontainer->Add( new CFILLEDCIRCLE2D( start3DU, ( s_textWidth / 2 ) * s_biuTo3Dunits, - *s_boardItem) ); + s_dstcontainer->Add( new FILLED_CIRCLE_2D( start3DU, ( s_textWidth / 2 ) * s_biuTo3Dunits, + *s_boardItem) ); else - s_dstcontainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, s_textWidth * s_biuTo3Dunits, - *s_boardItem ) ); + s_dstcontainer->Add( new ROUND_SEGMENT_2D( start3DU, end3DU, s_textWidth * s_biuTo3Dunits, + *s_boardItem ) ); } @@ -83,7 +83,7 @@ void addTextSegmToContainer( int x0, int y0, int xf, int yf, void* aData ) // void PCB_TEXT::TransformTextShapeWithClearanceToPolygon // board_items_to_polygon_shape_transform.cpp void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const PCB_TEXT* aText, - CGENERICCONTAINER2D* aDstContainer, + CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId, int aClearanceValue ) { wxSize size = aText->GetTextSize(); @@ -128,7 +128,7 @@ void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const PCB_TEXT* aText, void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const DIMENSION_BASE* aDimension, - CGENERICCONTAINER2D* aDstContainer, + CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId, int aClearanceValue ) { AddShapeWithClearanceToContainer( &aDimension->Text(), aDstContainer, aLayerId, @@ -148,8 +148,8 @@ void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const DIMENSION_BASE* aDim const SFVEC2F end3DU( seg.B.x * m_biuTo3Dunits, -seg.B.y * m_biuTo3Dunits ); - aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, linewidth * m_biuTo3Dunits, - *aDimension ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( start3DU, end3DU, linewidth * m_biuTo3Dunits, + *aDimension ) ); break; } @@ -161,7 +161,7 @@ void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const DIMENSION_BASE* aDim SFVEC2F center( shape->Centre().x * m_biuTo3Dunits, shape->Centre().y * m_biuTo3Dunits ); - aDstContainer->Add( new CRING2D( center, ( radius - deltar ) * m_biuTo3Dunits, + aDstContainer->Add( new RING_2D( center, ( radius - deltar ) * m_biuTo3Dunits, ( radius + deltar ) * m_biuTo3Dunits, *aDimension ) ); break; @@ -180,7 +180,7 @@ void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const DIMENSION_BASE* aDim // void FOOTPRINT::TransformFPShapesWithClearanceToPolygonSet // board_items_to_polygon_shape_transform.cpp#L204 void BOARD_ADAPTER::AddFPShapesWithClearanceToContainer( const FOOTPRINT* aFootprint, - CGENERICCONTAINER2D* aDstContainer, + CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId, int aInflateValue ) { @@ -246,7 +246,7 @@ void BOARD_ADAPTER::AddFPShapesWithClearanceToContainer( const FOOTPRINT* aFootp } -void BOARD_ADAPTER::createNewTrack( const TRACK* aTrack, CGENERICCONTAINER2D* aDstContainer, +void BOARD_ADAPTER::createNewTrack( const TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer, int aClearanceValue ) { SFVEC2F start3DU( aTrack->GetStart().x * m_biuTo3Dunits, @@ -257,7 +257,7 @@ void BOARD_ADAPTER::createNewTrack( const TRACK* aTrack, CGENERICCONTAINER2D* aD case PCB_VIA_T: { const float radius = ( ( aTrack->GetWidth() / 2 ) + aClearanceValue ) * m_biuTo3Dunits; - aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, radius, *aTrack ) ); + aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, radius, *aTrack ) ); break; } @@ -307,13 +307,13 @@ void BOARD_ADAPTER::createNewTrack( const TRACK* aTrack, CGENERICCONTAINER2D* aD { const float radius = ((aTrack->GetWidth() / 2) + aClearanceValue) * m_biuTo3Dunits; - aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, radius, *aTrack ) ); + aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, radius, *aTrack ) ); } else { const float width = (aTrack->GetWidth() + 2 * aClearanceValue ) * m_biuTo3Dunits; - aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, width, *aTrack ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( start3DU, end3DU, width, *aTrack ) ); } break; @@ -325,7 +325,7 @@ void BOARD_ADAPTER::createNewTrack( const TRACK* aTrack, CGENERICCONTAINER2D* aD } -void BOARD_ADAPTER::createNewPadWithClearance( const PAD* aPad, CGENERICCONTAINER2D* aDstContainer, +void BOARD_ADAPTER::createNewPadWithClearance( const PAD* aPad, CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayer, wxSize aClearanceValue ) const { SHAPE_POLY_SET poly; @@ -365,15 +365,15 @@ void BOARD_ADAPTER::createNewPadWithClearance( const PAD* aPad, CGENERICCONTAINE // Cannot add segments that have the same start and end point if( Is_segment_a_circle( start3DU, end3DU ) ) { - aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, + aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, ( width / 2) * m_biuTo3Dunits, *aPad ) ); } else { - aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, - width * m_biuTo3Dunits, - *aPad ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( start3DU, end3DU, + width * m_biuTo3Dunits, + *aPad ) ); } } break; @@ -385,7 +385,8 @@ void BOARD_ADAPTER::createNewPadWithClearance( const PAD* aPad, CGENERICCONTAINE const SFVEC2F center( circle->GetCenter().x * m_biuTo3Dunits, -circle->GetCenter().y * m_biuTo3Dunits ); - aDstContainer->Add( new CFILLEDCIRCLE2D( center, radius * m_biuTo3Dunits, *aPad ) ); + aDstContainer->Add( new FILLED_CIRCLE_2D( center, radius * m_biuTo3Dunits, + *aPad ) ); } break; @@ -428,7 +429,7 @@ void BOARD_ADAPTER::createNewPadWithClearance( const PAD* aPad, CGENERICCONTAINE } -COBJECT2D* BOARD_ADAPTER::createNewPadDrill( const PAD* aPad, int aInflateValue ) +OBJECT_2D* BOARD_ADAPTER::createNewPadDrill( const PAD* aPad, int aInflateValue ) { wxSize drillSize = aPad->GetDrillSize(); @@ -445,7 +446,7 @@ COBJECT2D* BOARD_ADAPTER::createNewPadDrill( const PAD* aPad, int aInflateValue const SFVEC2F center( aPad->GetPosition().x * m_biuTo3Dunits, -aPad->GetPosition().y * m_biuTo3Dunits ); - return new CFILLEDCIRCLE2D( center, radius * m_biuTo3Dunits, *aPad ); + return new FILLED_CIRCLE_2D( center, radius * m_biuTo3Dunits, *aPad ); } else // Oblong hole @@ -459,7 +460,7 @@ COBJECT2D* BOARD_ADAPTER::createNewPadDrill( const PAD* aPad, int aInflateValue SFVEC2F end3DU ( seg->GetSeg().B.x * m_biuTo3Dunits, -seg->GetSeg().B.y * m_biuTo3Dunits ); - return new CROUNDSEGMENT2D( start3DU, end3DU, width * m_biuTo3Dunits, *aPad ); + return new ROUND_SEGMENT_2D( start3DU, end3DU, width * m_biuTo3Dunits, *aPad ); } return nullptr; @@ -467,7 +468,7 @@ COBJECT2D* BOARD_ADAPTER::createNewPadDrill( const PAD* aPad, int aInflateValue void BOARD_ADAPTER::AddPadsWithClearanceToContainer( const FOOTPRINT* aFootprint, - CGENERICCONTAINER2D* aDstContainer, + CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId, int aInflateValue, bool aSkipNPTHPadsWihNoCopper, @@ -544,7 +545,7 @@ void BOARD_ADAPTER::AddPadsWithClearanceToContainer( const FOOTPRINT* aFootprint // common/convert_basic_shapes_to_polygon.cpp void BOARD_ADAPTER::TransformArcToSegments( const wxPoint& aCentre, const wxPoint& aStart, double aArcAngle, int aCircleToSegmentsCount, - int aWidth, CGENERICCONTAINER2D* aDstContainer, + int aWidth, CONTAINER_2D_BASE* aDstContainer, const BOARD_ITEM& aBoardItem ) { wxPoint arc_start, arc_end; @@ -577,13 +578,13 @@ void BOARD_ADAPTER::TransformArcToSegments( const wxPoint& aCentre, const wxPoin if( Is_segment_a_circle( start3DU, end3DU ) ) { - aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, ( aWidth / 2 ) * m_biuTo3Dunits, - aBoardItem ) ); + aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, ( aWidth / 2 ) * m_biuTo3Dunits, + aBoardItem ) ); } else { - aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, aWidth * m_biuTo3Dunits, - aBoardItem ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( start3DU, end3DU, aWidth * m_biuTo3Dunits, + aBoardItem ) ); } curr_start = curr_end; @@ -596,13 +597,13 @@ void BOARD_ADAPTER::TransformArcToSegments( const wxPoint& aCentre, const wxPoin if( Is_segment_a_circle( start3DU, end3DU ) ) { - aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, ( aWidth / 2 ) * m_biuTo3Dunits, - aBoardItem ) ); + aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, ( aWidth / 2 ) * m_biuTo3Dunits, + aBoardItem ) ); } else { - aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, aWidth * m_biuTo3Dunits, - aBoardItem ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( start3DU, end3DU, aWidth * m_biuTo3Dunits, + aBoardItem ) ); } } } @@ -612,7 +613,7 @@ void BOARD_ADAPTER::TransformArcToSegments( const wxPoint& aCentre, const wxPoin // TransformShapeWithClearanceToPolygon // board_items_to_polygon_shape_transform.cpp#L431 void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const PCB_SHAPE* aShape, - CGENERICCONTAINER2D* aDstContainer, + CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId, int aClearanceValue ) { @@ -634,9 +635,9 @@ void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const PCB_SHAPE* aShape, inner_radius = 0; if( aShape->IsFilled() ) - aDstContainer->Add( new CFILLEDCIRCLE2D( center3DU, outer_radius, *aShape ) ); + aDstContainer->Add( new FILLED_CIRCLE_2D( center3DU, outer_radius, *aShape ) ); else - aDstContainer->Add( new CRING2D( center3DU, inner_radius, outer_radius, *aShape ) ); + aDstContainer->Add( new RING_2D( center3DU, inner_radius, outer_radius, *aShape ) ); } break; @@ -662,14 +663,14 @@ void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const PCB_SHAPE* aShape, const SFVEC2F botRight3DU( pts[2].x * m_biuTo3Dunits, -pts[2].y * m_biuTo3Dunits ); const SFVEC2F botLeft3DU( pts[3].x * m_biuTo3Dunits, -pts[3].y * m_biuTo3Dunits ); - aDstContainer->Add( new CROUNDSEGMENT2D( topLeft3DU, topRight3DU, - linewidth * m_biuTo3Dunits, *aShape ) ); - aDstContainer->Add( new CROUNDSEGMENT2D( topRight3DU, botRight3DU, - linewidth * m_biuTo3Dunits, *aShape ) ); - aDstContainer->Add( new CROUNDSEGMENT2D( botRight3DU, botLeft3DU, - linewidth * m_biuTo3Dunits, *aShape ) ); - aDstContainer->Add( new CROUNDSEGMENT2D( botLeft3DU, topLeft3DU, - linewidth * m_biuTo3Dunits, *aShape ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( topLeft3DU, topRight3DU, + linewidth * m_biuTo3Dunits, *aShape ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( topRight3DU, botRight3DU, + linewidth * m_biuTo3Dunits, *aShape ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( botRight3DU, botLeft3DU, + linewidth * m_biuTo3Dunits, *aShape ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( botLeft3DU, topLeft3DU, + linewidth * m_biuTo3Dunits, *aShape ) ); } break; @@ -692,13 +693,13 @@ void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const PCB_SHAPE* aShape, if( Is_segment_a_circle( start3DU, end3DU ) ) { - aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, ( linewidth / 2 ) * m_biuTo3Dunits, + aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, ( linewidth / 2 ) * m_biuTo3Dunits, *aShape ) ); } else { - aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, linewidth * m_biuTo3Dunits, - *aShape ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( start3DU, end3DU, linewidth * m_biuTo3Dunits, + *aShape ) ); } } break; @@ -733,7 +734,7 @@ void BOARD_ADAPTER::AddShapeWithClearanceToContainer( const PCB_SHAPE* aShape, // TransformSolidAreasShapesToPolygonSet // board_items_to_polygon_shape_transform.cpp void BOARD_ADAPTER::AddSolidAreasShapesToContainer( const ZONE* aZoneContainer, - CGENERICCONTAINER2D* aDstContainer, + CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayerId ) { // Copy the polys list because we have to simplify it @@ -768,12 +769,12 @@ void BOARD_ADAPTER::AddSolidAreasShapesToContainer( const ZONE* aZoneContainer, float radius = line_thickness/2; if( radius > 0.0 ) // degenerated circles crash 3D viewer - aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, radius, *aZoneContainer ) ); + aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, radius, *aZoneContainer ) ); } else { - aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, line_thickness, - *aZoneContainer ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( start3DU, end3DU, line_thickness, + *aZoneContainer ) ); } } @@ -795,13 +796,13 @@ void BOARD_ADAPTER::AddSolidAreasShapesToContainer( const ZONE* aZoneContainer, float radius = line_thickness/2; if( radius > 0.0 ) // degenerated circles crash 3D viewer - aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, radius, - *aZoneContainer ) ); + aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, radius, + *aZoneContainer ) ); } else { - aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, line_thickness, - *aZoneContainer ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( start3DU, end3DU, line_thickness, + *aZoneContainer ) ); } } } @@ -810,7 +811,7 @@ void BOARD_ADAPTER::AddSolidAreasShapesToContainer( const ZONE* aZoneContainer, void BOARD_ADAPTER::buildPadShapeThickOutlineAsSegments( const PAD* aPad, - CGENERICCONTAINER2D* aDstContainer, + CONTAINER_2D_BASE* aDstContainer, int aWidth ) { if( aPad->GetShape() == PAD_SHAPE_CIRCLE ) // Draw a ring @@ -822,7 +823,7 @@ void BOARD_ADAPTER::buildPadShapeThickOutlineAsSegments( const PAD* aPad, const float inner_radius = ( radius - aWidth / 2 ) * m_biuTo3Dunits; const float outer_radius = ( radius + aWidth / 2 ) * m_biuTo3Dunits; - aDstContainer->Add( new CRING2D( center3DU, inner_radius, outer_radius, *aPad ) ); + aDstContainer->Add( new RING_2D( center3DU, inner_radius, outer_radius, *aPad ) ); return; } @@ -841,13 +842,13 @@ void BOARD_ADAPTER::buildPadShapeThickOutlineAsSegments( const PAD* aPad, if( Is_segment_a_circle( start3DU, end3DU ) ) { - aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, ( aWidth / 2 ) * m_biuTo3Dunits, - *aPad ) ); + aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, ( aWidth / 2 ) * m_biuTo3Dunits, + *aPad ) ); } else { - aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, aWidth * m_biuTo3Dunits, - *aPad ) ); + aDstContainer->Add( new ROUND_SEGMENT_2D( start3DU, end3DU, aWidth * m_biuTo3Dunits, + *aPad ) ); } } } diff --git a/3d-viewer/3d_canvas/create_layer_items.cpp b/3d-viewer/3d_canvas/create_layer_items.cpp index be644923be..3e30326729 100644 --- a/3d-viewer/3d_canvas/create_layer_items.cpp +++ b/3d-viewer/3d_canvas/create_layer_items.cpp @@ -197,7 +197,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) layer_id.push_back( curr_layer_id ); - CBVHCONTAINER2D *layerContainer = new CBVHCONTAINER2D; + BVH_CONTAINER_2D *layerContainer = new BVH_CONTAINER_2D; m_layers_container2D[curr_layer_id] = layerContainer; if( GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) @@ -213,8 +213,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) m_F_Cu_PlatedPads_poly = new SHAPE_POLY_SET; m_B_Cu_PlatedPads_poly = new SHAPE_POLY_SET; - m_platedpads_container2D_F_Cu = new CBVHCONTAINER2D; - m_platedpads_container2D_B_Cu = new CBVHCONTAINER2D; + m_platedpads_container2D_F_Cu = new BVH_CONTAINER_2D; + m_platedpads_container2D_B_Cu = new BVH_CONTAINER_2D; } @@ -226,7 +226,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) { wxASSERT( m_layers_container2D.find( curr_layer_id ) != m_layers_container2D.end() ); - CBVHCONTAINER2D *layerContainer = m_layers_container2D[curr_layer_id]; + BVH_CONTAINER_2D *layerContainer = m_layers_container2D[curr_layer_id]; // Add track segments shapes and via annulus shapes unsigned int nTracks = trackList.size(); @@ -280,13 +280,13 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) { // Add hole objects - CBVHCONTAINER2D *layerHoleContainer = NULL; + BVH_CONTAINER_2D *layerHoleContainer = nullptr; // Check if the layer is already created if( m_layers_holes2D.find( curr_layer_id ) == m_layers_holes2D.end() ) { // not found, create a new container - layerHoleContainer = new CBVHCONTAINER2D; + layerHoleContainer = new BVH_CONTAINER_2D; m_layers_holes2D[curr_layer_id] = layerHoleContainer; } else @@ -296,34 +296,30 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) } // Add a hole for this layer - layerHoleContainer->Add( new CFILLEDCIRCLE2D( via_center, - hole_inner_radius + thickness, - *track ) ); + layerHoleContainer->Add( new FILLED_CIRCLE_2D( via_center, + hole_inner_radius + thickness, + *track ) ); } else if( curr_layer_id == layer_id[0] ) // it only adds once the THT holes { // Add through hole object - m_through_holes_outer.Add( new CFILLEDCIRCLE2D( via_center, - hole_inner_radius + thickness, - *track ) ); + m_through_holes_outer.Add( new FILLED_CIRCLE_2D( via_center, + hole_inner_radius + thickness, + *track ) ); m_through_holes_vias_outer.Add( - new CFILLEDCIRCLE2D( via_center, hole_inner_radius + thickness, - *track ) ); + new FILLED_CIRCLE_2D( via_center, hole_inner_radius + thickness, + *track ) ); if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && GetFlag( FL_USE_REALISTIC_MODE ) ) { - m_through_holes_outer_ring.Add( new CFILLEDCIRCLE2D( via_center, - ring_radius, - *track ) ); + m_through_holes_outer_ring.Add( new FILLED_CIRCLE_2D( via_center, + ring_radius, + *track ) ); } - m_through_holes_inner.Add( new CFILLEDCIRCLE2D( via_center, hole_inner_radius, - *track ) ); - - //m_through_holes_vias_inner.Add( new CFILLEDCIRCLE2D( via_center, - // hole_inner_radius, - // *track ) ); + m_through_holes_inner.Add( new FILLED_CIRCLE_2D( via_center, hole_inner_radius, + *track ) ); } } } @@ -353,8 +349,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) // Add VIA hole contours // Add outer holes of VIAs - SHAPE_POLY_SET *layerOuterHolesPoly = NULL; - SHAPE_POLY_SET *layerInnerHolesPoly = NULL; + SHAPE_POLY_SET *layerOuterHolesPoly = nullptr; + SHAPE_POLY_SET *layerInnerHolesPoly = nullptr; // Check if the layer is already created if( m_layers_outer_holes_poly.find( curr_layer_id ) == @@ -527,7 +523,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) { wxASSERT( m_layers_container2D.find( curr_layer_id ) != m_layers_container2D.end() ); - CBVHCONTAINER2D *layerContainer = m_layers_container2D[curr_layer_id]; + BVH_CONTAINER_2D *layerContainer = m_layers_container2D[curr_layer_id]; // ADD PADS for( FOOTPRINT* footprint : m_board->Footprints() ) @@ -607,7 +603,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) { wxASSERT( m_layers_container2D.find( curr_layer_id ) != m_layers_container2D.end() ); - CBVHCONTAINER2D *layerContainer = m_layers_container2D[curr_layer_id]; + BVH_CONTAINER_2D *layerContainer = m_layers_container2D[curr_layer_id]; // Add graphic items on copper layers (texts and other graphics) for( BOARD_ITEM* item : m_board->Drawings() ) @@ -897,7 +893,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) if( !Is3DLayerEnabled( curr_layer_id ) ) continue; - CBVHCONTAINER2D *layerContainer = new CBVHCONTAINER2D; + BVH_CONTAINER_2D *layerContainer = new BVH_CONTAINER_2D; m_layers_container2D[curr_layer_id] = layerContainer; SHAPE_POLY_SET *layerPoly = new SHAPE_POLY_SET; diff --git a/3d-viewer/3d_canvas/eda_3d_canvas.cpp b/3d-viewer/3d_canvas/eda_3d_canvas.cpp index 552c5bbaee..b596b25d75 100644 --- a/3d-viewer/3d_canvas/eda_3d_canvas.cpp +++ b/3d-viewer/3d_canvas/eda_3d_canvas.cpp @@ -52,7 +52,7 @@ * * @ingroup trace_env_vars */ -const wxChar * EDA_3D_CANVAS::m_logTrace = wxT( "KI_TRACE_EDA_3D_CANVAS" ); +const wxChar* EDA_3D_CANVAS::m_logTrace = wxT( "KI_TRACE_EDA_3D_CANVAS" ); const float EDA_3D_CANVAS::m_delta_move_step_factor = 0.7f; @@ -87,7 +87,7 @@ END_EVENT_TABLE() EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow* aParent, const int* aAttribList, BOARD* aBoard, - BOARD_ADAPTER& aBoardAdapter, CCAMERA& aCamera, + BOARD_ADAPTER& aBoardAdapter, CAMERA& aCamera, S3D_CACHE* a3DCachePointer ) : HIDPI_GL_CANVAS( aParent, wxID_ANY, aAttribList, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE ), @@ -116,26 +116,20 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow* aParent, const int* aAttribList, BOARD* wxLogTrace( m_logTrace, "EDA_3D_CANVAS::EDA_3D_CANVAS" ); m_editing_timeout_timer.SetOwner( this ); - Connect( m_editing_timeout_timer.GetId(), - wxEVT_TIMER, - wxTimerEventHandler( EDA_3D_CANVAS::OnTimerTimeout_Editing ), - NULL, - this ); + Connect( m_editing_timeout_timer.GetId(), wxEVT_TIMER, + wxTimerEventHandler( EDA_3D_CANVAS::OnTimerTimeout_Editing ), nullptr, this ); m_redraw_trigger_timer.SetOwner( this ); - Connect( m_redraw_trigger_timer.GetId(), - wxEVT_TIMER, - wxTimerEventHandler( EDA_3D_CANVAS::OnTimerTimeout_Redraw ), - NULL, - this ); + Connect( m_redraw_trigger_timer.GetId(), wxEVT_TIMER, + wxTimerEventHandler( EDA_3D_CANVAS::OnTimerTimeout_Redraw ), nullptr, this ); m_is_currently_painting.clear(); - m_3d_render_raytracing = new C3D_RENDER_RAYTRACING( m_boardAdapter, m_camera ); - m_3d_render_ogl_legacy = new C3D_RENDER_OGL_LEGACY( m_boardAdapter, m_camera ); + m_3d_render_raytracing = new RENDER_3D_RAYTRACE( m_boardAdapter, m_camera ); + m_3d_render_ogl_legacy = new RENDER_3D_LEGACY( m_boardAdapter, m_camera ); - wxASSERT( m_3d_render_raytracing != NULL ); - wxASSERT( m_3d_render_ogl_legacy != NULL ); + wxASSERT( m_3d_render_raytracing != nullptr ); + wxASSERT( m_3d_render_ogl_legacy != nullptr ); auto busy_indicator_factory = []() { return std::make_unique(); }; @@ -144,12 +138,12 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow* aParent, const int* aAttribList, BOARD* RenderEngineChanged(); - wxASSERT( aBoard != NULL ); + wxASSERT( aBoard != nullptr ); m_boardAdapter.SetBoard( aBoard ); m_boardAdapter.SetColorSettings( Pgm().GetSettingsManager().GetColorSettings() ); - wxASSERT( a3DCachePointer != NULL ); + wxASSERT( a3DCachePointer != nullptr ); m_boardAdapter.Set3DCacheManager( a3DCachePointer ); const wxEventType events[] = @@ -169,7 +163,7 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow* aParent, const int* aAttribList, BOARD* }; for( wxEventType eventType : events ) - Connect( eventType, wxEventHandler( EDA_3D_CANVAS::OnEvent ), NULL, m_eventDispatcher ); + Connect( eventType, wxEventHandler( EDA_3D_CANVAS::OnEvent ), nullptr, m_eventDispatcher ); } @@ -178,7 +172,7 @@ EDA_3D_CANVAS::~EDA_3D_CANVAS() wxLogTrace( m_logTrace, "EDA_3D_CANVAS::~EDA_3D_CANVAS" ); delete m_accelerator3DShapes; - m_accelerator3DShapes = NULL; + m_accelerator3DShapes = nullptr; releaseOpenGL(); } @@ -191,22 +185,22 @@ void EDA_3D_CANVAS::releaseOpenGL() GL_CONTEXT_MANAGER::Get().LockCtx( m_glRC, this ); delete m_3d_render_raytracing; - m_3d_render_raytracing = NULL; + m_3d_render_raytracing = nullptr; delete m_3d_render_ogl_legacy; - m_3d_render_ogl_legacy = NULL; + m_3d_render_ogl_legacy = nullptr; - // This is just a copy of a pointer, can safely be set to NULL - m_3d_render = NULL; + // This is just a copy of a pointer, can safely be set to NULL. + m_3d_render = nullptr; GL_CONTEXT_MANAGER::Get().UnlockCtx( m_glRC ); GL_CONTEXT_MANAGER::Get().DestroyCtx( m_glRC ); - m_glRC = NULL; + m_glRC = nullptr; } } -void EDA_3D_CANVAS::OnCloseWindow( wxCloseEvent &event ) +void EDA_3D_CANVAS::OnCloseWindow( wxCloseEvent& event ) { releaseOpenGL(); @@ -214,7 +208,7 @@ void EDA_3D_CANVAS::OnCloseWindow( wxCloseEvent &event ) } -void EDA_3D_CANVAS::OnResize( wxSizeEvent &event ) +void EDA_3D_CANVAS::OnResize( wxSizeEvent& event ) { this->Request_refresh(); } @@ -295,18 +289,18 @@ bool EDA_3D_CANVAS::initializeOpenGL() } -void EDA_3D_CANVAS::GetScreenshot( wxImage &aDstImage ) +void EDA_3D_CANVAS::GetScreenshot( wxImage& aDstImage ) { OGL_GetScreenshot( aDstImage ); } -void EDA_3D_CANVAS::ReloadRequest( BOARD *aBoard , S3D_CACHE *aCachePointer ) +void EDA_3D_CANVAS::ReloadRequest( BOARD* aBoard , S3D_CACHE* aCachePointer ) { - if( aCachePointer != NULL ) + if( aCachePointer != nullptr ) m_boardAdapter.Set3DCacheManager( aCachePointer ); - if( aBoard != NULL ) + if( aBoard != nullptr ) m_boardAdapter.SetBoard( aBoard ); m_boardAdapter.SetColorSettings( Pgm().GetSettingsManager().GetColorSettings() ); @@ -392,7 +386,7 @@ void EDA_3D_CANVAS::DoRePaint() // This function may only be called when the window is shown on screen" // Explicitly create a new rendering context instance for this canvas. - if( m_glRC == NULL ) + if( m_glRC == nullptr ) m_glRC = GL_CONTEXT_MANAGER::Get().CreateCtx( this ); GL_CONTEXT_MANAGER::Get().LockCtx( m_glRC, this ); @@ -554,7 +548,7 @@ void EDA_3D_CANVAS::DoRePaint() if( !err_messages.IsEmpty() ) wxLogMessage( err_messages ); - if( (!m_camera_is_moving) && requested_redraw ) + if( ( !m_camera_is_moving ) && requested_redraw ) { m_mouse_was_moved = false; Request_refresh( false ); @@ -572,14 +566,14 @@ void EDA_3D_CANVAS::SetEventDispatcher( TOOL_DISPATCHER* aEventDispatcher ) { m_parent->Connect( wxEVT_TOOL, wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ), - NULL, m_eventDispatcher ); + nullptr, m_eventDispatcher ); } else { // While loop is used to be sure that all event handlers are removed. while( m_parent->Disconnect( wxEVT_TOOL, wxCommandEventHandler( TOOL_DISPATCHER::DispatchWxCommand ), - NULL, m_eventDispatcher ) ); + nullptr, m_eventDispatcher ) ); } } @@ -595,14 +589,14 @@ void EDA_3D_CANVAS::OnEvent( wxEvent& aEvent ) } -void EDA_3D_CANVAS::OnEraseBackground( wxEraseEvent &event ) +void EDA_3D_CANVAS::OnEraseBackground( wxEraseEvent& event ) { wxLogTrace( m_logTrace, "EDA_3D_CANVAS::OnEraseBackground" ); // Do nothing, to avoid flashing. } -void EDA_3D_CANVAS::OnMouseWheel( wxMouseEvent &event ) +void EDA_3D_CANVAS::OnMouseWheel( wxMouseEvent& event ) { bool mouseActivity = false; @@ -690,7 +684,7 @@ void EDA_3D_CANVAS::OnMagnify( wxMouseEvent& event ) #endif -void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent &event ) +void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) { //wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::OnMouseMove" ) ); @@ -811,7 +805,7 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent &event ) } -void EDA_3D_CANVAS::OnLeftDown( wxMouseEvent &event ) +void EDA_3D_CANVAS::OnLeftDown( wxMouseEvent& event ) { SetFocus(); stop_editingTimeOut_Timer(); @@ -827,7 +821,7 @@ void EDA_3D_CANVAS::OnLeftDown( wxMouseEvent &event ) } -void EDA_3D_CANVAS::OnLeftUp( wxMouseEvent &event ) +void EDA_3D_CANVAS::OnLeftUp( wxMouseEvent& event ) { if( m_camera_is_moving ) return; @@ -840,14 +834,14 @@ void EDA_3D_CANVAS::OnLeftUp( wxMouseEvent &event ) } -void EDA_3D_CANVAS::OnMiddleDown( wxMouseEvent &event ) +void EDA_3D_CANVAS::OnMiddleDown( wxMouseEvent& event ) { SetFocus(); stop_editingTimeOut_Timer(); } -void EDA_3D_CANVAS::OnMiddleUp( wxMouseEvent &event ) +void EDA_3D_CANVAS::OnMiddleUp( wxMouseEvent& event ) { if( m_camera_is_moving ) return; @@ -864,7 +858,7 @@ void EDA_3D_CANVAS::OnMiddleUp( wxMouseEvent &event ) } -void EDA_3D_CANVAS::OnTimerTimeout_Editing( wxTimerEvent &event ) +void EDA_3D_CANVAS::OnTimerTimeout_Editing( wxTimerEvent& event ) { (void)event; @@ -888,7 +882,7 @@ void EDA_3D_CANVAS::restart_editingTimeOut_Timer() } -void EDA_3D_CANVAS::OnTimerTimeout_Redraw( wxTimerEvent &event ) +void EDA_3D_CANVAS::OnTimerTimeout_Redraw( wxTimerEvent& event ) { Request_refresh( true ); } @@ -1136,7 +1130,7 @@ void EDA_3D_CANVAS::RenderEngineChanged() { case RENDER_ENGINE::OPENGL_LEGACY: m_3d_render = m_3d_render_ogl_legacy; break; case RENDER_ENGINE::RAYTRACING: m_3d_render = m_3d_render_raytracing; break; - default: m_3d_render = NULL; break; + default: m_3d_render = nullptr; break; } if( m_3d_render ) diff --git a/3d-viewer/3d_canvas/eda_3d_canvas.h b/3d-viewer/3d_canvas/eda_3d_canvas.h index 483a551c27..aadaa9a8b0 100644 --- a/3d-viewer/3d_canvas/eda_3d_canvas.h +++ b/3d-viewer/3d_canvas/eda_3d_canvas.h @@ -38,8 +38,8 @@ class WX_INFOBAR; class wxStatusBar; class BOARD; -class C3D_RENDER_RAYTRACING; -class C3D_RENDER_OGL_LEGACY; +class RENDER_3D_RAYTRACE; +class RENDER_3D_LEGACY; /** @@ -57,7 +57,7 @@ public: * @param aSettings the settings options to be used by this canvas. */ EDA_3D_CANVAS( wxWindow* aParent, const int* aAttribList, BOARD* aBoard, - BOARD_ADAPTER& aSettings, CCAMERA& aCamera, S3D_CACHE* a3DCachePointer ); + BOARD_ADAPTER& aSettings, CAMERA& aCamera, S3D_CACHE* a3DCachePointer ); ~EDA_3D_CANVAS(); @@ -81,7 +81,7 @@ public: m_parentInfoBar = aInfoBar; } - void ReloadRequest( BOARD *aBoard = NULL, S3D_CACHE *aCachePointer = NULL ); + void ReloadRequest( BOARD* aBoard = nullptr, S3D_CACHE* aCachePointer = nullptr ); /** * Query if there is a pending reload request. @@ -102,10 +102,11 @@ public: void RenderRaytracingRequest(); /** - * Request a screenshot and output it to the aDstImage + * Request a screenshot and output it to the \a aDstImage + * * @param aDstImage - Screenshot destination image */ - void GetScreenshot( wxImage &aDstImage ); + void GetScreenshot( wxImage& aDstImage ); /** * Helper function to call view commands. @@ -183,24 +184,24 @@ private: */ void DoRePaint(); - void OnEraseBackground( wxEraseEvent &event ); + void OnEraseBackground( wxEraseEvent& event ); void OnRefreshRequest( wxEvent& aEvent ); - void OnMouseWheel( wxMouseEvent &event ); + void OnMouseWheel( wxMouseEvent& event ); #if wxCHECK_VERSION( 3, 1, 0 ) || defined( USE_OSX_MAGNIFY_EVENT ) void OnMagnify( wxMouseEvent& event ); #endif - void OnMouseMove( wxMouseEvent &event ); - void OnLeftDown( wxMouseEvent &event ); - void OnLeftUp( wxMouseEvent &event ); - void OnMiddleUp( wxMouseEvent &event ); - void OnMiddleDown( wxMouseEvent &event ); + void OnMouseMove( wxMouseEvent& event ); + void OnLeftDown( wxMouseEvent& event ); + void OnLeftUp( wxMouseEvent& event ); + void OnMiddleUp( wxMouseEvent& event ); + void OnMiddleDown( wxMouseEvent& event ); void OnTimerTimeout_Editing( wxTimerEvent& event ); - void OnCloseWindow( wxCloseEvent &event ); - void OnResize( wxSizeEvent &event ); + void OnCloseWindow( wxCloseEvent& event ); + void OnResize( wxSizeEvent& event ); void OnTimerTimeout_Redraw( wxTimerEvent& event ); DECLARE_EVENT_TABLE() @@ -272,10 +273,10 @@ private: int m_moving_speed_multiplier; // Camera animation speed multiplier option BOARD_ADAPTER& m_boardAdapter; // Pre-computed 3D info and settings - CCAMERA& m_camera; - C3D_RENDER_BASE* m_3d_render; - C3D_RENDER_RAYTRACING* m_3d_render_raytracing; - C3D_RENDER_OGL_LEGACY* m_3d_render_ogl_legacy; + CAMERA& m_camera; + RENDER_3D_BASE* m_3d_render; + RENDER_3D_RAYTRACE* m_3d_render_raytracing; + RENDER_3D_LEGACY* m_3d_render_ogl_legacy; static const float m_delta_move_step_factor; // Step factor to used with cursor on // relation to the current zoom @@ -283,8 +284,8 @@ private: bool m_opengl_supports_raytracing; bool m_render_raytracing_was_requested; - CCONTAINER m_3DShapes_container; // Holds 3D shapes from footprints - CGENERICACCELERATOR *m_accelerator3DShapes; // used for mouse over searching + CONTAINER_3D m_3DShapes_container; // Holds 3D shapes from footprints + ACCELERATOR_3D* m_accelerator3DShapes; // used for mouse over searching BOARD_ITEM* m_currentIntersectedBoardItem; @@ -294,7 +295,7 @@ private: * "KI_TRACE_EDA_3D_CANVAS". See the wxWidgets documentation on wxLogTrace for * more information. */ - static const wxChar *m_logTrace; + static const wxChar* m_logTrace; }; diff --git a/3d-viewer/3d_model_viewer/c3d_model_viewer.cpp b/3d-viewer/3d_model_viewer/c3d_model_viewer.cpp index 5507e39a47..982ae9f751 100644 --- a/3d-viewer/3d_model_viewer/c3d_model_viewer.cpp +++ b/3d-viewer/3d_model_viewer/c3d_model_viewer.cpp @@ -117,7 +117,7 @@ C3D_MODEL_VIEWER::~C3D_MODEL_VIEWER() } -void C3D_MODEL_VIEWER::Set3DModel( const S3DMODEL &a3DModel ) +void C3D_MODEL_VIEWER::Set3DModel( const S3DMODEL& a3DModel ) { wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::Set3DModel with a S3DMODEL" ) ); @@ -144,7 +144,7 @@ void C3D_MODEL_VIEWER::Set3DModel( const S3DMODEL &a3DModel ) } -void C3D_MODEL_VIEWER::Set3DModel(const wxString &aModelPathName) +void C3D_MODEL_VIEWER::Set3DModel(const wxString& aModelPathName) { wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::Set3DModel with a wxString" ) ); @@ -182,7 +182,6 @@ void C3D_MODEL_VIEWER::ogl_initialize() glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); glEnable( GL_DEPTH_TEST ); - //glDepthFunc( GL_LEQUAL ); glEnable( GL_CULL_FACE ); glShadeModel( GL_SMOOTH ); glEnable( GL_LINE_SMOOTH ); @@ -219,7 +218,7 @@ void C3D_MODEL_VIEWER::ogl_set_arrow_material() } -void C3D_MODEL_VIEWER::OnPaint( wxPaintEvent &event ) +void C3D_MODEL_VIEWER::OnPaint( wxPaintEvent& event ) { event.Skip( false ); @@ -257,7 +256,7 @@ void C3D_MODEL_VIEWER::OnPaint( wxPaintEvent &event ) wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::OnPaint m_reload_is_needed" ) ); m_reload_is_needed = false; - m_ogl_3dmodel = new C_OGL_3DMODEL( *m_3d_model, MATERIAL_MODE::NORMAL ); + m_ogl_3dmodel = new MODEL_3D( *m_3d_model, MATERIAL_MODE::NORMAL ); // It convert a model as it was a board, so get the max size dimension of the board // and compute the conversion scale @@ -330,15 +329,15 @@ void C3D_MODEL_VIEWER::OnPaint( wxPaintEvent &event ) ogl_set_arrow_material(); glColor3f( 0.9f, 0.0f, 0.0f ); - OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), SFVEC3F( RANGE_SCALE_3D / 2.65f, 0.0f, 0.0f ), + DrawRoundArrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), SFVEC3F( RANGE_SCALE_3D / 2.65f, 0.0f, 0.0f ), 0.275f ); glColor3f( 0.0f, 0.9f, 0.0f ); - OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), SFVEC3F( 0.0f, RANGE_SCALE_3D / 2.65f, 0.0f ), + DrawRoundArrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), SFVEC3F( 0.0f, RANGE_SCALE_3D / 2.65f, 0.0f ), 0.275f ); glColor3f( 0.0f, 0.0f, 0.9f ); - OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), SFVEC3F( 0.0f, 0.0f, RANGE_SCALE_3D / 2.65f ), + DrawRoundArrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), SFVEC3F( 0.0f, 0.0f, RANGE_SCALE_3D / 2.65f ), 0.275f ); // "Swaps the double-buffer of this window, making the back-buffer the @@ -350,14 +349,14 @@ void C3D_MODEL_VIEWER::OnPaint( wxPaintEvent &event ) } -void C3D_MODEL_VIEWER::OnEraseBackground( wxEraseEvent &event ) +void C3D_MODEL_VIEWER::OnEraseBackground( wxEraseEvent& event ) { wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::OnEraseBackground" ) ); // Do nothing, to avoid flashing. } -void C3D_MODEL_VIEWER::OnMouseWheel( wxMouseEvent &event ) +void C3D_MODEL_VIEWER::OnMouseWheel( wxMouseEvent& event ) { wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::OnMouseWheel" ) ); @@ -390,19 +389,11 @@ void C3D_MODEL_VIEWER::OnMouseWheel( wxMouseEvent &event ) #ifdef USE_OSX_MAGNIFY_EVENT void C3D_MODEL_VIEWER::OnMagnify( wxMouseEvent& event ) { - /* - double magnification = ( event.GetMagnification() + 1.0f ); - GetPrm3DVisu().m_Zoom /= magnification; - if( GetPrm3DVisu().m_Zoom <= 0.01 ) - GetPrm3DVisu().m_Zoom = 0.01; - DisplayStatus(); - Refresh( false ); - */ } #endif -void C3D_MODEL_VIEWER::OnMouseMove( wxMouseEvent &event ) +void C3D_MODEL_VIEWER::OnMouseMove( wxMouseEvent& event ) { m_trackBallCamera.SetCurWindowSize( GetClientSize() ); @@ -410,8 +401,6 @@ void C3D_MODEL_VIEWER::OnMouseMove( wxMouseEvent &event ) { if( event.LeftIsDown() ) // Drag m_trackBallCamera.Drag( event.GetPosition() ); - //else if( event.MiddleIsDown() ) // Pan - // m_trackBallCamera.Pan( event.GetPosition() ); // orientation has changed, redraw mesh Refresh( false ); @@ -421,37 +410,31 @@ void C3D_MODEL_VIEWER::OnMouseMove( wxMouseEvent &event ) } -void C3D_MODEL_VIEWER::OnLeftDown( wxMouseEvent &event ) -{ - //m_is_moving_mouse = true; - event.Skip(); -} - - -void C3D_MODEL_VIEWER::OnLeftUp( wxMouseEvent &event ) -{ - //m_is_moving_mouse = false; - //Refresh( false ); - event.Skip(); -} - - -void C3D_MODEL_VIEWER::OnMiddleDown( wxMouseEvent &event ) -{ - //m_is_moving_mouse = true; - event.Skip(); -} - - -void C3D_MODEL_VIEWER::OnMiddleUp( wxMouseEvent &event ) -{ - //m_is_moving_mouse = false; - //Refresh( false ); - event.Skip(); -} - - -void C3D_MODEL_VIEWER::OnRightClick( wxMouseEvent &event ) +void C3D_MODEL_VIEWER::OnLeftDown( wxMouseEvent& event ) +{ + event.Skip(); +} + + +void C3D_MODEL_VIEWER::OnLeftUp( wxMouseEvent& event ) +{ + event.Skip(); +} + + +void C3D_MODEL_VIEWER::OnMiddleDown( wxMouseEvent& event ) +{ + event.Skip(); +} + + +void C3D_MODEL_VIEWER::OnMiddleUp( wxMouseEvent& event ) +{ + event.Skip(); +} + + +void C3D_MODEL_VIEWER::OnRightClick( wxMouseEvent& event ) { event.Skip(); } diff --git a/3d-viewer/3d_model_viewer/c3d_model_viewer.h b/3d-viewer/3d_model_viewer/c3d_model_viewer.h index 9eb53ff4b7..b20273514d 100644 --- a/3d-viewer/3d_model_viewer/c3d_model_viewer.h +++ b/3d-viewer/3d_model_viewer/c3d_model_viewer.h @@ -37,7 +37,7 @@ #include class S3D_CACHE; -class C_OGL_3DMODEL; +class MODEL_3D; /** * Implement a canvas based on a wxGLCanvas. @@ -49,7 +49,7 @@ public: * Create a new 3D Canvas with a attribute list. * * @param aParent the parent creator of this canvas. - * @param aAttribList a list of openGL options created by #COGL_ATT_LIST::GetAttributesList. + * @param aAttribList a list of openGL options created by #OGL_ATT_LIST::GetAttributesList. */ C3D_MODEL_VIEWER( wxWindow* aParent, const int* aAttribList = 0, S3D_CACHE* aCacheManager = nullptr ); @@ -107,13 +107,13 @@ private: wxGLContext* m_glRC; /// Camera used in this canvas - CTRACK_BALL m_trackBallCamera; + TRACK_BALL m_trackBallCamera; /// Original 3d model data const S3DMODEL* m_3d_model; /// Class holder for 3d model to display on openGL - C_OGL_3DMODEL* m_ogl_3dmodel; + MODEL_3D* m_ogl_3dmodel; /// Flag that we have a new model and it need to be reloaded when the paint is called bool m_reload_is_needed; diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_createscene_ogl_legacy.cpp b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_createscene_ogl_legacy.cpp index 7cdf7c719c..e3de74d3cf 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_createscene_ogl_legacy.cpp +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_createscene_ogl_legacy.cpp @@ -32,11 +32,11 @@ #include // To use GetRunningMicroSecs or another profiling utility -void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CFILLEDCIRCLE2D * aFilledCircle, - CLAYER_TRIANGLES *aDstLayer, - float aZtop, float aZbot ) +void RENDER_3D_LEGACY::add_object_to_triangle_layer( const FILLED_CIRCLE_2D* aFilledCircle, + TRIANGLE_DISPLAY_LIST* aDstLayer, + float aZtop, float aZbot ) { - const SFVEC2F ¢er = aFilledCircle->GetCenter(); + const SFVEC2F& center = aFilledCircle->GetCenter(); const float radius = aFilledCircle->GetRadius() * 2.0f; // Double because the render triangle @@ -63,26 +63,25 @@ void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CFILLEDCIRCLE2D } -void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CPOLYGON4PTS2D * aPoly, - CLAYER_TRIANGLES *aDstLayer, - float aZtop, float aZbot ) +void RENDER_3D_LEGACY::add_object_to_triangle_layer( const POLYGON_4PT_2D* aPoly, + TRIANGLE_DISPLAY_LIST* aDstLayer, + float aZtop, float aZbot ) { - const SFVEC2F &v0 = aPoly->GetV0(); - const SFVEC2F &v1 = aPoly->GetV1(); - const SFVEC2F &v2 = aPoly->GetV2(); - const SFVEC2F &v3 = aPoly->GetV3(); + const SFVEC2F& v0 = aPoly->GetV0(); + const SFVEC2F& v1 = aPoly->GetV1(); + const SFVEC2F& v2 = aPoly->GetV2(); + const SFVEC2F& v3 = aPoly->GetV3(); add_triangle_top_bot( aDstLayer, v0, v2, v1, aZtop, aZbot ); add_triangle_top_bot( aDstLayer, v2, v0, v3, aZtop, aZbot ); } -void C3D_RENDER_OGL_LEGACY::generate_ring_contour( const SFVEC2F &aCenter, - float aInnerRadius, float aOuterRadius, - unsigned int aNr_sides_per_circle, - std::vector< SFVEC2F > &aInnerContourResult, - std::vector< SFVEC2F > &aOuterContourResult, - bool aInvertOrder ) +void RENDER_3D_LEGACY::generate_ring_contour( const SFVEC2F& aCenter, float aInnerRadius, + float aOuterRadius, unsigned int aNr_sides_per_circle, + std::vector< SFVEC2F >& aInnerContourResult, + std::vector< SFVEC2F >& aOuterContourResult, + bool aInvertOrder ) { aInnerContourResult.clear(); aInnerContourResult.reserve( aNr_sides_per_circle + 2 ); @@ -112,32 +111,27 @@ void C3D_RENDER_OGL_LEGACY::generate_ring_contour( const SFVEC2F &aCenter, } -void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CRING2D * aRing, - CLAYER_TRIANGLES *aDstLayer, - float aZtop, float aZbot ) +void RENDER_3D_LEGACY::add_object_to_triangle_layer( const RING_2D* aRing, + TRIANGLE_DISPLAY_LIST* aDstLayer, + float aZtop, float aZbot ) { - const SFVEC2F ¢er = aRing->GetCenter(); + const SFVEC2F& center = aRing->GetCenter(); const float inner = aRing->GetInnerRadius(); const float outer = aRing->GetOuterRadius(); std::vector< SFVEC2F > innerContour; std::vector< SFVEC2F > outerContour; - generate_ring_contour( center, - inner, - outer, - m_boardAdapter.GetNrSegmentsCircle( outer * 2.0f ), - innerContour, - outerContour, - false ); + generate_ring_contour( center, inner, outer, m_boardAdapter.GetNrSegmentsCircle( outer * 2.0f ), + innerContour, outerContour, false ); // This will add the top and bot quads that will form the approximated ring for( unsigned int i = 0; i < ( innerContour.size() - 1 ); ++i ) { - const SFVEC2F &vi0 = innerContour[i + 0]; - const SFVEC2F &vi1 = innerContour[i + 1]; - const SFVEC2F &vo0 = outerContour[i + 0]; - const SFVEC2F &vo1 = outerContour[i + 1]; + const SFVEC2F& vi0 = innerContour[i + 0]; + const SFVEC2F& vi1 = innerContour[i + 1]; + const SFVEC2F& vo0 = outerContour[i + 0]; + const SFVEC2F& vo1 = outerContour[i + 1]; aDstLayer->m_layer_top_triangles->AddQuad( SFVEC3F( vi1.x, vi1.y, aZtop ), SFVEC3F( vi0.x, vi0.y, aZtop ), @@ -152,21 +146,21 @@ void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CRING2D * aRing, } -void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CTRIANGLE2D * aTri, - CLAYER_TRIANGLES *aDstLayer, - float aZtop, float aZbot ) +void RENDER_3D_LEGACY::add_object_to_triangle_layer( const TRIANGLE_2D* aTri, + TRIANGLE_DISPLAY_LIST* aDstLayer, + float aZtop, float aZbot ) { - const SFVEC2F &v1 = aTri->GetP1(); - const SFVEC2F &v2 = aTri->GetP2(); - const SFVEC2F &v3 = aTri->GetP3(); + const SFVEC2F& v1 = aTri->GetP1(); + const SFVEC2F& v2 = aTri->GetP2(); + const SFVEC2F& v3 = aTri->GetP3(); add_triangle_top_bot( aDstLayer, v1, v2, v3, aZtop, aZbot ); } -void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CROUNDSEGMENT2D * aSeg, - CLAYER_TRIANGLES *aDstLayer, - float aZtop, float aZbot ) +void RENDER_3D_LEGACY::add_object_to_triangle_layer( const ROUND_SEGMENT_2D* aSeg, + TRIANGLE_DISPLAY_LIST* aDstLayer, + float aZtop, float aZbot ) { const SFVEC2F& leftStart = aSeg->GetLeftStar(); const SFVEC2F& leftEnd = aSeg->GetLeftEnd(); @@ -249,44 +243,41 @@ void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CROUNDSEGMENT2D } -CLAYERS_OGL_DISP_LISTS *C3D_RENDER_OGL_LEGACY::generate_holes_display_list( - const LIST_OBJECT2D &aListHolesObject2d, - const SHAPE_POLY_SET &aPoly, - float aZtop, - float aZbot, - bool aInvertFaces, - const CBVHCONTAINER2D *aThroughHoles ) +OPENGL_RENDER_LIST* RENDER_3D_LEGACY::generate_holes_display_list( + const LIST_OBJECT2D& aListHolesObject2d, const SHAPE_POLY_SET& aPoly, + float aZtop, float aZbot, bool aInvertFaces, const BVH_CONTAINER_2D* aThroughHoles ) { - CLAYERS_OGL_DISP_LISTS *ret = NULL; + OPENGL_RENDER_LIST* ret = nullptr; if( aListHolesObject2d.size() > 0 ) { - CLAYER_TRIANGLES *layerTriangles = new CLAYER_TRIANGLES( aListHolesObject2d.size() * 2 ); + TRIANGLE_DISPLAY_LIST* layerTriangles = + new TRIANGLE_DISPLAY_LIST( aListHolesObject2d.size() * 2 ); // Convert the list of objects(filled circles) to triangle layer structure for( LIST_OBJECT2D::const_iterator itemOnLayer = aListHolesObject2d.begin(); itemOnLayer != aListHolesObject2d.end(); ++itemOnLayer ) { - const COBJECT2D* object2d_A = static_cast( *itemOnLayer ); + const OBJECT_2D* object2d_A = static_cast( *itemOnLayer ); - wxASSERT( ( object2d_A->GetObjectType() == OBJECT2D_TYPE::FILLED_CIRCLE ) - || ( object2d_A->GetObjectType() == OBJECT2D_TYPE::ROUNDSEG ) ); + wxASSERT( ( object2d_A->GetObjectType() == OBJECT_2D_TYPE::FILLED_CIRCLE ) + || ( object2d_A->GetObjectType() == OBJECT_2D_TYPE::ROUNDSEG ) ); switch( object2d_A->GetObjectType() ) { - case OBJECT2D_TYPE::FILLED_CIRCLE: - add_object_to_triangle_layer( static_cast( object2d_A ), + case OBJECT_2D_TYPE::FILLED_CIRCLE: + add_object_to_triangle_layer( static_cast( object2d_A ), layerTriangles, aZtop, aZbot ); break; - case OBJECT2D_TYPE::ROUNDSEG: - add_object_to_triangle_layer( static_cast( object2d_A ), + case OBJECT_2D_TYPE::ROUNDSEG: + add_object_to_triangle_layer( static_cast( object2d_A ), layerTriangles, aZtop, aZbot ); break; default: - wxFAIL_MSG( "C3D_RENDER_OGL_LEGACY::generate_holes_display_list: " + wxFAIL_MSG( "RENDER_3D_LEGACY::generate_holes_display_list: " "Object type is not implemented" ); break; } @@ -301,7 +292,7 @@ CLAYERS_OGL_DISP_LISTS *C3D_RENDER_OGL_LEGACY::generate_holes_display_list( aInvertFaces, aThroughHoles ); } - ret = new CLAYERS_OGL_DISP_LISTS( *layerTriangles, m_ogl_circle_texture, aZbot, aZtop ); + ret = new OPENGL_RENDER_LIST( *layerTriangles, m_ogl_circle_texture, aZbot, aZtop ); delete layerTriangles; } @@ -310,16 +301,16 @@ CLAYERS_OGL_DISP_LISTS *C3D_RENDER_OGL_LEGACY::generate_holes_display_list( } -CLAYERS_OGL_DISP_LISTS* -C3D_RENDER_OGL_LEGACY::generateLayerListFromContainer( const CBVHCONTAINER2D *aContainer, - const SHAPE_POLY_SET *aPolyList, - PCB_LAYER_ID aLayerId, - const CBVHCONTAINER2D *aThroughHoles ) +OPENGL_RENDER_LIST* +RENDER_3D_LEGACY::generateLayerListFromContainer( const BVH_CONTAINER_2D* aContainer, + const SHAPE_POLY_SET* aPolyList, + PCB_LAYER_ID aLayerId, + const BVH_CONTAINER_2D* aThroughHoles ) { if( aContainer == nullptr ) return nullptr; - const LIST_OBJECT2D &listObject2d = aContainer->GetList(); + const LIST_OBJECT2D& listObject2d = aContainer->GetList(); if( listObject2d.size() == 0 ) return nullptr; @@ -332,7 +323,7 @@ C3D_RENDER_OGL_LEGACY::generateLayerListFromContainer( const CBVHCONTAINER2D *aC // Calculate an estimation for the nr of triangles based on the nr of objects unsigned int nrTrianglesEstimation = listObject2d.size() * 8; - CLAYER_TRIANGLES *layerTriangles = new CLAYER_TRIANGLES( nrTrianglesEstimation ); + TRIANGLE_DISPLAY_LIST* layerTriangles = new TRIANGLE_DISPLAY_LIST( nrTrianglesEstimation ); // store in a list so it will be latter deleted m_triangles.push_back( layerTriangles ); @@ -342,37 +333,37 @@ C3D_RENDER_OGL_LEGACY::generateLayerListFromContainer( const CBVHCONTAINER2D *aC itemOnLayer != listObject2d.end(); ++itemOnLayer ) { - const COBJECT2D *object2d_A = static_cast(*itemOnLayer); + const OBJECT_2D* object2d_A = static_cast( *itemOnLayer ); switch( object2d_A->GetObjectType() ) { - case OBJECT2D_TYPE::FILLED_CIRCLE: - add_object_to_triangle_layer( (const CFILLEDCIRCLE2D *)object2d_A, + case OBJECT_2D_TYPE::FILLED_CIRCLE: + add_object_to_triangle_layer( (const FILLED_CIRCLE_2D *)object2d_A, layerTriangles, layer_z_top, layer_z_bot ); break; - case OBJECT2D_TYPE::POLYGON4PT: - add_object_to_triangle_layer( (const CPOLYGON4PTS2D *)object2d_A, + case OBJECT_2D_TYPE::POLYGON4PT: + add_object_to_triangle_layer( (const POLYGON_4PT_2D*)object2d_A, layerTriangles, layer_z_top, layer_z_bot ); break; - case OBJECT2D_TYPE::RING: - add_object_to_triangle_layer( (const CRING2D *)object2d_A, + case OBJECT_2D_TYPE::RING: + add_object_to_triangle_layer( (const RING_2D*)object2d_A, layerTriangles, layer_z_top, layer_z_bot ); break; - case OBJECT2D_TYPE::TRIANGLE: - add_object_to_triangle_layer( (const CTRIANGLE2D *)object2d_A, + case OBJECT_2D_TYPE::TRIANGLE: + add_object_to_triangle_layer( (const TRIANGLE_2D*)object2d_A, layerTriangles, layer_z_top, layer_z_bot ); break; - case OBJECT2D_TYPE::ROUNDSEG: - add_object_to_triangle_layer( (const CROUNDSEGMENT2D *) object2d_A, + case OBJECT_2D_TYPE::ROUNDSEG: + add_object_to_triangle_layer( (const ROUND_SEGMENT_2D*) object2d_A, layerTriangles, layer_z_top, layer_z_bot ); break; default: - wxFAIL_MSG("C3D_RENDER_OGL_LEGACY: Object type is not implemented"); + wxFAIL_MSG( "RENDER_3D_LEGACY: Object type is not implemented" ); break; } } @@ -384,23 +375,23 @@ C3D_RENDER_OGL_LEGACY::generateLayerListFromContainer( const CBVHCONTAINER2D *aC } // Create display list - return new CLAYERS_OGL_DISP_LISTS( *layerTriangles, m_ogl_circle_texture, layer_z_bot, + return new OPENGL_RENDER_LIST( *layerTriangles, m_ogl_circle_texture, layer_z_bot, layer_z_top ); } -CLAYERS_OGL_DISP_LISTS* C3D_RENDER_OGL_LEGACY::createBoard( const SHAPE_POLY_SET& aBoardPoly, - const CBVHCONTAINER2D *aThroughHoles ) +OPENGL_RENDER_LIST* RENDER_3D_LEGACY::createBoard( const SHAPE_POLY_SET& aBoardPoly, + const BVH_CONTAINER_2D* aThroughHoles ) { - CLAYERS_OGL_DISP_LISTS* dispLists = nullptr; - CCONTAINER2D boardContainer; + OPENGL_RENDER_LIST* dispLists = nullptr; + CONTAINER_2D boardContainer; SHAPE_POLY_SET brd_outlines = aBoardPoly; Convert_shape_line_polygon_to_triangles( brd_outlines, boardContainer, m_boardAdapter.BiuTo3Dunits(), (const BOARD_ITEM &)*m_boardAdapter.GetBoard() ); - const LIST_OBJECT2D &listBoardObject2d = boardContainer.GetList(); + const LIST_OBJECT2D& listBoardObject2d = boardContainer.GetList(); if( listBoardObject2d.size() > 0 ) { @@ -410,22 +401,23 @@ CLAYERS_OGL_DISP_LISTS* C3D_RENDER_OGL_LEGACY::createBoard( const SHAPE_POLY_SET const float layer_z_top = 1.0f; const float layer_z_bot = 0.0f; - CLAYER_TRIANGLES *layerTriangles = new CLAYER_TRIANGLES( listBoardObject2d.size() ); + TRIANGLE_DISPLAY_LIST* layerTriangles = + new TRIANGLE_DISPLAY_LIST( listBoardObject2d.size() ); // Convert the list of objects(triangles) to triangle layer structure for( LIST_OBJECT2D::const_iterator itemOnLayer = listBoardObject2d.begin(); itemOnLayer != listBoardObject2d.end(); ++itemOnLayer ) { - const COBJECT2D* object2d_A = static_cast( *itemOnLayer ); + const OBJECT_2D* object2d_A = static_cast( *itemOnLayer ); - wxASSERT( object2d_A->GetObjectType() == OBJECT2D_TYPE::TRIANGLE ); + wxASSERT( object2d_A->GetObjectType() == OBJECT_2D_TYPE::TRIANGLE ); - const CTRIANGLE2D *tri = (const CTRIANGLE2D *)object2d_A; + const TRIANGLE_2D* tri = (const TRIANGLE_2D *)object2d_A; - const SFVEC2F &v1 = tri->GetP1(); - const SFVEC2F &v2 = tri->GetP2(); - const SFVEC2F &v3 = tri->GetP3(); + const SFVEC2F& v1 = tri->GetP1(); + const SFVEC2F& v2 = tri->GetP2(); + const SFVEC2F& v3 = tri->GetP3(); add_triangle_top_bot( layerTriangles, v1, v2, v3, layer_z_top, layer_z_bot ); } @@ -436,7 +428,7 @@ CLAYERS_OGL_DISP_LISTS* C3D_RENDER_OGL_LEGACY::createBoard( const SHAPE_POLY_SET m_boardAdapter.BiuTo3Dunits(), false, aThroughHoles ); - dispLists = new CLAYERS_OGL_DISP_LISTS( *layerTriangles, m_ogl_circle_texture, + dispLists = new OPENGL_RENDER_LIST( *layerTriangles, m_ogl_circle_texture, layer_z_top, layer_z_top ); } @@ -447,13 +439,13 @@ CLAYERS_OGL_DISP_LISTS* C3D_RENDER_OGL_LEGACY::createBoard( const SHAPE_POLY_SET } -void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarningReporter ) +void RENDER_3D_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarningReporter ) { m_reloadRequested = false; ogl_free_all_display_lists(); - COBJECT2D_STATS::Instance().ResetStats(); + OBJECT_2D_STATS::Instance().ResetStats(); unsigned stats_startReloadTime = GetRunningMicroSecs(); @@ -536,12 +528,12 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin // m_boardAdapter.GetThroughHole_Vias_Inner_poly(), // 1.0f, 0.0f, // false ); - const MAP_POLY & innerMapHoles = m_boardAdapter.GetPolyMapHoles_Inner(); - const MAP_POLY & outerMapHoles = m_boardAdapter.GetPolyMapHoles_Outer(); + const MAP_POLY& innerMapHoles = m_boardAdapter.GetPolyMapHoles_Inner(); + const MAP_POLY& outerMapHoles = m_boardAdapter.GetPolyMapHoles_Outer(); wxASSERT( innerMapHoles.size() == outerMapHoles.size() ); - const MAP_CONTAINER_2D &map_holes = m_boardAdapter.GetMapLayersHoles(); + const MAP_CONTAINER_2D_BASE& map_holes = m_boardAdapter.GetMapLayersHoles(); if( outerMapHoles.size() > 0 ) { @@ -552,7 +544,7 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin { PCB_LAYER_ID layer_id = static_cast(ii->first); const SHAPE_POLY_SET* poly = static_cast( ii->second ); - const CBVHCONTAINER2D* container = map_holes.at( layer_id ); + const BVH_CONTAINER_2D* container = map_holes.at( layer_id ); get_layer_z_pos( layer_id, layer_z_top, layer_z_bot ); @@ -565,7 +557,7 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin { PCB_LAYER_ID layer_id = static_cast( ii->first ); const SHAPE_POLY_SET* poly = static_cast( ii->second ); - const CBVHCONTAINER2D* container = map_holes.at( layer_id ); + const BVH_CONTAINER_2D* container = map_holes.at( layer_id ); get_layer_z_pos( layer_id, layer_z_top, layer_z_bot ); @@ -582,9 +574,9 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin if( aStatusReporter ) aStatusReporter->Report( _( "Load OpenGL: layers" ) ); - const MAP_POLY &map_poly = m_boardAdapter.GetPolyMap(); + const MAP_POLY& map_poly = m_boardAdapter.GetPolyMap(); - for( MAP_CONTAINER_2D::const_iterator ii = m_boardAdapter.GetMapLayers().begin(); + for( MAP_CONTAINER_2D_BASE::const_iterator ii = m_boardAdapter.GetMapLayers().begin(); ii != m_boardAdapter.GetMapLayers().end(); ++ii ) { @@ -593,10 +585,10 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin if( !m_boardAdapter.Is3DLayerEnabled( layer_id ) ) continue; - const CBVHCONTAINER2D* container2d = static_cast( ii->second ); + const BVH_CONTAINER_2D* container2d = static_cast( ii->second ); SHAPE_POLY_SET polyListSubtracted; - SHAPE_POLY_SET *aPolyList = nullptr; + SHAPE_POLY_SET* aPolyList = nullptr; // Load the vertical (Z axis) component of shapes @@ -638,7 +630,7 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin aPolyList = &polyListSubtracted; } - CLAYERS_OGL_DISP_LISTS* oglList = generateLayerListFromContainer( + OPENGL_RENDER_LIST* oglList = generateLayerListFromContainer( container2d, aPolyList, layer_id, &m_boardAdapter.GetThroughHole_Inner() ); @@ -698,12 +690,9 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin } -void C3D_RENDER_OGL_LEGACY::add_triangle_top_bot( CLAYER_TRIANGLES *aDst, - const SFVEC2F &v0, - const SFVEC2F &v1, - const SFVEC2F &v2, - float top, - float bot ) +void RENDER_3D_LEGACY::add_triangle_top_bot( TRIANGLE_DISPLAY_LIST* aDst, const SFVEC2F& v0, + const SFVEC2F& v1, const SFVEC2F& v2, + float top, float bot ) { aDst->m_layer_bot_triangles->AddTriangle( SFVEC3F( v0.x, v0.y, bot ), SFVEC3F( v1.x, v1.y, bot ), @@ -715,9 +704,8 @@ void C3D_RENDER_OGL_LEGACY::add_triangle_top_bot( CLAYER_TRIANGLES *aDst, } -void C3D_RENDER_OGL_LEGACY::get_layer_z_pos ( PCB_LAYER_ID aLayerID, - float &aOutZtop, - float &aOutZbot ) const +void RENDER_3D_LEGACY::get_layer_z_pos ( PCB_LAYER_ID aLayerID, float& aOutZtop, + float& aOutZbot ) const { aOutZbot = m_boardAdapter.GetLayerBottomZpos3DU( aLayerID ); aOutZtop = m_boardAdapter.GetLayerTopZpos3DU( aLayerID ); @@ -731,13 +719,10 @@ void C3D_RENDER_OGL_LEGACY::get_layer_z_pos ( PCB_LAYER_ID aLayerID, } -void C3D_RENDER_OGL_LEGACY::generate_cylinder( const SFVEC2F &aCenter, - float aInnerRadius, - float aOuterRadius, - float aZtop, - float aZbot, - unsigned int aNr_sides_per_circle, - CLAYER_TRIANGLES *aDstLayer ) +void RENDER_3D_LEGACY::generate_cylinder( const SFVEC2F& aCenter, float aInnerRadius, + float aOuterRadius, float aZtop, float aZbot, + unsigned int aNr_sides_per_circle, + TRIANGLE_DISPLAY_LIST* aDstLayer ) { std::vector< SFVEC2F > innerContour; std::vector< SFVEC2F > outerContour; @@ -747,10 +732,10 @@ void C3D_RENDER_OGL_LEGACY::generate_cylinder( const SFVEC2F &aCenter, for( unsigned int i = 0; i < ( innerContour.size() - 1 ); ++i ) { - const SFVEC2F &vi0 = innerContour[i + 0]; - const SFVEC2F &vi1 = innerContour[i + 1]; - const SFVEC2F &vo0 = outerContour[i + 0]; - const SFVEC2F &vo1 = outerContour[i + 1]; + const SFVEC2F& vi0 = innerContour[i + 0]; + const SFVEC2F& vi1 = innerContour[i + 1]; + const SFVEC2F& vo0 = outerContour[i + 0]; + const SFVEC2F& vo1 = outerContour[i + 1]; aDstLayer->m_layer_top_triangles->AddQuad( SFVEC3F( vi1.x, vi1.y, aZtop ), SFVEC3F( vi0.x, vi0.y, aZtop ), @@ -768,7 +753,7 @@ void C3D_RENDER_OGL_LEGACY::generate_cylinder( const SFVEC2F &aCenter, } -void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads() +void RENDER_3D_LEGACY::generate_3D_Vias_and_Pads() { if( m_boardAdapter.GetStats_Nr_Vias() ) { @@ -777,8 +762,8 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads() m_boardAdapter.GetStats_Med_Via_Hole_Diameter3DU() ) * 8 * m_boardAdapter.GetStats_Nr_Vias(); - CLAYER_TRIANGLES *layerTriangleVIA = - new CLAYER_TRIANGLES( reserve_nr_triangles_estimation ); + TRIANGLE_DISPLAY_LIST* layerTriangleVIA = + new TRIANGLE_DISPLAY_LIST( reserve_nr_triangles_estimation ); // Insert plated vertical holes inside the board @@ -787,7 +772,7 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads() { if( track->Type() == PCB_VIA_T ) { - const VIA *via = static_cast(track); + const VIA* via = static_cast(track); const float holediameter = via->GetDrillValue() * m_boardAdapter.BiuTo3Dunits(); const float thickness = m_boardAdapter.GetCopperThickness3DU(); @@ -812,7 +797,7 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads() } } - m_vias = new CLAYERS_OGL_DISP_LISTS( *layerTriangleVIA, 0, 0.0f, 0.0f ); + m_vias = new OPENGL_RENDER_LIST( *layerTriangleVIA, 0, 0.0f, 0.0f ); delete layerTriangleVIA; } @@ -856,13 +841,13 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads() if( m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) ) tht_outer_holes_poly.BooleanSubtract( m_anti_board_poly, SHAPE_POLY_SET::PM_FAST ); - CCONTAINER2D holesContainer; + CONTAINER_2D holesContainer; Convert_shape_line_polygon_to_triangles( tht_outer_holes_poly, holesContainer, m_boardAdapter.BiuTo3Dunits(), (const BOARD_ITEM &)*m_boardAdapter.GetBoard() ); - const LIST_OBJECT2D &listHolesObject2d = holesContainer.GetList(); + const LIST_OBJECT2D& listHolesObject2d = holesContainer.GetList(); if( listHolesObject2d.size() > 0 ) { @@ -871,22 +856,23 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads() get_layer_z_pos( F_Cu, layer_z_top, dummy ); get_layer_z_pos( B_Cu, dummy, layer_z_bot ); - CLAYER_TRIANGLES *layerTriangles = new CLAYER_TRIANGLES( listHolesObject2d.size() ); + TRIANGLE_DISPLAY_LIST* layerTriangles = + new TRIANGLE_DISPLAY_LIST( listHolesObject2d.size() ); // Convert the list of objects(triangles) to triangle layer structure for( LIST_OBJECT2D::const_iterator itemOnLayer = listHolesObject2d.begin(); itemOnLayer != listHolesObject2d.end(); ++itemOnLayer ) { - const COBJECT2D *object2d_A = static_cast(*itemOnLayer); + const OBJECT_2D* object2d_A = static_cast( *itemOnLayer ); - wxASSERT( object2d_A->GetObjectType() == OBJECT2D_TYPE::TRIANGLE ); + wxASSERT( object2d_A->GetObjectType() == OBJECT_2D_TYPE::TRIANGLE ); - const CTRIANGLE2D *tri = (const CTRIANGLE2D *)object2d_A; + const TRIANGLE_2D* tri = (const TRIANGLE_2D *)object2d_A; - const SFVEC2F &v1 = tri->GetP1(); - const SFVEC2F &v2 = tri->GetP2(); - const SFVEC2F &v3 = tri->GetP3(); + const SFVEC2F& v1 = tri->GetP1(); + const SFVEC2F& v2 = tri->GetP2(); + const SFVEC2F& v3 = tri->GetP3(); add_triangle_top_bot( layerTriangles, v1, v2, v3, layer_z_top, layer_z_bot ); } @@ -899,9 +885,9 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads() layer_z_bot, layer_z_top, m_boardAdapter.BiuTo3Dunits(), false ); - m_pad_holes = new CLAYERS_OGL_DISP_LISTS( *layerTriangles, - m_ogl_circle_texture, // not need - layer_z_top, layer_z_top ); + m_pad_holes = new OPENGL_RENDER_LIST( *layerTriangles, + m_ogl_circle_texture, // not need + layer_z_top, layer_z_top ); } delete layerTriangles; @@ -910,7 +896,7 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads() } -void C3D_RENDER_OGL_LEGACY::load_3D_models( REPORTER* aStatusReporter ) +void RENDER_3D_LEGACY::load_3D_models( REPORTER* aStatusReporter ) { if( !m_boardAdapter.GetFlag( FL_FP_ATTRIBUTES_NORMAL ) && !m_boardAdapter.GetFlag( FL_FP_ATTRIBUTES_NORMAL_INSERT ) @@ -948,7 +934,7 @@ void C3D_RENDER_OGL_LEGACY::load_3D_models( REPORTER* aStatusReporter ) if( modelPtr ) { MATERIAL_MODE materialMode = m_boardAdapter.MaterialModeGet(); - C_OGL_3DMODEL* ogl_model = new C_OGL_3DMODEL( *modelPtr, materialMode ); + MODEL_3D* ogl_model = new MODEL_3D( *modelPtr, materialMode ); if( ogl_model ) m_3dmodel_map[ model.m_Filename ] = ogl_model; diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.cpp b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.cpp index 7818af6afa..0d02610714 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.cpp +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.cpp @@ -38,28 +38,27 @@ */ #define UNITS3D_TO_UNITSPCB (IU_PER_MM) -C3D_RENDER_OGL_LEGACY::C3D_RENDER_OGL_LEGACY( BOARD_ADAPTER& aAdapter, CCAMERA& aCamera ) : - C3D_RENDER_BASE( aAdapter, aCamera ) +RENDER_3D_LEGACY::RENDER_3D_LEGACY( BOARD_ADAPTER& aAdapter, CAMERA& aCamera ) : + RENDER_3D_BASE( aAdapter, aCamera ) { - wxLogTrace( m_logTrace, wxT( "C3D_RENDER_OGL_LEGACY::C3D_RENDER_OGL_LEGACY" ) ); + wxLogTrace( m_logTrace, wxT( "RENDER_3D_LEGACY::RENDER_3D_LEGACY" ) ); m_layers.clear(); m_layers_holes_outer.clear(); m_layers_holes_inner.clear(); m_triangles.clear(); - m_board = NULL; - m_anti_board = NULL; + m_board = nullptr; + m_anti_board = nullptr; m_platedPads_F_Cu = nullptr; m_platedPads_B_Cu = nullptr; - m_through_holes_outer = NULL; - m_through_holes_outer_ring = NULL; - m_through_holes_vias_outer = NULL; - //m_through_holes_vias_inner = NULL; - m_vias = NULL; - m_pad_holes = NULL; - m_vias_and_pad_holes_outer_contourn_and_caps = NULL; + m_through_holes_outer = nullptr; + m_through_holes_outer_ring = nullptr; + m_through_holes_vias_outer = nullptr; + m_vias = nullptr; + m_pad_holes = nullptr; + m_vias_and_pad_holes_outer_contourn_and_caps = nullptr; m_ogl_circle_texture = 0; m_grid = 0; @@ -71,9 +70,9 @@ C3D_RENDER_OGL_LEGACY::C3D_RENDER_OGL_LEGACY( BOARD_ADAPTER& aAdapter, CCAMERA& } -C3D_RENDER_OGL_LEGACY::~C3D_RENDER_OGL_LEGACY() +RENDER_3D_LEGACY::~RENDER_3D_LEGACY() { - wxLogTrace( m_logTrace, wxT( "C3D_RENDER_OGL_LEGACY::~C3D_RENDER_OGL_LEGACY" ) ); + wxLogTrace( m_logTrace, wxT( "RENDER_3D_LEGACY::~RENDER_3D_LEGACY" ) ); ogl_free_all_display_lists(); @@ -81,13 +80,13 @@ C3D_RENDER_OGL_LEGACY::~C3D_RENDER_OGL_LEGACY() } -int C3D_RENDER_OGL_LEGACY::GetWaitForEditingTimeOut() +int RENDER_3D_LEGACY::GetWaitForEditingTimeOut() { return 50; // ms } -void C3D_RENDER_OGL_LEGACY::SetCurWindowSize( const wxSize &aSize ) +void RENDER_3D_LEGACY::SetCurWindowSize( const wxSize& aSize ) { if( m_windowSize != aSize ) { @@ -99,7 +98,7 @@ void C3D_RENDER_OGL_LEGACY::SetCurWindowSize( const wxSize &aSize ) } -void C3D_RENDER_OGL_LEGACY::setLight_Front( bool enabled ) +void RENDER_3D_LEGACY::setLight_Front( bool enabled ) { if( enabled ) glEnable( GL_LIGHT0 ); @@ -108,7 +107,7 @@ void C3D_RENDER_OGL_LEGACY::setLight_Front( bool enabled ) } -void C3D_RENDER_OGL_LEGACY::setLight_Top( bool enabled ) +void RENDER_3D_LEGACY::setLight_Top( bool enabled ) { if( enabled ) glEnable( GL_LIGHT1 ); @@ -117,7 +116,7 @@ void C3D_RENDER_OGL_LEGACY::setLight_Top( bool enabled ) } -void C3D_RENDER_OGL_LEGACY::setLight_Bottom( bool enabled ) +void RENDER_3D_LEGACY::setLight_Bottom( bool enabled ) { if( enabled ) glEnable( GL_LIGHT2 ); @@ -126,7 +125,7 @@ void C3D_RENDER_OGL_LEGACY::setLight_Bottom( bool enabled ) } -void C3D_RENDER_OGL_LEGACY::render_3D_arrows() +void RENDER_3D_LEGACY::render_3D_arrows() { const float arrow_size = RANGE_SCALE_3D * 0.30f; @@ -154,25 +153,19 @@ void C3D_RENDER_OGL_LEGACY::render_3D_arrows() ogl_set_arrow_material(); glColor3f( 0.9f, 0.0f, 0.0f ); - OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), - SFVEC3F( arrow_size, 0.0f, 0.0f ), - 0.275f ); + DrawRoundArrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), SFVEC3F( arrow_size, 0.0f, 0.0f ), 0.275f ); glColor3f( 0.0f, 0.9f, 0.0f ); - OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), - SFVEC3F( 0.0f, arrow_size, 0.0f ), - 0.275f ); + DrawRoundArrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), SFVEC3F( 0.0f, arrow_size, 0.0f ), 0.275f ); glColor3f( 0.0f, 0.0f, 0.9f ); - OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), - SFVEC3F( 0.0f, 0.0f, arrow_size ), - 0.275f ); + DrawRoundArrow( SFVEC3F( 0.0f, 0.0f, 0.0f ), SFVEC3F( 0.0f, 0.0f, arrow_size ), 0.275f ); glEnable( GL_CULL_FACE ); } -void C3D_RENDER_OGL_LEGACY::setupMaterials() +void RENDER_3D_LEGACY::setupMaterials() { m_materials = {}; @@ -230,9 +223,12 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials() m_boardAdapter.m_SilkScreenColorTop.b ); m_materials.m_SilkSTop.m_Specular = SFVEC3F( - m_boardAdapter.m_SilkScreenColorTop.r * m_boardAdapter.m_SilkScreenColorTop.r + 0.10f, - m_boardAdapter.m_SilkScreenColorTop.g * m_boardAdapter.m_SilkScreenColorTop.g + 0.10f, - m_boardAdapter.m_SilkScreenColorTop.b * m_boardAdapter.m_SilkScreenColorTop.b + 0.10f ); + m_boardAdapter.m_SilkScreenColorTop.r * m_boardAdapter.m_SilkScreenColorTop.r + + 0.10f, + m_boardAdapter.m_SilkScreenColorTop.g * m_boardAdapter.m_SilkScreenColorTop.g + + 0.10f, + m_boardAdapter.m_SilkScreenColorTop.b * m_boardAdapter.m_SilkScreenColorTop.b + + 0.10f ); m_materials.m_SilkSTop.m_Shininess = 0.078125f * 128.0f; m_materials.m_SilkSTop.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f ); @@ -243,9 +239,12 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials() m_boardAdapter.m_SilkScreenColorBot.b ); m_materials.m_SilkSBot.m_Specular = SFVEC3F( - m_boardAdapter.m_SilkScreenColorBot.r * m_boardAdapter.m_SilkScreenColorBot.r + 0.10f, - m_boardAdapter.m_SilkScreenColorBot.g * m_boardAdapter.m_SilkScreenColorBot.g + 0.10f, - m_boardAdapter.m_SilkScreenColorBot.b * m_boardAdapter.m_SilkScreenColorBot.b + 0.10f ); + m_boardAdapter.m_SilkScreenColorBot.r * m_boardAdapter.m_SilkScreenColorBot.r + + 0.10f, + m_boardAdapter.m_SilkScreenColorBot.g * m_boardAdapter.m_SilkScreenColorBot.g + + 0.10f, + m_boardAdapter.m_SilkScreenColorBot.b * m_boardAdapter.m_SilkScreenColorBot.b + + 0.10f ); m_materials.m_SilkSBot.m_Shininess = 0.078125f * 128.0f; m_materials.m_SilkSBot.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f ); @@ -254,12 +253,10 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials() m_materials.m_SolderMask.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f ); // Epoxy material - m_materials.m_EpoxyBoard.m_Ambient = SFVEC3F( 117.0f / 255.0f, - 97.0f / 255.0f, + m_materials.m_EpoxyBoard.m_Ambient = SFVEC3F( 117.0f / 255.0f, 97.0f / 255.0f, 47.0f / 255.0f ); - m_materials.m_EpoxyBoard.m_Specular = SFVEC3F( 18.0f / 255.0f, - 3.0f / 255.0f, + m_materials.m_EpoxyBoard.m_Specular = SFVEC3F( 18.0f / 255.0f, 3.0f / 255.0f, 20.0f / 255.0f ); m_materials.m_EpoxyBoard.m_Shininess = 0.1f * 128.0f; @@ -317,7 +314,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials() } -void C3D_RENDER_OGL_LEGACY::set_layer_material( PCB_LAYER_ID aLayerID ) +void RENDER_3D_LEGACY::set_layer_material( PCB_LAYER_ID aLayerID ) { switch( aLayerID ) { @@ -394,7 +391,7 @@ void C3D_RENDER_OGL_LEGACY::set_layer_material( PCB_LAYER_ID aLayerID ) } -SFVEC4F C3D_RENDER_OGL_LEGACY::get_layer_color( PCB_LAYER_ID aLayerID ) +SFVEC4F RENDER_3D_LEGACY::get_layer_color( PCB_LAYER_ID aLayerID ) { SFVEC4F layerColor = m_boardAdapter.GetLayerColor( aLayerID ); @@ -451,7 +448,7 @@ SFVEC4F C3D_RENDER_OGL_LEGACY::get_layer_color( PCB_LAYER_ID aLayerID ) } -void init_lights(void) +void init_lights( void ) { // Setup light // https://www.opengl.org/sdk/docs/man2/xhtml/glLight.xml @@ -498,13 +495,13 @@ void init_lights(void) } -void C3D_RENDER_OGL_LEGACY::setCopperMaterial() +void RENDER_3D_LEGACY::setCopperMaterial() { OGL_SetMaterial( m_materials.m_NonPlatedCopper, 1.0f ); } -void C3D_RENDER_OGL_LEGACY::setPlatedCopperAndDepthOffset( PCB_LAYER_ID aLayer_id ) +void RENDER_3D_LEGACY::setPlatedCopperAndDepthOffset( PCB_LAYER_ID aLayer_id ) { glEnable( GL_POLYGON_OFFSET_FILL ); glPolygonOffset(-0.1f, -2.0f ); @@ -512,13 +509,13 @@ void C3D_RENDER_OGL_LEGACY::setPlatedCopperAndDepthOffset( PCB_LAYER_ID aLayer_i } -void C3D_RENDER_OGL_LEGACY::unsetDepthOffset() +void RENDER_3D_LEGACY::unsetDepthOffset() { glDisable( GL_POLYGON_OFFSET_FILL ); } -void C3D_RENDER_OGL_LEGACY::render_board_body( bool aSkipRenderHoles ) +void RENDER_3D_LEGACY::render_board_body( bool aSkipRenderHoles ) { m_materials.m_EpoxyBoard.m_Diffuse = m_boardAdapter.m_BoardBodyColor; @@ -527,7 +524,7 @@ void C3D_RENDER_OGL_LEGACY::render_board_body( bool aSkipRenderHoles ) OGL_SetMaterial( m_materials.m_EpoxyBoard, 1.0f ); - CLAYERS_OGL_DISP_LISTS* ogl_disp_list = nullptr; + OPENGL_RENDER_LIST* ogl_disp_list = nullptr; if( aSkipRenderHoles ) ogl_disp_list = m_board; @@ -546,8 +543,8 @@ void C3D_RENDER_OGL_LEGACY::render_board_body( bool aSkipRenderHoles ) } -bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, - REPORTER* aWarningReporter ) +bool RENDER_3D_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, + REPORTER* aWarningReporter ) { // Initialize OpenGL if( !m_is_opengl_initialized ) @@ -623,7 +620,7 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, glEnable( GL_LIGHTING ); { - const SFVEC3F &cameraPos = m_camera.GetPos(); + const SFVEC3F& cameraPos = m_camera.GetPos(); // Place the light at a minimum Z so the diffuse factor will not drop // and the board will still look with good light. @@ -638,10 +635,8 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, zpos = glm::min( cameraPos.z,-0.5f ) - cameraPos.z * cameraPos.z; } - const GLfloat headlight_pos[] = { cameraPos.x, - cameraPos.y, - zpos, - 1.0f }; // This is a point light + // This is a point light. + const GLfloat headlight_pos[] = { cameraPos.x, cameraPos.y, zpos, 1.0f }; glLightfv( GL_LIGHT0, GL_POSITION, headlight_pos ); } @@ -690,11 +685,9 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, glPushMatrix(); - /// @todo Determine what to do with this commented out code. - //glScalef( 1.0f, 1.0f, 3.0f ); - CLAYERS_OGL_DISP_LISTS *pLayerDispList = static_cast(ii->second); + OPENGL_RENDER_LIST* pLayerDispList = static_cast( ii->second ); - if( (layer_id >= F_Cu) && (layer_id <= B_Cu) ) + if( ( layer_id >= F_Cu ) && ( layer_id <= B_Cu ) ) { if( !m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) || !( m_boardAdapter.GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) && @@ -743,12 +736,12 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, if( m_layers_holes_outer.find( layer_id ) != m_layers_holes_outer.end() ) { - const CLAYERS_OGL_DISP_LISTS* viasHolesLayer = + const OPENGL_RENDER_LIST* viasHolesLayer = m_layers_holes_outer.at( layer_id ); - wxASSERT( viasHolesLayer != NULL ); + wxASSERT( viasHolesLayer != nullptr ); - if( viasHolesLayer != NULL ) + if( viasHolesLayer != nullptr ) { pLayerDispList->DrawAllCameraCulledSubtractLayer( drawMiddleSegments, m_through_holes_outer, @@ -817,7 +810,7 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, { set_layer_material( layer_id ); - CLAYERS_OGL_DISP_LISTS* throughHolesOuter = + OPENGL_RENDER_LIST* throughHolesOuter = m_boardAdapter.GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) && ( layer_id == B_SilkS || layer_id == F_SilkS ) @@ -831,7 +824,7 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, pLayerDispList->GetZTop() - pLayerDispList->GetZBot() ); } - CLAYERS_OGL_DISP_LISTS* anti_board = m_anti_board; + OPENGL_RENDER_LIST* anti_board = m_anti_board; if( ( layer_id == B_Paste ) || ( layer_id == F_Paste ) ) anti_board = nullptr; @@ -851,7 +844,7 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, { const PCB_LAYER_ID layerMask_id = (layer_id == B_SilkS) ? B_Mask : F_Mask; - const CLAYERS_OGL_DISP_LISTS *pLayerDispListMask = m_layers.at( layerMask_id ); + const OPENGL_RENDER_LIST* pLayerDispListMask = m_layers.at( layerMask_id ); pLayerDispList->DrawAllCameraCulledSubtractLayer( drawMiddleSegments, pLayerDispListMask, @@ -983,7 +976,7 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, } -bool C3D_RENDER_OGL_LEGACY::initializeOpenGL() +bool RENDER_3D_LEGACY::initializeOpenGL() { glEnable( GL_LINE_SMOOTH ); glShadeModel( GL_SMOOTH ); @@ -992,7 +985,7 @@ bool C3D_RENDER_OGL_LEGACY::initializeOpenGL() glPixelStorei( GL_UNPACK_ALIGNMENT, 4 ); // Initialize the open GL texture to draw the filled semi-circle of the segments - CIMAGE *circleImage = new CIMAGE( SIZE_OF_CIRCLE_TEXTURE, SIZE_OF_CIRCLE_TEXTURE ); + IMAGE* circleImage = new IMAGE( SIZE_OF_CIRCLE_TEXTURE, SIZE_OF_CIRCLE_TEXTURE ); if( !circleImage ) return false; @@ -1002,12 +995,7 @@ bool C3D_RENDER_OGL_LEGACY::initializeOpenGL() ( SIZE_OF_CIRCLE_TEXTURE / 2 ) - 4, 0xFF ); - /// @todo Determine what to do with this commented out code. - //circleImage->CircleFilled( (SIZE_OF_CIRCLE_TEXTURE / 4)*1.5f - 1, - // (SIZE_OF_CIRCLE_TEXTURE / 4)*1.5f - 1, - // (SIZE_OF_CIRCLE_TEXTURE / 4)*1.5f - 2, 0xFF ); - - CIMAGE *circleImage_Copy = new CIMAGE( *circleImage ); + IMAGE* circleImage_Copy = new IMAGE( *circleImage ); circleImage->EfxFilter( circleImage_Copy, IMAGE_FILTER::BLUR_3X3 ); @@ -1031,7 +1019,7 @@ bool C3D_RENDER_OGL_LEGACY::initializeOpenGL() } -void C3D_RENDER_OGL_LEGACY::ogl_set_arrow_material() +void RENDER_3D_LEGACY::ogl_set_arrow_material() { glEnable( GL_COLOR_MATERIAL ); glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE ); @@ -1050,7 +1038,7 @@ void C3D_RENDER_OGL_LEGACY::ogl_set_arrow_material() } -void C3D_RENDER_OGL_LEGACY::ogl_free_all_display_lists() +void RENDER_3D_LEGACY::ogl_free_all_display_lists() { if( glIsList( m_grid ) ) glDeleteLists( m_grid, 1 ); @@ -1059,7 +1047,7 @@ void C3D_RENDER_OGL_LEGACY::ogl_free_all_display_lists() for( MAP_OGL_DISP_LISTS::const_iterator ii = m_layers.begin(); ii != m_layers.end(); ++ii ) { - CLAYERS_OGL_DISP_LISTS *pLayerDispList = static_cast( ii->second ); + OPENGL_RENDER_LIST* pLayerDispList = static_cast( ii->second ); delete pLayerDispList; } @@ -1075,7 +1063,7 @@ void C3D_RENDER_OGL_LEGACY::ogl_free_all_display_lists() ii != m_layers_holes_outer.end(); ++ii ) { - CLAYERS_OGL_DISP_LISTS* pLayerDispList = static_cast( ii->second ); + OPENGL_RENDER_LIST* pLayerDispList = static_cast( ii->second ); delete pLayerDispList; } @@ -1085,7 +1073,7 @@ void C3D_RENDER_OGL_LEGACY::ogl_free_all_display_lists() ii != m_layers_holes_inner.end(); ++ii ) { - CLAYERS_OGL_DISP_LISTS* pLayerDispList = static_cast( ii->second ); + OPENGL_RENDER_LIST* pLayerDispList = static_cast( ii->second ); delete pLayerDispList; } @@ -1100,7 +1088,7 @@ void C3D_RENDER_OGL_LEGACY::ogl_free_all_display_lists() for( MAP_3DMODEL::const_iterator ii = m_3dmodel_map.begin(); ii != m_3dmodel_map.end(); ++ii ) { - C_OGL_3DMODEL *pointer = static_cast(ii->second); + MODEL_3D* pointer = static_cast(ii->second); delete pointer; } @@ -1135,9 +1123,8 @@ void C3D_RENDER_OGL_LEGACY::ogl_free_all_display_lists() } -void C3D_RENDER_OGL_LEGACY::render_solder_mask_layer( PCB_LAYER_ID aLayerID, float aZPosition, - bool aDrawMiddleSegments, - bool aSkipRenderHoles ) +void RENDER_3D_LEGACY::render_solder_mask_layer( PCB_LAYER_ID aLayerID, float aZPosition, + bool aDrawMiddleSegments, bool aSkipRenderHoles ) { wxASSERT( (aLayerID == B_Mask) || (aLayerID == F_Mask) ); @@ -1147,7 +1134,7 @@ void C3D_RENDER_OGL_LEGACY::render_solder_mask_layer( PCB_LAYER_ID aLayerID, flo { if( m_layers.find( aLayerID ) != m_layers.end() ) { - CLAYERS_OGL_DISP_LISTS *pLayerDispListMask = m_layers.at( aLayerID ); + OPENGL_RENDER_LIST* pLayerDispListMask = m_layers.at( aLayerID ); if( m_through_holes_vias_outer ) m_through_holes_vias_outer->ApplyScalePosition( aZPosition, nonCopperThickness ); @@ -1195,12 +1182,11 @@ void C3D_RENDER_OGL_LEGACY::render_solder_mask_layer( PCB_LAYER_ID aLayerID, flo } -void C3D_RENDER_OGL_LEGACY::render_3D_models_selected( bool aRenderTopOrBot, - bool aRenderTransparentOnly, - bool aRenderSelectedOnly ) +void RENDER_3D_LEGACY::render_3D_models_selected( bool aRenderTopOrBot, bool aRenderTransparentOnly, + bool aRenderSelectedOnly ) { - C_OGL_3DMODEL::BeginDrawMulti( !aRenderSelectedOnly ); + MODEL_3D::BeginDrawMulti( !aRenderSelectedOnly ); // Go for all footprints for( FOOTPRINT* fp : m_boardAdapter.GetBoard()->Footprints() ) @@ -1242,11 +1228,11 @@ void C3D_RENDER_OGL_LEGACY::render_3D_models_selected( bool aRenderTopOrBot, } } - C_OGL_3DMODEL::EndDrawMulti(); + MODEL_3D::EndDrawMulti(); } -void C3D_RENDER_OGL_LEGACY::render_3D_models( bool aRenderTopOrBot, bool aRenderTransparentOnly ) +void RENDER_3D_LEGACY::render_3D_models( bool aRenderTopOrBot, bool aRenderTransparentOnly ) { if( m_boardAdapter.GetFlag( FL_USE_SELECTION ) ) render_3D_models_selected( aRenderTopOrBot, aRenderTransparentOnly, true ); @@ -1255,9 +1241,8 @@ void C3D_RENDER_OGL_LEGACY::render_3D_models( bool aRenderTopOrBot, bool aRender } -void C3D_RENDER_OGL_LEGACY::render_3D_footprint( const FOOTPRINT* aFootprint, - bool aRenderTransparentOnly, - bool aIsSelected ) +void RENDER_3D_LEGACY::render_3D_footprint( const FOOTPRINT* aFootprint, + bool aRenderTransparentOnly, bool aIsSelected ) { if( !aFootprint->Models().empty() ) { @@ -1282,8 +1267,7 @@ void C3D_RENDER_OGL_LEGACY::render_3D_footprint( const FOOTPRINT* aFootprint, double modelunit_to_3d_units_factor = m_boardAdapter.BiuTo3Dunits() * UNITS3D_TO_UNITSPCB; - glScaled( modelunit_to_3d_units_factor, - modelunit_to_3d_units_factor, + glScaled( modelunit_to_3d_units_factor, modelunit_to_3d_units_factor, modelunit_to_3d_units_factor ); // Get the list of model files for this model @@ -1298,7 +1282,7 @@ void C3D_RENDER_OGL_LEGACY::render_3D_footprint( const FOOTPRINT* aFootprint, if( cache_i == m_3dmodel_map.end() ) continue; - if( const C_OGL_3DMODEL *modelPtr = cache_i->second ) + if( const MODEL_3D* modelPtr = cache_i->second ) { bool opaque = sM.m_Opacity >= 1.0; @@ -1359,7 +1343,7 @@ void C3D_RENDER_OGL_LEGACY::render_3D_footprint( const FOOTPRINT* aFootprint, } -void C3D_RENDER_OGL_LEGACY::generate_new_3DGrid( GRID3D_TYPE aGridType ) +void RENDER_3D_LEGACY::generate_new_3DGrid( GRID3D_TYPE aGridType ) { if( glIsList( m_grid ) ) glDeleteLists( m_grid, 1 ); @@ -1421,12 +1405,12 @@ void C3D_RENDER_OGL_LEGACY::generate_new_3DGrid( GRID3D_TYPE aGridType ) const int ysize = std::max( brd_size.y, Millimeter2iu( 100 ) ) * 1.2; // Grid limits, in 3D units - double xmin = (brd_center_pos.x - xsize / 2) * scale; - double xmax = (brd_center_pos.x + xsize / 2) * scale; - double ymin = (brd_center_pos.y - ysize / 2) * scale; - double ymax = (brd_center_pos.y + ysize / 2) * scale; - double zmin = Millimeter2iu( -50 ) * scale; - double zmax = Millimeter2iu( 100 ) * scale; + double xmin = ( brd_center_pos.x - xsize / 2 ) * scale; + double xmax = ( brd_center_pos.x + xsize / 2 ) * scale; + double ymin = ( brd_center_pos.y - ysize / 2 ) * scale; + double ymax = ( brd_center_pos.y + ysize / 2 ) * scale; + double zmin = Millimeter2iu( -50 ) * scale; + double zmax = Millimeter2iu( 100 ) * scale; // Draw horizontal grid centered on 3D origin (center of the board) for( int ii = 0; ; ii++ ) @@ -1434,9 +1418,7 @@ void C3D_RENDER_OGL_LEGACY::generate_new_3DGrid( GRID3D_TYPE aGridType ) if( (ii % 5) ) glColor4f( gridColor.r, gridColor.g, gridColor.b, transparency ); else - glColor4f( gridColor_marker.r, - gridColor_marker.g, - gridColor_marker.b, + glColor4f( gridColor_marker.r, gridColor_marker.g, gridColor_marker.b, transparency ); const int delta = KiROUND( ii * griSizeMM * IU_PER_MM ); @@ -1460,15 +1442,15 @@ void C3D_RENDER_OGL_LEGACY::generate_new_3DGrid( GRID3D_TYPE aGridType ) if( delta <= ysize / 2 ) // Draw grid lines parallel to Y axis { glBegin( GL_LINES ); - glVertex3f( xmin, -(brd_center_pos.y + delta) * scale, zpos ); - glVertex3f( xmax, -(brd_center_pos.y + delta) * scale, zpos ); + glVertex3f( xmin, -( brd_center_pos.y + delta ) * scale, zpos ); + glVertex3f( xmax, -( brd_center_pos.y + delta ) * scale, zpos ); glEnd(); if( ii != 0 ) { glBegin( GL_LINES ); - glVertex3f( xmin, -(brd_center_pos.y - delta) * scale, zpos ); - glVertex3f( xmax, -(brd_center_pos.y - delta) * scale, zpos ); + glVertex3f( xmin, -( brd_center_pos.y - delta ) * scale, zpos ); + glVertex3f( xmax, -( brd_center_pos.y - delta ) * scale, zpos ); glEnd(); } } @@ -1488,15 +1470,13 @@ void C3D_RENDER_OGL_LEGACY::generate_new_3DGrid( GRID3D_TYPE aGridType ) if( (ii % 5) ) glColor4f( gridColor.r, gridColor.g, gridColor.b, transparency ); else - glColor4f( gridColor_marker.r, - gridColor_marker.g, - gridColor_marker.b, + glColor4f( gridColor_marker.r, gridColor_marker.g, gridColor_marker.b, transparency ); const double delta = ii * griSizeMM * IU_PER_MM; glBegin( GL_LINES ); - xmax = (brd_center_pos.x + delta) * scale; + xmax = ( brd_center_pos.x + delta ) * scale; glVertex3f( xmax, posy, zmin ); glVertex3f( xmax, posy, zmax ); @@ -1505,7 +1485,7 @@ void C3D_RENDER_OGL_LEGACY::generate_new_3DGrid( GRID3D_TYPE aGridType ) if( ii != 0 ) { glBegin( GL_LINES ); - xmin = (brd_center_pos.x - delta) * scale; + xmin = ( brd_center_pos.x - delta ) * scale; glVertex3f( xmin, posy, zmin ); glVertex3f( xmin, posy, zmax ); glEnd(); @@ -1521,9 +1501,7 @@ void C3D_RENDER_OGL_LEGACY::generate_new_3DGrid( GRID3D_TYPE aGridType ) if( (ii % 5) ) glColor4f( gridColor.r, gridColor.g, gridColor.b, transparency ); else - glColor4f( gridColor_marker.r, - gridColor_marker.g, - gridColor_marker.b, + glColor4f( gridColor_marker.r, gridColor_marker.g, gridColor_marker.b, transparency ); const double delta = ii * griSizeMM * IU_PER_MM * scale; diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.h b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.h index 0ee120ae1f..3ea0f3641e 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.h +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.h @@ -27,8 +27,8 @@ * @brief */ -#ifndef C3D_RENDER_OGL_LEGACY_H_ -#define C3D_RENDER_OGL_LEGACY_H_ +#ifndef RENDER_3D_LEGACY_H_ +#define RENDER_3D_LEGACY_H_ #include "../c3d_render_base.h" #include "clayer_triangles.h" @@ -47,23 +47,23 @@ #include -typedef std::map< PCB_LAYER_ID, CLAYERS_OGL_DISP_LISTS* > MAP_OGL_DISP_LISTS; -typedef std::list LIST_TRIANGLES; -typedef std::map< wxString, C_OGL_3DMODEL * > MAP_3DMODEL; +typedef std::map< PCB_LAYER_ID, OPENGL_RENDER_LIST* > MAP_OGL_DISP_LISTS; +typedef std::list LIST_TRIANGLES; +typedef std::map< wxString, MODEL_3D* > MAP_3DMODEL; #define SIZE_OF_CIRCLE_TEXTURE 1024 /** * Object to render the board using openGL legacy mode. */ -class C3D_RENDER_OGL_LEGACY : public C3D_RENDER_BASE +class RENDER_3D_LEGACY : public RENDER_3D_BASE { public: - explicit C3D_RENDER_OGL_LEGACY( BOARD_ADAPTER& aAdapter, CCAMERA& aCamera ); + explicit RENDER_3D_LEGACY( BOARD_ADAPTER& aAdapter, CAMERA& aCamera ); - ~C3D_RENDER_OGL_LEGACY(); + ~RENDER_3D_LEGACY(); - void SetCurWindowSize( const wxSize &aSize ) override; + void SetCurWindowSize( const wxSize& aSize ) override; bool Redraw( bool aIsMoving, REPORTER* aStatusReporter, REPORTER* aWarningReporter ) override; int GetWaitForEditingTimeOut() override; @@ -74,85 +74,61 @@ public: } private: - CLAYERS_OGL_DISP_LISTS *generate_holes_display_list( const LIST_OBJECT2D &aListHolesObject2d, - const SHAPE_POLY_SET &aPoly, - float aZtop, - float aZbot, - bool aInvertFaces, - const CBVHCONTAINER2D *aThroughHoles = nullptr ); + OPENGL_RENDER_LIST* generate_holes_display_list( const LIST_OBJECT2D& aListHolesObject2d, + const SHAPE_POLY_SET& aPoly, + float aZtop, + float aZbot, + bool aInvertFaces, + const BVH_CONTAINER_2D* aThroughHoles = nullptr ); - CLAYERS_OGL_DISP_LISTS* generateLayerListFromContainer( const CBVHCONTAINER2D *aContainer, - const SHAPE_POLY_SET *aPolyList, - PCB_LAYER_ID aLayerId, - const CBVHCONTAINER2D *aThroughHoles = nullptr ); + OPENGL_RENDER_LIST* generateLayerListFromContainer( const BVH_CONTAINER_2D* aContainer, + const SHAPE_POLY_SET* aPolyList, + PCB_LAYER_ID aLayerId, + const BVH_CONTAINER_2D* aThroughHoles = nullptr ); - void add_triangle_top_bot( CLAYER_TRIANGLES *aDst, - const SFVEC2F &v0, - const SFVEC2F &v1, - const SFVEC2F &v2, - float top, - float bot ); + void add_triangle_top_bot( TRIANGLE_DISPLAY_LIST* aDst, const SFVEC2F& v0, const SFVEC2F& v1, + const SFVEC2F& v2, float top, float bot ); - void add_object_to_triangle_layer( const CRING2D *aRing, - CLAYER_TRIANGLES *aDstLayer, - float aZtop, - float aZbot ); + void add_object_to_triangle_layer( const RING_2D* aRing, TRIANGLE_DISPLAY_LIST* aDstLayer, + float aZtop, float aZbot ); - void add_object_to_triangle_layer( const CPOLYGON4PTS2D *aPoly, - CLAYER_TRIANGLES *aDstLayer, - float aZtop, - float aZbot ); + void add_object_to_triangle_layer( const POLYGON_4PT_2D* aPoly, + TRIANGLE_DISPLAY_LIST* aDstLayer, float aZtop, float aZbot ); - void add_object_to_triangle_layer( const CFILLEDCIRCLE2D *aFilledCircle, - CLAYER_TRIANGLES *aDstLayer, - float aZtop, - float aZbot ); + void add_object_to_triangle_layer( const FILLED_CIRCLE_2D* aFilledCircle, + TRIANGLE_DISPLAY_LIST* aDstLayer, float aZtop, float aZbot ); - void add_object_to_triangle_layer( const CTRIANGLE2D *aTri, - CLAYER_TRIANGLES *aDstLayer, - float aZtop, - float aZbot ); + void add_object_to_triangle_layer( const TRIANGLE_2D* aTri, TRIANGLE_DISPLAY_LIST* aDstLayer, + float aZtop, float aZbot ); - void add_object_to_triangle_layer( const CROUNDSEGMENT2D *aSeg, - CLAYER_TRIANGLES *aDstLayer, - float aZtop, - float aZbot ); + void add_object_to_triangle_layer( const ROUND_SEGMENT_2D* aSeg, + TRIANGLE_DISPLAY_LIST* aDstLayer, float aZtop, float aZbot ); - void render_solder_mask_layer( PCB_LAYER_ID aLayerID, - float aZPosition, - bool aDrawMiddleSegments, - bool aSkipRenderHoles ); + void render_solder_mask_layer( PCB_LAYER_ID aLayerID, float aZPosition, + bool aDrawMiddleSegments, bool aSkipRenderHoles ); void render_board_body( bool aSkipRenderHoles ); - void get_layer_z_pos( PCB_LAYER_ID aLayerID, - float &aOutZtop, - float &aOutZbot ) const; + void get_layer_z_pos( PCB_LAYER_ID aLayerID, float& aOutZtop, float& aOutZbot ) const; - void generate_ring_contour( const SFVEC2F &aCenter, - float aInnerRadius, - float aOuterRadius, - unsigned int aNr_sides_per_circle, - std::vector< SFVEC2F > &aInnerContourResult, - std::vector< SFVEC2F > &aOuterContourResult, + void generate_ring_contour( const SFVEC2F& aCenter, float aInnerRadius, + float aOuterRadius, unsigned int aNr_sides_per_circle, + std::vector< SFVEC2F >& aInnerContourResult, + std::vector< SFVEC2F >& aOuterContourResult, bool aInvertOrder ); - void generate_cylinder( const SFVEC2F &aCenter, - float aInnerRadius, - float aOuterRadius, - float aZtop, - float aZbot, - unsigned int aNr_sides_per_circle, - CLAYER_TRIANGLES *aDstLayer ); + void generate_cylinder( const SFVEC2F& aCenter, float aInnerRadius, float aOuterRadius, + float aZtop, float aZbot, unsigned int aNr_sides_per_circle, + TRIANGLE_DISPLAY_LIST* aDstLayer ); void generate_3D_Vias_and_Pads(); /** * Load footprint models from the cache and load it to openGL lists in the form of - * #C_OGL_3DMODEL objects. + * #MODEL_3D objects. * * This map of models will work as a local cache for this render. (cache based on - * C_OGL_3DMODEL with associated openGL lists in GPU memory) + * MODEL_3D with associated openGL lists in GPU memory) */ void load_3D_models( REPORTER* aStatusReporter ); @@ -193,8 +169,8 @@ private: SFVEC4F get_layer_color( PCB_LAYER_ID aLayerID ); bool initializeOpenGL(); - CLAYERS_OGL_DISP_LISTS* createBoard( const SHAPE_POLY_SET& aBoardPoly, - const CBVHCONTAINER2D *aThroughHoles = nullptr ); + OPENGL_RENDER_LIST* createBoard( const SHAPE_POLY_SET& aBoardPoly, + const BVH_CONTAINER_2D* aThroughHoles = nullptr ); void reload( REPORTER* aStatusReporter, REPORTER* aWarningReporter ); void ogl_set_arrow_material(); @@ -214,18 +190,18 @@ private: SMATERIAL m_GrayMaterial; } m_materials; - MAP_OGL_DISP_LISTS m_layers; - CLAYERS_OGL_DISP_LISTS* m_platedPads_F_Cu; - CLAYERS_OGL_DISP_LISTS* m_platedPads_B_Cu; - MAP_OGL_DISP_LISTS m_layers_holes_outer; - MAP_OGL_DISP_LISTS m_layers_holes_inner; - CLAYERS_OGL_DISP_LISTS* m_board; - CLAYERS_OGL_DISP_LISTS* m_board_with_holes; - CLAYERS_OGL_DISP_LISTS* m_anti_board; - CLAYERS_OGL_DISP_LISTS* m_through_holes_outer; - CLAYERS_OGL_DISP_LISTS* m_through_holes_vias_outer; - CLAYERS_OGL_DISP_LISTS* m_through_holes_outer_ring; - CLAYERS_OGL_DISP_LISTS* m_vias_and_pad_holes_outer_contourn_and_caps; + MAP_OGL_DISP_LISTS m_layers; + OPENGL_RENDER_LIST* m_platedPads_F_Cu; + OPENGL_RENDER_LIST* m_platedPads_B_Cu; + MAP_OGL_DISP_LISTS m_layers_holes_outer; + MAP_OGL_DISP_LISTS m_layers_holes_inner; + OPENGL_RENDER_LIST* m_board; + OPENGL_RENDER_LIST* m_board_with_holes; + OPENGL_RENDER_LIST* m_anti_board; + OPENGL_RENDER_LIST* m_through_holes_outer; + OPENGL_RENDER_LIST* m_through_holes_vias_outer; + OPENGL_RENDER_LIST* m_through_holes_outer_ring; + OPENGL_RENDER_LIST* m_vias_and_pad_holes_outer_contourn_and_caps; LIST_TRIANGLES m_triangles; ///< store pointers so can be deleted latter GLuint m_ogl_circle_texture; @@ -233,8 +209,8 @@ private: GLuint m_grid; ///< oGL list that stores current grid GRID3D_TYPE m_last_grid_type; ///< Stores the last grid computed - CLAYERS_OGL_DISP_LISTS* m_vias; - CLAYERS_OGL_DISP_LISTS* m_pad_holes; + OPENGL_RENDER_LIST* m_vias; + OPENGL_RENDER_LIST* m_pad_holes; MAP_3DMODEL m_3dmodel_map; @@ -243,4 +219,4 @@ private: SHAPE_POLY_SET m_anti_board_poly; ///< negative polygon representation of the board outline }; -#endif // C3D_RENDER_OGL_LEGACY_H_ +#endif // RENDER_3D_LEGACY_H_ diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c_ogl_3dmodel.cpp b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c_ogl_3dmodel.cpp index c1c451bd3f..50155c6b2a 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c_ogl_3dmodel.cpp +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c_ogl_3dmodel.cpp @@ -39,14 +39,15 @@ /* - * Flag to enable connectivity profiling + * Flag to enable connectivity profiling. + * * @ingroup trace_env_vars */ -const wxChar * C_OGL_3DMODEL::m_logTrace = wxT( "KI_TRACE_EDA_OGL_3DMODEL" ); +const wxChar* MODEL_3D::m_logTrace = wxT( "KI_TRACE_EDA_OGL_3DMODEL" ); -void C_OGL_3DMODEL::MakeBbox( const CBBOX &aBox, unsigned int aIdxOffset, VERTEX *aVtxOut, - GLuint *aIdxOut, const glm::vec4 &aColor ) +void MODEL_3D::MakeBbox( const BBOX_3D& aBox, unsigned int aIdxOffset, VERTEX* aVtxOut, + GLuint* aIdxOut, const glm::vec4& aColor ) { aVtxOut[0].m_pos = { aBox.Min().x, aBox.Min().y, aBox.Min().z }; aVtxOut[1].m_pos = { aBox.Max().x, aBox.Min().y, aBox.Min().z }; @@ -84,9 +85,9 @@ void C_OGL_3DMODEL::MakeBbox( const CBBOX &aBox, unsigned int aIdxOffset, VERTEX } -C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel, MATERIAL_MODE aMaterialMode ) +MODEL_3D::MODEL_3D( const S3DMODEL& a3DModel, MATERIAL_MODE aMaterialMode ) { - wxLogTrace( m_logTrace, wxT( "C_OGL_3DMODEL::C_OGL_3DMODEL %u meshes %u materials" ), + wxLogTrace( m_logTrace, wxT( "MODEL_3D::MODEL_3D %u meshes %u materials" ), static_cast( a3DModel.m_MeshesSize ), static_cast( a3DModel.m_MaterialsSize ) ); @@ -101,11 +102,10 @@ C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel, MATERIAL_MODE aMaterialM m_material_mode = aMaterialMode; if( a3DModel.m_Materials == nullptr || a3DModel.m_Meshes == nullptr - || a3DModel.m_MaterialsSize == 0 || a3DModel.m_MeshesSize == 0 ) + || a3DModel.m_MaterialsSize == 0 || a3DModel.m_MeshesSize == 0 ) return; - // create empty bbox for each mesh. it will be updated when the vertices - // are copied. + // create empty bbox for each mesh. it will be updated when the vertices are copied. m_meshes_bbox.resize( a3DModel.m_MeshesSize ); // copy materials for later use during rendering. @@ -138,11 +138,11 @@ C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel, MATERIAL_MODE aMaterialM // silently ignore meshes that have invalid material references // or invalid geometry. if( mesh.m_MaterialIdx >= m_materials.size() - || mesh.m_Positions == nullptr - || mesh.m_FaceIdx == nullptr - || mesh.m_Normals == nullptr - || mesh.m_FaceIdxSize == 0 - || mesh.m_VertexSize == 0 ) + || mesh.m_Positions == nullptr + || mesh.m_FaceIdx == nullptr + || mesh.m_Normals == nullptr + || mesh.m_FaceIdxSize == 0 + || mesh.m_VertexSize == 0 ) continue; auto& mesh_group = mesh_groups[mesh.m_MaterialIdx]; @@ -185,8 +185,7 @@ C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel, MATERIAL_MODE aMaterialM vtx_out.m_cad_color = glm::clamp( glm::vec4( MaterialDiffuseToColorCAD( mesh.m_Color[vtx_i] ), - 1 ) * 255.0f, - 0.0f, 255.0f ); + 1 ) * 255.0f, 0.0f, 255.0f ); } else { @@ -343,9 +342,7 @@ C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel, MATERIAL_MODE aMaterialM *idx_out++ = static_cast( idx + prev_vtx_count ); } - glBufferSubData( GL_ARRAY_BUFFER, - vtx_offset, - mg.m_vertices.size() * sizeof( VERTEX ), + glBufferSubData( GL_ARRAY_BUFFER, vtx_offset, mg.m_vertices.size() * sizeof( VERTEX ), mg.m_vertices.data() ); mat.m_render_idx_buffer_offset = idx_offset; @@ -358,8 +355,8 @@ C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel, MATERIAL_MODE aMaterialM glGenBuffers( 1, &m_index_buffer ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_index_buffer ); - glBufferData( GL_ELEMENT_ARRAY_BUFFER, idx_size * total_index_count, - tmp_idx.get(), GL_STATIC_DRAW ); + glBufferData( GL_ELEMENT_ARRAY_BUFFER, idx_size * total_index_count, tmp_idx.get(), + GL_STATIC_DRAW ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 ); @@ -372,7 +369,7 @@ C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel, MATERIAL_MODE aMaterialM } -void C_OGL_3DMODEL::BeginDrawMulti( bool aUseColorInformation ) +void MODEL_3D::BeginDrawMulti( bool aUseColorInformation ) { glEnableClientState( GL_VERTEX_ARRAY ); glEnableClientState( GL_NORMAL_ARRAY ); @@ -388,7 +385,7 @@ void C_OGL_3DMODEL::BeginDrawMulti( bool aUseColorInformation ) } -void C_OGL_3DMODEL::EndDrawMulti() +void MODEL_3D::EndDrawMulti() { glDisable( GL_COLOR_MATERIAL ); glDisableClientState( GL_VERTEX_ARRAY ); @@ -401,8 +398,8 @@ void C_OGL_3DMODEL::EndDrawMulti() } -void C_OGL_3DMODEL::Draw( bool aTransparent, float aOpacity, bool aUseSelectedMaterial, - SFVEC3F aSelectionColor ) const +void MODEL_3D::Draw( bool aTransparent, float aOpacity, bool aUseSelectedMaterial, + SFVEC3F aSelectionColor ) const { if( aOpacity <= FLT_EPSILON ) return; @@ -462,7 +459,7 @@ void C_OGL_3DMODEL::Draw( bool aTransparent, float aOpacity, bool aUseSelectedMa } -C_OGL_3DMODEL::~C_OGL_3DMODEL() +MODEL_3D::~MODEL_3D() { if( glDeleteBuffers ) { @@ -474,7 +471,7 @@ C_OGL_3DMODEL::~C_OGL_3DMODEL() } -void C_OGL_3DMODEL::Draw_bbox() const +void MODEL_3D::Draw_bbox() const { if( !glBindBuffer ) throw std::runtime_error( "The OpenGL context no longer exists: unable to draw bbox" ); @@ -493,7 +490,7 @@ void C_OGL_3DMODEL::Draw_bbox() const } -void C_OGL_3DMODEL::Draw_bboxes() const +void MODEL_3D::Draw_bboxes() const { if( !glBindBuffer ) throw std::runtime_error( "The OpenGL context no longer exists: unable to draw bboxes" ); diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c_ogl_3dmodel.h b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c_ogl_3dmodel.h index 562d43b756..edf0c244a8 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c_ogl_3dmodel.h +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c_ogl_3dmodel.h @@ -28,8 +28,8 @@ * @brief implement a legacy 3dmodel render */ -#ifndef _C_OGL_3DMODEL_H_ -#define _C_OGL_3DMODEL_H_ +#ifndef _MODEL_3D_H_ +#define _MODEL_3D_H_ #include #include @@ -37,25 +37,25 @@ #include "../3d_render_raytracing/shapes3D/cbbox.h" #include "../../3d_enums.h" -class C_OGL_3DMODEL +class MODEL_3D { public: /** - * Load a 3d model. + * Load a 3D model. * * @note This must be called inside a gl context. + * * @param a3DModel a 3d model data to load. * @param aMaterialMode a mode to render the materials of the model. */ - C_OGL_3DMODEL( const S3DMODEL &a3DModel, MATERIAL_MODE aMaterialMode ); + MODEL_3D( const S3DMODEL& a3DModel, MATERIAL_MODE aMaterialMode ); - ~C_OGL_3DMODEL(); + ~MODEL_3D(); /** * Render the model into the current context. */ - void Draw_opaque( bool aUseSelectedMaterial, - SFVEC3F aSelectionColor = SFVEC3F( 0.0f ) ) const + void Draw_opaque( bool aUseSelectedMaterial, SFVEC3F aSelectionColor = SFVEC3F( 0.0f ) ) const { Draw( false, 1.0f, aUseSelectedMaterial, aSelectionColor ); } @@ -93,7 +93,7 @@ public: * Get the main bounding box. * @return the main model bounding box. */ - const CBBOX &GetBBox() const { return m_model_bbox; } + const BBOX_3D& GetBBox() const { return m_model_bbox; } /** * Set some basic render states before drawing multiple models. @@ -106,15 +106,15 @@ public: static void EndDrawMulti(); private: - static const wxChar *m_logTrace; + static const wxChar* m_logTrace; // the material mode that was used to generate the rendering data. // FIXME: this can be selected at run-time and does not require re-creation // of the whole model objects. MATERIAL_MODE m_material_mode; - CBBOX m_model_bbox; ///< global bounding box for this model - std::vector m_meshes_bbox; ///< individual bbox for each mesh + BBOX_3D m_model_bbox; ///< global bounding box for this model + std::vector m_meshes_bbox; ///< individual bbox for each mesh // unified vertex format for mesh rendering. struct VERTEX @@ -139,7 +139,7 @@ private: unsigned int m_render_idx_buffer_offset = 0; unsigned int m_render_idx_count = 0; - MATERIAL( const SMATERIAL &aOther ) : SMATERIAL( aOther ) { } + MATERIAL( const SMATERIAL& aOther ) : SMATERIAL( aOther ) { } bool IsTransparent() const { return m_Transparency > FLT_EPSILON; } }; @@ -160,12 +160,11 @@ private: GLuint m_bbox_index_buffer = 0; GLenum m_bbox_index_buffer_type = GL_INVALID_ENUM; - static void MakeBbox( const CBBOX &aBox, unsigned int aIdxOffset, - VERTEX *aVtxOut, GLuint *aIdxOut, - const glm::vec4 &aColor ); + static void MakeBbox( const BBOX_3D& aBox, unsigned int aIdxOffset, VERTEX* aVtxOut, + GLuint* aIdxOut, const glm::vec4& aColor ); void Draw( bool aTransparent, float aOpacity, bool aUseSelectedMaterial, SFVEC3F aSelectionColor ) const; }; -#endif // _C_OGL_3DMODEL_H_ +#endif // _MODEL_3D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/clayer_triangles.cpp b/3d-viewer/3d_rendering/3d_render_ogl_legacy/clayer_triangles.cpp index 76eea8aa32..9c7eeaa16f 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/clayer_triangles.cpp +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/clayer_triangles.cpp @@ -2,7 +2,7 @@ * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2015-2016 Mario Luzeiro - * Copyright (C) 1992-2016 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 @@ -23,8 +23,7 @@ */ /** - * @file clayer_triangles.cpp - * @brief + * @file clayer_triangles.cpp */ @@ -35,8 +34,7 @@ #include -CLAYER_TRIANGLE_CONTAINER::CLAYER_TRIANGLE_CONTAINER( unsigned int aNrReservedTriangles, - bool aReserveNormals ) +TRIANGLE_LIST::TRIANGLE_LIST( unsigned int aNrReservedTriangles, bool aReserveNormals ) { wxASSERT( aNrReservedTriangles > 0 ); @@ -50,8 +48,7 @@ CLAYER_TRIANGLE_CONTAINER::CLAYER_TRIANGLE_CONTAINER( unsigned int aNrReservedTr } -void CLAYER_TRIANGLE_CONTAINER::Reserve_More( unsigned int aNrReservedTriangles, - bool aReserveNormals ) +void TRIANGLE_LIST::Reserve_More( unsigned int aNrReservedTriangles, bool aReserveNormals ) { m_vertexs.reserve( m_vertexs.size() + aNrReservedTriangles * 3 ); @@ -60,10 +57,8 @@ void CLAYER_TRIANGLE_CONTAINER::Reserve_More( unsigned int aNrReservedTriangles, } -void CLAYER_TRIANGLE_CONTAINER::AddQuad( const SFVEC3F &aV1, - const SFVEC3F &aV2, - const SFVEC3F &aV3, - const SFVEC3F &aV4 ) +void TRIANGLE_LIST::AddQuad( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3, + const SFVEC3F& aV4 ) { m_vertexs.push_back( aV1 ); m_vertexs.push_back( aV2 ); @@ -75,9 +70,7 @@ void CLAYER_TRIANGLE_CONTAINER::AddQuad( const SFVEC3F &aV1, } -void CLAYER_TRIANGLE_CONTAINER::AddTriangle( const SFVEC3F &aV1, - const SFVEC3F &aV2, - const SFVEC3F &aV3 ) +void TRIANGLE_LIST::AddTriangle( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3 ) { m_vertexs.push_back( aV1 ); m_vertexs.push_back( aV2 ); @@ -85,19 +78,15 @@ void CLAYER_TRIANGLE_CONTAINER::AddTriangle( const SFVEC3F &aV1, } -void CLAYER_TRIANGLE_CONTAINER::AddNormal( const SFVEC3F &aN1, - const SFVEC3F &aN2, - const SFVEC3F &aN3 ) +void TRIANGLE_LIST::AddNormal( const SFVEC3F& aN1, const SFVEC3F& aN2, const SFVEC3F& aN3 ) { m_normals.push_back( aN1 ); m_normals.push_back( aN2 ); m_normals.push_back( aN3 ); } -void CLAYER_TRIANGLE_CONTAINER::AddNormal( const SFVEC3F &aN1, - const SFVEC3F &aN2, - const SFVEC3F &aN3, - const SFVEC3F &aN4 ) +void TRIANGLE_LIST::AddNormal( const SFVEC3F& aN1, const SFVEC3F& aN2, const SFVEC3F& aN3, + const SFVEC3F& aN4 ) { m_normals.push_back( aN1 ); m_normals.push_back( aN2 ); @@ -109,24 +98,19 @@ void CLAYER_TRIANGLE_CONTAINER::AddNormal( const SFVEC3F &aN1, } -CLAYER_TRIANGLES::CLAYER_TRIANGLES( unsigned int aNrReservedTriangles ) +TRIANGLE_DISPLAY_LIST::TRIANGLE_DISPLAY_LIST( unsigned int aNrReservedTriangles ) { wxASSERT( aNrReservedTriangles > 0 ); - m_layer_top_segment_ends = new CLAYER_TRIANGLE_CONTAINER( aNrReservedTriangles, - false ); - m_layer_top_triangles = new CLAYER_TRIANGLE_CONTAINER( aNrReservedTriangles, - false ); - m_layer_middle_contourns_quads = new CLAYER_TRIANGLE_CONTAINER( aNrReservedTriangles, - true ); - m_layer_bot_triangles = new CLAYER_TRIANGLE_CONTAINER( aNrReservedTriangles, - false ); - m_layer_bot_segment_ends = new CLAYER_TRIANGLE_CONTAINER( aNrReservedTriangles, - false ); + m_layer_top_segment_ends = new TRIANGLE_LIST( aNrReservedTriangles, false ); + m_layer_top_triangles = new TRIANGLE_LIST( aNrReservedTriangles, false ); + m_layer_middle_contourns_quads = new TRIANGLE_LIST( aNrReservedTriangles, true ); + m_layer_bot_triangles = new TRIANGLE_LIST( aNrReservedTriangles, false ); + m_layer_bot_segment_ends = new TRIANGLE_LIST( aNrReservedTriangles, false ); } -CLAYER_TRIANGLES::~CLAYER_TRIANGLES() +TRIANGLE_DISPLAY_LIST::~TRIANGLE_DISPLAY_LIST() { delete m_layer_top_segment_ends; m_layer_top_segment_ends = 0; @@ -145,11 +129,9 @@ CLAYER_TRIANGLES::~CLAYER_TRIANGLES() } -void CLAYER_TRIANGLES::AddToMiddleContourns( const std::vector< SFVEC2F > &aContournPoints, - float zBot, - float zTop, - bool aInvertFaceDirection, - const CBVHCONTAINER2D *aThroughHoles ) +void TRIANGLE_DISPLAY_LIST::AddToMiddleContourns( const std::vector< SFVEC2F >& aContournPoints, + float zBot, float zTop, bool aInvertFaceDirection, + const BVH_CONTAINER_2D* aThroughHoles ) { if( aContournPoints.size() >= 4 ) { @@ -163,8 +145,8 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const std::vector< SFVEC2F > &aCont { for( unsigned int i = 0; i < ( aContournPoints.size() - 1 ); ++i ) { - const SFVEC2F &v0 = aContournPoints[i + 0]; - const SFVEC2F &v1 = aContournPoints[i + 1]; + const SFVEC2F& v0 = aContournPoints[i + 0]; + const SFVEC2F& v1 = aContournPoints[i + 1]; const SFVEC2F n = glm::normalize( v1 - v0 ); contournNormals[i] = SFVEC2F( n.y,-n.x ); @@ -174,8 +156,8 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const std::vector< SFVEC2F > &aCont { for( unsigned int i = 0; i < ( aContournPoints.size() - 1 ); ++i ) { - const SFVEC2F &v0 = aContournPoints[i + 0]; - const SFVEC2F &v1 = aContournPoints[i + 1]; + const SFVEC2F& v0 = aContournPoints[i + 0]; + const SFVEC2F& v1 = aContournPoints[i + 1]; const SFVEC2F n = glm::normalize( v1 - v0 ); contournNormals[i] = SFVEC2F( -n.y, n.x ); @@ -218,11 +200,13 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const std::vector< SFVEC2F > &aCont const SFVEC3F n3d0 = SFVEC3F( n0.x, n0.y, 0.0f ); const SFVEC3F n3d1 = SFVEC3F( n1.x, n1.y, 0.0f ); - const SFVEC2F &v0 = aContournPoints[i + 0]; - const SFVEC2F &v1 = aContournPoints[i + 1]; + const SFVEC2F& v0 = aContournPoints[i + 0]; + const SFVEC2F& v1 = aContournPoints[i + 1]; if( aThroughHoles && aThroughHoles->IntersectAny( RAYSEG2D( v0, v1 ) ) ) + { continue; + } else { std::lock_guard lock( m_middle_layer_lock ); @@ -238,31 +222,27 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const std::vector< SFVEC2F > &aCont } -void CLAYER_TRIANGLES::AddToMiddleContourns( const SHAPE_LINE_CHAIN &outlinePath, - float zBot, - float zTop, - double aBiuTo3Du, - bool aInvertFaceDirection, - const CBVHCONTAINER2D *aThroughHoles ) +void TRIANGLE_DISPLAY_LIST::AddToMiddleContourns( const SHAPE_LINE_CHAIN& outlinePath, float zBot, + float zTop, double aBiuTo3Du, + bool aInvertFaceDirection, + const BVH_CONTAINER_2D* aThroughHoles ) { std::vector< SFVEC2F >contournPoints; contournPoints.clear(); contournPoints.reserve( outlinePath.PointCount() + 2 ); - const VECTOR2I &firstV = outlinePath.CPoint( 0 ); + const VECTOR2I& firstV = outlinePath.CPoint( 0 ); - SFVEC2F lastV = SFVEC2F( firstV.x * aBiuTo3Du, - -firstV.y * aBiuTo3Du ); + SFVEC2F lastV = SFVEC2F( firstV.x * aBiuTo3Du, -firstV.y * aBiuTo3Du ); contournPoints.push_back( lastV ); for( unsigned int i = 1; i < (unsigned int)outlinePath.PointCount(); ++i ) { - const VECTOR2I & v = outlinePath.CPoint( i ); + const VECTOR2I& v = outlinePath.CPoint( i ); - const SFVEC2F vf = SFVEC2F( v.x * aBiuTo3Du, - -v.y * aBiuTo3Du ); + const SFVEC2F vf = SFVEC2F( v.x * aBiuTo3Du, -v.y * aBiuTo3Du ); if( vf != lastV ) // Do not add repeated points { @@ -279,12 +259,10 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const SHAPE_LINE_CHAIN &outlinePath } -void CLAYER_TRIANGLES::AddToMiddleContourns( const SHAPE_POLY_SET &aPolySet, - float zBot, - float zTop, - double aBiuTo3Du, - bool aInvertFaceDirection, - const CBVHCONTAINER2D *aThroughHoles ) +void TRIANGLE_DISPLAY_LIST::AddToMiddleContourns( const SHAPE_POLY_SET& aPolySet, float zBot, + float zTop, double aBiuTo3Du, + bool aInvertFaceDirection, + const BVH_CONTAINER_2D* aThroughHoles ) { if( aPolySet.OutlineCount() == 0 ) return; @@ -300,37 +278,37 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const SHAPE_POLY_SET &aPolySet, for( int h = 0; h < aPolySet.HoleCount( i ); ++h ) { - const SHAPE_LINE_CHAIN &hole = aPolySet.CHole( i, h ); + const SHAPE_LINE_CHAIN& hole = aPolySet.CHole( i, h ); nrContournPointsToReserve += hole.PointCount(); } } // Request to reserve more space - m_layer_middle_contourns_quads->Reserve_More( nrContournPointsToReserve * 2, - true ); + m_layer_middle_contourns_quads->Reserve_More( nrContournPointsToReserve * 2, true ); for( int i = 0; i < aPolySet.OutlineCount(); i++ ) { // Add outline const SHAPE_LINE_CHAIN& pathOutline = aPolySet.COutline( i ); - AddToMiddleContourns( pathOutline, zBot, zTop, aBiuTo3Du, aInvertFaceDirection, aThroughHoles ); + AddToMiddleContourns( pathOutline, zBot, zTop, aBiuTo3Du, aInvertFaceDirection, + aThroughHoles ); // Add holes for this outline for( int h = 0; h < aPolySet.HoleCount( i ); ++h ) { - const SHAPE_LINE_CHAIN &hole = aPolySet.CHole( i, h ); - AddToMiddleContourns( hole, zBot, zTop, aBiuTo3Du, aInvertFaceDirection, aThroughHoles ); + const SHAPE_LINE_CHAIN& hole = aPolySet.CHole( i, h ); + AddToMiddleContourns( hole, zBot, zTop, aBiuTo3Du, aInvertFaceDirection, + aThroughHoles ); } } } -CLAYERS_OGL_DISP_LISTS::CLAYERS_OGL_DISP_LISTS( const CLAYER_TRIANGLES &aLayerTriangles, +OPENGL_RENDER_LIST::OPENGL_RENDER_LIST( const TRIANGLE_DISPLAY_LIST& aLayerTriangles, GLuint aTextureIndexForSegEnds, - float aZBot, - float aZTop ) + float aZBot, float aZTop ) { m_zBot = aZBot; m_zTop = aZTop; @@ -349,13 +327,11 @@ CLAYERS_OGL_DISP_LISTS::CLAYERS_OGL_DISP_LISTS( const CLAYER_TRIANGLES &aLayerTr { m_layer_top_segment_ends = generate_top_or_bot_seg_ends( aLayerTriangles.m_layer_top_segment_ends, - true, - aTextureIndexForSegEnds ); + true, aTextureIndexForSegEnds ); m_layer_bot_segment_ends = generate_top_or_bot_seg_ends( aLayerTriangles.m_layer_bot_segment_ends, - false, - aTextureIndexForSegEnds ); + false, aTextureIndexForSegEnds ); } } @@ -379,7 +355,7 @@ CLAYERS_OGL_DISP_LISTS::CLAYERS_OGL_DISP_LISTS( const CLAYER_TRIANGLES &aLayerTr } -CLAYERS_OGL_DISP_LISTS::~CLAYERS_OGL_DISP_LISTS() +OPENGL_RENDER_LIST::~OPENGL_RENDER_LIST() { if( glIsList( m_layer_top_segment_ends ) ) glDeleteLists( m_layer_top_segment_ends, 1 ); @@ -404,7 +380,7 @@ CLAYERS_OGL_DISP_LISTS::~CLAYERS_OGL_DISP_LISTS() } -void CLAYERS_OGL_DISP_LISTS::DrawTopAndMiddle() const +void OPENGL_RENDER_LIST::DrawTopAndMiddle() const { beginTransformation(); @@ -421,7 +397,7 @@ void CLAYERS_OGL_DISP_LISTS::DrawTopAndMiddle() const } -void CLAYERS_OGL_DISP_LISTS::DrawBotAndMiddle() const +void OPENGL_RENDER_LIST::DrawBotAndMiddle() const { beginTransformation(); @@ -438,7 +414,7 @@ void CLAYERS_OGL_DISP_LISTS::DrawBotAndMiddle() const } -void CLAYERS_OGL_DISP_LISTS::DrawTop() const +void OPENGL_RENDER_LIST::DrawTop() const { beginTransformation(); @@ -452,7 +428,7 @@ void CLAYERS_OGL_DISP_LISTS::DrawTop() const } -void CLAYERS_OGL_DISP_LISTS::DrawBot() const +void OPENGL_RENDER_LIST::DrawBot() const { beginTransformation(); @@ -466,7 +442,7 @@ void CLAYERS_OGL_DISP_LISTS::DrawBot() const } -void CLAYERS_OGL_DISP_LISTS::DrawMiddle() const +void OPENGL_RENDER_LIST::DrawMiddle() const { beginTransformation(); @@ -477,7 +453,7 @@ void CLAYERS_OGL_DISP_LISTS::DrawMiddle() const } -void CLAYERS_OGL_DISP_LISTS::DrawAll( bool aDrawMiddle ) const +void OPENGL_RENDER_LIST::DrawAll( bool aDrawMiddle ) const { beginTransformation(); @@ -501,10 +477,11 @@ void CLAYERS_OGL_DISP_LISTS::DrawAll( bool aDrawMiddle ) const } -void CLAYERS_OGL_DISP_LISTS::DrawAllCameraCulled(float zCameraPos, bool aDrawMiddle ) const +void OPENGL_RENDER_LIST::DrawAllCameraCulled( float zCameraPos, bool aDrawMiddle ) const { - zCameraPos = m_haveTransformation?( (zCameraPos - m_zPositionTransformation ) / - m_zScaleTransformation ):zCameraPos; + zCameraPos = m_haveTransformation + ? ( ( zCameraPos - m_zPositionTransformation ) / m_zScaleTransformation ) + : zCameraPos; if( aDrawMiddle ) DrawMiddle(); @@ -521,17 +498,17 @@ void CLAYERS_OGL_DISP_LISTS::DrawAllCameraCulled(float zCameraPos, bool aDrawMid } else { - // If camera is in the middle dont draw it + // If camera is in the middle dont draw it. } } } -void CLAYERS_OGL_DISP_LISTS::DrawAllCameraCulledSubtractLayer( bool aDrawMiddle, - const CLAYERS_OGL_DISP_LISTS *aLayerToSubtractA, - const CLAYERS_OGL_DISP_LISTS *aLayerToSubtractB, - const CLAYERS_OGL_DISP_LISTS *aLayerToSubtractC, - const CLAYERS_OGL_DISP_LISTS *aLayerToSubtractD ) const +void OPENGL_RENDER_LIST::DrawAllCameraCulledSubtractLayer( bool aDrawMiddle, + const OPENGL_RENDER_LIST* aLayerToSubtractA, + const OPENGL_RENDER_LIST* aLayerToSubtractB, + const OPENGL_RENDER_LIST* aLayerToSubtractC, + const OPENGL_RENDER_LIST* aLayerToSubtractD ) const { glClearStencil( 0x00 ); glClear( GL_STENCIL_BUFFER_BIT ); @@ -558,11 +535,8 @@ void CLAYERS_OGL_DISP_LISTS::DrawAllCameraCulledSubtractLayer( bool aDrawMiddle, if( aLayerToSubtractD ) aLayerToSubtractD->DrawBot(); - //if( !m_draw_it_transparent ) - { - glEnable(GL_DEPTH_TEST); - glDepthMask(GL_TRUE); - } + glEnable(GL_DEPTH_TEST); + glDepthMask(GL_TRUE); glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); glStencilFunc( GL_EQUAL, 0, 1 ); @@ -588,12 +562,8 @@ void CLAYERS_OGL_DISP_LISTS::DrawAllCameraCulledSubtractLayer( bool aDrawMiddle, if( aLayerToSubtractD ) aLayerToSubtractD->DrawTop(); - //if( !m_draw_it_transparent ) - { - glEnable(GL_DEPTH_TEST); - glDepthMask(GL_TRUE); - } - + glEnable(GL_DEPTH_TEST); + glDepthMask(GL_TRUE); glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); glStencilFunc( GL_NOTEQUAL, 2, 0x03 ); glStencilOp( GL_KEEP, GL_KEEP, GL_INCR ); @@ -613,32 +583,16 @@ void CLAYERS_OGL_DISP_LISTS::DrawAllCameraCulledSubtractLayer( bool aDrawMiddle, { if( aLayerToSubtractA ) aLayerToSubtractA->DrawMiddle(); - - // It will not render the middle contours of the layer. - // It is used with vias and holes (copper vias and to subtract solder - // mask holes). But since in the vias, it will draw a cylinder - // and in soldermask it doesn't need to draw the contour. - // so it is not used the middle part of B -// if( aLayerToSubtractB ) -// aLayerToSubtractB->DrawMiddle(); } glLightModeli( GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE ); glCullFace( GL_BACK ); glDisable( GL_STENCIL_TEST ); - -/* - if( m_draw_it_transparent ) - { - glEnable(GL_DEPTH_TEST); - glDepthMask(GL_TRUE); - }*/ } -void CLAYERS_OGL_DISP_LISTS::ApplyScalePosition( float aZposition, - float aZscale ) +void OPENGL_RENDER_LIST::ApplyScalePosition( float aZposition, float aZscale ) { wxASSERT( aZscale > FLT_EPSILON ); @@ -648,37 +602,33 @@ void CLAYERS_OGL_DISP_LISTS::ApplyScalePosition( float aZposition, } -void CLAYERS_OGL_DISP_LISTS::SetItIsTransparent( bool aSetTransparent ) +void OPENGL_RENDER_LIST::SetItIsTransparent( bool aSetTransparent ) { m_draw_it_transparent = aSetTransparent; } -GLuint CLAYERS_OGL_DISP_LISTS::generate_top_or_bot_seg_ends( - const CLAYER_TRIANGLE_CONTAINER *aTriangleContainer, - bool aIsNormalUp, - GLuint aTextureId ) const +GLuint OPENGL_RENDER_LIST::generate_top_or_bot_seg_ends( + const TRIANGLE_LIST* aTriangleContainer, bool aIsNormalUp, GLuint aTextureId ) const { - wxASSERT( aTriangleContainer != NULL ); + wxASSERT( aTriangleContainer != nullptr ); wxASSERT( (aTriangleContainer->GetVertexSize() % 3) == 0 ); // Top and Bot dont have normals array stored in container wxASSERT( aTriangleContainer->GetNormalsSize() == 0 ); - if( (aTriangleContainer->GetVertexSize() > 0) && - ((aTriangleContainer->GetVertexSize() % 3) == 0) ) + if( ( aTriangleContainer->GetVertexSize() > 0 ) + && ( ( aTriangleContainer->GetVertexSize() % 3 ) == 0 ) ) { GLuint listIdx = glGenLists( 1 ); if( glIsList( listIdx ) ) { // Prepare an array of UV text coordinates - SFVEC2F *uvArray = new SFVEC2F[aTriangleContainer->GetVertexSize()]; + SFVEC2F* uvArray = new SFVEC2F[aTriangleContainer->GetVertexSize()]; - for( unsigned int i = 0; - i < aTriangleContainer->GetVertexSize(); - i += 3 ) + for( unsigned int i = 0; i < aTriangleContainer->GetVertexSize(); i += 3 ) { uvArray[i + 0] = SFVEC2F( 1.0f, 0.0f ); uvArray[i + 1] = SFVEC2F( 0.0f, 1.0f ); @@ -726,19 +676,18 @@ GLuint CLAYERS_OGL_DISP_LISTS::generate_top_or_bot_seg_ends( } -GLuint CLAYERS_OGL_DISP_LISTS::generate_top_or_bot_triangles( - const CLAYER_TRIANGLE_CONTAINER *aTriangleContainer, - bool aIsNormalUp ) const +GLuint OPENGL_RENDER_LIST::generate_top_or_bot_triangles( + const TRIANGLE_LIST* aTriangleContainer, bool aIsNormalUp ) const { - wxASSERT( aTriangleContainer != NULL ); + wxASSERT( aTriangleContainer != nullptr ); - wxASSERT( (aTriangleContainer->GetVertexSize() % 3) == 0 ); + wxASSERT( ( aTriangleContainer->GetVertexSize() % 3 ) == 0 ); // Top and Bot dont have normals array stored in container wxASSERT( aTriangleContainer->GetNormalsSize() == 0 ); - if( (aTriangleContainer->GetVertexSize() > 0) && - ( (aTriangleContainer->GetVertexSize() % 3) == 0) ) + if( ( aTriangleContainer->GetVertexSize() > 0 ) + && ( ( aTriangleContainer->GetVertexSize() % 3 ) == 0 ) ) { const GLuint listIdx = glGenLists( 1 ); @@ -771,25 +720,24 @@ GLuint CLAYERS_OGL_DISP_LISTS::generate_top_or_bot_triangles( } -GLuint CLAYERS_OGL_DISP_LISTS::generate_middle_triangles( - const CLAYER_TRIANGLE_CONTAINER *aTriangleContainer ) const +GLuint OPENGL_RENDER_LIST::generate_middle_triangles( + const TRIANGLE_LIST* aTriangleContainer ) const { - wxASSERT( aTriangleContainer != NULL ); + wxASSERT( aTriangleContainer != nullptr ); // We expect that it is a multiple of 3 vertex - wxASSERT( (aTriangleContainer->GetVertexSize() % 3) == 0 ); + wxASSERT( ( aTriangleContainer->GetVertexSize() % 3 ) == 0 ); // We expect that it is a multiple of 6 vertex (because we expect to add quads) - wxASSERT( (aTriangleContainer->GetVertexSize() % 6) == 0 ); + wxASSERT( (aTriangleContainer->GetVertexSize() % 6 ) == 0 ); // We expect that there are normals with same size as vertex wxASSERT( aTriangleContainer->GetNormalsSize() == aTriangleContainer->GetVertexSize() ); - - if( ( aTriangleContainer->GetVertexSize() > 0 ) && - ( (aTriangleContainer->GetVertexSize() % 3) == 0 ) && - ( (aTriangleContainer->GetVertexSize() % 6) == 0 ) && - ( aTriangleContainer->GetNormalsSize() == aTriangleContainer->GetVertexSize() ) ) + if( ( aTriangleContainer->GetVertexSize() > 0 ) + && ( ( aTriangleContainer->GetVertexSize() % 3 ) == 0 ) + && ( ( aTriangleContainer->GetVertexSize() % 6 ) == 0 ) + && ( aTriangleContainer->GetNormalsSize() == aTriangleContainer->GetVertexSize() ) ) { const GLuint listIdx = glGenLists( 1 ); @@ -822,7 +770,7 @@ GLuint CLAYERS_OGL_DISP_LISTS::generate_middle_triangles( } -void CLAYERS_OGL_DISP_LISTS::endTransformation() const +void OPENGL_RENDER_LIST::endTransformation() const { if( m_haveTransformation ) { @@ -831,14 +779,14 @@ void CLAYERS_OGL_DISP_LISTS::endTransformation() const } -void CLAYERS_OGL_DISP_LISTS::setBlendfunction() const +void OPENGL_RENDER_LIST::setBlendfunction() const { glEnable( GL_BLEND ); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); } -void CLAYERS_OGL_DISP_LISTS::beginTransformation() const +void OPENGL_RENDER_LIST::beginTransformation() const { if( m_haveTransformation ) { diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/clayer_triangles.h b/3d-viewer/3d_rendering/3d_render_ogl_legacy/clayer_triangles.h index f277ddaa2b..3d15275e42 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/clayer_triangles.h +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/clayer_triangles.h @@ -2,7 +2,7 @@ * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2015-2016 Mario Luzeiro - * Copyright (C) 1992-2016 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 @@ -23,12 +23,11 @@ */ /** - * @file clayer_triangles.h - * @brief + * @file clayer_triangles.h */ -#ifndef CLAYER_TRIANGLES_H_ -#define CLAYER_TRIANGLES_H_ +#ifndef TRIANGLE_DISPLAY_LIST_H_ +#define TRIANGLE_DISPLAY_LIST_H_ #include "../../common_ogl/openGL_includes.h" #include @@ -43,89 +42,49 @@ typedef std::vector< SFVEC3F > SFVEC3F_VECTOR; /** - * @brief The CLAYER_TRIANGLE_CONTAINER class stores an manage vector of triangles + * Container to manage a vector of triangles. */ -class CLAYER_TRIANGLE_CONTAINER +class TRIANGLE_LIST { - public: /** - * @brief CLAYER_TRIANGLE_CONTAINER - * @param aNrReservedTriangles: number of triangles expected to be used - * @param aReserveNormals: if you will use normals, set it to bool to pre - * reserve space + * @param aNrReservedTriangles is number of triangles expected to be used. + * @param aReserveNormals if you use normals, set it to bool to reserve space. */ - CLAYER_TRIANGLE_CONTAINER( unsigned int aNrReservedTriangles, bool aReserveNormals ); + TRIANGLE_LIST( unsigned int aNrReservedTriangles, bool aReserveNormals ); /** - * @brief Reserve_More - reserve more triangles - * + * Reserve more triangles. */ void Reserve_More( unsigned int aNrReservedTriangles, bool aReserveNormals ); - /** - * @brief AddTriangle - * @param aV1 - * @param aV2 - * @param aV3 - */ - void AddTriangle( const SFVEC3F &aV1, const SFVEC3F &aV2, const SFVEC3F &aV3 ); + void AddTriangle( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3 ); + + void AddQuad( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3, const SFVEC3F& aV4 ); + + void AddNormal( const SFVEC3F& aN1, const SFVEC3F& aN2, const SFVEC3F& aN3 ); + + void AddNormal( const SFVEC3F& aN1, const SFVEC3F& aN2, const SFVEC3F& aN3, + const SFVEC3F& aN4 ); /** - * @brief AddQuad - * @param aV1 - * @param aV2 - * @param aV3 - * @param aV4 + * Get the array of vertexes. + * + * @return a pointer to the start of array vertex. */ - void AddQuad( const SFVEC3F &aV1, - const SFVEC3F &aV2, - const SFVEC3F &aV3, - const SFVEC3F &aV4 ); + const float* GetVertexPointer() const { return (const float *)&m_vertexs[0].x; } /** - * @brief AddNormal - * @param aN1 - * @param aN2 - * @param aN3 + * Get the array of normals. + * + * @return a pointer to start of array of normals. */ - void AddNormal( const SFVEC3F &aN1, const SFVEC3F &aN2, const SFVEC3F &aN3 ); + const float* GetNormalsPointer() const { return (const float*) &m_normals[0].x; } - /** - * @brief AddNormal - * @param aN1 - * @param aN2 - * @param aN3 - */ - void AddNormal( const SFVEC3F &aN1, - const SFVEC3F &aN2, - const SFVEC3F &aN3, - const SFVEC3F &aN4 ); + unsigned int GetVertexSize() const { return (unsigned int) m_vertexs.size(); } - /** - * @brief GetVertexPointer - Get the array of vertexes - * @return The pointer to the start of array vertex - */ - const float *GetVertexPointer() const { return (const float *)&m_vertexs[0].x; } - - /** - * @brief GetNormalsPointer - Get the array of normals - * @return The pointer to start of array of normals - */ - const float *GetNormalsPointer() const { return (const float *)&m_normals[0].x; } - - /** - * @brief GetVertexSize - * @return - */ - unsigned int GetVertexSize() const { return (unsigned int)m_vertexs.size(); } - - /** - * @brief GetNormalsSize - * @return - */ - unsigned int GetNormalsSize() const { return (unsigned int)m_normals.size(); } + unsigned int GetNormalsSize() const { return (unsigned int) m_normals.size(); } private: SFVEC3F_VECTOR m_vertexs; ///< vertex array @@ -134,134 +93,118 @@ private: /** - * @brief The CLAYER_TRIANGLES class stores arrays of triangles to be used to - * create display lists + * Store arrays of triangles to be used to create display lists. */ -class CLAYER_TRIANGLES +class TRIANGLE_DISPLAY_LIST { public: /** - * @brief CLAYER_TRIANGLES - initialize arrays with reserved triangles - * @param aNrReservedTriangles: number of pre alloc triangles to reserve + * Initialize arrays with reserved triangles. + * + * @param aNrReservedTriangles is the number of triangles to reserve. */ - explicit CLAYER_TRIANGLES( unsigned int aNrReservedTriangles ); + explicit TRIANGLE_DISPLAY_LIST( unsigned int aNrReservedTriangles ); + + ~TRIANGLE_DISPLAY_LIST(); /** - * @brief ~CLAYER_TRIANGLES - Free containers - */ - ~CLAYER_TRIANGLES(); - - /** - * @brief IsLayersSizeValid - check if the vertex arrays of the layers are - * as expected - * @return TRUE if layers are correctly setup + * Check if the vertex arrays of the layers are as expected. + * + * @return true if layers are correctly setup. */ bool IsLayersSizeValid(); - void AddToMiddleContourns( const SHAPE_LINE_CHAIN &outlinePath, - float zBot, - float zTop, - double aBiuTo3Du, - bool aInvertFaceDirection, - const CBVHCONTAINER2D *aThroughHoles = nullptr ); + void AddToMiddleContourns( const SHAPE_LINE_CHAIN& outlinePath, float zBot, float zTop, + double aBiuTo3Du, bool aInvertFaceDirection, + const BVH_CONTAINER_2D* aThroughHoles = nullptr ); - void AddToMiddleContourns( const SHAPE_POLY_SET &aPolySet, - float zBot, - float zTop, - double aBiuTo3Du, - bool aInvertFaceDirection, - const CBVHCONTAINER2D *aThroughHoles = nullptr ); + void AddToMiddleContourns( const SHAPE_POLY_SET& aPolySet, float zBot, float zTop, + double aBiuTo3Du, bool aInvertFaceDirection, + const BVH_CONTAINER_2D* aThroughHoles = nullptr ); - void AddToMiddleContourns( const std::vector< SFVEC2F > &aContournPoints, - float zBot, - float zTop, - bool aInvertFaceDirection, - const CBVHCONTAINER2D *aThroughHoles = nullptr ); + void AddToMiddleContourns( const std::vector< SFVEC2F >& aContournPoints, float zBot, + float zTop, bool aInvertFaceDirection, + const BVH_CONTAINER_2D* aThroughHoles = nullptr ); std::mutex m_middle_layer_lock; - CLAYER_TRIANGLE_CONTAINER *m_layer_top_segment_ends; - CLAYER_TRIANGLE_CONTAINER *m_layer_top_triangles; - CLAYER_TRIANGLE_CONTAINER *m_layer_middle_contourns_quads; - CLAYER_TRIANGLE_CONTAINER *m_layer_bot_triangles; - CLAYER_TRIANGLE_CONTAINER *m_layer_bot_segment_ends; + TRIANGLE_LIST* m_layer_top_segment_ends; + TRIANGLE_LIST* m_layer_top_triangles; + TRIANGLE_LIST* m_layer_middle_contourns_quads; + TRIANGLE_LIST* m_layer_bot_triangles; + TRIANGLE_LIST* m_layer_bot_segment_ends; }; /** - * @brief The CLAYERS_OGL_DISP_LISTS class stores the openGL display lists to - * related with a layer + * Store the OpenGL display lists to related with a layer. */ -class CLAYERS_OGL_DISP_LISTS +class OPENGL_RENDER_LIST { public: /** - * @brief CLAYERS_OGL_DISP_LISTS - Creates the display lists for a layer - * @param aLayerTriangles: contains the layers array of vertex to render to - * display lists - * @param aTextureIndexForSegEnds: texture index to be used by segment ends. - * It is a black and white squared texture - * with a center circle diameter of the size - * of the texture. + * Create the display lists for a layer. + * + * @param aLayerTriangles contains the layers array of vertex to render to display lists. + * @param aTextureIndexForSegEnds is the texture index to be used by segment ends. + * It is a black and white squared texture + * with a center circle diameter of the size + * of the texture. */ - CLAYERS_OGL_DISP_LISTS( const CLAYER_TRIANGLES &aLayerTriangles, - GLuint aTextureIndexForSegEnds, - float aZBot, - float aZTop ); + OPENGL_RENDER_LIST( const TRIANGLE_DISPLAY_LIST& aLayerTriangles, + GLuint aTextureIndexForSegEnds, float aZBot, float aZTop ); /** - * @brief ~CLAYERS_OGL_DISP_LISTS - Destroy this class while free the display - * lists from GPU mem + * Destroy this class while free the display lists from GPU memory. */ - ~CLAYERS_OGL_DISP_LISTS(); + ~OPENGL_RENDER_LIST(); /** - * @brief DrawTopAndMiddle - This function calls the display lists for the - * top elements and middle contourns + * Call the display lists for the top elements and middle contours. */ void DrawTopAndMiddle() const; /** - * @brief DrawBotAndMiddle - This function calls the display lists for the - * botton elements and middle contourns + * Call the display lists for the bottom elements and middle contours. */ void DrawBotAndMiddle() const; /** - * @brief DrawTop - This function calls the display lists for the top elements + * Call the display lists for the top elements. */ void DrawTop() const; /** - * @brief DrawBot - This function calls the display lists for the botton elements + * Call the display lists for the bottom elements. */ void DrawBot() const; /** - * @brief DrawMiddle - This function calls the display lists for the middle - * elements + * Call the display lists for the middle elements. */ void DrawMiddle() const; /** - * @brief DrawAll - This function calls all the display lists + * Call to draw all the display lists. */ void DrawAll( bool aDrawMiddle = true ) const; /** - * @brief DrawAllCameraCulled - Draw all layers if they are visible by the camera. - * i.e.: if camera position is above the layer. This only works because the - * board is centered and the planes are always perpendicular to the Z axis. - * @param zCameraPos: camera z position + * Draw all layers if they are visible by the camera if camera position is above the layer. + * + * This only works because the board is centered and the planes are always perpendicular to + * the Z axis. + * + * @param zCameraPos is the camera z axis position. */ void DrawAllCameraCulled( float zCameraPos, bool aDrawMiddle = true ) const; void DrawAllCameraCulledSubtractLayer( bool aDrawMiddle, - const CLAYERS_OGL_DISP_LISTS* aLayerToSubtractA = nullptr, - const CLAYERS_OGL_DISP_LISTS* aLayerToSubtractB = nullptr, - const CLAYERS_OGL_DISP_LISTS* aLayerToSubtractC = nullptr, - const CLAYERS_OGL_DISP_LISTS* aLayerToSubtractD = nullptr ) const; + const OPENGL_RENDER_LIST* aLayerToSubtractA = nullptr, + const OPENGL_RENDER_LIST* aLayerToSubtractB = nullptr, + const OPENGL_RENDER_LIST* aLayerToSubtractC = nullptr, + const OPENGL_RENDER_LIST* aLayerToSubtractD = nullptr ) const; void ApplyScalePosition( float aZposition, float aZscale ); @@ -273,14 +216,13 @@ public: float GetZTop() const { return m_zTop; } private: - GLuint generate_top_or_bot_seg_ends( const CLAYER_TRIANGLE_CONTAINER * aTriangleContainer, - bool aIsNormalUp, - GLuint aTextureId ) const; + GLuint generate_top_or_bot_seg_ends( const TRIANGLE_LIST* aTriangleContainer, + bool aIsNormalUp, GLuint aTextureId ) const; - GLuint generate_top_or_bot_triangles( const CLAYER_TRIANGLE_CONTAINER * aTriangleContainer, + GLuint generate_top_or_bot_triangles( const TRIANGLE_LIST* aTriangleContainer, bool aIsNormalUp ) const; - GLuint generate_middle_triangles( const CLAYER_TRIANGLE_CONTAINER * aTriangleContainer ) const; + GLuint generate_middle_triangles( const TRIANGLE_LIST* aTriangleContainer ) const; void beginTransformation() const; void endTransformation() const; @@ -303,4 +245,4 @@ private: bool m_draw_it_transparent; }; -#endif // CLAYER_TRIANGLES_H_ +#endif // TRIANGLE_DISPLAY_LIST_H_ diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/ogl_legacy_utils.cpp b/3d-viewer/3d_rendering/3d_render_ogl_legacy/ogl_legacy_utils.cpp index 3756191b3f..94141b4cd5 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/ogl_legacy_utils.cpp +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/ogl_legacy_utils.cpp @@ -35,11 +35,11 @@ #define RADPERDEG 0.0174533 -void OGL_draw_arrow( SFVEC3F aPosition, SFVEC3F aTargetPos, float aSize ) +void DrawRoundArrow( SFVEC3F aPosition, SFVEC3F aTargetPos, float aSize ) { wxASSERT( aSize > 0.0f ); - SFVEC3F vec = (aTargetPos - aPosition); + SFVEC3F vec = aTargetPos - aPosition; float length = glm::length( vec ); GLUquadricObj *quadObj; @@ -50,13 +50,12 @@ void OGL_draw_arrow( SFVEC3F aPosition, SFVEC3F aTargetPos, float aSize ) if( ( vec.x != 0.0f ) || ( vec.y != 0.0f ) ) { - glRotatef( atan2( vec.y, vec.x ) / RADPERDEG, 0.0f, 0.0f, 1.0f ); - glRotatef( atan2( sqrt( vec.x * vec.x + vec.y * vec.y ), vec.z ) / RADPERDEG, - 0.0f, - 1.0f, - 0.0f ); + glRotatef( atan2( vec.y, vec.x ) / RADPERDEG, 0.0f, 0.0f, 1.0f ); + glRotatef( atan2( sqrt( vec.x * vec.x + vec.y * vec.y ), vec.z ) / RADPERDEG, + 0.0f, 1.0f, 0.0f ); - } else if( vec.z < 0.0f ) + } + else if( vec.z < 0.0f ) { glRotatef( 180.0f, 1.0f, 0.0f, 0.0f ); } @@ -95,14 +94,6 @@ void OGL_draw_arrow( SFVEC3F aPosition, SFVEC3F aTargetPos, float aSize ) gluQuadricNormals( quadObj, GLU_SMOOTH ); gluCylinder( quadObj, aSize, aSize, length - 4.0 * aSize, 12, 1 ); gluDeleteQuadric( quadObj ); -/* - - quadObj = gluNewQuadric(); - gluQuadricDrawStyle( quadObj, GLU_FILL ); - gluQuadricNormals( quadObj, GLU_SMOOTH ); - gluSphere( quadObj, aSize, 24, 24 ); - gluDeleteQuadric( quadObj ); -*/ quadObj = gluNewQuadric(); gluQuadricDrawStyle( quadObj, GLU_FILL ); @@ -114,7 +105,7 @@ void OGL_draw_arrow( SFVEC3F aPosition, SFVEC3F aTargetPos, float aSize ) } -void OGL_draw_bbox( const CBBOX &aBBox ) +void DrawBoundingBox( const BBOX_3D& aBBox ) { wxASSERT( aBBox.IsInitialized() ); @@ -154,7 +145,7 @@ void OGL_draw_bbox( const CBBOX &aBBox ) } -void OGL_draw_half_open_cylinder( unsigned int aNrSidesPerCircle ) +void DrawHalfOpenCylinder( unsigned int aNrSidesPerCircle ) { if( aNrSidesPerCircle > 1 ) { @@ -213,8 +204,7 @@ void OGL_draw_half_open_cylinder( unsigned int aNrSidesPerCircle ) } -void OGL_Draw_segment( const CROUNDSEGMENT2D &aSegment, - unsigned int aNrSidesPerCircle ) +void DrawSegment( const ROUND_SEGMENT_2D& aSegment, unsigned int aNrSidesPerCircle ) { glPushMatrix(); @@ -228,16 +218,13 @@ void OGL_Draw_segment( const CROUNDSEGMENT2D &aSegment, if( ( end_minus_start.x != 0.0f ) || ( end_minus_start.y != 0.0f ) ) { - glRotatef( atan2( end_minus_start.y, end_minus_start.x ) / RADPERDEG, - 0.0f, - 0.0f, - 1.0f ); + glRotatef( atan2( end_minus_start.y, end_minus_start.x ) / RADPERDEG, 0.0f, 0.0f, 1.0f ); } glPushMatrix(); glTranslatef( length, 0.0, 0.0f ); glScalef( width, width, 1.0f ); - OGL_draw_half_open_cylinder( aNrSidesPerCircle ); + DrawHalfOpenCylinder( aNrSidesPerCircle ); glPopMatrix(); glBegin( GL_QUADS ); @@ -274,7 +261,7 @@ void OGL_Draw_segment( const CROUNDSEGMENT2D &aSegment, glScalef( width, width, 1.0f ); glRotatef( 180, 0.0, 0.0, 1.0 ); - OGL_draw_half_open_cylinder( aNrSidesPerCircle ); + DrawHalfOpenCylinder( aNrSidesPerCircle ); glPopMatrix (); } diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/ogl_legacy_utils.h b/3d-viewer/3d_rendering/3d_render_ogl_legacy/ogl_legacy_utils.h index 581d69a1f9..7a74530dac 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/ogl_legacy_utils.h +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/ogl_legacy_utils.h @@ -34,37 +34,40 @@ #include "../3d_render_raytracing/shapes2D/croundsegment2d.h" /** - * @brief OGL_draw_arrow - draw a round arrow - * @param aPosition: start position of the arrow - * @param aTargetPos: end position of the arror - * @param aSize: diameter size + * Draw a round arrow. + * + * @param aPosition is the start position of the arrow. + * @param aTargetPos is the end position of the arrow. + * @param aSize is the diameter of the arrow. */ -void OGL_draw_arrow( SFVEC3F aPosition, SFVEC3F aTargetPos, float aSize ); +void DrawRoundArrow( SFVEC3F aPosition, SFVEC3F aTargetPos, float aSize ); /** - * @brief OGL_draw_bbox - draw the bounding box lines - * @param aBBox is the box to draw + * Draw the bounding box lines. + * + * @param aBBox is the box to draw. */ -void OGL_draw_bbox( const CBBOX &aBBox ); +void DrawBoundingBox( const BBOX_3D& aBBox ); /** - * @brief OGL_draw_half_open_cylinder - draws an open half cylinder - * with diameter 1.0f and Height 1.0f - * the bottom center is at (0,0,0) and top center is at (0,0,1) + * Draw a half open cylinder with diameter 1.0f and height 1.0f. + * + * The bottom center is at (0,0,0) and top center is at (0,0,1). + * * @param aNrSidesPerCircle is the number of segments to approximate a circle. */ -void OGL_draw_half_open_cylinder( unsigned int aNrSidesPerCircle ); +void DrawHalfOpenCylinder( unsigned int aNrSidesPerCircle ); /** - * @brief OGL_Draw_segment draws a thick segment with rounded ends + * Draw a thick line segment with rounded ends. + * * @param aSegment is the thick segment to draw - * @param aNrSidesPerCircle is the number of segments to approximate a circle. - * used to draw the rounded ends of the segment + * @param aNrSidesPerCircle is the number of segments to approximate the circle used to draw + * the rounded ends of the segment. */ -void OGL_Draw_segment( const CROUNDSEGMENT2D &aSegment, - unsigned int aNrSidesPerCircle ); +void DrawSegment( const ROUND_SEGMENT_2D& aSegment, unsigned int aNrSidesPerCircle ); #endif // OGL_LEGACY_UTILS_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/caccelerator.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/caccelerator.cpp index 9bf7ab1095..a8fca2d2ea 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/caccelerator.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/caccelerator.cpp @@ -2,7 +2,7 @@ * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2015-2016 Mario Luzeiro - * Copyright (C) 1992-2016 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 @@ -24,17 +24,17 @@ /** * @file caccelerator.cpp - * @brief */ #include "caccelerator.h" -CGENERICACCELERATOR::CGENERICACCELERATOR( ) +ACCELERATOR_3D::ACCELERATOR_3D( ) { m_bbox.Reset(); } -CGENERICACCELERATOR::~CGENERICACCELERATOR() + +ACCELERATOR_3D::~ACCELERATOR_3D() { } diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/caccelerator.h b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/caccelerator.h index 75d33d6d17..4329dca961 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/caccelerator.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/caccelerator.h @@ -34,25 +34,24 @@ #include "../raypacket.h" -class CGENERICACCELERATOR +class ACCELERATOR_3D { public: - CGENERICACCELERATOR( ); - virtual ~CGENERICACCELERATOR(); + ACCELERATOR_3D( ); + virtual ~ACCELERATOR_3D(); - virtual bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const = 0; + virtual bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const = 0; - virtual bool Intersect( const RAY &aRay, - HITINFO &aHitInfo, + virtual bool Intersect( const RAY& aRay, HITINFO& aHitInfo, unsigned int aAccNodeInfo ) const = 0; - virtual bool Intersect( const RAYPACKET &aRayPacket, - HITINFO_PACKET *aHitInfoPacket ) const = 0; + virtual bool Intersect( const RAYPACKET& aRayPacket, + HITINFO_PACKET* aHitInfoPacket ) const = 0; - virtual bool IntersectP( const RAY &aRay, float aMaxDistance ) const = 0; + virtual bool IntersectP( const RAY& aRay, float aMaxDistance ) const = 0; protected: - CBBOX m_bbox; + BBOX_3D m_bbox; }; #endif // _CACCELERATOR_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_packet_traversal.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_packet_traversal.cpp index aa25d20f3b..ae5ee7caf0 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_packet_traversal.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_packet_traversal.cpp @@ -45,10 +45,8 @@ struct StackNode }; -static inline unsigned int getFirstHit( const RAYPACKET &aRayPacket, - const CBBOX &aBBox, - unsigned int ia, - HITINFO_PACKET *aHitInfoPacket ) +static inline unsigned int getFirstHit( const RAYPACKET& aRayPacket, const BBOX_3D& aBBox, + unsigned int ia, HITINFO_PACKET* aHitInfoPacket ) { float hitT; @@ -72,10 +70,8 @@ static inline unsigned int getFirstHit( const RAYPACKET &aRayPacket, #ifdef BVH_RANGED_TRAVERSAL -static inline unsigned int getLastHit( const RAYPACKET &aRayPacket, - const CBBOX &aBBox, - unsigned int ia, - HITINFO_PACKET *aHitInfoPacket ) +static inline unsigned int getLastHit( const RAYPACKET& aRayPacket, const BBOX_3D& aBBox, + unsigned int ia, HITINFO_PACKET* aHitInfoPacket ) { for( unsigned int ie = (RAYPACKET_RAYS_PER_PACKET - 1); ie > ia; --ie ) { @@ -94,12 +90,12 @@ static inline unsigned int getLastHit( const RAYPACKET &aRayPacket, // http://cseweb.ucsd.edu/~ravir/whitted.pdf // Ranged Traversal -bool CBVH_PBRT::Intersect( const RAYPACKET &aRayPacket, HITINFO_PACKET *aHitInfoPacket ) const +bool BVH_PBRT::Intersect( const RAYPACKET& aRayPacket, HITINFO_PACKET* aHitInfoPacket ) const { - if( m_nodes == NULL ) + if( m_nodes == nullptr ) return false; - if( (&m_nodes[0]) == NULL ) + if( &m_nodes[0] == nullptr ) return false; bool anyHitted = false; @@ -118,7 +114,7 @@ bool CBVH_PBRT::Intersect( const RAYPACKET &aRayPacket, HITINFO_PACKET *aHitInfo { if( curCell->nPrimitives == 0 ) { - StackNode &node = todo[todoOffset++]; + StackNode& node = todo[todoOffset++]; node.cell = curCell->secondChildOffset; node.ia = ia; nodeNum = nodeNum + 1; @@ -126,14 +122,12 @@ bool CBVH_PBRT::Intersect( const RAYPACKET &aRayPacket, HITINFO_PACKET *aHitInfo } else { - const unsigned int ie = getLastHit( aRayPacket, - curCell->bounds, - ia, + const unsigned int ie = getLastHit( aRayPacket, curCell->bounds, ia, aHitInfoPacket ); for( int j = 0; j < curCell->nPrimitives; ++j ) { - const COBJECT *obj = m_primitives[curCell->primitivesOffset + j]; + const OBJECT_3D* obj = m_primitives[curCell->primitivesOffset + j]; if( aRayPacket.m_Frustum.Intersect( obj->GetBBox() ) ) { @@ -157,7 +151,7 @@ bool CBVH_PBRT::Intersect( const RAYPACKET &aRayPacket, HITINFO_PACKET *aHitInfo if( todoOffset == 0 ) break; - const StackNode &node = todo[--todoOffset]; + const StackNode& node = todo[--todoOffset]; nodeNum = node.cell; ia = node.ia; @@ -174,11 +168,9 @@ bool CBVH_PBRT::Intersect( const RAYPACKET &aRayPacket, HITINFO_PACKET *aHitInfo #ifdef BVH_PARTITION_TRAVERSAL -static inline unsigned int getLastHit( const RAYPACKET &aRayPacket, - const CBBOX &aBBox, - unsigned int ia, - const unsigned int *aRayIndex, - HITINFO_PACKET *aHitInfoPacket ) +static inline unsigned int getLastHit( const RAYPACKET& aRayPacket, const BBOX_3D& aBBox, + unsigned int ia, const unsigned int* aRayIndex, + HITINFO_PACKET* aHitInfoPacket ) { for( unsigned int ie = (RAYPACKET_RAYS_PER_PACKET - 1); ie > ia; --ie ) { @@ -193,11 +185,9 @@ static inline unsigned int getLastHit( const RAYPACKET &aRayPacket, } -static inline unsigned int partRays( const RAYPACKET &aRayPacket, - const CBBOX &aBBox, - unsigned int ia, - unsigned int *aRayIndex, - HITINFO_PACKET *aHitInfoPacket ) +static inline unsigned int partRays( const RAYPACKET& aRayPacket, const BBOX_3D& aBBox, + unsigned int ia, unsigned int* aRayIndex, + HITINFO_PACKET* aHitInfoPacket ) { if( !aRayPacket.m_Frustum.Intersect( aBBox ) ) @@ -208,6 +198,7 @@ static inline unsigned int partRays( const RAYPACKET &aRayPacket, for( unsigned int i = 0; i < ia; ++i ) { float hitT; + if( aBBox.Intersect( aRayPacket.m_ray[ aRayIndex[i] ], &hitT ) && ( hitT < aHitInfoPacket[ aRayIndex[i] ].m_HitInfo.m_tHit ) ) std::swap( aRayIndex[ie++], aRayIndex[i] ); @@ -217,7 +208,7 @@ static inline unsigned int partRays( const RAYPACKET &aRayPacket, } -bool CBVH_PBRT::Intersect( const RAYPACKET &aRayPacket, HITINFO_PACKET *aHitInfoPacket ) const +bool BVH_PBRT::Intersect( const RAYPACKET& aRayPacket, HITINFO_PACKET* aHitInfoPacket ) const { bool anyHitted = false; int todoOffset = 0, nodeNum = 0; @@ -239,7 +230,7 @@ bool CBVH_PBRT::Intersect( const RAYPACKET &aRayPacket, HITINFO_PACKET *aHitInfo { if( curCell->nPrimitives == 0 ) { - StackNode &node = todo[todoOffset++]; + StackNode& node = todo[todoOffset++]; node.cell = curCell->secondChildOffset; node.ia = ia; nodeNum = nodeNum + 1; @@ -247,15 +238,12 @@ bool CBVH_PBRT::Intersect( const RAYPACKET &aRayPacket, HITINFO_PACKET *aHitInfo } else { - unsigned int ie = getLastHit( aRayPacket, - curCell->bounds, - ia, - I, - aHitInfoPacket ); + unsigned int ie = geetLastHit( aRayPacket, curCell->bounds, ia, I, + aHitInfoPacket ); for( int j = 0; j < curCell->nPrimitives; ++j ) { - const COBJECT *obj = m_primitives[curCell->primitivesOffset + j]; + const OBJECT_3D* obj = m_primitives[curCell->primitivesOffset + j]; if( aRayPacket.m_Frustum.Intersect( obj->GetBBox() ) ) { @@ -281,7 +269,7 @@ bool CBVH_PBRT::Intersect( const RAYPACKET &aRayPacket, HITINFO_PACKET *aHitInfo if( todoOffset == 0 ) break; - const StackNode &node = todo[--todoOffset]; + const StackNode& node = todo[--todoOffset]; nodeNum = node.cell; ia = node.ia; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_pbrt.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_pbrt.cpp index 93262b61b8..3b1fecff91 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_pbrt.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_pbrt.cpp @@ -92,13 +92,13 @@ struct BVHPrimitiveInfo centroid = SFVEC3F( 0.0f ); } - BVHPrimitiveInfo( int aPrimitiveNumber, const CBBOX &aBounds ) : + BVHPrimitiveInfo( int aPrimitiveNumber, const BBOX_3D& aBounds ) : primitiveNumber( aPrimitiveNumber ), bounds( aBounds ), centroid( .5f * aBounds.Min() + .5f * aBounds.Max() ) {} int primitiveNumber; - CBBOX bounds; + BBOX_3D bounds; SFVEC3F centroid; }; @@ -106,15 +106,15 @@ struct BVHPrimitiveInfo struct BVHBuildNode { // BVHBuildNode Public Methods - void InitLeaf( int first, int n, const CBBOX &b) + void InitLeaf( int first, int n, const BBOX_3D& b) { firstPrimOffset = first; nPrimitives = n; bounds = b; - children[0] = children[1] = NULL; + children[0] = children[1] = nullptr; } - void InitInterior( int axis, BVHBuildNode *c0, BVHBuildNode *c1 ) + void InitInterior( int axis, BVHBuildNode* c0, BVHBuildNode* c1 ) { children[0] = c0; children[1] = c1; @@ -124,8 +124,8 @@ struct BVHBuildNode nPrimitives = 0; } - CBBOX bounds; - BVHBuildNode *children[2]; + BBOX_3D bounds; + BVHBuildNode* children[2]; int splitAxis, firstPrimOffset, nPrimitives; }; @@ -165,17 +165,17 @@ inline uint32_t LeftShift3( uint32_t x ) } -inline uint32_t EncodeMorton3( const SFVEC3F &v ) +inline uint32_t EncodeMorton3( const SFVEC3F& v ) { - wxASSERT( v.x >= 0 && v.x <= (1 << 10) ); - wxASSERT( v.y >= 0 && v.y <= (1 << 10) ); - wxASSERT( v.z >= 0 && v.z <= (1 << 10) ); + wxASSERT( v.x >= 0 && v.x <= ( 1 << 10 ) ); + wxASSERT( v.y >= 0 && v.y <= ( 1 << 10 ) ); + wxASSERT( v.z >= 0 && v.z <= ( 1 << 10 ) ); - return (LeftShift3(v.z) << 2) | (LeftShift3(v.y) << 1) | LeftShift3(v.x); + return ( LeftShift3( v.z ) << 2 ) | ( LeftShift3( v.y ) << 1 ) | LeftShift3( v.x ); } -static void RadixSort( std::vector *v ) +static void RadixSort( std::vector* v ) { std::vector tempVector( v->size() ); @@ -192,8 +192,8 @@ static void RadixSort( std::vector *v ) const int lowBit = pass * bitsPerPass; // Set in and out vector pointers for radix sort pass - std::vector &in = (pass & 1) ? tempVector : *v; - std::vector &out = (pass & 1) ? *v : tempVector; + std::vector& in = ( pass & 1 ) ? tempVector : *v; + std::vector& out = ( pass & 1 ) ? *v : tempVector; // Count number of zero bits in array for current radix sort bit const int nBuckets = 1 << bitsPerPass; @@ -203,9 +203,9 @@ static void RadixSort( std::vector *v ) for( uint32_t i = 0; i < in.size(); ++i ) { const MortonPrimitive &mp = in[i]; - int bucket = (mp.mortonCode >> lowBit) & bitMask; + int bucket = ( mp.mortonCode >> lowBit ) & bitMask; - wxASSERT( (bucket >= 0) && (bucket < nBuckets) ); + wxASSERT( ( bucket >= 0 ) && ( bucket < nBuckets ) ); ++bucketCount[bucket]; } @@ -220,7 +220,7 @@ static void RadixSort( std::vector *v ) // Store sorted values in output array for( uint32_t i = 0; i < in.size(); ++i ) { - const MortonPrimitive &mp = in[i]; + const MortonPrimitive& mp = in[i]; int bucket = (mp.mortonCode >> lowBit) & bitMask; out[startIndex[bucket]++] = mp; } @@ -232,15 +232,14 @@ static void RadixSort( std::vector *v ) } -CBVH_PBRT::CBVH_PBRT( const CGENERICCONTAINER &aObjectContainer, - int aMaxPrimsInNode, +BVH_PBRT::BVH_PBRT( const CONTAINER_3D_BASE& aObjectContainer, int aMaxPrimsInNode, SPLITMETHOD aSplitMethod ) : m_maxPrimsInNode( std::min( 255, aMaxPrimsInNode ) ), m_splitMethod( aSplitMethod ) { if( aObjectContainer.GetList().empty() ) { - m_nodes = NULL; + m_nodes = nullptr; return; } @@ -276,18 +275,16 @@ CBVH_PBRT::CBVH_PBRT( const CGENERICCONTAINER &aObjectContainer, BVHBuildNode *root; if( m_splitMethod == SPLITMETHOD::HLBVH ) - root = HLBVHBuild( primitiveInfo, &totalNodes, orderedPrims); + root = HLBVHBuild( primitiveInfo, &totalNodes, orderedPrims ); else - root = recursiveBuild( primitiveInfo, 0, m_primitives.size(), - &totalNodes, orderedPrims); + root = recursiveBuild( primitiveInfo, 0, m_primitives.size(), &totalNodes, orderedPrims ); wxASSERT( m_primitives.size() == orderedPrims.size() ); m_primitives.swap( orderedPrims ); // Compute representation of depth-first traversal of BVH tree - m_nodes = static_cast( malloc( sizeof( LinearBVHNode ) * - totalNodes ) ); + m_nodes = static_cast( malloc( sizeof( LinearBVHNode ) * totalNodes ) ); m_addresses_pointer_to_mm_free.push_back( m_nodes ); for( int i = 0; i < totalNodes; ++i ) @@ -306,7 +303,7 @@ CBVH_PBRT::CBVH_PBRT( const CGENERICCONTAINER &aObjectContainer, } -CBVH_PBRT::~CBVH_PBRT() +BVH_PBRT::~BVH_PBRT() { if( !m_addresses_pointer_to_mm_free.empty() ) { @@ -315,7 +312,7 @@ CBVH_PBRT::~CBVH_PBRT() ++ii ) { free( *ii ); - *ii = NULL; + *ii = nullptr; } } @@ -325,11 +322,11 @@ CBVH_PBRT::~CBVH_PBRT() struct ComparePoints { - explicit ComparePoints(int d) { dim = d; } + explicit ComparePoints( int d ) { dim = d; } int dim; - bool operator()( const BVHPrimitiveInfo &a, const BVHPrimitiveInfo &b ) const + bool operator()( const BVHPrimitiveInfo& a, const BVHPrimitiveInfo& b ) const { return a.centroid[dim] < b.centroid[dim]; } @@ -343,7 +340,7 @@ struct CompareToMid int dim; float mid; - bool operator()( const BVHPrimitiveInfo &a ) const + bool operator()( const BVHPrimitiveInfo& a ) const { return a.centroid[dim] < mid; } @@ -352,22 +349,23 @@ struct CompareToMid struct CompareToBucket { - CompareToBucket( int split, int num, int d, const CBBOX &b ) - : centroidBounds(b) + CompareToBucket( int split, int num, int d, const BBOX_3D& b ) + : centroidBounds( b ) { splitBucket = split; - nBuckets = num; dim = d; + nBuckets = num; + dim = d; } - bool operator()(const BVHPrimitiveInfo &p) const; + bool operator()( const BVHPrimitiveInfo& p ) const; int splitBucket, nBuckets, dim; - const CBBOX ¢roidBounds; + const BBOX_3D& centroidBounds; }; -bool CompareToBucket::operator()( const BVHPrimitiveInfo &p ) const +bool CompareToBucket::operator()( const BVHPrimitiveInfo& p ) const { const float centroid = p.centroid[dim]; @@ -379,7 +377,7 @@ bool CompareToBucket::operator()( const BVHPrimitiveInfo &p ) const if( b == nBuckets ) b = nBuckets - 1; - wxASSERT( (b >= 0) && (b < nBuckets) ); + wxASSERT( ( b >= 0 ) && ( b < nBuckets ) ); return b <= splitBucket; } @@ -387,21 +385,21 @@ bool CompareToBucket::operator()( const BVHPrimitiveInfo &p ) const struct HLBVH_SAH_Evaluator { - HLBVH_SAH_Evaluator( int split, int num, int d, const CBBOX &b ) + HLBVH_SAH_Evaluator( int split, int num, int d, const BBOX_3D& b ) : centroidBounds(b) { minCostSplitBucket = split; nBuckets = num; dim = d; } - bool operator()(const BVHBuildNode *node) const; + bool operator()( const BVHBuildNode* node ) const; int minCostSplitBucket, nBuckets, dim; - const CBBOX ¢roidBounds; + const BBOX_3D& centroidBounds; }; -bool HLBVH_SAH_Evaluator::operator()( const BVHBuildNode *node ) const +bool HLBVH_SAH_Evaluator::operator()( const BVHBuildNode* node ) const { const float centroid = node->bounds.GetCenter( dim ); @@ -422,17 +420,15 @@ bool HLBVH_SAH_Evaluator::operator()( const BVHBuildNode *node ) const struct BucketInfo { int count; - CBBOX bounds; + BBOX_3D bounds; }; -BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primitiveInfo, - int start, - int end, - int *totalNodes, - CONST_VECTOR_OBJECT &orderedPrims ) +BVHBuildNode *BVH_PBRT::recursiveBuild ( std::vector& primitiveInfo, + int start, int end, int* totalNodes, + CONST_VECTOR_OBJECT& orderedPrims ) { - wxASSERT( totalNodes != NULL ); + wxASSERT( totalNodes != nullptr ); wxASSERT( start >= 0 ); wxASSERT( end >= 0 ); wxASSERT( start != end ); @@ -450,11 +446,11 @@ BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primiti node->firstPrimOffset = 0; node->nPrimitives = 0; node->splitAxis = 0; - node->children[0] = NULL; - node->children[1] = NULL; + node->children[0] = nullptr; + node->children[1] = nullptr; // Compute bounds of all primitives in BVH node - CBBOX bounds; + BBOX_3D bounds; bounds.Reset(); for( int i = start; i < end; ++i ) @@ -479,7 +475,7 @@ BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primiti else { // Compute bound of primitive centroids, choose split dimension _dim_ - CBBOX centroidBounds; + BBOX_3D centroidBounds; centroidBounds.Reset(); for( int i = start; i < end; ++i ) @@ -502,9 +498,9 @@ BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primiti wxASSERT( ( primitiveNr >= 0 ) && ( primitiveNr < (int) m_primitives.size() ) ); - const COBJECT *obj = static_cast( m_primitives[ primitiveNr ] ); + const OBJECT_3D* obj = static_cast( m_primitives[ primitiveNr ] ); - wxASSERT( obj != NULL ); + wxASSERT( obj != nullptr ); orderedPrims.push_back( obj ); } @@ -541,10 +537,8 @@ BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primiti // Partition primitives into equally-sized subsets mid = (start + end) / 2; - std::nth_element( &primitiveInfo[start], - &primitiveInfo[mid], - &primitiveInfo[end - 1] + 1, - ComparePoints( dim ) ); + std::nth_element( &primitiveInfo[start], &primitiveInfo[mid], + &primitiveInfo[end - 1] + 1, ComparePoints( dim ) ); break; } @@ -558,10 +552,8 @@ BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primiti // Partition primitives into equally-sized subsets mid = (start + end) / 2; - std::nth_element( &primitiveInfo[start], - &primitiveInfo[mid], - &primitiveInfo[end - 1] + 1, - ComparePoints( dim ) ); + std::nth_element( &primitiveInfo[start], &primitiveInfo[mid], + &primitiveInfo[end - 1] + 1, ComparePoints( dim ) ); } else { @@ -596,7 +588,7 @@ BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primiti for( int i = 0; i < ( nBuckets - 1 ); ++i ) { - CBBOX b0, b1; + BBOX_3D b0, b1; b0.Reset(); b1.Reset(); @@ -622,10 +614,8 @@ BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primiti } } - cost[i] = 1.0f + - ( count0 * b0.SurfaceArea() + - count1 * b1.SurfaceArea() ) / - bounds.SurfaceArea(); + cost[i] = 1.0f + ( count0 * b0.SurfaceArea() + + count1 * b1.SurfaceArea() ) / bounds.SurfaceArea(); } // Find bucket to split at that minimizes SAH metric @@ -645,12 +635,9 @@ BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primiti if( ( nPrimitives > m_maxPrimsInNode ) || ( minCost < (float) nPrimitives ) ) { BVHPrimitiveInfo *pmid = - std::partition( &primitiveInfo[start], - &primitiveInfo[end - 1] + 1, - CompareToBucket( minCostSplitBucket, - nBuckets, - dim, - centroidBounds ) ); + std::partition( &primitiveInfo[start], &primitiveInfo[end - 1] + 1, + CompareToBucket( minCostSplitBucket, nBuckets, + dim, centroidBounds ) ); mid = pmid - &primitiveInfo[0]; wxASSERT( ( mid >= start ) && ( mid <= end ) ); @@ -678,16 +665,9 @@ BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primiti } } - node->InitInterior( dim, - recursiveBuild( primitiveInfo, - start, - mid, - totalNodes, - orderedPrims ), - recursiveBuild( primitiveInfo, - mid, - end, - totalNodes, + node->InitInterior( dim, recursiveBuild( primitiveInfo, start, mid, totalNodes, + orderedPrims ), + recursiveBuild( primitiveInfo, mid, end, totalNodes, orderedPrims) ); } } @@ -696,12 +676,11 @@ BVHBuildNode *CBVH_PBRT::recursiveBuild ( std::vector &primiti } -BVHBuildNode *CBVH_PBRT::HLBVHBuild( const std::vector &primitiveInfo, - int *totalNodes, - CONST_VECTOR_OBJECT &orderedPrims ) +BVHBuildNode *BVH_PBRT::HLBVHBuild( const std::vector& primitiveInfo, + int* totalNodes, CONST_VECTOR_OBJECT& orderedPrims ) { // Compute bounding box of all primitive centroids - CBBOX bounds; + BBOX_3D bounds; bounds.Reset(); for( unsigned int i = 0; i < primitiveInfo.size(); ++i ) @@ -726,8 +705,7 @@ BVHBuildNode *CBVH_PBRT::HLBVHBuild( const std::vector &primit wxASSERT( ( centroidOffset.y >= 0.0f ) && ( centroidOffset.y <= 1.0f ) ); wxASSERT( ( centroidOffset.z >= 0.0f ) && ( centroidOffset.z <= 1.0f ) ); - mortonPrims[i].mortonCode = EncodeMorton3( centroidOffset * - SFVEC3F( (float)mortonScale ) ); + mortonPrims[i].mortonCode = EncodeMorton3( centroidOffset * SFVEC3F( (float)mortonScale ) ); } // Radix sort primitive Morton indices @@ -762,8 +740,8 @@ BVHBuildNode *CBVH_PBRT::HLBVHBuild( const std::vector &primit nodes[i].firstPrimOffset = 0; nodes[i].nPrimitives = 0; nodes[i].splitAxis = 0; - nodes[i].children[0] = NULL; - nodes[i].children[1] = NULL; + nodes[i].children[0] = nullptr; + nodes[i].children[1] = nullptr; } LBVHTreelet tmpTreelet; @@ -794,14 +772,9 @@ BVHBuildNode *CBVH_PBRT::HLBVHBuild( const std::vector &primit wxASSERT( tr.startIndex < (int)mortonPrims.size() ); - tr.buildNodes = emitLBVH( tr.buildNodes, - primitiveInfo, - &mortonPrims[tr.startIndex], - tr.numPrimitives, - &nodesCreated, - orderedPrims, - &orderedPrimsOffset, - firstBit ); + tr.buildNodes = emitLBVH( tr.buildNodes, primitiveInfo, &mortonPrims[tr.startIndex], + tr.numPrimitives, &nodesCreated, orderedPrims, + &orderedPrimsOffset, firstBit ); atomicTotal += nodesCreated; } @@ -816,24 +789,21 @@ BVHBuildNode *CBVH_PBRT::HLBVHBuild( const std::vector &primit finishedTreelets.push_back( treeletsToBuild[index].buildNodes ); // Create and return SAH BVH from LBVH treelets - return buildUpperSAH( finishedTreelets, - 0, - finishedTreelets.size(), - totalNodes ); + return buildUpperSAH( finishedTreelets, 0, finishedTreelets.size(), totalNodes ); } -BVHBuildNode *CBVH_PBRT::emitLBVH( BVHBuildNode *&buildNodes, - const std::vector &primitiveInfo, - MortonPrimitive *mortonPrims, int nPrimitives, int *totalNodes, - CONST_VECTOR_OBJECT &orderedPrims, - int *orderedPrimsOffset, int bit ) +BVHBuildNode *BVH_PBRT::emitLBVH( BVHBuildNode* &buildNodes, + const std::vector& primitiveInfo, + MortonPrimitive* mortonPrims, int nPrimitives, int* totalNodes, + CONST_VECTOR_OBJECT& orderedPrims, int *orderedPrimsOffset, + int bit ) { wxASSERT( nPrimitives > 0 ); - wxASSERT( totalNodes != NULL ); - wxASSERT( orderedPrimsOffset != NULL ); + wxASSERT( totalNodes != nullptr ); + wxASSERT( orderedPrimsOffset != nullptr ); wxASSERT( nPrimitives > 0 ); - wxASSERT( mortonPrims != NULL ); + wxASSERT( mortonPrims != nullptr ); if( ( bit == -1 ) || ( nPrimitives < m_maxPrimsInNode ) ) { @@ -841,7 +811,7 @@ BVHBuildNode *CBVH_PBRT::emitLBVH( BVHBuildNode *&buildNodes, (*totalNodes)++; BVHBuildNode *node = buildNodes++; - CBBOX bounds; + BBOX_3D bounds; bounds.Reset(); int firstPrimOffset = *orderedPrimsOffset; @@ -871,7 +841,7 @@ BVHBuildNode *CBVH_PBRT::emitLBVH( BVHBuildNode *&buildNodes, if( ( mortonPrims[0].mortonCode & mask ) == ( mortonPrims[nPrimitives - 1].mortonCode & mask ) ) return emitLBVH( buildNodes, primitiveInfo, mortonPrims, nPrimitives, totalNodes, - orderedPrims, orderedPrimsOffset, bit - 1 ); + orderedPrims, orderedPrimsOffset, bit - 1 ); // Find LBVH split point for this dimension int searchStart = 0; @@ -922,10 +892,10 @@ BVHBuildNode *CBVH_PBRT::emitLBVH( BVHBuildNode *&buildNodes, } -BVHBuildNode *CBVH_PBRT::buildUpperSAH( std::vector &treeletRoots, - int start, int end, int *totalNodes ) +BVHBuildNode *BVH_PBRT::buildUpperSAH( std::vector& treeletRoots, int start, + int end, int* totalNodes ) { - wxASSERT( totalNodes != NULL ); + wxASSERT( totalNodes != nullptr ); wxASSERT( start < end ); wxASSERT( end <= (int)treeletRoots.size() ); @@ -936,7 +906,7 @@ BVHBuildNode *CBVH_PBRT::buildUpperSAH( std::vector &treeletRoot (*totalNodes)++; - BVHBuildNode *node = static_cast( malloc( sizeof( BVHBuildNode ) ) ); + BVHBuildNode* node = static_cast( malloc( sizeof( BVHBuildNode ) ) ); m_addresses_pointer_to_mm_free.push_back( node ); @@ -944,27 +914,25 @@ BVHBuildNode *CBVH_PBRT::buildUpperSAH( std::vector &treeletRoot node->firstPrimOffset = 0; node->nPrimitives = 0; node->splitAxis = 0; - node->children[0] = NULL; - node->children[1] = NULL; + node->children[0] = nullptr; + node->children[1] = nullptr; // Compute bounds of all nodes under this HLBVH node - CBBOX bounds; + BBOX_3D bounds; bounds.Reset(); for( int i = start; i < end; ++i ) bounds.Union( treeletRoots[i]->bounds ); // Compute bound of HLBVH node centroids, choose split dimension _dim_ - CBBOX centroidBounds; + BBOX_3D centroidBounds; centroidBounds.Reset(); for( int i = start; i < end; ++i ) { - SFVEC3F centroid = - (treeletRoots[i]->bounds.Min() + treeletRoots[i]->bounds.Max()) * - 0.5f; + SFVEC3F centroid = ( treeletRoots[i]->bounds.Min() + treeletRoots[i]->bounds.Max() ) * 0.5f; - centroidBounds.Union(centroid); + centroidBounds.Union( centroid ); } const int dim = centroidBounds.MaxDimension(); @@ -988,10 +956,9 @@ BVHBuildNode *CBVH_PBRT::buildUpperSAH( std::vector &treeletRoot for( int i = start; i < end; ++i ) { const float centroid = ( treeletRoots[i]->bounds.Min()[dim] + - treeletRoots[i]->bounds.Max()[dim] ) * - 0.5f; - int b = nBuckets * ( (centroid - centroidBounds.Min()[dim] ) / - (centroidBounds.Max()[dim] - centroidBounds.Min()[dim] ) ); + treeletRoots[i]->bounds.Max()[dim] ) * 0.5f; + int b = nBuckets * ( ( centroid - centroidBounds.Min()[dim] ) + / ( centroidBounds.Max()[dim] - centroidBounds.Min()[dim] ) ); if( b == nBuckets ) b = nBuckets - 1; @@ -1007,7 +974,7 @@ BVHBuildNode *CBVH_PBRT::buildUpperSAH( std::vector &treeletRoot for( int i = 0; i < nBuckets - 1; ++i ) { - CBBOX b0, b1; + BBOX_3D b0, b1; b0.Reset(); b1.Reset(); @@ -1031,8 +998,7 @@ BVHBuildNode *CBVH_PBRT::buildUpperSAH( std::vector &treeletRoot } } - cost[i] = .125f + - ( count0 * b0.SurfaceArea() + count1 * b1.SurfaceArea() ) / + cost[i] = .125f + ( count0 * b0.SurfaceArea() + count1 * b1.SurfaceArea() ) / bounds.SurfaceArea(); } @@ -1050,16 +1016,13 @@ BVHBuildNode *CBVH_PBRT::buildUpperSAH( std::vector &treeletRoot } // Split nodes and create interior HLBVH SAH node - BVHBuildNode **pmid = std::partition( &treeletRoots[start], - &treeletRoots[end - 1] + 1, - HLBVH_SAH_Evaluator( minCostSplitBucket, - nBuckets, - dim, - centroidBounds ) ); + BVHBuildNode **pmid = std::partition( &treeletRoots[start], &treeletRoots[end - 1] + 1, + HLBVH_SAH_Evaluator( minCostSplitBucket, nBuckets, + dim, centroidBounds ) ); const int mid = pmid - &treeletRoots[0]; - wxASSERT( (mid > start) && (mid < end) ); + wxASSERT( ( mid > start ) && ( mid < end ) ); node->InitInterior( dim, buildUpperSAH( treeletRoots, start, mid, totalNodes ), @@ -1069,7 +1032,7 @@ BVHBuildNode *CBVH_PBRT::buildUpperSAH( std::vector &treeletRoot } -int CBVH_PBRT::flattenBVHTree( BVHBuildNode *node, uint32_t *offset ) +int BVH_PBRT::flattenBVHTree( BVHBuildNode* node, uint32_t* offset ) { LinearBVHNode *linearNode = &m_nodes[*offset]; @@ -1079,7 +1042,7 @@ int CBVH_PBRT::flattenBVHTree( BVHBuildNode *node, uint32_t *offset ) if( node->nPrimitives > 0 ) { - wxASSERT( (!node->children[0]) && (!node->children[1]) ); + wxASSERT( ( !node->children[0] ) && ( !node->children[1] ) ); wxASSERT( node->nPrimitives < 65536 ); linearNode->primitivesOffset = node->firstPrimOffset; @@ -1101,7 +1064,7 @@ int CBVH_PBRT::flattenBVHTree( BVHBuildNode *node, uint32_t *offset ) #define MAX_TODOS 64 -bool CBVH_PBRT::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const +bool BVH_PBRT::Intersect( const RAY& aRay, HITINFO& aHitInfo ) const { if( !m_nodes ) return false; @@ -1123,7 +1086,7 @@ bool CBVH_PBRT::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const const bool hitted = node->bounds.Intersect( aRay, &hitBox ); - if( hitted && (hitBox < aHitInfo.m_tHit) ) + if( hitted && ( hitBox < aHitInfo.m_tHit ) ) { if( node->nPrimitives > 0 ) { @@ -1166,7 +1129,7 @@ bool CBVH_PBRT::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const /// @todo This may be optimized -bool CBVH_PBRT::Intersect( const RAY& aRay, HITINFO& aHitInfo, unsigned int aAccNodeInfo ) const +bool BVH_PBRT::Intersect( const RAY& aRay, HITINFO& aHitInfo, unsigned int aAccNodeInfo ) const { if( !m_nodes ) return false; @@ -1230,7 +1193,7 @@ bool CBVH_PBRT::Intersect( const RAY& aRay, HITINFO& aHitInfo, unsigned int aAcc } -bool CBVH_PBRT::IntersectP( const RAY &aRay, float aMaxDistance ) const +bool BVH_PBRT::IntersectP( const RAY& aRay, float aMaxDistance ) const { if( !m_nodes ) return false; @@ -1241,7 +1204,7 @@ bool CBVH_PBRT::IntersectP( const RAY &aRay, float aMaxDistance ) const while( true ) { - const LinearBVHNode *node = &m_nodes[nodeNum]; + const LinearBVHNode* node = &m_nodes[nodeNum]; wxASSERT( todoOffset < MAX_TODOS ); @@ -1257,7 +1220,7 @@ bool CBVH_PBRT::IntersectP( const RAY &aRay, float aMaxDistance ) const // Intersect ray with primitives in leaf BVH node for( int i = 0; i < node->nPrimitives; ++i ) { - const COBJECT *obj = m_primitives[node->primitivesOffset + i]; + const OBJECT_3D* obj = m_primitives[node->primitivesOffset + i]; if( obj->GetMaterial()->GetCastShadows() && obj->IntersectP( aRay, aMaxDistance ) ) diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_pbrt.h b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_pbrt.h index bcfd6136cb..41b132a3d8 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_pbrt.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/cbvh_pbrt.h @@ -67,8 +67,8 @@ */ -#ifndef _CBVH_PBRT_H_ -#define _CBVH_PBRT_H_ +#ifndef _BVH_PBRT_H_ +#define _BVH_PBRT_H_ #include "caccelerator.h" #include @@ -82,7 +82,7 @@ struct MortonPrimitive; struct LinearBVHNode { // 24 bytes - CBBOX bounds; + BBOX_3D bounds; // 4 bytes union @@ -107,59 +107,47 @@ enum class SPLITMETHOD }; -class CBVH_PBRT : public CGENERICACCELERATOR +class BVH_PBRT : public ACCELERATOR_3D { public: - CBVH_PBRT( const CGENERICCONTAINER& aObjectContainer, int aMaxPrimsInNode = 4, - SPLITMETHOD aSplitMethod = SPLITMETHOD::SAH ); + BVH_PBRT( const CONTAINER_3D_BASE& aObjectContainer, int aMaxPrimsInNode = 4, + SPLITMETHOD aSplitMethod = SPLITMETHOD::SAH ); - ~CBVH_PBRT(); + ~BVH_PBRT(); - // Imported from CGENERICACCELERATOR - bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const override; - bool Intersect( const RAY &aRay, HITINFO &aHitInfo, unsigned int aAccNodeInfo ) const override; - bool Intersect( const RAYPACKET &aRayPacket, HITINFO_PACKET *aHitInfoPacket ) const override; - bool IntersectP( const RAY &aRay, float aMaxDistance ) const override; + bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const override; + bool Intersect( const RAY& aRay, HITINFO& aHitInfo, unsigned int aAccNodeInfo ) const override; + bool Intersect( const RAYPACKET& aRayPacket, HITINFO_PACKET* aHitInfoPacket ) const override; + bool IntersectP( const RAY& aRay, float aMaxDistance ) const override; private: + BVHBuildNode* recursiveBuild( std::vector& primitiveInfo, int start, + int end, int* totalNodes, CONST_VECTOR_OBJECT& orderedPrims ); - BVHBuildNode *recursiveBuild( std::vector &primitiveInfo, - int start, - int end, - int *totalNodes, - CONST_VECTOR_OBJECT &orderedPrims ); - - BVHBuildNode *HLBVHBuild( const std::vector &primitiveInfo, - int *totalNodes, - CONST_VECTOR_OBJECT &orderedPrims ); + BVHBuildNode* HLBVHBuild( const std::vector& primitiveInfo, + int* totalNodes, CONST_VECTOR_OBJECT& orderedPrims ); //!TODO: after implement memory arena, put const back to this functions - BVHBuildNode *emitLBVH( BVHBuildNode *&buildNodes, - const std::vector &primitiveInfo, - MortonPrimitive *mortonPrims, - int nPrimitives, - int *totalNodes, - CONST_VECTOR_OBJECT &orderedPrims, - int *orderedPrimsOffset, - int bit ); + BVHBuildNode* emitLBVH( BVHBuildNode* &buildNodes, + const std::vector& primitiveInfo, + MortonPrimitive* mortonPrims, int nPrimitives, int* totalNodes, + CONST_VECTOR_OBJECT& orderedPrims, int* orderedPrimsOffset, int bit ); - BVHBuildNode *buildUpperSAH( std::vector &treeletRoots, - int start, - int end, - int *totalNodes ); + BVHBuildNode* buildUpperSAH( std::vector& treeletRoots, int start, int end, + int* totalNodes ); - int flattenBVHTree( BVHBuildNode *node, uint32_t *offset ); + int flattenBVHTree( BVHBuildNode* node, uint32_t* offset ); // BVH Private Data const int m_maxPrimsInNode; SPLITMETHOD m_splitMethod; CONST_VECTOR_OBJECT m_primitives; - LinearBVHNode *m_nodes; + LinearBVHNode* m_nodes; - std::list m_addresses_pointer_to_mm_free; + std::list m_addresses_pointer_to_mm_free; // Partition traversal unsigned int m_I[RAYPACKET_RAYS_PER_PACKET]; }; -#endif // _CBVH_PBRT_H_ +#endif // _BVH_PBRT_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.cpp index e901032035..b665825f1c 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.cpp @@ -30,21 +30,21 @@ #include "ccontainer.h" #include -CGENERICCONTAINER::CGENERICCONTAINER() +CONTAINER_3D_BASE::CONTAINER_3D_BASE() { m_objects.clear(); m_bbox.Reset(); } -void CGENERICCONTAINER::Clear() +void CONTAINER_3D_BASE::Clear() { if( !m_objects.empty() ) { for( LIST_OBJECT::iterator ii = m_objects.begin(); ii != m_objects.end(); ++ii ) { delete *ii; - *ii = NULL; + *ii = nullptr; } m_objects.clear(); @@ -54,13 +54,13 @@ void CGENERICCONTAINER::Clear() } -CGENERICCONTAINER::~CGENERICCONTAINER() +CONTAINER_3D_BASE::~CONTAINER_3D_BASE() { Clear(); } -void CGENERICCONTAINER::ConvertTo( CONST_VECTOR_OBJECT &aOutVector ) const +void CONTAINER_3D_BASE::ConvertTo( CONST_VECTOR_OBJECT &aOutVector ) const { aOutVector.resize( m_objects.size() ); @@ -70,15 +70,15 @@ void CGENERICCONTAINER::ConvertTo( CONST_VECTOR_OBJECT &aOutVector ) const for( LIST_OBJECT::const_iterator ii = m_objects.begin(); ii != m_objects.end(); ++ii ) { - wxASSERT( (*ii) != NULL ); + wxASSERT( (*ii) != nullptr ); - aOutVector[i++] = static_cast(*ii); + aOutVector[i++] = static_cast(*ii); } } } -bool CCONTAINER::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const +bool CONTAINER_3D::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const { if( !m_bbox.Intersect( aRay ) ) @@ -88,7 +88,7 @@ bool CCONTAINER::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const for( LIST_OBJECT::const_iterator ii = m_objects.begin(); ii != m_objects.end(); ++ii ) { - const COBJECT *object = static_cast( *ii ); + const OBJECT_3D *object = static_cast( *ii ); if( object->Intersect( aRay, aHitInfo) ) hitted = true; @@ -98,17 +98,11 @@ bool CCONTAINER::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const } -bool CCONTAINER::IntersectP( const RAY &aRay, float aMaxDistance ) const +bool CONTAINER_3D::IntersectP( const RAY &aRay, float aMaxDistance ) const { - /// @todo Determine what to do with this commented out code. -/* - if( !m_bbox.Inside( aRay.m_Origin ) ) - if( !m_bbox.Intersect( aRay ) ) - return false; -*/ for( LIST_OBJECT::const_iterator ii = m_objects.begin(); ii != m_objects.end(); ++ii ) { - const COBJECT *object = static_cast(*ii); + const OBJECT_3D *object = static_cast( *ii ); if( object->IntersectP( aRay, aMaxDistance ) ) return true; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.h b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.h index f672662477..da46cd4154 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer.h @@ -27,26 +27,26 @@ * @brief */ -#ifndef _CCONTAINER_H_ -#define _CCONTAINER_H_ +#ifndef _CONTAINER_3D_H_ +#define _CONTAINER_3D_H_ #include "../shapes3D/cobject.h" #include #include -typedef std::list LIST_OBJECT; -typedef std::vector VECTOR_OBJECT; -typedef std::vector CONST_VECTOR_OBJECT; +typedef std::list LIST_OBJECT; +typedef std::vector VECTOR_OBJECT; +typedef std::vector CONST_VECTOR_OBJECT; -class CGENERICCONTAINER +class CONTAINER_3D_BASE { public: - CGENERICCONTAINER(); + CONTAINER_3D_BASE(); - virtual ~CGENERICCONTAINER(); + virtual ~CONTAINER_3D_BASE(); - void Add( COBJECT *aObject ) + void Add( OBJECT_3D *aObject ) { if( aObject ) { @@ -57,26 +57,26 @@ public: void Clear(); - const LIST_OBJECT &GetList() const { return m_objects; } + const LIST_OBJECT& GetList() const { return m_objects; } - void ConvertTo( CONST_VECTOR_OBJECT &aOutVector ) const; + void ConvertTo( CONST_VECTOR_OBJECT& aOutVector ) const; - const CBBOX &GetBBox() const { return m_bbox; } + const BBOX_3D& GetBBox() const { return m_bbox; } - virtual bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const = 0; - virtual bool IntersectP( const RAY &aRay, float aMaxDistance ) const = 0; + virtual bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const = 0; + virtual bool IntersectP( const RAY& aRay, float aMaxDistance ) const = 0; protected: - CBBOX m_bbox; + BBOX_3D m_bbox; LIST_OBJECT m_objects; }; -class CCONTAINER : public CGENERICCONTAINER +class CONTAINER_3D : public CONTAINER_3D_BASE { public: - bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const override; - bool IntersectP( const RAY &aRay, float aMaxDistance ) const override; + bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const override; + bool IntersectP( const RAY& aRay, float aMaxDistance ) const override; }; -#endif // _CCONTAINER_H_ +#endif // _CONTAINER_3D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.cpp index 6abdf4c07a..ea22f3692c 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.cpp @@ -35,20 +35,18 @@ #include -CGENERICCONTAINER2D::CGENERICCONTAINER2D( OBJECT2D_TYPE aObjType ) +CONTAINER_2D_BASE::CONTAINER_2D_BASE( OBJECT_2D_TYPE aObjType ) { m_bbox.Reset(); } -void CGENERICCONTAINER2D::Clear() +void CONTAINER_2D_BASE::Clear() { std::lock_guard lock( m_lock ); m_bbox.Reset(); - for( LIST_OBJECT2D::iterator ii = m_objects.begin(); - ii != m_objects.end(); - ++ii ) + for( LIST_OBJECT2D::iterator ii = m_objects.begin(); ii != m_objects.end(); ++ii ) { delete *ii; } @@ -57,196 +55,51 @@ void CGENERICCONTAINER2D::Clear() } -CGENERICCONTAINER2D::~CGENERICCONTAINER2D() +CONTAINER_2D_BASE::~CONTAINER_2D_BASE() { Clear(); } -CCONTAINER2D::CCONTAINER2D() : CGENERICCONTAINER2D( OBJECT2D_TYPE::CONTAINER ) +CONTAINER_2D::CONTAINER_2D() : CONTAINER_2D_BASE( OBJECT_2D_TYPE::CONTAINER ) { } -/// @todo Determine what to do with this commented out code. -/* - -bool CCONTAINER2D::Intersects( const CBBOX2D &aBBox ) const -{ - return false; -} - - -bool CCONTAINER2D::Overlaps( const CBBOX2D &aBBox ) const -{ - // NOT IMPLEMENTED - return false; -} - - -bool CCONTAINER2D::Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const -{ - if( !m_bbox.Intersect( aSegRay ) ) - return false; - - bool hitted = false; - - for( LIST_OBJECT2D::const_iterator ii = m_objects.begin(); - ii != m_objects.end(); - ii++ ) - { - const COBJECT2D *object = static_cast(*ii); - - float t; - SFVEC2F hitNormal; - if( object->Intersect( aSegRay, &t, &hitNormal ) ) - if( (hitted == false) || (t < *aOutT ) ) - { - hitted = true; - *aOutT = t; - *aNormalOut = hitNormal; - } - } - - return hitted; -} - - -INTERSECTION_RESULT CCONTAINER2D::IsBBoxInside( const CBBOX2D &aBBox ) const -{ - return INTERSECTION_RESULT::MISSES; -} - - -bool CCONTAINER2D::IsPointInside( const SFVEC2F &aPoint ) const -{ - if( !m_bbox.Inside( aPoint ) ) - return false; - - for( LIST_OBJECT2D::const_iterator ii = m_objects.begin(); - ii != m_objects.end(); - ii++ ) - { - const COBJECT2D *object = static_cast(*ii); - - if( object->IsPointInside( aPoint ) ) - return true; - } - - return false; -} - -*/ - -void CCONTAINER2D::GetListObjectsIntersects( const CBBOX2D & aBBox, - CONST_LIST_OBJECT2D &aOutList ) const +void CONTAINER_2D::GetListObjectsIntersects( const BBOX_2D& aBBox, + CONST_LIST_OBJECT2D& aOutList ) const { /// @todo Determine what to do with this code. } -bool CCONTAINER2D::IntersectAny( const RAYSEG2D &aSegRay ) const +bool CONTAINER_2D::IntersectAny( const RAYSEG2D& aSegRay ) const { /// @todo Determine what what needs done because someone wrote TODO here. return false; } -CBVHCONTAINER2D::CBVHCONTAINER2D() : CGENERICCONTAINER2D( OBJECT2D_TYPE::BVHCONTAINER ) +BVH_CONTAINER_2D::BVH_CONTAINER_2D() : CONTAINER_2D_BASE( OBJECT_2D_TYPE::BVHCONTAINER ) { m_isInitialized = false; m_bbox.Reset(); m_elements_to_delete.clear(); - m_Tree = NULL; + m_Tree = nullptr; } -/// @todo Determine what to do with this commented out code. -/* -bool CBVHCONTAINER2D::Intersects( const CBBOX2D &aBBox ) const +void BVH_CONTAINER_2D::Clear() { - // !TODO: implement the BVH - return m_bbox.Intersects( aBBox ); -} - - -bool CBVHCONTAINER2D::Overlaps( const CBBOX2D &aBBox ) const -{ - // NOT IMPLEMENTED - return false; -} - - -bool CBVHCONTAINER2D::Intersect( const RAYSEG2D &aSegRay, - float *aOutT, SFVEC2F *aNormalOut ) const -{ - // !TODO: implement the BVH - - if( !m_bbox.Intersect( aSegRay ) ) - return false; - - bool hitted = false; - - for( LIST_OBJECT2D::const_iterator ii = m_objects.begin(); - ii != m_objects.end(); - ii++ ) - { - const COBJECT2D *object = static_cast(*ii); - - float t; - SFVEC2F hitNormal; - if( object->Intersect( aSegRay, &t, &hitNormal ) ) - if( (hitted == false) || (t < *aOutT ) ) - { - hitted = true; - *aOutT = t; - *aNormalOut = hitNormal; - } - } - - return hitted; -} - - -INTERSECTION_RESULT CBVHCONTAINER2D::IsBBoxInside( const CBBOX2D &aBBox ) const -{ - return INTR_MISSES; -} - - -bool CBVHCONTAINER2D::IsPointInside( const SFVEC2F &aPoint ) const -{ - // !TODO: implement the BVH - - if( !m_bbox.Inside( aPoint ) ) - return false; - - for( LIST_OBJECT2D::const_iterator ii = m_objects.begin(); - ii != m_objects.end(); - ii++ ) - { - const COBJECT2D *object = static_cast(*ii); - - if( object->IsPointInside( aPoint ) ) - return true; - } - - return false; -} -*/ - - -void CBVHCONTAINER2D::Clear() -{ - CGENERICCONTAINER2D::Clear(); + CONTAINER_2D_BASE::Clear(); destroy(); } -void CBVHCONTAINER2D::destroy() +void BVH_CONTAINER_2D::destroy() { - for( std::list::iterator ii = m_elements_to_delete.begin(); + for( std::list::iterator ii = m_elements_to_delete.begin(); ii != m_elements_to_delete.end(); ++ii ) { @@ -259,7 +112,7 @@ void CBVHCONTAINER2D::destroy() } -CBVHCONTAINER2D::~CBVHCONTAINER2D() +BVH_CONTAINER_2D::~BVH_CONTAINER_2D() { destroy(); } @@ -268,7 +121,7 @@ CBVHCONTAINER2D::~CBVHCONTAINER2D() #define BVH_CONTAINER2D_MAX_OBJ_PER_LEAF 4 -void CBVHCONTAINER2D::BuildBVH() +void BVH_CONTAINER_2D::BuildBVH() { if( m_isInitialized ) destroy(); @@ -287,7 +140,7 @@ void CBVHCONTAINER2D::BuildBVH() for( LIST_OBJECT2D::const_iterator ii = m_objects.begin(); ii != m_objects.end(); ++ii ) { - m_Tree->m_LeafList.push_back( static_cast( *ii ) ); + m_Tree->m_LeafList.push_back( static_cast( *ii ) ); } recursiveBuild_MIDDLE_SPLIT( m_Tree ); @@ -301,35 +154,35 @@ void CBVHCONTAINER2D::BuildBVH() // "Split in the middle of the longest Axis" // "Creates a binary tree with Top-Down approach. // Fastest BVH building, but least [speed] accuracy." -static bool sortByCentroid_X( const COBJECT2D *a, const COBJECT2D *b ) +static bool sortByCentroid_X( const OBJECT_2D* a, const OBJECT_2D* b ) { return a->GetCentroid()[0] < b->GetCentroid()[0]; } -static bool sortByCentroid_Y( const COBJECT2D *a, const COBJECT2D *b ) +static bool sortByCentroid_Y( const OBJECT_2D* a, const OBJECT_2D* b ) { return a->GetCentroid()[0] < b->GetCentroid()[0]; } -static bool sortByCentroid_Z( const COBJECT2D *a, const COBJECT2D *b ) +static bool sortByCentroid_Z( const OBJECT_2D* a, const OBJECT_2D* b ) { return a->GetCentroid()[0] < b->GetCentroid()[0]; } -void CBVHCONTAINER2D::recursiveBuild_MIDDLE_SPLIT( BVH_CONTAINER_NODE_2D *aNodeParent ) +void BVH_CONTAINER_2D::recursiveBuild_MIDDLE_SPLIT( BVH_CONTAINER_NODE_2D* aNodeParent ) { - wxASSERT( aNodeParent != NULL ); + wxASSERT( aNodeParent != nullptr ); wxASSERT( aNodeParent->m_BBox.IsInitialized() == true ); wxASSERT( aNodeParent->m_LeafList.size() > 0 ); if( aNodeParent->m_LeafList.size() > BVH_CONTAINER2D_MAX_OBJ_PER_LEAF ) { // Create Leaf Nodes - BVH_CONTAINER_NODE_2D *leftNode = new BVH_CONTAINER_NODE_2D; - BVH_CONTAINER_NODE_2D *rightNode = new BVH_CONTAINER_NODE_2D; + BVH_CONTAINER_NODE_2D* leftNode = new BVH_CONTAINER_NODE_2D; + BVH_CONTAINER_NODE_2D* rightNode = new BVH_CONTAINER_NODE_2D; m_elements_to_delete.push_back( leftNode ); m_elements_to_delete.push_back( rightNode ); @@ -355,7 +208,7 @@ void CBVHCONTAINER2D::recursiveBuild_MIDDLE_SPLIT( BVH_CONTAINER_NODE_2D *aNodeP ii != aNodeParent->m_LeafList.end(); ++ii ) { - const COBJECT2D *object = static_cast(*ii); + const OBJECT_2D* object = static_cast( *ii ); if( i < (aNodeParent->m_LeafList.size() / 2 ) ) { @@ -388,16 +241,16 @@ void CBVHCONTAINER2D::recursiveBuild_MIDDLE_SPLIT( BVH_CONTAINER_NODE_2D *aNodeP else { // It is a Leaf - aNodeParent->m_Children[0] = NULL; - aNodeParent->m_Children[1] = NULL; + aNodeParent->m_Children[0] = nullptr; + aNodeParent->m_Children[1] = nullptr; } - wxASSERT( aNodeParent != NULL ); + wxASSERT( aNodeParent != nullptr ); wxASSERT( aNodeParent->m_BBox.IsInitialized() == true ); } -bool CBVHCONTAINER2D::IntersectAny( const RAYSEG2D &aSegRay ) const +bool BVH_CONTAINER_2D::IntersectAny( const RAYSEG2D& aSegRay ) const { wxASSERT( m_isInitialized == true ); @@ -408,22 +261,21 @@ bool CBVHCONTAINER2D::IntersectAny( const RAYSEG2D &aSegRay ) const } -bool CBVHCONTAINER2D::recursiveIntersectAny( const BVH_CONTAINER_NODE_2D *aNode, - const RAYSEG2D &aSegRay ) const +bool BVH_CONTAINER_2D::recursiveIntersectAny( const BVH_CONTAINER_NODE_2D* aNode, + const RAYSEG2D& aSegRay ) const { - wxASSERT( aNode != NULL ); + wxASSERT( aNode != nullptr ); - if( aNode->m_BBox.Inside( aSegRay.m_Start ) || - aNode->m_BBox.Inside( aSegRay.m_End ) || + if( aNode->m_BBox.Inside( aSegRay.m_Start ) || aNode->m_BBox.Inside( aSegRay.m_End ) || aNode->m_BBox.Intersect( aSegRay ) ) { if( !aNode->m_LeafList.empty() ) { - wxASSERT( aNode->m_Children[0] == NULL ); - wxASSERT( aNode->m_Children[1] == NULL ); + wxASSERT( aNode->m_Children[0] == nullptr ); + wxASSERT( aNode->m_Children[1] == nullptr ); // Leaf - for( const COBJECT2D *obj : aNode->m_LeafList ) + for( const OBJECT_2D* obj : aNode->m_LeafList ) { if( obj->IsPointInside( aSegRay.m_Start ) || obj->IsPointInside( aSegRay.m_End ) || @@ -433,8 +285,8 @@ bool CBVHCONTAINER2D::recursiveIntersectAny( const BVH_CONTAINER_NODE_2D *aNode, } else { - wxASSERT( aNode->m_Children[0] != NULL ); - wxASSERT( aNode->m_Children[1] != NULL ); + wxASSERT( aNode->m_Children[0] != nullptr ); + wxASSERT( aNode->m_Children[1] != nullptr ); // Node if( recursiveIntersectAny( aNode->m_Children[0], aSegRay ) ) @@ -448,8 +300,8 @@ bool CBVHCONTAINER2D::recursiveIntersectAny( const BVH_CONTAINER_NODE_2D *aNode, } -void CBVHCONTAINER2D::GetListObjectsIntersects( const CBBOX2D &aBBox, - CONST_LIST_OBJECT2D &aOutList ) const +void BVH_CONTAINER_2D::GetListObjectsIntersects( const BBOX_2D& aBBox, + CONST_LIST_OBJECT2D& aOutList ) const { wxASSERT( aBBox.IsInitialized() == true ); wxASSERT( m_isInitialized == true ); @@ -461,26 +313,26 @@ void CBVHCONTAINER2D::GetListObjectsIntersects( const CBBOX2D &aBBox, } -void CBVHCONTAINER2D::recursiveGetListObjectsIntersects( const BVH_CONTAINER_NODE_2D *aNode, - const CBBOX2D & aBBox, - CONST_LIST_OBJECT2D &aOutList ) const +void BVH_CONTAINER_2D::recursiveGetListObjectsIntersects( const BVH_CONTAINER_NODE_2D* aNode, + const BBOX_2D& aBBox, + CONST_LIST_OBJECT2D& aOutList ) const { - wxASSERT( aNode != NULL ); + wxASSERT( aNode != nullptr ); wxASSERT( aBBox.IsInitialized() == true ); if( aNode->m_BBox.Intersects( aBBox ) ) { if( !aNode->m_LeafList.empty() ) { - wxASSERT( aNode->m_Children[0] == NULL ); - wxASSERT( aNode->m_Children[1] == NULL ); + wxASSERT( aNode->m_Children[0] == nullptr ); + wxASSERT( aNode->m_Children[1] == nullptr ); // Leaf for( CONST_LIST_OBJECT2D::const_iterator ii = aNode->m_LeafList.begin(); ii != aNode->m_LeafList.end(); ++ii ) { - const COBJECT2D *obj = static_cast(*ii); + const OBJECT_2D* obj = static_cast( *ii ); if( obj->Intersects( aBBox ) ) aOutList.push_back( obj ); @@ -488,8 +340,8 @@ void CBVHCONTAINER2D::recursiveGetListObjectsIntersects( const BVH_CONTAINER_NOD } else { - wxASSERT( aNode->m_Children[0] != NULL ); - wxASSERT( aNode->m_Children[1] != NULL ); + wxASSERT( aNode->m_Children[0] != nullptr ); + wxASSERT( aNode->m_Children[1] != nullptr ); // Node recursiveGetListObjectsIntersects( aNode->m_Children[0], aBBox, aOutList ); diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h index b4ed43ed26..1a35c536b7 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h @@ -27,25 +27,25 @@ * @brief */ -#ifndef _CCONTAINER2D_H_ -#define _CCONTAINER2D_H_ +#ifndef _CONTAINER_2D_H_ +#define _CONTAINER_2D_H_ #include "../shapes2D/cobject2d.h" #include #include -typedef std::list LIST_OBJECT2D; -typedef std::list CONST_LIST_OBJECT2D; +typedef std::list LIST_OBJECT2D; +typedef std::list CONST_LIST_OBJECT2D; -class CGENERICCONTAINER2D +class CONTAINER_2D_BASE { public: - explicit CGENERICCONTAINER2D( OBJECT2D_TYPE aObjType ); + explicit CONTAINER_2D_BASE( OBJECT_2D_TYPE aObjType ); - virtual ~CGENERICCONTAINER2D(); + virtual ~CONTAINER_2D_BASE(); - void Add( COBJECT2D *aObject ) + void Add( OBJECT_2D* aObject ) { if( aObject ) { @@ -55,14 +55,14 @@ public: } } - const CBBOX2D &GetBBox() const + const BBOX_2D& GetBBox() const { return m_bbox; } virtual void Clear(); - const LIST_OBJECT2D &GetList() const { return m_objects; } + const LIST_OBJECT2D& GetList() const { return m_objects; } /** * Get a list of objects that intersects a bounding box. @@ -70,8 +70,8 @@ public: * @param aBBox The bounding box to test. * @param aOutList The list of objects that intersects the bounding box. */ - virtual void GetListObjectsIntersects( const CBBOX2D & aBBox, - CONST_LIST_OBJECT2D &aOutList ) const = 0; + virtual void GetListObjectsIntersects( const BBOX_2D& aBBox, + CONST_LIST_OBJECT2D& aOutList ) const = 0; /** * Intersect and check if a segment ray hits a object or is inside it. @@ -79,10 +79,10 @@ public: * @param aSegRay The segment to intersect with objects. * @return true if it hits any of the objects or is inside any object. */ - virtual bool IntersectAny( const RAYSEG2D &aSegRay ) const = 0; + virtual bool IntersectAny( const RAYSEG2D& aSegRay ) const = 0; protected: - CBBOX2D m_bbox; + BBOX_2D m_bbox; LIST_OBJECT2D m_objects; private: @@ -90,58 +90,56 @@ private: }; -class CCONTAINER2D : public CGENERICCONTAINER2D +class CONTAINER_2D : public CONTAINER_2D_BASE { public: - CCONTAINER2D(); + CONTAINER_2D(); - // Imported from CGENERICCONTAINER2D - void GetListObjectsIntersects( const CBBOX2D & aBBox, - CONST_LIST_OBJECT2D &aOutList ) const override; + void GetListObjectsIntersects( const BBOX_2D& aBBox, + CONST_LIST_OBJECT2D& aOutList ) const override; - bool IntersectAny( const RAYSEG2D &aSegRay ) const override; + bool IntersectAny( const RAYSEG2D& aSegRay ) const override; }; struct BVH_CONTAINER_NODE_2D { - CBBOX2D m_BBox; - BVH_CONTAINER_NODE_2D *m_Children[2]; + BBOX_2D m_BBox; + BVH_CONTAINER_NODE_2D* m_Children[2]; /// Store the list of objects if that node is a Leaf CONST_LIST_OBJECT2D m_LeafList; }; -class CBVHCONTAINER2D : public CGENERICCONTAINER2D +class BVH_CONTAINER_2D : public CONTAINER_2D_BASE { public: - CBVHCONTAINER2D(); - ~CBVHCONTAINER2D(); + BVH_CONTAINER_2D(); + ~BVH_CONTAINER_2D(); void BuildBVH(); void Clear() override; - // Imported from CGENERICCONTAINER2D - void GetListObjectsIntersects( const CBBOX2D & aBBox, - CONST_LIST_OBJECT2D &aOutList ) const override; + void GetListObjectsIntersects( const BBOX_2D& aBBox, + CONST_LIST_OBJECT2D& aOutList ) const override; - bool IntersectAny( const RAYSEG2D &aSegRay ) const override; + bool IntersectAny( const RAYSEG2D& aSegRay ) const override; private: void destroy(); - void recursiveBuild_MIDDLE_SPLIT( BVH_CONTAINER_NODE_2D *aNodeParent ); - void recursiveGetListObjectsIntersects( const BVH_CONTAINER_NODE_2D *aNode, - const CBBOX2D & aBBox, - CONST_LIST_OBJECT2D &aOutList ) const; - bool recursiveIntersectAny( const BVH_CONTAINER_NODE_2D *aNode, - const RAYSEG2D &aSegRay ) const; + void recursiveBuild_MIDDLE_SPLIT( BVH_CONTAINER_NODE_2D* aNodeParent ); + void recursiveGetListObjectsIntersects( const BVH_CONTAINER_NODE_2D* aNode, + const BBOX_2D& aBBox, + CONST_LIST_OBJECT2D& aOutList ) const; + bool recursiveIntersectAny( const BVH_CONTAINER_NODE_2D* aNode, + const RAYSEG2D& aSegRay ) const; bool m_isInitialized; - std::list m_elements_to_delete; + std::list m_elements_to_delete; BVH_CONTAINER_NODE_2D* m_Tree; }; -#endif // _CCONTAINER2D_H_ +#endif // _CONTAINER_2D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_createscene.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_createscene.cpp index 70f138c7e0..a4e6774336 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_createscene.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_createscene.cpp @@ -73,86 +73,70 @@ static float TransparencyControl( float aGrayColorValue, float aTransparency ) #define UNITS3D_TO_UNITSPCB ( IU_PER_MM ) -void C3D_RENDER_RAYTRACING::setupMaterials() +void RENDER_3D_RAYTRACE::setupMaterials() { - CMATERIAL::SetDefaultNrRefractionsSamples( m_boardAdapter.m_raytrace_nrsamples_refractions ); - CMATERIAL::SetDefaultNrReflectionsSamples( m_boardAdapter.m_raytrace_nrsamples_reflections ); + MATERIAL::SetDefaultNrRefractionsSamples( m_boardAdapter.m_raytrace_nrsamples_refractions ); + MATERIAL::SetDefaultNrReflectionsSamples( m_boardAdapter.m_raytrace_nrsamples_reflections ); - CMATERIAL::SetDefaultRefractionsLevel( m_boardAdapter.m_raytrace_recursivelevel_refractions ); - CMATERIAL::SetDefaultReflectionsLevel( m_boardAdapter.m_raytrace_recursivelevel_reflections ); + MATERIAL::SetDefaultRefractionsLevel( m_boardAdapter.m_raytrace_recursivelevel_refractions ); + MATERIAL::SetDefaultReflectionsLevel( m_boardAdapter.m_raytrace_recursivelevel_reflections ); double mmTo3Dunits = IU_PER_MM * m_boardAdapter.BiuTo3Dunits(); if( m_boardAdapter.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES ) ) { - m_board_normal_perturbator = CBOARDNORMAL( 0.40f * mmTo3Dunits ); + m_board_normal_perturbator = BOARD_NORMAL( 0.40f * mmTo3Dunits ); m_copper_normal_perturbator = - CCOPPERNORMAL( 4.0f * mmTo3Dunits, &m_board_normal_perturbator ); + COPPER_NORMAL( 4.0f * mmTo3Dunits, &m_board_normal_perturbator ); - m_platedcopper_normal_perturbator = CPLATEDCOPPERNORMAL( 0.5f * mmTo3Dunits ); + m_platedcopper_normal_perturbator = PLATED_COPPER_NORMAL( 0.5f * mmTo3Dunits ); - m_solder_mask_normal_perturbator = CSOLDERMASKNORMAL( &m_board_normal_perturbator ); + m_solder_mask_normal_perturbator = SOLDER_MASK_NORMAL( &m_board_normal_perturbator ); - m_plastic_normal_perturbator = CPLASTICNORMAL( 0.05f * mmTo3Dunits ); + m_plastic_normal_perturbator = PLASTIC_NORMAL( 0.05f * mmTo3Dunits ); - m_plastic_shine_normal_perturbator = CPLASTICSHINENORMAL( 0.1f * mmTo3Dunits ); + m_plastic_shine_normal_perturbator = PLASTIC_SHINE_NORMAL( 0.1f * mmTo3Dunits ); - m_brushed_metal_normal_perturbator = CMETALBRUSHEDNORMAL( 0.05f * mmTo3Dunits ); + m_brushed_metal_normal_perturbator = BRUSHED_METAL_NORMAL( 0.05f * mmTo3Dunits ); - m_silkscreen_normal_perturbator = CSILKSCREENNORMAL( 0.25f * mmTo3Dunits ); + m_silkscreen_normal_perturbator = SILK_SCREEN_NORMAL( 0.25f * mmTo3Dunits ); } // http://devernay.free.fr/cours/opengl/materials.html - // Copper const SFVEC3F copperSpecularLinear = ConvertSRGBToLinear( glm::clamp( (SFVEC3F) m_boardAdapter.m_CopperColor * 0.5f + 0.25f, SFVEC3F( 0.0f ), SFVEC3F( 1.0f ) ) ); - m_materials.m_Copper = CBLINN_PHONG_MATERIAL( - ConvertSRGBToLinear( (SFVEC3F) m_boardAdapter.m_CopperColor * 0.3f ), // ambient - SFVEC3F( 0.0f ), // emissive - copperSpecularLinear, // specular - 0.4f * 128.0f, // shiness - 0.0f, // transparency - 0.0f ); + m_materials.m_Copper = BLINN_PHONG_MATERIAL( + ConvertSRGBToLinear( (SFVEC3F) m_boardAdapter.m_CopperColor * 0.3f ), + SFVEC3F( 0.0f ), copperSpecularLinear, 0.4f * 128.0f, 0.0f, 0.0f ); if( m_boardAdapter.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES ) ) m_materials.m_Copper.SetNormalPerturbator( &m_platedcopper_normal_perturbator ); - m_materials.m_NonPlatedCopper = CBLINN_PHONG_MATERIAL( - ConvertSRGBToLinear( SFVEC3F( 0.191f, 0.073f, 0.022f ) ), // ambient - SFVEC3F( 0.0f, 0.0f, 0.0f ), // emissive - SFVEC3F( 0.256f, 0.137f, 0.086f ), // specular - 0.15f * 128.0f, // shiness - 0.0f, // transparency - 0.0f ); + m_materials.m_NonPlatedCopper = BLINN_PHONG_MATERIAL( + ConvertSRGBToLinear( SFVEC3F( 0.191f, 0.073f, 0.022f ) ), SFVEC3F( 0.0f, 0.0f, 0.0f ), + SFVEC3F( 0.256f, 0.137f, 0.086f ), 0.15f * 128.0f, 0.0f, 0.0f ); if( m_boardAdapter.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES ) ) m_materials.m_NonPlatedCopper.SetNormalPerturbator( &m_copper_normal_perturbator ); - m_materials.m_Paste = CBLINN_PHONG_MATERIAL( + m_materials.m_Paste = BLINN_PHONG_MATERIAL( ConvertSRGBToLinear( (SFVEC3F) m_boardAdapter.m_SolderPasteColor ) - * ConvertSRGBToLinear( (SFVEC3F) m_boardAdapter.m_SolderPasteColor ), // ambient - SFVEC3F( 0.0f, 0.0f, 0.0f ), // emissive + * ConvertSRGBToLinear( (SFVEC3F) m_boardAdapter.m_SolderPasteColor ), + SFVEC3F( 0.0f, 0.0f, 0.0f ), ConvertSRGBToLinear( (SFVEC3F) m_boardAdapter.m_SolderPasteColor ) * ConvertSRGBToLinear( - (SFVEC3F) m_boardAdapter.m_SolderPasteColor ), // specular - 0.10f * 128.0f, // shiness - 0.0f, // transparency - 0.0f ); + (SFVEC3F) m_boardAdapter.m_SolderPasteColor ), + 0.10f * 128.0f, 0.0f, 0.0f ); - m_materials.m_SilkS = CBLINN_PHONG_MATERIAL( ConvertSRGBToLinear( SFVEC3F( 0.11f ) ), // ambient - SFVEC3F( 0.0f, 0.0f, 0.0f ), // emissive - glm::clamp( ( ( SFVEC3F )( 1.0f ) - - ConvertSRGBToLinear( - (SFVEC3F) m_boardAdapter.m_SilkScreenColorTop ) ), - SFVEC3F( 0.0f ), - SFVEC3F( 0.10f ) ), // specular - 0.078125f * 128.0f, // shiness - 0.0f, // transparency - 0.0f ); + m_materials.m_SilkS = BLINN_PHONG_MATERIAL( ConvertSRGBToLinear( SFVEC3F( 0.11f ) ), + SFVEC3F( 0.0f, 0.0f, 0.0f ), + glm::clamp( ( ( SFVEC3F )( 1.0f ) - ConvertSRGBToLinear( + (SFVEC3F) m_boardAdapter.m_SilkScreenColorTop ) ), + SFVEC3F( 0.0f ), SFVEC3F( 0.10f ) ), 0.078125f * 128.0f, 0.0f, 0.0f ); if( m_boardAdapter.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES ) ) m_materials.m_SilkS.SetNormalPerturbator( &m_silkscreen_normal_perturbator ); @@ -164,15 +148,13 @@ void C3D_RENDER_RAYTRACING::setupMaterials() / 3.0f; const float solderMask_transparency = TransparencyControl( solderMask_gray, - 1.0f - m_boardAdapter.m_SolderMaskColorTop.a ); // opacity to transparency + 1.0f - m_boardAdapter.m_SolderMaskColorTop.a ); - m_materials.m_SolderMask = CBLINN_PHONG_MATERIAL( - ConvertSRGBToLinear( (SFVEC3F) m_boardAdapter.m_SolderMaskColorTop ) * 0.10f, // ambient - SFVEC3F( 0.0f, 0.0f, 0.0f ), // emissive - SFVEC3F( glm::clamp( solderMask_gray * 2.0f, 0.25f, 1.0f ) ), // specular - 0.85f * 128.0f, // shiness - solderMask_transparency, // transparency - 0.16f ); // reflection + m_materials.m_SolderMask = BLINN_PHONG_MATERIAL( + ConvertSRGBToLinear( (SFVEC3F) m_boardAdapter.m_SolderMaskColorTop ) * 0.10f, + SFVEC3F( 0.0f, 0.0f, 0.0f ), + SFVEC3F( glm::clamp( solderMask_gray * 2.0f, 0.25f, 1.0f ) ), 0.85f * 128.0f, + solderMask_transparency, 0.16f ); m_materials.m_SolderMask.SetCastShadows( true ); m_materials.m_SolderMask.SetNrRefractionsSamples( 1 ); @@ -181,14 +163,12 @@ void C3D_RENDER_RAYTRACING::setupMaterials() m_materials.m_SolderMask.SetNormalPerturbator( &m_solder_mask_normal_perturbator ); m_materials.m_EpoxyBoard = - CBLINN_PHONG_MATERIAL( ConvertSRGBToLinear( SFVEC3F( 16.0f / 255.0f, 14.0f / 255.0f, - 10.0f / 255.0f ) ), // ambient - SFVEC3F( 0.0f, 0.0f, 0.0f ), // emissive - ConvertSRGBToLinear( SFVEC3F( 10.0f / 255.0f, 8.0f / 255.0f, - 10.0f / 255.0f ) ), // specular - 0.1f * 128.0f, // shiness - 1.0f - m_boardAdapter.m_BoardBodyColor.a, // opacity to transparency - 0.0f ); // reflection + BLINN_PHONG_MATERIAL( ConvertSRGBToLinear( SFVEC3F( 16.0f / 255.0f, 14.0f / 255.0f, + 10.0f / 255.0f ) ), + SFVEC3F( 0.0f, 0.0f, 0.0f ), + ConvertSRGBToLinear( SFVEC3F( 10.0f / 255.0f, 8.0f / 255.0f, + 10.0f / 255.0f ) ), + 0.1f * 128.0f, 1.0f - m_boardAdapter.m_BoardBodyColor.a, 0.0f ); m_materials.m_EpoxyBoard.SetAbsorvance( 10.0f ); @@ -196,45 +176,41 @@ void C3D_RENDER_RAYTRACING::setupMaterials() m_materials.m_EpoxyBoard.SetNormalPerturbator( &m_board_normal_perturbator ); SFVEC3F bgTop = ConvertSRGBToLinear( (SFVEC3F) m_boardAdapter.m_BgColorTop ); - //SFVEC3F bgBot = (SFVEC3F)m_boardAdapter.m_BgColorBot; - m_materials.m_Floor = CBLINN_PHONG_MATERIAL( bgTop * 0.125f, // ambient - SFVEC3F( 0.0f, 0.0f, 0.0f ), // emissive - ( SFVEC3F( 1.0f ) - bgTop ) / 3.0f, // specular - 0.10f * 128.0f, // shiness - 0.0f, // transparency - 0.50f ); // reflection + m_materials.m_Floor = BLINN_PHONG_MATERIAL( bgTop * 0.125f, SFVEC3F( 0.0f, 0.0f, 0.0f ), + ( SFVEC3F( 1.0f ) - bgTop ) / 3.0f, + 0.10f * 128.0f, 0.0f, 0.50f ); m_materials.m_Floor.SetCastShadows( false ); m_materials.m_Floor.SetReflectionsRecursiveLevel( 1 ); } -void C3D_RENDER_RAYTRACING::create_3d_object_from( CCONTAINER& aDstContainer, - const COBJECT2D* aObject2D, float aZMin, float aZMax, const CMATERIAL* aMaterial, +void RENDER_3D_RAYTRACE::create_3d_object_from( CONTAINER_3D& aDstContainer, + const OBJECT_2D* aObject2D, float aZMin, float aZMax, const MATERIAL* aMaterial, const SFVEC3F& aObjColor ) { switch( aObject2D->GetObjectType() ) { - case OBJECT2D_TYPE::DUMMYBLOCK: + case OBJECT_2D_TYPE::DUMMYBLOCK: { m_stats_converted_dummy_to_plane++; #if 1 - CXYPLANE* objPtr; - objPtr = new CXYPLANE( CBBOX( + XY_PLANE* objPtr; + objPtr = new XY_PLANE( BBOX_3D( SFVEC3F( aObject2D->GetBBox().Min().x, aObject2D->GetBBox().Min().y, aZMin ), SFVEC3F( aObject2D->GetBBox().Max().x, aObject2D->GetBBox().Max().y, aZMin ) ) ); objPtr->SetMaterial( aMaterial ); objPtr->SetColor( ConvertSRGBToLinear( aObjColor ) ); aDstContainer.Add( objPtr ); - objPtr = new CXYPLANE( CBBOX( + objPtr = new XY_PLANE( BBOX_3D( SFVEC3F( aObject2D->GetBBox().Min().x, aObject2D->GetBBox().Min().y, aZMax ), SFVEC3F( aObject2D->GetBBox().Max().x, aObject2D->GetBBox().Max().y, aZMax ) ) ); objPtr->SetMaterial( aMaterial ); objPtr->SetColor( ConvertSRGBToLinear( aObjColor ) ); aDstContainer.Add( objPtr ); #else - objPtr = new CDUMMYBLOCK( CBBOX( + objPtr = new DUMMY_BLOCK( BBOX_3D( SFVEC3F( aObject2D->GetBBox().Min().x, aObject2D->GetBBox().Min().y, aZMin ), SFVEC3F( aObject2D->GetBBox().Max().x, aObject2D->GetBBox().Max().y, aZMax ) ) ); objPtr->SetMaterial( aMaterial ); @@ -243,12 +219,12 @@ void C3D_RENDER_RAYTRACING::create_3d_object_from( CCONTAINER& aDstContainer, } break; - case OBJECT2D_TYPE::ROUNDSEG: + case OBJECT_2D_TYPE::ROUNDSEG: { m_stats_converted_roundsegment2d_to_roundsegment++; - const CROUNDSEGMENT2D* aRoundSeg2D = static_cast( aObject2D ); - CROUNDSEG* objPtr = new CROUNDSEG( *aRoundSeg2D, aZMin, aZMax ); + const ROUND_SEGMENT_2D* aRoundSeg2D = static_cast( aObject2D ); + ROUND_SEGMENT* objPtr = new ROUND_SEGMENT( *aRoundSeg2D, aZMin, aZMax ); objPtr->SetMaterial( aMaterial ); objPtr->SetColor( ConvertSRGBToLinear( aObjColor ) ); aDstContainer.Add( objPtr ); @@ -258,7 +234,7 @@ void C3D_RENDER_RAYTRACING::create_3d_object_from( CCONTAINER& aDstContainer, default: { - CLAYERITEM* objPtr = new CLAYERITEM( aObject2D, aZMin, aZMax ); + LAYER_ITEM* objPtr = new LAYER_ITEM( aObject2D, aZMin, aZMax ); objPtr->SetMaterial( aMaterial ); objPtr->SetColor( ConvertSRGBToLinear( aObjColor ) ); aDstContainer.Add( objPtr ); @@ -267,8 +243,9 @@ void C3D_RENDER_RAYTRACING::create_3d_object_from( CCONTAINER& aDstContainer, } } -void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D* aContainer2d, - PCB_LAYER_ID aLayer_id, const CMATERIAL* aMaterialLayer, const SFVEC3F& aLayerColor, + +void RENDER_3D_RAYTRACE::createItemsFromContainer( const BVH_CONTAINER_2D* aContainer2d, + PCB_LAYER_ID aLayer_id, const MATERIAL* aMaterialLayer, const SFVEC3F& aLayerColor, float aLayerZOffset ) { if( aContainer2d == nullptr ) @@ -282,15 +259,15 @@ void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D* aCo for( LIST_OBJECT2D::const_iterator itemOnLayer = listObject2d.begin(); itemOnLayer != listObject2d.end(); ++itemOnLayer ) { - const COBJECT2D* object2d_A = static_cast( *itemOnLayer ); + const OBJECT_2D* object2d_A = static_cast( *itemOnLayer ); // not yet used / implemented (can be used in future to clip the objects in the // board borders - COBJECT2D* object2d_C = CSGITEM_FULL; + OBJECT_2D* object2d_C = CSGITEM_FULL; - std::vector* object2d_B = CSGITEM_EMPTY; + std::vector* object2d_B = CSGITEM_EMPTY; - object2d_B = new std::vector(); + object2d_B = new std::vector(); // Subtract holes but not in SolderPaste // (can be added as an option in future) @@ -298,26 +275,25 @@ void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D* aCo { // Check if there are any layerhole that intersects this object // Eg: a segment is cut by a via hole or THT hole. - // ///////////////////////////////////////////////////////////// - const MAP_CONTAINER_2D& layerHolesMap = m_boardAdapter.GetMapLayersHoles(); + const MAP_CONTAINER_2D_BASE& layerHolesMap = m_boardAdapter.GetMapLayersHoles(); if( layerHolesMap.find( aLayer_id ) != layerHolesMap.end() ) { - MAP_CONTAINER_2D::const_iterator ii_hole = layerHolesMap.find( aLayer_id ); + MAP_CONTAINER_2D_BASE::const_iterator ii_hole = layerHolesMap.find( aLayer_id ); - const CBVHCONTAINER2D* containerLayerHoles2d = - static_cast( ii_hole->second ); + const BVH_CONTAINER_2D* containerLayerHoles2d = + static_cast( ii_hole->second ); CONST_LIST_OBJECT2D intersectionList; - containerLayerHoles2d->GetListObjectsIntersects( - object2d_A->GetBBox(), intersectionList ); + containerLayerHoles2d->GetListObjectsIntersects( object2d_A->GetBBox(), + intersectionList ); if( !intersectionList.empty() ) { for( CONST_LIST_OBJECT2D::const_iterator holeOnLayer = intersectionList.begin(); - holeOnLayer != intersectionList.end(); ++holeOnLayer ) + holeOnLayer != intersectionList.end(); ++holeOnLayer ) { - const COBJECT2D* hole2d = static_cast( *holeOnLayer ); + const OBJECT_2D* hole2d = static_cast( *holeOnLayer ); //if( object2d_A->Intersects( hole2d->GetBBox() ) ) //if( object2d_A->GetBBox().Intersects( hole2d->GetBBox() ) ) @@ -327,12 +303,10 @@ void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D* aCo } // Check if there are any THT that intersects this object - // ///////////////////////////////////////////////////////////// - // If we're processing a silk screen layer and the flag is set, then // clip the silk screening at the outer edge of the annular ring, rather // than the at the outer edge of the copper plating. - const CBVHCONTAINER2D& throughHoleOuter = + const BVH_CONTAINER_2D& throughHoleOuter = ( m_boardAdapter.GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) && ( ( aLayer_id == B_SilkS ) || ( aLayer_id == F_SilkS ) ) ) ? @@ -343,15 +317,15 @@ void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D* aCo { CONST_LIST_OBJECT2D intersectionList; - throughHoleOuter.GetListObjectsIntersects( - object2d_A->GetBBox(), intersectionList ); + throughHoleOuter.GetListObjectsIntersects( object2d_A->GetBBox(), + intersectionList ); if( !intersectionList.empty() ) { for( CONST_LIST_OBJECT2D::const_iterator hole = intersectionList.begin(); - hole != intersectionList.end(); ++hole ) + hole != intersectionList.end(); ++hole ) { - const COBJECT2D* hole2d = static_cast( *hole ); + const OBJECT_2D* hole2d = static_cast( *hole ); //if( object2d_A->Intersects( hole2d->GetBBox() ) ) //if( object2d_A->GetBBox().Intersects( hole2d->GetBBox() ) ) @@ -365,43 +339,43 @@ void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D* aCo { CONST_LIST_OBJECT2D intersectionList; - m_antioutlineBoard2dObjects->GetListObjectsIntersects( - object2d_A->GetBBox(), intersectionList ); + m_antioutlineBoard2dObjects->GetListObjectsIntersects( object2d_A->GetBBox(), + intersectionList ); if( !intersectionList.empty() ) { - for( const COBJECT2D* obj : intersectionList ) + for( const OBJECT_2D* obj : intersectionList ) { object2d_B->push_back( obj ); } } } - const MAP_CONTAINER_2D& mapLayers = m_boardAdapter.GetMapLayers(); + const MAP_CONTAINER_2D_BASE& mapLayers = m_boardAdapter.GetMapLayers(); if( m_boardAdapter.GetFlag( FL_SUBTRACT_MASK_FROM_SILK ) - && m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) - && ( ( ( aLayer_id == B_SilkS ) && ( mapLayers.find( B_Mask ) != mapLayers.end() ) ) - || ( ( aLayer_id == F_SilkS ) - && ( mapLayers.find( F_Mask ) != mapLayers.end() ) ) ) ) + && m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) + && ( ( ( aLayer_id == B_SilkS ) && ( mapLayers.find( B_Mask ) != mapLayers.end() ) ) + || ( ( aLayer_id == F_SilkS ) + && ( mapLayers.find( F_Mask ) != mapLayers.end() ) ) ) ) { const PCB_LAYER_ID layerMask_id = ( aLayer_id == B_SilkS ) ? B_Mask : F_Mask; - const CBVHCONTAINER2D* containerMaskLayer2d = - static_cast( mapLayers.at( layerMask_id ) ); + const BVH_CONTAINER_2D* containerMaskLayer2d = + static_cast( mapLayers.at( layerMask_id ) ); CONST_LIST_OBJECT2D intersectionList; if( containerMaskLayer2d ) // can be null if B_Mask or F_Mask is not shown - containerMaskLayer2d->GetListObjectsIntersects( - object2d_A->GetBBox(), intersectionList ); + containerMaskLayer2d->GetListObjectsIntersects( object2d_A->GetBBox(), + intersectionList ); if( !intersectionList.empty() ) { for( CONST_LIST_OBJECT2D::const_iterator objOnLayer = intersectionList.begin(); - objOnLayer != intersectionList.end(); ++objOnLayer ) + objOnLayer != intersectionList.end(); ++objOnLayer ) { - const COBJECT2D* obj2d = static_cast( *objOnLayer ); + const OBJECT_2D* obj2d = static_cast( *objOnLayer ); object2d_B->push_back( obj2d ); } @@ -416,7 +390,7 @@ void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D* aCo if( ( object2d_B == CSGITEM_EMPTY ) && ( object2d_C == CSGITEM_FULL ) ) { - CLAYERITEM* objPtr = new CLAYERITEM( object2d_A, + LAYER_ITEM* objPtr = new LAYER_ITEM( object2d_A, m_boardAdapter.GetLayerBottomZpos3DU( aLayer_id ) - aLayerZOffset, m_boardAdapter.GetLayerTopZpos3DU( aLayer_id ) + aLayerZOffset ); objPtr->SetMaterial( aMaterialLayer ); @@ -425,11 +399,11 @@ void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D* aCo } else { - CITEMLAYERCSG2D* itemCSG2d = new CITEMLAYERCSG2D( - object2d_A, object2d_B, object2d_C, object2d_A->GetBoardItem() ); + LAYER_ITEM_2D* itemCSG2d = new LAYER_ITEM_2D( object2d_A, object2d_B, object2d_C, + object2d_A->GetBoardItem() ); m_containerWithObjectsToDelete.Add( itemCSG2d ); - CLAYERITEM* objPtr = new CLAYERITEM( itemCSG2d, + LAYER_ITEM* objPtr = new LAYER_ITEM( itemCSG2d, m_boardAdapter.GetLayerBottomZpos3DU( aLayer_id ) - aLayerZOffset, m_boardAdapter.GetLayerTopZpos3DU( aLayer_id ) + aLayerZOffset ); @@ -445,15 +419,15 @@ void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D* aCo extern void buildBoardBoundingBoxPoly( const BOARD* aBoard, SHAPE_POLY_SET& aOutline ); -void C3D_RENDER_RAYTRACING::Reload( - REPORTER* aStatusReporter, REPORTER* aWarningReporter, bool aOnlyLoadCopperAndShapes ) +void RENDER_3D_RAYTRACE::Reload( REPORTER* aStatusReporter, REPORTER* aWarningReporter, + bool aOnlyLoadCopperAndShapes ) { m_reloadRequested = false; m_model_materials.clear(); - COBJECT2D_STATS::Instance().ResetStats(); - COBJECT3D_STATS::Instance().ResetStats(); + OBJECT_2D_STATS::Instance().ResetStats(); + OBJECT_3D_STATS::Instance().ResetStats(); unsigned stats_startReloadTime = GetRunningMicroSecs(); @@ -474,13 +448,11 @@ void C3D_RENDER_RAYTRACING::Reload( aStatusReporter->Report( _( "Load Raytracing: board" ) ); // Create and add the outline board - // ///////////////////////////////////////////////////////////////////////// - delete m_outlineBoard2dObjects; delete m_antioutlineBoard2dObjects; - m_outlineBoard2dObjects = new CCONTAINER2D; - m_antioutlineBoard2dObjects = new CBVHCONTAINER2D; + m_outlineBoard2dObjects = new CONTAINER_2D; + m_antioutlineBoard2dObjects = new BVH_CONTAINER_2D; if( !aOnlyLoadCopperAndShapes ) { @@ -498,7 +470,6 @@ void C3D_RENDER_RAYTRACING::Reload( SHAPE_POLY_SET boardPolyCopy = m_boardAdapter.GetBoardPoly(); // Calculate an antiboard outline - SHAPE_POLY_SET antiboardPoly; buildBoardBoundingBoxPoly( m_boardAdapter.GetBoard(), antiboardPoly ); @@ -532,12 +503,12 @@ void C3D_RENDER_RAYTRACING::Reload( const LIST_OBJECT2D& listObjects = m_outlineBoard2dObjects->GetList(); for( LIST_OBJECT2D::const_iterator object2d_iterator = listObjects.begin(); - object2d_iterator != listObjects.end(); ++object2d_iterator ) + object2d_iterator != listObjects.end(); ++object2d_iterator ) { - const COBJECT2D* object2d_A = - static_cast( *object2d_iterator ); + const OBJECT_2D* object2d_A = + static_cast( *object2d_iterator ); - std::vector* object2d_B = new std::vector(); + std::vector* object2d_B = new std::vector(); // Check if there are any THT that intersects this outline object part if( !m_boardAdapter.GetThroughHole_Outer().GetList().empty() ) @@ -550,9 +521,9 @@ void C3D_RENDER_RAYTRACING::Reload( { for( CONST_LIST_OBJECT2D::const_iterator hole = intersectionList.begin(); - hole != intersectionList.end(); ++hole ) + hole != intersectionList.end(); ++hole ) { - const COBJECT2D* hole2d = static_cast( *hole ); + const OBJECT_2D* hole2d = static_cast( *hole ); if( object2d_A->Intersects( hole2d->GetBBox() ) ) //if( object2d_A->GetBBox().Intersects( hole2d->GetBBox() ) ) @@ -570,7 +541,7 @@ void C3D_RENDER_RAYTRACING::Reload( if( !intersectionList.empty() ) { - for( const COBJECT2D* obj : intersectionList ) + for( const OBJECT_2D* obj : intersectionList ) { object2d_B->push_back( obj ); } @@ -585,7 +556,7 @@ void C3D_RENDER_RAYTRACING::Reload( if( object2d_B == CSGITEM_EMPTY ) { - CLAYERITEM* objPtr = new CLAYERITEM( object2d_A, + LAYER_ITEM* objPtr = new LAYER_ITEM( object2d_A, m_boardAdapter.GetLayerBottomZpos3DU( F_Cu ), m_boardAdapter.GetLayerBottomZpos3DU( B_Cu ) ); @@ -597,12 +568,13 @@ void C3D_RENDER_RAYTRACING::Reload( else { - CITEMLAYERCSG2D* itemCSG2d = new CITEMLAYERCSG2D( object2d_A, object2d_B, - CSGITEM_FULL, (const BOARD_ITEM&) *m_boardAdapter.GetBoard() ); + LAYER_ITEM_2D* itemCSG2d = + new LAYER_ITEM_2D( object2d_A, object2d_B, CSGITEM_FULL, + (const BOARD_ITEM&) *m_boardAdapter.GetBoard() ); m_containerWithObjectsToDelete.Add( itemCSG2d ); - CLAYERITEM* objPtr = new CLAYERITEM( itemCSG2d, + LAYER_ITEM* objPtr = new LAYER_ITEM( itemCSG2d, m_boardAdapter.GetLayerBottomZpos3DU( F_Cu ), m_boardAdapter.GetLayerBottomZpos3DU( B_Cu ) ); @@ -619,15 +591,14 @@ void C3D_RENDER_RAYTRACING::Reload( // a polygon or dummy block) it will cut also the render of the hole. // So this will add a full hole. // In fact, that is not need if the hole have copper. - // ///////////////////////////////////////////////////////////////////////// if( !m_boardAdapter.GetThroughHole_Outer().GetList().empty() ) { const LIST_OBJECT2D& holeList = m_boardAdapter.GetThroughHole_Outer().GetList(); for( LIST_OBJECT2D::const_iterator hole = holeList.begin(); - hole != holeList.end(); ++hole ) + hole != holeList.end(); ++hole ) { - const COBJECT2D* hole2d = static_cast( *hole ); + const OBJECT_2D* hole2d = static_cast( *hole ); if( !m_antioutlineBoard2dObjects->GetList().empty() ) { @@ -646,11 +617,11 @@ void C3D_RENDER_RAYTRACING::Reload( switch( hole2d->GetObjectType() ) { - case OBJECT2D_TYPE::FILLED_CIRCLE: + case OBJECT_2D_TYPE::FILLED_CIRCLE: { const float radius = hole2d->GetBBox().GetExtent().x * 0.5f * 0.999f; - CVCYLINDER* objPtr = new CVCYLINDER( hole2d->GetCentroid(), + CYLINDER* objPtr = new CYLINDER( hole2d->GetCentroid(), NextFloatDown( m_boardAdapter.GetLayerBottomZpos3DU( F_Cu ) ), NextFloatUp( m_boardAdapter.GetLayerBottomZpos3DU( B_Cu ) ), radius ); @@ -676,10 +647,8 @@ void C3D_RENDER_RAYTRACING::Reload( aStatusReporter->Report( _( "Load Raytracing: layers" ) ); // Add layers maps (except B_Mask and F_Mask) - // ///////////////////////////////////////////////////////////////////////// - - for( MAP_CONTAINER_2D::const_iterator ii = m_boardAdapter.GetMapLayers().begin(); - ii != m_boardAdapter.GetMapLayers().end(); ++ii ) + for( MAP_CONTAINER_2D_BASE::const_iterator ii = m_boardAdapter.GetMapLayers().begin(); + ii != m_boardAdapter.GetMapLayers().end(); ++ii ) { PCB_LAYER_ID layer_id = static_cast( ii->first ); @@ -690,7 +659,7 @@ void C3D_RENDER_RAYTRACING::Reload( if( ( layer_id == B_Mask ) || ( layer_id == F_Mask ) ) continue; - CMATERIAL* materialLayer = &m_materials.m_SilkS; + MATERIAL* materialLayer = &m_materials.m_SilkS; SFVEC3F layerColor = SFVEC3F( 0.0f, 0.0f, 0.0f ); switch( layer_id ) @@ -757,7 +726,7 @@ void C3D_RENDER_RAYTRACING::Reload( break; } - const CBVHCONTAINER2D* container2d = static_cast( ii->second ); + const BVH_CONTAINER_2D* container2d = static_cast( ii->second ); createItemsFromContainer( container2d, layer_id, materialLayer, layerColor, 0.0f ); } // for each layer on map @@ -780,25 +749,25 @@ void C3D_RENDER_RAYTRACING::Reload( // (in the container) should remove the board outline. // We will check for all objects in the outline if it intersects any object // in the layer container and also any hole. - // ///////////////////////////////////////////////////////////////////////// if( m_boardAdapter.GetFlag( FL_SOLDERMASK ) && ( m_outlineBoard2dObjects->GetList().size() >= 1 ) ) { - const CMATERIAL* materialLayer = &m_materials.m_SolderMask; + const MATERIAL* materialLayer = &m_materials.m_SolderMask; - for( MAP_CONTAINER_2D::const_iterator ii = m_boardAdapter.GetMapLayers().begin(); - ii != m_boardAdapter.GetMapLayers().end(); ++ii ) + for( MAP_CONTAINER_2D_BASE::const_iterator ii = m_boardAdapter.GetMapLayers().begin(); + ii != m_boardAdapter.GetMapLayers().end(); ++ii ) { PCB_LAYER_ID layer_id = static_cast( ii->first ); - const CBVHCONTAINER2D* containerLayer2d = - static_cast( ii->second ); + const BVH_CONTAINER_2D* containerLayer2d = + static_cast( ii->second ); // Only get the Solder mask layers if( !( layer_id == B_Mask || layer_id == F_Mask ) ) continue; SFVEC3F layerColor; + if( m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) ) { if( layer_id == B_Mask ) @@ -807,7 +776,9 @@ void C3D_RENDER_RAYTRACING::Reload( layerColor = m_boardAdapter.m_SolderMaskColorTop; } else + { layerColor = m_boardAdapter.GetLayerColor( layer_id ); + } const float zLayerMin = m_boardAdapter.GetLayerBottomZpos3DU( layer_id ); const float zLayerMax = m_boardAdapter.GetLayerTopZpos3DU( layer_id ); @@ -818,10 +789,10 @@ void C3D_RENDER_RAYTRACING::Reload( for( LIST_OBJECT2D::const_iterator object2d_iterator = listObjects.begin(); object2d_iterator != listObjects.end(); ++object2d_iterator ) { - const COBJECT2D* object2d_A = - static_cast( *object2d_iterator ); + const OBJECT_2D* object2d_A = + static_cast( *object2d_iterator ); - std::vector* object2d_B = new std::vector(); + std::vector* object2d_B = new std::vector(); // Check if there are any THT that intersects this outline object part if( !m_boardAdapter.GetThroughHole_Outer().GetList().empty() ) @@ -836,12 +807,11 @@ void C3D_RENDER_RAYTRACING::Reload( { for( CONST_LIST_OBJECT2D::const_iterator hole = intersectionList.begin(); - hole != intersectionList.end(); ++hole ) + hole != intersectionList.end(); ++hole ) { - const COBJECT2D* hole2d = static_cast( *hole ); + const OBJECT_2D* hole2d = static_cast( *hole ); if( object2d_A->Intersects( hole2d->GetBBox() ) ) - //if( object2d_A->GetBBox().Intersects( hole2d->GetBBox() ) ) object2d_B->push_back( hole2d ); } } @@ -861,10 +831,8 @@ void C3D_RENDER_RAYTRACING::Reload( for( CONST_LIST_OBJECT2D::const_iterator obj = intersectionList.begin(); obj != intersectionList.end(); ++obj ) { - const COBJECT2D* obj2d = static_cast( *obj ); + const OBJECT_2D* obj2d = static_cast( *obj ); - //if( object2d_A->Intersects( obj2d->GetBBox() ) ) - //if( object2d_A->GetBBox().Intersects( obj2d->GetBBox() ) ) object2d_B->push_back( obj2d ); } } @@ -879,14 +847,10 @@ void C3D_RENDER_RAYTRACING::Reload( if( object2d_B == CSGITEM_EMPTY ) { #if 0 - create_3d_object_from( m_object_container, - object2d_A, - zLayerMin, - zLayerMax, - materialLayer, - layerColor ); + create_3d_object_from( m_object_container, object2d_A, zLayerMin, + zLayerMax, materialLayer, layerColor ); #else - CLAYERITEM* objPtr = new CLAYERITEM( object2d_A, zLayerMin, zLayerMax ); + LAYER_ITEM* objPtr = new LAYER_ITEM( object2d_A, zLayerMin, zLayerMax ); objPtr->SetMaterial( materialLayer ); objPtr->SetColor( ConvertSRGBToLinear( layerColor ) ); @@ -896,12 +860,13 @@ void C3D_RENDER_RAYTRACING::Reload( } else { - CITEMLAYERCSG2D* itemCSG2d = new CITEMLAYERCSG2D( - object2d_A, object2d_B, CSGITEM_FULL, object2d_A->GetBoardItem() ); + LAYER_ITEM_2D* itemCSG2d = + new LAYER_ITEM_2D( object2d_A, object2d_B, CSGITEM_FULL, + object2d_A->GetBoardItem() ); m_containerWithObjectsToDelete.Add( itemCSG2d ); - CLAYERITEM* objPtr = new CLAYERITEM( itemCSG2d, zLayerMin, zLayerMax ); + LAYER_ITEM* objPtr = new LAYER_ITEM( itemCSG2d, zLayerMin, zLayerMax ); objPtr->SetMaterial( materialLayer ); objPtr->SetColor( ConvertSRGBToLinear( layerColor ) ); @@ -931,10 +896,9 @@ void C3D_RENDER_RAYTRACING::Reload( if( !aOnlyLoadCopperAndShapes ) { // Add floor - // ///////////////////////////////////////////////////////////////////////// if( m_boardAdapter.GetFlag( FL_RENDER_RAYTRACING_BACKFLOOR ) ) { - CBBOX boardBBox = m_boardAdapter.GetBBox3DU(); + BBOX_3D boardBBox = m_boardAdapter.GetBBox3DU(); if( boardBBox.IsInitialized() ) { @@ -942,7 +906,7 @@ void C3D_RENDER_RAYTRACING::Reload( if( m_object_container.GetList().size() > 0 ) { - CBBOX containerBBox = m_object_container.GetBBox(); + BBOX_3D containerBBox = m_object_container.GetBBox(); containerBBox.Scale( 1.3f ); @@ -965,14 +929,14 @@ void C3D_RENDER_RAYTRACING::Reload( SFVEC3F backgroundColor = ConvertSRGBToLinear( static_cast( m_boardAdapter.m_BgColorTop ) ); - CTRIANGLE* newTriangle1 = new CTRIANGLE( v1, v2, v3 ); - CTRIANGLE* newTriangle2 = new CTRIANGLE( v3, v4, v1 ); + TRIANGLE* newTriangle1 = new TRIANGLE( v1, v2, v3 ); + TRIANGLE* newTriangle2 = new TRIANGLE( v3, v4, v1 ); m_object_container.Add( newTriangle1 ); m_object_container.Add( newTriangle2 ); - newTriangle1->SetMaterial( (const CMATERIAL*) &m_materials.m_Floor ); - newTriangle2->SetMaterial( (const CMATERIAL*) &m_materials.m_Floor ); + newTriangle1->SetMaterial( (const MATERIAL*) &m_materials.m_Floor ); + newTriangle2->SetMaterial( (const MATERIAL*) &m_materials.m_Floor ); newTriangle1->SetColor( backgroundColor ); newTriangle2->SetColor( backgroundColor ); @@ -985,14 +949,14 @@ void C3D_RENDER_RAYTRACING::Reload( const SFVEC3F v7 = SFVEC3F( v3.x, v3.y, maxZ ); const SFVEC3F v8 = SFVEC3F( v4.x, v4.y, maxZ ); - CTRIANGLE* newTriangle3 = new CTRIANGLE( v7, v6, v5 ); - CTRIANGLE* newTriangle4 = new CTRIANGLE( v5, v8, v7 ); + TRIANGLE* newTriangle3 = new TRIANGLE( v7, v6, v5 ); + TRIANGLE* newTriangle4 = new TRIANGLE( v5, v8, v7 ); m_object_container.Add( newTriangle3 ); m_object_container.Add( newTriangle4 ); - newTriangle3->SetMaterial( (const CMATERIAL*) &m_materials.m_Floor ); - newTriangle4->SetMaterial( (const CMATERIAL*) &m_materials.m_Floor ); + newTriangle3->SetMaterial( (const MATERIAL*) &m_materials.m_Floor ); + newTriangle4->SetMaterial( (const MATERIAL*) &m_materials.m_Floor ); newTriangle3->SetColor( backgroundColor ); newTriangle4->SetColor( backgroundColor ); @@ -1001,7 +965,6 @@ void C3D_RENDER_RAYTRACING::Reload( } // Init initial lights - // ///////////////////////////////////////////////////////////////////////// m_lights.Clear(); auto IsColorZero = @@ -1011,7 +974,7 @@ void C3D_RENDER_RAYTRACING::Reload( && ( aSource.b < ( 1.0f / 255.0f ) ) ); }; - m_camera_light = new CDIRECTIONALLIGHT( SFVEC3F( 0.0f, 0.0f, 0.0f ), + m_camera_light = new DIRECTIONAL_LIGHT( SFVEC3F( 0.0f, 0.0f, 0.0f ), m_boardAdapter.m_raytrace_lightColorCamera ); m_camera_light->SetCastShadows( false ); @@ -1021,13 +984,13 @@ void C3D_RENDER_RAYTRACING::Reload( const SFVEC3F& boardCenter = m_boardAdapter.GetBBox3DU().GetCenter(); if( !IsColorZero( m_boardAdapter.m_raytrace_lightColorTop ) ) - m_lights.Add( new CPOINTLIGHT( SFVEC3F( boardCenter.x, boardCenter.y, - +RANGE_SCALE_3D * 2.0f ), + m_lights.Add( new POINT_LIGHT( SFVEC3F( boardCenter.x, boardCenter.y, + +RANGE_SCALE_3D * 2.0f ), m_boardAdapter.m_raytrace_lightColorTop ) ); if( !IsColorZero( m_boardAdapter.m_raytrace_lightColorBottom ) ) - m_lights.Add( new CPOINTLIGHT( SFVEC3F( boardCenter.x, boardCenter.y, - -RANGE_SCALE_3D * 2.0f ), + m_lights.Add( new POINT_LIGHT( SFVEC3F( boardCenter.x, boardCenter.y, + -RANGE_SCALE_3D * 2.0f ), m_boardAdapter.m_raytrace_lightColorBottom ) ); wxASSERT( m_boardAdapter.m_raytrace_lightColor.size() @@ -1039,7 +1002,7 @@ void C3D_RENDER_RAYTRACING::Reload( { const SFVEC2F sc = m_boardAdapter.m_raytrace_lightSphericalCoords[i]; - m_lights.Add( new CDIRECTIONALLIGHT( + m_lights.Add( new DIRECTIONAL_LIGHT( SphericalToCartesian( glm::pi() * sc.x, glm::pi() * sc.y ), m_boardAdapter.m_raytrace_lightColor[i] ) ); } @@ -1047,14 +1010,14 @@ void C3D_RENDER_RAYTRACING::Reload( } // Create an accelerator - // ///////////////////////////////////////////////////////////////////////// if( m_accelerator ) { delete m_accelerator; } + m_accelerator = 0; - m_accelerator = new CBVH_PBRT( m_object_container, 8, SPLITMETHOD::MIDDLE ); + m_accelerator = new BVH_PBRT( m_object_container, 8, SPLITMETHOD::MIDDLE ); if( aStatusReporter ) { @@ -1067,7 +1030,7 @@ void C3D_RENDER_RAYTRACING::Reload( } -void C3D_RENDER_RAYTRACING::insert3DViaHole( const VIA* aVia ) +void RENDER_3D_RAYTRACE::insert3DViaHole( const VIA* aVia ) { PCB_LAYER_ID top_layer, bottom_layer; int radiusBUI = ( aVia->GetDrillValue() / 2 ); @@ -1083,14 +1046,13 @@ void C3D_RENDER_RAYTRACING::insert3DViaHole( const VIA* aVia ) const SFVEC2F center = SFVEC2F( aVia->GetStart().x * m_boardAdapter.BiuTo3Dunits(), -aVia->GetStart().y * m_boardAdapter.BiuTo3Dunits() ); - CRING2D* ring = new CRING2D( center, radiusBUI * m_boardAdapter.BiuTo3Dunits(), - ( radiusBUI + m_boardAdapter.GetHolePlatingThicknessBIU() ) - * m_boardAdapter.BiuTo3Dunits(), - *aVia ); + RING_2D* ring = new RING_2D( center, radiusBUI * m_boardAdapter.BiuTo3Dunits(), + ( radiusBUI + m_boardAdapter.GetHolePlatingThicknessBIU() ) + * m_boardAdapter.BiuTo3Dunits(), *aVia ); m_containerWithObjectsToDelete.Add( ring ); - CLAYERITEM* objPtr = new CLAYERITEM( ring, topZ, botZ ); + LAYER_ITEM* objPtr = new LAYER_ITEM( ring, topZ, botZ ); objPtr->SetMaterial( &m_materials.m_Copper ); @@ -1104,9 +1066,9 @@ void C3D_RENDER_RAYTRACING::insert3DViaHole( const VIA* aVia ) } -void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) +void RENDER_3D_RAYTRACE::insert3DPadHole( const PAD* aPad ) { - const COBJECT2D* object2d_A = NULL; + const OBJECT_2D* object2d_A = nullptr; SFVEC3F objColor; @@ -1132,13 +1094,13 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) if( drillsize.x == drillsize.y ) // usual round hole { SFVEC2F center = SFVEC2F( aPad->GetPosition().x * m_boardAdapter.BiuTo3Dunits(), - -aPad->GetPosition().y * m_boardAdapter.BiuTo3Dunits() ); + -aPad->GetPosition().y * m_boardAdapter.BiuTo3Dunits() ); int innerRadius = drillsize.x / 2; int outerRadius = innerRadius + m_boardAdapter.GetHolePlatingThicknessBIU(); - CRING2D* ring = new CRING2D( center, innerRadius * m_boardAdapter.BiuTo3Dunits(), - outerRadius * m_boardAdapter.BiuTo3Dunits(), *aPad ); + RING_2D* ring = new RING_2D( center, innerRadius * m_boardAdapter.BiuTo3Dunits(), + outerRadius * m_boardAdapter.BiuTo3Dunits(), *aPad ); m_containerWithObjectsToDelete.Add( ring ); @@ -1148,23 +1110,22 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) // it will use instead a CSG of two circles. if( object2d_A && !m_antioutlineBoard2dObjects->GetList().empty() ) { - - m_antioutlineBoard2dObjects->GetListObjectsIntersects( - object2d_A->GetBBox(), antiOutlineIntersectionList ); + m_antioutlineBoard2dObjects->GetListObjectsIntersects( object2d_A->GetBBox(), + antiOutlineIntersectionList ); } if( !antiOutlineIntersectionList.empty() ) { - CFILLEDCIRCLE2D* innerCircle = new CFILLEDCIRCLE2D( + FILLED_CIRCLE_2D* innerCircle = new FILLED_CIRCLE_2D( center, innerRadius * m_boardAdapter.BiuTo3Dunits(), *aPad ); - CFILLEDCIRCLE2D* outterCircle = new CFILLEDCIRCLE2D( + FILLED_CIRCLE_2D* outterCircle = new FILLED_CIRCLE_2D( center, outerRadius * m_boardAdapter.BiuTo3Dunits(), *aPad ); - std::vector* object2d_B = new std::vector(); + std::vector* object2d_B = new std::vector(); object2d_B->push_back( innerCircle ); - CITEMLAYERCSG2D* itemCSG2d = - new CITEMLAYERCSG2D( outterCircle, object2d_B, CSGITEM_FULL, *aPad ); + LAYER_ITEM_2D* itemCSG2d = + new LAYER_ITEM_2D( outterCircle, object2d_B, CSGITEM_FULL, *aPad ); m_containerWithObjectsToDelete.Add( itemCSG2d ); m_containerWithObjectsToDelete.Add( innerCircle ); @@ -1194,16 +1155,16 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) wxPoint start = aPad->GetPosition() + ends_offset; wxPoint end = aPad->GetPosition() - ends_offset; - CROUNDSEGMENT2D* innerSeg = - new CROUNDSEGMENT2D( SFVEC2F( start.x * m_boardAdapter.BiuTo3Dunits(), - -start.y * m_boardAdapter.BiuTo3Dunits() ), + ROUND_SEGMENT_2D* innerSeg = + new ROUND_SEGMENT_2D( SFVEC2F( start.x * m_boardAdapter.BiuTo3Dunits(), + -start.y * m_boardAdapter.BiuTo3Dunits() ), SFVEC2F( end.x * m_boardAdapter.BiuTo3Dunits(), -end.y * m_boardAdapter.BiuTo3Dunits() ), width * m_boardAdapter.BiuTo3Dunits(), *aPad ); - CROUNDSEGMENT2D* outerSeg = - new CROUNDSEGMENT2D( SFVEC2F( start.x * m_boardAdapter.BiuTo3Dunits(), - -start.y * m_boardAdapter.BiuTo3Dunits() ), + ROUND_SEGMENT_2D* outerSeg = + new ROUND_SEGMENT_2D( SFVEC2F( start.x * m_boardAdapter.BiuTo3Dunits(), + -start.y * m_boardAdapter.BiuTo3Dunits() ), SFVEC2F( end.x * m_boardAdapter.BiuTo3Dunits(), -end.y * m_boardAdapter.BiuTo3Dunits() ), ( width + m_boardAdapter.GetHolePlatingThicknessBIU() * 2 ) @@ -1211,11 +1172,11 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) *aPad ); // NOTE: the round segment width is the "diameter", so we double the thickness - std::vector* object2d_B = new std::vector(); + std::vector* object2d_B = new std::vector(); object2d_B->push_back( innerSeg ); - CITEMLAYERCSG2D* itemCSG2d = - new CITEMLAYERCSG2D( outerSeg, object2d_B, CSGITEM_FULL, *aPad ); + LAYER_ITEM_2D* itemCSG2d = + new LAYER_ITEM_2D( outerSeg, object2d_B, CSGITEM_FULL, *aPad ); m_containerWithObjectsToDelete.Add( itemCSG2d ); m_containerWithObjectsToDelete.Add( innerSeg ); @@ -1233,7 +1194,7 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) if( object2d_A ) { - std::vector* object2d_B = new std::vector(); + std::vector* object2d_B = new std::vector(); // Check if there are any other THT that intersects this hole // It will use the non inflated holes @@ -1248,7 +1209,7 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) for( CONST_LIST_OBJECT2D::const_iterator hole = intersectionList.begin(); hole != intersectionList.end(); ++hole ) { - const COBJECT2D* hole2d = static_cast( *hole ); + const OBJECT_2D* hole2d = static_cast( *hole ); if( object2d_A->Intersects( hole2d->GetBBox() ) ) //if( object2d_A->GetBBox().Intersects( hole2d->GetBBox() ) ) @@ -1259,7 +1220,7 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) if( !antiOutlineIntersectionList.empty() ) { - for( const COBJECT2D* obj : antiOutlineIntersectionList ) + for( const OBJECT_2D* obj : antiOutlineIntersectionList ) { object2d_B->push_back( obj ); } @@ -1273,7 +1234,7 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) if( object2d_B == CSGITEM_EMPTY ) { - CLAYERITEM* objPtr = new CLAYERITEM( object2d_A, topZ, botZ ); + LAYER_ITEM* objPtr = new LAYER_ITEM( object2d_A, topZ, botZ ); objPtr->SetMaterial( &m_materials.m_Copper ); objPtr->SetColor( ConvertSRGBToLinear( objColor ) ); @@ -1281,12 +1242,12 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) } else { - CITEMLAYERCSG2D* itemCSG2d = new CITEMLAYERCSG2D( - object2d_A, object2d_B, CSGITEM_FULL, (const BOARD_ITEM&) *aPad ); + LAYER_ITEM_2D* itemCSG2d = new LAYER_ITEM_2D( object2d_A, object2d_B, CSGITEM_FULL, + (const BOARD_ITEM&) *aPad ); m_containerWithObjectsToDelete.Add( itemCSG2d ); - CLAYERITEM* objPtr = new CLAYERITEM( itemCSG2d, topZ, botZ ); + LAYER_ITEM* objPtr = new LAYER_ITEM( itemCSG2d, topZ, botZ ); objPtr->SetMaterial( &m_materials.m_Copper ); objPtr->SetColor( ConvertSRGBToLinear( objColor ) ); @@ -1297,10 +1258,9 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const PAD* aPad ) } -void C3D_RENDER_RAYTRACING::add_3D_vias_and_pads_to_container() +void RENDER_3D_RAYTRACE::add_3D_vias_and_pads_to_container() { // Insert plated vertical holes inside the board - // ///////////////////////////////////////////////////////////////////////// // Insert vias holes (vertical cylinders) for( TRACK* track : m_boardAdapter.GetBoard()->Tracks() ) @@ -1326,8 +1286,8 @@ void C3D_RENDER_RAYTRACING::add_3D_vias_and_pads_to_container() } -void C3D_RENDER_RAYTRACING::load_3D_models( CCONTAINER& aDstContainer, - bool aSkipMaterialInformation ) +void RENDER_3D_RAYTRACE::load_3D_models( CONTAINER_3D& aDstContainer, + bool aSkipMaterialInformation ) { // Go for all footprints for( FOOTPRINT* fp : m_boardAdapter.GetBoard()->Footprints() ) @@ -1365,7 +1325,7 @@ void C3D_RENDER_RAYTRACING::load_3D_models( CCONTAINER& aDstContainer, fpMatrix = glm::scale( fpMatrix, SFVEC3F( modelunit_to_3d_units_factor, modelunit_to_3d_units_factor, - modelunit_to_3d_units_factor ) ); + modelunit_to_3d_units_factor ) ); BOARD_ITEM* boardItem = dynamic_cast( fp ); @@ -1377,12 +1337,12 @@ void C3D_RENDER_RAYTRACING::load_3D_models( CCONTAINER& aDstContainer, while( sM != eM ) { if( ( static_cast( sM->m_Opacity ) > FLT_EPSILON ) - && ( sM->m_Show && !sM->m_Filename.empty() ) ) + && ( sM->m_Show && !sM->m_Filename.empty() ) ) { // get it from cache const S3DMODEL* modelPtr = cacheMgr->GetModel( sM->m_Filename ); - // only add it if the return is not NULL + // only add it if the return is not NULL. if( modelPtr ) { glm::mat4 modelMatrix = fpMatrix; @@ -1406,7 +1366,7 @@ void C3D_RENDER_RAYTRACING::load_3D_models( CCONTAINER& aDstContainer, SFVEC3F( sM->m_Scale.x, sM->m_Scale.y, sM->m_Scale.z ) ); add_3D_models( aDstContainer, modelPtr, modelMatrix, (float) sM->m_Opacity, - aSkipMaterialInformation, boardItem ); + aSkipMaterialInformation, boardItem ); } } @@ -1417,7 +1377,7 @@ void C3D_RENDER_RAYTRACING::load_3D_models( CCONTAINER& aDstContainer, } -MODEL_MATERIALS* C3D_RENDER_RAYTRACING::get_3D_model_material( const S3DMODEL* a3DModel ) +MODEL_MATERIALS* RENDER_3D_RAYTRACE::get_3D_model_material( const S3DMODEL* a3DModel ) { MODEL_MATERIALS* materialVector; @@ -1454,9 +1414,9 @@ MODEL_MATERIALS* C3D_RENDER_RAYTRACING::get_3D_model_material( const S3DMODEL* a 0.5f ); } - CBLINN_PHONG_MATERIAL& blinnMaterial = ( *materialVector )[imat]; + BLINN_PHONG_MATERIAL& blinnMaterial = ( *materialVector )[imat]; - blinnMaterial = CBLINN_PHONG_MATERIAL( ConvertSRGBToLinear( material.m_Ambient ), + blinnMaterial = BLINN_PHONG_MATERIAL( ConvertSRGBToLinear( material.m_Ambient ), ConvertSRGBToLinear( material.m_Emissive ), ConvertSRGBToLinear( material.m_Specular ), material.m_Shininess * 180.0f, material.m_Transparency, reflectionFactor ); @@ -1479,14 +1439,12 @@ MODEL_MATERIALS* C3D_RENDER_RAYTRACING::get_3D_model_material( const S3DMODEL* a else { if( ( RGBtoGray( material.m_Diffuse ) > 0.3f ) - && ( material.m_Shininess < 0.30f ) - && ( material.m_Transparency == 0.0f ) - && ( ( glm::abs( material.m_Diffuse.r - material.m_Diffuse.g ) - > 0.25f ) - || ( glm::abs( material.m_Diffuse.b - material.m_Diffuse.g ) - > 0.25f ) - || ( glm::abs( material.m_Diffuse.r - material.m_Diffuse.b ) - > 0.25f ) ) ) + && ( material.m_Shininess < 0.30f ) + && ( material.m_Transparency == 0.0f ) + && ( ( glm::abs( material.m_Diffuse.r - material.m_Diffuse.g ) > 0.25f ) + || ( glm::abs( material.m_Diffuse.b - material.m_Diffuse.g ) > 0.25f ) + || ( glm::abs( material.m_Diffuse.r - material.m_Diffuse.b ) + > 0.25f ) ) ) { // This may be a color plastic ... blinnMaterial.SetNormalPerturbator( @@ -1495,16 +1453,14 @@ MODEL_MATERIALS* C3D_RENDER_RAYTRACING::get_3D_model_material( const S3DMODEL* a else { if( ( RGBtoGray( material.m_Diffuse ) > 0.6f ) - && ( material.m_Shininess > 0.35f ) - && ( material.m_Transparency == 0.0f ) - && ( ( glm::abs( material.m_Diffuse.r - material.m_Diffuse.g ) - < 0.40f ) - && ( glm::abs( material.m_Diffuse.b - - material.m_Diffuse.g ) - < 0.40f ) - && ( glm::abs( material.m_Diffuse.r - - material.m_Diffuse.b ) - < 0.40f ) ) ) + && ( material.m_Shininess > 0.35f ) + && ( material.m_Transparency == 0.0f ) + && ( ( glm::abs( material.m_Diffuse.r - material.m_Diffuse.g ) + < 0.40f ) + && ( glm::abs( material.m_Diffuse.b - material.m_Diffuse.g ) + < 0.40f ) + && ( glm::abs( material.m_Diffuse.r - material.m_Diffuse.b ) + < 0.40f ) ) ) { // This may be a brushed metal blinnMaterial.SetNormalPerturbator( @@ -1516,7 +1472,7 @@ MODEL_MATERIALS* C3D_RENDER_RAYTRACING::get_3D_model_material( const S3DMODEL* a } else { - ( *materialVector )[imat] = CBLINN_PHONG_MATERIAL( + ( *materialVector )[imat] = BLINN_PHONG_MATERIAL( SFVEC3F( 0.2f ), SFVEC3F( 0.0f ), SFVEC3F( 0.0f ), 0.0f, 0.0f, 0.0f ); } } @@ -1526,19 +1482,18 @@ MODEL_MATERIALS* C3D_RENDER_RAYTRACING::get_3D_model_material( const S3DMODEL* a } -void C3D_RENDER_RAYTRACING::add_3D_models( CCONTAINER& aDstContainer, const S3DMODEL* a3DModel, - const glm::mat4& aModelMatrix, float aFPOpacity, - bool aSkipMaterialInformation, - BOARD_ITEM* aBoardItem ) +void RENDER_3D_RAYTRACE::add_3D_models( CONTAINER_3D& aDstContainer, const S3DMODEL* a3DModel, + const glm::mat4& aModelMatrix, float aFPOpacity, + bool aSkipMaterialInformation, BOARD_ITEM* aBoardItem ) { // Validate a3DModel pointers - wxASSERT( a3DModel != NULL ); + wxASSERT( a3DModel != nullptr ); - if( a3DModel == NULL ) + if( a3DModel == nullptr ) return; - wxASSERT( a3DModel->m_Materials != NULL ); - wxASSERT( a3DModel->m_Meshes != NULL ); + wxASSERT( a3DModel->m_Materials != nullptr ); + wxASSERT( a3DModel->m_Meshes != nullptr ); wxASSERT( a3DModel->m_MaterialsSize > 0 ); wxASSERT( a3DModel->m_MeshesSize > 0 ); wxASSERT( aFPOpacity > 0.0f ); @@ -1549,10 +1504,10 @@ void C3D_RENDER_RAYTRACING::add_3D_models( CCONTAINER& aDstContainer, const S3DM aFPOpacity = 1.0f; } - if( ( a3DModel->m_Materials != NULL ) && ( a3DModel->m_Meshes != NULL ) + if( ( a3DModel->m_Materials != nullptr ) && ( a3DModel->m_Meshes != nullptr ) && ( a3DModel->m_MaterialsSize > 0 ) && ( a3DModel->m_MeshesSize > 0 ) ) { - MODEL_MATERIALS* materialVector = NULL; + MODEL_MATERIALS* materialVector = nullptr; if( !aSkipMaterialInformation ) { @@ -1566,20 +1521,20 @@ void C3D_RENDER_RAYTRACING::add_3D_models( CCONTAINER& aDstContainer, const S3DM const SMESH& mesh = a3DModel->m_Meshes[mesh_i]; // Validate the mesh pointers - wxASSERT( mesh.m_Positions != NULL ); - wxASSERT( mesh.m_FaceIdx != NULL ); - wxASSERT( mesh.m_Normals != NULL ); + wxASSERT( mesh.m_Positions != nullptr ); + wxASSERT( mesh.m_FaceIdx != nullptr ); + wxASSERT( mesh.m_Normals != nullptr ); wxASSERT( mesh.m_FaceIdxSize > 0 ); wxASSERT( ( mesh.m_FaceIdxSize % 3 ) == 0 ); - if( ( mesh.m_Positions != NULL ) && ( mesh.m_Normals != NULL ) - && ( mesh.m_FaceIdx != NULL ) && ( mesh.m_FaceIdxSize > 0 ) + if( ( mesh.m_Positions != nullptr ) && ( mesh.m_Normals != nullptr ) + && ( mesh.m_FaceIdx != nullptr ) && ( mesh.m_FaceIdxSize > 0 ) && ( mesh.m_VertexSize > 0 ) && ( ( mesh.m_FaceIdxSize % 3 ) == 0 ) && ( mesh.m_MaterialIdx < a3DModel->m_MaterialsSize ) ) { - float fpTransparency; - const CBLINN_PHONG_MATERIAL* blinn_material; + float fpTransparency; + const BLINN_PHONG_MATERIAL* blinn_material; if( !aSkipMaterialInformation ) { @@ -1620,7 +1575,7 @@ void C3D_RENDER_RAYTRACING::add_3D_models( CCONTAINER& aDstContainer, const S3DM const SFVEC3F nt1 = glm::normalize( SFVEC3F( normalMatrix * n1 ) ); const SFVEC3F nt2 = glm::normalize( SFVEC3F( normalMatrix * n2 ) ); - CTRIANGLE* newTriangle = new CTRIANGLE( vt0, vt2, vt1, nt0, nt2, nt1 ); + TRIANGLE* newTriangle = new TRIANGLE( vt0, vt2, vt1, nt0, nt2, nt1 ); newTriangle->SetBoardItem( aBoardItem ); @@ -1631,7 +1586,7 @@ void C3D_RENDER_RAYTRACING::add_3D_models( CCONTAINER& aDstContainer, const S3DM newTriangle->SetMaterial( blinn_material ); newTriangle->SetModelTransparency( fpTransparency ); - if( mesh.m_Color == NULL ) + if( mesh.m_Color == nullptr ) { const SFVEC3F diffuseColor = a3DModel->m_Materials[mesh.m_MaterialIdx].m_Diffuse; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_raytracing.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_raytracing.cpp index c54f7cc11a..08f94c36b1 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_raytracing.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_raytracing.cpp @@ -47,25 +47,25 @@ // convertLinearToSRGB //#include -C3D_RENDER_RAYTRACING::C3D_RENDER_RAYTRACING( BOARD_ADAPTER& aAdapter, CCAMERA& aCamera ) : - C3D_RENDER_BASE( aAdapter, aCamera ), +RENDER_3D_RAYTRACE::RENDER_3D_RAYTRACE( BOARD_ADAPTER& aAdapter, CAMERA& aCamera ) : + RENDER_3D_BASE( aAdapter, aCamera ), m_postshader_ssao( aCamera ) { - wxLogTrace( m_logTrace, wxT( "C3D_RENDER_RAYTRACING::C3D_RENDER_RAYTRACING" ) ); + wxLogTrace( m_logTrace, wxT( "RENDER_3D_RAYTRACE::RENDER_3D_RAYTRACE" ) ); m_opengl_support_vertex_buffer_object = false; m_pboId = GL_NONE; m_pboDataSize = 0; - m_accelerator = NULL; + m_accelerator = nullptr; m_stats_converted_dummy_to_plane = 0; m_stats_converted_roundsegment2d_to_roundsegment = 0; m_oldWindowsSize.x = 0; m_oldWindowsSize.y = 0; - m_outlineBoard2dObjects = NULL; - m_antioutlineBoard2dObjects = NULL; - m_firstHitinfo = NULL; - m_shaderBuffer = NULL; - m_camera_light = NULL; + m_outlineBoard2dObjects = nullptr; + m_antioutlineBoard2dObjects = nullptr; + m_firstHitinfo = nullptr; + m_shaderBuffer = nullptr; + m_camera_light = nullptr; m_xoffset = 0; m_yoffset = 0; @@ -77,33 +77,33 @@ C3D_RENDER_RAYTRACING::C3D_RENDER_RAYTRACING( BOARD_ADAPTER& aAdapter, CCAMERA& } -C3D_RENDER_RAYTRACING::~C3D_RENDER_RAYTRACING() +RENDER_3D_RAYTRACE::~RENDER_3D_RAYTRACE() { - wxLogTrace( m_logTrace, wxT( "C3D_RENDER_RAYTRACING::~C3D_RENDER_RAYTRACING" ) ); + wxLogTrace( m_logTrace, wxT( "RENDER_3D_RAYTRACE::~RENDER_3D_RAYTRACE" ) ); delete m_accelerator; - m_accelerator = NULL; + m_accelerator = nullptr; delete m_outlineBoard2dObjects; - m_outlineBoard2dObjects = NULL; + m_outlineBoard2dObjects = nullptr; delete m_antioutlineBoard2dObjects; - m_antioutlineBoard2dObjects = NULL; + m_antioutlineBoard2dObjects = nullptr; delete[] m_shaderBuffer; - m_shaderBuffer = NULL; + m_shaderBuffer = nullptr; opengl_delete_pbo(); } -int C3D_RENDER_RAYTRACING::GetWaitForEditingTimeOut() +int RENDER_3D_RAYTRACE::GetWaitForEditingTimeOut() { return 1000; // ms } -void C3D_RENDER_RAYTRACING::opengl_delete_pbo() +void RENDER_3D_RAYTRACE::opengl_delete_pbo() { // Delete PBO if it was created if( m_opengl_support_vertex_buffer_object ) @@ -116,7 +116,7 @@ void C3D_RENDER_RAYTRACING::opengl_delete_pbo() } -void C3D_RENDER_RAYTRACING::SetCurWindowSize( const wxSize& aSize ) +void RENDER_3D_RAYTRACE::SetCurWindowSize( const wxSize& aSize ) { if( m_windowSize != aSize ) { @@ -128,7 +128,7 @@ void C3D_RENDER_RAYTRACING::SetCurWindowSize( const wxSize& aSize ) } -void C3D_RENDER_RAYTRACING::restart_render_state() +void RENDER_3D_RAYTRACE::restart_render_state() { m_stats_start_rendering_time = GetRunningMicroSecs(); @@ -144,14 +144,14 @@ void C3D_RENDER_RAYTRACING::restart_render_state() } -static inline void SetPixel( GLubyte *p, const CCOLORRGB &v ) +static inline void SetPixel( GLubyte* p, const COLOR_RGB& v ) { p[0] = v.c[0]; p[1] = v.c[1]; p[2] = v.c[2]; p[3] = 255; } -bool C3D_RENDER_RAYTRACING::Redraw( bool aIsMoving, REPORTER* aStatusReporter, - REPORTER* aWarningReporter ) +bool RENDER_3D_RAYTRACE::Redraw( bool aIsMoving, REPORTER* aStatusReporter, + REPORTER* aWarningReporter ) { bool requestRedraw = false; @@ -232,7 +232,7 @@ bool C3D_RENDER_RAYTRACING::Redraw( bool aIsMoving, REPORTER* aStatusReporter, glBindBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, m_pboId ); // Get the PBO pixel pointer to write the data - GLubyte *ptrPBO = (GLubyte *)glMapBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, + GLubyte* ptrPBO = (GLubyte *)glMapBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, GL_WRITE_ONLY_ARB ); if( ptrPBO ) @@ -253,7 +253,7 @@ bool C3D_RENDER_RAYTRACING::Redraw( bool aIsMoving, REPORTER* aStatusReporter, if( m_rt_render_state != RT_RENDER_STATE_FINISH ) { // Get the PBO pixel pointer to write the data - GLubyte *ptrPBO = (GLubyte *)glMapBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, + GLubyte* ptrPBO = (GLubyte *)glMapBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, GL_WRITE_ONLY_ARB ); if( ptrPBO ) @@ -292,7 +292,7 @@ bool C3D_RENDER_RAYTRACING::Redraw( bool aIsMoving, REPORTER* aStatusReporter, } -void C3D_RENDER_RAYTRACING::render( GLubyte* ptrPBO, REPORTER* aStatusReporter ) +void RENDER_3D_RAYTRACE::render( GLubyte* ptrPBO, REPORTER* aStatusReporter ) { if( ( m_rt_render_state == RT_RENDER_STATE_FINISH ) || ( m_rt_render_state >= RT_RENDER_STATE_MAX ) ) @@ -308,7 +308,7 @@ void C3D_RENDER_RAYTRACING::render( GLubyte* ptrPBO, REPORTER* aStatusReporter ) // This way it will draw the full buffer but only shows the updated ( // already calculated) squares unsigned int nPixels = m_realBufferSize.x * m_realBufferSize.y; - GLubyte *tmp_ptrPBO = ptrPBO + 3; // PBO is RGBA + GLubyte* tmp_ptrPBO = ptrPBO + 3; // PBO is RGBA for( unsigned int i = 0; i < nPixels; ++i ) { @@ -353,7 +353,7 @@ void C3D_RENDER_RAYTRACING::render( GLubyte* ptrPBO, REPORTER* aStatusReporter ) } -void C3D_RENDER_RAYTRACING::rt_render_tracing( GLubyte* ptrPBO, REPORTER* aStatusReporter ) +void RENDER_3D_RAYTRACE::rt_render_tracing( GLubyte* ptrPBO, REPORTER* aStatusReporter ) { m_isPreview = false; @@ -443,18 +443,18 @@ SFVEC3F ConvertSRGBToLinear( const SFVEC3F& aSRGBcolor ) { const float gammaCorrection = SRGB_GAMA; - return glm::mix( glm::pow( (aSRGBcolor + SFVEC3F(0.055f)) * - SFVEC3F(0.94786729857819905213270142180095f), - SFVEC3F(gammaCorrection) ), - aSRGBcolor * SFVEC3F(0.07739938080495356037151702786378f), - glm::lessThanEqual( aSRGBcolor, SFVEC3F(0.04045f) ) ); + return glm::mix( glm::pow( ( aSRGBcolor + SFVEC3F( 0.055f ) ) + * SFVEC3F( 0.94786729857819905213270142180095f ), + SFVEC3F( gammaCorrection ) ), + aSRGBcolor * SFVEC3F( 0.07739938080495356037151702786378f ), + glm::lessThanEqual( aSRGBcolor, SFVEC3F( 0.04045f ) ) ); } #endif -void C3D_RENDER_RAYTRACING::rt_final_color( GLubyte* ptrPBO, const SFVEC3F& rgbColor, - bool applyColorSpaceConversion ) +void RENDER_3D_RAYTRACE::rt_final_color( GLubyte* ptrPBO, const SFVEC3F& rgbColor, + bool applyColorSpaceConversion ) { SFVEC3F color = rgbColor; @@ -467,9 +467,9 @@ void C3D_RENDER_RAYTRACING::rt_final_color( GLubyte* ptrPBO, const SFVEC3F& rgbC color = convertLinearToSRGB( rgbColor ); #endif - ptrPBO[0] = (unsigned int)glm::clamp( (int)(color.r * 255), 0, 255 ); - ptrPBO[1] = (unsigned int)glm::clamp( (int)(color.g * 255), 0, 255 ); - ptrPBO[2] = (unsigned int)glm::clamp( (int)(color.b * 255), 0, 255 ); + ptrPBO[0] = (unsigned int) glm::clamp( (int) ( color.r * 255 ), 0, 255 ); + ptrPBO[1] = (unsigned int) glm::clamp( (int) ( color.g * 255 ), 0, 255 ); + ptrPBO[2] = (unsigned int) glm::clamp( (int) ( color.b * 255 ), 0, 255 ); ptrPBO[3] = 255; } @@ -488,9 +488,9 @@ static void HITINFO_PACKET_init( HITINFO_PACKET* aHitPacket ) } -void C3D_RENDER_RAYTRACING::rt_shades_packet( const SFVEC3F* bgColorY, const RAY* aRayPkt, - HITINFO_PACKET* aHitPacket, bool is_testShadow, - SFVEC3F* aOutHitColor ) +void RENDER_3D_RAYTRACE::rt_shades_packet( const SFVEC3F* bgColorY, const RAY* aRayPkt, + HITINFO_PACKET* aHitPacket, bool is_testShadow, + SFVEC3F* aOutHitColor ) { for( unsigned int y = 0, i = 0; y < RAYPACKET_DIM; ++y ) { @@ -510,11 +510,10 @@ void C3D_RENDER_RAYTRACING::rt_shades_packet( const SFVEC3F* bgColorY, const RAY } -void C3D_RENDER_RAYTRACING::rt_trace_AA_packet( const SFVEC3F* aBgColorY, - const HITINFO_PACKET* aHitPck_X0Y0, - const HITINFO_PACKET* aHitPck_AA_X1Y1, - const RAY* aRayPck, - SFVEC3F* aOutHitColor ) +void RENDER_3D_RAYTRACE::rt_trace_AA_packet( const SFVEC3F* aBgColorY, + const HITINFO_PACKET* aHitPck_X0Y0, + const HITINFO_PACKET* aHitPck_AA_X1Y1, + const RAY* aRayPck, SFVEC3F* aOutHitColor ) { const bool is_testShadow = m_boardAdapter.GetFlag( FL_RENDER_RAYTRACING_SHADOWS ); @@ -522,7 +521,7 @@ void C3D_RENDER_RAYTRACING::rt_trace_AA_packet( const SFVEC3F* aBgColorY, { for( unsigned int x = 0; x < RAYPACKET_DIM; ++x, ++i ) { - const RAY &rayAA = aRayPck[i]; + const RAY& rayAA = aRayPck[i]; HITINFO hitAA; hitAA.m_tHit = std::numeric_limits::infinity(); @@ -632,14 +631,14 @@ void C3D_RENDER_RAYTRACING::rt_trace_AA_packet( const SFVEC3F* aBgColorY, #define DISP_FACTOR 0.075f -void C3D_RENDER_RAYTRACING::rt_render_trace_block( GLubyte* ptrPBO, signed int iBlock ) +void RENDER_3D_RAYTRACE::rt_render_trace_block( GLubyte* ptrPBO, signed int iBlock ) { // Initialize ray packets - const SFVEC2UI &blockPos = m_blockPositions[iBlock]; + const SFVEC2UI& blockPos = m_blockPositions[iBlock]; const SFVEC2I blockPosI = SFVEC2I( blockPos.x + m_xoffset, blockPos.y + m_yoffset ); - RAYPACKET blockPacket( m_camera, (SFVEC2F)blockPosI + SFVEC2F(DISP_FACTOR, DISP_FACTOR), - SFVEC2F(DISP_FACTOR, DISP_FACTOR) /* Displacement random factor */ ); + RAYPACKET blockPacket( m_camera, (SFVEC2F) blockPosI + SFVEC2F( DISP_FACTOR, DISP_FACTOR ), + SFVEC2F( DISP_FACTOR, DISP_FACTOR ) /* Displacement random factor */ ); HITINFO_PACKET hitPacket_X0Y0[RAYPACKET_RAYS_PER_PACKET]; @@ -651,7 +650,7 @@ void C3D_RENDER_RAYTRACING::rt_render_trace_block( GLubyte* ptrPBO, signed int i for( unsigned int y = 0; y < RAYPACKET_DIM; ++y ) { - const float posYfactor = (float)(blockPosI.y + y) / (float)m_windowSize.y; + const float posYfactor = (float) ( blockPosI.y + y ) / (float) m_windowSize.y; bgColor[y] = m_BgColorTop_LinearRGB * SFVEC3F(posYfactor) + m_BgColorBot_LinearRGB * ( SFVEC3F(1.0f) - SFVEC3F(posYfactor) ); @@ -665,7 +664,7 @@ void C3D_RENDER_RAYTRACING::rt_render_trace_block( GLubyte* ptrPBO, signed int i { for( unsigned int y = 0; y < RAYPACKET_DIM; ++y ) { - const SFVEC3F &outColor = bgColor[y]; + const SFVEC3F& outColor = bgColor[y]; const unsigned int yBlockPos = blockPos.y + y; @@ -686,13 +685,13 @@ void C3D_RENDER_RAYTRACING::rt_render_trace_block( GLubyte* ptrPBO, signed int i for( unsigned int y = 0; y < RAYPACKET_DIM; ++y ) { - const SFVEC3F &outColor = bgColor[y]; + const SFVEC3F& outColor = bgColor[y]; - const unsigned int yConst = blockPos.x + ( (y + blockPos.y) * m_realBufferSize.x ); + const unsigned int yConst = blockPos.x + ( ( y + blockPos.y ) * m_realBufferSize.x ); for( unsigned int x = 0; x < RAYPACKET_DIM; ++x ) { - GLubyte *ptr = &ptrPBO[ (yConst + x) * 4 ]; + GLubyte* ptr = &ptrPBO[( yConst + x ) * 4]; rt_final_color( ptr, outColor, isFinalColor ); } @@ -725,7 +724,7 @@ void C3D_RENDER_RAYTRACING::rt_render_trace_block( GLubyte* ptrPBO, signed int i // Missed all the package for( unsigned int y = 0, i = 0; y < RAYPACKET_DIM; ++y ) { - const SFVEC3F &outColor = bgColor[y]; + const SFVEC3F& outColor = bgColor[y]; for( unsigned int x = 0; x < RAYPACKET_DIM; ++x, ++i ) { @@ -804,7 +803,7 @@ void C3D_RENDER_RAYTRACING::rt_render_trace_block( GLubyte* ptrPBO, signed int i for( unsigned int x = 0; x < RAYPACKET_DIM; ++x, ++i ) { - const SFVEC3F &hColor = hitColor_X0Y0[i]; + const SFVEC3F& hColor = hitColor_X0Y0[i]; if( hitPacket_X0Y0[i].m_hitresult == true ) m_postshader_ssao.SetPixelData( bPos.x, bPos.y, @@ -848,8 +847,7 @@ void C3D_RENDER_RAYTRACING::rt_render_trace_block( GLubyte* ptrPBO, signed int i } -void C3D_RENDER_RAYTRACING::rt_render_post_process_shade( GLubyte* ptrPBO, - REPORTER* aStatusReporter ) +void RENDER_3D_RAYTRACE::rt_render_post_process_shade( GLubyte* ptrPBO, REPORTER* aStatusReporter ) { (void)ptrPBO; // unused @@ -874,7 +872,7 @@ void C3D_RENDER_RAYTRACING::rt_render_post_process_shade( GLubyte* ptrPBO, y < m_realBufferSize.y; y = nextBlock.fetch_add( 1 ) ) { - SFVEC3F *ptr = &m_shaderBuffer[ y * m_realBufferSize.x ]; + SFVEC3F* ptr = &m_shaderBuffer[ y * m_realBufferSize.x ]; for( signed int x = 0; x < (int)m_realBufferSize.x; ++x ) { @@ -905,8 +903,8 @@ void C3D_RENDER_RAYTRACING::rt_render_post_process_shade( GLubyte* ptrPBO, } -void C3D_RENDER_RAYTRACING::rt_render_post_process_blur_finish( GLubyte* ptrPBO, - REPORTER* aStatusReporter ) +void RENDER_3D_RAYTRACE::rt_render_post_process_blur_finish( GLubyte* ptrPBO, + REPORTER* aStatusReporter ) { (void) aStatusReporter; //unused @@ -925,7 +923,7 @@ void C3D_RENDER_RAYTRACING::rt_render_post_process_blur_finish( GLubyte* ptrPBO, for( size_t y = nextBlock.fetch_add( 1 ); y < m_realBufferSize.y; y = nextBlock.fetch_add( 1 ) ) { - GLubyte *ptr = &ptrPBO[ y * m_realBufferSize.x * 4 ]; + GLubyte* ptr = &ptrPBO[ y * m_realBufferSize.x * 4 ]; for( signed int x = 0; x < (int)m_realBufferSize.x; ++x ) { @@ -965,7 +963,7 @@ void C3D_RENDER_RAYTRACING::rt_render_post_process_blur_finish( GLubyte* ptrPBO, } -void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) +void RENDER_3D_RAYTRACE::render_preview( GLubyte* ptrPBO ) { m_isPreview = true; @@ -983,7 +981,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) for( size_t iBlock = nextBlock.fetch_add( 1 ); iBlock < m_blockPositionsFast.size(); iBlock = nextBlock.fetch_add( 1 ) ) { - const SFVEC2UI &windowPosUI = m_blockPositionsFast[ iBlock ]; + const SFVEC2UI& windowPosUI = m_blockPositionsFast[ iBlock ]; const SFVEC2I windowsPos = SFVEC2I( windowPosUI.x + m_xoffset, windowPosUI.y + m_yoffset ); @@ -1015,7 +1013,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) * ( SFVEC3F( 1.0f ) - SFVEC3F( posYfactor ) ); } - CCOLORRGB hitColorShading[RAYPACKET_RAYS_PER_PACKET]; + COLOR_RGB hitColorShading[RAYPACKET_RAYS_PER_PACKET]; for( unsigned int i = 0; i < RAYPACKET_RAYS_PER_PACKET; ++i ) { @@ -1027,21 +1025,21 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) hitPacket[i].m_HitInfo, false, 0, false ); - hitColorShading[i] = CCOLORRGB( hitColor ); + hitColorShading[i] = COLOR_RGB( hitColor ); } else hitColorShading[i] = bhColorY; } - CCOLORRGB cLRB_old[(RAYPACKET_DIM - 1)]; + COLOR_RGB cLRB_old[(RAYPACKET_DIM - 1)]; for( unsigned int y = 0; y < (RAYPACKET_DIM - 1); ++y ) { const SFVEC3F bgColorY = bgColor[y]; - const CCOLORRGB bgColorYRGB = CCOLORRGB( bgColorY ); + const COLOR_RGB bgColorYRGB = COLOR_RGB( bgColorY ); // This stores cRTB from the last block to be reused next time in a cLTB pixel - CCOLORRGB cRTB_old; + COLOR_RGB cRTB_old; //RAY cRTB_ray; //HITINFO cRTB_hitInfo; @@ -1064,19 +1062,19 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) const unsigned int iRB = ( ( x + 1 ) + RAYPACKET_DIM * ( y + 1 ) ); // !TODO: skip when there are no hits - const CCOLORRGB &cLT = hitColorShading[ iLT ]; - const CCOLORRGB &cRT = hitColorShading[ iRT ]; - const CCOLORRGB &cLB = hitColorShading[ iLB ]; - const CCOLORRGB &cRB = hitColorShading[ iRB ]; + const COLOR_RGB& cLT = hitColorShading[ iLT ]; + const COLOR_RGB& cRT = hitColorShading[ iRT ]; + const COLOR_RGB& cLB = hitColorShading[ iLB ]; + const COLOR_RGB& cRB = hitColorShading[ iRB ]; // Trace and shade cC - CCOLORRGB cC = bgColorYRGB; + COLOR_RGB cC = bgColorYRGB; - const SFVEC3F &oriLT = blockPacket.m_ray[ iLT ].m_Origin; - const SFVEC3F &oriRB = blockPacket.m_ray[ iRB ].m_Origin; + const SFVEC3F& oriLT = blockPacket.m_ray[ iLT ].m_Origin; + const SFVEC3F& oriRB = blockPacket.m_ray[ iRB ].m_Origin; - const SFVEC3F &dirLT = blockPacket.m_ray[ iLT ].m_Dir; - const SFVEC3F &dirRB = blockPacket.m_ray[ iRB ].m_Dir; + const SFVEC3F& dirLT = blockPacket.m_ray[ iLT ].m_Dir; + const SFVEC3F& dirRB = blockPacket.m_ray[ iRB ].m_Dir; SFVEC3F oriC; SFVEC3F dirC; @@ -1122,7 +1120,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) if( hittedC ) { - cC = CCOLORRGB( shadeHit( bgColorY, centerRay, centerHitInfo, + cC = COLOR_RGB( shadeHit( bgColorY, centerRay, centerHitInfo, false, 0, false ) ); } else @@ -1131,16 +1129,16 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) hittedC = m_accelerator->Intersect( centerRay, centerHitInfo ); if( hittedC ) - cC = CCOLORRGB( shadeHit( bgColorY, centerRay, centerHitInfo, + cC = COLOR_RGB( shadeHit( bgColorY, centerRay, centerHitInfo, false, 0, false ) ); } } // Trace and shade cLRT - CCOLORRGB cLRT = bgColorYRGB; + COLOR_RGB cLRT = bgColorYRGB; - const SFVEC3F &oriRT = blockPacket.m_ray[ iRT ].m_Origin; - const SFVEC3F &dirRT = blockPacket.m_ray[ iRT ].m_Dir; + const SFVEC3F& oriRT = blockPacket.m_ray[ iRT ].m_Origin; + const SFVEC3F& dirRT = blockPacket.m_ray[ iRT ].m_Dir; if( y == 0 ) { @@ -1163,7 +1161,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) glm::normalize( ( hitPacket[ iLT ].m_HitInfo.m_HitNormal + hitPacket[ iRT ].m_HitInfo.m_HitNormal ) * 0.5f ); - cLRT = CCOLORRGB( shadeHit( bgColorY, rayLRT, hitInfoLRT, false, + cLRT = COLOR_RGB( shadeHit( bgColorY, rayLRT, hitInfoLRT, false, 0, false ) ); cLRT = BlendColor( cLRT, BlendColor( cLT, cRT ) ); } @@ -1188,14 +1186,14 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) nodeRT ); if( hittedLRT ) - cLRT = CCOLORRGB( shadeHit( bgColorY, rayLRT, hitInfoLRT, + cLRT = COLOR_RGB( shadeHit( bgColorY, rayLRT, hitInfoLRT, false, 0, false ) ); else { hitInfoLRT.m_tHit = std::numeric_limits::infinity(); if( m_accelerator->Intersect( rayLRT,hitInfoLRT ) ) - cLRT = CCOLORRGB( shadeHit( bgColorY, rayLRT, + cLRT = COLOR_RGB( shadeHit( bgColorY, rayLRT, hitInfoLRT, false, 0, false ) ); } @@ -1208,12 +1206,12 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) } // Trace and shade cLTB - CCOLORRGB cLTB = bgColorYRGB; + COLOR_RGB cLTB = bgColorYRGB; if( x == 0 ) { const SFVEC3F &oriLB = blockPacket.m_ray[ iLB ].m_Origin; - const SFVEC3F &dirLB = blockPacket.m_ray[ iLB ].m_Dir; + const SFVEC3F& dirLB = blockPacket.m_ray[ iLB ].m_Dir; // Trace the center ray RAY rayLTB; @@ -1233,7 +1231,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) hitInfoLTB.m_HitNormal = glm::normalize( ( hitPacket[ iLT ].m_HitInfo.m_HitNormal + hitPacket[ iLB ].m_HitInfo.m_HitNormal ) * 0.5f ); - cLTB = CCOLORRGB( shadeHit( bgColorY, rayLTB, hitInfoLTB, false, + cLTB = COLOR_RGB( shadeHit( bgColorY, rayLTB, hitInfoLTB, false, 0, false ) ); cLTB = BlendColor( cLTB, BlendColor( cLT, cLB) ); } @@ -1258,14 +1256,14 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) nodeLB ); if( hittedLTB ) - cLTB = CCOLORRGB( shadeHit( bgColorY, rayLTB, hitInfoLTB, + cLTB = COLOR_RGB( shadeHit( bgColorY, rayLTB, hitInfoLTB, false, 0, false ) ); else { hitInfoLTB.m_tHit = std::numeric_limits::infinity(); if( m_accelerator->Intersect( rayLTB, hitInfoLTB ) ) - cLTB = CCOLORRGB( shadeHit( bgColorY, rayLTB, + cLTB = COLOR_RGB( shadeHit( bgColorY, rayLTB, hitInfoLTB, false, 0, false ) ); } @@ -1278,7 +1276,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) } // Trace and shade cRTB - CCOLORRGB cRTB = bgColorYRGB; + COLOR_RGB cRTB = bgColorYRGB; // Trace the center ray RAY rayRTB; @@ -1301,7 +1299,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) glm::normalize( ( hitPacket[ iRT ].m_HitInfo.m_HitNormal + hitPacket[ iRB ].m_HitInfo.m_HitNormal ) * 0.5f ); - cRTB = CCOLORRGB( shadeHit( bgColorY, rayRTB, hitInfoRTB, false, 0, + cRTB = COLOR_RGB( shadeHit( bgColorY, rayRTB, hitInfoRTB, false, 0, false ) ); cRTB = BlendColor( cRTB, BlendColor( cRT, cRB ) ); } @@ -1327,7 +1325,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) if( hittedRTB ) { - cRTB = CCOLORRGB( shadeHit( bgColorY, rayRTB, hitInfoRTB, + cRTB = COLOR_RGB( shadeHit( bgColorY, rayRTB, hitInfoRTB, false, 0, false) ); } else @@ -1335,7 +1333,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) hitInfoRTB.m_tHit = std::numeric_limits::infinity(); if( m_accelerator->Intersect( rayRTB, hitInfoRTB ) ) - cRTB = CCOLORRGB( shadeHit( bgColorY, rayRTB, hitInfoRTB, + cRTB = COLOR_RGB( shadeHit( bgColorY, rayRTB, hitInfoRTB, false, 0, false ) ); } } @@ -1344,10 +1342,10 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) cRTB_old = cRTB; // Trace and shade cLRB - CCOLORRGB cLRB = bgColorYRGB; + COLOR_RGB cLRB = bgColorYRGB; - const SFVEC3F &oriLB = blockPacket.m_ray[ iLB ].m_Origin; - const SFVEC3F &dirLB = blockPacket.m_ray[ iLB ].m_Dir; + const SFVEC3F& oriLB = blockPacket.m_ray[ iLB ].m_Origin; + const SFVEC3F& dirLB = blockPacket.m_ray[ iLB ].m_Dir; // Trace the center ray RAY rayLRB; @@ -1370,7 +1368,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) glm::normalize( ( hitPacket[ iLB ].m_HitInfo.m_HitNormal + hitPacket[ iRB ].m_HitInfo.m_HitNormal ) * 0.5f ); - cLRB = CCOLORRGB( shadeHit( bgColorY, rayLRB, hitInfoLRB, false, 0, + cLRB = COLOR_RGB( shadeHit( bgColorY, rayLRB, hitInfoLRB, false, 0, false ) ); cLRB = BlendColor( cLRB, BlendColor( cLB, cRB ) ); } @@ -1396,7 +1394,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) if( hittedLRB ) { - cLRB = CCOLORRGB( shadeHit( bgColorY, rayLRB, hitInfoLRB, + cLRB = COLOR_RGB( shadeHit( bgColorY, rayLRB, hitInfoLRB, false, 0, false ) ); } else @@ -1404,7 +1402,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) hitInfoLRB.m_tHit = std::numeric_limits::infinity(); if( m_accelerator->Intersect( rayLRB, hitInfoLRB ) ) - cLRB = CCOLORRGB( shadeHit( bgColorY, rayLRB, hitInfoLRB, + cLRB = COLOR_RGB( shadeHit( bgColorY, rayLRB, hitInfoLRB, false, 0, false ) ); } } @@ -1413,7 +1411,7 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) cLRB_old[x] = cLRB; // Trace and shade cLTC - CCOLORRGB cLTC = BlendColor( cLT , cC ); + COLOR_RGB cLTC = BlendColor( cLT , cC ); if( hitPacket[ iLT ].m_hitresult || hittedC ) { @@ -1435,12 +1433,12 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) hitInfoLTC ); if( hitted ) - cLTC = CCOLORRGB( shadeHit( bgColorY, rayLTC, hitInfoLTC, false, + cLTC = COLOR_RGB( shadeHit( bgColorY, rayLTC, hitInfoLTC, false, 0, false ) ); } // Trace and shade cRTC - CCOLORRGB cRTC = BlendColor( cRT , cC ); + COLOR_RGB cRTC = BlendColor( cRT , cC ); if( hitPacket[ iRT ].m_hitresult || hittedC ) { @@ -1461,12 +1459,12 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) hitInfoRTC ); if( hitted ) - cRTC = CCOLORRGB( shadeHit( bgColorY, rayRTC, hitInfoRTC, false, + cRTC = COLOR_RGB( shadeHit( bgColorY, rayRTC, hitInfoRTC, false, 0, false ) ); } // Trace and shade cLBC - CCOLORRGB cLBC = BlendColor( cLB , cC ); + COLOR_RGB cLBC = BlendColor( cLB , cC ); if( hitPacket[ iLB ].m_hitresult || hittedC ) { @@ -1487,12 +1485,12 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) hitInfoLBC ); if( hitted ) - cLBC = CCOLORRGB( shadeHit( bgColorY, rayLBC, hitInfoLBC, false, + cLBC = COLOR_RGB( shadeHit( bgColorY, rayLBC, hitInfoLBC, false, 0, false ) ); } // Trace and shade cRBC - CCOLORRGB cRBC = BlendColor( cRB , cC ); + COLOR_RGB cRBC = BlendColor( cRB , cC ); if( hitPacket[ iRB ].m_hitresult || hittedC ) { @@ -1513,12 +1511,12 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) hitInfoRBC ); if( hitted ) - cRBC = CCOLORRGB( shadeHit( bgColorY, rayRBC, hitInfoRBC, false, + cRBC = COLOR_RGB( shadeHit( bgColorY, rayRBC, hitInfoRBC, false, 0, false ) ); } // Set pixel colors - GLubyte *ptr = &ptrPBO[ (4 * x + m_blockPositionsFast[iBlock].x + + GLubyte* ptr = &ptrPBO[ (4 * x + m_blockPositionsFast[iBlock].x + m_realBufferSize.x * (m_blockPositionsFast[iBlock].y + 4 * y)) * 4 ]; SetPixel( ptr + 0, cLT ); @@ -1560,12 +1558,12 @@ void C3D_RENDER_RAYTRACING::render_preview( GLubyte* ptrPBO ) #define USE_EXPERIMENTAL_SOFT_SHADOWS 1 -SFVEC3F C3D_RENDER_RAYTRACING::shadeHit( const SFVEC3F& aBgColor, const RAY& aRay, - HITINFO& aHitInfo, bool aIsInsideObject, - unsigned int aRecursiveLevel, bool is_testShadow ) const +SFVEC3F RENDER_3D_RAYTRACE::shadeHit( const SFVEC3F& aBgColor, const RAY& aRay, HITINFO& aHitInfo, + bool aIsInsideObject, unsigned int aRecursiveLevel, + bool is_testShadow ) const { - const CMATERIAL *objMaterial = aHitInfo.pHitObject->GetMaterial(); - wxASSERT( objMaterial != NULL ); + const MATERIAL* objMaterial = aHitInfo.pHitObject->GetMaterial(); + wxASSERT( objMaterial != nullptr ); SFVEC3F outColor = objMaterial->GetEmissiveColor() + objMaterial->GetAmbientColor(); @@ -1578,7 +1576,7 @@ SFVEC3F C3D_RENDER_RAYTRACING::shadeHit( const SFVEC3F& aBgColor, const RAY& aRa const SFVEC3F diffuseColorObj = aHitInfo.pHitObject->GetDiffuseColor( aHitInfo ); - const LIST_LIGHT &lightList = m_lights.GetList(); + const LIST_LIGHT& lightList = m_lights.GetList(); #if USE_EXPERIMENTAL_SOFT_SHADOWS const bool is_aa_enabled = m_boardAdapter.GetFlag( FL_RENDER_RAYTRACING_ANTI_ALIASING ) && @@ -1591,7 +1589,7 @@ SFVEC3F C3D_RENDER_RAYTRACING::shadeHit( const SFVEC3F& aBgColor, const RAY& aRa for( LIST_LIGHT::const_iterator ii = lightList.begin(); ii != lightList.end(); ++ii ) { - const CLIGHT *light = (CLIGHT *)*ii; + const LIGHT* light = (LIGHT *)*ii; SFVEC3F vectorToLight; SFVEC3F colorOfLight; @@ -1821,13 +1819,12 @@ SFVEC3F C3D_RENDER_RAYTRACING::shadeHit( const SFVEC3F& aBgColor, const RAY& aRa } } - outColor = outColor * (1.0f - objTransparency) + - objTransparency * sum_color / - SFVEC3F( (float)refractions_number_of_samples); + outColor = outColor * ( 1.0f - objTransparency ) + objTransparency * sum_color + / SFVEC3F( (float) refractions_number_of_samples ); } else { - outColor = outColor * (1.0f - objTransparency) + objTransparency * aBgColor; + outColor = outColor * ( 1.0f - objTransparency ) + objTransparency * aBgColor; } } } @@ -1839,13 +1836,13 @@ SFVEC3F C3D_RENDER_RAYTRACING::shadeHit( const SFVEC3F& aBgColor, const RAY& aRa } -void C3D_RENDER_RAYTRACING::initializeNewWindowSize() +void RENDER_3D_RAYTRACE::initializeNewWindowSize() { opengl_init_pbo(); } -void C3D_RENDER_RAYTRACING::opengl_init_pbo() +void RENDER_3D_RAYTRACE::opengl_init_pbo() { if( GLEW_ARB_pixel_buffer_object ) { @@ -1869,12 +1866,12 @@ void C3D_RENDER_RAYTRACING::opengl_init_pbo() glBindBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, 0 ); wxLogTrace( m_logTrace, - wxT( "C3D_RENDER_RAYTRACING:: GLEW_ARB_pixel_buffer_object is supported" ) ); + wxT( "RENDER_3D_RAYTRACE:: GLEW_ARB_pixel_buffer_object is supported" ) ); } } -bool C3D_RENDER_RAYTRACING::initializeOpenGL() +bool RENDER_3D_RAYTRACE::initializeOpenGL() { m_is_opengl_initialized = true; @@ -1890,7 +1887,7 @@ static float distance( const SFVEC2UI& a, const SFVEC2UI& b ) } -void C3D_RENDER_RAYTRACING::initialize_block_positions() +void RENDER_3D_RAYTRACE::initialize_block_positions() { m_realBufferSize = SFVEC2UI( 0 ); @@ -1964,7 +1961,7 @@ void C3D_RENDER_RAYTRACING::initialize_block_positions() } -BOARD_ITEM* C3D_RENDER_RAYTRACING::IntersectBoardItem( const RAY& aRay ) +BOARD_ITEM* RENDER_3D_RAYTRACE::IntersectBoardItem( const RAY& aRay ) { HITINFO hitInfo; hitInfo.m_tHit = std::numeric_limits::infinity(); diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_raytracing.h b/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_raytracing.h index 6f3db18037..7130ae2255 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_raytracing.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_raytracing.h @@ -24,11 +24,10 @@ /** * @file c3d_render_raytracing.h - * @brief */ -#ifndef C3D_RENDER_RAYTRACING_H -#define C3D_RENDER_RAYTRACING_H +#ifndef RENDER_3D_RAYTRACE_H +#define RENDER_3D_RAYTRACE_H #include "../../common_ogl/openGL_includes.h" #include "accelerators/ccontainer.h" @@ -42,10 +41,10 @@ #include /// Vector of materials -typedef std::vector< CBLINN_PHONG_MATERIAL > MODEL_MATERIALS; +typedef std::vector< BLINN_PHONG_MATERIAL > MODEL_MATERIALS; -/// Maps a S3DMODEL pointer with a created CBLINN_PHONG_MATERIAL vector -typedef std::map< const S3DMODEL * , MODEL_MATERIALS > MAP_MODEL_MATERIALS; +/// Maps a S3DMODEL pointer with a created BLINN_PHONG_MATERIAL vector +typedef std::map< const S3DMODEL* , MODEL_MATERIALS > MAP_MODEL_MATERIALS; typedef enum { @@ -57,15 +56,15 @@ typedef enum } RT_RENDER_STATE; -class C3D_RENDER_RAYTRACING : public C3D_RENDER_BASE +class RENDER_3D_RAYTRACE : public RENDER_3D_BASE { public: - explicit C3D_RENDER_RAYTRACING( BOARD_ADAPTER& aAdapter, CCAMERA& aCamera ); + explicit RENDER_3D_RAYTRACE( BOARD_ADAPTER& aAdapter, CAMERA& aCamera ); - ~C3D_RENDER_RAYTRACING(); + ~RENDER_3D_RAYTRACE(); - // Imported from C3D_RENDER_BASE - void SetCurWindowSize( const wxSize &aSize ) override; + // Imported from RENDER_3D_BASE + void SetCurWindowSize( const wxSize& aSize ) override; bool Redraw( bool aIsMoving, REPORTER* aStatusReporter, REPORTER* aWarningReporter ) override; int GetWaitForEditingTimeOut() override; @@ -73,97 +72,82 @@ public: void Reload( REPORTER* aStatusReporter, REPORTER* aWarningReporter, bool aOnlyLoadCopperAndShapes ); - BOARD_ITEM *IntersectBoardItem( const RAY &aRay ); + BOARD_ITEM *IntersectBoardItem( const RAY& aRay ); private: bool initializeOpenGL(); void initializeNewWindowSize(); void opengl_init_pbo(); void opengl_delete_pbo(); - void createItemsFromContainer( const CBVHCONTAINER2D *aContainer2d, - PCB_LAYER_ID aLayer_id, - const CMATERIAL *aMaterialLayer, - const SFVEC3F &aLayerColor, + void createItemsFromContainer( const BVH_CONTAINER_2D* aContainer2d, PCB_LAYER_ID aLayer_id, + const MATERIAL* aMaterialLayer, const SFVEC3F& aLayerColor, float aLayerZOffset ); void restart_render_state(); void rt_render_tracing( GLubyte* ptrPBO, REPORTER* aStatusReporter ); void rt_render_post_process_shade( GLubyte* ptrPBO, REPORTER* aStatusReporter ); void rt_render_post_process_blur_finish( GLubyte* ptrPBO, REPORTER* aStatusReporter ); - void rt_render_trace_block( GLubyte *ptrPBO , signed int iBlock ); - void rt_final_color( GLubyte *ptrPBO, const SFVEC3F &rgbColor, bool applyColorSpaceConversion ); + void rt_render_trace_block( GLubyte* ptrPBO , signed int iBlock ); + void rt_final_color( GLubyte* ptrPBO, const SFVEC3F& rgbColor, bool applyColorSpaceConversion ); - void rt_shades_packet( const SFVEC3F *bgColorY, - const RAY *aRayPkt, - HITINFO_PACKET *aHitPacket, - bool is_testShadow, - SFVEC3F *aOutHitColor ); + void rt_shades_packet( const SFVEC3F* bgColorY, const RAY* aRayPkt, HITINFO_PACKET* aHitPacket, + bool is_testShadow, SFVEC3F* aOutHitColor ); - void rt_trace_AA_packet( const SFVEC3F *aBgColorY, - const HITINFO_PACKET *aHitPck_X0Y0, - const HITINFO_PACKET *aHitPck_AA_X1Y1, - const RAY *aRayPck, - SFVEC3F *aOutHitColor ); + void rt_trace_AA_packet( const SFVEC3F* aBgColorY, const HITINFO_PACKET* aHitPck_X0Y0, + const HITINFO_PACKET* aHitPck_AA_X1Y1, const RAY* aRayPck, + SFVEC3F* aOutHitColor ); // Materials void setupMaterials(); - SFVEC3F shadeHit( const SFVEC3F &aBgColor, - const RAY &aRay, - HITINFO &aHitInfo, - bool aIsInsideObject, - unsigned int aRecursiveLevel, + SFVEC3F shadeHit( const SFVEC3F& aBgColor, const RAY& aRay, HITINFO& aHitInfo, + bool aIsInsideObject, unsigned int aRecursiveLevel, bool is_testShadow ) const; /** * Create one or more 3D objects form a 2D object and Z positions. * * It tries to optimize some types of objects that will be faster to trace than the - * CLAYERITEM object. + * LAYER_ITEM object. */ - void create_3d_object_from( CCONTAINER &aDstContainer, - const COBJECT2D *aObject2D, - float aZMin, float aZMax, - const CMATERIAL *aMaterial, - const SFVEC3F &aObjColor ); + void create_3d_object_from( CONTAINER_3D& aDstContainer, const OBJECT_2D* aObject2D, + float aZMin, float aZMax, const MATERIAL* aMaterial, + const SFVEC3F& aObjColor ); void add_3D_vias_and_pads_to_container(); void insert3DViaHole( const VIA* aVia ); void insert3DPadHole( const PAD* aPad ); - void load_3D_models( CCONTAINER &aDstContainer, bool aSkipMaterialInformation ); - void add_3D_models( CCONTAINER &aDstContainer, - const S3DMODEL *a3DModel, - const glm::mat4 &aModelMatrix, - float aFPOpacity, - bool aSkipMaterialInformation, - BOARD_ITEM *aBoardItem ); + void load_3D_models( CONTAINER_3D& aDstContainer, bool aSkipMaterialInformation ); + void add_3D_models( CONTAINER_3D& aDstContainer, const S3DMODEL* a3DModel, + const glm::mat4& aModelMatrix, float aFPOpacity, + bool aSkipMaterialInformation, BOARD_ITEM* aBoardItem ); - MODEL_MATERIALS *get_3D_model_material( const S3DMODEL *a3DModel ); + MODEL_MATERIALS* get_3D_model_material( const S3DMODEL* a3DModel ); void initialize_block_positions(); void render( GLubyte* ptrPBO, REPORTER* aStatusReporter ); - void render_preview( GLubyte *ptrPBO ); + void render_preview( GLubyte* ptrPBO ); struct { - CBLINN_PHONG_MATERIAL m_Paste; - CBLINN_PHONG_MATERIAL m_SilkS; - CBLINN_PHONG_MATERIAL m_SolderMask; - CBLINN_PHONG_MATERIAL m_EpoxyBoard; - CBLINN_PHONG_MATERIAL m_Copper; - CBLINN_PHONG_MATERIAL m_NonPlatedCopper; - CBLINN_PHONG_MATERIAL m_Floor; + BLINN_PHONG_MATERIAL m_Paste; + BLINN_PHONG_MATERIAL m_SilkS; + BLINN_PHONG_MATERIAL m_SolderMask; + BLINN_PHONG_MATERIAL m_EpoxyBoard; + BLINN_PHONG_MATERIAL m_Copper; + BLINN_PHONG_MATERIAL m_NonPlatedCopper; + BLINN_PHONG_MATERIAL m_Floor; } m_materials; - CBOARDNORMAL m_board_normal_perturbator; - CCOPPERNORMAL m_copper_normal_perturbator; - CPLATEDCOPPERNORMAL m_platedcopper_normal_perturbator; - CSOLDERMASKNORMAL m_solder_mask_normal_perturbator; - CPLASTICNORMAL m_plastic_normal_perturbator; - CPLASTICSHINENORMAL m_plastic_shine_normal_perturbator; - CMETALBRUSHEDNORMAL m_brushed_metal_normal_perturbator; - CSILKSCREENNORMAL m_silkscreen_normal_perturbator; + BOARD_NORMAL m_board_normal_perturbator; + COPPER_NORMAL m_copper_normal_perturbator; + PLATED_COPPER_NORMAL m_platedcopper_normal_perturbator; + SOLDER_MASK_NORMAL m_solder_mask_normal_perturbator; + PLASTIC_NORMAL m_plastic_normal_perturbator; + PLASTIC_SHINE_NORMAL m_plastic_shine_normal_perturbator; + BRUSHED_METAL_NORMAL m_brushed_metal_normal_perturbator; + SILK_SCREEN_NORMAL m_silkscreen_normal_perturbator; bool m_isPreview; @@ -176,27 +160,27 @@ private: /// Save the number of blocks progress of the render size_t m_nrBlocksRenderProgress; - CPOSTSHADER_SSAO m_postshader_ssao; + POST_SHADER_SSAO m_postshader_ssao; - CLIGHTCONTAINER m_lights; + LIGHT_SOURCES m_lights; - CDIRECTIONALLIGHT *m_camera_light; + DIRECTIONAL_LIGHT* m_camera_light; bool m_opengl_support_vertex_buffer_object; GLuint m_pboId; GLuint m_pboDataSize; - CCONTAINER m_object_container; + CONTAINER_3D m_object_container; /// This will store the list of created objects special for RT, /// that will be clear in the end - CCONTAINER2D m_containerWithObjectsToDelete; + CONTAINER_2D m_containerWithObjectsToDelete; - CCONTAINER2D *m_outlineBoard2dObjects; - CBVHCONTAINER2D *m_antioutlineBoard2dObjects; + CONTAINER_2D* m_outlineBoard2dObjects; + BVH_CONTAINER_2D* m_antioutlineBoard2dObjects; - CGENERICACCELERATOR *m_accelerator; + ACCELERATOR_3D* m_accelerator; SFVEC3F m_BgColorTop_LinearRGB; SFVEC3F m_BgColorBot_LinearRGB; @@ -218,9 +202,9 @@ private: SFVEC2UI m_realBufferSize; SFVEC2UI m_fastPreviewModeSize; - HITINFO_PACKET *m_firstHitinfo; + HITINFO_PACKET* m_firstHitinfo; - SFVEC3F *m_shaderBuffer; + SFVEC3F* m_shaderBuffer; // Display Offset unsigned int m_xoffset; @@ -237,9 +221,9 @@ private: #define USE_SRGB_SPACE #ifdef USE_SRGB_SPACE -extern SFVEC3F ConvertSRGBToLinear( const SFVEC3F &aSRGBcolor ); +extern SFVEC3F ConvertSRGBToLinear( const SFVEC3F& aSRGBcolor ); #else -#define ConvertSRGBToLinear(v) (v) +#define ConvertSRGBToLinear( v ) ( v ) #endif -#endif // C3D_RENDER_RAYTRACING_H +#endif // RENDER_3D_RAYTRACE_H diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/cfrustum.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/cfrustum.cpp index e50ef43fa4..d24964e680 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/cfrustum.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/cfrustum.cpp @@ -39,10 +39,8 @@ #endif -void CFRUSTUM::GenerateFrustum( const RAY &topLeft, - const RAY &topRight, - const RAY &bottomLeft, - const RAY &bottomRight ) +void FRUSTUM::GenerateFrustum( const RAY& topLeft, const RAY& topRight, const RAY& bottomLeft, + const RAY& bottomRight ) { m_point[0] = topLeft.m_Origin; m_point[1] = topRight.m_Origin; @@ -62,7 +60,7 @@ void CFRUSTUM::GenerateFrustum( const RAY &topLeft, // by Nathan Slobody and Adam Wright // The frustum test is not exllude all the boxes, // when a box is behind and if it is intersecting the planes it will not be discardly but should. -bool CFRUSTUM::Intersect( const CBBOX &aBBox ) const +bool FRUSTUM::Intersect( const BBOX_3D& aBBox ) const { const SFVEC3F box[8] = { aBBox.Min(), aBBox.Max(), @@ -79,8 +77,8 @@ bool CFRUSTUM::Intersect( const CBBOX &aBBox ) const for( unsigned int i = 0; i < 4; ++i ) { - const SFVEC3F &pointPlane = m_point[i]; - const SFVEC3F &normalPlane = m_normals[i]; + const SFVEC3F& pointPlane = m_point[i]; + const SFVEC3F& normalPlane = m_normals[i]; for( unsigned int j = 0; j < 8; ++j ) { diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/cfrustum.h b/3d-viewer/3d_rendering/3d_render_raytracing/cfrustum.h index db20870edc..b4f8b0ac28 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/cfrustum.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/cfrustum.h @@ -27,8 +27,8 @@ * @brief implements a frustum that is used to test ray pack tests */ -#ifndef _CFRUSTUM_H_ -#define _CFRUSTUM_H_ +#ifndef _FRUSTUM_H_ +#define _FRUSTUM_H_ #include "shapes3D/cbbox.h" #include "ray.h" @@ -38,28 +38,19 @@ #if 0 #error not implemented #else -struct CFRUSTUM +struct FRUSTUM { - public: - /** - * @brief GenerateFrustum - * @param topLeft - * @param topRight - * @param bottomLeft - * @param bottomRight - */ - void GenerateFrustum( const RAY &topLeft, - const RAY &topRight, - const RAY &bottomLeft, - const RAY &bottomRight ); + void GenerateFrustum( const RAY& topLeft, const RAY& topRight, const RAY& bottomLeft, + const RAY& bottomRight ); /** - * @brief Intersect - Intersects a bbox with this frustum - * @param aBBox: a bbox to test - * @return true if the bbox intersects this frustum + * Intersect \a aBBox with this frustum. + * + * @param aBBox is a bounding box to test. + * @return true if the bounding box intersects this frustum. */ - bool Intersect( const CBBOX &aBBox ) const; + bool Intersect( const BBOX_3D& aBBox ) const; private: SFVEC3F m_normals[4]; @@ -68,4 +59,4 @@ private: #endif -#endif // _CFRUSTUM_H_ +#endif // _FRUSTUM_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/clight.h b/3d-viewer/3d_rendering/3d_render_raytracing/clight.h index d355435c80..a7792e80a8 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/clight.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/clight.h @@ -23,12 +23,12 @@ */ /** - * @file clight.h + * @file clight.h * @brief declare and implement light types classes */ -#ifndef _CLIGHT_H_ -#define _CLIGHT_H_ +#ifndef _LIGHT_H_ +#define _LIGHT_H_ #include "ray.h" #include "hitinfo.h" @@ -37,12 +37,12 @@ /** * A base light class to derive to implement other light classes. */ -class CLIGHT +class LIGHT { public: - CLIGHT() { m_castShadow = true; } + LIGHT() { m_castShadow = true; } - virtual ~CLIGHT() {} + virtual ~LIGHT() {} /** * Get parameters from this light. @@ -53,10 +53,8 @@ public: * @param aOutLightColor the color of this light * @param aOutDistance the distance from the point to the light */ - virtual void GetLightParameters( const SFVEC3F &aHitPoint, - SFVEC3F &aOutVectorToLight, - SFVEC3F &aOutLightColor, - float &aOutDistance ) const = 0; + virtual void GetLightParameters( const SFVEC3F& aHitPoint, SFVEC3F& aOutVectorToLight, + SFVEC3F& aOutLightColor, float& aOutDistance ) const = 0; void SetCastShadows( bool aCastShadow ) { m_castShadow = aCastShadow; } bool GetCastShadows() const { return m_castShadow; } @@ -67,12 +65,12 @@ protected: /** - * Point light based on http://ogldev.atspace.co.uk/www/tutorial20/tutorial20.html. + * Point light source based on http://ogldev.atspace.co.uk/www/tutorial20/tutorial20.html. */ -class CPOINTLIGHT : public CLIGHT +class POINT_LIGHT : public LIGHT { public: - CPOINTLIGHT( const SFVEC3F &aPos, const SFVEC3F &aColor ) + POINT_LIGHT( const SFVEC3F& aPos, const SFVEC3F& aColor ) { m_position = aPos; m_color = aColor; @@ -82,11 +80,9 @@ public: m_castShadow = true; } - // Imported functions from CLIGHT - void GetLightParameters( const SFVEC3F &aHitPoint, - SFVEC3F &aOutVectorToLight, - SFVEC3F &aOutLightColor, - float &aOutDistance ) const override + // Imported functions from LIGHT + void GetLightParameters( const SFVEC3F& aHitPoint, SFVEC3F& aOutVectorToLight, + SFVEC3F& aOutLightColor, float& aOutDistance ) const override { const SFVEC3F vectorLight = m_position - aHitPoint; @@ -114,12 +110,12 @@ private: /** - * A light based only on a direction vector. + * A light source based only on a directional vector. */ -class CDIRECTIONALLIGHT : public CLIGHT +class DIRECTIONAL_LIGHT : public LIGHT { public: - CDIRECTIONALLIGHT( const SFVEC3F &aDir, const SFVEC3F &aColor ) + DIRECTIONAL_LIGHT( const SFVEC3F& aDir, const SFVEC3F& aColor ) { // Invert light direction and make sure it is normalized m_inv_direction = glm::normalize( -aDir ); @@ -128,16 +124,15 @@ public: } /** - * @brief SetDirection Set directional light orientation - * @param aDir: vector from the light + * Set directional light orientation. + * + * @param aDir is the vector defining the direction of the light source. */ - void SetDirection( const SFVEC3F &aDir ) { m_inv_direction = -aDir; } + void SetDirection( const SFVEC3F& aDir ) { m_inv_direction = -aDir; } - // Imported functions from CLIGHT - void GetLightParameters( const SFVEC3F &aHitPoint, - SFVEC3F &aOutVectorToLight, - SFVEC3F &aOutLightColor, - float &aOutDistance ) const override + // Imported functions from LIGHT + void GetLightParameters( const SFVEC3F& aHitPoint, SFVEC3F& aOutVectorToLight, + SFVEC3F& aOutLightColor, float& aOutDistance ) const override { (void)aHitPoint; // unused @@ -152,34 +147,32 @@ private: }; -typedef std::list< CLIGHT * > LIST_LIGHT; +typedef std::list LIST_LIGHT; /** - * A light container. It will add lights and remove it in the end. + * A container for light sources. * * @todo Do we really need this object? Wouldn't it be cleaner to just use std::list directly? */ -class CLIGHTCONTAINER +class LIGHT_SOURCES { public: - CLIGHTCONTAINER() {} + LIGHT_SOURCES() {} - ~CLIGHTCONTAINER() { Clear(); } + ~LIGHT_SOURCES() { Clear(); } /** - * @brief Clear - Remove all lights from the container + * Remove all lights from the container. */ void Clear() { if( !m_lights.empty() ) { - for( LIST_LIGHT::iterator ii = m_lights.begin(); - ii != m_lights.end(); - ++ii ) + for( LIST_LIGHT::iterator ii = m_lights.begin(); ii != m_lights.end(); ++ii ) { delete *ii; - *ii = NULL; + *ii = nullptr; } m_lights.clear(); @@ -187,23 +180,23 @@ public: } /** - * @brief Add - Add a light to the container - * @param aLight + * Add a light source to the container. */ - void Add( CLIGHT *aLight ) + void Add( LIGHT* aLight ) { if( aLight ) m_lights.push_back( aLight ); } /** - * @brief GetList - get light list of this container + * Get light list of this container. + * * @return a list of lights */ - const LIST_LIGHT &GetList() const { return m_lights; } + const LIST_LIGHT& GetList() const { return m_lights; } private: LIST_LIGHT m_lights; ///< list of lights }; -#endif // _CLIGHT_H_ +#endif // _LIGHT_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.cpp index 05e3ad910d..c39a0f5f48 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.cpp @@ -31,10 +31,10 @@ #include <3d_math.h> #include -int CMATERIAL::m_default_nrsamples_refractions = 4; -int CMATERIAL::m_default_nrsamples_reflections = 3; -int CMATERIAL::m_default_refractions_recursive_levels = 2; -int CMATERIAL::m_default_reflections_recursive_levels = 3; +int MATERIAL::m_default_nrsamples_refractions = 4; +int MATERIAL::m_default_nrsamples_reflections = 3; +int MATERIAL::m_default_refractions_recursive_levels = 2; +int MATERIAL::m_default_reflections_recursive_levels = 3; // This may be a good value if based on nr of lights // that contribute to the illumination of that point @@ -42,7 +42,7 @@ int CMATERIAL::m_default_reflections_recursive_levels = 3; #define SPECULAR_FACTOR 1.0f -CMATERIAL::CMATERIAL() +MATERIAL::MATERIAL() { m_ambientColor = SFVEC3F( 0.2f, 0.2f, 0.2f ); m_emissiveColor = SFVEC3F( 0.0f, 0.0f, 0.0f ); @@ -57,16 +57,12 @@ CMATERIAL::CMATERIAL() m_refractions_recursive_levels = m_default_refractions_recursive_levels; m_reflections_recursive_levels = m_default_reflections_recursive_levels; - m_normal_perturbator = NULL; + m_normal_perturbator = nullptr; } -CMATERIAL::CMATERIAL( const SFVEC3F &aAmbient, - const SFVEC3F &aEmissive, - const SFVEC3F &aSpecular, - float aShinness, - float aTransparency, - float aReflection ) +MATERIAL::MATERIAL( const SFVEC3F& aAmbient, const SFVEC3F& aEmissive, const SFVEC3F& aSpecular, + float aShinness, float aTransparency, float aReflection ) { wxASSERT( aReflection >= 0.0f ); wxASSERT( aReflection <= 1.0f ); @@ -91,13 +87,11 @@ CMATERIAL::CMATERIAL( const SFVEC3F &aAmbient, m_refractions_recursive_levels = m_default_refractions_recursive_levels; m_reflections_recursive_levels = m_default_reflections_recursive_levels; - m_normal_perturbator = NULL; + m_normal_perturbator = nullptr; } -void CMATERIAL::PerturbeNormal( SFVEC3F &aNormal, - const RAY &aRay, - const HITINFO &aHitInfo ) const +void MATERIAL::PerturbeNormal( SFVEC3F& aNormal, const RAY& aRay, const HITINFO& aHitInfo ) const { if( m_normal_perturbator ) { @@ -108,22 +102,15 @@ void CMATERIAL::PerturbeNormal( SFVEC3F &aNormal, // https://en.wikipedia.org/wiki/Blinn%E2%80%93Phong_shading_model -SFVEC3F CBLINN_PHONG_MATERIAL::Shade( const RAY &aRay, - const HITINFO &aHitInfo, - float NdotL, - const SFVEC3F &aDiffuseObjColor, - const SFVEC3F &aDirToLight, - const SFVEC3F &aLightColor, - float aShadowAttenuationFactor ) const +SFVEC3F BLINN_PHONG_MATERIAL::Shade( const RAY& aRay, const HITINFO& aHitInfo, float NdotL, + const SFVEC3F& aDiffuseObjColor, const SFVEC3F& aDirToLight, + const SFVEC3F& aLightColor, + float aShadowAttenuationFactor ) const { wxASSERT( NdotL >= FLT_EPSILON ); // This is a hack to get some kind of fake ambient illumination // There is no logic behind this, just pure artistic experimentation - //const float ambientFactor = glm::max( ( (1.0f - NdotL) /** (1.0f - NdotL)*/ ) * - // ( AMBIENT_FACTOR + AMBIENT_FACTOR ), - // AMBIENT_FACTOR ); - if( aShadowAttenuationFactor > FLT_EPSILON ) { // Calculate the diffuse light factoring in light color, @@ -135,22 +122,18 @@ SFVEC3F CBLINN_PHONG_MATERIAL::Shade( const RAY &aRay, //Intensity of the specular light const float NdotH = glm::dot( H, aHitInfo.m_HitNormal ); - const float intensitySpecular = glm::pow( glm::max( NdotH, 0.0f ), - m_shinness ); + const float intensitySpecular = glm::pow( glm::max( NdotH, 0.0f ), m_shinness ); return m_ambientColor + - aShadowAttenuationFactor * ( diffuse * aDiffuseObjColor + - SPECULAR_FACTOR * - aLightColor * - intensitySpecular * - m_specularColor ); + aShadowAttenuationFactor * ( diffuse * aDiffuseObjColor + SPECULAR_FACTOR * + aLightColor * intensitySpecular * m_specularColor ); } return m_ambientColor; } -CPROCEDURALGENERATOR::CPROCEDURALGENERATOR() +PROCEDURAL_GENERATOR::PROCEDURAL_GENERATOR() { } @@ -158,13 +141,13 @@ CPROCEDURALGENERATOR::CPROCEDURALGENERATOR() static PerlinNoise s_perlinNoise = PerlinNoise( 0 ); -CBOARDNORMAL::CBOARDNORMAL( float aScale ) : CPROCEDURALGENERATOR() +BOARD_NORMAL::BOARD_NORMAL( float aScale ) : PROCEDURAL_GENERATOR() { - m_scale = (2.0f * glm::pi()) / aScale; + m_scale = ( 2.0f * glm::pi() ) / aScale; } -SFVEC3F CBOARDNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) const +SFVEC3F BOARD_NORMAL::Generate( const RAY& aRay, const HITINFO& aHitInfo ) const { const SFVEC3F hitPos = aHitInfo.m_HitPoint * m_scale; @@ -183,14 +166,14 @@ SFVEC3F CBOARDNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) const } -CCOPPERNORMAL::CCOPPERNORMAL( float aScale, const CPROCEDURALGENERATOR *aBoardNormalGenerator ) +COPPER_NORMAL::COPPER_NORMAL( float aScale, const PROCEDURAL_GENERATOR* aBoardNormalGenerator ) { m_board_normal_generator = aBoardNormalGenerator; m_scale = 1.0f / aScale; } -SFVEC3F CCOPPERNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) const +SFVEC3F COPPER_NORMAL::Generate( const RAY& aRay, const HITINFO& aHitInfo ) const { if( m_board_normal_generator ) { @@ -200,9 +183,7 @@ SFVEC3F CCOPPERNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) cons const float noise = ( s_perlinNoise.noise( hitPos.x + boardNormal.y + aRay.m_Origin.x * 0.2f, - hitPos.y + boardNormal.x ) - - 0.5f ) - * 2.0f; + hitPos.y + boardNormal.x ) - 0.5f ) * 2.0f; float scratchPattern = ( s_perlinNoise.noise( noise + hitPos.x / 100.0f, hitPos.y * 100.0f ) - 0.5f ); @@ -219,13 +200,13 @@ SFVEC3F CCOPPERNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) cons } -CSOLDERMASKNORMAL::CSOLDERMASKNORMAL( const CPROCEDURALGENERATOR *aCopperNormalGenerator ) +SOLDER_MASK_NORMAL::SOLDER_MASK_NORMAL( const PROCEDURAL_GENERATOR* aCopperNormalGenerator ) { m_copper_normal_generator = aCopperNormalGenerator; } -SFVEC3F CSOLDERMASKNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) const +SFVEC3F SOLDER_MASK_NORMAL::Generate( const RAY& aRay, const HITINFO& aHitInfo ) const { if( m_copper_normal_generator ) { @@ -235,12 +216,12 @@ SFVEC3F CSOLDERMASKNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) } else { - return SFVEC3F(0.0f); + return SFVEC3F( 0.0f ); } } -SFVEC3F CPLATEDCOPPERNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) const +SFVEC3F PLATED_COPPER_NORMAL::Generate( const RAY& aRay, const HITINFO& aHitInfo ) const { SFVEC3F hitPos = aHitInfo.m_HitPoint * m_scale; @@ -251,26 +232,23 @@ SFVEC3F CPLATEDCOPPERNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo } -CPLASTICNORMAL::CPLASTICNORMAL( float aScale ) +PLASTIC_NORMAL::PLASTIC_NORMAL( float aScale ) { m_scale = 1.0f / aScale; } -SFVEC3F CPLASTICNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) const +SFVEC3F PLASTIC_NORMAL::Generate( const RAY& aRay, const HITINFO& aHitInfo ) const { const SFVEC3F hitPos = aHitInfo.m_HitPoint * m_scale; - const float noise1 = s_perlinNoise.noise( hitPos.x * 1.0f, - hitPos.y * 1.1f, + const float noise1 = s_perlinNoise.noise( hitPos.x * 1.0f, hitPos.y * 1.1f, hitPos.z * 1.2f ) - 0.5f; - const float noise2 = s_perlinNoise.noise( hitPos.x * 1.3f, - hitPos.y * 1.0f, + const float noise2 = s_perlinNoise.noise( hitPos.x * 1.3f, hitPos.y * 1.0f, hitPos.z * 1.5f ) - 0.5f; - const float noise3 = s_perlinNoise.noise( hitPos.x * 1.0f, - hitPos.y * 1.0f, + const float noise3 = s_perlinNoise.noise( hitPos.x * 1.0f, hitPos.y * 1.0f, hitPos.z * 1.8f ) - 0.5f; const float distanceReduction = 1.0f / ( aHitInfo.m_tHit + 0.5f ); @@ -279,26 +257,23 @@ SFVEC3F CPLASTICNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) con } -CPLASTICSHINENORMAL::CPLASTICSHINENORMAL( float aScale ) +PLASTIC_SHINE_NORMAL::PLASTIC_SHINE_NORMAL( float aScale ) { m_scale = 1.0f / aScale; } -SFVEC3F CPLASTICSHINENORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) const +SFVEC3F PLASTIC_SHINE_NORMAL::Generate( const RAY& aRay, const HITINFO& aHitInfo ) const { const SFVEC3F hitPos = aHitInfo.m_HitPoint * m_scale; - const float noise1 = s_perlinNoise.noise( hitPos.x * 0.01f, - hitPos.y * 0.01f, + const float noise1 = s_perlinNoise.noise( hitPos.x * 0.01f, hitPos.y * 0.01f, hitPos.z * 0.01f ) - 0.5f; - const float noise2 = s_perlinNoise.noise( hitPos.x * 1.0f, - hitPos.y * 1.0f, + const float noise2 = s_perlinNoise.noise( hitPos.x * 1.0f, hitPos.y * 1.0f, hitPos.z * 1.6f ) - 0.5f; - float noise3 = s_perlinNoise.noise( hitPos.x * 1.5f, - hitPos.y * 1.5f, + float noise3 = s_perlinNoise.noise( hitPos.x * 1.5f, hitPos.y * 1.5f, hitPos.z * 1.0f ) - 0.5f; noise3 = noise3 * noise3 * noise3; @@ -306,51 +281,42 @@ SFVEC3F CPLASTICSHINENORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo } -CMETALBRUSHEDNORMAL::CMETALBRUSHEDNORMAL( float aScale ) +BRUSHED_METAL_NORMAL::BRUSHED_METAL_NORMAL( float aScale ) { m_scale = 1.0f / aScale; } -SFVEC3F CMETALBRUSHEDNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) const +SFVEC3F BRUSHED_METAL_NORMAL::Generate( const RAY& aRay, const HITINFO& aHitInfo ) const { const SFVEC3F hitPos = aHitInfo.m_HitPoint * m_scale; - const float noise1 = s_perlinNoise.noise( hitPos.x * 1.0f, - hitPos.y * 1.1f, + const float noise1 = s_perlinNoise.noise( hitPos.x * 1.0f, hitPos.y * 1.1f, hitPos.z * 1.2f ) - 0.5f; - const float noise2 = s_perlinNoise.noise( hitPos.x * 1.3f, - hitPos.y * 1.4f, + const float noise2 = s_perlinNoise.noise( hitPos.x * 1.3f, hitPos.y * 1.4f, hitPos.z * 1.5f ) - 0.5f; - const float noise3 = s_perlinNoise.noise( hitPos.x * 0.1f, - hitPos.y * 0.1f, + const float noise3 = s_perlinNoise.noise( hitPos.x * 0.1f, hitPos.y * 0.1f, hitPos.z * 1.0f ) - 0.5f; - return SFVEC3F( noise1 * 0.15f + noise3 * 0.35f, - noise2 * 0.25f, - noise1 * noise2 * noise3 ); + return SFVEC3F( noise1 * 0.15f + noise3 * 0.35f, noise2 * 0.25f, noise1 * noise2 * noise3 ); } -CSILKSCREENNORMAL::CSILKSCREENNORMAL( float aScale ) +SILK_SCREEN_NORMAL::SILK_SCREEN_NORMAL( float aScale ) { m_scale = 1.0f / aScale; } -SFVEC3F CSILKSCREENNORMAL::Generate( const RAY &aRay, const HITINFO &aHitInfo ) const +SFVEC3F SILK_SCREEN_NORMAL::Generate( const RAY& aRay, const HITINFO& aHitInfo ) const { const SFVEC3F hitPos = aHitInfo.m_HitPoint * m_scale; - const float noise1 = s_perlinNoise.noise( hitPos.x * 2.7f, - hitPos.y * 2.6f, - hitPos.z ); + const float noise1 = s_perlinNoise.noise( hitPos.x * 2.7f, hitPos.y * 2.6f, hitPos.z ); - const float noise2 = s_perlinNoise.noise( hitPos.x * 1.1f, - hitPos.y * 1.2f, - hitPos.z ); + const float noise2 = s_perlinNoise.noise( hitPos.x * 1.1f, hitPos.y * 1.2f, hitPos.z ); SFVEC3F t = glm::abs( ( 1.8f / ( SFVEC3F( noise1, noise2, hitPos.z ) + 0.4f ) ) - 1.5f ) - 0.25f; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.h b/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.h index fe688c959b..379e52a0a2 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/cmaterial.h @@ -27,45 +27,47 @@ * @brief */ -#ifndef _CMATERIAL_H_ -#define _CMATERIAL_H_ +#ifndef _MATERIAL_H_ +#define _MATERIAL_H_ #include "ray.h" #include "hitinfo.h" #include "PerlinNoise.h" -/// A base class that can be used to derive a procedural generator implementation -class CPROCEDURALGENERATOR +/** + * A base class that can be used to derive procedurally generated materials. + */ +class PROCEDURAL_GENERATOR { public: - CPROCEDURALGENERATOR(); + PROCEDURAL_GENERATOR(); - virtual ~CPROCEDURALGENERATOR() + virtual ~PROCEDURAL_GENERATOR() { } /** - * Generates a 3D vector based on the ray and* hit information depending on the implementation. + * Generate a 3D vector based on the ray and hit information depending on the implementation. * * @param aRay the camera ray that hits the object * @param aHitInfo the hit information * @return the result of the procedural */ - virtual SFVEC3F Generate( const RAY &aRay, const HITINFO &aHitInfo ) const = 0; + virtual SFVEC3F Generate( const RAY& aRay, const HITINFO& aHitInfo ) const = 0; }; -class CBOARDNORMAL : public CPROCEDURALGENERATOR +class BOARD_NORMAL : public PROCEDURAL_GENERATOR { public: - CBOARDNORMAL() : CPROCEDURALGENERATOR() { m_scale = 1.0f; } - CBOARDNORMAL( float aScale ); + BOARD_NORMAL() : PROCEDURAL_GENERATOR() { m_scale = 1.0f; } + BOARD_NORMAL( float aScale ); - virtual ~CBOARDNORMAL() + virtual ~BOARD_NORMAL() { } - SFVEC3F Generate( const RAY &aRay, const HITINFO &aHitInfo ) const override; + SFVEC3F Generate( const RAY& aRay, const HITINFO& aHitInfo ) const override; private: float m_scale; @@ -75,169 +77,171 @@ private: /** * Procedural generation of the copper normals. */ -class CCOPPERNORMAL : public CPROCEDURALGENERATOR +class COPPER_NORMAL : public PROCEDURAL_GENERATOR { public: - CCOPPERNORMAL() : CPROCEDURALGENERATOR() + COPPER_NORMAL() : PROCEDURAL_GENERATOR() { - m_board_normal_generator = NULL; + m_board_normal_generator = nullptr; m_scale = 1.0f; } - CCOPPERNORMAL( float aScale, const CPROCEDURALGENERATOR *aBoardNormalGenerator ); + COPPER_NORMAL( float aScale, const PROCEDURAL_GENERATOR* aBoardNormalGenerator ); - virtual ~CCOPPERNORMAL() + virtual ~COPPER_NORMAL() { } - SFVEC3F Generate( const RAY &aRay, const HITINFO &aHitInfo ) const override; + SFVEC3F Generate( const RAY& aRay, const HITINFO& aHitInfo ) const override; private: - const CPROCEDURALGENERATOR *m_board_normal_generator; + const PROCEDURAL_GENERATOR* m_board_normal_generator; float m_scale; }; -class CPLATEDCOPPERNORMAL : public CPROCEDURALGENERATOR +class PLATED_COPPER_NORMAL : public PROCEDURAL_GENERATOR { public: - CPLATEDCOPPERNORMAL() : CPROCEDURALGENERATOR() + PLATED_COPPER_NORMAL() : PROCEDURAL_GENERATOR() { m_scale = 1.0f; } - CPLATEDCOPPERNORMAL( float aScale ) + PLATED_COPPER_NORMAL( float aScale ) { m_scale = 1.0f / aScale; } - virtual ~CPLATEDCOPPERNORMAL() + virtual ~PLATED_COPPER_NORMAL() { } - SFVEC3F Generate( const RAY &aRay, const HITINFO &aHitInfo ) const override; + SFVEC3F Generate( const RAY& aRay, const HITINFO& aHitInfo ) const override; + private: - float m_scale; + float m_scale; }; /** * Procedural generation of the solder mask. */ -class CSOLDERMASKNORMAL : public CPROCEDURALGENERATOR +class SOLDER_MASK_NORMAL : public PROCEDURAL_GENERATOR { public: - CSOLDERMASKNORMAL() : CPROCEDURALGENERATOR() { m_copper_normal_generator = NULL; } - CSOLDERMASKNORMAL( const CPROCEDURALGENERATOR *aCopperNormalGenerator ); + SOLDER_MASK_NORMAL() : PROCEDURAL_GENERATOR() { m_copper_normal_generator = nullptr; } + SOLDER_MASK_NORMAL( const PROCEDURAL_GENERATOR* aCopperNormalGenerator ); - virtual ~CSOLDERMASKNORMAL() + virtual ~SOLDER_MASK_NORMAL() { } - SFVEC3F Generate( const RAY &aRay, const HITINFO &aHitInfo ) const override; + SFVEC3F Generate( const RAY& aRay, const HITINFO& aHitInfo ) const override; private: - const CPROCEDURALGENERATOR *m_copper_normal_generator; + const PROCEDURAL_GENERATOR* m_copper_normal_generator; }; /** * Procedural generation of the plastic normals. */ -class CPLASTICNORMAL : public CPROCEDURALGENERATOR +class PLASTIC_NORMAL : public PROCEDURAL_GENERATOR { public: - CPLASTICNORMAL() : CPROCEDURALGENERATOR() + PLASTIC_NORMAL() : PROCEDURAL_GENERATOR() { m_scale = 1.0f; } - CPLASTICNORMAL( float aScale ); + PLASTIC_NORMAL( float aScale ); - virtual ~CPLASTICNORMAL() + virtual ~PLASTIC_NORMAL() { } - SFVEC3F Generate( const RAY &aRay, const HITINFO &aHitInfo ) const override; + SFVEC3F Generate( const RAY& aRay, const HITINFO& aHitInfo ) const override; private: - float m_scale; + float m_scale; }; /** * Procedural generation of the shiny plastic normals. */ -class CPLASTICSHINENORMAL : public CPROCEDURALGENERATOR +class PLASTIC_SHINE_NORMAL : public PROCEDURAL_GENERATOR { public: - CPLASTICSHINENORMAL() : CPROCEDURALGENERATOR() + PLASTIC_SHINE_NORMAL() : PROCEDURAL_GENERATOR() { m_scale = 1.0f; } - CPLASTICSHINENORMAL( float aScale ); + PLASTIC_SHINE_NORMAL( float aScale ); - virtual ~CPLASTICSHINENORMAL() + virtual ~PLASTIC_SHINE_NORMAL() { } - // Imported from CPROCEDURALGENERATOR - SFVEC3F Generate( const RAY &aRay, - const HITINFO &aHitInfo ) const override; + // Imported from PROCEDURAL_GENERATOR + SFVEC3F Generate( const RAY& aRay, const HITINFO& aHitInfo ) const override; + private: - float m_scale; + float m_scale; }; + /** * Procedural generation of the shiny brushed metal. */ -class CMETALBRUSHEDNORMAL : public CPROCEDURALGENERATOR +class BRUSHED_METAL_NORMAL : public PROCEDURAL_GENERATOR { public: - CMETALBRUSHEDNORMAL() : CPROCEDURALGENERATOR() + BRUSHED_METAL_NORMAL() : PROCEDURAL_GENERATOR() { m_scale = 1.0f; } - CMETALBRUSHEDNORMAL( float aScale ); + BRUSHED_METAL_NORMAL( float aScale ); - virtual ~CMETALBRUSHEDNORMAL() + virtual ~BRUSHED_METAL_NORMAL() { } - SFVEC3F Generate( const RAY &aRay, const HITINFO &aHitInfo ) const override; + SFVEC3F Generate( const RAY& aRay, const HITINFO& aHitInfo ) const override; private: - float m_scale; + float m_scale; }; -class CSILKSCREENNORMAL : public CPROCEDURALGENERATOR +class SILK_SCREEN_NORMAL : public PROCEDURAL_GENERATOR { public: - CSILKSCREENNORMAL() : CPROCEDURALGENERATOR() + SILK_SCREEN_NORMAL() : PROCEDURAL_GENERATOR() { m_scale = 1.0f; } - CSILKSCREENNORMAL( float aScale ); + SILK_SCREEN_NORMAL( float aScale ); - virtual ~CSILKSCREENNORMAL() + virtual ~SILK_SCREEN_NORMAL() { } - SFVEC3F Generate( const RAY &aRay, const HITINFO &aHitInfo ) const override; + SFVEC3F Generate( const RAY& aRay, const HITINFO& aHitInfo ) const override; private: - float m_scale; + float m_scale; }; /** * Base material class that can be used to derive other material implementations. */ -class CMATERIAL +class MATERIAL { public: static void SetDefaultNrRefractionsSamples( unsigned int aNrRefractions ) @@ -260,19 +264,15 @@ public: m_default_reflections_recursive_levels = aReflectionLevel; } - CMATERIAL(); - CMATERIAL( const SFVEC3F &aAmbient, - const SFVEC3F &aEmissive, - const SFVEC3F &aSpecular, - float aShinness, - float aTransparency, - float aReflection ); + MATERIAL(); + MATERIAL( const SFVEC3F& aAmbient, const SFVEC3F& aEmissive, const SFVEC3F& aSpecular, + float aShinness, float aTransparency, float aReflection ); - virtual ~CMATERIAL() {} + virtual ~MATERIAL() {} - const SFVEC3F &GetAmbientColor() const { return m_ambientColor; } - const SFVEC3F &GetEmissiveColor() const { return m_emissiveColor; } - const SFVEC3F &GetSpecularColor() const { return m_specularColor; } + const SFVEC3F& GetAmbientColor() const { return m_ambientColor; } + const SFVEC3F& GetEmissiveColor() const { return m_emissiveColor; } + const SFVEC3F& GetSpecularColor() const { return m_specularColor; } float GetShinness() const { return m_shinness; } float GetTransparency() const { return m_transparency; } @@ -325,22 +325,19 @@ public: * @param aShadowAttenuationFactor 0.0f total in shadow, 1.0f completely not in shadow * @return the resultant color */ - virtual SFVEC3F Shade( const RAY &aRay, - const HITINFO &aHitInfo, - float NdotL, - const SFVEC3F &aDiffuseObjColor, - const SFVEC3F &aDirToLight, - const SFVEC3F &aLightColor, + virtual SFVEC3F Shade( const RAY& aRay, const HITINFO& aHitInfo, float NdotL, + const SFVEC3F& aDiffuseObjColor, const SFVEC3F& aDirToLight, + const SFVEC3F& aLightColor, float aShadowAttenuationFactor ) const = 0; - void SetNormalPerturbator( const CPROCEDURALGENERATOR *aPerturbator ) + void SetNormalPerturbator( const PROCEDURAL_GENERATOR* aPerturbator ) { m_normal_perturbator = aPerturbator; } - const CPROCEDURALGENERATOR *GetNormalPerturbator() const { return m_normal_perturbator; } + const PROCEDURAL_GENERATOR* GetNormalPerturbator() const { return m_normal_perturbator; } - void PerturbeNormal( SFVEC3F &aNormal, const RAY &aRay, const HITINFO &aHitInfo ) const; + void PerturbeNormal( SFVEC3F& aNormal, const RAY& aRay, const HITINFO& aHitInfo ) const; protected: SFVEC3F m_ambientColor; @@ -371,7 +368,7 @@ protected: ///< Number of levels it allows for reflection recursiveness. unsigned int m_reflections_recursive_levels; - const CPROCEDURALGENERATOR *m_normal_perturbator; + const PROCEDURAL_GENERATOR* m_normal_perturbator; private: static int m_default_nrsamples_refractions; @@ -383,31 +380,20 @@ private: /// Blinn Phong based material /// https://en.wikipedia.org/wiki/Blinn%E2%80%93Phong_shading_model -class CBLINN_PHONG_MATERIAL : public CMATERIAL +class BLINN_PHONG_MATERIAL : public MATERIAL { public: - CBLINN_PHONG_MATERIAL() : CMATERIAL() {} + BLINN_PHONG_MATERIAL() : MATERIAL() {} - CBLINN_PHONG_MATERIAL( const SFVEC3F &aAmbient, - const SFVEC3F &aEmissive, - const SFVEC3F &aSpecular, - float aShinness, - float aTransparency, - float aReflection ) : CMATERIAL( aAmbient, - aEmissive, - aSpecular, - aShinness, - aTransparency, - aReflection ) {} + BLINN_PHONG_MATERIAL( const SFVEC3F& aAmbient, const SFVEC3F& aEmissive, + const SFVEC3F& aSpecular, float aShinness, float aTransparency, + float aReflection ) : + MATERIAL( aAmbient, aEmissive, aSpecular, aShinness, aTransparency, aReflection ) {} - // Imported from CMATERIAL - SFVEC3F Shade( const RAY &aRay, - const HITINFO &aHitInfo, - float NdotL, - const SFVEC3F &aDiffuseObjColor, - const SFVEC3F &aDirToLight, - const SFVEC3F &aLightColor, - float aShadowAttenuationFactor ) const override; + // Imported from MATERIAL + SFVEC3F Shade( const RAY& aRay, const HITINFO& aHitInfo, float NdotL, + const SFVEC3F& aDiffuseObjColor, const SFVEC3F& aDirToLight, + const SFVEC3F& aLightColor, float aShadowAttenuationFactor ) const override; }; -#endif // _CMATERIAL_H_ +#endif // _MATERIAL_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/hitinfo.h b/3d-viewer/3d_rendering/3d_render_raytracing/hitinfo.h index dea6caa222..e5f865c790 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/hitinfo.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/hitinfo.h @@ -34,7 +34,7 @@ //#define RAYTRACING_RAY_STATISTICS -class COBJECT; +class OBJECT_3D; /// Stores the hit information of a ray with a point on the surface of a object struct HITINFO @@ -42,7 +42,7 @@ struct HITINFO SFVEC3F m_HitNormal; ///< (12) normal at the hit point float m_tHit; ///< ( 4) distance - const COBJECT *pHitObject; ///< ( 4) Object that was hitted + const OBJECT_3D* pHitObject; ///< ( 4) Object that was hitted SFVEC2F m_UV; ///< ( 8) 2-D texture coordinates unsigned int m_acc_node_info; ///< ( 4) The acc stores here the node that it hits diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/raypacket.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/raypacket.cpp index fa1421fab2..4b637cd33e 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/raypacket.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/raypacket.cpp @@ -32,7 +32,7 @@ #include -static void RAYPACKET_GenerateFrustum( CFRUSTUM *m_Frustum, RAY *m_ray ) +static void RAYPACKET_GenerateFrustum( FRUSTUM* m_Frustum, RAY* m_ray ) { m_Frustum->GenerateFrustum( m_ray[ 0 * RAYPACKET_DIM + 0 ], @@ -42,7 +42,7 @@ static void RAYPACKET_GenerateFrustum( CFRUSTUM *m_Frustum, RAY *m_ray ) } -RAYPACKET::RAYPACKET( const CCAMERA &aCamera, const SFVEC2I &aWindowsPosition ) +RAYPACKET::RAYPACKET( const CAMERA& aCamera, const SFVEC2I& aWindowsPosition ) { unsigned int i = 0; @@ -53,8 +53,7 @@ RAYPACKET::RAYPACKET( const CCAMERA &aCamera, const SFVEC2I &aWindowsPosition ) SFVEC3F rayOrigin; SFVEC3F rayDir; - aCamera.MakeRay( SFVEC2I( aWindowsPosition.x + x, - aWindowsPosition.y + y ), + aCamera.MakeRay( SFVEC2I( aWindowsPosition.x + x, aWindowsPosition.y + y ), rayOrigin, rayDir ); m_ray[i].Init( rayOrigin, rayDir ); @@ -69,8 +68,7 @@ RAYPACKET::RAYPACKET( const CCAMERA &aCamera, const SFVEC2I &aWindowsPosition ) } -RAYPACKET::RAYPACKET( const CCAMERA &aCamera, - const SFVEC2F &aWindowsPosition ) +RAYPACKET::RAYPACKET( const CAMERA& aCamera, const SFVEC2F& aWindowsPosition ) { RAYPACKET_InitRays( aCamera, aWindowsPosition, m_ray ); @@ -78,9 +76,8 @@ RAYPACKET::RAYPACKET( const CCAMERA &aCamera, } -RAYPACKET::RAYPACKET( const CCAMERA &aCamera, - const SFVEC2F &aWindowsPosition, - const SFVEC2F &a2DWindowsPosDisplacementFactor ) +RAYPACKET::RAYPACKET( const CAMERA& aCamera, const SFVEC2F& aWindowsPosition, + const SFVEC2F& a2DWindowsPosDisplacementFactor ) { RAYPACKET_InitRays_with2DDisplacement( aCamera, aWindowsPosition, @@ -91,9 +88,8 @@ RAYPACKET::RAYPACKET( const CCAMERA &aCamera, } -RAYPACKET::RAYPACKET( const CCAMERA &aCamera, - const SFVEC2I &aWindowsPosition, - const SFVEC3F &aDirectionDisplacementFactor ) +RAYPACKET::RAYPACKET( const CAMERA& aCamera, const SFVEC2I& aWindowsPosition, + const SFVEC3F& aDirectionDisplacementFactor ) { unsigned int i = 0; @@ -123,8 +119,7 @@ RAYPACKET::RAYPACKET( const CCAMERA &aCamera, } -RAYPACKET::RAYPACKET( const CCAMERA &aCamera, - const SFVEC2I &aWindowsPosition, +RAYPACKET::RAYPACKET( const CAMERA& aCamera, const SFVEC2I& aWindowsPosition, unsigned int aPixelMultiple ) { unsigned int i = 0; @@ -152,9 +147,7 @@ RAYPACKET::RAYPACKET( const CCAMERA &aCamera, } -void RAYPACKET_InitRays( const CCAMERA &aCamera, - const SFVEC2F &aWindowsPosition, - RAY *aRayPck ) +void RAYPACKET_InitRays( const CAMERA& aCamera, const SFVEC2F& aWindowsPosition, RAY* aRayPck ) { for( unsigned int y = 0, i = 0; y < RAYPACKET_DIM; ++y ) { @@ -173,10 +166,9 @@ void RAYPACKET_InitRays( const CCAMERA &aCamera, } -void RAYPACKET_InitRays_with2DDisplacement( const CCAMERA &aCamera, - const SFVEC2F &aWindowsPosition, - const SFVEC2F &a2DWindowsPosDisplacementFactor, - RAY *aRayPck ) +void RAYPACKET_InitRays_with2DDisplacement( const CAMERA& aCamera, const SFVEC2F& aWindowsPosition, + const SFVEC2F& a2DWindowsPosDisplacementFactor, + RAY* aRayPck ) { for( unsigned int y = 0, i = 0; y < RAYPACKET_DIM; ++y ) { diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/raypacket.h b/3d-viewer/3d_rendering/3d_render_raytracing/raypacket.h index daaf474b13..b90e974cbc 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/raypacket.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/raypacket.h @@ -35,34 +35,33 @@ #include "../ccamera.h" #define RAYPACKET_DIM (1 << 3) -#define RAYPACKET_MASK (unsigned int)( (RAYPACKET_DIM - 1)) -#define RAYPACKET_INVMASK (unsigned int)(~(RAYPACKET_DIM - 1)) -#define RAYPACKET_RAYS_PER_PACKET (RAYPACKET_DIM * RAYPACKET_DIM) +#define RAYPACKET_MASK (unsigned int) ( ( RAYPACKET_DIM - 1 ) ) +#define RAYPACKET_INVMASK (unsigned int) ( ~( RAYPACKET_DIM - 1 ) ) +#define RAYPACKET_RAYS_PER_PACKET ( RAYPACKET_DIM * RAYPACKET_DIM ) struct RAYPACKET { - RAYPACKET( const CCAMERA& aCamera, const SFVEC2I& aWindowsPosition ); + RAYPACKET( const CAMERA& aCamera, const SFVEC2I& aWindowsPosition ); - RAYPACKET( const CCAMERA& aCamera, const SFVEC2I& aWindowsPosition, + RAYPACKET( const CAMERA& aCamera, const SFVEC2I& aWindowsPosition, const SFVEC3F& aDirectionDisplacementFactor ); - RAYPACKET( const CCAMERA& aCamera, const SFVEC2I& aWindowsPosition, + RAYPACKET( const CAMERA& aCamera, const SFVEC2I& aWindowsPosition, unsigned int aPixelMultiple ); - RAYPACKET( const CCAMERA& aCamera, const SFVEC2F& aWindowsPosition ); + RAYPACKET( const CAMERA& aCamera, const SFVEC2F& aWindowsPosition ); - RAYPACKET( const CCAMERA& aCamera, const SFVEC2F& aWindowsPosition, + RAYPACKET( const CAMERA& aCamera, const SFVEC2F& aWindowsPosition, const SFVEC2F& a2DWindowsPosDisplacementFactor ); - CFRUSTUM m_Frustum; + FRUSTUM m_Frustum; RAY m_ray[RAYPACKET_RAYS_PER_PACKET]; }; -void RAYPACKET_InitRays( const CCAMERA& aCamera, const SFVEC2F& aWindowsPosition, RAY* aRayPck ); +void RAYPACKET_InitRays( const CAMERA& aCamera, const SFVEC2F& aWindowsPosition, RAY* aRayPck ); -void RAYPACKET_InitRays_with2DDisplacement( const CCAMERA& aCamera, - const SFVEC2F& aWindowsPosition, +void RAYPACKET_InitRays_with2DDisplacement( const CAMERA& aCamera, const SFVEC2F& aWindowsPosition, const SFVEC2F& a2DWindowsPosDisplacementFactor, RAY* aRayPck ); diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cbbox2d.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cbbox2d.cpp index c4b6a034bf..33b9c8668a 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cbbox2d.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cbbox2d.cpp @@ -33,31 +33,31 @@ #include -CBBOX2D::CBBOX2D() +BBOX_2D::BBOX_2D() { Reset(); } -CBBOX2D::CBBOX2D( const SFVEC2F &aPbInit ) +BBOX_2D::BBOX_2D( const SFVEC2F& aPbInit ) { m_min = aPbInit; m_max = aPbInit; } -CBBOX2D::CBBOX2D( const SFVEC2F &aPbMin, const SFVEC2F &aPbMax ) +BBOX_2D::BBOX_2D( const SFVEC2F& aPbMin, const SFVEC2F& aPbMax ) { Set( aPbMin, aPbMax ); } -CBBOX2D::~CBBOX2D() +BBOX_2D::~BBOX_2D() { } -void CBBOX2D::Set( const SFVEC2F &aPbMin, const SFVEC2F &aPbMax ) +void BBOX_2D::Set( const SFVEC2F& aPbMin, const SFVEC2F& aPbMax ) { m_min.x = fminf( aPbMin.x, aPbMax.x ); m_min.y = fminf( aPbMin.y, aPbMax.y ); @@ -67,7 +67,7 @@ void CBBOX2D::Set( const SFVEC2F &aPbMin, const SFVEC2F &aPbMax ) } -void CBBOX2D::Set( const CBBOX2D &aBBox ) +void BBOX_2D::Set( const BBOX_2D& aBBox ) { wxASSERT( aBBox.IsInitialized() ); @@ -75,23 +75,21 @@ void CBBOX2D::Set( const CBBOX2D &aBBox ) } -bool CBBOX2D::IsInitialized() const +bool BBOX_2D::IsInitialized() const { - return !( ( FLT_MAX == m_min.x) || - ( FLT_MAX == m_min.y) || - (-FLT_MAX == m_max.x) || - (-FLT_MAX == m_max.y) ); + return !( ( FLT_MAX == m_min.x) || ( FLT_MAX == m_min.y) || + (-FLT_MAX == m_max.x) || (-FLT_MAX == m_max.y) ); } -void CBBOX2D::Reset() +void BBOX_2D::Reset() { m_min = SFVEC2F( FLT_MAX, FLT_MAX ); - m_max = SFVEC2F(-FLT_MAX,-FLT_MAX ); + m_max = SFVEC2F( -FLT_MAX,-FLT_MAX ); } -void CBBOX2D::Union( const SFVEC2F &aPoint ) +void BBOX_2D::Union( const SFVEC2F& aPoint ) { // get the minimum value between the added point and the existent bounding box m_min.x = fminf( m_min.x, aPoint.x ); @@ -103,7 +101,7 @@ void CBBOX2D::Union( const SFVEC2F &aPoint ) } -void CBBOX2D::Union( const CBBOX2D &aBBox ) +void BBOX_2D::Union( const BBOX_2D& aBBox ) { // get the minimum value between the added bounding box and // the existent bounding box @@ -117,19 +115,19 @@ void CBBOX2D::Union( const CBBOX2D &aBBox ) } -SFVEC2F CBBOX2D::GetCenter() const +SFVEC2F BBOX_2D::GetCenter() const { return (m_max + m_min) * 0.5f; } -SFVEC2F CBBOX2D::GetExtent() const +SFVEC2F BBOX_2D::GetExtent() const { return m_max - m_min; } -unsigned int CBBOX2D::MaxDimension() const +unsigned int BBOX_2D::MaxDimension() const { unsigned int result = 0; const SFVEC2F extent = GetExtent(); @@ -140,7 +138,7 @@ unsigned int CBBOX2D::MaxDimension() const } -float CBBOX2D::Perimeter() const +float BBOX_2D::Perimeter() const { const SFVEC2F extent = GetExtent(); @@ -148,7 +146,7 @@ float CBBOX2D::Perimeter() const } -void CBBOX2D::Scale( float aScale ) +void BBOX_2D::Scale( float aScale ) { wxASSERT( IsInitialized() ); @@ -160,7 +158,7 @@ void CBBOX2D::Scale( float aScale ) } -void CBBOX2D::ScaleNextUp() +void BBOX_2D::ScaleNextUp() { m_min.x = NextFloatDown( m_min.x ); m_min.y = NextFloatDown( m_min.y ); @@ -170,7 +168,7 @@ void CBBOX2D::ScaleNextUp() } -void CBBOX2D::ScaleNextDown() +void BBOX_2D::ScaleNextDown() { m_min.x = NextFloatUp( m_min.x ); m_min.y = NextFloatUp( m_min.y ); @@ -182,7 +180,7 @@ void CBBOX2D::ScaleNextDown() // http://goanna.cs.rmit.edu.au/~gl/teaching/rtr&3dgp/notes/intersection.pdf // http://www.mrtc.mdh.se/projects/3Dgraphics/paperF.pdf -bool CBBOX2D::Intersects( const SFVEC2F &aCenter, float aRadiusSquared ) const +bool BBOX_2D::Intersects( const SFVEC2F& aCenter, float aRadiusSquared ) const { float fDistSq = 0.0f; @@ -209,7 +207,7 @@ bool CBBOX2D::Intersects( const SFVEC2F &aCenter, float aRadiusSquared ) const } -bool CBBOX2D::Intersects( const CBBOX2D &aBBox ) const +bool BBOX_2D::Intersects( const BBOX_2D& aBBox ) const { wxASSERT( IsInitialized() ); wxASSERT( aBBox.IsInitialized() ); @@ -221,7 +219,7 @@ bool CBBOX2D::Intersects( const CBBOX2D &aBBox ) const } -bool CBBOX2D::Inside( const SFVEC2F &aPoint ) const +bool BBOX_2D::Inside( const SFVEC2F& aPoint ) const { wxASSERT( IsInitialized() ); @@ -230,7 +228,7 @@ bool CBBOX2D::Inside( const SFVEC2F &aPoint ) const } -float CBBOX2D::Area() const +float BBOX_2D::Area() const { SFVEC2F extent = GetExtent(); return extent.x * extent.y; @@ -238,7 +236,7 @@ float CBBOX2D::Area() const // http://tavianator.com/fast-branchless-raybounding-box-intersections/ -bool CBBOX2D::Intersect( const RAY2D &aRay, float *t ) const +bool BBOX_2D::Intersect( const RAY2D& aRay, float* t ) const { wxASSERT( t ); @@ -263,7 +261,7 @@ bool CBBOX2D::Intersect( const RAY2D &aRay, float *t ) const } -bool CBBOX2D::Intersect( const RAYSEG2D &aRaySeg ) const +bool BBOX_2D::Intersect( const RAYSEG2D& aRaySeg ) const { const float tx1 = (m_min.x - aRaySeg.m_Start.x) * aRaySeg.m_InvDir.x; const float tx2 = (m_max.x - aRaySeg.m_Start.x) * aRaySeg.m_InvDir.x; @@ -288,19 +286,19 @@ bool CBBOX2D::Intersect( const RAYSEG2D &aRaySeg ) const } -bool CBBOX2D::Intersect( const RAY2D &aRay, float *aOutHitT0, float *aOutHitT1 ) const +bool BBOX_2D::Intersect( const RAY2D& aRay, float* aOutHitT0, float* aOutHitT1 ) const { wxASSERT( aOutHitT0 ); wxASSERT( aOutHitT1 ); - const float tx1 = (m_min.x - aRay.m_Origin.x) * aRay.m_InvDir.x; - const float tx2 = (m_max.x - aRay.m_Origin.x) * aRay.m_InvDir.x; + const float tx1 = ( m_min.x - aRay.m_Origin.x ) * aRay.m_InvDir.x; + const float tx2 = ( m_max.x - aRay.m_Origin.x ) * aRay.m_InvDir.x; float tmin = glm::min( tx1, tx2 ); float tmax = glm::max( tx1, tx2 ); - const float ty1 = (m_min.y - aRay.m_Origin.y) * aRay.m_InvDir.y; - const float ty2 = (m_max.y - aRay.m_Origin.y) * aRay.m_InvDir.y; + const float ty1 = ( m_min.y - aRay.m_Origin.y ) * aRay.m_InvDir.y; + const float ty2 = ( m_max.y - aRay.m_Origin.y ) * aRay.m_InvDir.y; tmin = glm::max( tmin, glm::min( ty1, ty2 ) ); tmax = glm::min( tmax, glm::max( ty1, ty2 ) ); diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cbbox2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cbbox2d.h index 4f6ffc26ca..69b90381e7 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cbbox2d.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cbbox2d.h @@ -27,8 +27,8 @@ * @brief 2D Bounding Box class definition */ -#ifndef _CBBOX2D_H_ -#define _CBBOX2D_H_ +#ifndef _BBOX_2D_H_ +#define _BBOX_2D_H_ #include "../ray.h" @@ -36,22 +36,21 @@ /** * Manage a bounding box defined by two SFVEC2F min max points. */ -struct CBBOX2D +struct BBOX_2D { - public: /** * Create with default values a bounding box (not initialized). */ - CBBOX2D(); + BBOX_2D(); /** * Initialize a bounding box with a given point. * * @param aPbInit a point for the bounding box initialization. */ - explicit CBBOX2D( const SFVEC2F &aPbInit ); + explicit BBOX_2D( const SFVEC2F& aPbInit ); /** * Initialize a bounding box with a minimum and a maximum point. @@ -59,9 +58,9 @@ public: * @param aPbMin the minimum point to initialize the bounding box. * @param aPbMax the maximum point to initialize the bounding box. */ - CBBOX2D( const SFVEC2F &aPbMin, const SFVEC2F &aPbMax ); + BBOX_2D( const SFVEC2F& aPbMin, const SFVEC2F& aPbMax ); - ~CBBOX2D(); + ~BBOX_2D(); /** @@ -70,28 +69,28 @@ public: * @param aPbMin the minimum point to initialize the bounding box. * @param aPbMax the maximum point to initialize the bounding box. */ - void Set( const SFVEC2F &aPbMin, const SFVEC2F &aPbMax ); + void Set( const SFVEC2F& aPbMin, const SFVEC2F& aPbMax ); /** * Set bounding box based on another bounding box. * - * @param CBBOX2D a bounding box to initialize this one. + * @param BBOX_2D a bounding box to initialize this one. */ - void Set( const CBBOX2D &aBBox ); + void Set( const BBOX_2D& aBBox ); /** * Recalculate the bounding box adding a point. * * @param aPoint the point to be bounded */ - void Union( const SFVEC2F &aPoint ); + void Union( const SFVEC2F& aPoint ); /** * Recalculate the bounding box adding other bounding box. * * @param aBBox the bounding box to be bounded. */ - void Union( const CBBOX2D &aBBox ); + void Union( const BBOX_2D& aBBox ); /** * Scale a bounding box by its center. @@ -115,21 +114,21 @@ public: * * @param aBBox the bounding box to check if it intersects. */ - bool Intersects( const CBBOX2D &aBBox ) const; + bool Intersects( const BBOX_2D& aBBox ) const; /** * Test if a circle intersects this box. * * @param aBBox the bounding box to check if it intersects. */ - bool Intersects( const SFVEC2F &aCenter, float aRadiusSquared ) const; + bool Intersects( const SFVEC2F& aCenter, float aRadiusSquared ) const; /** * Check is a point is inside this bounding box. * * @param aPoint point to test. */ - bool Inside( const SFVEC2F &aPoint ) const; + bool Inside( const SFVEC2F& aPoint ) const; /** * Calculate the area of a bounding box. @@ -151,8 +150,6 @@ public: void Reset(); /** - * Return the center point of the bounding box. - * * @return the position of the center of this bounding box. */ SFVEC2F GetCenter() const; @@ -163,17 +160,14 @@ public: SFVEC2F GetExtent() const; /** - * Return the minimum vertex point. - * * @return the minimum vertex position. */ - const SFVEC2F &Min() const { return m_min; } + const SFVEC2F& Min() const { return m_min; } /** - * Return the maximum vertex point. * @return the maximum vertex position. */ - const SFVEC2F &Max() const { return m_max; } + const SFVEC2F& Max() const { return m_max; } /** @@ -182,20 +176,20 @@ public: unsigned int MaxDimension() const; /** - * @return the surface area of the box + * @return the surface area of the box. */ float Perimeter() const; /** - * @param aRay ray to intersect the box - * @param t distance point of the ray of the intersection (if true) - * @return true if the ray hits the box + * @param aRay is a ray to intersect the box. + * @param t is the distance point of the ray of the intersection (if true). + * @return true if the ray hits the box. */ - bool Intersect( const RAY2D &aRay, float *t ) const; + bool Intersect( const RAY2D& aRay, float* t ) const; - bool Intersect( const RAY2D &aRay, float *aOutHitT0, float *aOutHitT1 ) const; + bool Intersect( const RAY2D& aRay, float* aOutHitT0, float* aOutHitT1 ) const; - bool Intersect( const RAYSEG2D &aRaySeg ) const; + bool Intersect( const RAYSEG2D& aRaySeg ) const; private: SFVEC2F m_min; ///< point of the lower position of the bounding box diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.cpp index b5cab68997..a1759bf339 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.cpp @@ -2,7 +2,7 @@ * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2015-2016 Mario Luzeiro - * Copyright (C) 1992-2016 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 @@ -31,9 +31,9 @@ #include -CFILLEDCIRCLE2D::CFILLEDCIRCLE2D( - const SFVEC2F& aCenter, float aRadius, const BOARD_ITEM& aBoardItem ) - : COBJECT2D( OBJECT2D_TYPE::FILLED_CIRCLE, aBoardItem ) +FILLED_CIRCLE_2D::FILLED_CIRCLE_2D( const SFVEC2F& aCenter, float aRadius, + const BOARD_ITEM& aBoardItem ) : + OBJECT_2D( OBJECT_2D_TYPE::FILLED_CIRCLE, aBoardItem ) { wxASSERT( aRadius > 0.0f ); // If that happens, it should be handled before create this circle @@ -51,22 +51,20 @@ CFILLEDCIRCLE2D::CFILLEDCIRCLE2D( } -bool CFILLEDCIRCLE2D::Overlaps( const CBBOX2D &aBBox ) const +bool FILLED_CIRCLE_2D::Overlaps( const BBOX_2D& aBBox ) const { // NOT IMPLEMENTED return false; } -bool CFILLEDCIRCLE2D::Intersects( const CBBOX2D &aBBox ) const +bool FILLED_CIRCLE_2D::Intersects( const BBOX_2D& aBBox ) const { return aBBox.Intersects( m_center, m_radius_squared ); } -bool CFILLEDCIRCLE2D::Intersect( const RAYSEG2D &aSegRay, - float *aOutT, - SFVEC2F *aNormalOut ) const +bool FILLED_CIRCLE_2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const { // This code used directly from Steve Marschner's CS667 framework // http://cs665pd.googlecode.com/svn/trunk/photon/sphere.cpp @@ -80,7 +78,7 @@ bool CFILLEDCIRCLE2D::Intersect( const RAYSEG2D &aSegRay, // solving the quadratic equation for t at the pts of intersection // dd*t^2 + (2*qd)*t + (qq-r^2) = 0 - const float discriminantsqr = (qd * qd - (qq - m_radius_squared)); + const float discriminantsqr = ( qd * qd - ( qq - m_radius_squared ) ); // If the discriminant is less than zero, there is no intersection if( discriminantsqr < FLT_EPSILON ) @@ -89,23 +87,25 @@ bool CFILLEDCIRCLE2D::Intersect( const RAYSEG2D &aSegRay, // Otherwise check and make sure that the intersections occur on the ray (t // > 0) and return the closer one - const float discriminant = sqrt(discriminantsqr); - const float t1 = (-qd - discriminant); - const float t2 = (-qd + discriminant); - float t; + const float discriminant = sqrt( discriminantsqr ); + const float t1 = ( -qd - discriminant ); + const float t2 = ( -qd + discriminant ); + float t; - if( (t1 > 0.0f) && (t1 < aSegRay.m_Length) ) + if( ( t1 > 0.0f ) && ( t1 < aSegRay.m_Length ) ) + { t = t1; + } else { - if( (t2 > 0.0f) && (t2 < aSegRay.m_Length) ) + if( ( t2 > 0.0f ) && ( t2 < aSegRay.m_Length ) ) t = t2; else return false; // Neither intersection was in the ray's half line. } - wxASSERT( (t > 0.0f) && (t <= aSegRay.m_Length) ); + wxASSERT( ( t > 0.0f ) && ( t <= aSegRay.m_Length ) ); // Convert the intersection to a normalized 0.0 .. 1.0 if( aOutT ) @@ -120,7 +120,7 @@ bool CFILLEDCIRCLE2D::Intersect( const RAYSEG2D &aSegRay, } -INTERSECTION_RESULT CFILLEDCIRCLE2D::IsBBoxInside( const CBBOX2D &aBBox ) const +INTERSECTION_RESULT FILLED_CIRCLE_2D::IsBBoxInside( const BBOX_2D& aBBox ) const { if( !m_bbox.Intersects( aBBox ) ) return INTERSECTION_RESULT::MISSES; @@ -147,28 +147,22 @@ INTERSECTION_RESULT CFILLEDCIRCLE2D::IsBBoxInside( const CBBOX2D &aBBox ) const isInside[3] = s[3] <= m_radius_squared; // Check if all points are inside the circle - if( isInside[0] && - isInside[1] && - isInside[2] && - isInside[3] ) + if( isInside[0] && isInside[1] && isInside[2] && isInside[3] ) return INTERSECTION_RESULT::FULL_INSIDE; // Check if any point is inside the circle - if( isInside[0] || - isInside[1] || - isInside[2] || - isInside[3] ) + if( isInside[0] || isInside[1] || isInside[2] || isInside[3] ) return INTERSECTION_RESULT::INTERSECTS; return INTERSECTION_RESULT::MISSES; } -bool CFILLEDCIRCLE2D::IsPointInside( const SFVEC2F &aPoint ) const +bool FILLED_CIRCLE_2D::IsPointInside( const SFVEC2F& aPoint ) const { const SFVEC2F v = m_center - aPoint; - if( (v.x * v.x + v.y * v.y) <= m_radius_squared ) + if( ( v.x * v.x + v.y * v.y ) <= m_radius_squared ) return true; return false; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.h index 07a0720be9..faedf4a8e8 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cfilledcircle2d.h @@ -27,26 +27,26 @@ * @brief */ -#ifndef _CFILLEDCIRCLE2D_H_ -#define _CFILLEDCIRCLE2D_H_ +#ifndef _FILLED_CIRCLE_2D_H_ +#define _FILLED_CIRCLE_2D_H_ #include "cobject2d.h" -class CFILLEDCIRCLE2D : public COBJECT2D +class FILLED_CIRCLE_2D : public OBJECT_2D { public: - CFILLEDCIRCLE2D( const SFVEC2F &aCenter, float aRadius, const BOARD_ITEM &aBoardItem ); + FILLED_CIRCLE_2D( const SFVEC2F& aCenter, float aRadius, const BOARD_ITEM& aBoardItem ); float GetRadius() const { return m_radius; } - const SFVEC2F &GetCenter() const { return m_center; } + const SFVEC2F& GetCenter() const { return m_center; } float GetRadiusSquared() const { return m_radius_squared; } - // Imported from COBJECT2D - bool Overlaps( const CBBOX2D &aBBox ) const override; - bool Intersects( const CBBOX2D &aBBox ) const override; - bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const override; - INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const override; - bool IsPointInside( const SFVEC2F &aPoint ) const override; + // Imported from OBJECT_2D + bool Overlaps( const BBOX_2D& aBBox ) const override; + bool Intersects( const BBOX_2D& aBBox ) const override; + bool Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const override; + INTERSECTION_RESULT IsBBoxInside( const BBOX_2D& aBBox ) const override; + bool IsPointInside( const SFVEC2F& aPoint ) const override; private: SFVEC2F m_center; @@ -55,4 +55,4 @@ private: }; -#endif // _CFILLEDCIRCLE2D_H_ +#endif // _FILLED_CIRCLE_2D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/citemlayercsg2d.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/citemlayercsg2d.cpp index 56a7381296..046c440bfa 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/citemlayercsg2d.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/citemlayercsg2d.cpp @@ -32,11 +32,9 @@ #include -CITEMLAYERCSG2D::CITEMLAYERCSG2D( const COBJECT2D* aObjectA, - std::vector* aObjectB, - const COBJECT2D* aObjectC, - const BOARD_ITEM& aBoardItem ) : - COBJECT2D( OBJECT2D_TYPE::CSG, aBoardItem ), +LAYER_ITEM_2D::LAYER_ITEM_2D( const OBJECT_2D* aObjectA, std::vector* aObjectB, + const OBJECT_2D* aObjectC, const BOARD_ITEM& aBoardItem ) : + OBJECT_2D( OBJECT_2D_TYPE::CSG, aBoardItem ), m_objectA( aObjectA ), m_objectB( aObjectB ), m_objectC( aObjectC ) @@ -52,17 +50,17 @@ CITEMLAYERCSG2D::CITEMLAYERCSG2D( const COBJECT2D* aObjectA, } -CITEMLAYERCSG2D::~CITEMLAYERCSG2D() +LAYER_ITEM_2D::~LAYER_ITEM_2D() { if( ( (void*) m_objectB != CSGITEM_EMPTY ) && ( (void*) m_objectB != CSGITEM_FULL ) ) { delete m_objectB; - m_objectB = NULL; + m_objectB = nullptr; } } -bool CITEMLAYERCSG2D::Intersects( const CBBOX2D& aBBox ) const +bool LAYER_ITEM_2D::Intersects( const BBOX_2D& aBBox ) const { return m_bbox.Intersects( aBBox ); // !TODO: improve this implementation @@ -70,7 +68,7 @@ bool CITEMLAYERCSG2D::Intersects( const CBBOX2D& aBBox ) const } -bool CITEMLAYERCSG2D::Overlaps( const CBBOX2D& aBBox ) const +bool LAYER_ITEM_2D::Overlaps( const BBOX_2D& aBBox ) const { // NOT IMPLEMENTED return false; @@ -79,9 +77,9 @@ bool CITEMLAYERCSG2D::Overlaps( const CBBOX2D& aBBox ) const // Based on ideas and implementation by Nick Chapman // http://homepages.paradise.net.nz/nickamy/raytracer/raytracer.htm -bool CITEMLAYERCSG2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const +bool LAYER_ITEM_2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const { - if( m_objectA->GetObjectType() == OBJECT2D_TYPE::DUMMYBLOCK ) + if( m_objectA->GetObjectType() == OBJECT_2D_TYPE::DUMMYBLOCK ) return false; SFVEC2F currentRayPos = aSegRay.m_Start; @@ -112,13 +110,13 @@ bool CITEMLAYERCSG2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* //check against all subbed objects for( unsigned int i = 0; i < m_objectB->size(); ++i ) { - if( ( (const COBJECT2D*) ( *m_objectB )[i] )->IsPointInside( currentRayPos ) ) + if( ( (const OBJECT_2D*) ( *m_objectB )[i] )->IsPointInside( currentRayPos ) ) { // ray point is inside a subtracted region, so move it to the end of the // subtracted region float hitDist; SFVEC2F tmpNormal; - if( !( (const COBJECT2D*) ( *m_objectB )[i] ) + if( !( (const OBJECT_2D*) ( *m_objectB )[i] ) ->Intersect( currentRay, &hitDist, &tmpNormal ) ) return false; // ray hit main object but did not leave subtracted volume @@ -155,7 +153,7 @@ bool CITEMLAYERCSG2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* } -INTERSECTION_RESULT CITEMLAYERCSG2D::IsBBoxInside( const CBBOX2D& aBBox ) const +INTERSECTION_RESULT LAYER_ITEM_2D::IsBBoxInside( const BBOX_2D& aBBox ) const { // !TODO: @@ -164,7 +162,7 @@ INTERSECTION_RESULT CITEMLAYERCSG2D::IsBBoxInside( const CBBOX2D& aBBox ) const } -bool CITEMLAYERCSG2D::IsPointInside( const SFVEC2F& aPoint ) const +bool LAYER_ITEM_2D::IsPointInside( const SFVEC2F& aPoint ) const { // Perform the operation (A - B) /\ C if( m_objectA->IsPointInside( aPoint ) ) diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/citemlayercsg2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/citemlayercsg2d.h index 87af2291ef..445f3af076 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/citemlayercsg2d.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/citemlayercsg2d.h @@ -1,3 +1,4 @@ + /* * This program source code file is part of KiCad, a free EDA CAD application. * @@ -27,18 +28,18 @@ * @brief */ -#ifndef _CITEMLAYERCSG2D_H_ -#define _CITEMLAYERCSG2D_H_ +#ifndef _LAYER_ITEM_2D_H_ +#define _LAYER_ITEM_2D_H_ #include "cobject2d.h" #include #define CSGITEM_EMPTY 0 -#define CSGITEM_FULL (COBJECT2D *)((size_t)(-1)) +#define CSGITEM_FULL (OBJECT_2D*) ( ( size_t )( -1 ) ) /** - * Make constructive solid geometry for items objects on layers. + * Make solid geometry for objects on layers. * * The operation is in the form (A - B) /\ C * For almost all of the layers it translate something like: @@ -75,27 +76,25 @@ * Layers.Paste = P - 0 /\ BODY * Layers.Silk = S - 0 /\ BODY */ -class CITEMLAYERCSG2D : public COBJECT2D +class LAYER_ITEM_2D : public OBJECT_2D { public: - CITEMLAYERCSG2D( const COBJECT2D *aObjectA, - std::vector *aObjectB, - const COBJECT2D *aObjectC, - const BOARD_ITEM &aBoardItem ); + LAYER_ITEM_2D( const OBJECT_2D* aObjectA, std::vector* aObjectB, + const OBJECT_2D* aObjectC, const BOARD_ITEM& aBoardItem ); - ~CITEMLAYERCSG2D(); + ~LAYER_ITEM_2D(); - // Imported from COBJECT2D - bool Overlaps( const CBBOX2D &aBBox ) const override; - bool Intersects( const CBBOX2D &aBBox ) const override; - bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const override; - INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const override; - bool IsPointInside( const SFVEC2F &aPoint ) const override; + // Imported from OBJECT_2D + bool Overlaps( const BBOX_2D& aBBox ) const override; + bool Intersects( const BBOX_2D& aBBox ) const override; + bool Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const override; + INTERSECTION_RESULT IsBBoxInside( const BBOX_2D& aBBox ) const override; + bool IsPointInside( const SFVEC2F& aPoint ) const override; private: - const COBJECT2D *m_objectA; - std::vector *m_objectB; - const COBJECT2D *m_objectC; + const OBJECT_2D* m_objectA; + std::vector* m_objectB; + const OBJECT_2D* m_objectC; }; -#endif // _CITEMLAYERCSG2D_H_ +#endif // _LAYER_ITEM_2D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cobject2d.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cobject2d.cpp index cc7ef62f84..e5eb71a953 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cobject2d.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cobject2d.cpp @@ -31,38 +31,38 @@ #include -COBJECT2D_STATS *COBJECT2D_STATS::s_instance = 0; +OBJECT_2D_STATS *OBJECT_2D_STATS::s_instance = 0; -COBJECT2D::COBJECT2D( OBJECT2D_TYPE aObjType, const BOARD_ITEM &aBoardItem ) +OBJECT_2D::OBJECT_2D( OBJECT_2D_TYPE aObjType, const BOARD_ITEM &aBoardItem ) : m_boardItem(aBoardItem) { m_obj_type = aObjType; - COBJECT2D_STATS::Instance().AddOne( aObjType ); + OBJECT_2D_STATS::Instance().AddOne( aObjType ); } /* - * Lookup table for OBJECT2D_TYPE printed names + * Lookup table for OBJECT_2D_TYPE printed names */ // clang-format off -const std::map objectTypeNames +const std::map objectTypeNames { - { OBJECT2D_TYPE::FILLED_CIRCLE, "OBJECT2D_TYPE::FILLED_CIRCLE" }, - { OBJECT2D_TYPE::CSG, "OBJECT2D_TYPE::CSG" }, - { OBJECT2D_TYPE::POLYGON, "OBJECT2D_TYPE::POLYGON" }, - { OBJECT2D_TYPE::DUMMYBLOCK, "OBJECT2D_TYPE::DUMMYBLOCK" }, - { OBJECT2D_TYPE::POLYGON4PT, "OBJECT2D_TYPE::POLYGON4PT" }, - { OBJECT2D_TYPE::RING, "OBJECT2D_TYPE::RING" }, - { OBJECT2D_TYPE::ROUNDSEG, "OBJECT2D_TYPE::ROUNDSEG" }, - { OBJECT2D_TYPE::TRIANGLE, "OBJECT2D_TYPE::TRIANGLE" }, - { OBJECT2D_TYPE::CONTAINER, "OBJECT2D_TYPE::CONTAINER" }, - { OBJECT2D_TYPE::BVHCONTAINER, "OBJECT2D_TYPE::BVHCONTAINER" }, + { OBJECT_2D_TYPE::FILLED_CIRCLE, "OBJECT_2D_TYPE::FILLED_CIRCLE" }, + { OBJECT_2D_TYPE::CSG, "OBJECT_2D_TYPE::CSG" }, + { OBJECT_2D_TYPE::POLYGON, "OBJECT_2D_TYPE::POLYGON" }, + { OBJECT_2D_TYPE::DUMMYBLOCK, "OBJECT_2D_TYPE::DUMMYBLOCK" }, + { OBJECT_2D_TYPE::POLYGON4PT, "OBJECT_2D_TYPE::POLYGON4PT" }, + { OBJECT_2D_TYPE::RING, "OBJECT_2D_TYPE::RING" }, + { OBJECT_2D_TYPE::ROUNDSEG, "OBJECT_2D_TYPE::ROUNDSEG" }, + { OBJECT_2D_TYPE::TRIANGLE, "OBJECT_2D_TYPE::TRIANGLE" }, + { OBJECT_2D_TYPE::CONTAINER, "OBJECT_2D_TYPE::CONTAINER" }, + { OBJECT_2D_TYPE::BVHCONTAINER, "OBJECT_2D_TYPE::BVHCONTAINER" }, }; // clang-format on -void COBJECT2D_STATS::PrintStats() +void OBJECT_2D_STATS::PrintStats() { for( auto& objectType : objectTypeNames ) { diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cobject2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cobject2d.h index 108b024260..c3de7569f7 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cobject2d.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cobject2d.h @@ -2,7 +2,7 @@ * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2015-2016 Mario Luzeiro - * Copyright (C) 1992-2016 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 @@ -24,11 +24,10 @@ /** * @file cobject2d.h - * @brief */ -#ifndef _COBJECT2D_H_ -#define _COBJECT2D_H_ +#ifndef _OBJECT_2D_H_ +#define _OBJECT_2D_H_ #include "cbbox2d.h" #include @@ -43,7 +42,7 @@ enum class INTERSECTION_RESULT }; -enum class OBJECT2D_TYPE +enum class OBJECT_2D_TYPE { FILLED_CIRCLE, CSG, @@ -59,13 +58,13 @@ enum class OBJECT2D_TYPE }; -class COBJECT2D +class OBJECT_2D { public: - COBJECT2D( OBJECT2D_TYPE aObjType, const BOARD_ITEM &aBoardItem ); - virtual ~COBJECT2D() {} + OBJECT_2D( OBJECT_2D_TYPE aObjType, const BOARD_ITEM& aBoardItem ); + virtual ~OBJECT_2D() {} - const BOARD_ITEM &GetBoardItem() const { return m_boardItem; } + const BOARD_ITEM& GetBoardItem() const { return m_boardItem; } /** * Test if the box overlaps the object. @@ -78,86 +77,83 @@ public: * of the bounding box (so the overlap cannot be a point or a line) and one * of the boxes cannot full contain the other box. * - * @param aBBox - The bounding box to test - * @return true if the BBox intersects the object or is inside it + * @param aBBox is the bounding box to test. + * @return true if the BBox intersects the object or is inside it. */ - virtual bool Overlaps( const CBBOX2D &aBBox ) const = 0; + virtual bool Overlaps( const BBOX_2D& aBBox ) const = 0; /** * a.Intersects(b) ⇔ !a.Disjoint(b) ⇔ !(a ∩ b = ∅) */ - virtual bool Intersects( const CBBOX2D &aBBox ) const = 0; + virtual bool Intersects( const BBOX_2D& aBBox ) const = 0; /** - * @param aOutT a value between 0.0 and 1.0 in relation to the time of the - * hit of the segment + * @param aOutT a value between 0.0 and 1.0 in relation to the time of the hit of the segment. */ - virtual bool Intersect( const RAYSEG2D &aSegRay, - float *aOutT, - SFVEC2F *aNormalOut ) const = 0; + virtual bool Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const = 0; /** * Test this object if it's completely outside, intersects, or is completely inside \a aBBox. * * @return INTERSECTION_RESULT */ - virtual INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const = 0; + virtual INTERSECTION_RESULT IsBBoxInside( const BBOX_2D& aBBox ) const = 0; - virtual bool IsPointInside( const SFVEC2F &aPoint ) const = 0; + virtual bool IsPointInside( const SFVEC2F& aPoint ) const = 0; - const CBBOX2D &GetBBox() const { return m_bbox; } + const BBOX_2D& GetBBox() const { return m_bbox; } - const SFVEC2F &GetCentroid() const { return m_centroid; } + const SFVEC2F& GetCentroid() const { return m_centroid; } - OBJECT2D_TYPE GetObjectType() const { return m_obj_type; } + OBJECT_2D_TYPE GetObjectType() const { return m_obj_type; } protected: - CBBOX2D m_bbox; + BBOX_2D m_bbox; SFVEC2F m_centroid; - OBJECT2D_TYPE m_obj_type; + OBJECT_2D_TYPE m_obj_type; - const BOARD_ITEM &m_boardItem; + const BOARD_ITEM& m_boardItem; }; -class COBJECT2D_STATS +class OBJECT_2D_STATS { public: void ResetStats() { - memset( m_counter, 0, sizeof( unsigned int ) * static_cast( OBJECT2D_TYPE::MAX ) ); + memset( m_counter, 0, sizeof( unsigned int ) * static_cast( OBJECT_2D_TYPE::MAX ) ); } - unsigned int GetCountOf( OBJECT2D_TYPE aObjType ) const + unsigned int GetCountOf( OBJECT_2D_TYPE aObjType ) const { return m_counter[static_cast( aObjType )]; } - void AddOne( OBJECT2D_TYPE aObjType ) + void AddOne( OBJECT_2D_TYPE aObjType ) { m_counter[static_cast( aObjType )]++; } void PrintStats(); - static COBJECT2D_STATS &Instance() + static OBJECT_2D_STATS& Instance() { if( !s_instance ) - s_instance = new COBJECT2D_STATS; + s_instance = new OBJECT_2D_STATS; return *s_instance; } private: - COBJECT2D_STATS(){ ResetStats(); } - COBJECT2D_STATS( const COBJECT2D_STATS &old ); - const COBJECT2D_STATS &operator=( const COBJECT2D_STATS &old ); - ~COBJECT2D_STATS(){} + OBJECT_2D_STATS(){ ResetStats(); } + OBJECT_2D_STATS( const OBJECT_2D_STATS& old ); + const OBJECT_2D_STATS& operator=( const OBJECT_2D_STATS& old ); + ~OBJECT_2D_STATS(){} - unsigned int m_counter[static_cast( OBJECT2D_TYPE::MAX )]; + unsigned int m_counter[static_cast( OBJECT_2D_TYPE::MAX )]; - static COBJECT2D_STATS *s_instance; + static OBJECT_2D_STATS* s_instance; }; -#endif // _COBJECT2D_H_ +#endif // _OBJECT_2D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.cpp index adae90b90c..e130762008 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.cpp @@ -65,9 +65,9 @@ static bool polygon_IsPointInside( const SEGMENTS& aSegments, const SFVEC2F& aPo } -CPOLYGONBLOCK2D::CPOLYGONBLOCK2D( const SEGMENTS_WIDTH_NORMALS& aOpenSegmentList, - const OUTERS_AND_HOLES& aOuter_and_holes, const BOARD_ITEM& aBoardItem ) - : COBJECT2D( OBJECT2D_TYPE::POLYGON, aBoardItem ) +POLYGON_2D::POLYGON_2D( const SEGMENTS_WIDTH_NORMALS& aOpenSegmentList, + const OUTERS_AND_HOLES& aOuter_and_holes, const BOARD_ITEM& aBoardItem ) + : OBJECT_2D( OBJECT_2D_TYPE::POLYGON, aBoardItem ) { m_open_segments.resize( aOpenSegmentList.size() ); @@ -104,7 +104,7 @@ CPOLYGONBLOCK2D::CPOLYGONBLOCK2D( const SEGMENTS_WIDTH_NORMALS& aOpenSegmentList } -bool CPOLYGONBLOCK2D::Intersects( const CBBOX2D& aBBox ) const +bool POLYGON_2D::Intersects( const BBOX_2D& aBBox ) const { return m_bbox.Intersects( aBBox ); @@ -114,14 +114,14 @@ bool CPOLYGONBLOCK2D::Intersects( const CBBOX2D& aBBox ) const } -bool CPOLYGONBLOCK2D::Overlaps( const CBBOX2D& aBBox ) const +bool POLYGON_2D::Overlaps( const BBOX_2D& aBBox ) const { // NOT IMPLEMENTED return false; } -bool CPOLYGONBLOCK2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const +bool POLYGON_2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const { int hitIndex = -1; float hitU = 0.0f; @@ -180,14 +180,14 @@ bool CPOLYGONBLOCK2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* } -INTERSECTION_RESULT CPOLYGONBLOCK2D::IsBBoxInside( const CBBOX2D& aBBox ) const +INTERSECTION_RESULT POLYGON_2D::IsBBoxInside( const BBOX_2D& aBBox ) const { return INTERSECTION_RESULT::MISSES; } -bool CPOLYGONBLOCK2D::IsPointInside( const SFVEC2F& aPoint ) const +bool POLYGON_2D::IsPointInside( const SFVEC2F& aPoint ) const { // NOTE: we could add here a test for the bounding box, but because in the // 3d object it already checked for a 3d bbox. @@ -211,9 +211,9 @@ bool CPOLYGONBLOCK2D::IsPointInside( const SFVEC2F& aPoint ) const } -CDUMMYBLOCK2D::CDUMMYBLOCK2D( const SFVEC2F& aPbMin, const SFVEC2F& aPbMax, - const BOARD_ITEM& aBoardItem ) - : COBJECT2D( OBJECT2D_TYPE::DUMMYBLOCK, aBoardItem ) +DUMMY_BLOCK_2D::DUMMY_BLOCK_2D( const SFVEC2F& aPbMin, const SFVEC2F& aPbMax, + const BOARD_ITEM& aBoardItem ) + : OBJECT_2D( OBJECT_2D_TYPE::DUMMYBLOCK, aBoardItem ) { m_bbox.Set( aPbMin, aPbMax ); m_bbox.ScaleNextUp(); @@ -221,8 +221,8 @@ CDUMMYBLOCK2D::CDUMMYBLOCK2D( const SFVEC2F& aPbMin, const SFVEC2F& aPbMax, } -CDUMMYBLOCK2D::CDUMMYBLOCK2D( const CBBOX2D& aBBox, const BOARD_ITEM& aBoardItem ) - : COBJECT2D( OBJECT2D_TYPE::DUMMYBLOCK, aBoardItem ) +DUMMY_BLOCK_2D::DUMMY_BLOCK_2D( const BBOX_2D& aBBox, const BOARD_ITEM& aBoardItem ) + : OBJECT_2D( OBJECT_2D_TYPE::DUMMYBLOCK, aBoardItem ) { m_bbox.Set( aBBox ); m_bbox.ScaleNextUp(); @@ -230,20 +230,20 @@ CDUMMYBLOCK2D::CDUMMYBLOCK2D( const CBBOX2D& aBBox, const BOARD_ITEM& aBoardItem } -bool CDUMMYBLOCK2D::Intersects( const CBBOX2D& aBBox ) const +bool DUMMY_BLOCK_2D::Intersects( const BBOX_2D& aBBox ) const { return m_bbox.Intersects( aBBox ); } -bool CDUMMYBLOCK2D::Overlaps( const CBBOX2D& aBBox ) const +bool DUMMY_BLOCK_2D::Overlaps( const BBOX_2D& aBBox ) const { // Not implemented return false; } -bool CDUMMYBLOCK2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const +bool DUMMY_BLOCK_2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const { // The dummy block will be never intersected because it have no edges, // only it have a plan surface of the size of the bounding box @@ -251,14 +251,14 @@ bool CDUMMYBLOCK2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* a } -INTERSECTION_RESULT CDUMMYBLOCK2D::IsBBoxInside( const CBBOX2D& aBBox ) const +INTERSECTION_RESULT DUMMY_BLOCK_2D::IsBBoxInside( const BBOX_2D& aBBox ) const { //!TODO: return INTERSECTION_RESULT::MISSES; } -bool CDUMMYBLOCK2D::IsPointInside( const SFVEC2F& aPoint ) const +bool DUMMY_BLOCK_2D::IsPointInside( const SFVEC2F& aPoint ) const { // The dummy is filled in all his bounding box, so if it hit the bbox // it will hit this dummy @@ -306,7 +306,7 @@ static bool intersect( const SEGMENT_WITH_NORMALS& aSeg, const SFVEC2F& aStart, } -static void extractPathsFrom( const SEGMENTS_WIDTH_NORMALS& aSegList, const CBBOX2D& aBBox, +static void extractPathsFrom( const SEGMENTS_WIDTH_NORMALS& aSegList, const BBOX_2D& aBBox, SEGMENTS_WIDTH_NORMALS& aOutSegThatIntersect ) { wxASSERT( aSegList.size() >= 3 ); @@ -334,7 +334,7 @@ static void extractPathsFrom( const SEGMENTS_WIDTH_NORMALS& aSegList, const CBBO // Check if a segment intersects the bounding box // Make a bounding box based on the segments start and end - CBBOX2D segmentBBox( aSegList[i].m_Start, aSegList[j].m_Start ); + BBOX_2D segmentBBox( aSegList[i].m_Start, aSegList[j].m_Start ); if( aBBox.Intersects( segmentBBox ) ) { @@ -380,7 +380,7 @@ static void polygon_Convert( const SHAPE_LINE_CHAIN& aPath, SEGMENTS& aOutSegmen void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks( const SHAPE_POLY_SET& aMainPath, - CGENERICCONTAINER2D& aDstContainer, float aBiuTo3DunitsScale, float aDivFactor, + CONTAINER_2D_BASE& aDstContainer, float aBiuTo3DunitsScale, float aDivFactor, const BOARD_ITEM& aBoardItem, int aPolyIndex ) { // Get the path @@ -391,7 +391,7 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks( const SHAPE_POLY_S BOX2I pathBounds = path.BBox(); // Convert the points to segments class - CBBOX2D bbox; + BBOX_2D bbox; bbox.Reset(); // Contains the main list of segments and each segment normal interpolated @@ -553,14 +553,13 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks( const SHAPE_POLY_S for( unsigned int iy = 0; iy < grid_divisions.y; iy++ ) { - int leftToRight = pathBounds.GetLeft(); float blockX = bbox.Min().x; for( unsigned int ix = 0; ix < grid_divisions.x; ix++ ) { - CBBOX2D blockBox( SFVEC2F( blockX, blockY - blockAdvance.y ), - SFVEC2F( blockX + blockAdvance.x, blockY ) ); + BBOX_2D blockBox( SFVEC2F( blockX, blockY - blockAdvance.y ), + SFVEC2F( blockX + blockAdvance.x, blockY ) ); // Make the box large to it will catch (intersect) the edges blockBox.ScaleNextUp(); @@ -587,7 +586,7 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks( const SHAPE_POLY_S // polygon, so it means that if any point is inside it, // then all other are inside the polygon. // This is a full bbox inside, so add a dummy box - aDstContainer.Add( new CDUMMYBLOCK2D( blockBox, aBoardItem ) ); + aDstContainer.Add( new DUMMY_BLOCK_2D( blockBox, aBoardItem ) ); stats_n_dummy_blocks++; } else @@ -619,8 +618,8 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks( const SHAPE_POLY_S // We need here a strictly simple polygon with outlines and holes SHAPE_POLY_SET solution; - solution.BooleanIntersection( - aMainPath, subBlockPoly, SHAPE_POLY_SET::PM_STRICTLY_SIMPLE ); + solution.BooleanIntersection( aMainPath, subBlockPoly, + SHAPE_POLY_SET::PM_STRICTLY_SIMPLE ); OUTERS_AND_HOLES outersAndHoles; @@ -650,8 +649,8 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks( const SHAPE_POLY_S if( !outersAndHoles.m_Outers.empty() ) { - aDstContainer.Add( new CPOLYGONBLOCK2D( extractedSegments, outersAndHoles, - aBoardItem ) ); + aDstContainer.Add( new POLYGON_2D( extractedSegments, outersAndHoles, + aBoardItem ) ); stats_n_poly_blocks++; } } @@ -693,8 +692,7 @@ static void polygon_Convert( const ClipperLib::Path& aPath, SEGMENTS& aOutSegmen void Polygon2d_TestModule() { - // "This structure contains a sequence of IntPoint vertices defining a - // single contour" + // "This structure contains a sequence of IntPoint vertices defining a single contour" ClipperLib::Path aPath; SEGMENTS aSegments; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.h index 555107a181..98a3d0d8a6 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon2d.h @@ -91,19 +91,19 @@ typedef struct * There is information for the contours (used to test the ray2d intersection) and a close * definition of the block polygon to test if a point is inside. */ -class CPOLYGONBLOCK2D : public COBJECT2D +class POLYGON_2D : public OBJECT_2D { public: - CPOLYGONBLOCK2D( const SEGMENTS_WIDTH_NORMALS &aOpenSegmentList, - const OUTERS_AND_HOLES &aOuter_and_holes, - const BOARD_ITEM &aBoardItem ); + POLYGON_2D( const SEGMENTS_WIDTH_NORMALS& aOpenSegmentList, + const OUTERS_AND_HOLES& aOuter_and_holes, + const BOARD_ITEM& aBoardItem ); - // Imported from COBJECT2D - bool Overlaps( const CBBOX2D &aBBox ) const override; - bool Intersects( const CBBOX2D &aBBox ) const override; - bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const override; - INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const override; - bool IsPointInside( const SFVEC2F &aPoint ) const override; + // Imported from OBJECT_2D + bool Overlaps( const BBOX_2D& aBBox ) const override; + bool Intersects( const BBOX_2D& aBBox ) const override; + bool Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const override; + INTERSECTION_RESULT IsBBoxInside( const BBOX_2D& aBBox ) const override; + bool IsPointInside( const SFVEC2F& aPoint ) const override; private: /** @@ -124,29 +124,27 @@ private: * * If the point is inside the bounding box it will return always true. However, the * intersection with a ray will return always false. This is used as a sub block - * extracted from polygon (pcb polygon areas) and represents an area that is full filled. + * extracted from polygon (pcb polygon areas) and represents an area that is fully filled. */ -class CDUMMYBLOCK2D : public COBJECT2D +class DUMMY_BLOCK_2D : public OBJECT_2D { public: - CDUMMYBLOCK2D( const SFVEC2F &aPbMin, - const SFVEC2F &aPbMax, - const BOARD_ITEM &aBoardItem ); + DUMMY_BLOCK_2D( const SFVEC2F& aPbMin, const SFVEC2F& aPbMax, const BOARD_ITEM& aBoardItem ); - CDUMMYBLOCK2D( const CBBOX2D &aBBox, const BOARD_ITEM &aBoardItem ); + DUMMY_BLOCK_2D( const BBOX_2D& aBBox, const BOARD_ITEM& aBoardItem ); - // Imported from COBJECT2D - bool Overlaps( const CBBOX2D &aBBox ) const override; - bool Intersects( const CBBOX2D &aBBox ) const override; - bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const override; - INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const override; - bool IsPointInside( const SFVEC2F &aPoint ) const override; + // Imported from OBJECT_2D + bool Overlaps( const BBOX_2D& aBBox ) const override; + bool Intersects( const BBOX_2D& aBBox ) const override; + bool Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const override; + INTERSECTION_RESULT IsBBoxInside( const BBOX_2D& aBBox ) const override; + bool IsPointInside( const SFVEC2F& aPoint ) const override; }; /** * Use a polygon in the format of the ClipperLib::Path and process it and create multiple 2d - * objects (CPOLYGONBLOCK2D and CDUMMYBLOCK2D) that can be used to represent this polygon area. + * objects (POLYGON_2D and DUMMY_BLOCK_2D) that can be used to represent this polygon area. * * @param aMainPath the polygon are that was converted from the pcb board * @param aDstContainer the destination container to put the created sub blocks @@ -155,11 +153,11 @@ public: * 0.0f will use the internal polygon segm statistics */ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks( - const SHAPE_POLY_SET &aMainPath, - CGENERICCONTAINER2D &aDstContainer, + const SHAPE_POLY_SET& aMainPath, + CONTAINER_2D_BASE& aDstContainer, float aBiuTo3DunitsScale, float aDivFactor, - const BOARD_ITEM &aBoardItem, + const BOARD_ITEM& aBoardItem, int aPolyIndex ); void Polygon2d_TestModule(); diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.cpp index 340d2eedf5..56d4a4a764 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.cpp @@ -31,24 +31,14 @@ #include -CPOLYGON4PTS2D::CPOLYGON4PTS2D( const SFVEC2F& v1, const SFVEC2F& v2, const SFVEC2F& v3, +POLYGON_4PT_2D::POLYGON_4PT_2D( const SFVEC2F& v1, const SFVEC2F& v2, const SFVEC2F& v3, const SFVEC2F& v4, const BOARD_ITEM& aBoardItem ) : - COBJECT2D( OBJECT2D_TYPE::POLYGON4PT, aBoardItem ) -{ /* - if( (v1.x > v2.x) || (v1.y < v2.y) ) - { - m_segments[0] = v4; - m_segments[1] = v3; - m_segments[2] = v2; - m_segments[3] = v1; - } - else - {*/ + OBJECT_2D( OBJECT_2D_TYPE::POLYGON4PT, aBoardItem ) +{ m_segments[0] = v1; m_segments[1] = v4; m_segments[2] = v3; m_segments[3] = v2; - // } unsigned int i; unsigned int j = 4 - 1; @@ -76,63 +66,20 @@ CPOLYGON4PTS2D::CPOLYGON4PTS2D( const SFVEC2F& v1, const SFVEC2F& v2, const SFVE } -bool CPOLYGON4PTS2D::Intersects( const CBBOX2D& aBBox ) const +bool POLYGON_4PT_2D::Intersects( const BBOX_2D& aBBox ) const { return m_bbox.Intersects( aBBox ); - - // This source code is not working OK. - /* - if( !m_bbox.Intersects( aBBox ) ) - return false; - - // Check if the bounding box complety have inside the small bounding box - if( (aBBox.Max().x > m_bbox.Max().x) && - (aBBox.Max().y > m_bbox.Max().x) && - (aBBox.Min().x < m_bbox.Min().x) && - (aBBox.Min().y < m_bbox.Min().y) - ) - return true; - - SFVEC2F v[4]; - - v[0] = aBBox.Min(); - v[1] = SFVEC2F( aBBox.Min().x, aBBox.Max().y ); - v[2] = aBBox.Max(); - v[3] = SFVEC2F( aBBox.Max().x, aBBox.Min().y ); - - for( unsigned int i = 0; i < 4; i++ ) - { - if( IntersectSegment( m_segments[i], m_precalc_slope[i], v[0], v[1] - v[0] ) ) - return true; - if( IntersectSegment( m_segments[i], m_precalc_slope[i], v[1], v[2] - v[1] ) ) - return true; - if( IntersectSegment( m_segments[i], m_precalc_slope[i], v[2], v[3] - v[2] ) ) - return true; - if( IntersectSegment( m_segments[i], m_precalc_slope[i], v[3], v[0] - v[3] ) ) - return true; - } - - if( IsPointInside( v[0] ) ) - return true; - if( IsPointInside( v[1] ) ) - return true; - if( IsPointInside( v[2] ) ) - return true; - if( IsPointInside( v[3] ) ) - return true; - - return false;*/ } -bool CPOLYGON4PTS2D::Overlaps( const CBBOX2D& aBBox ) const +bool POLYGON_4PT_2D::Overlaps( const BBOX_2D& aBBox ) const { // NOT IMPLEMENTED return true; } -bool CPOLYGON4PTS2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const +bool POLYGON_4PT_2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const { bool hited = false; unsigned int hitIndex; @@ -170,7 +117,7 @@ bool CPOLYGON4PTS2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* } -INTERSECTION_RESULT CPOLYGON4PTS2D::IsBBoxInside( const CBBOX2D& aBBox ) const +INTERSECTION_RESULT POLYGON_4PT_2D::IsBBoxInside( const BBOX_2D& aBBox ) const { // !TODO: @@ -178,7 +125,7 @@ INTERSECTION_RESULT CPOLYGON4PTS2D::IsBBoxInside( const CBBOX2D& aBBox ) const } -bool CPOLYGON4PTS2D::IsPointInside( const SFVEC2F& aPoint ) const +bool POLYGON_4PT_2D::IsPointInside( const SFVEC2F& aPoint ) const { unsigned int i; unsigned int j = 4 - 1; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.h index 0f5c490239..579de930d2 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cpolygon4pts2d.h @@ -27,8 +27,8 @@ * @brief A simplified 4 point polygon */ -#ifndef _CPOLYGON4PTS2D_H_ -#define _CPOLYGON4PTS2D_H_ +#ifndef _POLYGON_4PT_2D_H_ +#define _POLYGON_4PT_2D_H_ #include "cobject2d.h" @@ -38,31 +38,27 @@ * Used for footprint pads. (rectangles, trapezoids, with rotation.etc). This is a * simplified version of the #CPOLYGON2D class. */ -class CPOLYGON4PTS2D : public COBJECT2D +class POLYGON_4PT_2D : public OBJECT_2D { public: - CPOLYGON4PTS2D( const SFVEC2F &v1, - const SFVEC2F &v2, - const SFVEC2F &v3, - const SFVEC2F &v4, - const BOARD_ITEM &aBoardItem ); + POLYGON_4PT_2D( const SFVEC2F& v1, const SFVEC2F& v2, const SFVEC2F& v3, const SFVEC2F& v4, + const BOARD_ITEM& aBoardItem ); - const SFVEC2F &GetV0() const { return m_segments[0]; } - const SFVEC2F &GetV1() const { return m_segments[1]; } - const SFVEC2F &GetV2() const { return m_segments[2]; } - const SFVEC2F &GetV3() const { return m_segments[3]; } + const SFVEC2F& GetV0() const { return m_segments[0]; } + const SFVEC2F& GetV1() const { return m_segments[1]; } + const SFVEC2F& GetV2() const { return m_segments[2]; } + const SFVEC2F& GetV3() const { return m_segments[3]; } - const SFVEC2F &GetN0() const { return m_seg_normal[0]; } - const SFVEC2F &GetN1() const { return m_seg_normal[1]; } - const SFVEC2F &GetN2() const { return m_seg_normal[2]; } - const SFVEC2F &GetN3() const { return m_seg_normal[3]; } + const SFVEC2F& GetN0() const { return m_seg_normal[0]; } + const SFVEC2F& GetN1() const { return m_seg_normal[1]; } + const SFVEC2F& GetN2() const { return m_seg_normal[2]; } + const SFVEC2F& GetN3() const { return m_seg_normal[3]; } - // Imported from COBJECT2D - bool Overlaps( const CBBOX2D &aBBox ) const override; - bool Intersects( const CBBOX2D &aBBox ) const override; - bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const override; - INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const override; - bool IsPointInside( const SFVEC2F &aPoint ) const override; + bool Overlaps( const BBOX_2D& aBBox ) const override; + bool Intersects( const BBOX_2D& aBBox ) const override; + bool Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const override; + INTERSECTION_RESULT IsBBoxInside( const BBOX_2D& aBBox ) const override; + bool IsPointInside( const SFVEC2F& aPoint ) const override; private: SFVEC2F m_segments[4]; @@ -71,4 +67,4 @@ private: }; -#endif // _CPOLYGON4PTS2D_H_ +#endif // _POLYGON_4PT_2D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.cpp index c975748ffb..c6328d2146 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.cpp @@ -32,9 +32,9 @@ #include -CRING2D::CRING2D( const SFVEC2F& aCenter, float aInnerRadius, float aOuterRadius, +RING_2D::RING_2D( const SFVEC2F& aCenter, float aInnerRadius, float aOuterRadius, const BOARD_ITEM& aBoardItem ) : - COBJECT2D( OBJECT2D_TYPE::RING, aBoardItem ) + OBJECT_2D( OBJECT_2D_TYPE::RING, aBoardItem ) { wxASSERT( aInnerRadius < aOuterRadius ); @@ -55,30 +55,28 @@ CRING2D::CRING2D( const SFVEC2F& aCenter, float aInnerRadius, float aOuterRadius } -bool CRING2D::Overlaps( const CBBOX2D &aBBox ) const +bool RING_2D::Overlaps( const BBOX_2D& aBBox ) const { - // NOT IMPLEMENTED + // NOT IMPLEMENTED, why? return false; } -bool CRING2D::Intersects( const CBBOX2D &aBBox ) const +bool RING_2D::Intersects( const BBOX_2D& aBBox ) const { // !TODO: check the inside for a great improvement return aBBox.Intersects( m_center, m_outer_radius_squared ); } -bool CRING2D::Intersect( const RAYSEG2D &aSegRay, - float *aOutT, - SFVEC2F *aNormalOut ) const +bool RING_2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const { // This code used directly from Steve Marschner's CS667 framework // http://cs665pd.googlecode.com/svn/trunk/photon/sphere.cpp // Compute some factors used in computation - const float qx = (aSegRay.m_Start.x - m_center.x); - const float qy = (aSegRay.m_Start.y - m_center.y); + const float qx = ( aSegRay.m_Start.x - m_center.x ); + const float qy = ( aSegRay.m_Start.y - m_center.y ); const float qd = qx * aSegRay.m_Dir.x + qy * aSegRay.m_Dir.y; const float qq = qx * qx + qy * qy; @@ -95,9 +93,9 @@ bool CRING2D::Intersect( const RAYSEG2D &aSegRay, // Otherwise check and make sure that the intersections occur on the ray (t // > 0) and return the closer one const float discriminant = sqrt( discriminantsqr_outer ); - float t = (-qd - discriminant); + float t = ( -qd - discriminant ); - if( (t > FLT_EPSILON) && (t < aSegRay.m_Length) ) + if( ( t > FLT_EPSILON ) && ( t < aSegRay.m_Length ) ) { if( aNormalOut ) { @@ -113,9 +111,9 @@ bool CRING2D::Intersect( const RAYSEG2D &aSegRay, { const float discriminant_inner = sqrt( discriminantsqr_inter ); - const float t2_inner = (-qd + discriminant_inner); + const float t2_inner = ( -qd + discriminant_inner ); - if( (t2_inner > FLT_EPSILON) && (t2_inner < aSegRay.m_Length) ) + if( ( t2_inner > FLT_EPSILON ) && ( t2_inner < aSegRay.m_Length ) ) { t = t2_inner; @@ -123,7 +121,7 @@ bool CRING2D::Intersect( const RAYSEG2D &aSegRay, { const SFVEC2F hitPoint = aSegRay.at( t2_inner ); - *aNormalOut = (m_center - hitPoint) / m_inner_radius; + *aNormalOut = ( m_center - hitPoint ) / m_inner_radius; } } else @@ -147,58 +145,19 @@ bool CRING2D::Intersect( const RAYSEG2D &aSegRay, } -INTERSECTION_RESULT CRING2D::IsBBoxInside( const CBBOX2D &aBBox ) const +INTERSECTION_RESULT RING_2D::IsBBoxInside( const BBOX_2D& aBBox ) const { - /* - if( !m_bbox.Overlaps( aBBox ) ) - return INTERSECTION_RESULT::MISSES; - - SFVEC2F v[4]; - - v[0] = aBBox.Min() - m_center; - v[1] = aBBox.Max() - m_center; - v[2] = SFVEC2F( aBBox.Min().x, aBBox.Max().y ) - m_center; - v[3] = SFVEC2F( aBBox.Max().x, aBBox.Min().y ) - m_center; - - float s[4]; - - s[0] = v[0].x * v[0].x + v[0].y * v[0].y; - s[1] = v[1].x * v[1].x + v[1].y * v[1].y; - s[2] = v[2].x * v[2].x + v[2].y * v[2].y; - s[3] = v[3].x * v[3].x + v[3].y * v[3].y; - - bool isInside[4]; - - isInside[0] = s[0] <= m_radius_squared; - isInside[1] = s[1] <= m_radius_squared; - isInside[2] = s[2] <= m_radius_squared; - isInside[3] = s[3] <= m_radius_squared; - - // Check if all points are inside the circle - if( isInside[0] && - isInside[1] && - isInside[2] && - isInside[3] ) - return INTERSECTION_RESULT::FULL_INSIDE; - - // Check if any point is inside the circle - if( isInside[0] || - isInside[1] || - isInside[2] || - isInside[3] ) - return INTERSECTION_RESULT::INTERSECTS; -*/ return INTERSECTION_RESULT::MISSES; } -bool CRING2D::IsPointInside( const SFVEC2F &aPoint ) const +bool RING_2D::IsPointInside( const SFVEC2F& aPoint ) const { const SFVEC2F v = m_center - aPoint; const float dot = glm::dot( v, v ); - if( (dot <= m_outer_radius_squared) && (dot >= m_inner_radius_squared) ) + if( ( dot <= m_outer_radius_squared ) && ( dot >= m_inner_radius_squared ) ) return true; return false; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.h index 1e05f5fa2c..b8915e5473 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/cring2d.h @@ -27,25 +27,25 @@ * @brief */ -#ifndef _CRING2D_H_ -#define _CRING2D_H_ +#ifndef _RING_2D_H_ +#define _RING_2D_H_ #include "cobject2d.h" -class CRING2D : public COBJECT2D +class RING_2D : public OBJECT_2D { public: - CRING2D( const SFVEC2F &aCenter, float aInnerRadius, float aOuterRadius, - const BOARD_ITEM &aBoardItem ); + RING_2D( const SFVEC2F& aCenter, float aInnerRadius, float aOuterRadius, + const BOARD_ITEM& aBoardItem ); - // Imported from COBJECT2D - bool Overlaps( const CBBOX2D &aBBox ) const override; - bool Intersects( const CBBOX2D &aBBox ) const override; - bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const override; - INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const override; - bool IsPointInside( const SFVEC2F &aPoint ) const override; + // Imported from OBJECT_2D + bool Overlaps( const BBOX_2D& aBBox ) const override; + bool Intersects( const BBOX_2D& aBBox ) const override; + bool Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const override; + INTERSECTION_RESULT IsBBoxInside( const BBOX_2D& aBBox ) const override; + bool IsPointInside( const SFVEC2F& aPoint ) const override; - const SFVEC2F &GetCenter() const { return m_center; } + const SFVEC2F& GetCenter() const { return m_center; } float GetInnerRadius() const { return m_inner_radius; } float GetOuterRadius() const { return m_outer_radius; } @@ -61,4 +61,4 @@ private: }; -#endif // _CRING2D_H_ +#endif // _RING_2D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.cpp index 63f2cfd667..5633b16fa9 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.cpp @@ -31,9 +31,9 @@ #include -CROUNDSEGMENT2D::CROUNDSEGMENT2D( const SFVEC2F& aStart, const SFVEC2F& aEnd, float aWidth, - const BOARD_ITEM& aBoardItem ) : - COBJECT2D( OBJECT2D_TYPE::ROUNDSEG, aBoardItem ), +ROUND_SEGMENT_2D::ROUND_SEGMENT_2D( const SFVEC2F& aStart, const SFVEC2F& aEnd, float aWidth, + const BOARD_ITEM& aBoardItem ) : + OBJECT_2D( OBJECT_2D_TYPE::ROUNDSEG, aBoardItem ), m_segment( aStart, aEnd ) { wxASSERT( aStart != aEnd ); @@ -49,8 +49,7 @@ CROUNDSEGMENT2D::CROUNDSEGMENT2D( const SFVEC2F& aStart, const SFVEC2F& aEnd, fl m_leftEndMinusStart = m_leftEnd - m_leftStart; m_leftDir = glm::normalize( m_leftEndMinusStart ); - SFVEC2F rightRadiusOffset( -leftRadiusOffset.x, - -leftRadiusOffset.y ); + SFVEC2F rightRadiusOffset( -leftRadiusOffset.x, -leftRadiusOffset.y ); m_rightStart = aEnd + rightRadiusOffset; m_rightEnd = aStart + rightRadiusOffset; m_rightEndMinusStart = m_rightEnd - m_rightStart; @@ -67,7 +66,7 @@ CROUNDSEGMENT2D::CROUNDSEGMENT2D( const SFVEC2F& aStart, const SFVEC2F& aEnd, fl } -bool CROUNDSEGMENT2D::Intersects( const CBBOX2D &aBBox ) const +bool ROUND_SEGMENT_2D::Intersects( const BBOX_2D& aBBox ) const { if( !m_bbox.Intersects( aBBox ) ) return false; @@ -96,7 +95,6 @@ bool CROUNDSEGMENT2D::Intersects( const CBBOX2D &aBBox ) const if( IntersectSegment( m_leftStart, m_leftEndMinusStart, v[3], v[0] - v[3] ) ) return true; - if( IntersectSegment( m_rightStart, m_rightEndMinusStart, v[0], v[1] - v[0] ) ) return true; @@ -120,16 +118,14 @@ bool CROUNDSEGMENT2D::Intersects( const CBBOX2D &aBBox ) const } -bool CROUNDSEGMENT2D::Overlaps( const CBBOX2D &aBBox ) const +bool ROUND_SEGMENT_2D::Overlaps( const BBOX_2D& aBBox ) const { // NOT IMPLEMENTED return false; } -bool CROUNDSEGMENT2D::Intersect( const RAYSEG2D &aSegRay, - float *aOutT, - SFVEC2F *aNormalOut ) const +bool ROUND_SEGMENT_2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const { const bool start_is_inside = IsPointInside( aSegRay.m_Start ); const bool end_is_inside = IsPointInside( aSegRay.m_End ); @@ -147,8 +143,7 @@ bool CROUNDSEGMENT2D::Intersect( const RAYSEG2D &aSegRay, SFVEC2F farHitNormal; float leftSegT; - const bool leftSegmentHit = aSegRay.IntersectSegment( m_leftStart, - m_leftEndMinusStart, + const bool leftSegmentHit = aSegRay.IntersectSegment( m_leftStart, m_leftEndMinusStart, &leftSegT ); if( leftSegmentHit ) @@ -162,8 +157,7 @@ bool CROUNDSEGMENT2D::Intersect( const RAYSEG2D &aSegRay, } float rightSegT; - const bool rightSegmentHit = aSegRay.IntersectSegment( m_rightStart, - m_rightEndMinusStart, + const bool rightSegmentHit = aSegRay.IntersectSegment( m_rightStart, m_rightEndMinusStart, &rightSegT ); if( rightSegmentHit ) @@ -203,7 +197,7 @@ bool CROUNDSEGMENT2D::Intersect( const RAYSEG2D &aSegRay, { if( !start_is_inside ) { - if( (hitted == false) || (circleStart_T0 < closerHitT) ) + if( ( hitted == false ) || ( circleStart_T0 < closerHitT ) ) { closerHitT = circleStart_T0; closerHitNormal = circleStart_N0; @@ -211,7 +205,7 @@ bool CROUNDSEGMENT2D::Intersect( const RAYSEG2D &aSegRay, } else { - if( (hitted == false) || (circleStart_T1 > farHitT) ) + if( ( hitted == false ) || ( circleStart_T1 > farHitT ) ) { farHitT = circleStart_T1; farHitNormal = circleStart_N1; @@ -221,7 +215,7 @@ bool CROUNDSEGMENT2D::Intersect( const RAYSEG2D &aSegRay, else { // This can only happen if the ray starts inside - if( (hitted == false) || (circleStart_T1 > farHitT) ) + if( ( hitted == false ) || ( circleStart_T1 > farHitT ) ) { farHitT = circleStart_T1; farHitNormal = circleStart_N1; @@ -245,7 +239,7 @@ bool CROUNDSEGMENT2D::Intersect( const RAYSEG2D &aSegRay, { if( !start_is_inside ) { - if( (hitted == false) || (circleEnd_T0 < closerHitT) ) + if( ( hitted == false ) || ( circleEnd_T0 < closerHitT ) ) { closerHitT = circleEnd_T0; closerHitNormal = circleEnd_N0; @@ -253,7 +247,7 @@ bool CROUNDSEGMENT2D::Intersect( const RAYSEG2D &aSegRay, } else { - if( (hitted == false) || (circleEnd_T1 > farHitT) ) + if( ( hitted == false ) || ( circleEnd_T1 > farHitT ) ) { farHitT = circleEnd_T1; farHitNormal = circleEnd_N1; @@ -263,7 +257,7 @@ bool CROUNDSEGMENT2D::Intersect( const RAYSEG2D &aSegRay, else { // This can only happen if the ray starts inside - if( (hitted == false) || (circleEnd_T1 > farHitT) ) + if( ( hitted == false ) || ( circleEnd_T1 > farHitT ) ) { farHitT = circleEnd_T1; farHitNormal = circleEnd_N1; @@ -300,7 +294,7 @@ bool CROUNDSEGMENT2D::Intersect( const RAYSEG2D &aSegRay, } -INTERSECTION_RESULT CROUNDSEGMENT2D::IsBBoxInside( const CBBOX2D &aBBox ) const +INTERSECTION_RESULT ROUND_SEGMENT_2D::IsBBoxInside( const BBOX_2D &aBBox ) const { if( !m_bbox.Intersects( aBBox ) ) return INTERSECTION_RESULT::MISSES; @@ -331,7 +325,7 @@ INTERSECTION_RESULT CROUNDSEGMENT2D::IsBBoxInside( const CBBOX2D &aBBox ) const } -bool CROUNDSEGMENT2D::IsPointInside( const SFVEC2F &aPoint ) const +bool ROUND_SEGMENT_2D::IsPointInside( const SFVEC2F& aPoint ) const { float dSquared = m_segment.DistanceToPointSquared( aPoint ); diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.h index 3baacc4a18..a5b2280391 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/croundsegment2d.h @@ -24,50 +24,47 @@ /** * @file croundsegment2d.h - * @brief */ -#ifndef _CROUNDSEGMENT2D_H_ -#define _CROUNDSEGMENT2D_H_ +#ifndef _ROUND_SEGMENT_2D_H_ +#define _ROUND_SEGMENT_2D_H_ #include "cobject2d.h" -class CROUNDSEGMENT2D : public COBJECT2D +class ROUND_SEGMENT_2D : public OBJECT_2D { - -friend class CROUNDSEG; - public: - CROUNDSEGMENT2D( const SFVEC2F &aStart, const SFVEC2F &aEnd, float aWidth, - const BOARD_ITEM &aBoardItem ); + ROUND_SEGMENT_2D( const SFVEC2F& aStart, const SFVEC2F& aEnd, float aWidth, + const BOARD_ITEM& aBoardItem ); float GetRadius() const { return m_radius; } float GetRadiusSquared() const { return m_radius_squared; } float GetWidth() const { return m_width; } float GetLength() const { return m_segment.m_Length; } - const SFVEC2F &GetStart() const { return m_segment.m_Start; } - const SFVEC2F &GetEnd() const { return m_segment.m_End; } - const SFVEC2F &GetEnd_minus_Start() const { return m_segment.m_End_minus_start; } + const SFVEC2F& GetStart() const { return m_segment.m_Start; } + const SFVEC2F& GetEnd() const { return m_segment.m_End; } + const SFVEC2F& GetEnd_minus_Start() const { return m_segment.m_End_minus_start; } - const SFVEC2F &GetLeftStar() const { return m_leftStart; } - const SFVEC2F &GetLeftEnd() const { return m_leftEnd; } - const SFVEC2F &GetLeftEnd_minus_Start() const { return m_leftEndMinusStart; } - const SFVEC2F &GetLeftDir() const { return m_leftDir; } + const SFVEC2F& GetLeftStar() const { return m_leftStart; } + const SFVEC2F& GetLeftEnd() const { return m_leftEnd; } + const SFVEC2F& GetLeftEnd_minus_Start() const { return m_leftEndMinusStart; } + const SFVEC2F& GetLeftDir() const { return m_leftDir; } - const SFVEC2F &GetRightStar() const { return m_rightStart; } - const SFVEC2F &GetRightEnd() const { return m_rightEnd; } - const SFVEC2F &GetRightEnd_minus_Start() const { return m_rightEndMinusStart; } - const SFVEC2F &GetRightDir() const { return m_rightDir; } + const SFVEC2F& GetRightStar() const { return m_rightStart; } + const SFVEC2F& GetRightEnd() const { return m_rightEnd; } + const SFVEC2F& GetRightEnd_minus_Start() const { return m_rightEndMinusStart; } + const SFVEC2F& GetRightDir() const { return m_rightDir; } - // Imported from COBJECT2D - bool Overlaps( const CBBOX2D &aBBox ) const override; - bool Intersects( const CBBOX2D &aBBox ) const override; - bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const override; - INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const override; - bool IsPointInside( const SFVEC2F &aPoint ) const override; + bool Overlaps( const BBOX_2D& aBBox ) const override; + bool Intersects( const BBOX_2D& aBBox ) const override; + bool Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const override; + INTERSECTION_RESULT IsBBoxInside( const BBOX_2D& aBBox ) const override; + bool IsPointInside( const SFVEC2F& aPoint ) const override; private: + friend class ROUND_SEGMENT; + RAYSEG2D m_segment; SFVEC2F m_leftStart; @@ -85,7 +82,7 @@ private: float m_width; }; -static const float s_min_dot = (FLT_EPSILON * 4.0f * FLT_EPSILON * 4.0f) ; +static const float s_min_dot = ( FLT_EPSILON * 4.0f * FLT_EPSILON * 4.0f ); /** * Check if segment start and end is very close to each other. @@ -94,7 +91,7 @@ static const float s_min_dot = (FLT_EPSILON * 4.0f * FLT_EPSILON * 4.0f) ; * * @return true is it is better to convert the segment to circle */ -inline bool Is_segment_a_circle( const SFVEC2F &aStart, const SFVEC2F &aEnd ) +inline bool Is_segment_a_circle( const SFVEC2F& aStart, const SFVEC2F& aEnd ) { const SFVEC2F vec = aEnd - aStart; @@ -104,4 +101,4 @@ inline bool Is_segment_a_circle( const SFVEC2F &aStart, const SFVEC2F &aEnd ) ( glm::dot( vec, vec ) <= s_min_dot ); } -#endif // _CROUNDSEGMENT2D_H_ +#endif // _ROUND_SEGMENT_2D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.cpp index 807b52892d..7ab3653ba2 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.cpp @@ -39,9 +39,9 @@ #include "../../../3d_fastmath.h" -CTRIANGLE2D::CTRIANGLE2D( const SFVEC2F& aV1, const SFVEC2F& aV2, const SFVEC2F& aV3, +TRIANGLE_2D::TRIANGLE_2D( const SFVEC2F& aV1, const SFVEC2F& aV2, const SFVEC2F& aV3, const BOARD_ITEM& aBoardItem ) : - COBJECT2D( OBJECT2D_TYPE::TRIANGLE, aBoardItem ) + OBJECT_2D( OBJECT_2D_TYPE::TRIANGLE, aBoardItem ) { p1 = aV1; p2 = aV2; @@ -66,7 +66,7 @@ CTRIANGLE2D::CTRIANGLE2D( const SFVEC2F& aV1, const SFVEC2F& aV2, const SFVEC2F& } -bool CTRIANGLE2D::Intersects( const CBBOX2D &aBBox ) const +bool TRIANGLE_2D::Intersects( const BBOX_2D& aBBox ) const { if( !m_bbox.Intersects( aBBox ) ) return false; @@ -76,22 +76,20 @@ bool CTRIANGLE2D::Intersects( const CBBOX2D &aBBox ) const } -bool CTRIANGLE2D::Overlaps( const CBBOX2D &aBBox ) const +bool TRIANGLE_2D::Overlaps( const BBOX_2D& aBBox ) const { // NOT IMPLEMENTED return false; } -bool CTRIANGLE2D::Intersect( const RAYSEG2D &aSegRay, - float *aOutT, - SFVEC2F *aNormalOut ) const +bool TRIANGLE_2D::Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const { return false; } -INTERSECTION_RESULT CTRIANGLE2D::IsBBoxInside( const CBBOX2D &aBBox ) const +INTERSECTION_RESULT TRIANGLE_2D::IsBBoxInside( const BBOX_2D& aBBox ) const { if( !m_bbox.Intersects( aBBox ) ) return INTERSECTION_RESULT::MISSES; @@ -101,7 +99,7 @@ INTERSECTION_RESULT CTRIANGLE2D::IsBBoxInside( const CBBOX2D &aBBox ) const } -bool CTRIANGLE2D::IsPointInside( const SFVEC2F &aPoint ) const +bool TRIANGLE_2D::IsPointInside( const SFVEC2F& aPoint ) const { // http://totologic.blogspot.co.uk/2014/01/accurate-point-in-triangle-test.html @@ -126,10 +124,10 @@ bool CTRIANGLE2D::IsPointInside( const SFVEC2F &aPoint ) const } -void Convert_shape_line_polygon_to_triangles( SHAPE_POLY_SET &aPolyList, - CGENERICCONTAINER2D &aDstContainer, +void Convert_shape_line_polygon_to_triangles( SHAPE_POLY_SET& aPolyList, + CONTAINER_2D_BASE& aDstContainer, float aBiuTo3DunitsScale , - const BOARD_ITEM &aBoardItem ) + const BOARD_ITEM& aBoardItem ) { VECTOR2I a; VECTOR2I b; @@ -146,12 +144,9 @@ void Convert_shape_line_polygon_to_triangles( SHAPE_POLY_SET &aPolyList, { triPoly->GetTriangle( i, a, b, c ); - aDstContainer.Add( new CTRIANGLE2D( SFVEC2F( a.x * conver_d, - -a.y * conver_d ), - SFVEC2F( b.x * conver_d, - -b.y * conver_d ), - SFVEC2F( c.x * conver_d, - -c.y * conver_d ), + aDstContainer.Add( new TRIANGLE_2D( SFVEC2F( a.x * conver_d, -a.y * conver_d ), + SFVEC2F( b.x * conver_d, -b.y * conver_d ), + SFVEC2F( c.x * conver_d, -c.y * conver_d ), aBoardItem ) ); } } diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.h index 721f3139a5..7af908d26d 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes2D/ctriangle2d.h @@ -23,12 +23,11 @@ */ /** - * @file ctriangle2d.h - * @brief + * @file ctriangle2d.h */ -#ifndef _CTRIANGLE2D_H_ -#define _CTRIANGLE2D_H_ +#ifndef _TRIANGLE_2D_H_ +#define _TRIANGLE_2D_H_ #include "cobject2d.h" #include "../accelerators/ccontainer2d.h" @@ -36,24 +35,22 @@ #include #include -class CTRIANGLE2D : public COBJECT2D +class TRIANGLE_2D : public OBJECT_2D { public: - CTRIANGLE2D ( const SFVEC2F &aV1, - const SFVEC2F &aV2, - const SFVEC2F &aV3, - const BOARD_ITEM &aBoardItem ); + TRIANGLE_2D( const SFVEC2F& aV1, const SFVEC2F& aV2, const SFVEC2F& aV3, + const BOARD_ITEM& aBoardItem ); - const SFVEC2F &GetP1() const { return p1; } - const SFVEC2F &GetP2() const { return p2; } - const SFVEC2F &GetP3() const { return p3; } + const SFVEC2F& GetP1() const { return p1; } + const SFVEC2F& GetP2() const { return p2; } + const SFVEC2F& GetP3() const { return p3; } - // Imported from COBJECT2D - bool Overlaps( const CBBOX2D &aBBox ) const override; - bool Intersects( const CBBOX2D &aBBox ) const override; - bool Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const override; - INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const override; - bool IsPointInside( const SFVEC2F &aPoint ) const override; + // Imported from OBJECT_2D + bool Overlaps( const BBOX_2D& aBBox ) const override; + bool Intersects( const BBOX_2D& aBBox ) const override; + bool Intersect( const RAYSEG2D& aSegRay, float* aOutT, SFVEC2F* aNormalOut ) const override; + INTERSECTION_RESULT IsBBoxInside( const BBOX_2D& aBBox ) const override; + bool IsPointInside( const SFVEC2F& aPoint ) const override; private: SFVEC2F p1; @@ -68,8 +65,8 @@ private: }; -void Convert_shape_line_polygon_to_triangles( SHAPE_POLY_SET &aPolyList, - CGENERICCONTAINER2D &aDstContainer, +void Convert_shape_line_polygon_to_triangles( SHAPE_POLY_SET& aPolyList, + CONTAINER_2D_BASE& aDstContainer, float aBiuTo3DunitsScale, - const BOARD_ITEM &aBoardItem ); -#endif // _CTRIANGLE2D_H_ + const BOARD_ITEM& aBoardItem ); +#endif // _TRIANGLE_2D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox.cpp index 0b65c25922..d92030bd03 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox.cpp @@ -34,38 +34,38 @@ #include // For the wxASSERT -CBBOX::CBBOX() +BBOX_3D::BBOX_3D() { Reset(); } -CBBOX::CBBOX( const SFVEC3F &aPbInit ) +BBOX_3D::BBOX_3D( const SFVEC3F& aPbInit ) { m_min = aPbInit; m_max = aPbInit; } -CBBOX::CBBOX( const SFVEC3F &aPbMin, const SFVEC3F &aPbMax ) +BBOX_3D::BBOX_3D( const SFVEC3F& aPbMin, const SFVEC3F& aPbMax ) { Set( aPbMin, aPbMax ); } -CBBOX::~CBBOX() +BBOX_3D::~BBOX_3D() { } -void CBBOX::Set( const SFVEC3F &aPoint ) +void BBOX_3D::Set( const SFVEC3F& aPoint ) { m_min = aPoint; m_max = aPoint; } -void CBBOX::Set( const SFVEC3F &aPbMin, const SFVEC3F &aPbMax ) +void BBOX_3D::Set( const SFVEC3F& aPbMin, const SFVEC3F& aPbMax ) { m_min.x = fminf( aPbMin.x, aPbMax.x ); m_min.y = fminf( aPbMin.y, aPbMax.y ); @@ -77,7 +77,7 @@ void CBBOX::Set( const SFVEC3F &aPbMin, const SFVEC3F &aPbMax ) } -void CBBOX::Set( const CBBOX &aBBox ) +void BBOX_3D::Set( const BBOX_3D& aBBox ) { wxASSERT( aBBox.IsInitialized() ); @@ -85,25 +85,21 @@ void CBBOX::Set( const CBBOX &aBBox ) } -bool CBBOX::IsInitialized() const +bool BBOX_3D::IsInitialized() const { - return !( ( FLT_MAX == m_min.x) || - ( FLT_MAX == m_min.y) || - ( FLT_MAX == m_min.z) || - (-FLT_MAX == m_max.x) || - (-FLT_MAX == m_max.y) || - (-FLT_MAX == m_max.z) ); + return !( ( FLT_MAX == m_min.x) || ( FLT_MAX == m_min.y) || ( FLT_MAX == m_min.z) || + (-FLT_MAX == m_max.x) || (-FLT_MAX == m_max.y) || (-FLT_MAX == m_max.z) ); } -void CBBOX::Reset() +void BBOX_3D::Reset() { m_min = SFVEC3F( FLT_MAX, FLT_MAX, FLT_MAX ); m_max = SFVEC3F(-FLT_MAX,-FLT_MAX,-FLT_MAX ); } -void CBBOX::Union( const SFVEC3F &aPoint ) +void BBOX_3D::Union( const SFVEC3F& aPoint ) { // get the minimum value between the added point and the existent bounding box m_min.x = fminf( m_min.x, aPoint.x ); @@ -117,7 +113,7 @@ void CBBOX::Union( const SFVEC3F &aPoint ) } -void CBBOX::Union( const CBBOX &aBBox ) +void BBOX_3D::Union( const BBOX_3D& aBBox ) { wxASSERT( aBBox.IsInitialized() ); @@ -133,26 +129,26 @@ void CBBOX::Union( const CBBOX &aBBox ) } -SFVEC3F CBBOX::GetCenter() const +SFVEC3F BBOX_3D::GetCenter() const { - return (m_max + m_min) * 0.5f; + return ( m_max + m_min ) * 0.5f; } -float CBBOX::GetCenter( unsigned int aAxis ) const +float BBOX_3D::GetCenter( unsigned int aAxis ) const { wxASSERT( aAxis < 3 ); return (m_max[aAxis] + m_min[aAxis]) * 0.5f; } -const SFVEC3F CBBOX::GetExtent() const +const SFVEC3F BBOX_3D::GetExtent() const { return m_max - m_min; } -unsigned int CBBOX::MaxDimension() const +unsigned int BBOX_3D::MaxDimension() const { unsigned int result = 0; @@ -160,6 +156,7 @@ unsigned int CBBOX::MaxDimension() const if( extent.y > extent.x ) result = 1; + if( extent.z > extent.y ) result = 2; @@ -167,7 +164,7 @@ unsigned int CBBOX::MaxDimension() const } -float CBBOX::GetMaxDimension() const +float BBOX_3D::GetMaxDimension() const { unsigned int max_dimensions_idx = 0; @@ -175,6 +172,7 @@ float CBBOX::GetMaxDimension() const if( extent.y > extent.x ) max_dimensions_idx = 1; + if( extent.z > extent.y ) max_dimensions_idx = 2; @@ -182,29 +180,27 @@ float CBBOX::GetMaxDimension() const } -float CBBOX::SurfaceArea() const +float BBOX_3D::SurfaceArea() const { SFVEC3F extent = GetExtent(); - return 2.0f * ( extent.x * extent.z + - extent.x * extent.y + - extent.y * extent.z ); + return 2.0f * ( extent.x * extent.z + extent.x * extent.y + extent.y * extent.z ); } -void CBBOX::Scale( float aScale ) +void BBOX_3D::Scale( float aScale ) { wxASSERT( IsInitialized() ); SFVEC3F scaleV = SFVEC3F( aScale, aScale, aScale ); SFVEC3F centerV = GetCenter(); - m_min = (m_min - centerV) * scaleV + centerV; - m_max = (m_max - centerV) * scaleV + centerV; + m_min = ( m_min - centerV ) * scaleV + centerV; + m_max = ( m_max - centerV ) * scaleV + centerV; } -void CBBOX::ScaleNextUp() +void BBOX_3D::ScaleNextUp() { m_min.x = NextFloatDown( m_min.x ); m_min.y = NextFloatDown( m_min.y ); @@ -216,7 +212,7 @@ void CBBOX::ScaleNextUp() } -void CBBOX::ScaleNextDown() +void BBOX_3D::ScaleNextDown() { m_min.x = NextFloatUp( m_min.x ); m_min.y = NextFloatUp( m_min.y ); @@ -228,7 +224,7 @@ void CBBOX::ScaleNextDown() } -bool CBBOX::Intersects( const CBBOX &aBBox ) const +bool BBOX_3D::Intersects( const BBOX_3D& aBBox ) const { wxASSERT( IsInitialized() ); wxASSERT( aBBox.IsInitialized() ); @@ -241,7 +237,7 @@ bool CBBOX::Intersects( const CBBOX &aBBox ) const } -bool CBBOX::Inside( const SFVEC3F &aPoint ) const +bool BBOX_3D::Inside( const SFVEC3F& aPoint ) const { wxASSERT( IsInitialized() ); @@ -251,7 +247,7 @@ bool CBBOX::Inside( const SFVEC3F &aPoint ) const } -float CBBOX::Volume() const +float BBOX_3D::Volume() const { wxASSERT( IsInitialized() ); @@ -261,7 +257,7 @@ float CBBOX::Volume() const } -SFVEC3F CBBOX::Offset( const SFVEC3F &p ) const +SFVEC3F BBOX_3D::Offset( const SFVEC3F& p ) const { return (p - m_min) / (m_max - m_min); } @@ -270,9 +266,8 @@ SFVEC3F CBBOX::Offset( const SFVEC3F &p ) const // Intersection code based on the book: // "Physical Based Ray Tracing" (by Matt Pharr and Greg Humphrey) // https://github.com/mmp/pbrt-v2/blob/master/src/core/geometry.cpp#L68 -// ///////////////////////////////////////////////////////////////////////// #if 0 -bool CBBOX::Intersect( const RAY &aRay, float *aOutHitt0, float *aOutHitt1 ) const +bool BBOX_3D::Intersect( const RAY& aRay, float* aOutHitt0, float* aOutHitt1 ) const { float t0 = 0.0f; float t1 = FLT_MAX; @@ -280,8 +275,8 @@ bool CBBOX::Intersect( const RAY &aRay, float *aOutHitt0, float *aOutHitt1 ) con for( unsigned int i = 0; i < 3; ++i ) { // Update interval for _i_th bounding box slab - float tNear = (m_min[i] - aRay.m_Origin[i]) * aRay.m_InvDir[i]; - float tFar = (m_max[i] - aRay.m_Origin[i]) * aRay.m_InvDir[i]; + float tNear = ( m_min[i] - aRay.m_Origin[i] ) * aRay.m_InvDir[i]; + float tFar = ( m_max[i] - aRay.m_Origin[i] ) * aRay.m_InvDir[i]; // Update parametric interval from slab intersection if( tNear > tFar ) @@ -301,6 +296,7 @@ bool CBBOX::Intersect( const RAY &aRay, float *aOutHitt0, float *aOutHitt1 ) con if( aOutHitt0 ) *aOutHitt0 = t0; + if( aOutHitt1 ) *aOutHitt1 = t1; @@ -308,9 +304,7 @@ bool CBBOX::Intersect( const RAY &aRay, float *aOutHitt0, float *aOutHitt1 ) con } #else // https://github.com/mmp/pbrt-v2/blob/master/src/accelerators/bvh.cpp#L126 -bool CBBOX::Intersect( const RAY &aRay, - float *aOutHitt0, - float *aOutHitt1 ) const +bool BBOX_3D::Intersect( const RAY& aRay, float* aOutHitt0, float* aOutHitt1 ) const { wxASSERT( aOutHitt0 ); wxASSERT( aOutHitt1 ); @@ -323,17 +317,17 @@ bool CBBOX::Intersect( const RAY &aRay, const float tymin = (bounds[ aRay.m_dirIsNeg[1]].y - aRay.m_Origin.y) * aRay.m_InvDir.y; const float tymax = (bounds[1 - aRay.m_dirIsNeg[1]].y - aRay.m_Origin.y) * aRay.m_InvDir.y; - if( (tmin > tymax) || (tymin > tmax) ) + if( ( tmin > tymax ) || ( tymin > tmax ) ) return false; - tmin = (tymin > tmin)? tymin : tmin; - tmax = (tymax < tmax)? tymax : tmax; + tmin = ( tymin > tmin ) ? tymin : tmin; + tmax = ( tymax < tmax ) ? tymax : tmax; // Check for ray intersection against z slab const float tzmin = (bounds[ aRay.m_dirIsNeg[2]].z - aRay.m_Origin.z) * aRay.m_InvDir.z; const float tzmax = (bounds[1 - aRay.m_dirIsNeg[2]].z - aRay.m_Origin.z) * aRay.m_InvDir.z; - if( (tmin > tzmax) || (tzmin > tmax) ) + if( ( tmin > tzmax ) || ( tzmin > tmax ) ) return false; tmin = (tzmin > tmin)? tzmin : tmin; @@ -349,15 +343,13 @@ bool CBBOX::Intersect( const RAY &aRay, #endif -void CBBOX::ApplyTransformation( glm::mat4 aTransformMatrix ) +void BBOX_3D::ApplyTransformation( glm::mat4 aTransformMatrix ) { wxASSERT( IsInitialized() ); - const SFVEC3F v1 = SFVEC3F( aTransformMatrix * - glm::vec4( m_min.x, m_min.y, m_min.z, 1.0f ) ); + const SFVEC3F v1 = SFVEC3F( aTransformMatrix * glm::vec4( m_min.x, m_min.y, m_min.z, 1.0f ) ); - const SFVEC3F v2 = SFVEC3F( aTransformMatrix * - glm::vec4( m_max.x, m_max.y, m_max.z, 1.0f ) ); + const SFVEC3F v2 = SFVEC3F( aTransformMatrix * glm::vec4( m_max.x, m_max.y, m_max.z, 1.0f ) ); Reset(); Union( v1 ); @@ -365,36 +357,28 @@ void CBBOX::ApplyTransformation( glm::mat4 aTransformMatrix ) } -void CBBOX::ApplyTransformationAA( glm::mat4 aTransformMatrix ) +void BBOX_3D::ApplyTransformationAA( glm::mat4 aTransformMatrix ) { wxASSERT( IsInitialized() ); // apply the transformation matrix for each of vertices of the bounding box // and make a union with all vertices - CBBOX tmpBBox = CBBOX( - SFVEC3F( aTransformMatrix * - glm::vec4( m_min.x, m_min.y, m_min.z, 1.0f ) ) ); - tmpBBox.Union( SFVEC3F( aTransformMatrix * - glm::vec4( m_max.x, m_min.y, m_min.z, 1.0f ) ) ); - tmpBBox.Union( SFVEC3F( aTransformMatrix * - glm::vec4( m_min.x, m_max.y, m_min.z, 1.0f ) ) ); - tmpBBox.Union( SFVEC3F( aTransformMatrix * - glm::vec4( m_min.x, m_min.y, m_max.z, 1.0f ) ) ); - tmpBBox.Union( SFVEC3F( aTransformMatrix * - glm::vec4( m_min.x, m_max.y, m_max.z, 1.0f ) ) ); - tmpBBox.Union( SFVEC3F( aTransformMatrix * - glm::vec4( m_max.x, m_max.y, m_min.z, 1.0f ) ) ); - tmpBBox.Union( SFVEC3F( aTransformMatrix * - glm::vec4( m_max.x, m_min.y, m_max.z, 1.0f ) ) ); - tmpBBox.Union( SFVEC3F( aTransformMatrix * - glm::vec4( m_max.x, m_max.y, m_max.z, 1.0f ) ) ); + BBOX_3D tmpBBox = BBOX_3D( + SFVEC3F( aTransformMatrix * glm::vec4( m_min.x, m_min.y, m_min.z, 1.0f ) ) ); + tmpBBox.Union( SFVEC3F( aTransformMatrix * glm::vec4( m_max.x, m_min.y, m_min.z, 1.0f ) ) ); + tmpBBox.Union( SFVEC3F( aTransformMatrix * glm::vec4( m_min.x, m_max.y, m_min.z, 1.0f ) ) ); + tmpBBox.Union( SFVEC3F( aTransformMatrix * glm::vec4( m_min.x, m_min.y, m_max.z, 1.0f ) ) ); + tmpBBox.Union( SFVEC3F( aTransformMatrix * glm::vec4( m_min.x, m_max.y, m_max.z, 1.0f ) ) ); + tmpBBox.Union( SFVEC3F( aTransformMatrix * glm::vec4( m_max.x, m_max.y, m_min.z, 1.0f ) ) ); + tmpBBox.Union( SFVEC3F( aTransformMatrix * glm::vec4( m_max.x, m_min.y, m_max.z, 1.0f ) ) ); + tmpBBox.Union( SFVEC3F( aTransformMatrix * glm::vec4( m_max.x, m_max.y, m_max.z, 1.0f ) ) ); m_min = tmpBBox.m_min; m_max = tmpBBox.m_max; } -void CBBOX::debug() const +void BBOX_3D::debug() const { wxLogDebug( "min(%f, %f, %f) - max(%f, %f, %f)\n", m_min.x, m_min.y, m_min.z, m_max.x, m_max.y, m_max.z ); diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox.h index 258c0b7ed7..c174328d46 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox.h @@ -27,28 +27,28 @@ * @brief Bounding Box class definition */ -#ifndef _CBBOX_H_ -#define _CBBOX_H_ +#ifndef _BBOX_3D_H_ +#define _BBOX_3D_H_ #include "../ray.h" /** * Manage a bounding box defined by two SFVEC3F min max points. */ -struct CBBOX +struct BBOX_3D { public: /** * Create with default values a bounding box (not initialized) */ - CBBOX(); + BBOX_3D(); /** * Initialize a bounding box with a given point. * * @param aPbInit a point for the bounding box initialization. */ - explicit CBBOX( const SFVEC3F &aPbInit ); + explicit BBOX_3D( const SFVEC3F& aPbInit ); /** * Initialize a bounding box with a minimum and a maximum point. @@ -56,9 +56,9 @@ public: * @param aPbMin the minimum point to initialize the bounding box. * @param aPbMax the maximum point to initialize the bounding box. */ - CBBOX( const SFVEC3F &aPbMin, const SFVEC3F &aPbMax ); + BBOX_3D( const SFVEC3F& aPbMin, const SFVEC3F& aPbMax ); - ~CBBOX(); + ~BBOX_3D(); /** @@ -67,9 +67,9 @@ public: * @param aPbMin the minimum point to initialize the bounding box. * @param aPbMax the maximum point to initialize the bounding box. */ - void Set( const SFVEC3F &aPbMin, const SFVEC3F &aPbMax ); + void Set( const SFVEC3F& aPbMin, const SFVEC3F& aPbMax ); - void Set( const CBBOX &aBBox ); + void Set( const BBOX_3D& aBBox ); /** * @brief Set @@ -83,14 +83,14 @@ public: * * @param aPoint the point to be bounded. */ - void Union( const SFVEC3F &aPoint ); + void Union( const SFVEC3F& aPoint ); /** * Recalculate the bounding box adding other bounding box. * * @param aBBox the bounding box to be bounded. */ - void Union( const CBBOX &aBBox ); + void Union( const BBOX_3D& aBBox ); /** * Scales a bounding box by its center. @@ -114,14 +114,14 @@ public: * * @param aBBox the bounding box to check if it intersects. */ - bool Intersects( const CBBOX &aBBox ) const; + bool Intersects( const BBOX_3D& aBBox ) const; /** * Check if a point is inside this bounding box. * * @param aPoint point to test. */ - bool Inside( const SFVEC3F &aPoint ) const; + bool Inside( const SFVEC3F& aPoint ) const; /** * Apply a transformation matrix to the box points. @@ -146,7 +146,7 @@ public: float Volume() const; /** - * Output this CBBOX to the stdout. + * Output this BBOX_3D to the stdout. */ void debug() const; @@ -179,7 +179,7 @@ public: /** * @return SFVEC3F - return the offset relative to max-min. */ - SFVEC3F Offset( const SFVEC3F &p ) const; + SFVEC3F Offset( const SFVEC3F& p ) const; /** * @return SFVEC3F - max-min. @@ -191,14 +191,14 @@ public: * * @return SFVEC3F - the minimum vertex position. */ - const SFVEC3F &Min() const { return m_min; } + const SFVEC3F& Min() const { return m_min; } /** * Return the maximum vertex pointer. * * @return SFVEC3F - the maximum vertex position. */ - const SFVEC3F &Max() const { return m_max; } + const SFVEC3F& Max() const { return m_max; } /** @@ -221,9 +221,9 @@ public: * @param t The distance point of the ray of the intersection (if true). * @return true if the ray hits the box. */ - bool Intersect( const RAY &aRay, float *t ) const; + bool Intersect( const RAY& aRay, float* t ) const; - bool Intersect( const RAY &aRay ) const; + bool Intersect( const RAY& aRay ) const; /** * Fetch the enter and exit position when a ray starts inside the bounding box. @@ -233,7 +233,7 @@ public: * @param aOutHitt1 The distance point of the ray of the exit (if true). * @return true if the ray hits the box */ - bool Intersect( const RAY &aRay, float *aOutHitt0, float *aOutHitt1 ) const; + bool Intersect( const RAY& aRay, float* aOutHitt0, float* aOutHitt1 ) const; private: SFVEC3F m_min; ///< (12) point of the lower position of the bounding box diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox_ray.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox_ray.cpp index 3d88abce17..3b82a67eeb 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox_ray.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cbbox_ray.cpp @@ -2,7 +2,7 @@ * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2015-2016 Mario Luzeiro - * Copyright (C) 1992-2016 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 @@ -42,7 +42,7 @@ // This source code is public domain, but please mention us if you use it." -bool CBBOX::Intersect( const RAY& aRay, float* t ) const +bool BBOX_3D::Intersect( const RAY& aRay, float* t ) const { switch( aRay.m_Classification ) { @@ -557,7 +557,7 @@ bool CBBOX::Intersect( const RAY& aRay, float* t ) const } -bool CBBOX::Intersect( const RAY& aRay ) const +bool BBOX_3D::Intersect( const RAY& aRay ) const { switch( aRay.m_Classification ) { diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ccylinder.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ccylinder.cpp index b65f4f26da..ba79fa749c 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ccylinder.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ccylinder.cpp @@ -31,30 +31,24 @@ #include "ccylinder.h" -CVCYLINDER::CVCYLINDER( SFVEC2F aCenterPoint, float aZmin, float aZmax, float aRadius ) - : COBJECT( OBJECT3D_TYPE::CYLINDER ) +CYLINDER::CYLINDER( SFVEC2F aCenterPoint, float aZmin, float aZmax, float aRadius ) + : OBJECT_3D( OBJECT_3D_TYPE::CYLINDER ) { m_center = aCenterPoint; m_radius_squared = aRadius * aRadius; m_inv_radius = 1.0f / aRadius; - m_bbox.Set( SFVEC3F( aCenterPoint.x - aRadius, - aCenterPoint.y - aRadius, - aZmin ), - SFVEC3F( aCenterPoint.x + aRadius, - aCenterPoint.y + aRadius, - aZmax ) ); + m_bbox.Set( SFVEC3F( aCenterPoint.x - aRadius, aCenterPoint.y - aRadius, aZmin ), + SFVEC3F( aCenterPoint.x + aRadius, aCenterPoint.y + aRadius, aZmax ) ); m_bbox.ScaleNextUp(); m_centroid = m_bbox.GetCenter(); } -bool CVCYLINDER::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const +bool CYLINDER::Intersect( const RAY& aRay, HITINFO& aHitInfo ) const { - // Based on: - // http://www.cs.utah.edu/~lha/Code%206620%20/Ray4/Cylinder.cpp + // Based on: http://www.cs.utah.edu/~lha/Code%206620%20/Ray4/Cylinder.cpp // Ray-sphere intersection: geometric - // ///////////////////////////////////////////////////////////////////////// const double OCx_Start = aRay.m_Origin.x - m_center.x; const double OCy_Start = aRay.m_Origin.y - m_center.y; @@ -66,7 +60,7 @@ bool CVCYLINDER::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const (double)aRay.m_Dir.y * (double)OCy_Start; const double c = p_dot_p - m_radius_squared; - const float delta = (float)(b * b - a * c); + const float delta = (float) ( b * b - a * c ); bool hitResult = false; @@ -78,8 +72,7 @@ bool CVCYLINDER::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const const float t = (-b - sdelta) * inv_a; const float z = aRay.m_Origin.z + t * aRay.m_Dir.z; - if( (z >= m_bbox.Min().z) && - (z <= m_bbox.Max().z) ) + if( ( z >= m_bbox.Min().z ) && ( z <= m_bbox.Max().z ) ) { if( t < aHitInfo.m_tHit ) { @@ -93,8 +86,7 @@ bool CVCYLINDER::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const const float t1 = (-b + sdelta) * inv_a; const float z1 = aRay.m_Origin.z + t1 * aRay.m_Dir.z; - if( (z1 > m_bbox.Min().z ) && - (z1 < m_bbox.Max().z ) ) + if( ( z1 > m_bbox.Min().z ) && ( z1 < m_bbox.Max().z ) ) { if( t1 < aHitInfo.m_tHit ) { @@ -109,8 +101,7 @@ bool CVCYLINDER::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const { aHitInfo.m_HitPoint = aRay.at( aHitInfo.m_tHit ); - const SFVEC2F hitPoint2D = SFVEC2F( aHitInfo.m_HitPoint.x, - aHitInfo.m_HitPoint.y ); + const SFVEC2F hitPoint2D = SFVEC2F( aHitInfo.m_HitPoint.x, aHitInfo.m_HitPoint.y ); aHitInfo.m_HitNormal = SFVEC3F( -(hitPoint2D.x - m_center.x) * m_inv_radius, -(hitPoint2D.y - m_center.y) * m_inv_radius, @@ -125,12 +116,10 @@ bool CVCYLINDER::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const } -bool CVCYLINDER::IntersectP(const RAY &aRay , float aMaxDistance ) const +bool CYLINDER::IntersectP(const RAY& aRay , float aMaxDistance ) const { - // Based on: - // http://www.cs.utah.edu/~lha/Code%206620%20/Ray4/Cylinder.cpp + // Based on: http://www.cs.utah.edu/~lha/Code%206620%20/Ray4/Cylinder.cpp // Ray-sphere intersection: geometric - // ///////////////////////////////////////////////////////////////////////// const double OCx_Start = aRay.m_Origin.x - m_center.x; const double OCy_Start = aRay.m_Origin.y - m_center.y; @@ -142,7 +131,7 @@ bool CVCYLINDER::IntersectP(const RAY &aRay , float aMaxDistance ) const (double)aRay.m_Dir.y * (double)OCy_Start; const double c = p_dot_p - m_radius_squared; - const float delta = (float)(b * b - a * c); + const float delta = (float) ( b * b - a * c ); if( delta > FLT_EPSILON ) { @@ -152,8 +141,7 @@ bool CVCYLINDER::IntersectP(const RAY &aRay , float aMaxDistance ) const const float t = (-b - sdelta) * inv_a; const float z = aRay.m_Origin.z + t * aRay.m_Dir.z; - if( (z >= m_bbox.Min().z) && - (z <= m_bbox.Max().z) ) + if( ( z >= m_bbox.Min().z ) && ( z <= m_bbox.Max().z ) ) { if( t < aMaxDistance ) return true; @@ -162,8 +150,7 @@ bool CVCYLINDER::IntersectP(const RAY &aRay , float aMaxDistance ) const const float t1 = (-b + sdelta) * inv_a; const float z1 = aRay.m_Origin.z + t1 * aRay.m_Dir.z; - if( (z1 > m_bbox.Min().z ) && - (z1 < m_bbox.Max().z ) ) + if( ( z1 > m_bbox.Min().z ) && ( z1 < m_bbox.Max().z ) ) { if( t1 < aMaxDistance ) return true; @@ -174,14 +161,14 @@ bool CVCYLINDER::IntersectP(const RAY &aRay , float aMaxDistance ) const } -bool CVCYLINDER::Intersects( const CBBOX &aBBox ) const +bool CYLINDER::Intersects( const BBOX_3D& aBBox ) const { // !TODO: improove return m_bbox.Intersects( aBBox ); } -SFVEC3F CVCYLINDER::GetDiffuseColor( const HITINFO &aHitInfo ) const +SFVEC3F CYLINDER::GetDiffuseColor( const HITINFO& aHitInfo ) const { (void)aHitInfo; // unused diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ccylinder.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ccylinder.h index 40cc48617b..1e71fe3bcf 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ccylinder.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ccylinder.h @@ -35,9 +35,8 @@ /** * A vertical cylinder */ -class CVCYLINDER : public COBJECT +class CYLINDER : public OBJECT_3D { - public: /** * @param aCenterPoint = position of the vertical cylinder axis in the XY plane @@ -45,15 +44,14 @@ public: * @param aZmax = top position (Z axis) * @param aRadius = radius of the cylinder */ - CVCYLINDER( SFVEC2F aCenterPoint, float aZmin, float aZmax, float aRadius ); + CYLINDER( SFVEC2F aCenterPoint, float aZmin, float aZmax, float aRadius ); void SetColor( SFVEC3F aObjColor ) { m_diffusecolor = aObjColor; } - // Imported from COBJECT - bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const override; - bool IntersectP(const RAY &aRay , float aMaxDistance ) const override; - bool Intersects( const CBBOX &aBBox ) const override; - SFVEC3F GetDiffuseColor( const HITINFO &aHitInfo ) const override; + bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const override; + bool IntersectP(const RAY& aRay, float aMaxDistance ) const override; + bool Intersects( const BBOX_3D& aBBox ) const override; + SFVEC3F GetDiffuseColor( const HITINFO& aHitInfo ) const override; private: SFVEC2F m_center; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cdummyblock.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cdummyblock.cpp index 54971ede48..4988b76a51 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cdummyblock.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cdummyblock.cpp @@ -2,7 +2,7 @@ * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2015-2016 Mario Luzeiro - * Copyright (C) 1992-2016 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 @@ -30,7 +30,7 @@ #include "cdummyblock.h" -CDUMMYBLOCK::CDUMMYBLOCK( const CBBOX& aBBox ) : COBJECT( OBJECT3D_TYPE::DUMMYBLOCK ) +DUMMY_BLOCK::DUMMY_BLOCK( const BBOX_3D& aBBox ) : OBJECT_3D( OBJECT_3D_TYPE::DUMMYBLOCK ) { m_centroid = aBBox.GetCenter(); m_bbox.Reset(); @@ -38,7 +38,7 @@ CDUMMYBLOCK::CDUMMYBLOCK( const CBBOX& aBBox ) : COBJECT( OBJECT3D_TYPE::DUMMYBL } -bool CDUMMYBLOCK::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const +bool DUMMY_BLOCK::Intersect( const RAY& aRay, HITINFO& aHitInfo ) const { float t; @@ -66,7 +66,7 @@ bool CDUMMYBLOCK::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const } -bool CDUMMYBLOCK::IntersectP(const RAY &aRay , float aMaxDistance ) const +bool DUMMY_BLOCK::IntersectP(const RAY& aRay, float aMaxDistance ) const { float t; @@ -80,13 +80,13 @@ bool CDUMMYBLOCK::IntersectP(const RAY &aRay , float aMaxDistance ) const } -bool CDUMMYBLOCK::Intersects( const CBBOX &aBBox ) const +bool DUMMY_BLOCK::Intersects( const BBOX_3D& aBBox ) const { return m_bbox.Intersects( aBBox ); } -SFVEC3F CDUMMYBLOCK::GetDiffuseColor( const HITINFO &aHitInfo ) const +SFVEC3F DUMMY_BLOCK::GetDiffuseColor( const HITINFO& aHitInfo ) const { (void)aHitInfo; // unused diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cdummyblock.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cdummyblock.h index 2562b54f6e..6ce038ca0f 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cdummyblock.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cdummyblock.h @@ -24,11 +24,10 @@ /** * @file cdummyblock.h - * @brief */ -#ifndef _CDUMMYBLOCK_H_ -#define _CDUMMYBLOCK_H_ +#ifndef _DUMMY_BLOCK_H_ +#define _DUMMY_BLOCK_H_ #include "cobject.h" @@ -36,22 +35,21 @@ * A dummy block is used to fill the polygons. It will only will be intercepted * from top or from bottom. */ -class CDUMMYBLOCK : public COBJECT +class DUMMY_BLOCK : public OBJECT_3D { public: - explicit CDUMMYBLOCK( const CBBOX &aBBox ); + explicit DUMMY_BLOCK( const BBOX_3D& aBBox ); void SetColor( SFVEC3F aObjColor ) { m_diffusecolor = aObjColor; } - // Imported from COBJECT - bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const override; - bool IntersectP(const RAY &aRay , float aMaxDistance ) const override; - bool Intersects( const CBBOX &aBBox ) const override; - SFVEC3F GetDiffuseColor( const HITINFO &aHitInfo ) const override; + bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const override; + bool IntersectP(const RAY& aRay , float aMaxDistance ) const override; + bool Intersects( const BBOX_3D& aBBox ) const override; + SFVEC3F GetDiffuseColor( const HITINFO& aHitInfo ) const override; private: SFVEC3F m_diffusecolor; }; -#endif // _CDUMMYBLOCK_H_ +#endif // _DUMMY_BLOCK_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/clayeritem.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/clayeritem.cpp index e9aba0e1c0..be338b7c09 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/clayeritem.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/clayeritem.cpp @@ -32,12 +32,13 @@ #include -CLAYERITEM::CLAYERITEM( const COBJECT2D* aObject2D, float aZMin, float aZMax ) - : COBJECT( OBJECT3D_TYPE::LAYERITEM ), m_object2d( aObject2D ) +LAYER_ITEM::LAYER_ITEM( const OBJECT_2D* aObject2D, float aZMin, float aZMax ) : + OBJECT_3D( OBJECT_3D_TYPE::LAYERITEM ), + m_object2d( aObject2D ) { wxASSERT( aObject2D ); - CBBOX2D bbox2d = m_object2d->GetBBox(); + BBOX_2D bbox2d = m_object2d->GetBBox(); bbox2d.ScaleNextUp(); bbox2d.ScaleNextUp(); @@ -47,13 +48,12 @@ CLAYERITEM::CLAYERITEM( const COBJECT2D* aObject2D, float aZMin, float aZMax ) m_bbox.ScaleNextUp(); m_bbox.Scale( 1.0001f ); - m_centroid = SFVEC3F( aObject2D->GetCentroid().x, - aObject2D->GetCentroid().y, - (aZMax + aZMin) * 0.5f ); + m_centroid = SFVEC3F( aObject2D->GetCentroid().x, aObject2D->GetCentroid().y, + ( aZMax + aZMin ) * 0.5f ); } -bool CLAYERITEM::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const +bool LAYER_ITEM::Intersect( const RAY& aRay, HITINFO& aHitInfo ) const { float tBBoxStart; float tBBoxEnd; @@ -76,7 +76,7 @@ bool CLAYERITEM::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const bool hit_top = false; bool hit_bot = false; - if( (float)fabs(aRay.m_Dir.z) > FLT_EPSILON ) + if( (float) fabs( aRay.m_Dir.z ) > FLT_EPSILON ) { tBot = (m_bbox.Min().z - aRay.m_Origin.z) * aRay.m_InvDir.z; tTop = (m_bbox.Max().z - aRay.m_Origin.z) * aRay.m_InvDir.z; @@ -220,8 +220,7 @@ bool CLAYERITEM::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const // The hitT is a hit value for the segment length 'start' - 'end', // so it ranges from 0.0 - 1.0. We now convert it to a 3D hit position // and calculate the real hitT of the ray. - SFVEC3F hitPoint = boxHitPointStart + - (boxHitPointEnd - boxHitPointStart) * tOut; + SFVEC3F hitPoint = boxHitPointStart + ( boxHitPointEnd - boxHitPointStart ) * tOut; const float t = glm::length( hitPoint - aRay.m_Origin ); @@ -230,8 +229,7 @@ bool CLAYERITEM::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const aHitInfo.m_tHit = t; aHitInfo.m_HitPoint = hitPoint; - if( (outNormal.x == 0.0f) && - (outNormal.y == 0.0f) ) + if( ( outNormal.x == 0.0f ) && ( outNormal.y == 0.0f ) ) { aHitInfo.m_HitNormal = SFVEC3F( 0.0f, 0.0f, 1.0f ); } @@ -264,16 +262,16 @@ bool CLAYERITEM::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const const SFVEC2F boxHitPointEnd2D( boxHitPointEnd.x, boxHitPointEnd.y ); - if(!(m_object2d->IsPointInside( boxHitPointStart2D ) && - m_object2d->IsPointInside( boxHitPointEnd2D ) ) ) + if( !( m_object2d->IsPointInside( boxHitPointStart2D ) && + m_object2d->IsPointInside( boxHitPointEnd2D ) ) ) return false; float tOut; SFVEC2F outNormal; RAYSEG2D raySeg( boxHitPointStart2D, boxHitPointEnd2D ); - if( (m_object2d->IsPointInside( boxHitPointStart2D ) && - m_object2d->IsPointInside( boxHitPointEnd2D ) ) ) + if( ( m_object2d->IsPointInside( boxHitPointStart2D ) && + m_object2d->IsPointInside( boxHitPointEnd2D ) ) ) { if( tBBoxEnd < aHitInfo.m_tHit ) { @@ -299,7 +297,7 @@ bool CLAYERITEM::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const // so it ranges from 0.0 - 1.0. We now convert it to a 3D hit position // and calculate the real hitT of the ray. const SFVEC3F hitPoint = boxHitPointStart + - (boxHitPointEnd - boxHitPointStart) * tOut; + ( boxHitPointEnd - boxHitPointStart ) * tOut; const float t = glm::length( hitPoint - aRay.m_Origin ); @@ -318,11 +316,12 @@ bool CLAYERITEM::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const } #endif } + return false; } -bool CLAYERITEM::IntersectP( const RAY &aRay , float aMaxDistance ) const +bool LAYER_ITEM::IntersectP( const RAY& aRay, float aMaxDistance ) const { float tBBoxStart; float tBBoxEnd; @@ -330,9 +329,7 @@ bool CLAYERITEM::IntersectP( const RAY &aRay , float aMaxDistance ) const if( !m_bbox.Intersect( aRay, &tBBoxStart, &tBBoxEnd ) ) return false; - if( ( tBBoxStart > aMaxDistance ) || - //( tBBoxEnd < FLT_EPSILON ) - ( fabs(tBBoxStart - tBBoxEnd) < FLT_EPSILON ) ) + if( ( tBBoxStart > aMaxDistance ) || ( fabs( tBBoxStart - tBBoxEnd ) < FLT_EPSILON ) ) return false; float tTop = FLT_MAX; @@ -340,10 +337,10 @@ bool CLAYERITEM::IntersectP( const RAY &aRay , float aMaxDistance ) const bool hit_top = false; bool hit_bot = false; - if( (float)fabs(aRay.m_Dir.z) > FLT_EPSILON ) + if( (float)fabs( aRay.m_Dir.z ) > FLT_EPSILON ) { - tBot = (m_bbox.Min().z - aRay.m_Origin.z) * aRay.m_InvDir.z; - tTop = (m_bbox.Max().z - aRay.m_Origin.z) * aRay.m_InvDir.z; + tBot = ( m_bbox.Min().z - aRay.m_Origin.z ) * aRay.m_InvDir.z; + tTop = ( m_bbox.Max().z - aRay.m_Origin.z ) * aRay.m_InvDir.z; const float tBBoxStartAdjusted = NextFloatUp( tBBoxStart ); @@ -455,10 +452,10 @@ bool CLAYERITEM::IntersectP( const RAY &aRay , float aMaxDistance ) const // so it ranges from 0.0 - 1.0. We now convert it to a 3D hit position // and calculate the real hitT of the ray. const SFVEC3F hitPoint = boxHitPointStart + - (boxHitPointEnd - boxHitPointStart) * tOut; + ( boxHitPointEnd - boxHitPointStart ) * tOut; const float t = glm::length( hitPoint - aRay.m_Origin ); - if( (t < aMaxDistance) && ( t > FLT_EPSILON ) ) + if( ( t < aMaxDistance ) && ( t > FLT_EPSILON ) ) return true; } } @@ -467,19 +464,19 @@ bool CLAYERITEM::IntersectP( const RAY &aRay , float aMaxDistance ) const } -bool CLAYERITEM::Intersects( const CBBOX &aBBox ) const +bool LAYER_ITEM::Intersects( const BBOX_3D& aBBox ) const { if( !m_bbox.Intersects( aBBox ) ) return false; - const CBBOX2D bbox2D( SFVEC2F( aBBox.Min().x, aBBox.Min().y), - SFVEC2F( aBBox.Max().x, aBBox.Max().y) ); + const BBOX_2D bbox2D( SFVEC2F( aBBox.Min().x, aBBox.Min().y ), + SFVEC2F( aBBox.Max().x, aBBox.Max().y ) ); return m_object2d->Intersects( bbox2D ); } -SFVEC3F CLAYERITEM::GetDiffuseColor( const HITINFO &aHitInfo ) const +SFVEC3F LAYER_ITEM::GetDiffuseColor( const HITINFO& aHitInfo ) const { (void)aHitInfo; // unused diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/clayeritem.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/clayeritem.h index 8d79c97841..08b513e3de 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/clayeritem.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/clayeritem.h @@ -27,31 +27,31 @@ * @brief */ -#ifndef _CLAYERITEM_H_ -#define _CLAYERITEM_H_ +#ifndef _LAYER_ITEM_H_ +#define _LAYER_ITEM_H_ #include "cobject.h" #include "../shapes2D/cobject2d.h" -class CLAYERITEM : public COBJECT +class LAYER_ITEM : public OBJECT_3D { public: - CLAYERITEM( const COBJECT2D *aObject2D, float aZMin, float aZMax ); + LAYER_ITEM( const OBJECT_2D* aObject2D, float aZMin, float aZMax ); void SetColor( SFVEC3F aObjColor ) { m_diffusecolor = aObjColor; } - // Imported from COBJECT - bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const override; - bool IntersectP(const RAY &aRay , float aMaxDistance ) const override; - bool Intersects( const CBBOX &aBBox ) const override; - SFVEC3F GetDiffuseColor( const HITINFO &aHitInfo ) const override; + // Imported from OBJECT_3D + bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const override; + bool IntersectP(const RAY& aRay , float aMaxDistance ) const override; + bool Intersects( const BBOX_3D& aBBox ) const override; + SFVEC3F GetDiffuseColor( const HITINFO& aHitInfo ) const override; protected: - const COBJECT2D *m_object2d; + const OBJECT_2D* m_object2d; private: SFVEC3F m_diffusecolor; }; -#endif // _CLAYERITEM_H_ +#endif // _LAYER_ITEM_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cobject.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cobject.cpp index e6f44839d0..101c5e1bd6 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cobject.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cobject.cpp @@ -32,15 +32,15 @@ #include -COBJECT3D_STATS *COBJECT3D_STATS::s_instance = 0; +OBJECT_3D_STATS* OBJECT_3D_STATS::s_instance = 0; -static const CBLINN_PHONG_MATERIAL s_defaultMaterial = CBLINN_PHONG_MATERIAL(); +static const BLINN_PHONG_MATERIAL s_defaultMaterial = BLINN_PHONG_MATERIAL(); -COBJECT::COBJECT( OBJECT3D_TYPE aObjType ) +OBJECT_3D::OBJECT_3D( OBJECT_3D_TYPE aObjType ) { m_obj_type = aObjType; - COBJECT3D_STATS::Instance().AddOne( aObjType ); + OBJECT_3D_STATS::Instance().AddOne( aObjType ); m_material = &s_defaultMaterial; m_modelTransparency = 0.0f; m_boardItem = nullptr; @@ -48,24 +48,24 @@ COBJECT::COBJECT( OBJECT3D_TYPE aObjType ) /* - * Lookup table for OBJECT2D_TYPE printed names + * Lookup table for OBJECT_2D_TYPE printed names */ // clang-format off -const std::map objectTypeNames +const std::map objectTypeNames { - { OBJECT3D_TYPE::CYLINDER, "OBJECT3D_TYPE::CYLINDER" }, - { OBJECT3D_TYPE::DUMMYBLOCK, "OBJECT2D_TYPE::DUMMYBLOCK" }, - { OBJECT3D_TYPE::LAYERITEM, "OBJECT2D_TYPE::LAYERITEM" }, - { OBJECT3D_TYPE::XYPLANE, "OBJECT2D_TYPE::XYPLANE" }, - { OBJECT3D_TYPE::ROUNDSEG, "OBJECT2D_TYPE::ROUNDSEG" }, - { OBJECT3D_TYPE::TRIANGLE, "OBJECT2D_TYPE::TRIANGLE" } + { OBJECT_3D_TYPE::CYLINDER, "OBJECT_3D_TYPE::CYLINDER" }, + { OBJECT_3D_TYPE::DUMMYBLOCK, "OBJECT_3D_TYPE::DUMMY_BLOCK" }, + { OBJECT_3D_TYPE::LAYERITEM, "OBJECT_3D_TYPE::LAYER_ITEM" }, + { OBJECT_3D_TYPE::XYPLANE, "OBJECT_3D_TYPE::XY_PLANE" }, + { OBJECT_3D_TYPE::ROUNDSEG, "OBJECT_3D_TYPE::ROUND_SEG" }, + { OBJECT_3D_TYPE::TRIANGLE, "OBJECT_3D_TYPE::TRIANGLE" } }; // clang-format on -void COBJECT3D_STATS::PrintStats() +void OBJECT_3D_STATS::PrintStats() { - wxLogDebug( "OBJ3D Statistics:\n" ); + wxLogDebug( "OBJECT_3D_STATS:\n" ); for( auto& objectType : objectTypeNames ) { diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cobject.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cobject.h index 38743b384c..ca5d361149 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cobject.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cobject.h @@ -23,12 +23,11 @@ */ /** - * @file cobject.h - * @brief + * @file cobject.h */ -#ifndef _COBJECT_H_ -#define _COBJECT_H_ +#ifndef _OBJECT_3D_H_ +#define _OBJECT_3D_H_ #include "cbbox.h" #include "../hitinfo.h" @@ -36,7 +35,7 @@ #include -enum class OBJECT3D_TYPE +enum class OBJECT_3D_TYPE { CYLINDER, DUMMYBLOCK, @@ -48,61 +47,59 @@ enum class OBJECT3D_TYPE }; -class COBJECT +class OBJECT_3D { public: - explicit COBJECT( OBJECT3D_TYPE aObjType ); + explicit OBJECT_3D( OBJECT_3D_TYPE aObjType ); - const void SetBoardItem( BOARD_ITEM *aBoardItem ) { m_boardItem = aBoardItem; } - BOARD_ITEM *GetBoardItem() const { return m_boardItem; } + const void SetBoardItem( BOARD_ITEM* aBoardItem ) { m_boardItem = aBoardItem; } + BOARD_ITEM* GetBoardItem() const { return m_boardItem; } - void SetMaterial( const CMATERIAL *aMaterial ) + void SetMaterial( const MATERIAL* aMaterial ) { m_material = aMaterial; m_modelTransparency = aMaterial->GetTransparency(); // Default transparency is from material } - const CMATERIAL *GetMaterial() const { return m_material; } + const MATERIAL *GetMaterial() const { return m_material; } float GetModelTransparency() const { return m_modelTransparency; } void SetModelTransparency( float aModelTransparency ) { m_modelTransparency = aModelTransparency; } - virtual SFVEC3F GetDiffuseColor( const HITINFO &aHitInfo ) const = 0; + virtual SFVEC3F GetDiffuseColor( const HITINFO& aHitInfo ) const = 0; - virtual ~COBJECT() {} + virtual ~OBJECT_3D() {} /** - * Intersects - a.Intersects(b) ⇔ !a.Disjoint(b) ⇔ !(a ∩ b = ∅). - * - * It intersects if the result intersection is not null + * @return true if this object intersects \a aBBox. */ - virtual bool Intersects( const CBBOX &aBBox ) const = 0; + virtual bool Intersects( const BBOX_3D& aBBox ) const = 0; /** - * @return true if the aRay intersects the object + * @return true if the \a aRay intersects the object. */ - virtual bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const = 0; + virtual bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const = 0; /** - * @param aMaxDistance - max distance of the test - * @return true if the aRay intersects the object + * @param aMaxDistance is the maximum distance of the test. + * @return true if \a aRay intersects the object. */ - virtual bool IntersectP( const RAY &aRay, float aMaxDistance ) const = 0; + virtual bool IntersectP( const RAY& aRay, float aMaxDistance ) const = 0; - const CBBOX &GetBBox() const { return m_bbox; } + const BBOX_3D& GetBBox() const { return m_bbox; } - const SFVEC3F &GetCentroid() const { return m_centroid; } + const SFVEC3F& GetCentroid() const { return m_centroid; } protected: - CBBOX m_bbox; + BBOX_3D m_bbox; SFVEC3F m_centroid; - OBJECT3D_TYPE m_obj_type; - const CMATERIAL *m_material; + OBJECT_3D_TYPE m_obj_type; + const MATERIAL* m_material; - BOARD_ITEM *m_boardItem; + BOARD_ITEM* m_boardItem; // m_modelTransparency combines the material and model opacity // 0.0 full opaque, 1.0 full transparent. @@ -112,44 +109,44 @@ protected: /// Implements a class for object statistics /// using Singleton pattern -class COBJECT3D_STATS +class OBJECT_3D_STATS { public: void ResetStats() { - memset( m_counter, 0, sizeof( unsigned int ) * static_cast( OBJECT3D_TYPE::MAX ) ); + memset( m_counter, 0, sizeof( unsigned int ) * static_cast( OBJECT_3D_TYPE::MAX ) ); } - unsigned int GetCountOf( OBJECT3D_TYPE aObjType ) const + unsigned int GetCountOf( OBJECT_3D_TYPE aObjType ) const { return m_counter[static_cast( aObjType )]; } - void AddOne( OBJECT3D_TYPE aObjType ) + void AddOne( OBJECT_3D_TYPE aObjType ) { m_counter[static_cast( aObjType )]++; } void PrintStats(); - static COBJECT3D_STATS &Instance() + static OBJECT_3D_STATS& Instance() { if( !s_instance ) - s_instance = new COBJECT3D_STATS; + s_instance = new OBJECT_3D_STATS; return *s_instance; } private: - COBJECT3D_STATS(){ ResetStats(); } - COBJECT3D_STATS( const COBJECT3D_STATS &old ); - const COBJECT3D_STATS &operator=( const COBJECT3D_STATS &old ); - ~COBJECT3D_STATS() {} + OBJECT_3D_STATS(){ ResetStats(); } + OBJECT_3D_STATS( const OBJECT_3D_STATS& old ); + const OBJECT_3D_STATS& operator=( const OBJECT_3D_STATS& old ); + ~OBJECT_3D_STATS() {} - unsigned int m_counter[static_cast( OBJECT3D_TYPE::MAX )]; + unsigned int m_counter[static_cast( OBJECT_3D_TYPE::MAX )]; - static COBJECT3D_STATS *s_instance; + static OBJECT_3D_STATS* s_instance; }; -#endif // _COBJECT_H_ +#endif // _OBJECT_3D_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cplane.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cplane.cpp index c3d7b568f3..fe5294cfe5 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cplane.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cplane.cpp @@ -23,14 +23,13 @@ */ /** - * @file cplane.cpp - * @brief + * @file cplane.cpp */ #include "cplane.h" -CXYPLANE::CXYPLANE( const CBBOX& aBBox ) : COBJECT( OBJECT3D_TYPE::XYPLANE ) +XY_PLANE::XY_PLANE( const BBOX_3D& aBBox ) : OBJECT_3D( OBJECT_3D_TYPE::XYPLANE ) { m_centerPoint = aBBox.GetCenter(); m_centroid = m_centerPoint; @@ -39,35 +38,32 @@ CXYPLANE::CXYPLANE( const CBBOX& aBBox ) : COBJECT( OBJECT3D_TYPE::XYPLANE ) m_bbox.Set( aBBox ); m_xsize = aBBox.GetExtent().x; m_ysize = aBBox.GetExtent().y; - m_xsize_inv2 = 1.0f / (2.0f * m_xsize); - m_ysize_inv2 = 1.0f / (2.0f * m_ysize); + m_xsize_inv2 = 1.0f / ( 2.0f * m_xsize ); + m_ysize_inv2 = 1.0f / ( 2.0f * m_ysize ); } -CXYPLANE::CXYPLANE( SFVEC3F aCenterPoint, float aXSize, float aYSize ) - : COBJECT( OBJECT3D_TYPE::XYPLANE ) +XY_PLANE::XY_PLANE( SFVEC3F aCenterPoint, float aXSize, float aYSize ) + : OBJECT_3D( OBJECT_3D_TYPE::XYPLANE ) { m_centerPoint = aCenterPoint; m_xsize = aXSize; m_ysize = aYSize; - m_xsize_inv2 = 1.0f / (2.0f * aXSize); - m_ysize_inv2 = 1.0f / (2.0f * aYSize); - m_bbox.Set( SFVEC3F( aCenterPoint.x - aXSize / 2.0f, - aCenterPoint.y - aYSize / 2.0f, + m_xsize_inv2 = 1.0f / ( 2.0f * aXSize ); + m_ysize_inv2 = 1.0f / ( 2.0f * aYSize ); + m_bbox.Set( SFVEC3F( aCenterPoint.x - aXSize / 2.0f, aCenterPoint.y - aYSize / 2.0f, aCenterPoint.z ), - SFVEC3F( aCenterPoint.x + aXSize / 2.0f, - aCenterPoint.y + aYSize / 2.0f, + SFVEC3F( aCenterPoint.x + aXSize / 2.0f, aCenterPoint.y + aYSize / 2.0f, aCenterPoint.z ) ); m_centroid = aCenterPoint; } -bool CXYPLANE::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const +bool XY_PLANE::Intersect( const RAY& aRay, HITINFO& aHitInfo ) const { const float t = (m_centerPoint.z - aRay.m_Origin.z) * aRay.m_InvDir.z; - if( ( t < FLT_EPSILON ) || - ( t >= aHitInfo.m_tHit ) ) + if( ( t < FLT_EPSILON ) || ( t >= aHitInfo.m_tHit ) ) return false; const float vSU = t * aRay.m_Dir.x + aRay.m_Origin.x - m_centerPoint.x; @@ -77,7 +73,7 @@ bool CXYPLANE::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const const float vSV = t * aRay.m_Dir.y + aRay.m_Origin.y - m_centerPoint.y; - if( (vSV < -m_ysize) || (vSV > m_ysize) ) + if( ( vSV < -m_ysize ) || ( vSV > m_ysize ) ) return false; aHitInfo.m_tHit = t; @@ -95,12 +91,11 @@ bool CXYPLANE::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const } -bool CXYPLANE::IntersectP(const RAY &aRay , float aMaxDistance ) const +bool XY_PLANE::IntersectP(const RAY& aRay, float aMaxDistance ) const { - const float t = (m_centerPoint.z - aRay.m_Origin.z) * aRay.m_InvDir.z; + const float t = ( m_centerPoint.z - aRay.m_Origin.z ) * aRay.m_InvDir.z; - if( ( t < FLT_EPSILON ) || - ( t >= aMaxDistance ) ) + if( ( t < FLT_EPSILON ) || ( t >= aMaxDistance ) ) return false; const float vSU = t * aRay.m_Dir.x + aRay.m_Origin.x - m_centerPoint.x; @@ -110,20 +105,20 @@ bool CXYPLANE::IntersectP(const RAY &aRay , float aMaxDistance ) const const float vSV = t * aRay.m_Dir.y + aRay.m_Origin.y - m_centerPoint.y; - if( (vSV < -m_ysize) || (vSV > m_ysize) ) + if( ( vSV < -m_ysize ) || ( vSV > m_ysize ) ) return false; return true; } -bool CXYPLANE::Intersects( const CBBOX &aBBox ) const +bool XY_PLANE::Intersects( const BBOX_3D& aBBox ) const { return m_bbox.Intersects( aBBox ); } -SFVEC3F CXYPLANE::GetDiffuseColor( const HITINFO &aHitInfo ) const +SFVEC3F XY_PLANE::GetDiffuseColor( const HITINFO& aHitInfo ) const { (void)aHitInfo; // unused diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cplane.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cplane.h index f57fca739f..5abb3ce4c1 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cplane.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/cplane.h @@ -35,25 +35,24 @@ /** * A plane that is parallel to XY plane */ -class CXYPLANE : public COBJECT +class XY_PLANE : public OBJECT_3D { public: - explicit CXYPLANE( const CBBOX &aBBox ); + explicit XY_PLANE( const BBOX_3D& aBBox ); /** * @param aCenterPoint = position of the center of the plane * @param aXSize = size by X axis * @param aYSize = size by Y axis */ - CXYPLANE( SFVEC3F aCenterPoint, float aXSize, float aYSize ); + XY_PLANE( SFVEC3F aCenterPoint, float aXSize, float aYSize ); void SetColor( SFVEC3F aObjColor ) { m_diffusecolor = aObjColor; } - // Imported from COBJECT - bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const override; - bool IntersectP(const RAY &aRay , float aMaxDistance ) const override; - bool Intersects( const CBBOX &aBBox ) const override; - SFVEC3F GetDiffuseColor( const HITINFO &aHitInfo ) const override; + bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const override; + bool IntersectP(const RAY& aRay, float aMaxDistance ) const override; + bool Intersects( const BBOX_3D& aBBox ) const override; + SFVEC3F GetDiffuseColor( const HITINFO& aHitInfo ) const override; private: SFVEC3F m_centerPoint; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/croundseg.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/croundseg.cpp index 86f68b6d01..1d6eb12433 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/croundseg.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/croundseg.cpp @@ -23,15 +23,15 @@ */ /** - * @file croundseg.cpp - * @brief + * @file croundseg.cpp */ #include "croundseg.h" -CROUNDSEG::CROUNDSEG( const CROUNDSEGMENT2D& aSeg2D, float aZmin, float aZmax ) - : COBJECT( OBJECT3D_TYPE::ROUNDSEG ), m_segment( aSeg2D.m_segment ) +ROUND_SEGMENT::ROUND_SEGMENT( const ROUND_SEGMENT_2D& aSeg2D, float aZmin, float aZmax ) : + OBJECT_3D( OBJECT_3D_TYPE::ROUNDSEG ), + m_segment( aSeg2D.m_segment ) { m_radius = aSeg2D.GetRadius(); m_radius_squared = m_radius * m_radius; @@ -42,8 +42,8 @@ CROUNDSEG::CROUNDSEG( const CROUNDSEGMENT2D& aSeg2D, float aZmin, float aZmax ) m_bbox.Reset(); - m_bbox.Set( SFVEC3F( m_segment.m_Start.x, m_segment.m_Start.y, aZmin), - SFVEC3F( m_segment.m_End.x, m_segment.m_End.y, aZmax) ); + m_bbox.Set( SFVEC3F( m_segment.m_Start.x, m_segment.m_Start.y, aZmin ), + SFVEC3F( m_segment.m_End.x, m_segment.m_End.y, aZmax ) ); m_bbox.Set( m_bbox.Min() - SFVEC3F( m_radius, m_radius, 0.0f ), m_bbox.Max() + SFVEC3F( m_radius, m_radius, 0.0f ) ); @@ -54,18 +54,16 @@ CROUNDSEG::CROUNDSEG( const CROUNDSEGMENT2D& aSeg2D, float aZmin, float aZmax ) m_center_left = m_centroid + m_plane_dir_left * m_radius; m_center_right = m_centroid + m_plane_dir_right * m_radius; - m_seglen_over_two_squared = (m_segment.m_Length / 2.0f) * - (m_segment.m_Length / 2.0f); + m_seglen_over_two_squared = ( m_segment.m_Length / 2.0f ) * ( m_segment.m_Length / 2.0f ); } -bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const +bool ROUND_SEGMENT::Intersect( const RAY& aRay, HITINFO& aHitInfo ) const { // Top / Bottom plane - // ///////////////////////////////////////////////////////////////////////// float zPlanePos = aRay.m_dirIsNeg[2]? m_bbox.Max().z : m_bbox.Min().z; - float tPlane = ( zPlanePos - aRay.m_Origin.z) * aRay.m_InvDir.z; + float tPlane = ( zPlanePos - aRay.m_Origin.z ) * aRay.m_InvDir.z; if( ( tPlane >= aHitInfo.m_tHit ) || ( tPlane < FLT_EPSILON ) ) return false; // Early exit @@ -80,12 +78,9 @@ bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const if( tPlane < aHitInfo.m_tHit ) { aHitInfo.m_tHit = tPlane; - aHitInfo.m_HitPoint = SFVEC3F( planeHitPoint2d.x, - planeHitPoint2d.y, + aHitInfo.m_HitPoint = SFVEC3F( planeHitPoint2d.x, planeHitPoint2d.y, aRay.m_Origin.z + aRay.m_Dir.z * tPlane ); - aHitInfo.m_HitNormal = SFVEC3F( 0.0f, - 0.0f, - aRay.m_dirIsNeg[2]? 1.0f: -1.0f ); + aHitInfo.m_HitNormal = SFVEC3F( 0.0f, 0.0f, aRay.m_dirIsNeg[2] ? 1.0f : -1.0f ); aHitInfo.pHitObject = this; m_material->PerturbeNormal( aHitInfo.m_HitNormal, aRay, aHitInfo ); @@ -97,7 +92,6 @@ bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const } // Test LEFT / RIGHT plane - // ///////////////////////////////////////////////////////////////////////// float normal_dot_ray = glm::dot( m_plane_dir_right, aRay.m_Dir ); if( normal_dot_ray < 0.0f ) // If the dot is neg, the it hits the plane @@ -113,16 +107,14 @@ bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const const SFVEC3F v = hitP - m_center_right; const float len = glm::dot( v, v ); - if( (len <= m_seglen_over_two_squared) && - (hitP.z >= m_bbox.Min().z) && - (hitP.z <= m_bbox.Max().z) ) + if( ( len <= m_seglen_over_two_squared ) && ( hitP.z >= m_bbox.Min().z ) + && ( hitP.z <= m_bbox.Max().z ) ) { if( t < aHitInfo.m_tHit ) { aHitInfo.m_tHit = t; aHitInfo.m_HitPoint = hitP; - aHitInfo.m_HitNormal = SFVEC3F( m_plane_dir_right.x, - m_plane_dir_right.y, + aHitInfo.m_HitNormal = SFVEC3F( m_plane_dir_right.x, m_plane_dir_right.y, 0.0f ); aHitInfo.pHitObject = this; @@ -142,7 +134,7 @@ bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const if( normal_dot_ray < 0.0f ) // If the dot is neg, the it hits the plane { const float n_dot_ray_origin = glm::dot( m_plane_dir_left, - m_center_left - aRay.m_Origin ); + m_center_left - aRay.m_Origin ); const float t = n_dot_ray_origin / normal_dot_ray; if( t > 0.0f ) @@ -152,16 +144,14 @@ bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const const SFVEC3F v = hitP - m_center_left; const float len = glm::dot( v, v ); - if( (len <= m_seglen_over_two_squared) && - (hitP.z >= m_bbox.Min().z) && - (hitP.z <= m_bbox.Max().z) ) + if( ( len <= m_seglen_over_two_squared ) && ( hitP.z >= m_bbox.Min().z ) + && ( hitP.z <= m_bbox.Max().z ) ) { if( t < aHitInfo.m_tHit ) { aHitInfo.m_tHit = t; aHitInfo.m_HitPoint = hitP; - aHitInfo.m_HitNormal = SFVEC3F( m_plane_dir_left.x, - m_plane_dir_left.y, + aHitInfo.m_HitNormal = SFVEC3F( m_plane_dir_left.x, m_plane_dir_left.y, 0.0f ); aHitInfo.pHitObject = this; @@ -176,12 +166,8 @@ bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const } } - // Based on: - // http://www.cs.utah.edu/~lha/Code%206620%20/Ray4/Cylinder.cpp - + // Based on: http://www.cs.utah.edu/~lha/Code%206620%20/Ray4/Cylinder.cpp // Ray-sphere intersection: geometric - // ///////////////////////////////////////////////////////////////////////// - const double OCx_Start = aRay.m_Origin.x - m_segment.m_Start.x; const double OCy_Start = aRay.m_Origin.y - m_segment.m_Start.y; @@ -195,24 +181,22 @@ bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const const double c_Start = p_dot_p_Start - m_radius_squared; - const float delta_Start = (float)(b_Start * b_Start - a * c_Start); + const float delta_Start = (float) ( b_Start * b_Start - a * c_Start ); if( delta_Start > FLT_EPSILON ) { const float sdelta = sqrtf( delta_Start ); - const float t = (-b_Start - sdelta) / a; + const float t = ( -b_Start - sdelta ) / a; const float z = aRay.m_Origin.z + t * aRay.m_Dir.z; - if( (z >= m_bbox.Min().z) && - (z <= m_bbox.Max().z) ) + if( ( z >= m_bbox.Min().z ) && ( z <= m_bbox.Max().z ) ) { if( t < aHitInfo.m_tHit ) { aHitInfo.m_tHit = t; aHitInfo.m_HitPoint = aRay.at( t ); - const SFVEC2F hitPoint2D = SFVEC2F( aHitInfo.m_HitPoint.x, - aHitInfo.m_HitPoint.y ); + const SFVEC2F hitPoint2D = SFVEC2F( aHitInfo.m_HitPoint.x, aHitInfo.m_HitPoint.y ); aHitInfo.m_HitNormal = SFVEC3F( (hitPoint2D.x - m_segment.m_Start.x) * m_inv_radius, @@ -248,8 +232,7 @@ bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const const float t = (-b_End - sdelta) / a; const float z = aRay.m_Origin.z + t * aRay.m_Dir.z; - if( (z >= m_bbox.Min().z) && - (z <= m_bbox.Max().z) ) + if( ( z >= m_bbox.Min().z ) && ( z <= m_bbox.Max().z ) ) { if( t < aHitInfo.m_tHit ) { @@ -278,13 +261,12 @@ bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const } -bool CROUNDSEG::IntersectP( const RAY &aRay, float aMaxDistance ) const +bool ROUND_SEGMENT::IntersectP( const RAY& aRay, float aMaxDistance ) const { // Top / Bottom plane - // ///////////////////////////////////////////////////////////////////////// const float zPlanePos = aRay.m_dirIsNeg[2]? m_bbox.Max().z : m_bbox.Min().z; - const float tPlane = ( zPlanePos - aRay.m_Origin.z) * aRay.m_InvDir.z; + const float tPlane = ( zPlanePos - aRay.m_Origin.z ) * aRay.m_InvDir.z; if( ( tPlane >= aMaxDistance) || ( tPlane < FLT_EPSILON ) ) return false; // Early exit @@ -307,13 +289,11 @@ bool CROUNDSEG::IntersectP( const RAY &aRay, float aMaxDistance ) const return false; #if 0 // Test LEFT / RIGHT plane - // ///////////////////////////////////////////////////////////////////////// float normal_dot_ray = glm::dot( m_plane_dir_right, aRay.m_Dir ); if( normal_dot_ray < 0.0f ) // If the dot is neg, the it hits the plane { - float n_dot_ray_origin = glm::dot( m_plane_dir_right, - m_center_right - aRay.m_Origin ); + float n_dot_ray_origin = glm::dot( m_plane_dir_right, m_center_right - aRay.m_Origin ); float t = n_dot_ray_origin / normal_dot_ray; if( t > 0.0f ) @@ -323,8 +303,8 @@ bool CROUNDSEG::IntersectP( const RAY &aRay, float aMaxDistance ) const SFVEC3F v = hitP - m_center_right; float len = glm::dot( v, v ); - if( (len <= m_seglen_over_two_squared) && - (hitP.z >= m_bbox.Min().z) && (hitP.z <= m_bbox.Max().z) ) + if( ( len <= m_seglen_over_two_squared ) && + ( hitP.z >= m_bbox.Min().z ) && ( hitP.z <= m_bbox.Max().z ) ) { if( t < aMaxDistance ) return true; @@ -340,7 +320,7 @@ bool CROUNDSEG::IntersectP( const RAY &aRay, float aMaxDistance ) const if( normal_dot_ray < 0.0f ) // If the dot is neg, the it hits the plane { const float n_dot_ray_origin = glm::dot( m_plane_dir_left, - m_center_left - aRay.m_Origin ); + m_center_left - aRay.m_Origin ); const float t = n_dot_ray_origin / normal_dot_ray; if( t > 0.0f ) @@ -350,8 +330,8 @@ bool CROUNDSEG::IntersectP( const RAY &aRay, float aMaxDistance ) const SFVEC3F v = hitP - m_center_left; float len = glm::dot( v, v ); - if( (len <= m_seglen_over_two_squared) && - (hitP.z >= m_bbox.Min().z) && (hitP.z <= m_bbox.Max().z) ) + if( ( len <= m_seglen_over_two_squared ) && + ( hitP.z >= m_bbox.Min().z ) && ( hitP.z <= m_bbox.Max().z ) ) { if( t < aMaxDistance ) return true; @@ -362,11 +342,8 @@ bool CROUNDSEG::IntersectP( const RAY &aRay, float aMaxDistance ) const } } - // Based on: - // http://www.cs.utah.edu/~lha/Code%206620%20/Ray4/Cylinder.cpp - + // Based on: http://www.cs.utah.edu/~lha/Code%206620%20/Ray4/Cylinder.cpp // Ray-sphere intersection: geometric - // ///////////////////////////////////////////////////////////////////////// double OCx_Start = aRay.m_Origin.x - m_segment.m_Start.x; double OCy_Start = aRay.m_Origin.y - m_segment.m_Start.y; @@ -389,8 +366,7 @@ bool CROUNDSEG::IntersectP( const RAY &aRay, float aMaxDistance ) const float t = (-b_Start - sdelta) / a; float z = aRay.m_Origin.z + t * aRay.m_Dir.z; - if( (z >= m_bbox.Min().z) && - (z <= m_bbox.Max().z) ) + if( ( z >= m_bbox.Min().z ) && ( z <= m_bbox.Max().z ) ) { if( t < aMaxDistance ) return true; @@ -415,11 +391,10 @@ bool CROUNDSEG::IntersectP( const RAY &aRay, float aMaxDistance ) const if( delta_End > FLT_EPSILON ) { float sdelta = sqrtf( delta_End ); - float t = (-b_End - sdelta) / a; + float t = ( -b_End - sdelta ) / a; float z = aRay.m_Origin.z + t * aRay.m_Dir.z; - if( (z >= m_bbox.Min().z) && - (z <= m_bbox.Max().z) ) + if( ( z >= m_bbox.Min().z ) && ( z <= m_bbox.Max().z ) ) { if( t < aMaxDistance ) return true; @@ -433,14 +408,14 @@ bool CROUNDSEG::IntersectP( const RAY &aRay, float aMaxDistance ) const } -bool CROUNDSEG::Intersects( const CBBOX &aBBox ) const +bool ROUND_SEGMENT::Intersects( const BBOX_3D& aBBox ) const { //!TODO: improve return m_bbox.Intersects( aBBox ); } -SFVEC3F CROUNDSEG::GetDiffuseColor( const HITINFO &aHitInfo ) const +SFVEC3F ROUND_SEGMENT::GetDiffuseColor( const HITINFO& aHitInfo ) const { (void)aHitInfo; // unused diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/croundseg.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/croundseg.h index 53bcb6e9f1..ef1777fc53 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/croundseg.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/croundseg.h @@ -23,28 +23,27 @@ */ /** - * @file croundseg.h - * @brief + * @file croundseg.h */ -#ifndef _CROUNDSEG_H_ -#define _CROUNDSEG_H_ +#ifndef _ROUND_SEGMENT_H_ +#define _ROUND_SEGMENT_H_ #include "cobject.h" #include "../shapes2D/croundsegment2d.h" -class CROUNDSEG : public COBJECT +class ROUND_SEGMENT : public OBJECT_3D { public: - CROUNDSEG( const CROUNDSEGMENT2D &aSeg2D, float aZmin, float aZmax ); + ROUND_SEGMENT( const ROUND_SEGMENT_2D& aSeg2D, float aZmin, float aZmax ); void SetColor( SFVEC3F aObjColor ) { m_diffusecolor = aObjColor; } - // Imported from COBJECT - bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const override; - bool IntersectP( const RAY &aRay, float aMaxDistance ) const override; - bool Intersects( const CBBOX &aBBox ) const override; - SFVEC3F GetDiffuseColor( const HITINFO &aHitInfo ) const override; + // Imported from OBJECT_3D + bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const override; + bool IntersectP( const RAY& aRay, float aMaxDistance ) const override; + bool Intersects( const BBOX_3D& aBBox ) const override; + SFVEC3F GetDiffuseColor( const HITINFO& aHitInfo ) const override; private: RAYSEG2D m_segment; @@ -65,22 +64,19 @@ private: #if 0 /** - * This is a object similar to a round segment but with a ring + * This is a object similar to a round segment but with a ring indside of it. + * * It is used for Oblong holes */ -class COBLONGRING : public COBJECT +class OBLONG_RING : public OBJECT_3D { public: - CROUNDSEG( const SFVEC2F &aStart, - const SFVEC2F &aEnd, - float aInnerRadius, - float aOuterRadius, - float aZmin, - float aZmax ); + ROUND_SEGMENT( const SFVEC2F& aStart, const SFVEC2F& aEnd, float aInnerRadius, + float aOuterRadius, float aZmin, float aZmax ); - // Imported from COBJECT - bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const; - bool Intersects( const CBBOX &aBBox ) const; + // Imported from OBJECT_3D + bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const; + bool Intersects( const BBOX_3D& aBBox ) const; private: RAYSEG2D m_segment; @@ -101,4 +97,4 @@ private: }; #endif -#endif // _CROUNDSEG_H_ +#endif // _ROUND_SEGMENT_H_ diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ctriangle.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ctriangle.cpp index f5dcad0942..6988e713b9 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ctriangle.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ctriangle.cpp @@ -34,11 +34,11 @@ #include "ctriangle.h" -void CTRIANGLE::pre_calc_const() +void TRIANGLE::pre_calc_const() { - const SFVEC3F &A = m_vertex[0]; - const SFVEC3F &B = m_vertex[1]; - const SFVEC3F &C = m_vertex[2]; + const SFVEC3F& A = m_vertex[0]; + const SFVEC3F& B = m_vertex[1]; + const SFVEC3F& C = m_vertex[2]; const SFVEC3F c = B - A; const SFVEC3F b = C - A; @@ -66,9 +66,8 @@ void CTRIANGLE::pre_calc_const() m_k = 2; } - int u = (m_k + 1) % 3; - int v = (m_k + 2) % 3; - + int u = ( m_k + 1 ) % 3; + int v = ( m_k + 2 ) % 3; // precomp float krec = 1.0f / m_n[m_k]; @@ -77,14 +76,12 @@ void CTRIANGLE::pre_calc_const() m_nv = m_n[v] * krec; m_nd = glm::dot( m_n, A ) * krec; - // first line equation float reci = 1.0f / (b[u] * c[v] - b[v] * c[u]); m_bnu = b[u] * reci; m_bnv = -b[v] * reci; - // second line equation m_cnu = c[v] * reci; m_cnv = -c[u] * reci; @@ -98,8 +95,8 @@ void CTRIANGLE::pre_calc_const() } -CTRIANGLE::CTRIANGLE( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3 ) - : COBJECT( OBJECT3D_TYPE::TRIANGLE ) +TRIANGLE::TRIANGLE( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3 ) + : OBJECT_3D( OBJECT_3D_TYPE::TRIANGLE ) { m_vertex[0] = aV1; m_vertex[1] = aV2; @@ -113,9 +110,9 @@ CTRIANGLE::CTRIANGLE( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3 } -CTRIANGLE::CTRIANGLE( - const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3, const SFVEC3F& aFaceNormal ) - : COBJECT( OBJECT3D_TYPE::TRIANGLE ) +TRIANGLE::TRIANGLE( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3, + const SFVEC3F& aFaceNormal ) + : OBJECT_3D( OBJECT_3D_TYPE::TRIANGLE ) { m_vertex[0] = aV1; m_vertex[1] = aV2; @@ -133,9 +130,9 @@ CTRIANGLE::CTRIANGLE( } -CTRIANGLE::CTRIANGLE( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3, - const SFVEC3F& aN1, const SFVEC3F& aN2, const SFVEC3F& aN3 ) - : COBJECT( OBJECT3D_TYPE::TRIANGLE ) +TRIANGLE::TRIANGLE( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3, + const SFVEC3F& aN1, const SFVEC3F& aN2, const SFVEC3F& aN3 ) + : OBJECT_3D( OBJECT_3D_TYPE::TRIANGLE ) { m_vertex[0] = aV1; m_vertex[1] = aV2; @@ -153,33 +150,33 @@ CTRIANGLE::CTRIANGLE( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3 } -void CTRIANGLE::SetColor( const SFVEC3F &aColor ) +void TRIANGLE::SetColor( const SFVEC3F& aColor ) { - m_vertexColorRGBA[0] = ((unsigned int)(aColor.r * 255) << 24) | - ((unsigned int)(aColor.g * 255) << 16) | - ((unsigned int)(aColor.b * 255) << 8) | 0xFF; + m_vertexColorRGBA[0] = ( (unsigned int) ( aColor.r * 255 ) << 24 ) + | ( (unsigned int) ( aColor.g * 255 ) << 16 ) + | ( (unsigned int) ( aColor.b * 255 ) << 8 ) | 0xFF; m_vertexColorRGBA[1] = m_vertexColorRGBA[0]; m_vertexColorRGBA[2] = m_vertexColorRGBA[0]; } -void CTRIANGLE::SetColor( const SFVEC3F &aVC0, - const SFVEC3F &aVC1, - const SFVEC3F &aVC2 ) +void TRIANGLE::SetColor( const SFVEC3F& aVC0, + const SFVEC3F& aVC1, + const SFVEC3F& aVC2 ) { - m_vertexColorRGBA[0] = ((unsigned int)(aVC0.r * 255) << 24) | - ((unsigned int)(aVC0.g * 255) << 16) | - ((unsigned int)(aVC0.b * 255) << 8) | 0xFF; - m_vertexColorRGBA[1] = ((unsigned int)(aVC1.r * 255) << 24) | - ((unsigned int)(aVC1.g * 255) << 16) | - ((unsigned int)(aVC1.b * 255) << 8) | 0xFF; - m_vertexColorRGBA[2] = ((unsigned int)(aVC2.r * 255) << 24) | - ((unsigned int)(aVC2.g * 255) << 16) | - ((unsigned int)(aVC2.b * 255) << 8) | 0xFF; + m_vertexColorRGBA[0] = ( (unsigned int) ( aVC0.r * 255 ) << 24 ) + | ( (unsigned int) ( aVC0.g * 255 ) << 16 ) + | ( (unsigned int) ( aVC0.b * 255 ) << 8 ) | 0xFF; + m_vertexColorRGBA[1] = ( (unsigned int) ( aVC1.r * 255 ) << 24 ) + | ( (unsigned int) ( aVC1.g * 255 ) << 16 ) + | ( (unsigned int) ( aVC1.b * 255 ) << 8 ) | 0xFF; + m_vertexColorRGBA[2] = ( (unsigned int) ( aVC2.r * 255 ) << 24 ) + | ( (unsigned int) ( aVC2.g * 255 ) << 16 ) + | ( (unsigned int) ( aVC2.b * 255 ) << 8 ) | 0xFF; } -void CTRIANGLE::SetColor( unsigned int aFaceColorRGBA ) +void TRIANGLE::SetColor( unsigned int aFaceColorRGBA ) { m_vertexColorRGBA[0] = aFaceColorRGBA; m_vertexColorRGBA[1] = aFaceColorRGBA; @@ -187,8 +184,7 @@ void CTRIANGLE::SetColor( unsigned int aFaceColorRGBA ) } -void CTRIANGLE::SetColor( unsigned int aVertex1ColorRGBA, - unsigned int aVertex2ColorRGBA, +void TRIANGLE::SetColor( unsigned int aVertex1ColorRGBA, unsigned int aVertex2ColorRGBA, unsigned int aVertex3ColorRGBA ) { m_vertexColorRGBA[0] = aVertex1ColorRGBA; @@ -197,9 +193,7 @@ void CTRIANGLE::SetColor( unsigned int aVertex1ColorRGBA, } -void CTRIANGLE::SetUV( const SFVEC2F &aUV1, - const SFVEC2F &aUV2, - const SFVEC2F &aUV3 ) +void TRIANGLE::SetUV( const SFVEC2F& aUV1, const SFVEC2F& aUV2, const SFVEC2F& aUV3 ) { m_uv[0] = aUV1; m_uv[1] = aUV2; @@ -209,20 +203,21 @@ void CTRIANGLE::SetUV( const SFVEC2F &aUV1, static const unsigned int s_modulo[] = { 0, 1, 2, 0, 1 }; -bool CTRIANGLE::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const + +bool TRIANGLE::Intersect( const RAY& aRay, HITINFO& aHitInfo ) const { //!TODO: precalc this, improove it #define ku s_modulo[m_k + 1] #define kv s_modulo[m_k + 2] - const SFVEC3F &O = aRay.m_Origin; - const SFVEC3F &D = aRay.m_Dir; - const SFVEC3F &A = m_vertex[0]; + const SFVEC3F& O = aRay.m_Origin; + const SFVEC3F& D = aRay.m_Dir; + const SFVEC3F& A = m_vertex[0]; const float lnd = 1.0f / (D[m_k] + m_nu * D[ku] + m_nv * D[kv]); const float t = (m_nd - O[m_k] - m_nu * O[ku] - m_nv * O[kv]) * lnd; - if( !( (aHitInfo.m_tHit > t) && (t > 0.0f) ) ) + if( !( ( aHitInfo.m_tHit > t ) && ( t > 0.0f ) ) ) return false; const float hu = O[ku] + t * D[ku] - A[ku]; @@ -250,8 +245,7 @@ bool CTRIANGLE::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const aHitInfo.m_HitPoint = aRay.at( t ); // interpolate vertex normals with UVW using Gouraud's shading - aHitInfo.m_HitNormal = glm::normalize( (1.0f - u - v) * m_normal[0] + - u * m_normal[1] + + aHitInfo.m_HitNormal = glm::normalize( (1.0f - u - v) * m_normal[0] + u * m_normal[1] + v * m_normal[2] ); m_material->PerturbeNormal( aHitInfo.m_HitNormal, aRay, aHitInfo ); @@ -264,8 +258,7 @@ bool CTRIANGLE::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const } -bool CTRIANGLE::IntersectP( const RAY &aRay, - float aMaxDistance ) const +bool TRIANGLE::IntersectP( const RAY& aRay, float aMaxDistance ) const { //!TODO: precalc this #define ku s_modulo[m_k + 1] @@ -278,7 +271,7 @@ bool CTRIANGLE::IntersectP( const RAY &aRay, const float lnd = 1.0f / (D[m_k] + m_nu * D[ku] + m_nv * D[kv]); const float t = (m_nd - O[m_k] - m_nu * O[ku] - m_nv * O[kv]) * lnd; - if( !( (aMaxDistance > t) && (t > 0.0f) ) ) + if( !( ( aMaxDistance > t ) && ( t > 0.0f ) ) ) return false; const float hu = O[ku] + t * D[ku] - A[ku]; @@ -308,28 +301,28 @@ bool CTRIANGLE::IntersectP( const RAY &aRay, } -bool CTRIANGLE::Intersects( const CBBOX &aBBox ) const +bool TRIANGLE::Intersects( const BBOX_3D& aBBox ) const { //!TODO: improove return m_bbox.Intersects( aBBox ); } -SFVEC3F CTRIANGLE::GetDiffuseColor( const HITINFO &aHitInfo ) const +SFVEC3F TRIANGLE::GetDiffuseColor( const HITINFO& aHitInfo ) const { const unsigned int rgbC1 = m_vertexColorRGBA[0]; const unsigned int rgbC2 = m_vertexColorRGBA[1]; const unsigned int rgbC3 = m_vertexColorRGBA[2]; - const SFVEC3F c1 = SFVEC3F( (float)((rgbC1 >> 24) & 0xFF) / 255.0f, - (float)((rgbC1 >> 16) & 0xFF) / 255.0f, - (float)((rgbC1 >> 8) & 0xFF) / 255.0f ); - const SFVEC3F c2 = SFVEC3F( (float)((rgbC2 >> 24) & 0xFF) / 255.0f, - (float)((rgbC2 >> 16) & 0xFF) / 255.0f, - (float)((rgbC2 >> 8) & 0xFF) / 255.0f ); - const SFVEC3F c3 = SFVEC3F( (float)((rgbC3 >> 24) & 0xFF) / 255.0f, - (float)((rgbC3 >> 16) & 0xFF) / 255.0f, - (float)((rgbC3 >> 8) & 0xFF) / 255.0f ); + const SFVEC3F c1 = SFVEC3F( (float) ( ( rgbC1 >> 24 ) & 0xFF ) / 255.0f, + (float) ( ( rgbC1 >> 16 ) & 0xFF ) / 255.0f, + (float) ( ( rgbC1 >> 8 ) & 0xFF ) / 255.0f ); + const SFVEC3F c2 = SFVEC3F( (float) ( ( rgbC2 >> 24 ) & 0xFF ) / 255.0f, + (float) ( ( rgbC2 >> 16 ) & 0xFF ) / 255.0f, + (float) ( ( rgbC2 >> 8 ) & 0xFF ) / 255.0f ); + const SFVEC3F c3 = SFVEC3F( (float) ( ( rgbC3 >> 24 ) & 0xFF ) / 255.0f, + (float) ( ( rgbC3 >> 16 ) & 0xFF ) / 255.0f, + (float) ( ( rgbC3 >> 8 ) & 0xFF ) / 255.0f ); const float u = aHitInfo.m_UV.x; const float v = aHitInfo.m_UV.y; diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ctriangle.h b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ctriangle.h index acb2ce2526..aed99d0825 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ctriangle.h +++ b/3d-viewer/3d_rendering/3d_render_raytracing/shapes3D/ctriangle.h @@ -25,48 +25,46 @@ /** * @file ctriangle.h - * @brief Implements a triangle ray intersection based on article + * @brief Implement a triangle ray intersection based on article * http://www.flipcode.com/archives/Raytracing_Topics_Techniques-Part_7_Kd-Trees_and_More_Speed.shtml * by Jacco Bikker, that implement optimizations based on Ingo Wald's thesis. */ -#ifndef _CTRIANGLE_H_ -#define _CTRIANGLE_H_ +#ifndef _TRIANGLE_H_ +#define _TRIANGLE_H_ #include "cobject.h" /** - * A triangle object + * A triangle object. */ -class CTRIANGLE : public COBJECT +class TRIANGLE : public OBJECT_3D { public: - CTRIANGLE( const SFVEC3F &aV1, const SFVEC3F &aV2, const SFVEC3F &aV3 ); + TRIANGLE( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3 ); - CTRIANGLE( const SFVEC3F &aV1, const SFVEC3F &aV2, const SFVEC3F &aV3, - const SFVEC3F &aFaceNormal ); + TRIANGLE( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3, + const SFVEC3F& aFaceNormal ); - CTRIANGLE( const SFVEC3F &aV1, const SFVEC3F &aV2, const SFVEC3F &aV3, - const SFVEC3F &aN1, const SFVEC3F &aN2, const SFVEC3F &aN3 ); + TRIANGLE( const SFVEC3F& aV1, const SFVEC3F& aV2, const SFVEC3F& aV3, + const SFVEC3F& aN1, const SFVEC3F& aN2, const SFVEC3F& aN3 ); - void SetColor( const SFVEC3F &aColor ); + void SetColor( const SFVEC3F& aColor ); - void SetColor( const SFVEC3F &aVC0, const SFVEC3F &aVC1, const SFVEC3F &aVC2 ); + void SetColor( const SFVEC3F& aVC0, const SFVEC3F& aVC1, const SFVEC3F& aVC2 ); void SetColor( unsigned int aFaceColorRGBA ); - void SetColor( unsigned int aVertex1ColorRGBA, - unsigned int aVertex2ColorRGBA, + void SetColor( unsigned int aVertex1ColorRGBA, unsigned int aVertex2ColorRGBA, unsigned int aVertex3ColorRGBA ); - void SetUV( const SFVEC2F &aUV1, const SFVEC2F &aUV2, const SFVEC2F &aUV3 ); + void SetUV( const SFVEC2F& aUV1, const SFVEC2F& aUV2, const SFVEC2F& aUV3 ); - // Imported from COBJECT - bool Intersect( const RAY &aRay, HITINFO &aHitInfo ) const override; - bool IntersectP(const RAY &aRay , float aMaxDistance ) const override; - bool Intersects( const CBBOX &aBBox ) const override; - SFVEC3F GetDiffuseColor( const HITINFO &aHitInfo ) const override; + bool Intersect( const RAY& aRay, HITINFO& aHitInfo ) const override; + bool IntersectP(const RAY& aRay, float aMaxDistance ) const override; + bool Intersects( const BBOX_3D& aBBox ) const override; + SFVEC3F GetDiffuseColor( const HITINFO& aHitInfo ) const override; private: void pre_calc_const(); @@ -83,4 +81,4 @@ private: // 152 bytes (max 160 == 5 * 32) }; -#endif // _CTRIANGLE_H_ +#endif // _TRIANGLE_H_ diff --git a/3d-viewer/3d_rendering/c3d_render_base.cpp b/3d-viewer/3d_rendering/c3d_render_base.cpp index d45e410561..5d69d17ea4 100644 --- a/3d-viewer/3d_rendering/c3d_render_base.cpp +++ b/3d-viewer/3d_rendering/c3d_render_base.cpp @@ -40,32 +40,32 @@ * * @ingroup trace_env_vars */ -const wxChar* C3D_RENDER_BASE::m_logTrace = wxT( "KI_TRACE_3D_RENDER" ); +const wxChar* RENDER_3D_BASE::m_logTrace = wxT( "KI_TRACE_3D_RENDER" ); -C3D_RENDER_BASE::C3D_RENDER_BASE( BOARD_ADAPTER& aBoardAdapter, CCAMERA& aCamera ) : +RENDER_3D_BASE::RENDER_3D_BASE( BOARD_ADAPTER& aBoardAdapter, CAMERA& aCamera ) : m_boardAdapter( aBoardAdapter ), m_camera( aCamera ) { - wxLogTrace( m_logTrace, wxT( "C3D_RENDER_BASE::C3D_RENDER_BASE" ) ); + wxLogTrace( m_logTrace, wxT( "RENDER_3D_BASE::RENDER_3D_BASE" ) ); m_is_opengl_initialized = false; m_windowSize = wxSize( -1, -1 ); m_reloadRequested = true; } -C3D_RENDER_BASE::~C3D_RENDER_BASE() +RENDER_3D_BASE::~RENDER_3D_BASE() { } -void C3D_RENDER_BASE::SetBusyIndicatorFactory( BUSY_INDICATOR::FACTORY aNewFactory ) +void RENDER_3D_BASE::SetBusyIndicatorFactory( BUSY_INDICATOR::FACTORY aNewFactory ) { m_busyIndicatorFactory = aNewFactory; } -std::unique_ptr C3D_RENDER_BASE::CreateBusyIndicator() const +std::unique_ptr RENDER_3D_BASE::CreateBusyIndicator() const { std::unique_ptr busy; diff --git a/3d-viewer/3d_rendering/c3d_render_base.h b/3d-viewer/3d_rendering/c3d_render_base.h index 305a40710b..651b8f0598 100644 --- a/3d-viewer/3d_rendering/c3d_render_base.h +++ b/3d-viewer/3d_rendering/c3d_render_base.h @@ -27,8 +27,8 @@ * @brief */ -#ifndef C3D_RENDER_BASE_H -#define C3D_RENDER_BASE_H +#ifndef RENDER_3D_BASE_H +#define RENDER_3D_BASE_H #include @@ -40,12 +40,12 @@ /** * This is a base class to hold data and functions for render targets. */ -class C3D_RENDER_BASE +class RENDER_3D_BASE { public: - explicit C3D_RENDER_BASE( BOARD_ADAPTER& aBoardAdapter, CCAMERA& aCamera ); + explicit RENDER_3D_BASE( BOARD_ADAPTER& aBoardAdapter, CAMERA& aCamera ); - virtual ~C3D_RENDER_BASE() = 0; + virtual ~RENDER_3D_BASE() = 0; /** * Before each render, the canvas will tell the render what is the size of its windows, @@ -53,7 +53,7 @@ public: * * @param aSize the current size of the render window */ - virtual void SetCurWindowSize( const wxSize &aSize ) = 0; + virtual void SetCurWindowSize( const wxSize& aSize ) = 0; /** * Redraw the view. @@ -62,8 +62,8 @@ public: * @param aStatusReporter a pointer to the status progress reporter. * @return true if the render would like to redraw again. */ - virtual bool Redraw( bool aIsMoving, REPORTER* aStatusReporter = NULL, - REPORTER* aWarningReporter = NULL ) = 0; + virtual bool Redraw( bool aIsMoving, REPORTER* aStatusReporter = nullptr, + REPORTER* aWarningReporter = nullptr ) = 0; /** * @todo This must be reviewed to add flags to improve specific render. @@ -102,7 +102,7 @@ protected: ///< Settings reference in use for this render. BOARD_ADAPTER& m_boardAdapter; - CCAMERA& m_camera; + CAMERA& m_camera; ///< Flag if the opengl specific for this render was already initialized. bool m_is_opengl_initialized; @@ -119,11 +119,11 @@ protected: * "KI_TRACE_3D_RENDER". See the wxWidgets documentation on wxLogTrace for * more information. */ - static const wxChar *m_logTrace; + static const wxChar* m_logTrace; private: ///< Factory that returns a suitable busy indicator for the context. BUSY_INDICATOR::FACTORY m_busyIndicatorFactory; }; -#endif // C3D_RENDER_BASE_H +#endif // RENDER_3D_BASE_H diff --git a/3d-viewer/3d_rendering/ccamera.cpp b/3d-viewer/3d_rendering/ccamera.cpp index b0ea14db55..5a8972a099 100644 --- a/3d-viewer/3d_rendering/ccamera.cpp +++ b/3d-viewer/3d_rendering/ccamera.cpp @@ -45,16 +45,16 @@ inline void normalise2PI( float& aAngle ) /** * @ingroup trace_env_vars */ -const wxChar *CCAMERA::m_logTrace = wxT( "KI_TRACE_CCAMERA" ); +const wxChar *CAMERA::m_logTrace = wxT( "KI_TRACE_CAMERA" ); #define MIN_ZOOM 0.10f #define MAX_ZOOM 1.25f -CCAMERA::CCAMERA( float aRangeScale ) +CAMERA::CAMERA( float aRangeScale ) { - wxLogTrace( m_logTrace, wxT( "CCAMERA::CCAMERA" ) ); + wxLogTrace( m_logTrace, wxT( "CAMERA::CAMERA" ) ); m_range_scale = aRangeScale; m_camera_pos_init = SFVEC3F( 0.0f, 0.0f, -(aRangeScale * 2.0f ) ); @@ -67,7 +67,7 @@ CCAMERA::CCAMERA( float aRangeScale ) } -void CCAMERA::Reset() +void CAMERA::Reset() { m_parametersChanged = true; m_projectionMatrix = glm::mat4( 1.0f ); @@ -99,7 +99,7 @@ void CCAMERA::Reset() } -void CCAMERA::Reset_T1() +void CAMERA::Reset_T1() { m_camera_pos_t1 = m_camera_pos_init; m_zoom_t1 = 1.0f; @@ -120,7 +120,7 @@ void CCAMERA::Reset_T1() } -void CCAMERA::updateViewMatrix() +void CAMERA::updateViewMatrix() { m_viewMatrix = glm::translate( glm::mat4( 1.0f ), m_camera_pos ) * m_rotationMatrix * m_rotationMatrixAux * @@ -128,20 +128,17 @@ void CCAMERA::updateViewMatrix() } -void CCAMERA::updateRotationMatrix() +void CAMERA::updateRotationMatrix() { - m_rotationMatrixAux = glm::rotate( glm::mat4( 1.0f ), - m_rotate_aux.x, + m_rotationMatrixAux = glm::rotate( glm::mat4( 1.0f ), m_rotate_aux.x, SFVEC3F( 1.0f, 0.0f, 0.0f ) ); normalise2PI( m_rotate_aux.x ); - m_rotationMatrixAux = glm::rotate( m_rotationMatrixAux, - m_rotate_aux.y, + m_rotationMatrixAux = glm::rotate( m_rotationMatrixAux, m_rotate_aux.y, SFVEC3F( 0.0f, 1.0f, 0.0f ) ); normalise2PI( m_rotate_aux.y ); - m_rotationMatrixAux = glm::rotate( m_rotationMatrixAux, - m_rotate_aux.z, + m_rotationMatrixAux = glm::rotate( m_rotationMatrixAux, m_rotate_aux.z, SFVEC3F( 0.0f, 0.0f, 1.0f ) ); normalise2PI( m_rotate_aux.z ); @@ -152,13 +149,13 @@ void CCAMERA::updateRotationMatrix() } -const glm::mat4 CCAMERA::GetRotationMatrix() const +const glm::mat4 CAMERA::GetRotationMatrix() const { return m_rotationMatrix * m_rotationMatrixAux; } -void CCAMERA::rebuildProjection() +void CAMERA::rebuildProjection() { if( ( m_windowSize.x == 0 ) || ( m_windowSize.y == 0 ) ) return; @@ -178,10 +175,8 @@ void CCAMERA::rebuildProjection() // Ratio width / height of the window display m_frustum.angle = 45.0f * m_zoom; - m_projectionMatrix = glm::perspective( glm::radians( m_frustum.angle ), - m_frustum.ratio, - m_frustum.nearD, - m_frustum.farD ); + m_projectionMatrix = glm::perspective( glm::radians( m_frustum.angle ), m_frustum.ratio, + m_frustum.nearD, m_frustum.farD ); m_projectionMatrixInv = glm::inverse( m_projectionMatrix ); @@ -253,7 +248,7 @@ void CCAMERA::rebuildProjection() } -void CCAMERA::updateFrustum() +void CAMERA::updateFrustum() { // Update matrix and vectors m_viewMatrixInverse = glm::inverse( m_viewMatrix ); @@ -311,8 +306,8 @@ void CCAMERA::updateFrustum() } -void CCAMERA::MakeRay( const SFVEC2I &aWindowPos, SFVEC3F &aOutOrigin, - SFVEC3F &aOutDirection ) const +void CAMERA::MakeRay( const SFVEC2I& aWindowPos, SFVEC3F& aOutOrigin, + SFVEC3F& aOutDirection ) const { wxASSERT( aWindowPos.x < m_windowSize.x ); wxASSERT( aWindowPos.y < m_windowSize.y ); @@ -335,8 +330,8 @@ void CCAMERA::MakeRay( const SFVEC2I &aWindowPos, SFVEC3F &aOutOrigin, } -void CCAMERA::MakeRay( const SFVEC2F &aWindowPos, SFVEC3F &aOutOrigin, - SFVEC3F &aOutDirection ) const +void CAMERA::MakeRay( const SFVEC2F& aWindowPos, SFVEC3F& aOutOrigin, + SFVEC3F& aOutDirection ) const { wxASSERT( aWindowPos.x < (float)m_windowSize.x ); wxASSERT( aWindowPos.y < (float)m_windowSize.y ); @@ -367,7 +362,7 @@ void CCAMERA::MakeRay( const SFVEC2F &aWindowPos, SFVEC3F &aOutOrigin, } -void CCAMERA::MakeRayAtCurrrentMousePosition( SFVEC3F &aOutOrigin, SFVEC3F &aOutDirection ) const +void CAMERA::MakeRayAtCurrrentMousePosition( SFVEC3F& aOutOrigin, SFVEC3F& aOutDirection ) const { const SFVEC2I windowPos = SFVEC2I( m_lastPosition.x, m_windowSize.y - m_lastPosition.y ); @@ -379,19 +374,19 @@ void CCAMERA::MakeRayAtCurrrentMousePosition( SFVEC3F &aOutOrigin, SFVEC3F &aOut } -const glm::mat4 &CCAMERA::GetProjectionMatrix() const +const glm::mat4& CAMERA::GetProjectionMatrix() const { return m_projectionMatrix; } -const glm::mat4 &CCAMERA::GetProjectionMatrixInv() const +const glm::mat4& CAMERA::GetProjectionMatrixInv() const { return m_projectionMatrixInv; } -void CCAMERA::ResetXYpos() +void CAMERA::ResetXYpos() { m_parametersChanged = true; m_camera_pos.x = 0.0f; @@ -402,32 +397,32 @@ void CCAMERA::ResetXYpos() } -void CCAMERA::ResetXYpos_T1() +void CAMERA::ResetXYpos_T1() { m_camera_pos_t1.x = 0.0f; m_camera_pos_t1.y = 0.0f; } -const glm::mat4 &CCAMERA::GetViewMatrix() const +const glm::mat4& CAMERA::GetViewMatrix() const { return m_viewMatrix; } -const glm::mat4 &CCAMERA::GetViewMatrix_Inv() const +const glm::mat4& CAMERA::GetViewMatrix_Inv() const { return m_viewMatrixInverse; } -void CCAMERA::SetCurMousePosition( const wxPoint &aNewMousePosition ) +void CAMERA::SetCurMousePosition( const wxPoint& aNewMousePosition ) { m_lastPosition = aNewMousePosition; } -void CCAMERA::ToggleProjection() +void CAMERA::ToggleProjection() { if( m_projectionType == PROJECTION_TYPE::ORTHO ) m_projectionType = PROJECTION_TYPE::PERSPECTIVE; @@ -438,7 +433,7 @@ void CCAMERA::ToggleProjection() } -bool CCAMERA::SetCurWindowSize( const wxSize &aSize ) +bool CAMERA::SetCurWindowSize( const wxSize& aSize ) { const SFVEC2I newSize = SFVEC2I( aSize.x, aSize.y ); @@ -454,7 +449,7 @@ bool CCAMERA::SetCurWindowSize( const wxSize &aSize ) } -void CCAMERA::ZoomReset() +void CAMERA::ZoomReset() { m_zoom = 1.0f; @@ -464,7 +459,7 @@ void CCAMERA::ZoomReset() rebuildProjection(); } -bool CCAMERA::Zoom( float aFactor ) +bool CAMERA::Zoom( float aFactor ) { if( ( m_zoom == MIN_ZOOM && aFactor > 1 ) || ( m_zoom == MAX_ZOOM && aFactor < 1 ) || aFactor == 1 ) @@ -487,7 +482,7 @@ bool CCAMERA::Zoom( float aFactor ) } -bool CCAMERA::Zoom_T1( float aFactor ) +bool CAMERA::Zoom_T1( float aFactor ) { if( ( m_zoom == MIN_ZOOM && aFactor > 1 ) || ( m_zoom == MAX_ZOOM && aFactor < 1 ) || aFactor == 1 ) @@ -507,52 +502,52 @@ bool CCAMERA::Zoom_T1( float aFactor ) } -float CCAMERA::ZoomGet() const +float CAMERA::ZoomGet() const { return m_zoom; } -void CCAMERA::RotateX( float aAngleInRadians ) +void CAMERA::RotateX( float aAngleInRadians ) { m_rotate_aux.x += aAngleInRadians; updateRotationMatrix(); } -void CCAMERA::RotateY( float aAngleInRadians ) +void CAMERA::RotateY( float aAngleInRadians ) { m_rotate_aux.y += aAngleInRadians; updateRotationMatrix(); } -void CCAMERA::RotateZ( float aAngleInRadians ) +void CAMERA::RotateZ( float aAngleInRadians ) { m_rotate_aux.z += aAngleInRadians; updateRotationMatrix(); } -void CCAMERA::RotateX_T1( float aAngleInRadians ) +void CAMERA::RotateX_T1( float aAngleInRadians ) { m_rotate_aux_t1.x += aAngleInRadians; } -void CCAMERA::RotateY_T1( float aAngleInRadians ) +void CAMERA::RotateY_T1( float aAngleInRadians ) { m_rotate_aux_t1.y += aAngleInRadians; } -void CCAMERA::RotateZ_T1( float aAngleInRadians ) +void CAMERA::RotateZ_T1( float aAngleInRadians ) { m_rotate_aux_t1.z += aAngleInRadians; } -void CCAMERA::SetT0_and_T1_current_T() +void CAMERA::SetT0_and_T1_current_T() { m_camera_pos_t0 = m_camera_pos; m_lookat_pos_t0 = m_lookat_pos; @@ -566,7 +561,7 @@ void CCAMERA::SetT0_and_T1_current_T() } -void CCAMERA::Interpolate( float t ) +void CAMERA::Interpolate( float t ) { wxASSERT( t >= 0.0f ); @@ -584,7 +579,7 @@ void CCAMERA::Interpolate( float t ) } -bool CCAMERA::ParametersChanged() +bool CAMERA::ParametersChanged() { const bool parametersChanged = m_parametersChanged; diff --git a/3d-viewer/3d_rendering/ccamera.h b/3d-viewer/3d_rendering/ccamera.h index ce21fe98c9..363eab7abc 100644 --- a/3d-viewer/3d_rendering/ccamera.h +++ b/3d-viewer/3d_rendering/ccamera.h @@ -27,8 +27,8 @@ * @brief Define an abstract camera */ -#ifndef CCAMERA_H -#define CCAMERA_H +#ifndef CAMERA_H +#define CAMERA_H #include "../3d_rendering/3d_render_raytracing/ray.h" #include // for wxSize @@ -44,7 +44,7 @@ enum class PROJECTION_TYPE * Frustum is a implementation based on a tutorial by * http://www.lighthouse3d.com/tutorials/view-frustum-culling/ */ -struct FRUSTUM +struct CAMERA_FRUSTUM { SFVEC3F nc; SFVEC3F fc; @@ -74,7 +74,7 @@ enum class CAMERA_INTERPOLATION * * It must be derived by other classes to implement a real camera object. */ -class CCAMERA +class CAMERA { public: /** @@ -84,13 +84,12 @@ public: * -aRangeScale/2 to +aRangeScale/2. It will initialize the * Z position with aRangeScale. */ - explicit CCAMERA( float aRangeScale ); + explicit CAMERA( float aRangeScale ); - virtual ~CCAMERA() + virtual ~CAMERA() { } - /** * Get the rotation matrix to be applied in a transformation camera. * @@ -98,21 +97,21 @@ public: */ const glm::mat4 GetRotationMatrix() const; - const glm::mat4 &GetViewMatrix() const; - const glm::mat4 &GetViewMatrix_Inv() const; + const glm::mat4& GetViewMatrix() const; + const glm::mat4& GetViewMatrix_Inv() const; - const glm::mat4 &GetProjectionMatrix() const; - const glm::mat4 &GetProjectionMatrixInv() const; + const glm::mat4& GetProjectionMatrix() const; + const glm::mat4& GetProjectionMatrixInv() const; - const SFVEC3F &GetRight() const { return m_right; } - const SFVEC3F &GetUp() const { return m_up; } - const SFVEC3F &GetDir() const { return m_dir; } - const SFVEC3F &GetPos() const { return m_pos; } - const SFVEC2F &GetFocalLen() const { return m_focalLen; } + const SFVEC3F& GetRight() const { return m_right; } + const SFVEC3F& GetUp() const { return m_up; } + const SFVEC3F& GetDir() const { return m_dir; } + const SFVEC3F& GetPos() const { return m_pos; } + const SFVEC2F& GetFocalLen() const { return m_focalLen; } float GetNear() const { return m_frustum.nearD; } float GetFar() const { return m_frustum.farD; } - void SetBoardLookAtPos( const SFVEC3F &aBoardPos ) + void SetBoardLookAtPos( const SFVEC3F& aBoardPos ) { if( m_board_lookat_pos_init != aBoardPos ) { @@ -121,27 +120,27 @@ public: } } - virtual void SetLookAtPos( const SFVEC3F &aLookAtPos ) = 0; + virtual void SetLookAtPos( const SFVEC3F& aLookAtPos ) = 0; - void SetLookAtPos_T1( const SFVEC3F &aLookAtPos ) + void SetLookAtPos_T1( const SFVEC3F& aLookAtPos ) { m_lookat_pos_t1 = aLookAtPos; } - const SFVEC3F &GetLookAtPos_T1() const { return m_lookat_pos_t1; } + const SFVEC3F& GetLookAtPos_T1() const { return m_lookat_pos_t1; } - const SFVEC3F &GetCameraPos() const { return m_camera_pos; } + const SFVEC3F& GetCameraPos() const { return m_camera_pos; } /** * Calculate a new mouse drag position */ - virtual void Drag( const wxPoint &aNewMousePosition ) = 0; + virtual void Drag( const wxPoint& aNewMousePosition ) = 0; - virtual void Pan( const wxPoint &aNewMousePosition ) = 0; + virtual void Pan( const wxPoint& aNewMousePosition ) = 0; - virtual void Pan( const SFVEC3F &aDeltaOffsetInc ) = 0; + virtual void Pan( const SFVEC3F& aDeltaOffsetInc ) = 0; - virtual void Pan_T1( const SFVEC3F &aDeltaOffsetInc ) = 0; + virtual void Pan_T1( const SFVEC3F& aDeltaOffsetInc ) = 0; /** * Reset the camera to initial state @@ -155,7 +154,7 @@ public: /** * Update the current mouse position without make any new calculations on camera. */ - void SetCurMousePosition( const wxPoint &aPosition ); + void SetCurMousePosition( const wxPoint& aPosition ); void ToggleProjection(); PROJECTION_TYPE GetProjection() { return m_projectionType; } @@ -165,7 +164,7 @@ public: * * @return true if the windows size changed since last time. */ - bool SetCurWindowSize( const wxSize &aSize ); + bool SetCurWindowSize( const wxSize& aSize ); void ZoomReset(); @@ -217,7 +216,7 @@ public: * @param aOutOrigin out origin position of the ray. * @param aOutDirection out direction */ - void MakeRay( const SFVEC2I &aWindowPos, SFVEC3F &aOutOrigin, SFVEC3F &aOutDirection ) const; + void MakeRay( const SFVEC2I& aWindowPos, SFVEC3F& aOutOrigin, SFVEC3F& aOutDirection ) const; /** * Make a ray based on a windows screen position, it will interpolate based on the @@ -227,7 +226,7 @@ public: * @param aOutOrigin out origin position of the ray. * @param aOutDirection out direction. */ - void MakeRay( const SFVEC2F &aWindowPos, SFVEC3F &aOutOrigin, SFVEC3F &aOutDirection ) const; + void MakeRay( const SFVEC2F& aWindowPos, SFVEC3F& aOutOrigin, SFVEC3F& aOutDirection ) const; /** * Make a ray based on the latest mouse position. @@ -235,7 +234,7 @@ public: * @param aOutOrigin out origin position of the ray. * @param aOutDirection out direction. */ - void MakeRayAtCurrrentMousePosition( SFVEC3F &aOutOrigin, SFVEC3F &aOutDirection ) const; + void MakeRayAtCurrrentMousePosition( SFVEC3F& aOutOrigin, SFVEC3F& aOutDirection ) const; protected: void rebuildProjection(); @@ -276,7 +275,7 @@ protected: glm::mat4 m_projectionMatrixInv; PROJECTION_TYPE m_projectionType; - FRUSTUM m_frustum; + CAMERA_FRUSTUM m_frustum; SFVEC3F m_right; SFVEC3F m_up; @@ -323,10 +322,10 @@ protected: * Trace mask used to enable or disable the trace output of this class. * * The debug output can be turned on by setting the WXTRACE environment variable to - * "KI_TRACE_CCAMERA". See the wxWidgets documentation on wxLogTrace for + * "KI_TRACE_CAMERA". See the wxWidgets documentation on wxLogTrace for * more information. */ - static const wxChar *m_logTrace; + static const wxChar* m_logTrace; }; -#endif // CCAMERA_H +#endif // CAMERA_H diff --git a/3d-viewer/3d_rendering/ccolorrgb.cpp b/3d-viewer/3d_rendering/ccolorrgb.cpp index 8a0694dbd0..c20aa1cbb1 100644 --- a/3d-viewer/3d_rendering/ccolorrgb.cpp +++ b/3d-viewer/3d_rendering/ccolorrgb.cpp @@ -31,7 +31,7 @@ #include "ccolorrgb.h" -CCOLORRGB::CCOLORRGB( const SFVEC3F &aColor ) +COLOR_RGB::COLOR_RGB( const SFVEC3F& aColor ) { r = (unsigned int) glm::clamp( (int) ( aColor.r * 255 ), 0, 255 ); g = (unsigned int) glm::clamp( (int) ( aColor.g * 255 ), 0, 255 ); @@ -39,32 +39,32 @@ CCOLORRGB::CCOLORRGB( const SFVEC3F &aColor ) } -CCOLORRGB BlendColor( const CCOLORRGB &aC1, const CCOLORRGB &aC2 ) +COLOR_RGB BlendColor( const COLOR_RGB& aC1, const COLOR_RGB& aC2 ) { const unsigned int r = aC1.r + aC2.r; const unsigned int g = aC1.g + aC2.g; const unsigned int b = aC1.b + aC2.b; - return CCOLORRGB( ( r >> 1 ), ( g >> 1 ), ( b >> 1 ) ); + return COLOR_RGB( ( r >> 1 ), ( g >> 1 ), ( b >> 1 ) ); } -CCOLORRGB BlendColor( const CCOLORRGB &aC1, const CCOLORRGB &aC2, const CCOLORRGB &aC3 ) +COLOR_RGB BlendColor( const COLOR_RGB& aC1, const COLOR_RGB& aC2, const COLOR_RGB& aC3 ) { const unsigned int r = aC1.r + aC2.r + aC3.r; const unsigned int g = aC1.g + aC2.g + aC3.g; const unsigned int b = aC1.b + aC2.b + aC3.b; - return CCOLORRGB( ( r / 3 ), ( g / 3 ), ( b / 3 ) ); + return COLOR_RGB( ( r / 3 ), ( g / 3 ), ( b / 3 ) ); } -CCOLORRGB BlendColor( const CCOLORRGB &aC1, const CCOLORRGB &aC2, const CCOLORRGB &aC3, - const CCOLORRGB &aC4 ) +COLOR_RGB BlendColor( const COLOR_RGB& aC1, const COLOR_RGB& aC2, const COLOR_RGB& aC3, + const COLOR_RGB& aC4 ) { const unsigned int r = aC1.r + aC2.r + aC3.r + aC4.r; const unsigned int g = aC1.g + aC2.g + aC3.g + aC4.g; const unsigned int b = aC1.b + aC2.b + aC3.b + aC4.b; - return CCOLORRGB( ( r >> 2 ), ( g >> 2 ), ( b >> 2 ) ); + return COLOR_RGB( ( r >> 2 ), ( g >> 2 ), ( b >> 2 ) ); } diff --git a/3d-viewer/3d_rendering/ccolorrgb.h b/3d-viewer/3d_rendering/ccolorrgb.h index 05c3cf4c58..a1418e2fac 100644 --- a/3d-viewer/3d_rendering/ccolorrgb.h +++ b/3d-viewer/3d_rendering/ccolorrgb.h @@ -27,12 +27,12 @@ * @brief */ -#ifndef CCOLORRGB_H -#define CCOLORRGB_H +#ifndef COLOR_RGB_H +#define COLOR_RGB_H #include -union CCOLORRGB +union COLOR_RGB { unsigned char c[3]; @@ -43,9 +43,9 @@ union CCOLORRGB unsigned char b; }; - CCOLORRGB( const SFVEC3F &aColor ); - CCOLORRGB() { r = 0; g = 0; b = 0; } - CCOLORRGB( unsigned char aR, unsigned char aG, unsigned char aB ) + COLOR_RGB( const SFVEC3F& aColor ); + COLOR_RGB() { r = 0; g = 0; b = 0; } + COLOR_RGB( unsigned char aR, unsigned char aG, unsigned char aB ) { r = aR; g = aG; @@ -54,9 +54,9 @@ union CCOLORRGB }; -CCOLORRGB BlendColor( const CCOLORRGB &aC1, const CCOLORRGB &aC2 ); -CCOLORRGB BlendColor( const CCOLORRGB &aC1, const CCOLORRGB &aC2, const CCOLORRGB &aC3 ); -CCOLORRGB BlendColor( const CCOLORRGB &aC1, const CCOLORRGB &aC2, const CCOLORRGB &aC3, - const CCOLORRGB &aC4 ); +COLOR_RGB BlendColor( const COLOR_RGB& aC1, const COLOR_RGB& aC2 ); +COLOR_RGB BlendColor( const COLOR_RGB& aC1, const COLOR_RGB& aC2, const COLOR_RGB& aC3 ); +COLOR_RGB BlendColor( const COLOR_RGB& aC1, const COLOR_RGB& aC2, const COLOR_RGB& aC3, + const COLOR_RGB& aC4 ); -#endif // CCOLORRGB_H +#endif // COLOR_RGB_H diff --git a/3d-viewer/3d_rendering/cimage.cpp b/3d-viewer/3d_rendering/cimage.cpp index 9ed801a72d..4d41ce42d4 100644 --- a/3d-viewer/3d_rendering/cimage.cpp +++ b/3d-viewer/3d_rendering/cimage.cpp @@ -42,7 +42,7 @@ #endif -CIMAGE::CIMAGE( unsigned int aXsize, unsigned int aYsize ) +IMAGE::IMAGE( unsigned int aXsize, unsigned int aYsize ) { m_wxh = aXsize * aYsize; m_pixels = new unsigned char[m_wxh]; @@ -53,7 +53,7 @@ CIMAGE::CIMAGE( unsigned int aXsize, unsigned int aYsize ) } -CIMAGE::CIMAGE( const CIMAGE &aSrcImage ) +IMAGE::IMAGE( const IMAGE& aSrcImage ) { m_wxh = aSrcImage.GetWidth() * aSrcImage.GetHeight(); m_pixels = new unsigned char[m_wxh]; @@ -64,19 +64,19 @@ CIMAGE::CIMAGE( const CIMAGE &aSrcImage ) } -CIMAGE::~CIMAGE() +IMAGE::~IMAGE() { delete[] m_pixels; } -unsigned char* CIMAGE::GetBuffer() const +unsigned char* IMAGE::GetBuffer() const { return m_pixels; } -bool CIMAGE::wrapCoords( int *aXo, int *aYo ) const +bool IMAGE::wrapCoords( int* aXo, int* aYo ) const { int x = *aXo; int y = *aYo; @@ -111,7 +111,7 @@ bool CIMAGE::wrapCoords( int *aXo, int *aYo ) const } -void CIMAGE::plot8CircleLines( int aCx, int aCy, int aX, int aY, unsigned char aValue ) +void IMAGE::plot8CircleLines( int aCx, int aCy, int aX, int aY, unsigned char aValue ) { Hline( aCx - aX, aCx + aX, aCy + aY, aValue ); Hline( aCx - aX, aCx + aX, aCy - aY, aValue ); @@ -120,14 +120,14 @@ void CIMAGE::plot8CircleLines( int aCx, int aCy, int aX, int aY, unsigned char a } -void CIMAGE::Setpixel( int aX, int aY, unsigned char aValue ) +void IMAGE::Setpixel( int aX, int aY, unsigned char aValue ) { if( wrapCoords( &aX, &aY ) ) m_pixels[aX + aY * m_width] = aValue; } -unsigned char CIMAGE::Getpixel( int aX, int aY ) const +unsigned char IMAGE::Getpixel( int aX, int aY ) const { if( wrapCoords( &aX, &aY ) ) return m_pixels[aX + aY * m_width]; @@ -136,7 +136,7 @@ unsigned char CIMAGE::Getpixel( int aX, int aY ) const } -void CIMAGE::Hline( int aXStart, int aXEnd, int aY, unsigned char aValue ) +void IMAGE::Hline( int aXStart, int aXEnd, int aY, unsigned char aValue ) { if( ( aY < 0 ) || ( aY >= (int) m_height ) || ( ( aXStart < 0 ) && ( aXEnd < 0 ) ) || ( ( aXStart >= (int) m_width ) && ( aXEnd >= (int) m_width ) ) ) @@ -170,7 +170,7 @@ void CIMAGE::Hline( int aXStart, int aXEnd, int aY, unsigned char aValue ) // Based on paper // http://web.engr.oregonstate.edu/~sllu/bcircle.pdf -void CIMAGE::CircleFilled( int aCx, int aCy, int aRadius, unsigned char aValue ) +void IMAGE::CircleFilled( int aCx, int aCy, int aRadius, unsigned char aValue ) { int x = aRadius; int y = 0; @@ -195,25 +195,25 @@ void CIMAGE::CircleFilled( int aCx, int aCy, int aRadius, unsigned char aValue ) } -void CIMAGE::Invert() +void IMAGE::Invert() { for( unsigned int it = 0; it < m_wxh; it++ ) m_pixels[it] = 255 - m_pixels[it]; } -void CIMAGE::CopyFull( const CIMAGE* aImgA, const CIMAGE* aImgB, IMAGE_OP aOperation ) +void IMAGE::CopyFull( const IMAGE* aImgA, const IMAGE* aImgB, IMAGE_OP aOperation ) { int aV, bV; if( aOperation == IMAGE_OP::RAW ) { - if( aImgA == NULL ) + if( aImgA == nullptr ) return; } else { - if( ( aImgA == NULL ) || ( aImgB == NULL ) ) + if( ( aImgA == nullptr ) || ( aImgB == nullptr ) ) return; } @@ -471,7 +471,7 @@ static const S_FILTER FILTERS[] = { /// do it without use the getpixel function. /// Optimization can be done to m_pixels[ix + iy * m_width] /// but keep in mind the parallel process of the algorithm -void CIMAGE::EfxFilter( CIMAGE* aInImg, IMAGE_FILTER aFilterType ) +void IMAGE::EfxFilter( IMAGE* aInImg, IMAGE_FILTER aFilterType ) { S_FILTER filter = FILTERS[static_cast( aFilterType )]; @@ -487,9 +487,7 @@ void CIMAGE::EfxFilter( CIMAGE* aInImg, IMAGE_FILTER aFilterType ) { std::thread t = std::thread( [&]() { - for( size_t iy = nextRow.fetch_add( 1 ); - iy < m_height; - iy = nextRow.fetch_add( 1 ) ) + for( size_t iy = nextRow.fetch_add( 1 ); iy < m_height; iy = nextRow.fetch_add( 1 ) ) { for( size_t ix = 0; ix < m_width; ix++ ) { @@ -500,8 +498,7 @@ void CIMAGE::EfxFilter( CIMAGE* aInImg, IMAGE_FILTER aFilterType ) for( size_t sx = 0; sx < 5; sx++ ) { int factor = filter.kernel[sx][sy]; - unsigned char pixelv = aInImg->Getpixel( ix + sx - 2, - iy + sy - 2 ); + unsigned char pixelv = aInImg->Getpixel( ix + sx - 2, iy + sy - 2 ); v += pixelv * factor; } @@ -527,7 +524,7 @@ void CIMAGE::EfxFilter( CIMAGE* aInImg, IMAGE_FILTER aFilterType ) } -void CIMAGE::SetPixelsFromNormalizedFloat( const float * aNormalizedFloatArray ) +void IMAGE::SetPixelsFromNormalizedFloat( const float* aNormalizedFloatArray ) { for( unsigned int i = 0; i < m_wxh; i++ ) { @@ -539,7 +536,7 @@ void CIMAGE::SetPixelsFromNormalizedFloat( const float * aNormalizedFloatArray ) } -void CIMAGE::SaveAsPNG( const wxString& aFileName ) const +void IMAGE::SaveAsPNG( const wxString& aFileName ) const { DBG_SaveBuffer( aFileName, m_pixels, m_width, m_height ); } diff --git a/3d-viewer/3d_rendering/cimage.h b/3d-viewer/3d_rendering/cimage.h index 046f8a0172..3ad0775222 100644 --- a/3d-viewer/3d_rendering/cimage.h +++ b/3d-viewer/3d_rendering/cimage.h @@ -27,8 +27,8 @@ * @brief one 8bit-channel image definition */ -#ifndef CIMAGE_H -#define CIMAGE_H +#ifndef IMAGE_H +#define IMAGE_H #include @@ -86,27 +86,27 @@ typedef struct /** * Manage an 8-bit channel image. */ -class CIMAGE +class IMAGE { public: /** - * Construct a CIMAGE based on image size. + * Construct a IMAGE based on image size. * * @param aXsize x size * @param aYsize y size */ - CIMAGE( unsigned int aXsize, unsigned int aYsize ); + IMAGE( unsigned int aXsize, unsigned int aYsize ); /** - * Construct a CIMAGE based from an existing image. + * Construct a IMAGE based from an existing image. * * It will make a copy the \a aSrcImage. * * @param aSrcImage */ - CIMAGE( const CIMAGE &aSrcImage ); + IMAGE( const IMAGE& aSrcImage ); - ~CIMAGE(); + ~IMAGE(); /** * Set a value in a pixel position, position is clamped in accordance with the @@ -160,7 +160,7 @@ public: * @param aImgB an image input. * @param aOperation operation to perform */ - void CopyFull( const CIMAGE* aImgA, const CIMAGE* aImgB, IMAGE_OP aOperation ); + void CopyFull( const IMAGE* aImgA, const IMAGE* aImgB, IMAGE_OP aOperation ); /** * Invert the values of this image <- (255 - this) @@ -173,7 +173,7 @@ public: * @param aInImg input image * @param aFilterType filter type to apply */ - void EfxFilter( CIMAGE* aInImg, IMAGE_FILTER aFilterType ); + void EfxFilter( IMAGE* aInImg, IMAGE_FILTER aFilterType ); /** * Save image buffer to a PNG file into the working folder. @@ -211,7 +211,7 @@ private: * @param aXo Y coordinate to be converted (output). * @return bool - true if the coordinates are inside the image, false otherwise. */ - bool wrapCoords( int *aXo, int *aYo ) const; + bool wrapCoords( int* aXo, int* aYo ) const; void plot8CircleLines( int aCx, int aCy, int aX, int aY, unsigned char aValue ); @@ -222,4 +222,4 @@ private: IMAGE_WRAP m_wraping; ///< current wrapping type }; -#endif // CIMAGE_H +#endif // IMAGE_H diff --git a/3d-viewer/3d_rendering/cpostshader.cpp b/3d-viewer/3d_rendering/cpostshader.cpp index 12c5dedb2f..1a220d08e4 100644 --- a/3d-viewer/3d_rendering/cpostshader.cpp +++ b/3d-viewer/3d_rendering/cpostshader.cpp @@ -33,26 +33,27 @@ #include -CPOSTSHADER::CPOSTSHADER( const CCAMERA &aCamera ) : m_camera(aCamera) +POST_SHADER::POST_SHADER( const CAMERA& aCamera ) : + m_camera( aCamera ) { m_size = SFVEC2UI( 0, 0 ); - m_normals = NULL; - m_color = NULL; - m_depth = NULL; - m_wc_hitposition = NULL; - m_shadow_att_factor = NULL; + m_normals = nullptr; + m_color = nullptr; + m_depth = nullptr; + m_wc_hitposition = nullptr; + m_shadow_att_factor = nullptr; m_tmin = FLT_MAX; m_tmax = FLT_MIN; } -CPOSTSHADER::~CPOSTSHADER() +POST_SHADER::~POST_SHADER() { destroy_buffers(); } -void CPOSTSHADER::UpdateSize( unsigned int xSize, unsigned int ySize ) +void POST_SHADER::UpdateSize( unsigned int xSize, unsigned int ySize ) { destroy_buffers(); @@ -69,14 +70,14 @@ void CPOSTSHADER::UpdateSize( unsigned int xSize, unsigned int ySize ) } -void CPOSTSHADER::UpdateSize( const SFVEC2UI &aSize ) +void POST_SHADER::UpdateSize( const SFVEC2UI& aSize ) { UpdateSize( aSize.x, aSize.y ); } -void CPOSTSHADER::SetPixelData( unsigned int x, unsigned int y, const SFVEC3F &aNormal, - const SFVEC3F &aColor, const SFVEC3F &aHitPosition, +void POST_SHADER::SetPixelData( unsigned int x, unsigned int y, const SFVEC3F& aNormal, + const SFVEC3F& aColor, const SFVEC3F& aHitPosition, float aDepth, float aShadowAttFactor ) { wxASSERT( x < m_size.x ); @@ -103,7 +104,7 @@ void CPOSTSHADER::SetPixelData( unsigned int x, unsigned int y, const SFVEC3F &a } -void CPOSTSHADER::destroy_buffers() +void POST_SHADER::destroy_buffers() { delete[] m_normals; m_normals = nullptr; @@ -118,55 +119,55 @@ void CPOSTSHADER::destroy_buffers() } -const SFVEC3F &CPOSTSHADER::GetNormalAt( const SFVEC2F &aPos ) const +const SFVEC3F& POST_SHADER::GetNormalAt( const SFVEC2F& aPos ) const { return m_normals[GetIndex( aPos )]; } -const SFVEC3F &CPOSTSHADER::GetColorAt( const SFVEC2F &aPos ) const +const SFVEC3F& POST_SHADER::GetColorAt( const SFVEC2F& aPos ) const { return m_color[GetIndex( aPos )]; } -float CPOSTSHADER::GetDepthAt( const SFVEC2F &aPos ) const +float POST_SHADER::GetDepthAt( const SFVEC2F& aPos ) const { return m_depth[GetIndex( aPos )]; } -const SFVEC3F &CPOSTSHADER::GetPositionAt( const SFVEC2F &aPos ) const +const SFVEC3F& POST_SHADER::GetPositionAt( const SFVEC2F& aPos ) const { return m_wc_hitposition[GetIndex( aPos )]; } -const SFVEC3F &CPOSTSHADER::GetNormalAt( const SFVEC2I &aPos ) const +const SFVEC3F& POST_SHADER::GetNormalAt( const SFVEC2I& aPos ) const { return m_normals[GetIndex( aPos )]; } -const SFVEC3F &CPOSTSHADER::GetColorAt( const SFVEC2I &aPos ) const +const SFVEC3F& POST_SHADER::GetColorAt( const SFVEC2I& aPos ) const { return m_color[GetIndex( aPos )]; } -const SFVEC3F &CPOSTSHADER::GetColorAtNotProtected( const SFVEC2I &aPos ) const +const SFVEC3F& POST_SHADER::GetColorAtNotProtected( const SFVEC2I& aPos ) const { return m_color[ aPos.x + m_size.x * aPos.y ]; } -float CPOSTSHADER::GetDepthAt( const SFVEC2I &aPos ) const +float POST_SHADER::GetDepthAt( const SFVEC2I& aPos ) const { return m_depth[GetIndex( aPos )]; } -float CPOSTSHADER::GetDepthNormalizedAt( const SFVEC2I &aPos ) const +float POST_SHADER::GetDepthNormalizedAt( const SFVEC2I& aPos ) const { const float depth = m_depth[GetIndex( aPos )]; @@ -177,19 +178,19 @@ float CPOSTSHADER::GetDepthNormalizedAt( const SFVEC2I &aPos ) const } -const SFVEC3F &CPOSTSHADER::GetPositionAt( const SFVEC2I &aPos ) const +const SFVEC3F& POST_SHADER::GetPositionAt( const SFVEC2I& aPos ) const { return m_wc_hitposition[GetIndex( aPos )]; } -const float &CPOSTSHADER::GetShadowFactorAt( const SFVEC2I &aPos ) const +const float& POST_SHADER::GetShadowFactorAt( const SFVEC2I& aPos ) const { return m_shadow_att_factor[GetIndex( aPos )]; } -void CPOSTSHADER::DebugBuffersOutputAsImages() const +void POST_SHADER::DebugBuffersOutputAsImages() const { DBG_SaveBuffer( "m_shadow_att_factor", m_shadow_att_factor, m_size.x, m_size.y ); DBG_SaveBuffer( "m_color", m_color, m_size.x, m_size.y ); diff --git a/3d-viewer/3d_rendering/cpostshader.h b/3d-viewer/3d_rendering/cpostshader.h index e0ac819fe6..7ad42a12a1 100644 --- a/3d-viewer/3d_rendering/cpostshader.h +++ b/3d-viewer/3d_rendering/cpostshader.h @@ -27,18 +27,18 @@ * @brief a base class to create post shaders */ -#ifndef CPOSTSHADER_H -#define CPOSTSHADER_H +#ifndef POST_SHADER_H +#define POST_SHADER_H #include "ccamera.h" -class CPOSTSHADER +class POST_SHADER { public: - explicit CPOSTSHADER( const CCAMERA &aCamera ); - virtual ~CPOSTSHADER(); + explicit POST_SHADER( const CAMERA& aCamera ); + virtual ~POST_SHADER(); - virtual SFVEC3F Shade( const SFVEC2I &aShaderPos ) const = 0; + virtual SFVEC3F Shade( const SFVEC2I& aShaderPos ) const = 0; /** * Apply the final color process using a previous stage color. @@ -46,20 +46,20 @@ public: * @param aShadeColor The result of the shader. * @return the result of the shade process */ - virtual SFVEC3F ApplyShadeColor( const SFVEC2I &aShaderPos, const SFVEC3F &aInputColor, - const SFVEC3F &aShadeColor ) const = 0; + virtual SFVEC3F ApplyShadeColor( const SFVEC2I& aShaderPos, const SFVEC3F& aInputColor, + const SFVEC3F& aShadeColor ) const = 0; - void UpdateSize( const SFVEC2UI &aSize ); + void UpdateSize( const SFVEC2UI& aSize ); void UpdateSize( unsigned int xSize, unsigned int ySize ); void InitFrame() { m_tmin = FLT_MAX; m_tmax = 0.0f; } - void SetPixelData( unsigned int x, unsigned int y, const SFVEC3F &aNormal, - const SFVEC3F &aColor, const SFVEC3F &aHitPosition, + void SetPixelData( unsigned int x, unsigned int y, const SFVEC3F& aNormal, + const SFVEC3F& aColor, const SFVEC3F& aHitPosition, float aDepth, float aShadowAttFactor ); - const SFVEC3F &GetColorAtNotProtected( const SFVEC2I &aPos ) const; + const SFVEC3F& GetColorAtNotProtected( const SFVEC2I& aPos ) const; void DebugBuffersOutputAsImages() const; @@ -87,35 +87,35 @@ public: } protected: - const SFVEC3F &GetNormalAt( const SFVEC2F &aPos ) const; - const SFVEC3F &GetColorAt( const SFVEC2F &aPos ) const; - const SFVEC3F &GetPositionAt( const SFVEC2F &aPos ) const; - float GetDepthAt( const SFVEC2F &aPos ) const; + const SFVEC3F& GetNormalAt( const SFVEC2F& aPos ) const; + const SFVEC3F& GetColorAt( const SFVEC2F& aPos ) const; + const SFVEC3F& GetPositionAt( const SFVEC2F& aPos ) const; + float GetDepthAt( const SFVEC2F& aPos ) const; - const SFVEC3F &GetNormalAt( const SFVEC2I &aPos ) const; - const SFVEC3F &GetColorAt( const SFVEC2I &aPos ) const; - const SFVEC3F &GetPositionAt( const SFVEC2I &aPos ) const; - const float &GetShadowFactorAt( const SFVEC2I &aPos ) const; + const SFVEC3F& GetNormalAt( const SFVEC2I& aPos ) const; + const SFVEC3F& GetColorAt( const SFVEC2I& aPos ) const; + const SFVEC3F& GetPositionAt( const SFVEC2I& aPos ) const; + const float& GetShadowFactorAt( const SFVEC2I& aPos ) const; - float GetDepthAt( const SFVEC2I &aPos ) const; - float GetDepthNormalizedAt( const SFVEC2I &aPos ) const; + float GetDepthAt( const SFVEC2I& aPos ) const; + float GetDepthNormalizedAt( const SFVEC2I& aPos ) const; float GetMaxDepth() const { return m_tmax; } private: void destroy_buffers(); protected: - const CCAMERA &m_camera; + const CAMERA& m_camera; SFVEC2UI m_size; - SFVEC3F *m_normals; - SFVEC3F *m_color; - SFVEC3F *m_wc_hitposition; - float *m_depth; - float *m_shadow_att_factor; - float m_tmin; - float m_tmax; + SFVEC3F* m_normals; + SFVEC3F* m_color; + SFVEC3F* m_wc_hitposition; + float* m_depth; + float* m_shadow_att_factor; + float m_tmin; + float m_tmax; }; -#endif // CPOSTSHADER_H +#endif // POST_SHADER_H diff --git a/3d-viewer/3d_rendering/cpostshader_ssao.cpp b/3d-viewer/3d_rendering/cpostshader_ssao.cpp index d5f5149f2e..59e9ff1f17 100644 --- a/3d-viewer/3d_rendering/cpostshader_ssao.cpp +++ b/3d-viewer/3d_rendering/cpostshader_ssao.cpp @@ -31,8 +31,8 @@ #include "../3d_fastmath.h" -CPOSTSHADER_SSAO::CPOSTSHADER_SSAO( const CCAMERA &aCamera ) : - CPOSTSHADER( aCamera ), +POST_SHADER_SSAO::POST_SHADER_SSAO( const CAMERA& aCamera ) : + POST_SHADER( aCamera ), m_shadedBuffer( nullptr ), m_isUsingShadows( false ) { @@ -44,8 +44,8 @@ CPOSTSHADER_SSAO::CPOSTSHADER_SSAO( const CCAMERA &aCamera ) : //http://www.gamedev.net/topic/556187-the-best-ssao-ive-seen/ //http://www.gamedev.net/topic/556187-the-best-ssao-ive-seen/?view=findpost&p=4632208 -float CPOSTSHADER_SSAO::aoFF( const SFVEC2I &aShaderPos, const SFVEC3F &ddiff, - const SFVEC3F &cnorm, const float aShadowAtSamplePos, +float POST_SHADER_SSAO::aoFF( const SFVEC2I& aShaderPos, const SFVEC3F& ddiff, + const SFVEC3F& cnorm, const float aShadowAtSamplePos, const float aShadowAtCenterPos, int c1, int c2 ) const { const float shadowGain = 0.60f; @@ -110,8 +110,8 @@ float CPOSTSHADER_SSAO::aoFF( const SFVEC2I &aShaderPos, const SFVEC3F &ddiff, } -float CPOSTSHADER_SSAO::giFF( const SFVEC2I &aShaderPos, const SFVEC3F &ddiff, - const SFVEC3F &cnorm, const float aShadow, int c1, int c2 ) const +float POST_SHADER_SSAO::giFF( const SFVEC2I& aShaderPos, const SFVEC3F& ddiff, + const SFVEC3F& cnorm, const float aShadow, int c1, int c2 ) const { if( ( ddiff.x > FLT_EPSILON ) || ( ddiff.y > FLT_EPSILON ) || ( ddiff.z > FLT_EPSILON ) ) { @@ -130,7 +130,7 @@ float CPOSTSHADER_SSAO::giFF( const SFVEC2I &aShaderPos, const SFVEC3F &ddiff, } -SFVEC3F CPOSTSHADER_SSAO::Shade( const SFVEC2I &aShaderPos ) const +SFVEC3F POST_SHADER_SSAO::Shade( const SFVEC2I& aShaderPos ) const { float cdepth = GetDepthAt( aShaderPos ); @@ -146,7 +146,7 @@ SFVEC3F CPOSTSHADER_SSAO::Shade( const SFVEC2I &aShaderPos ) const // initialize variables: float ao = 0.0f; - SFVEC3F gi = SFVEC3F(0.0f); + SFVEC3F gi = SFVEC3F( 0.0f ); #define ROUNDS 3 for( unsigned int i = 0; i < ROUNDS; ++i ) @@ -227,8 +227,8 @@ SFVEC3F CPOSTSHADER_SSAO::Shade( const SFVEC2I &aShaderPos ) const } -SFVEC3F CPOSTSHADER_SSAO::ApplyShadeColor( const SFVEC2I &aShaderPos, const SFVEC3F &aInputColor, - const SFVEC3F &aShadeColor ) const +SFVEC3F POST_SHADER_SSAO::ApplyShadeColor( const SFVEC2I& aShaderPos, const SFVEC3F& aInputColor, + const SFVEC3F& aShadeColor ) const { SFVEC3F outColor; @@ -244,7 +244,7 @@ SFVEC3F CPOSTSHADER_SSAO::ApplyShadeColor( const SFVEC2I &aShaderPos, const SFVE } -SFVEC3F CPOSTSHADER_SSAO::giColorCurve( const SFVEC3F &aColor ) const +SFVEC3F POST_SHADER_SSAO::giColorCurve( const SFVEC3F& aColor ) const { const SFVEC3F vec1 = SFVEC3F( 1.0f ); @@ -256,7 +256,7 @@ SFVEC3F CPOSTSHADER_SSAO::giColorCurve( const SFVEC3F &aColor ) const } -SFVEC3F CPOSTSHADER_SSAO::Blur( const SFVEC2I& aShaderPos ) const +SFVEC3F POST_SHADER_SSAO::Blur( const SFVEC2I& aShaderPos ) const { const float dCenter = GetDepthAt( aShaderPos ); diff --git a/3d-viewer/3d_rendering/cpostshader_ssao.h b/3d-viewer/3d_rendering/cpostshader_ssao.h index 010a96d52f..bf7ddbadc9 100644 --- a/3d-viewer/3d_rendering/cpostshader_ssao.h +++ b/3d-viewer/3d_rendering/cpostshader_ssao.h @@ -27,21 +27,21 @@ * @brief Implements a post shader screen space ambient occlusion on software */ -#ifndef CPOSTSHADER_SSAO_H -#define CPOSTSHADER_SSAO_H +#ifndef POST_SHADER_SSAO_H +#define POST_SHADER_SSAO_H #include "cpostshader.h" -class CPOSTSHADER_SSAO : public CPOSTSHADER +class POST_SHADER_SSAO : public POST_SHADER { public: - explicit CPOSTSHADER_SSAO( const CCAMERA &aCamera ); + explicit POST_SHADER_SSAO( const CAMERA& aCamera ); - SFVEC3F Shade(const SFVEC2I &aShaderPos ) const override; - SFVEC3F ApplyShadeColor( const SFVEC2I &aShaderPos, const SFVEC3F &aInputColor, - const SFVEC3F &aShadeColor ) const override; + SFVEC3F Shade(const SFVEC2I& aShaderPos ) const override; + SFVEC3F ApplyShadeColor( const SFVEC2I& aShaderPos, const SFVEC3F& aInputColor, + const SFVEC3F& aShadeColor ) const override; SFVEC3F Blur( const SFVEC2I& aShaderPos ) const; @@ -76,7 +76,7 @@ private: * @param aColor input color. * @return transformed color. */ - SFVEC3F giColorCurve( const SFVEC3F &aColor ) const; + SFVEC3F giColorCurve( const SFVEC3F& aColor ) const; SFVEC3F* m_shadedBuffer; @@ -84,4 +84,4 @@ private: }; -#endif // CPOSTSHADER_SSAO_H +#endif // POST_SHADER_SSAO_H diff --git a/3d-viewer/3d_rendering/ctrack_ball.cpp b/3d-viewer/3d_rendering/ctrack_ball.cpp index 0ae7710d0e..97cd79a712 100644 --- a/3d-viewer/3d_rendering/ctrack_ball.cpp +++ b/3d-viewer/3d_rendering/ctrack_ball.cpp @@ -34,9 +34,9 @@ #include -CTRACK_BALL::CTRACK_BALL( float aRangeScale ) : CCAMERA( aRangeScale ) +TRACK_BALL::TRACK_BALL( float aRangeScale ) : CAMERA( aRangeScale ) { - wxLogTrace( m_logTrace, wxT( "CTRACK_BALL::CTRACK_BALL" ) ); + wxLogTrace( m_logTrace, wxT( "TRACK_BALL::TRACK_BALL" ) ); memset( m_quat, 0, sizeof( m_quat ) ); memset( m_quat_t0, 0, sizeof( m_quat_t0 ) ); @@ -48,7 +48,7 @@ CTRACK_BALL::CTRACK_BALL( float aRangeScale ) : CCAMERA( aRangeScale ) } -void CTRACK_BALL::Drag( const wxPoint& aNewMousePosition ) +void TRACK_BALL::Drag( const wxPoint& aNewMousePosition ) { m_parametersChanged = true; @@ -77,7 +77,7 @@ void CTRACK_BALL::Drag( const wxPoint& aNewMousePosition ) } -void CTRACK_BALL::SetLookAtPos( const SFVEC3F& aLookAtPos ) +void TRACK_BALL::SetLookAtPos( const SFVEC3F& aLookAtPos ) { if( m_lookat_pos != aLookAtPos ) { @@ -91,14 +91,14 @@ void CTRACK_BALL::SetLookAtPos( const SFVEC3F& aLookAtPos ) } -void CTRACK_BALL::Pan( const wxPoint& aNewMousePosition ) +void TRACK_BALL::Pan( const wxPoint& aNewMousePosition ) { m_parametersChanged = true; if( m_projectionType == PROJECTION_TYPE::ORTHO ) { // With the orthographic projection, there is just a zoom factor - const float panFactor = m_zoom / 37.5f; // Magic number from CCAMERA::rebuildProjection + const float panFactor = m_zoom / 37.5f; // Magic number from CAMERA::rebuildProjection m_camera_pos.x -= panFactor * ( m_lastPosition.x - aNewMousePosition.x ); m_camera_pos.y -= panFactor * ( aNewMousePosition.y - m_lastPosition.y ); } @@ -116,7 +116,7 @@ void CTRACK_BALL::Pan( const wxPoint& aNewMousePosition ) } -void CTRACK_BALL::Pan( const SFVEC3F& aDeltaOffsetInc ) +void TRACK_BALL::Pan( const SFVEC3F& aDeltaOffsetInc ) { m_parametersChanged = true; @@ -127,40 +127,40 @@ void CTRACK_BALL::Pan( const SFVEC3F& aDeltaOffsetInc ) } -void CTRACK_BALL::Pan_T1( const SFVEC3F& aDeltaOffsetInc ) +void TRACK_BALL::Pan_T1( const SFVEC3F& aDeltaOffsetInc ) { m_camera_pos_t1 = m_camera_pos + aDeltaOffsetInc; } -void CTRACK_BALL::Reset() +void TRACK_BALL::Reset() { - CCAMERA::Reset(); + CAMERA::Reset(); memset( m_quat, 0, sizeof( m_quat ) ); trackball( m_quat, 0.0, 0.0, 0.0, 0.0 ); } -void CTRACK_BALL::Reset_T1() +void TRACK_BALL::Reset_T1() { - CCAMERA::Reset_T1(); + CAMERA::Reset_T1(); memset( m_quat_t1, 0, sizeof( m_quat_t1 ) ); trackball( m_quat_t1, 0.0, 0.0, 0.0, 0.0 ); } -void CTRACK_BALL::SetT0_and_T1_current_T() +void TRACK_BALL::SetT0_and_T1_current_T() { - CCAMERA::SetT0_and_T1_current_T(); + CAMERA::SetT0_and_T1_current_T(); memcpy( m_quat_t0, m_quat, sizeof( m_quat ) ); memcpy( m_quat_t1, m_quat, sizeof( m_quat ) ); } -void CTRACK_BALL::Interpolate( float t ) +void TRACK_BALL::Interpolate( float t ) { wxASSERT( t >= 0.0f ); @@ -195,5 +195,5 @@ void CTRACK_BALL::Interpolate( float t ) m_rotationMatrix = glm::make_mat4( &rotationMatrix[0][0] ); - CCAMERA::Interpolate( t ); + CAMERA::Interpolate( t ); } diff --git a/3d-viewer/3d_rendering/ctrack_ball.h b/3d-viewer/3d_rendering/ctrack_ball.h index b0baff2375..a47b427bde 100644 --- a/3d-viewer/3d_rendering/ctrack_ball.h +++ b/3d-viewer/3d_rendering/ctrack_ball.h @@ -27,18 +27,18 @@ * @brief Declaration for a track ball camera */ -#ifndef CTRACK_BALL_H -#define CTRACK_BALL_H +#ifndef TRACK_BALL_H +#define TRACK_BALL_H #include "ccamera.h" -class CTRACK_BALL : public CCAMERA +class TRACK_BALL : public CAMERA { public: - explicit CTRACK_BALL( float aRangeScale ); + explicit TRACK_BALL( float aRangeScale ); - virtual ~CTRACK_BALL() + virtual ~TRACK_BALL() { } @@ -69,4 +69,4 @@ private: double m_quat_t1[4]; }; -#endif // CTRACK_BALL_H +#endif // TRACK_BALL_H diff --git a/3d-viewer/3d_rendering/test_cases.cpp b/3d-viewer/3d_rendering/test_cases.cpp index b3d56aa8df..275b3a27d9 100644 --- a/3d-viewer/3d_rendering/test_cases.cpp +++ b/3d-viewer/3d_rendering/test_cases.cpp @@ -47,24 +47,11 @@ void Run_3d_viewer_test_cases() s_Run_Test_Cases = true; - // Test CBBOX2D - CBBOX2D bbox2d_A; - CBBOX2D bbox2d_B; + // Test BBOX_2D + BBOX_2D bbox2d_A; + BBOX_2D bbox2d_B; // Test a not initialized box conditions - /* - wxASSERT( bbox2d_A.IsInitialized() == false ); - wxASSERT( bbox2d_A.Area() == 0.0f ); - wxASSERT( bbox2d_A.GetCenter() == SFVEC2F( 0.0f, 0.0f ) ); - wxASSERT( bbox2d_A.GetExtent() == SFVEC2F( 0.0f, 0.0f ) ); - wxASSERT( bbox2d_A.Inside( SFVEC2F( 0.0f, 0.0f ) ) == false ); - wxASSERT( bbox2d_A.Max() == SFVEC2F( 0.0f, 0.0f ) ); - wxASSERT( bbox2d_A.Min() == SFVEC2F( 0.0f, 0.0f ) ); - wxASSERT( bbox2d_A.Intersects( bbox2d_B ) == false ); - wxASSERT( bbox2d_A.Intersects( bbox2d_A ) == false ); - wxASSERT( bbox2d_A.MaxDimension() == 0 ); - wxASSERT( bbox2d_A.Perimeter() == 0.0f ); - */ bbox2d_A.Set( SFVEC2F( 1.0f, -1.0f ), SFVEC2F( -1.0f, 1.0f ) ); wxASSERT( bbox2d_A.IsInitialized() == true ); @@ -74,7 +61,6 @@ void Run_3d_viewer_test_cases() wxASSERT( bbox2d_A.Inside( SFVEC2F( 0.0f, 0.0f ) ) == true ); wxASSERT( bbox2d_A.Max() == SFVEC2F( 1.0f, 1.0f ) ); wxASSERT( bbox2d_A.Min() == SFVEC2F(-1.0f,-1.0f ) ); - //wxASSERT( bbox2d_A.Intersects( bbox2d_B ) == false ); wxASSERT( bbox2d_A.Intersects( bbox2d_A ) == true ); wxASSERT( bbox2d_A.MaxDimension() == 0 ); wxASSERT( bbox2d_A.Perimeter() == 8.0f ); @@ -88,7 +74,6 @@ void Run_3d_viewer_test_cases() wxASSERT( bbox2d_A.Inside( SFVEC2F( 0.0f, 0.0f ) ) == true ); wxASSERT( bbox2d_A.Max() == SFVEC2F( 2.0f, 2.0f ) ); wxASSERT( bbox2d_A.Min() == SFVEC2F(-2.0f,-2.0f ) ); - //wxASSERT( bbox2d_A.Intersects( bbox2d_B ) == false ); wxASSERT( bbox2d_A.Intersects( bbox2d_A ) == true ); wxASSERT( bbox2d_A.MaxDimension() == 0 ); wxASSERT( bbox2d_A.Perimeter() == 16.0f ); @@ -133,8 +118,8 @@ void Run_3d_viewer_test_cases() bbox2d_B.Set( SFVEC2F(-0.5f, -0.5f ), SFVEC2F( 0.5f, 0.5f ) ); wxASSERT( bbox2d_A.Intersects( bbox2d_B ) == true ); - // Test CFILLEDCIRCLE2D - CFILLEDCIRCLE2D filledCircle2d( SFVEC2F( 2.0f, 2.0f ), 1.0f ); + // Test FILLED_CIRCLE_2D + FILLED_CIRCLE_2D filledCircle2d( SFVEC2F( 2.0f, 2.0f ), 1.0f ); wxASSERT( filledCircle2d.IsPointInside( SFVEC2F( 2.0f, 2.0f ) ) == true ); @@ -176,8 +161,8 @@ void Run_3d_viewer_test_cases() wxASSERT( filledCircle2d.Intersects( bbox2d_B ) == true ); - // Test CROUNDSEGMENT2D - CROUNDSEGMENT2D roundSegment2d( SFVEC2F( -1.0f, 0.0f ), SFVEC2F( 1.0f, 0.0f ), 2.0f ); + // Test ROUND_SEGMENT_2D + ROUND_SEGMENT_2D roundSegment2d( SFVEC2F( -1.0f, 0.0f ), SFVEC2F( 1.0f, 0.0f ), 2.0f ); wxASSERT( roundSegment2d.IsPointInside( SFVEC2F( 0.0f, 0.0f ) ) == true ); wxASSERT( roundSegment2d.IsPointInside( SFVEC2F( 1.0f, 0.0f ) ) == true ); @@ -235,53 +220,11 @@ void Run_3d_viewer_test_cases() #if 0 // Test Frustum { - CFRUSTUM frustum; + FRUSTUM frustum; SFVEC3F ori = SFVEC3F( 0.0, 0.0, 0.0 ); float z = 10.0; -/* - const RAY topLeft( ori, glm::normalize( SFVEC3F(+1.0,-1.0, z) - ori ) ); - const RAY topRight( ori, glm::normalize( SFVEC3F(-1.0,-1.0, z) - ori ) ); - const RAY bottomLeft( ori, glm::normalize( SFVEC3F(+1.0,+1.0, z) - ori ) ); - const RAY bottomRight( ori, glm::normalize( SFVEC3F(-1.0,+1.0, z) - ori ) ); -*/ -/* - const RAY topLeft( ori, glm::normalize( SFVEC3F(+1.0,+1.0, z) - ori ) ); - const RAY topRight( ori, glm::normalize( SFVEC3F(-1.0,+1.0, z) - ori ) ); - const RAY bottomLeft( ori, glm::normalize( SFVEC3F(+1.0,-1.0, z) - ori ) ); - const RAY bottomRight( ori, glm::normalize( SFVEC3F(-1.0,-1.0, z) - ori ) ); -*/ -/* - const RAY topLeft( ori, glm::normalize( SFVEC3F(-1.0,-1.0, z) - ori ) ); - const RAY topRight( ori, glm::normalize( SFVEC3F(+1.0,-1.0, z) - ori ) ); - const RAY bottomLeft( ori, glm::normalize( SFVEC3F(-1.0,+1.0, z) - ori ) ); - const RAY bottomRight( ori, glm::normalize( SFVEC3F(+1.0,+1.0, z) - ori ) ); -*/ -/* - const RAY topLeft( ori, glm::normalize( SFVEC3F(-1.0,+1.0, z) - ori ) ); - const RAY topRight( ori, glm::normalize( SFVEC3F(+1.0,+1.0, z) - ori ) ); - const RAY bottomLeft( ori, glm::normalize( SFVEC3F(-1.0,-1.0, z) - ori ) ); - const RAY bottomRight( ori, glm::normalize( SFVEC3F(+1.0,-1.0, z) - ori ) ); -*/ -/* - const RAY topLeft( ori, glm::normalize( ori - SFVEC3F(+1.0,-1.0, z) ) ); - const RAY topRight( ori, glm::normalize( ori - SFVEC3F(-1.0,-1.0, z) ) ); - const RAY bottomLeft( ori, glm::normalize( ori - SFVEC3F(+1.0,+1.0, z) ) ); - const RAY bottomRight( ori, glm::normalize( ori - SFVEC3F(-1.0,+1.0, z) ) ); -*/ -/* - const RAY topLeft( ori, glm::normalize( ori - SFVEC3F(-1.0,-1.0, z) ) ); - const RAY topRight( ori, glm::normalize( ori - SFVEC3F(+1.0,-1.0, z) ) ); - const RAY bottomLeft( ori, glm::normalize( ori - SFVEC3F(-1.0,+1.0, z) ) ); - const RAY bottomRight( ori, glm::normalize( ori - SFVEC3F(+1.0,+1.0, z) ) ); -*/ -/* - const RAY topLeft( ori, glm::normalize( ori - SFVEC3F(-1.0,+1.0, z) ) ); - const RAY topRight( ori, glm::normalize( ori - SFVEC3F(+1.0,+1.0, z) ) ); - const RAY bottomLeft( ori, glm::normalize( ori - SFVEC3F(-1.0,-1.0, z) ) ); - const RAY bottomRight( ori, glm::normalize( ori - SFVEC3F(+1.0,-1.0, z) ) ); -*/ const RAY topLeft( ori, glm::normalize( ori - SFVEC3F(+1.0,+1.0, z) ) ); const RAY topRight( ori, glm::normalize( ori - SFVEC3F(-1.0,+1.0, z) ) ); @@ -290,7 +233,7 @@ void Run_3d_viewer_test_cases() frustum.GenerateFrustum( topLeft, topRight, bottomLeft, bottomRight ); - CBBOX bbox3d; + BBOX_3D bbox3d; bbox3d.Set( SFVEC3F( -1.0f, -1.0f, z ), SFVEC3F( +1.0f, +1.0f, z + 1.0f ) ); wxASSERT( frustum.Intersect( bbox3d ) == true ); @@ -323,7 +266,7 @@ void Run_3d_viewer_test_cases() wxASSERT( frustum.Intersect( bbox3d ) == false ); } { - CFRUSTUM frustum; + FRUSTUM frustum; float z = 10.0; @@ -336,7 +279,7 @@ void Run_3d_viewer_test_cases() frustum.GenerateFrustum( topLeft, topRight, bottomLeft, bottomRight ); - CBBOX bbox3d; + BBOX_3D bbox3d; bbox3d.Set( SFVEC3F( -1.0f, -1.0f, -z), SFVEC3F( +1.0f, +1.0f, -z + 1.0f ) ); wxASSERT( frustum.Intersect( bbox3d ) == true ); diff --git a/3d-viewer/3d_viewer/eda_3d_viewer.cpp b/3d-viewer/3d_viewer/eda_3d_viewer.cpp index d7c38a55c5..9d878111de 100644 --- a/3d-viewer/3d_viewer/eda_3d_viewer.cpp +++ b/3d-viewer/3d_viewer/eda_3d_viewer.cpp @@ -107,7 +107,7 @@ EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway, PCB_BASE_FRAME *aParent, const wxSt SetStatusWidths( arrayDim( status_dims ), status_dims ); m_canvas = new EDA_3D_CANVAS( this, - COGL_ATT_LIST::GetAttributesList( m_boardAdapter.AntiAliasingGet() ), + OGL_ATT_LIST::GetAttributesList( m_boardAdapter.AntiAliasingGet() ), aParent->GetBoard(), m_boardAdapter, m_currentCamera, Prj().Get3DCacheManager() ); @@ -314,7 +314,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event ) wxLogTrace( m_logTrace, "EDA_3D_VIEWER::Process_Special_Functions id %d isChecked %d", id, isChecked ); - if( m_canvas == NULL ) + if( m_canvas == nullptr ) return; switch( id ) diff --git a/3d-viewer/3d_viewer/eda_3d_viewer.h b/3d-viewer/3d_viewer/eda_3d_viewer.h index 19d39a108a..ad18a2048d 100644 --- a/3d-viewer/3d_viewer/eda_3d_viewer.h +++ b/3d-viewer/3d_viewer/eda_3d_viewer.h @@ -103,7 +103,7 @@ public: void Redraw(); BOARD_ADAPTER& GetAdapter() override { return m_boardAdapter; } - CCAMERA& GetCurrentCamera() override { return m_currentCamera; } + CAMERA& GetCurrentCamera() override { return m_currentCamera; } EDA_3D_CANVAS* GetCanvas() { return m_canvas; } @@ -218,8 +218,8 @@ private: ACTION_TOOLBAR* m_mainToolBar; EDA_3D_CANVAS* m_canvas; BOARD_ADAPTER m_boardAdapter; - CCAMERA& m_currentCamera; - CTRACK_BALL m_trackBallCamera; + CAMERA& m_currentCamera; + TRACK_BALL m_trackBallCamera; bool m_disable_ray_tracing; diff --git a/3d-viewer/3d_viewer/tools/3d_controller.h b/3d-viewer/3d_viewer/tools/3d_controller.h index e75bc202f5..c36e930d12 100644 --- a/3d-viewer/3d_viewer/tools/3d_controller.h +++ b/3d-viewer/3d_viewer/tools/3d_controller.h @@ -105,7 +105,7 @@ private: private: EDA_3D_CANVAS* m_canvas; BOARD_ADAPTER* m_boardAdapter; - CCAMERA* m_camera; + CAMERA* m_camera; double m_rotationIncrement; ///< Rotation increment for the rotate actions (degrees) }; diff --git a/3d-viewer/common_ogl/cogl_att_list.cpp b/3d-viewer/common_ogl/cogl_att_list.cpp index db48a41621..1b9cf726f9 100644 --- a/3d-viewer/common_ogl/cogl_att_list.cpp +++ b/3d-viewer/common_ogl/cogl_att_list.cpp @@ -32,18 +32,8 @@ #include #include -/** - * Attributes list to be passed to a wxGLCanvas creation. - * - * This array should be 2*n+1 - * Sadly wxwidgets / glx < 13 allowed - * a thing named "boolean attributes" that don't take a value. - * (See src/unix/glx11.cpp -> wxGLCanvasX11::ConvertWXAttrsToGL() ). - * To avoid problems due to this, just specify those attributes twice. - * Only WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_STEREO are such boolean - * attributes. - */ -const int COGL_ATT_LIST::m_openGL_attributes_list[] = { + +const int OGL_ATT_LIST::m_openGL_attributes_list[] = { // Boolean attributes (using itself at padding): @@ -76,16 +66,15 @@ const int COGL_ATT_LIST::m_openGL_attributes_list[] = { #define ATT_WX_GL_SAMPLE_BUFFERS_OFFSET 10 #define ATT_WX_GL_SAMPLE_BUFFERS_DATA 11 -int COGL_ATT_LIST::m_openGL_attributes_list_to_use[ - arrayDim( COGL_ATT_LIST::m_openGL_attributes_list ) ] = { 0 }; +int OGL_ATT_LIST::m_openGL_attributes_list_to_use[ + arrayDim( OGL_ATT_LIST::m_openGL_attributes_list ) ] = { 0 }; -const int *COGL_ATT_LIST::GetAttributesList( ANTIALIASING_MODE aAntiAliasingMode ) +const int* OGL_ATT_LIST::GetAttributesList( ANTIALIASING_MODE aAntiAliasingMode ) { wxASSERT( aAntiAliasingMode <= ANTIALIASING_MODE::AA_8X ); - memcpy( m_openGL_attributes_list_to_use, - m_openGL_attributes_list, + memcpy( m_openGL_attributes_list_to_use, m_openGL_attributes_list, sizeof( m_openGL_attributes_list_to_use ) ); if( aAntiAliasingMode > ANTIALIASING_MODE::AA_NONE ) diff --git a/3d-viewer/common_ogl/cogl_att_list.h b/3d-viewer/common_ogl/cogl_att_list.h index bb76e701e4..3426f37c6b 100644 --- a/3d-viewer/common_ogl/cogl_att_list.h +++ b/3d-viewer/common_ogl/cogl_att_list.h @@ -27,8 +27,8 @@ * @brief Declaration of the cogl_att_list class */ -#ifndef _COGL_ATT_LIST_H -#define _COGL_ATT_LIST_H +#ifndef _OGL_ATT_LIST_H +#define _OGL_ATT_LIST_H /// Anti-aliasing options enum class ANTIALIASING_MODE @@ -40,20 +40,20 @@ enum class ANTIALIASING_MODE }; /** - * Class COGL_ATT_LIST - * Helper class to create an attribute list + * Helper class to create an attribute list. */ -class COGL_ATT_LIST +class OGL_ATT_LIST { public: /** - * Get a list of attributes to pass to wxGLCanvas + * Get a list of attributes to pass to wxGLCanvas. + * * @param aAntiAliasingMode = 0 - disabled; try to initialize (if is supported) the * list with anti aliasing capabilities * @return a list of options to be passed in the creation of a EDA_3D_CANVAS class */ - static const int *GetAttributesList( ANTIALIASING_MODE aAntiAliasingMode ); + static const int* GetAttributesList( ANTIALIASING_MODE aAntiAliasingMode ); private: /** @@ -70,9 +70,9 @@ private: static const int m_openGL_attributes_list[]; /** - * Attributes list that was (eventualy) changed and are passed to creation + * Attributes list that was (eventually) changed and are passed to creation. */ static int m_openGL_attributes_list_to_use[]; }; -#endif // _COGL_ATT_LIST_H +#endif // _OGL_ATT_LIST_H diff --git a/3d-viewer/common_ogl/ogl_utils.cpp b/3d-viewer/common_ogl/ogl_utils.cpp index c8a79f1a6e..1f336e847c 100644 --- a/3d-viewer/common_ogl/ogl_utils.cpp +++ b/3d-viewer/common_ogl/ogl_utils.cpp @@ -76,7 +76,7 @@ void OGL_GetScreenshot( wxImage& aDstImage ) } -GLuint OGL_LoadTexture( const CIMAGE& aImage ) +GLuint OGL_LoadTexture( const IMAGE& aImage ) { unsigned char* rgbaBuffer = (unsigned char*) malloc( aImage.GetWidth() * aImage.GetHeight() * 4 ); diff --git a/3d-viewer/common_ogl/ogl_utils.h b/3d-viewer/common_ogl/ogl_utils.h index 1395042419..1f403cc816 100644 --- a/3d-viewer/common_ogl/ogl_utils.h +++ b/3d-viewer/common_ogl/ogl_utils.h @@ -60,7 +60,7 @@ void OGL_SetDiffuseOnlyMaterial( const SFVEC3F& aMaterialDiffuse, float aOpacity * @param aImage a image to generate the texture from. * @return the OpenGL texture index created. */ -GLuint OGL_LoadTexture( const CIMAGE& aImage ); +GLuint OGL_LoadTexture( const IMAGE& aImage ); /** * Get the pixel data of current OpenGL image.