← Back to team overview

kicad-developers team mailing list archive

Re: Push-and-shove router issues with blind vias

 

See attached patch. Should fully support both blind/buried and micro
vias.

Are you saying you're going to add support for the "insert blind via"
and "insert microvia" keys in the interactive router? That would be
awesome :D

Also GAL currently doesn't seem to make any visual distinction between
standard, micro, and blind vias. Maybe this can be fixed too?

On Tue, 2014-07-22 at 20:17 +0200, Tomasz Wlostowski wrote:
> On 22.07.2014 20:12, Andrew Zonenberg wrote:
> > The current code in the repo would silently convert all vias to standard
> > through-hole vias, my code makes it behave properly for blind/buried
> > vias. With some additional modifications it could support microvias too
> > but I haven't implemented that.
> >
> 
> Hi Andrew,
> 
> You could add the type of the via taken from Kicad's model to PNS_VIA 
> and update syncVia/commitRouting accordingly. I'll do the menus/shortcuts.
> 
> Tom.

-- 
Andrew Zonenberg
PhD student, security group
Computer Science Department
Rensselaer Polytechnic Institute
http://colossus.cs.rpi.edu/~azonenberg/
=== modified file 'pcbnew/router/pns_router.cpp'
--- pcbnew/router/pns_router.cpp	2014-07-09 14:57:01 +0000
+++ pcbnew/router/pns_router.cpp	2014-07-22 18:24:03 +0000
@@ -227,12 +227,16 @@
 
 PNS_ITEM* PNS_ROUTER::syncVia( VIA* aVia )
 {
+	LAYER_ID top, bottom;
+	aVia->LayerPair(&top, &bottom);
+
     PNS_VIA* v = new PNS_VIA(
             aVia->GetPosition(),
-            PNS_LAYERSET( 0, MAX_CU_LAYERS - 1 ),
+            PNS_LAYERSET( top, bottom),
             aVia->GetWidth(),
             aVia->GetDrillValue(),
-            aVia->GetNetCode() );
+            aVia->GetNetCode(),
+            aVia->GetViaType() );
 
     v->SetParent( aVia );
 
@@ -759,8 +763,10 @@
             via_board->SetWidth( via->Diameter() );
             via_board->SetDrill( via->Drill() );
             via_board->SetNetCode( via->Net() );
-            via_board->SetLayerPair( ToLAYER_ID( m_settings.GetLayerTop() ),
-                                     ToLAYER_ID( m_settings.GetLayerBottom() ) );
+            via_board->SetLayerPair( ToLAYER_ID( via->Layers().Start() ),
+                                     ToLAYER_ID( via->Layers().End() ) );
+            via_board->SetViaType(via->ViaType());
+
             newBI = via_board;
             break;
         }

=== modified file 'pcbnew/router/pns_via.cpp'
--- pcbnew/router/pns_via.cpp	2014-05-16 11:37:31 +0000
+++ pcbnew/router/pns_via.cpp	2014-07-22 18:26:28 +0000
@@ -91,6 +91,7 @@
     v->m_shape = SHAPE_CIRCLE( m_pos, m_diameter / 2 );
     v->m_rank = m_rank;
     v->m_marker = m_marker;
+    v->m_viaType = m_viaType;
 
     return v;
 }

=== modified file 'pcbnew/router/pns_via.h'
--- pcbnew/router/pns_via.h	2014-05-29 11:48:14 +0000
+++ pcbnew/router/pns_via.h	2014-07-22 18:22:04 +0000
@@ -24,6 +24,8 @@
 #include <geometry/shape_line_chain.h>
 #include <geometry/shape_circle.h>
 
+#include "../class_track.h"
+
 #include "pns_item.h"
 
 class PNS_NODE;
@@ -36,7 +38,7 @@
     {}
 
     PNS_VIA( const VECTOR2I& aPos, const PNS_LAYERSET& aLayers,
-             int aDiameter, int aDrill, int aNet = -1 ) :
+             int aDiameter, int aDrill, int aNet = -1, VIATYPE_T aViaType = VIA_THROUGH ) :
         PNS_ITEM( VIA )
     {
         SetNet( aNet );
@@ -45,6 +47,7 @@
         m_diameter = aDiameter;
         m_drill = aDrill;
         m_shape = SHAPE_CIRCLE( aPos, aDiameter / 2 );
+        m_viaType = aViaType;
     }
 
 
@@ -60,6 +63,7 @@
         m_rank = aB.m_rank;
         m_owner = aB.m_owner;
         m_drill = aB.m_drill;
+        m_viaType = aB.m_viaType;
     }
 
     const VECTOR2I& Pos() const
@@ -83,6 +87,16 @@
         m_diameter = aDiameter;
         m_shape.SetRadius( m_diameter / 2 );
     }
+    
+    VIATYPE_T ViaType() const
+    {
+		return m_viaType;
+	}
+	
+	void SetViaType(VIATYPE_T aViaType)
+	{
+		m_viaType = aViaType;
+	}
 
     int Drill() const
     {
@@ -124,6 +138,7 @@
     int m_drill;
     VECTOR2I m_pos;
     SHAPE_CIRCLE m_shape;
+    VIATYPE_T m_viaType;
 };
 
 #endif

Attachment: signature.asc
Description: This is a digitally signed message part


Follow ups

References