+
+ translate([gpsrightwardoffset,-gpsrearwardoffset,0])
+ rotate([0,0,90+gpsazimuth])
+ translate([nestledoveclipw/2,0,DoveClip_depth()-0.5])
+ rotate([0,-90,0])
+ DoveClipPairSane(count=3, h=nestledoveclipw);
+}
+
+module NestleCubeBaseTest(){ ////toplevel
+ intersection(){
+ translate([0,0,nestleh]) NestleCube();
+ translate([-100,-100,0]) cube([200,200,nestlebevel*5]);
+ }
+ cube([5,5,10]);
+}
+
+module NestleCubeCeilTest(){ ////toplevel
+ intersection(){
+ translate([0,0,3]) NestleCube();
+ translate([-100,-100,0]) cube([200,200,5.5]);
+ }
+ cube([5,5,10]);
+}
+
+module NestleCubePin(){ ////toplevel
+ DoveClipPin(nestledoveclipw*0.4);
+}
+
+module HolderSideL(){ ////toplevel
+ minz = -(bezelw - holderbezelmore) - holderbackt;
+ holdert = holder_outert + holderwallt*2;
+ cylr = 0.5*sqrt(holderdcw*holderdcw + holderdoveclipl*holderdoveclipl);
+ difference(){
+ translate([-holderh,
+ -holderwallt,
+ minz]) {
+ cube([holderh + holderhgap + cylr,
+ holdert,
+ -minz]);
+ translate([holderh + holderhgap + cylr, holdert/2, 0]) {
+ cylinder(r=cylr, h=-minz);
+ rotate([0,0,gpselevation])
+ translate([0, -holderdoveclipl/2, -minz + DoveClip_depth()])
+ rotate([0,-90,-90])
+ DoveClipPairSane(count=holderdccount, h=holderdoveclipl);
+ }
+ }
+ translate([-holderh-1,
+ 0,
+ minz + holderbackt])
+ cube([holderh+1,
+ holder_outert,
+ bezelw]);
+ }
+}
+
+module HolderSideR(){ ////toplevel
+ mirror([0,1,0]) HolderSideL();
+}
+
+module ChassisBar(){ ////toplevel
+ dist = holder_outerw - 2*((bezelw - holderbezelmore) + DoveClip_depth());
+ cliph = holderdcw;
+ for (mir=[0,1]) {
+ mirror([mir,0,0]) {
+ translate([dist/2, cliph/2, 0])
+ DoveClipPairSane(h=holderdoveclipl, count=holderdccount);
+ translate([-1, 0, 0])
+ cube([dist/2 - DoveClip_depth() + 1.1, chassish, chassist]);
+ }
+ }
+ translate([-gpsrightwardoffsetonbar, -DoveClip_depth(), 0])
+ rotate([0,0,-90])
+ DoveClipPairSane(h=nestledoveclipw, count=3,
+ baseextend=chassist/2);
+}
+
+module HolderSidePin(){ ////toplevel
+ DoveClipPin(holderdoveclipl*0.5);
+}
+
+module Pins(){ ///toplevel
+ for (i=[1:4*holderdccount]) {
+ translate([i*10, 0, 0]) HolderSidePin();
+ }
+ for (i=[1:6]) {
+ translate([i*10, 20, 0]) NestleCubePin();
+ }