Objects: Difference between revisions
From HacDC Wiki
No edit summary |
(test objects) |
||
Line 1: | Line 1: | ||
<nowiki> | <nowiki> | ||
This is a collection of ImplicitCAD files for an assortment of objects. Enjoy! | This is a collection of ImplicitCAD files for an assortment of objects. Enjoy! (Note that versions fudged for HacDC's miscalibrated Rostock & compiled .stl files are available for many of these at HacDC in the ImplicitCAD/radioshack_box directory on the renderadmin computer.) | ||
box1-box4 are boxes that fit the parts drawers that were used at Radio Shack (sort of; there is so much random variation in the drawers that the boxes are sometimes too loose & sometimes too tight): | |||
module box1(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin) /*type 32*/ | module box1(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin) /*type 32*/ | ||
Line 48: | Line 50: | ||
box2(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin); | box2(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin); | ||
module box3(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin) /*type 32*/ | |||
{difference()/*remove inside & notch*/ {linear_extrude(H)/*make solid*/ polygon/*outside*/([(0,SW+PB+PL*cos/sin),(PL,SW+PB),(PL,SW/2+TT/2),(0,SW/2+TT/2),(0,SW/2-TT/2),(PL,SW/2-TT/2),(PL+SW/2-TT/2,0),(W-PL-SW/2+TT/2,0),(W-PL,SW/2-TT/2),(W,SW/2-TT/2),(W,SW/2+TT/2),(W-PL,SW/2+TT/2),(W-PL,SW+PB),(W,SW+PB+PL*cos/sin)/*back*/,(W,UL-PB-PL*cos/sin),(W-PL,UL-PB),(W-PL,UL+SW+PB),(W,UL+SW+PB+PL*cos/sin)/*right1*/,(W,2*UL-PB-PL*cos/sin),(W-PL,2*UL-PB),(W-PL,2*UL+SW+PB),(W,2*UL+SW+PB+PL*cos/sin)/*right2*/,(W,3*UL-PB-PL*cos/sin),(W-PL-PB*sin/cos+G*sin/cos,3*UL-G),(PL+PB*sin/cos-G*sin/cos,3*UL-G),(0,3*UL-PB-PL*cos/sin)/*front*/,(0,2*UL+SW+PB+PL*cos/sin),(PL,2*UL+SW+PB),(PL,2*UL-PB),(0,2*UL-PB-PL*cos/sin)/*left2*/,(0,UL+SW+PB+PL*cos/sin),(PL,UL+SW+PB),(PL,UL-PB),(0,UL-PB-PL*cos/sin)/*left1*/]); | |||
translate(0,0,BT)/*move up to leave bottom*/ linear_extrude(H)/*make solid*/ difference()/*round off inside corners*/ {polygon/*inside*/([(WT,SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,SW+PB+WT*sin),(PL+WT,SW+PB),(PL+WT,WT),(W-PL-WT,WT),(W-PL-WT,SW+PB),(W-PL-WT*cos,SW+PB+WT*sin),(W-WT,SW+PB+WT/sin+(PL-WT)*cos/sin)/*back*/,(W-WT,UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,UL-PB-WT*sin),(W-PL-WT,UL-PB),(W-PL-WT,UL+SW+PB),(W-PL-WT*cos,UL+SW+PB+WT*sin),(W-WT,UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right1*/,(W-WT,2*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,2*UL-PB-WT*sin),(W-PL-WT,2*UL-PB),(W-PL-WT,2*UL+SW+PB),(W-PL-WT*cos,2*UL+SW+PB+WT*sin),(W-WT,2*UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right2*/,(W-WT,3*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT/cos-(PB-WT-G)*sin/cos,3*UL-WT-G),(PL+WT/cos+(PB-WT-G)*sin/cos,3*UL-WT-G),(WT,3*UL-PB-WT/sin-(PL-WT)*cos/sin)/*front*/,(WT,2*UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,2*UL+SW+PB+WT*sin),(PL+WT,2*UL+SW+PB),(PL+WT,2*UL-PB),(PL+WT*cos,2*UL-PB-WT*sin),(WT,2*UL-PB-WT/sin-(PL-WT)*cos/sin)/*left2*/,(WT,UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,UL+SW+PB+WT*sin),(PL+WT,UL+SW+PB),(PL+WT,UL-PB),(PL+WT*cos,UL-PB-WT*sin),(WT,UL-PB-WT/sin-(PL-WT)*cos/sin)/*left1*/]); | |||
translate(PL,SW+PB)/*back left corner*/ circle(r=WT); | |||
translate(W-PL,SW+PB)/*right*/ circle(r=WT); | |||
translate(W-PL,UL-PB)/*right1 rear*/ circle(r=WT); | |||
translate(W-PL,UL+SW+PB)/*front*/ circle(r=WT); | |||
translate(PL,UL-PB)/*left1 rear*/ circle(r=WT); | |||
translate(PL,UL+SW+PB)/*front*/ circle(r=WT); | |||
translate(W-PL,2*UL-PB)/*right2 rear*/ circle(r=WT); | |||
translate(W-PL,2*UL+SW+PB)/*front*/ circle(r=WT); | |||
translate(PL,2*UL-PB)/*left2 rear*/ circle(r=WT); | |||
translate(PL,2*UL+SW+PB)/*front*/ circle(r=WT); } | |||
translate (PL+2*WT,3*UL-WT-G-1,FH)/*move to front*/ cube/*notch*/(W-2*PL-4*WT,WT+2,H); } } | |||
WT=2.5; /*wall thickness*/ | |||
BT=WT; /*bottom thickness*/ | |||
FH=48; /*front height*/ | |||
H=68; /*height*/ | |||
PL=2.7; /*prong length*/ | |||
PB=1.1; /*prong bulge*/ | |||
SW=2.65; /*slot width*/ | |||
TT=2.05; /*tab thickness*/ | |||
UL=26.8; /*unit length*/ | |||
W=127.8; /*width*/ | |||
G=0.2; /*gap between boxes*/ | |||
cos=0.6428; /*angle 50*/ | |||
sin=0.766; | |||
box3(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin); | |||
module box4(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin) /*type 32*/ | |||
{difference()/*remove inside & notch*/ {linear_extrude(H)/*make solid*/ polygon/*outside*/([(0,SW+PB+PL*cos/sin),(PL,SW+PB),(PL,SW/2+TT/2),(0,SW/2+TT/2),(0,SW/2-TT/2),(PL,SW/2-TT/2),(PL+SW/2-TT/2,0),(W-PL-SW/2+TT/2,0),(W-PL,SW/2-TT/2),(W,SW/2-TT/2),(W,SW/2+TT/2),(W-PL,SW/2+TT/2),(W-PL,SW+PB),(W,SW+PB+PL*cos/sin)/*back*/,(W,UL-PB-PL*cos/sin),(W-PL,UL-PB),(W-PL,UL+SW+PB),(W,UL+SW+PB+PL*cos/sin)/*right1*/,(W,2*UL-PB-PL*cos/sin),(W-PL,2*UL-PB),(W-PL,2*UL+SW+PB),(W,2*UL+SW+PB+PL*cos/sin)/*right2*/,(W,3*UL-PB-PL*cos/sin),(W-PL,3*UL-PB),(W-PL,3*UL+SW+PB),(W,3*UL+SW+PB+PL*cos/sin)/*right3*/,(W,4*UL-PB-PL*cos/sin),(W-PL-PB*sin/cos+G*sin/cos,4*UL-G),(PL+PB*sin/cos-G*sin/cos,4*UL-G),(0,4*UL-PB-PL*cos/sin)/*front*/,(0,3*UL+SW+PB+PL*cos/sin),(PL,3*UL+SW+PB),(PL,3*UL-PB),(0,3*UL-PB-PL*cos/sin)/*left3*/,(0,2*UL+SW+PB+PL*cos/sin),(PL,2*UL+SW+PB),(PL,2*UL-PB),(0,2*UL-PB-PL*cos/sin)/*left2*/,(0,UL+SW+PB+PL*cos/sin),(PL,UL+SW+PB),(PL,UL-PB),(0,UL-PB-PL*cos/sin)/*left1*/]); | |||
translate(0,0,BT)/*move up to leave bottom*/ linear_extrude(H)/*make solid*/ difference()/*round off inside corners*/ {polygon/*inside*/([(WT,SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,SW+PB+WT*sin),(PL+WT,SW+PB),(PL+WT,WT),(W-PL-WT,WT),(W-PL-WT,SW+PB),(W-PL-WT*cos,SW+PB+WT*sin),(W-WT,SW+PB+WT/sin+(PL-WT)*cos/sin)/*back*/,(W-WT,UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,UL-PB-WT*sin),(W-PL-WT,UL-PB),(W-PL-WT,UL+SW+PB),(W-PL-WT*cos,UL+SW+PB+WT*sin),(W-WT,UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right1*/,(W-WT,2*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,2*UL-PB-WT*sin),(W-PL-WT,2*UL-PB),(W-PL-WT,2*UL+SW+PB),(W-PL-WT*cos,2*UL+SW+PB+WT*sin),(W-WT,2*UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right2*/,(W-WT,3*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,3*UL-PB-WT*sin),(W-PL-WT,3*UL-PB),(W-PL-WT,3*UL+SW+PB),(W-PL-WT*cos,3*UL+SW+PB+WT*sin),(W-WT,3*UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right3*/,(W-WT,4*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT/cos-(PB-WT-G)*sin/cos,4*UL-WT-G),(PL+WT/cos+(PB-WT-G)*sin/cos,4*UL-WT-G),(WT,4*UL-PB-WT/sin-(PL-WT)*cos/sin)/*front*/,(WT,3*UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,3*UL+SW+PB+WT*sin),(PL+WT,3*UL+SW+PB),(PL+WT,3*UL-PB),(PL+WT*cos,3*UL-PB-WT*sin),(WT,3*UL-PB-WT/sin-(PL-WT)*cos/sin)/*left3*/,(WT,2*UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,2*UL+SW+PB+WT*sin),(PL+WT,2*UL+SW+PB),(PL+WT,2*UL-PB),(PL+WT*cos,2*UL-PB-WT*sin),(WT,2*UL-PB-WT/sin-(PL-WT)*cos/sin)/*left2*/,(WT,UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,UL+SW+PB+WT*sin),(PL+WT,UL+SW+PB),(PL+WT,UL-PB),(PL+WT*cos,UL-PB-WT*sin),(WT,UL-PB-WT/sin-(PL-WT)*cos/sin)/*left1*/]); | |||
translate(PL,SW+PB)/*back left corner*/ circle(r=WT); | |||
translate(W-PL,SW+PB)/*right*/ circle(r=WT); | |||
translate(W-PL,UL-PB)/*right1 rear*/ circle(r=WT); | |||
translate(W-PL,UL+SW+PB)/*front*/ circle(r=WT); | |||
translate(PL,UL-PB)/*left1 rear*/ circle(r=WT); | |||
translate(PL,UL+SW+PB)/*front*/ circle(r=WT); | |||
translate(W-PL,2*UL-PB)/*right2 rear*/ circle(r=WT); | |||
translate(W-PL,2*UL+SW+PB)/*front*/ circle(r=WT); | |||
translate(PL,2*UL-PB)/*left2 rear*/ circle(r=WT); | |||
translate(PL,2*UL+SW+PB)/*front*/ circle(r=WT); | |||
translate(W-PL,3*UL-PB)/*right3 rear*/ circle(r=WT); | |||
translate(W-PL,3*UL+SW+PB)/*front*/ circle(r=WT); | |||
translate(PL,3*UL-PB)/*left3 rear*/ circle(r=WT); | |||
translate(PL,3*UL+SW+PB)/*front*/ circle(r=WT); } | |||
translate (PL+2*WT,4*UL-WT-G-1,FH)/*move to front*/ cube/*notch*/(W-2*PL-4*WT,WT+2,H); } } | |||
WT=2.5; /*wall thickness*/ | |||
BT=WT; /*bottom thickness*/ | |||
FH=48; /*front height*/ | |||
H=68; /*height*/ | |||
PL=2.7; /*prong length*/ | |||
PB=1.1; /*prong bulge*/ | |||
SW=2.65; /*slot width*/ | |||
TT=2.05; /*tab thickness*/ | |||
UL=26.8; /*unit length*/ | |||
W=127.8; /*width*/ | |||
G=0.2; /*gap between boxes*/ | |||
cos=0.6428; /*angle 50*/ | |||
sin=0.766; | |||
box4(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin); | |||
dna.txt - Sept. 10, 2019 | dna.txt - Sept. 10, 2019 | ||
dnaa.escad, rnaa.escad, etc. print schematic but fairly realistic puzzle piece-like representations of the nucleotides that make up DNA & RNA. They can be printed in various sizes; the standard size (n=1) is very roughly 20 x 25 x 12 mm while double size (n=2) is twice that. The size should not be set below n=1 but can be made as large as can be printed. A standard size piece takes roughly 5 minutes to print making them good demonstration & test objects; print time goes up as roughly the square of the size. The following files have been prepared (all files should be printed with Platform adhesion type=None; all files with built-in support (the support parameters may need to be adjusted individually for different printers) should be printed with Support type=None; all others should be printed with Support type=Touching buildplate unless otherwise stated); the standard .escad files are below while the Rf.escad & | dnaa.escad, rnaa.escad, etc. print schematic but fairly realistic puzzle piece-like representations of the nucleotides that make up DNA & RNA. They can be printed in various sizes; the standard size (n=1) is very roughly 20 x 25 x 12 mm while double size (n=2) is twice that. The size should not be set below n=1 but can be made as large as can be printed. A standard size piece takes roughly 5 minutes to print making them good demonstration & test objects; print time goes up as roughly the square of the size. The following files have been prepared (all files should be printed with Platform adhesion type=None; all files with built-in support (the support parameters may need to be adjusted individually for different printers) should be printed with Support type=None; all others should be printed with Support type=Touching buildplate unless otherwise stated); the standard .escad files are shown below while the Rf.escad & .stl files are available at HacDC: | ||
dnaa - deoxyadenosine monophosphate: | dnaa - deoxyadenosine monophosphate: | ||
dnaa.escad - default is double size, set n=1 for standard size | dnaa.escad - default is double size, set n=1 for standard size | ||
Line 895: | Line 958: | ||
sd=0.7; /*support distance*/ | sd=0.7; /*support distance*/ | ||
rnats(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd); | rnats(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd); | ||
test objects: | |||
module testcube(R) /*this just prints a 5 mm cube; good test & demo program that only takes a couple minutes to print*/ | |||
cube(R); | |||
R=5; | |||
cube(R); | |||
module calsquare(D) /*this prints 4 squares at the corners of a square bed; if the distance between adjacent squares is not the same the printer is miscalibrated; if the diagonal distances are not the same the x & y axes are not perpendicular*/ | |||
{union() {cube(5,5,1); | |||
translate(D,0,0) cube(5,5,1); | |||
translate(0,D,0) cube(5,5,1); | |||
translate(D,D,0) cube(5,5,1); } } | |||
D=250; | |||
calsquare(D); | |||
</nowiki> | </nowiki> |
Revision as of 02:06, 11 September 2019
This is a collection of ImplicitCAD files for an assortment of objects. Enjoy! (Note that versions fudged for HacDC's miscalibrated Rostock & compiled .stl files are available for many of these at HacDC in the ImplicitCAD/radioshack_box directory on the renderadmin computer.) box1-box4 are boxes that fit the parts drawers that were used at Radio Shack (sort of; there is so much random variation in the drawers that the boxes are sometimes too loose & sometimes too tight): module box1(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin) /*type 32*/ {difference()/*remove inside & notch*/ {linear_extrude(H)/*make solid*/ polygon/*outside*/([(0,SW+PB+PL*cos/sin),(PL,SW+PB),(PL,SW/2+TT/2),(0,SW/2+TT/2),(0,SW/2-TT/2),(PL,SW/2-TT/2),(PL+SW/2-TT/2,0),(W-PL-SW/2+TT/2,0),(W-PL,SW/2-TT/2),(W,SW/2-TT/2),(W,SW/2+TT/2),(W-PL,SW/2+TT/2),(W-PL,SW+PB),(W,SW+PB+PL*cos/sin)/*back*/,(W,UL-PB-PL*cos/sin),(W-PL-PB*sin/cos+G*sin/cos,UL-G),(PL+PB*sin/cos-G*sin/cos,UL-G),(0,UL-PB-PL*cos/sin)/*front*/]); translate(0,0,BT)/*move up to leave bottom*/ linear_extrude(H)/*make solid*/ difference()/*round off inside corners*/ {polygon/*inside*/([(WT,SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,SW+PB+WT*sin),(PL+WT,SW+PB),(PL+WT,WT),(W-PL-WT,WT),(W-PL-WT,SW+PB),(W-PL-WT*cos,SW+PB+WT*sin),(W-WT,SW+PB+WT/sin+(PL-WT)*cos/sin)/*back*/,(W-WT,UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT/cos-(PB-WT-G)*sin/cos,UL-WT-G),(PL+WT/cos+(PB-WT-G)*sin/cos,UL-WT-G),(WT,UL-PB-WT/sin-(PL-WT)*cos/sin)/*front*/]); translate(PL,SW+PB)/*back left corner*/ circle(r=WT); translate(W-PL,SW+PB)/*right*/ circle(r=WT); } translate (PL+2*WT,UL-WT-G-1,FH)/*move to front*/ cube/*notch*/(W-2*PL-4*WT,WT+2,H); } } WT=2.5; /*wall thickness*/ BT=WT; /*bottom thickness*/ FH=48; /*front height*/ H=68; /*height*/ PL=2.7; /*prong length*/ PB=1.1; /*prong bulge*/ SW=2.65; /*slot width*/ TT=2.05; /*tab thickness*/ UL=26.8; /*unit length*/ W=127.8; /*width*/ G=0.2; /*gap between boxes*/ cos=0.6428; /*angle 50*/ sin=0.766; box1(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin); module box2(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin) /*type 32*/ {difference()/*remove inside & notch*/ {linear_extrude(H)/*make solid*/ polygon/*outside*/([(0,SW+PB+PL*cos/sin),(PL,SW+PB),(PL,SW/2+TT/2),(0,SW/2+TT/2),(0,SW/2-TT/2),(PL,SW/2-TT/2),(PL+SW/2-TT/2,0),(W-PL-SW/2+TT/2,0),(W-PL,SW/2-TT/2),(W,SW/2-TT/2),(W,SW/2+TT/2),(W-PL,SW/2+TT/2),(W-PL,SW+PB),(W,SW+PB+PL*cos/sin)/*back*/,(W,UL-PB-PL*cos/sin),(W-PL,UL-PB),(W-PL,UL+SW+PB),(W,UL+SW+PB+PL*cos/sin)/*right*/,(W,2*UL-PB-PL*cos/sin),(W-PL-PB*sin/cos+G*sin/cos,2*UL-G),(PL+PB*sin/cos-G*sin/cos,2*UL-G),(0,2*UL-PB-PL*cos/sin)/*front*/,(0,UL+SW+PB+PL*cos/sin),(PL,UL+SW+PB),(PL,UL-PB),(0,UL-PB-PL*cos/sin)/*left*/]); translate(0,0,BT)/*move up to leave bottom*/ linear_extrude(H)/*make solid*/ difference()/*round off inside corners*/ {polygon/*inside*/([(WT,SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,SW+PB+WT*sin),(PL+WT,SW+PB),(PL+WT,WT),(W-PL-WT,WT),(W-PL-WT,SW+PB),(W-PL-WT*cos,SW+PB+WT*sin),(W-WT,SW+PB+WT/sin+(PL-WT)*cos/sin)/*back*/,(W-WT,UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,UL-PB-WT*sin),(W-PL-WT,UL-PB),(W-PL-WT,UL+SW+PB),(W-PL-WT*cos,UL+SW+PB+WT*sin),(W-WT,UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right*/,(W-WT,2*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT/cos-(PB-WT-G)*sin/cos,2*UL-WT-G),(PL+WT/cos+(PB-WT-G)*sin/cos,2*UL-WT-G),(WT,2*UL-PB-WT/sin-(PL-WT)*cos/sin)/*front*/,(WT,UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,UL+SW+PB+WT*sin),(PL+WT,UL+SW+PB),(PL+WT,UL-PB),(PL+WT*cos,UL-PB-WT*sin),(WT,UL-PB-WT/sin-(PL-WT)*cos/sin)/*left*/]); translate(PL,SW+PB)/*back left corner*/ circle(r=WT); translate(W-PL,SW+PB)/*right*/ circle(r=WT); translate(W-PL,UL-PB)/*right side rear*/ circle(r=WT); translate(W-PL,UL+SW+PB)/*front*/ circle(r=WT); translate(PL,UL-PB)/*left side rear*/ circle(r=WT); translate(PL,UL+SW+PB)/*front*/ circle(r=WT); } translate(PL+2*WT,2*UL-WT-G-1,FH)/*move to front*/ cube/*notch*/(W-2*PL-4*WT,WT+2,H); } } WT=2.5; /*wall thickness*/ BT=WT; /*bottom thickness*/ FH=48; /*front height*/ H=68; /*height*/ PL=2.7; /*prong length*/ PB=1.1; /*prong bulge*/ SW=2.65; /*slot width*/ TT=2.05; /*tab thickness*/ UL=26.8; /*unit length*/ W=127.8; /*width*/ G=0.2; /*gap between boxes*/ cos=0.6428; /*angle 50*/ sin=0.766; box2(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin); module box3(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin) /*type 32*/ {difference()/*remove inside & notch*/ {linear_extrude(H)/*make solid*/ polygon/*outside*/([(0,SW+PB+PL*cos/sin),(PL,SW+PB),(PL,SW/2+TT/2),(0,SW/2+TT/2),(0,SW/2-TT/2),(PL,SW/2-TT/2),(PL+SW/2-TT/2,0),(W-PL-SW/2+TT/2,0),(W-PL,SW/2-TT/2),(W,SW/2-TT/2),(W,SW/2+TT/2),(W-PL,SW/2+TT/2),(W-PL,SW+PB),(W,SW+PB+PL*cos/sin)/*back*/,(W,UL-PB-PL*cos/sin),(W-PL,UL-PB),(W-PL,UL+SW+PB),(W,UL+SW+PB+PL*cos/sin)/*right1*/,(W,2*UL-PB-PL*cos/sin),(W-PL,2*UL-PB),(W-PL,2*UL+SW+PB),(W,2*UL+SW+PB+PL*cos/sin)/*right2*/,(W,3*UL-PB-PL*cos/sin),(W-PL-PB*sin/cos+G*sin/cos,3*UL-G),(PL+PB*sin/cos-G*sin/cos,3*UL-G),(0,3*UL-PB-PL*cos/sin)/*front*/,(0,2*UL+SW+PB+PL*cos/sin),(PL,2*UL+SW+PB),(PL,2*UL-PB),(0,2*UL-PB-PL*cos/sin)/*left2*/,(0,UL+SW+PB+PL*cos/sin),(PL,UL+SW+PB),(PL,UL-PB),(0,UL-PB-PL*cos/sin)/*left1*/]); translate(0,0,BT)/*move up to leave bottom*/ linear_extrude(H)/*make solid*/ difference()/*round off inside corners*/ {polygon/*inside*/([(WT,SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,SW+PB+WT*sin),(PL+WT,SW+PB),(PL+WT,WT),(W-PL-WT,WT),(W-PL-WT,SW+PB),(W-PL-WT*cos,SW+PB+WT*sin),(W-WT,SW+PB+WT/sin+(PL-WT)*cos/sin)/*back*/,(W-WT,UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,UL-PB-WT*sin),(W-PL-WT,UL-PB),(W-PL-WT,UL+SW+PB),(W-PL-WT*cos,UL+SW+PB+WT*sin),(W-WT,UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right1*/,(W-WT,2*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,2*UL-PB-WT*sin),(W-PL-WT,2*UL-PB),(W-PL-WT,2*UL+SW+PB),(W-PL-WT*cos,2*UL+SW+PB+WT*sin),(W-WT,2*UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right2*/,(W-WT,3*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT/cos-(PB-WT-G)*sin/cos,3*UL-WT-G),(PL+WT/cos+(PB-WT-G)*sin/cos,3*UL-WT-G),(WT,3*UL-PB-WT/sin-(PL-WT)*cos/sin)/*front*/,(WT,2*UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,2*UL+SW+PB+WT*sin),(PL+WT,2*UL+SW+PB),(PL+WT,2*UL-PB),(PL+WT*cos,2*UL-PB-WT*sin),(WT,2*UL-PB-WT/sin-(PL-WT)*cos/sin)/*left2*/,(WT,UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,UL+SW+PB+WT*sin),(PL+WT,UL+SW+PB),(PL+WT,UL-PB),(PL+WT*cos,UL-PB-WT*sin),(WT,UL-PB-WT/sin-(PL-WT)*cos/sin)/*left1*/]); translate(PL,SW+PB)/*back left corner*/ circle(r=WT); translate(W-PL,SW+PB)/*right*/ circle(r=WT); translate(W-PL,UL-PB)/*right1 rear*/ circle(r=WT); translate(W-PL,UL+SW+PB)/*front*/ circle(r=WT); translate(PL,UL-PB)/*left1 rear*/ circle(r=WT); translate(PL,UL+SW+PB)/*front*/ circle(r=WT); translate(W-PL,2*UL-PB)/*right2 rear*/ circle(r=WT); translate(W-PL,2*UL+SW+PB)/*front*/ circle(r=WT); translate(PL,2*UL-PB)/*left2 rear*/ circle(r=WT); translate(PL,2*UL+SW+PB)/*front*/ circle(r=WT); } translate (PL+2*WT,3*UL-WT-G-1,FH)/*move to front*/ cube/*notch*/(W-2*PL-4*WT,WT+2,H); } } WT=2.5; /*wall thickness*/ BT=WT; /*bottom thickness*/ FH=48; /*front height*/ H=68; /*height*/ PL=2.7; /*prong length*/ PB=1.1; /*prong bulge*/ SW=2.65; /*slot width*/ TT=2.05; /*tab thickness*/ UL=26.8; /*unit length*/ W=127.8; /*width*/ G=0.2; /*gap between boxes*/ cos=0.6428; /*angle 50*/ sin=0.766; box3(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin); module box4(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin) /*type 32*/ {difference()/*remove inside & notch*/ {linear_extrude(H)/*make solid*/ polygon/*outside*/([(0,SW+PB+PL*cos/sin),(PL,SW+PB),(PL,SW/2+TT/2),(0,SW/2+TT/2),(0,SW/2-TT/2),(PL,SW/2-TT/2),(PL+SW/2-TT/2,0),(W-PL-SW/2+TT/2,0),(W-PL,SW/2-TT/2),(W,SW/2-TT/2),(W,SW/2+TT/2),(W-PL,SW/2+TT/2),(W-PL,SW+PB),(W,SW+PB+PL*cos/sin)/*back*/,(W,UL-PB-PL*cos/sin),(W-PL,UL-PB),(W-PL,UL+SW+PB),(W,UL+SW+PB+PL*cos/sin)/*right1*/,(W,2*UL-PB-PL*cos/sin),(W-PL,2*UL-PB),(W-PL,2*UL+SW+PB),(W,2*UL+SW+PB+PL*cos/sin)/*right2*/,(W,3*UL-PB-PL*cos/sin),(W-PL,3*UL-PB),(W-PL,3*UL+SW+PB),(W,3*UL+SW+PB+PL*cos/sin)/*right3*/,(W,4*UL-PB-PL*cos/sin),(W-PL-PB*sin/cos+G*sin/cos,4*UL-G),(PL+PB*sin/cos-G*sin/cos,4*UL-G),(0,4*UL-PB-PL*cos/sin)/*front*/,(0,3*UL+SW+PB+PL*cos/sin),(PL,3*UL+SW+PB),(PL,3*UL-PB),(0,3*UL-PB-PL*cos/sin)/*left3*/,(0,2*UL+SW+PB+PL*cos/sin),(PL,2*UL+SW+PB),(PL,2*UL-PB),(0,2*UL-PB-PL*cos/sin)/*left2*/,(0,UL+SW+PB+PL*cos/sin),(PL,UL+SW+PB),(PL,UL-PB),(0,UL-PB-PL*cos/sin)/*left1*/]); translate(0,0,BT)/*move up to leave bottom*/ linear_extrude(H)/*make solid*/ difference()/*round off inside corners*/ {polygon/*inside*/([(WT,SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,SW+PB+WT*sin),(PL+WT,SW+PB),(PL+WT,WT),(W-PL-WT,WT),(W-PL-WT,SW+PB),(W-PL-WT*cos,SW+PB+WT*sin),(W-WT,SW+PB+WT/sin+(PL-WT)*cos/sin)/*back*/,(W-WT,UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,UL-PB-WT*sin),(W-PL-WT,UL-PB),(W-PL-WT,UL+SW+PB),(W-PL-WT*cos,UL+SW+PB+WT*sin),(W-WT,UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right1*/,(W-WT,2*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,2*UL-PB-WT*sin),(W-PL-WT,2*UL-PB),(W-PL-WT,2*UL+SW+PB),(W-PL-WT*cos,2*UL+SW+PB+WT*sin),(W-WT,2*UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right2*/,(W-WT,3*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT*cos,3*UL-PB-WT*sin),(W-PL-WT,3*UL-PB),(W-PL-WT,3*UL+SW+PB),(W-PL-WT*cos,3*UL+SW+PB+WT*sin),(W-WT,3*UL+SW+PB+WT/sin+(PL-WT)*cos/sin)/*right3*/,(W-WT,4*UL-PB-WT/sin-(PL-WT)*cos/sin),(W-PL-WT/cos-(PB-WT-G)*sin/cos,4*UL-WT-G),(PL+WT/cos+(PB-WT-G)*sin/cos,4*UL-WT-G),(WT,4*UL-PB-WT/sin-(PL-WT)*cos/sin)/*front*/,(WT,3*UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,3*UL+SW+PB+WT*sin),(PL+WT,3*UL+SW+PB),(PL+WT,3*UL-PB),(PL+WT*cos,3*UL-PB-WT*sin),(WT,3*UL-PB-WT/sin-(PL-WT)*cos/sin)/*left3*/,(WT,2*UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,2*UL+SW+PB+WT*sin),(PL+WT,2*UL+SW+PB),(PL+WT,2*UL-PB),(PL+WT*cos,2*UL-PB-WT*sin),(WT,2*UL-PB-WT/sin-(PL-WT)*cos/sin)/*left2*/,(WT,UL+SW+PB+WT/sin+(PL-WT)*cos/sin),(PL+WT*cos,UL+SW+PB+WT*sin),(PL+WT,UL+SW+PB),(PL+WT,UL-PB),(PL+WT*cos,UL-PB-WT*sin),(WT,UL-PB-WT/sin-(PL-WT)*cos/sin)/*left1*/]); translate(PL,SW+PB)/*back left corner*/ circle(r=WT); translate(W-PL,SW+PB)/*right*/ circle(r=WT); translate(W-PL,UL-PB)/*right1 rear*/ circle(r=WT); translate(W-PL,UL+SW+PB)/*front*/ circle(r=WT); translate(PL,UL-PB)/*left1 rear*/ circle(r=WT); translate(PL,UL+SW+PB)/*front*/ circle(r=WT); translate(W-PL,2*UL-PB)/*right2 rear*/ circle(r=WT); translate(W-PL,2*UL+SW+PB)/*front*/ circle(r=WT); translate(PL,2*UL-PB)/*left2 rear*/ circle(r=WT); translate(PL,2*UL+SW+PB)/*front*/ circle(r=WT); translate(W-PL,3*UL-PB)/*right3 rear*/ circle(r=WT); translate(W-PL,3*UL+SW+PB)/*front*/ circle(r=WT); translate(PL,3*UL-PB)/*left3 rear*/ circle(r=WT); translate(PL,3*UL+SW+PB)/*front*/ circle(r=WT); } translate (PL+2*WT,4*UL-WT-G-1,FH)/*move to front*/ cube/*notch*/(W-2*PL-4*WT,WT+2,H); } } WT=2.5; /*wall thickness*/ BT=WT; /*bottom thickness*/ FH=48; /*front height*/ H=68; /*height*/ PL=2.7; /*prong length*/ PB=1.1; /*prong bulge*/ SW=2.65; /*slot width*/ TT=2.05; /*tab thickness*/ UL=26.8; /*unit length*/ W=127.8; /*width*/ G=0.2; /*gap between boxes*/ cos=0.6428; /*angle 50*/ sin=0.766; box4(BT,FH,H,PL,PB,SW,TT,UL,W,WT,G,cos,sin); dna.txt - Sept. 10, 2019 dnaa.escad, rnaa.escad, etc. print schematic but fairly realistic puzzle piece-like representations of the nucleotides that make up DNA & RNA. They can be printed in various sizes; the standard size (n=1) is very roughly 20 x 25 x 12 mm while double size (n=2) is twice that. The size should not be set below n=1 but can be made as large as can be printed. A standard size piece takes roughly 5 minutes to print making them good demonstration & test objects; print time goes up as roughly the square of the size. The following files have been prepared (all files should be printed with Platform adhesion type=None; all files with built-in support (the support parameters may need to be adjusted individually for different printers) should be printed with Support type=None; all others should be printed with Support type=Touching buildplate unless otherwise stated); the standard .escad files are shown below while the Rf.escad & .stl files are available at HacDC: dnaa - deoxyadenosine monophosphate: dnaa.escad - default is double size, set n=1 for standard size dnaas.escad - built-in support, default is standard, set n=2 for double size dnaa1Rfs.escad - built-in support, standard size fudged for HacDC's miscalibrated Rostock dnaa2Rf.escad - double size fudged for Rostock dnaa1s.stl - standard size with built-in support dnaa2.stl - double size dnaa1Rfs.stl - standard size with support for Rostock dnaa2Rf.stl - double size for Rostock dnac - deoxycytidine monophosphate: dnac.escad - default is double size, set n=1 for standard dnacs.escad - with support, default is standard, set n=2 for double dnac1Rfs.escad - standard size with support for Rostock dnac2Rf.escad - double size for Rostock dnac1s.stl - standard size with support dnac2.stl - double size dnac1Rfs.stl - standard size with support for Rostock dnac2Rf.stl - double size for Rostock dnag - deoxyguanosine monophosphate: dnag.escad - no support used, print with Support type=None, default is standard size, set n=2 for double dnag1Rf.escad - print with Support type=None, standard size for Rostock dnag2Rf.escad - print with Support type=None, double size for Rostock dnag1.stl - print with Support type=None, standard size dnag2.stl - print with Support type=None, double size dnag1Rf.stl - print with Support type=None, standard size for Rostock dnag2Rf.stl - print with Support type=None, double size for Rostock dnat - thymidine monophosphate: dnat.escad - default is double size, set n=1 for standard dnats.escad - with support, default is standard size, set n=2 for double dnat1Rfs.escad - standard size with support for Rostock dnat2Rf.escad - double size for Rostock dnat1s.stl - standard size with support dnat2.stl - double size dnat1Rfs.stl - standard size with support for Rostock dnat2Rf.stl - double size for Rostock dnat1Rfs190.gcode - standard size ready-to-print gcode for Rostock, printhead temperature=190 C dnat1Rfs195.gcode - standard size gcode for Rostock, temperature=195 C dnat1Rfs200.gcode - standard size gcode for Rostock, temperature=200 C dnat1Rfs205.gcode - standard size gcode for Rostock, temperature=205 C dnat1Rfs210.gcode - standard size gcode for Rostock, temperature=210 C dnat1Rfs215.gcode - standard size gcode for Rostock, temperature=215 C rnaa - adenosine monophosphate: rnaa.escad - default is double size, set n=1 for standard rnaas.escad - with support, default is standard size, set n=2 for double rnaa1Rfs.escad - standard size with support for Rostock rnaa2Rf.escad - double size for Rostock rnaa1s.stl - standard size with support rnaa2.stl-double size rnaa1Rfs.stl - standard size with support for Rostock rnaa2Rf.stl - double size for Rostock rnac - cytidine monophosphate: rnac.escad - default is double size, set n=1 for standard rnacs.escad - with support, default is standard size, set n=2 for double rnac1Rfs.escad - standard size with support for Rostock rnac2Rf.escad - double size for Rostock rnac1s.stl - standard size with support rnac2.stl - double size rnac1Rfs.stl - standard size with support for Rostock rnac2Rf.stl - double size for Rostock rnag - guanosine monophosphate: rnag.escad - no support used, print with Support type=None, default is standard size, set n=2 for double rnag1Rf.escad - print with Support type=None, standard size for Rostock rnag2Rf.escad - print with Support type=None, double size for Rostock rnag1.stl - print with Support type=None, standard size rnag2.stl - print with Support type=None, double size rnag1Rf.stl - print with Support type=None, standard size for Rostock rnag2Rf.stl - print with Support type=None, double size for Rostock rnau - uridine monophosphate: rnau.escad - default is double size, set n=1 for standard rnaus.escad - with support, default is standard size, set n=2 for double rnau1Rfs.escad - standard size with support for Rostock rnau2Rf.escad - double size for Rostock rnau1s.stl - standard size with support rnau2.stl - double size rnau1Rfs.stl - standard size with support for Rostock rnau2Rf.stl - double size for Rostock Modified bases: rnat - ribosylthymine monophosphate: rnat.escad - default is double size, set n=1 for standard rnats.escad - with support, default is standard size, set n=2 for double rnat1Rfs.escad - standard size with support for Rostock rnat2Rf.escad - double size for Rostock rnat1s.stl - standard size with support rnat2.stl - double size rnat1Rfs.stl - standard size with support for Rostock rnat2Rf.stl - double size for Rostock rnapsu - pseudouridine monophosphate: rnapsu.escad - default is double size, set n=1 for standard rnapsus.escad - with support, default is standard size,set n=2 for double rnapsu1Rfs.escad - standard size with support for Rostock rnapsu2Rf.escad - double size for Rostock rnapsu1s.stl - standard size with support rnapsu2.stl - double size rnapsu1Rfs.stl - standard size with support for Rostock rnapsu2Rf.stl - double size for Rostock rnai - inosine monophosphate: rnai.escad - default is double size, set n=1 for standard rnais.escad - with support, default is standard size, set n=2 for double rnai1Rfs.escad - standard size with support for Rostock rnai2Rf.escad - double size for Rostock rnai1s.stl - standard size with support rnai2.stl - double size rnai1Rfs.stl - standard size with support for Rostock rnai2Rf.stl - double size for Rostock rnam1i - 1-methylinosine monophosphate rnam1i.escad - default is double size, set n=1 for standard rnam1is.escad - with support, default is standard size, set n=2 for double rnam1i1Rfs.escad - standard size with support for Rostock rnam1i2Rf.escad - double size for Rostock rnam1i1s.stl - standard size with support rnam1i2.stl - double size rnam1i1Rfs.stl - standard size with support for Rostock rnam1i2Rf.stl - double size for Rostock rnacm - 2'-O-methylcytidine monophosphate: rnacm.escad - default is double size, set n=1 for standard rnacms.escad - with support, default is standard size, set n=2 for double rnacm1Rfs.escad - standard size with support for Rostock rnacm2Rf.escad - double size for Rostock rnacm1s.stl - standard size with support rnacm2.stl - double size rnacm1Rfs.stl - standard size with support for Rostock rnacm2Rf.stl - double size for Rostock Other: ddC - dideoxycytidine monophosphate ddC.escad - default is double size, set n=1 for standard ddCs.escad - with support, default is standard size, set n=2 for double ddC1Rfs.escad - standard with support for Rostock ddC2Rf.escad - double size for Rostock ddC1s.stl - standard size with support ddC2.stl - double size ddC1Rfs.stl - standard size with support for Rostock ddC2Rf.stl - double size for Rostock Printing the various dnat1Rfs###.gcode files can be used to determine optimum printhead temperature for the current Rostock filament; just compare the print quality of the pieces & use whatever temperature works best. Warning: The pieces are a choking hazard. Nucleic acids are long chains of nucleotides; each piece represents a nucleotide. Nucleotides are made up of a base (the vertical part; adenine, cytosine, guanine, & thymine in DNA; adenine, cytosine, guanine, & uracil in RNA), a sugar (the flat part except for the knob; deoxyribose in DNA, ribose in RNA), & a phosphate (the knob). The base joined to the sugar without the phosphate is known as a nucleoside (deoxyadenosine (dA), deoxycytidine (dC), deoxyguanosine (dG), & thymidine (T) for DNA, adenosine (A), cytidine (C), guanosine (G), & uridine (U) for RNA (yes, adenine & guanine are bases while adenosine & guanosine are nucleosides but inconsistently cytosine is a base while cytidine is a nucleoside)). The nucleotides are called deoxyadenosine monophosphate (dAMP), deoxycytidine monophosphate (dCMP), etc. In DNA & RNA G pairs with C while A pairs with T or U; note how the vertical zig-zags of the bases fit together (DNA & RNA can pair with themselves or each other in largely the same way). DNA stores information and is normally double stranded (the famous double helix). RNA is used to transfer information or is structural and is usually single stranded (with many small double-stranded regions where it pairs with another part of itself). The model correctly shows single-stranded RNA & DNA being more flexible than double-stranded, but is far too rigid in both cases. With these pieces it is possible to explain some features of nucleic acids: It is easy to see how double-stranded DNA can replicate - just separate the two strands and make new strands by selecting the pieces that fit together correctly. Since G pairs with C & A pairs with T double-stranded DNA contains the same amount of G & C and the same amount of A & T (this does not apply to single-stranded nucleic acids (i.e., most RNA)) but the amount of G & C need not be the same as the amount of A & T. Which do you think would be more stable: DNA with a high G & C content or DNA with a high A & T content? Can you figure out why DNA uses T (which takes the cell more raw material to produce) instead of U (hint: C can occasionally degrade to U)? DNA contains the information for producing proteins made up of 20-22 different amino acids strung together in a row (just as DNA is composed of the 4 different nucleotides A, C, G, & T strung together) plus a stop signal. Three consecutive nucleotides in DNA code for 1 amino acid in a protein. Can you figure out why 3 nucleotides are used? Modified nucleic acids that contain 2 or 4 additional nucleotides besides A, C, G, & T have been created. Can you figure out how DNA could have 8 different bases and still replicate normally? DNA & especially RNA can contain modified bases. These range from the simple (thymine instead of uracil in RNA (rT)) to the complex (ms2t6A) to the downright weird (pseudouridine) to the absurd (glutamylQ). Their functions vary & can be mysterious; new modifications are still being found. Modified bases may form unmodified base pairs (U & rT pair with A in the same way) but sometimes form different base pairs (converting A to I causes it to pair with C) or are unable to form any base pair (m1I). Pieces have been made for rT, I, m1I, Cm, & pseudouridine in RNA. I occurs in tRNA at a position that is flexible, allowing it to shift around & form unconventional "wobble" pairs with U & even A in addition to the standard C. Do you see how this might happen? What other wobble pairing might you expect? Also included is the nucleotide form of ddC, a drug used against HIV. How do you think it blocks HIV? It, along with the similar ddA, etc., is also used to determine the sequence of nucleotides in DNA & RNA. Do you see how this can be done (hint: it is possible to separate DNA molecules by length)? module ddC(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg) /*dideoxycytosine monophosphate (ddCMP), from anti-HIV drug ddC & terminator ddCTP used in DNA sequencing; set n=1 for standard size, n=2 for double size; print with Support type=Touching buildplate & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,3*f),(8*f,3*f),(8*f,0),(10*f,0),(10*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*deoxyribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,8*n+g),(10*f-g,8*n+g),(10*f-g,12*n),(3.464*f,12*n),(0,10*n)]); /*cytidine*/ translate(lx+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*d outer circle*/ circle(r=ll/4-lt); /*inner circle*/ } translate(lx+ll/2-lt,ly,0) cube(lt,ll,t+lh); /*bar*/ translate(lx+3*ll/4+ls,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*outer circle 2*/ circle(r=ll/4-lt); /*inner circle 2*/ } translate(lx+ll+ls-lt,ly,0) cube(lt,ll,t+lh); /*bar 2*/ translate(lx+3*ll/2+2*ls,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*C outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(0,0),(ll,-ll),(ll,ll)]); /*R quadrant*/ } } } n=2; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=4*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=0.5*f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt; /*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ ddC(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg); module ddCs(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg,st,sg,sd) /*dideoxycytosine monophosphate (ddCMP), from anti-HIV drug ddC & terminator ddCTP used in DNA sequencing; set n=1 for standard size, n=2 for double size; includes support, print with Support type=None & Platform adhesion type=None; July 8, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,3*f),(8*f,3*f),(8*f,0),(10*f,0),(10*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*deoxyribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,8*n+g),(10*f-g,8*n+g),(10*f-g,12*n),(3.464*f,12*n),(0,10*n)]); /*cytidine*/ translate(lx+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*outer circle*/ circle(r=ll/4-lt); /*inner circle*/ } translate(lx+ll/2-lt,ly,0) cube(lt,ll,t+lh); /*d bar*/ translate(lx+3*ll/4+ls,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*outer circle 2*/ circle(r=ll/4-lt); /*inner circle 2*/ } translate(lx+ll+ls-lt,ly,0) cube(lt,ll,t+lh); /*2nd d bar*/ translate(lx+3*ll/2+2*ls,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*C outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(0,0),(ll,-ll),(ll,ll)]); /*R quadrant*/ } translate(12*f-tf-g,9*f-tf,0) linear_extrude(8*n) polygon([(6*f+sd,tf+sg),(10*f+sg,tf+sg),(10*f+sg,-sg),(6*f+sd,-sg),(6*f+sd,-sg-st),(10*f+sg+st,-sg-st),(10*f+sg+st,tf+sg+st),(6*f+sd,tf+st+sg)]); /*support*/ } } n=1; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=4*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=0.5*f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt; /*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.4; /*support gap*/ sd=0.7; /*support distance*/ ddCs(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg,st,sg,sd); module dnaa(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg) /*deoxyadenosine monophosphate (dAMP); n=1 is standard, n=2 is double size; print with Support type=Touching buildplate & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*deoxyribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(8*f,0),(8*f,4*n),(10*f-g,4*n),(10*f-g,8*n+g),(14*f-g,8*n+g),(14*f-g,12*n),(7.464*f,12*n),(4*f,10*n),(0,10*n)]); /*adenine*/ translate(lx/2+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*d outer circle*/ circle(r=ll/4-lt); /*inner circle*/ } translate(lx/2+ll/2-lt,ly,0) cube(lt,ll,t+lh); /*bar*/ translate(lx/2+ll/2+ls,ly,t) linear_extrude(lh) polygon([(0,0),(k*lt,0),(ll/2,ll-2*k*lt),(ll-k*lt,0),(ll,0),(ll/2,ll)]);/*A square inverted V*/ translate(lx/2+ll/2+ls,ly,t) linear_extrude(lh) polygon([(ll/6+lt/4,ll/3-lt/2),(5*ll/6-lt/4,ll/3-lt/2),(5*ll/6-lt/4,ll/3+lt/2),(ll/6+lt/4,ll/3+lt/2)]);/*bar*/ } } n=2; /*z size*/ f=n; /*x & y size,normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt; /*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ dnaa(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg); module dnaas(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg,st,sg,sd) /*deoxyadenosine monophosphate (dAMP); n=1 is standard, n=2 is double size; includes support, print with Support type=None & Platform adhesion type=None; July 8, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*deoxyribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(8*f,0),(8*f,4*n),(10*f-g,4*n),(10*f-g,8*n+g),(14*f-g,8*n+g),(14*f-g,12*n),(7.464*f,12*n),(4*f,10*n),(0,10*n)]); /*adenine*/ translate(lx/2+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*d outer circle*/ circle(r=ll/4-lt); /*inner circle*/ } translate(lx/2+ll/2-lt,ly,0) cube(lt,ll,t+lh); /*bar*/ translate(lx/2+ll/2+ls,ly,t) linear_extrude(lh) polygon([(0,0),(k*lt,0),(ll/2,ll-2*k*lt),(ll-k*lt,0),(ll,0),(ll/2,ll)]);/*A square inverted V*/ translate(lx/2+ll/2+ls,ly,t) linear_extrude(lh) polygon([(ll/6+lt/4,ll/3-lt/2),(5*ll/6-lt/4,ll/3-lt/2),(5*ll/6-lt/4,ll/3+lt/2),(ll/6+lt/4,ll/3+lt/2)]);/*bar*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(4*n-g) polygon([(8*f+sd,tf+sg),(11*f+sg,tf+sg),(11*f+sg,-sg),(8*f+sd,-sg),(8*f+sd,-sg-st),(11*f+sg+st,-sg-st),(11*f+sg+st,tf+sg+st),(8*f+sd,tf+sg+st)]); /*support1*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(8*n) polygon([(10*f+sd,tf+sg),(14*f+sg,tf+sg),(14*f+sg,-sg),(10*f+sd,-sg),(10*f+sd,-sg-st),(14*f+sg+st,-sg-st),(14*f+sg+st,tf+sg+st),(10*f+sd,tf+sg+st)]); /*support2*/ } } n=1; /*z size*/ f=n; /*x & y size,normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt; /*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.4;/*support gap*/ sd=0.7; /*support distance*/ dnaas(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg,st,sg,sd); module dnac(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg) /*deoxycytidine monophosphate (dCMP); n=1 is standard, n=2 is double size; print with Support type=Touching buildplate & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*deoxyribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,8*n+g),(10*f-g,8*n+g),(10*f-g,12*n),(3.464*f,12*n),(0,10*n)]); /*cytosine*/ translate(lx+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*d outer circle*/ circle(r=ll/4-lt); /*inner circle*/ } translate(lx+ll/2-lt,ly,0) cube(lt,ll,t+lh); /*bar*/ translate(lx+ll+ls,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*C outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(0,0),(ll,-ll),(ll,ll)]); /*R quadrant*/ } } } n=2; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normnally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.25*f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt; /*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ dnac(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg); module dnacs(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg,st,sg,sd) /*deoxycytidine monophosphate (dCMP); standard size with support, print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*deoxyribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,8*n+g),(10*f-g,8*n+g),(10*f-g,12*n),(3.464*f,12*n),(0,10*n)]); /*cytosine*/ translate(lx+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*d outer circle*/ circle(r=ll/4-lt); /*inner circle*/ } translate(lx+ll/2-lt,ly,0) cube(lt,ll,t+lh); /*bar*/ translate(lx+ll+ls,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*C outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(0,0),(ll,-ll),(ll,ll)]); /*R quadrant*/ } translate(12*f-tf-g,9*f-tf,0) linear_extrude(8*n) polygon([(6*f+sd,tf+sg),(10*f+sg,tf+sg),(10*f+sg,-sg),(6*f+sd,-sg),(6*f+sd,-sg-st),(10*f+sg+st,-sg-st),(10*f+sg+st,tf+sg+st),(6*f+sd,tf+st+sg)]); /*support*/ } } n=1; /*z size*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.25*f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt; /*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.4; /*support gap*/ sd=0.7; /*support distance*/ dnacs(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg,st,sg,sd); module dnag(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg) /*deoxyguanosine monophosphate (dGMP); n=1 is standard, n=2 is double size, print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*deoxyribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(14*f-g,0),(14*f-g,8*n-g),(10*f-g,8*n-g),(10*f-g,12*n),(7.464*f,12*n),(4*f,10*n),(0,10*n)]); /*guanine*/ translate(lx+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*d outer circle*/ circle(r=ll/4-lt); /*inner circle*/ } translate(lx+ll/2-lt,ly,0) cube(lt,ll,t+lh); /*bar*/ translate(lx+ll+ls,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*G outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(0,0),(ll,0),(ll,ll)]); /*wedge*/ } translate(lx+ll+ls,ly+ll/2-lt/2,t) linear_extrude(lh) polygon([(0,0),(ll/2-lt,0),(ll/2,lt/2),(ll/2,lt),(0,lt)]); /*bar*/ } } n=1; /*z size, 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt;/*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ dnag(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg); module dnat(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg) /*thymidine monophosphate (TMP); n=1 is standard, n=2 is double size; print with Support type=Touching buildplate & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*deoxyribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,4*n+g),(10*f-g,4*n+g),(10*f-g,8*n-g),(6*f-g,8*n-g),(6*f-g,12*n),(3.464*f,12*n),(2.464*f,13.732*n),(1.098*f,14.098*n),(-0.634*f,13.098*n),(-f,11.732*n),(0,10*n)]); /*thymine*/ translate(lx,ly,t) linear_extrude(lh) polygon([(ll/2-lt/2,0),(ll/2+lt/2,0),(ll/2+lt/2,ll-lt),(ll,ll-lt),(ll,ll),(0,ll),(0,ll-lt),(ll/2-lt/2,ll-lt)]); /*T*/ } } n=2; /*z size*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ dnat(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg); module dnats(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd) /*thymidine monophosphate (TMP); n=1 is standard, n=2 is double size; includes support, print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*deoxyribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,4*n+g),(10*f-g,4*n+g),(10*f-g,8*n-g),(6*f-g,8*n-g),(6*f-g,12*n),(3.464*f,12*n),(2.464*f,13.732*n),(1.098*f,14.098*n),(-0.634*f,13.098*n),(-f,11.732*n),(0,10*n)]); /*thymine*/ translate(lx,ly,t) linear_extrude(lh) polygon([(ll/2-lt/2,0),(ll/2+lt/2,0),(ll/2+lt/2,ll-lt),(ll,ll-lt),(ll,ll),(0,ll),(0,ll-lt),(ll/2-lt/2,ll-lt)]); /*T*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(4*n) polygon([(6*f+sd,tf+sg),(10*f+sg,tf+sg),(10*f+sg,-sg),(6*f+sd,-sg),(6*f+sd,-sg-st),(10*f+sg+st,-sg-st),(10*f+sg+st,tf+sg+st),(6*f+sd,tf+sg+st)]); /*support*/ } } n=1; /*z size*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.3; /*support gap*/ sd=0.7; /*support distance*/ dnats(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd); module rnaa(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg) /*adenosine monophosphate (AMP); n=1 is standard, n=2 is double size; print with Support type=Touching buildplate & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(8*f,0),(8*f,4*n),(10*f-g,4*n),(10*f-g,8*n+g),(14*f-g,8*n+g),(14*f-g,12*n),(7.464*f,12*n),(4*f,10*n),(0,10*n)]); /*adenine*/ translate(lx,ly,t) linear_extrude(lh) polygon([(0,0),(k*lt,0),(ll/2,ll-2*k*lt),(ll-k*lt,0),(ll,0),(ll/2,ll)]);/*A square inverted V*/ translate(lx,ly,t) linear_extrude(lh) polygon([(ll/6+lt/4,ll/3-lt/2),(5*ll/6-lt/4,ll/3-lt/2),(5*ll/6-lt/4,ll/3+lt/2),(ll/6+lt/4,ll/3+lt/2)]);/*bar*/ } } n=2; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ rnaa(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg); module rnaas(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd) /*adenosine monophosphate (AMP); n=1 is standard, n=2 is double size; includes support, print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(8*f,0),(8*f,4*n),(10*f-g,4*n),(10*f-g,8*n+g),(14*f-g,8*n+g),(14*f-g,12*n),(7.464*f,12*n),(4*f,10*n),(0,10*n)]); /*adenine*/ translate(lx,ly,t) linear_extrude(lh) polygon([(0,0),(k*lt,0),(ll/2,ll-2*k*lt),(ll-k*lt,0),(ll,0),(ll/2,ll)]);/*A square inverted V*/ translate(lx,ly,t) linear_extrude(lh) polygon([(ll/6+lt/4,ll/3-lt/2),(5*ll/6-lt/4,ll/3-lt/2),(5*ll/6-lt/4,ll/3+lt/2),(ll/6+lt/4,ll/3+lt/2)]);/*bar*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(4*n-g) polygon([(8*f+sd,tf+sg),(11*f+sg,tf+sg),(11*f+sg,-sg),(8*f+sd,-sg),(8*f+sd,-sg-st),(11*f+sg+st,-sg-st),(11*f+sg+st,tf+sg+st),(8*f+sd,tf+sg+st)]); /*support1*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(8*n) polygon([(10*f+sd,tf+sg),(14*f+sg,tf+sg),(14*f+sg,-sg),(10*f+sd,-sg),(10*f+sd,-sg-st),(14*f+sg+st,-sg-st),(14*f+sg+st,tf+sg+st),(10*f+sd,tf+sg+st)]); /*support2*/ } } n=1; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.4;/*support gap*/ sd=0.7; /*support distance*/ rnaas(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd); module rnac(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg)/*cytidine monophosphate (CMP); n=1 is standard, n=2 is double size; print with Support type=Touching buildplate & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,8*n+g),(10*f-g,8*n+g),(10*f-g,12*n),(3.464*f,12*n),(0,10*n)]); /*cytosine*/ translate(lx+ll/2,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*C outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(0,0),(ll,-ll),(ll,ll)]); /*R quadrant*/ } } } n=2; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ rnac(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg); module rnacs(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd) /*cytidine monophosphate (CMP); n=1 is standard, n=2 is double size; includes support, print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,8*n+g),(10*f-g,8*n+g),(10*f-g,12*n),(3.464*f,12*n),(0,10*n)]); /*cytosine*/ translate(lx+ll/2,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*C outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(0,0),(ll,-ll),(ll,ll)]); /*R quadrant*/ } translate(12*f-tf-g,9*f-tf,0) linear_extrude(8*n) polygon([(6*f+sd,tf+sg),(10*f+sg,tf+sg),(10*f+sg,-sg),(6*f+sd,-sg),(6*f+sd,-sg-st),(10*f+sg+st,-sg-st),(10*f+sg+st,tf+sg+st),(6*f+sd,tf+st+sg)]); /*support*/ } } n=1; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.4; /*support gap*/ sd=0.7; /*support distance*/ rnacs(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd); module rnag(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg) /*guanosine monophosphate (GMP); n=1 is standard, n=2 is double size; print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(14*f-g,0),(14*f-g,8*n-g),(10*f-g,8*n-g),(10*f-g,12*n),(7.464*f,12*n),(4*f,10*n),(0,10*n)]); /*guanine*/ translate(lx+ll/2,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*G outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(0,0),(ll,0),(ll,ll)]); /*wedge*/ } translate(lx+ll/2,ly+ll/2-lt/2,t) linear_extrude(lh) polygon([(0,0),(ll/2-lt,0),(ll/2,lt/2),(ll/2,lt),(0,lt)]); /*bar*/ } } n=1; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ rnag(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg); module rnau(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg) /*uridine monophosphate (UMP); n=1 is standard, n=2 is double size; print with Support type=Touching buildplate & Platform adhesion type=None; July 22, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f,0),(6*f,4*n+g),(10*f-g,4*n+g),(10*f-g,8*n-g),(6*f,8*n-g),(6*f,12*n),(3.464*f,12*n),(0,10*n)]); /*uracil*/ translate(lx+ll/2,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*U outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(-ll,0),(ll,0),(ll,ll),(-ll,ll)]); /*top half*/ } translate(lx,ly,t) linear_extrude(lh) polygon([(0,ll/2),(lt,ll/2-0.2),(lt,ll),(0,ll)]); /*L side*/ translate(lx,ly,t) linear_extrude(lh) polygon([(ll-lt,ll/2-0.2),(ll,ll/2),(ll,ll),(ll-lt,ll)]); /*R side*/ } } n=2; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ rnau(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg); module rnaus(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd) /*uridine monophosphate (UMP); n=1 is standard, n=2 is double size; includes support, print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f,0),(6*f,4*n+g),(10*f-g,4*n+g),(10*f-g,8*n-g),(6*f,8*n-g),(6*f,12*n),(3.464*f,12*n),(0,10*n)]); /*uracil*/ translate(lx+ll/2,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*U outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(-ll,0),(ll,0),(ll,ll),(-ll,ll)]); /*top half*/ } translate(lx,ly,t) linear_extrude(lh) polygon([(0,ll/2),(lt,ll/2-0.2),(lt,ll),(0,ll)]); /*L side*/ translate(lx,ly,t) linear_extrude(lh) polygon([(ll-lt,ll/2-0.2),(ll,ll/2),(ll,ll),(ll-lt,ll)]); /*R side*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(4*n) polygon([(6*f+sd,tf+sg),(10*f+sg,tf+sg),(10*f+sg,-sg),(6*f+sd,-sg),(6*f+sd,-sg-st),(10*f+sg+st,-sg-st),(10*f+sg+st,tf+sg+st),(6*f+sd,tf+sg+st)]); /*support*/ } } n=1; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.4; /*support gap*/ sd=0.7; /*support distance*/ rnaus(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd); module rnacm(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg) /*2'-O-methylcytidine monophosphate, modified base; n=1 is standard size, n=2 is double; print with Support type=Touching buildplate & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(14*f,f),(15*f,2*f),(15*f,4*f),(14*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*2-O-methylribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,8*n+g),(10*f-g,8*n+g),(10*f-g,12*n),(3.464*f,12*n),(0,10*n)]); /*cytosine*/ translate(lx+ll/2,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*C outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(0,0),(ll,-ll),(ll,ll)]); /*R quadrant*/ } translate(lx+1.104*ll+ls,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*1st m loop*/ circle(r=ll/4-lt); /*inner circle*/ polygon([(-ll,-ll),(ll,-ll),(ll,0),(-ll,0)]); /*remove bottom*/ } translate(lx+1.604*ll-lt+ls,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*2nd loop*/ circle(r=ll/4-lt); /*inner circle*/ polygon([(-ll,-ll),(ll,-ll),(ll,0),(-ll,0)]); /*remove bottom*/ } translate(lx+0.854*ll+ls,ly,t) cube(lt,ll/2,lh); /*bar*/ translate(lx+1.354*ll-lt+ls,ly,t) cube(lt,ll/4,lh); /*center*/ translate(lx+1.854*ll-2*lt+ls,ly,t) cube(lt,ll/4,lh); /*end*/ } } n=2; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=4.5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt; /*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ rnacm(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg); module rnacms(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg,st,sg,sd) /*2'-O-methylcytidine monophosphate, modified base; n=1 is standard size, n=2 is double; includes support, print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(14*f,f),(15*f,2*f),(15*f,4*f),(14*f,5*f),(12*f,5*f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*2-O-methylribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,8*n+g),(10*f-g,8*n+g),(10*f-g,12*n),(3.464*f,12*n),(0,10*n)]); /*cytosine*/ translate(lx+ll/2,ly+ll/2,t) linear_extrude(lh) difference() {circle(r=ll/2); /*C outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(0,0),(ll,-ll),(ll,ll)]); /*R quadrant*/ } translate(lx+1.104*ll+ls,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*1st m loop*/ circle(r=ll/4-lt); /*inner circle*/ polygon([(-ll,-ll),(ll,-ll),(ll,0),(-ll,0)]); /*remove bottom*/ } translate(lx+1.604*ll-lt+ls,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*2nd loop*/ circle(r=ll/4-lt); /*inner circle*/ polygon([(-ll,-ll),(ll,-ll),(ll,0),(-ll,0)]); /*remove bottom*/ } translate(lx+0.854*ll+ls,ly,t) cube(lt,ll/2,lh); /*bar*/ translate(lx+1.354*ll-lt+ls,ly,t) cube(lt,ll/4,lh); /*center*/ translate(lx+1.854*ll-2*lt+ls,ly,t) cube(lt,ll/4,lh); /*end*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(8*n) polygon([(6*f+sd,tf+sg),(10*f+sg,tf+sg),(10*f+sg,-sg),(6*f+sd,-sg),(6*f+sd,-sg-st),(10*f+sg+st,-sg-st),(10*f+sg+st,tf+sg+st),(6*f+sd,tf+st+sg)]); /*support*/ } } n=1; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=4.5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt; /*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.4; /*support gap*/ sd=0.7; /*support distance*/ rnacms(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg,st,sg,sd); module rnai(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg) /*inosine monophosphate (IMP), modified base found mainly in tRNA; n=1 is standard size, n=2 is double; print with Support type=Touching buildplate & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(8*f,0),(8*f,4*n),(10*f-g,4*n),(10*f-g,4*n+g),(14*f-g,4*n+g),(14*f-g,8*n-g),(10*f-g,8*n-g),(10*f-g,12*n),(7.464*f,12*n),(4*f,10*n),(0,10*n)]); /*hypoxanthine*/ translate(lx+ll/2-lt/2,ly,0) cube(lt,ll,t+lh); /*I*/ } } n=2; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ rnai(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg); module rnais(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd) /*inosine monophosphate (IMP), modified base found mainly in tRNA; n=1 is standard size, n=2 is double; includes support, print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(8*f,0),(8*f,4*n),(10*f-g,4*n),(10*f-g,4*n+g),(14*f-g,4*n+g),(14*f-g,8*n-g),(10*f-g,8*n-g),(10*f-g,12*n),(7.464*f,12*n),(4*f,10*n),(0,10*n)]); /*hypoxanthine*/ translate(lx+ll/2-lt/2,ly,0) cube(lt,ll,t+lh); /*I*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(4*n-g) polygon([(8*f+sd,tf+sg),(11*f+sg,tf+sg),(11*f+sg,-sg),(8*f+sd,-sg),(8*f+sd,-sg-st),(11*f+sg+st,-sg-st),(11*f+sg+st,tf+sg+st),(8*f+sd,tf+sg+st)]); /*support1*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(4*n) polygon([(10*f+sd,tf+sg),(14*f+sg,tf+sg),(14*f+sg,-sg),(10*f+sd,-sg),(10*f+sd,-sg-st),(14*f+sg+st,-sg-st),(14*f+sg+st,tf+sg+st),(10*f+sd,tf+sg+st)]); /*support2*/ } } n=1; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.4;/*support gap*/ sd=0.7; /*support distance*/ rnais(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd); module rnam1i(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg) /*1-methylinosine monophosphate (m1IMP), modified base found in tRNA; set n=1 for standard size, n=2 for double; print with Support type=Touching buildplate & Platform adhesion type=None; July 15, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(8*f,0),(8*f,4*n),(10*f-g,4*n),(10*f-g,4*n+g),(15*f,4*n+g),(16*f,5*n+g),(16*f,7*n-g),(15*f,8*n-g),(14*f-g,8*n-g),(10*f-g,8*n-g),(10*f-g,12*n),(7.464*f,12*n),(4*f,10*n),(0,10*n)]); /*1-methylhypoxanthine*/ translate(lx+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*m 1st loop*/ circle(r=ll/4-lt); /*inner circle*/ polygon([(-ll,-ll),(ll,-ll),(ll,0),(-ll,0)]); /*remove bottom*/ } translate(lx+3*ll/4-lt,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*2nd loop*/ circle(r=ll/4-lt); /*inner circle*/ polygon([(-ll,-ll),(ll,-ll),(ll,0),(-ll,0)]); /*remove bottom*/ } translate(lx,ly,t) cube(lt,ll/2,lh); /*bar*/ translate(lx+ll/2-lt,ly,t) cube(lt,ll/4,lh); /*middle*/ translate(lx+ll-2*lt,ly,t) cube(lt,ll/4,lh); /*end*/ translate(lx+ll-lt+ls,ly,0) cube(lt,ll,t+lh); /*1*/ translate(lx+ll+2*ls,ly,0) cube(lt,ll,t+lh); /*I*/ } } n=2; /*z size, n=1 standard size,n=2 double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt; /*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ rnam1i(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg); module rnam1is(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg,st,sg,sd) /*1-methylinosine monophosphate (m1IMP), modified base found in tRNA; set n=1 for standard size, n=2 for double; support included, print with Support type=None & Platform adhesion type=None; July 15, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(8*f,0),(8*f,4*n),(10*f-g,4*n),(10*f-g,4*n+g),(15*f,4*n+g),(16*f,5*n+g),(16*f,7*n-g),(15*f,8*n-g),(14*f-g,8*n-g),(10*f-g,8*n-g),(10*f-g,12*n),(7.464*f,12*n),(4*f,10*n),(0,10*n)]); /*1-methylhypoxanthine*/ translate(lx+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*m 1st loop*/ circle(r=ll/4-lt); /*inner circle*/ polygon([(-ll,-ll),(ll,-ll),(ll,0),(-ll,0)]); /*remove bottom*/ } translate(lx+3*ll/4-lt,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*2nd loop*/ circle(r=ll/4-lt); /*inner circle*/ polygon([(-ll,-ll),(ll,-ll),(ll,0),(-ll,0)]); /*remove bottom*/ } translate(lx,ly,t) cube(lt,ll/2,lh); /*bar*/ translate(lx+ll/2-lt,ly,t) cube(lt,ll/4,lh); /*middle*/ translate(lx+ll-2*lt,ly,t) cube(lt,ll/4,lh); /*end*/ translate(lx+ll-lt+ls,ly,0) cube(lt,ll,t+lh); /*1*/ translate(lx+ll+2*ls,ly,0) cube(lt,ll,t+lh); /*I*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(4*n-g) polygon([(8*f+sd,tf+sg),(11*f+sg,tf+sg),(11*f+sg,-sg),(8*f+sd,-sg),(8*f+sd,-sg-st),(11*f+sg+st,-sg-st),(11*f+sg+st,tf+sg+st),(8*f+sd,tf+sg+st)]); /*support1*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(4*n) polygon([(10*f+sd,tf+sg),(15*f+sg,tf+sg),(15*f+sg,-sg),(10*f+sd,-sg),(10*f+sd,-sg-st),(15*f+sg+st,-sg-st),(15*f+sg+st,tf+sg+st),(10*f+sd,tf+sg+st)]); /*support2*/ } } n=1; /*z size, 1=standard size,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=f; /*letter x*/ ly=7*f; /*letter y*/ ls=1.5*lt; /*letter spacing*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.4;/*support gap*/ sd=0.7; /*support distance*/ rnam1is(n,g,t,ll,lt,lh,lx,ly,ls,k,f,tf,cg,st,sg,sd); module rnapsu(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg) /*pseudouridine monophosphate, modified base found in many RNAs; n=1 is standard, n=2 is double size; print with Support type=Touching buildplate & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,7*f-tf/2,0) rotate([0,90,0]) linear_extrude(tf) polygon([(0,0),(0,4*f),(-t,4*f),(-4*n,2*f+tf/2),(-4*n,2*f-tf/2),(-t,0)]); /*joint*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,4*n+g),(10*f-g,4*n+g),(10*f-g,8*n-g),(6*f-g,8*n-g),(6*f-g,12*n),(3.464*f,12*n),(0,10*n)]); /*uracil*/ translate(lx+ll/2,ly+ll,t) linear_extrude(lh) difference() {circle(r=ll/2); /*psi outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(-ll,0),(ll,0),(ll,ll),(-ll,ll)]); /*top half*/ } translate(lx+ll/2-lt/2,ly,t) linear_extrude(lh) polygon([(0,0),(lt,0),(lt,ll),(0,ll)]); /*bar*/ } } n=2; /*z size, 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ rnapsu(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg); module rnapsus(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd) /*pseudouridine monophosphate, modified base found in many RNAs; n=1 is standard, n=2 is double size; includes support, print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,7*f-tf/2,0) rotate([0,90,0]) linear_extrude(tf) polygon([(0,0),(0,4*f),(-t,4*f),(-4*n,2*f+tf/2),(-4*n,2*f-tf/2),(-t,0)]); /*joint*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f,0),(6*f,4*n+g),(10*f-g,4*n+g),(10*f-g,8*n-g),(6*f,8*n-g),(6*f,12*n),(3.464*f,12*n),(0,10*n)]); /*uracil*/ translate(lx+ll/2,ly+ll,t) linear_extrude(lh) difference() {circle(r=ll/2); /*psi outer circle*/ circle(r=ll/2-lt); /*inner circle*/ polygon([(-ll,0),(ll,0),(ll,ll),(-ll,ll)]); /*top half*/ } translate(lx+ll/2-lt/2,ly,t) linear_extrude(lh) polygon([(0,0),(lt,0),(lt,ll),(0,ll)]); /*bar*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(4*n) polygon([(6*f+sd,tf+sg),(10*f+sg,tf+sg),(10*f+sg,-sg),(6*f+sd,-sg),(6*f+sd,-sg-st),(10*f+sg+st,-sg-st),(10*f+sg+st,tf+sg+st),(6*f+sd,tf+sg+st)]); /*support*/ } } n=1; /*z size 1=standard,2=double*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.4; /*support gap*/ sd=0.7; /*support distance*/ rnapsus(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd); module rnat(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg) /*ribosylthymine monophosphate = 5-methyluridine monophosphate, n=1 is standard size, n=2 is double; modified nucleotide found in tRNA; print with Support type=Touching buildplate & Platform adhesion type=None; July 22, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,4*n+g),(10*f-g,4*n+g),(10*f-g,8*n-g),(6*f-g,8*n-g),(6*f-g,12*n),(3.464*f,12*n),(2.464*f,13.732*n),(1.098*f,14.098*n),(-0.634*f,13.098*n),(-f,11.732*n),(0,10*n)]); /*thymine*/ translate(lx+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*r outer circle*/ circle(r=ll/4-lt); /*inner circle*/ polygon([(-ll,0),(0,0),(ll,ll),(ll,-ll),(-ll,-ll)]); /*remove bottom*/ } translate(lx,ly,0) cube(lt,ll/2,t+lh); /*bar*/ translate(lx+0.427*ll,ly,t) linear_extrude(lh) polygon([(ll/2-lt/2,0),(ll/2+lt/2,0),(ll/2+lt/2,ll-lt),(ll,ll-lt),(ll,ll),(0,ll),(0,ll-lt),(ll/2-lt/2,ll-lt)]); /*T*/ } } n=2; /*z size*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ rnat(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg); module rnats(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd) /*ribosylthymine monophosphate = 5-methyluridine monophosphate, n=1 is standard size, n=2 is double; modified nucleotide found in tRNA; includes support, print with Support type=None & Platform adhesion type=None; July 11, 2019*/ {union() {linear_extrude(t) difference() {polygon([(0,0),(2.5*f,0),(2.5*f,3*f),(7.5*f,3*f),(7.5*f,0),(10*f,0),(10*f,f),(12*f,f),(12*f,7*f-tf/2),(16*f-tf,9*f-tf),(16*f-tf,9*f),(12*f,11*f-tf/2),(7*f,14*f),(3*f-cg,14*f),(3*f-cg,18*f),(0,18*f)]); /*ribose*/ translate(5*f,3*f) circle(r=3*f); /*socket*/ } translate(1.5*f-cg/2,18.5*f,0) cylinder(r=3*f-cg,h=t); /*knob(phosphate)*/ translate(12*f-tf,9*f,0) rotate([90,0,0]) linear_extrude(tf) polygon([(0,0),(6*f-g,0),(6*f-g,4*n+g),(10*f-g,4*n+g),(10*f-g,8*n-g),(6*f-g,8*n-g),(6*f-g,12*n),(3.464*f,12*n),(2.464*f,13.732*n),(1.098*f,14.098*n),(-0.634*f,13.098*n),(-f,11.732*n),(0,10*n)]); /*thymine*/ translate(lx+ll/4,ly+ll/4,t) linear_extrude(lh) difference() {circle(r=ll/4); /*r outer circle*/ circle(r=ll/4-lt); /*inner circle*/ polygon([(-ll,0),(0,0),(ll,ll),(ll,-ll),(-ll,-ll)]); /*remove bottom*/ } translate(lx,ly,0) cube(lt,ll/2,t+lh); /*bar*/ translate(lx+0.427*ll,ly,t) linear_extrude(lh) polygon([(ll/2-lt/2,0),(ll/2+lt/2,0),(ll/2+lt/2,ll-lt),(ll,ll-lt),(ll,ll),(0,ll),(0,ll-lt),(ll/2-lt/2,ll-lt)]); /*T*/ translate(12*f-tf-g,9*f-tf,0) linear_extrude(4*n) polygon([(6.7*f,tf+sg),(10*f+sg,tf+sg),(10*f+sg,-sg),(6.7*f,-sg),(6.7*f,-sg-st),(10*f+sg+st,-sg-st),(10*f+sg+st,tf+sg+st),(6.7*f,tf+sg+st)]); /*support*/ } } n=1; /*z size*/ f=n; /*x & y size, normally same as n*/ g=0.25; /*gap*/ t=1.5*n; /*z thickness*/ tf=t; /*x & y thickness, normally same as t*/ ll=5*f; /*letter size*/ lt=0.65*f; /*letter thickness*/ lh=0.7; /*letter height*/ lx=1.5*f; /*letter x*/ ly=7*f; /*letter y*/ k=1.118; /*sqrt(5)/2*/ cg=0.12*f; /*circle gap*/ st=0.6; /*support thickness*/ sg=0.3; /*support gap*/ sd=0.7; /*support distance*/ rnats(n,g,t,ll,lt,lh,lx,ly,k,f,tf,cg,st,sg,sd); test objects: module testcube(R) /*this just prints a 5 mm cube; good test & demo program that only takes a couple minutes to print*/ cube(R); R=5; cube(R); module calsquare(D) /*this prints 4 squares at the corners of a square bed; if the distance between adjacent squares is not the same the printer is miscalibrated; if the diagonal distances are not the same the x & y axes are not perpendicular*/ {union() {cube(5,5,1); translate(D,0,0) cube(5,5,1); translate(0,D,0) cube(5,5,1); translate(D,D,0) cube(5,5,1); } } D=250; calsquare(D);