Hier mal ein beispiel Openscad4Nerf (
https://www.blasted.de/t2606/)
(Falls es eine gescheitere methode giebt code zu posten / anzuhaengen ... da wuerden noch paar sachen rumliegen die ev nützlich waeren)
openscad---------------------------------------------------------
// Tactical Rail
//---------------------------------------------------------------------
//---------------------------------------------------------------------
//Defs
//$fn=100;
LaengeS=6;
//Pin Block
PinObenBreiteuA=21.209;
PinMedAbstand=2.7432;
PinMedBreite=18.9992;
PinSockelH=9.3218;
PinSockelB=15.6718;
//Pin Recoil fins
PinCoilCent2Cent=10.0076;
PinCoillB=5.232399999999999;
PinCoilT=2.9972;
//Srews down
Sc1KopfD=4;
Sc1KopfH=4;
Sc1GewD=2;
//Nerf Tact Rail
NerfOverAllB=19;
NerfBaseB=12.5;
NerfippeH=3;
NerfWand=5;
NerfSide=2;
NerfHalterL=12;
NerfAusenCubeB=6;
NerfInnenCubeB=4;
//Srews Nerf
Sc2KopfD=5.5;
Sc2KopfH=3;
Sc2GewD=3;
Sc2TotAussenD=8;
Sc2MutterR=3;
Sc2MutterH=3;
//Calc
Laenge=LaengeS*PinCoilCent2Cent;
PinRestU=(PinObenBreiteuA-PinMedBreite)/2;
PinEckKanteL=sqrt(2*pow(2*PinRestU,2));
PinKantCubeZentOffset=PinObenBreiteuA/2-2*PinRestU;
NerfCutOutB=sqrt(2*pow(NerfOverAllB/2,2));
NerfSideCubeB=sqrt(2*pow(Sc2KopfD,2));
//---------------------------------------------------------------------
//Main
//PinRailFull(ls=6);
NerfRail3(ls=3);
//translate(v = [-20,0,Sc2KopfD]) NerfRail3(ls=3);
//translate(v = [20,0,Sc2KopfD]) NerfRail3(ls=3);
//translate(v = [-20,-30,Sc2KopfD]) NerfRail3(ls=3);
//translate(v = [20,-30,Sc2KopfD]) NerfRail3(ls=3);
//translate(v = [-20,30,Sc2KopfD]) NerfRail3(ls=3);
//translate(v = [20,30,Sc2KopfD]) NerfRail3(ls=3);
//---------------------------------------------------------------------
//Module
module NerfRail3(ls=LaengeS)
{
l=ls*PinCoilCent2Cent;
translate(v = [0,0,])
difference()
{
union()
{
difference()
{
union()
{
translate(v = [0,0,Sc2KopfD]) PinRailFull(ls=ls);
translate(v = [0,-NerfOverAllB/2,0])
rotate ([90,22.5,90])
cylinder(r=NerfAusenCubeB/2,h=l,center=true,$fa=45,$fs=0.01);
translate(v = [0,NerfOverAllB/2,0])
rotate ([90,22.5,90])
cylinder(r=NerfAusenCubeB/2,h=l,center=true,$fa=45,$fs=0.01);
translate(v = [0,0,NerfInnenCubeB/2+Sc2KopfD/2])
rotate ([0,0,0])
cube(size = [l,NerfOverAllB,Sc2KopfD], center = true);
}
/*
translate(v = [0,-NerfOverAllB/2+NerfInnenCubeB/2,0])
rotate ([90,22.5,90])
cylinder(r=NerfInnenCubeB/2,h=1.2*l,center=true,$fa=45,$fs=0.01);
translate(v = [0,NerfOverAllB/2-NerfInnenCubeB/2,0])
rotate ([90,22.5,90])
cylinder(r=NerfInnenCubeB/2,h=1.2*l,center=true,$fa=45,$fs=0.01);
*/
translate(v = [0,NerfOverAllB/2,Sc2KopfD+NerfInnenCubeB/6])
rotate ([45,0,0])
cube(size = [1.2*l,Sc2KopfD,Sc2KopfD], center = true);
translate(v = [0,-NerfOverAllB/2,Sc2KopfD+NerfInnenCubeB/6])
rotate ([45,0,0])
cube(size = [1.2*l,Sc2KopfD,Sc2KopfD], center = true);
}
translate(v = [0,0,NerfAusenCubeB/2+Sc2GewD/2])
rotate ([90,0,0])
cylinder(r=Sc2TotAussenD/2,h=NerfOverAllB+NerfAusenCubeB/2,center=true);
}
translate(v = [0,0,NerfAusenCubeB/2+Sc2GewD/2])
rotate ([90,0,0])
cylinder(r=Sc2GewD/2,h=l,center=true,$fn=100);
translate(v = [0,0,NerfInnenCubeB/6])
rotate ([45,0,0])
cube(size = [1.2*l,NerfCutOutB,NerfCutOutB], center = true);
//mutter
translate(v = [0,NerfOverAllB/2+Sc2MutterH,NerfAusenCubeB/2+Sc2GewD/2])
rotate ([90,0,0])
cylinder(r=Sc2MutterR,h=2*Sc2MutterH,center=true,$fa=60,$fs=0.01);
//Kopf
translate(v = [0,-NerfOverAllB/2-Sc2MutterH,NerfAusenCubeB/2+Sc2GewD/2])
rotate ([90,0,0])
cylinder(r=Sc2KopfD/2,h=2*Sc2MutterH,center=true,$fn=100);
}
}
module PinRailFull(ls=LaengeS)
{
l=ls*PinCoilCent2Cent;
translate(v = [0,0,-PinSockelH/2+2*PinRestU+PinSockelH])
difference()
{
union()
{
translate(v = [0,-PinKantCubeZentOffset,0])
rotate ([45,0,0])
cube(size = [l,PinEckKanteL,PinEckKanteL], center = true);
translate(v = [0,PinKantCubeZentOffset,0])
rotate ([45,0,0])
cube(size = [l,PinEckKanteL,PinEckKanteL], center = true);
translate(v = [0,0,0])
rotate ([0,0,0])
cube(size = [l,2*PinKantCubeZentOffset,4*PinRestU], center = true);
translate(v = [0,0,-PinSockelH/2+2*PinRestU])
rotate ([0,0,0])
cube(size = [l,PinSockelB,PinSockelH], center = true);
//fix unten
translate(v = [0,PinKantCubeZentOffset-PinRestU,-1*PinRestU])
rotate ([45,0,0])
cube(size = [l,PinEckKanteL,PinEckKanteL], center = true);
translate(v = [0,-PinKantCubeZentOffset+PinRestU,-1*PinRestU])
rotate ([45,0,0])
cube(size = [l,PinEckKanteL,PinEckKanteL], center = true);
}
for(i = [-l/2+PinCoilCent2Cent/2: PinCoilCent2Cent : Laenge/2])
{
translate(v = [i,0,-PinCoilT/2+2*PinRestU])
cube(size = [PinCoillB,PinObenBreiteuA,PinCoilT], center = true);
//translate(v = [i,0,2*PinRestU])
// rotate ([0,180,0])
// Screw1();
}
}
}
module Screw1()
{
union()
{
translate(v = [0,0,0]) cylinder(r=Sc1KopfD/2,h=PinCoilT,center=false);
translate(v = [0,0,PinCoilT]) cylinder(r=Sc1KopfD/2,h=Sc1KopfH,center=false);
translate(v = [0,0,PinCoilT+Sc1KopfH]) cylinder(r1=Sc1KopfD/2,r2=Sc1GewD/2,h=(Sc1KopfD-Sc1GewD)/2,center=false);
translate(v = [0,0,PinCoilT+Sc1KopfH+(Sc1KopfD-Sc1GewD)/2]) cylinder(r=Sc1GewD/2,h=PinSockelH,center=false);
}
}