(*makeoneelementarypartofthesignpost*)post[α_,dir_,ortho_,size_]:=Module[{dir1,orthoh,ortho1,bi,p1,p2,p3,p4,p5,p6,p7,p8,p9,s1=1,s2=0.3,s3=0.2,s4=1.2,h1,h2,h3,h4,h5},(*directionthenewsignwillpointto*)dir1=Normalize[dir];(*firstorthogonaldirection*)ortho1=Normalize[Normalize[ortho]+Normalize[Cross[dir,ortho]]];(*secondorthogonaldirection*)bi=Normalize[Cross[dir1,ortho1]];h1=s2sizeortho1;h2=s2sizebi;h3=s3sizeortho1;h4=s3sizebi;h5=s1sizedir1;p1=α+h1;p2=α+h2;p3=α-h1;p4=α-h2;p5=α+h3+h5;p6=α+h4+h5;p7=α-h3+h5;p8=α-h4+h5;p9=α+s4sizedir1;(*polygonsformingthenextgeneration*)Polygon/@{{p1,p4,p8,p5},{p4,p3,p7,p8},{p3,p2,p6,p7},{p2,p1,p5,p6},{p5,p9,p8},{p8,p7,p9},{p6,p7,p9},{p5,p6,p9}}](*thestartpart*)postHierarchy[0]={post[{0.,0.,0.},{0.,0.,1.},{1.,0.,0.},1]};(*addnewpartsatthesides*)postHierarchy[i_]:=postHierarchy[i]=(post@@newData[#,0.4^i])&/@Flatten[(Take[#,4]&/@postHierarchy[i-1])];(*iteratetheprocess*)newData[poly_Polygon,size_]:=Module[{f=poly[[1]],ortho,dir,p},ortho=(f[[1]]+f[[2]])/2-(f[[3]]+f[[4]])/2;p=(f[[3]]+f[[4]])/2+0.2ortho;dir=-Cross[f[[1]]-f[[2]],f[[1]]-f[[4]]];{p,dir,ortho,size}]