From f3f9730f2cac4131ab6fae3127027efed3021129 Mon Sep 17 00:00:00 2001
From: Jeff Young <jeff@rokeby.ie>
Date: Thu, 13 Mar 2025 14:04:15 +0000
Subject: [PATCH] Render tables & their borders to 3D view.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/19981
---
 3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp | 13 ++++++++++---
 3d-viewer/3d_canvas/create_layer_items.cpp         |  2 +-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp b/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp
index 6d642fd438..5f8748b034 100644
--- a/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp
+++ b/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp
@@ -794,11 +794,18 @@ void BOARD_ADAPTER::addShape( const PCB_TEXTBOX* aTextBox, CONTAINER_2D_BASE* aC
 void BOARD_ADAPTER::addTable( const PCB_TABLE* aTable, CONTAINER_2D_BASE* aContainer,
                               const BOARD_ITEM* aOwner )
 {
-    // JEY TODO: tables
-    // add borders
+    aTable->DrawBorders(
+            [&]( const VECTOR2I& ptA, const VECTOR2I& ptB, const STROKE_PARAMS& stroke )
+            {
+                addROUND_SEGMENT_2D( aContainer, TO_SFVEC2F( ptA ), TO_SFVEC2F( ptB ),
+                                     TO_3DU( stroke.GetWidth() ), *aOwner );
+            } );
 
     for( PCB_TABLECELL* cell : aTable->GetCells() )
-        addText( cell, aContainer, aOwner );
+    {
+        if( cell->GetColSpan() > 0 && cell->GetRowSpan() > 0 )
+            addText( cell, aContainer, aOwner );
+    }
 }
 
 
diff --git a/3d-viewer/3d_canvas/create_layer_items.cpp b/3d-viewer/3d_canvas/create_layer_items.cpp
index 3d3e9d6d08..9fcacd2f28 100644
--- a/3d-viewer/3d_canvas/create_layer_items.cpp
+++ b/3d-viewer/3d_canvas/create_layer_items.cpp
@@ -940,7 +940,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
                     break;
 
                 case PCB_TABLE_T:
-                    // JEY TODO: tables
+                    addTable( static_cast<PCB_TABLE*>( item ), layerContainer, item );
                     break;
 
                 case PCB_DIM_ALIGNED_T: