summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/profcollege/PfCPavage.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2023-05-02 20:28:48 +0000
committerKarl Berry <karl@freefriends.org>2023-05-02 20:28:48 +0000
commit0d88fa810742d90f84743ad83193ea4ab3c38251 (patch)
tree4dcde1706412e58df3686b93ab2d6c49e686291b /Master/texmf-dist/tex/latex/profcollege/PfCPavage.tex
parentb946d2b6f571f16ffa402663a474fafe1f501d4e (diff)
profcollege (2may23)
git-svn-id: svn://tug.org/texlive/trunk@66990 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/profcollege/PfCPavage.tex')
-rw-r--r--Master/texmf-dist/tex/latex/profcollege/PfCPavage.tex1216
1 files changed, 1216 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/profcollege/PfCPavage.tex b/Master/texmf-dist/tex/latex/profcollege/PfCPavage.tex
new file mode 100644
index 00000000000..245afb0593b
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/profcollege/PfCPavage.tex
@@ -0,0 +1,1216 @@
+%%%
+% Pavage
+%%%
+\setKVdefault[Pavage]{%
+ Before=false,
+ Niveau=3,
+ Couleur=white,
+ Backgrounds=false,
+ Numerotation=false,
+ Depart=0,
+ Complete=false,
+ After=false,
+ Demo=false,
+ Regulier=false,
+ Cote=1,
+ Lignes=4,
+ Colonnes=4,
+ SemiRegulier=false,
+ Reseau=false,
+ Basei={u*(0.75,0)},
+ Basej={u*(0,0.5)},
+ Quadrilatere=false,
+ Escher=false,
+ Rayon=1,
+ Epaisseur=1,
+ Position=0.5,
+ Ecart=10,
+ Colore=false,
+ CouleurUn=white,
+ CouleurDeux=white,
+ CouleurTrois=white,
+ CouleurQuatre=white
+}%
+\defKV[Pavage]{Motif=\setKV[Pavage]{Before}}%
+\defKV[Pavage]{Traces=\setKV[Pavage]{After}}%
+\defKV[Pavage]{ArrierePlan=\setKV[Pavage]{Backgrounds}}%
+\defKV[Pavage]{CouleurUn=\setKV[Pavage]{Colore}}%
+\defKV[Pavage]{CouleurDeux=\setKV[Pavage]{Colore}}%
+\defKV[Pavage]{CouleurTrois=\setKV[Pavage]{Colore}}%
+\defKV[Pavage]{CouleurQuatre=\setKV[Pavage]{Colore}}%
+
+\def\MPPavageBase{%
+ boolean Before,Numerote,Complete,Backgrounds,After,Demo;
+ Before=\useKV[Pavage]{Before};
+ After=\useKV[Pavage]{After};
+ Numerote=\useKV[Pavage]{Numerotation};
+ Complete=\useKV[Pavage]{Complete};
+ Backgrounds=\useKV[Pavage]{Backgrounds};
+ Demo=\useKV[Pavage]{Demo};
+ color ColPavage,ColArrierePlan;
+ ColPavage=\useKV[Pavage]{Couleur};
+ ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi;
+ Niveau=\useKV[Pavage]{Niveau};
+ Depart=\useKV[Pavage]{Depart};
+ Epaisseur=\useKV[Pavage]{Epaisseur};
+ vardef pavages(expr chemin,tour,coul)=
+ if Backgrounds:
+ fill CadrePavage withcolor ColArrierePlan;
+ fi;
+ save Base;
+ picture Base;
+ pair A,B,C,D;
+ A=u*(0,0);
+ B=u*(1,0);
+ C=u*(1,1);
+ D=u*(0,1);
+ path especes;
+ especes=chemin--rotation(chemin,B,-90)--reverse(rotation(symetrie(chemin,B,C),B,-90))--rotation(chemin,B,90)--cycle;
+ if tour=0:
+ Base=image(
+ trace chemin;
+ );
+ elseif tour=1:
+ Base=image(
+ fill especes withcolor coul;
+ trace especes;
+ A:=A shifted(u*(0,-1));
+ B:=B shifted(u*(1,-1));
+ C:=C shifted(u*(1,0));
+ );
+ elseif tour>=2:
+ Base=pavages(chemin,tour-1,coul);
+ Base:=image(
+ trace Base;
+ trace symetrie(Base,B,C);
+ trace rotation(symetrie(Base,B,C),B,-90);
+ trace rotation(Base,B,90);
+ A:=A shifted(u*(0,-(2**(tour-1))));
+ B:=B shifted(u*(2**(tour-1),-(2**(tour-1))));
+ C:=C shifted(u*(2**(tour-1),0));
+ );
+ fi;
+ Base
+enddef;
+%
+vardef pavagescar(expr chemin,tour,coul)=
+ save BaseCar;
+ picture BaseCar;
+ pair A,B,C,D;
+ A=u*(0,0);
+ B=u*(1,0);
+ C=u*(1,1);
+ D=u*(0,1);
+ if tour=0:
+ BaseCar=image(
+ trace chemin;
+ trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris;
+ );
+ elseif tour=1:
+ BaseCar=image(
+ trace chemin;
+ drawoptions(dashed evenly);
+ trace rotation(chemin,B,-90);
+ trace reverse(rotation(symetrie(chemin,B,C),B,-90));
+ trace rotation(chemin,B,90);
+ drawoptions();
+ A:=A shifted(u*(0,-1));
+ B:=B shifted(u*(1,-1));
+ C:=C shifted(u*(1,0));
+ trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris;
+ trace iso(A,D)--iso(B,C) dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris;
+ trace iso(A,B)--iso(C,D) dashed dashpattern(on12bp off6bp on3bp off 6bp) withcolor gris;
+ );
+ elseif tour>=2:
+ BaseCar=image(
+ trace pavages(chemin,tour-1,coul);
+ trace symetrie(pavages(chemin,tour-1,coul),B,C);%coul+0.5blanc
+ trace rotation(symetrie(pavages(chemin,tour-1,coul),B,C),B,-90);
+ trace rotation(pavages(chemin,tour-1,coul),B,90);
+ A:=A shifted(u*(0,-(2**(tour-1))));
+ B:=B shifted(u*(2**(tour-1),-(2**(tour-1))));
+ C:=C shifted(u*(2**(tour-1),0));
+ );
+ fi;
+ BaseCar
+ enddef;
+ %
+ vardef CadrePavage=
+ u*(0,1)--u*(0,-(2**Niveau-1))--u*(2**Niveau,-(2**Niveau-1))--u*(2**(Niveau),1)--cycle
+ enddef;
+ %
+ vardef Numerotation=
+ n:=Depart;
+ pair B;
+ B=u*(1,0);
+ if Complete:
+ for k=0 upto 2**(Niveau)-2:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ if (k mod 2)=0:
+ label(TEX(decimal(n)),B+u*(2l,-k));
+ else:
+ if l<(2**(Niveau-1))-1:
+ label(TEX(decimal(n)),B+u*(2l+1,-k));
+ else:
+ n:=n-1;
+ fi;
+ fi;
+ endfor;
+ endfor;
+ else:
+ for k=0 upto (2**(Niveau-1))-1:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ label(TEX(decimal(n)),B+2u*(l,-k));
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ %
+ vardef NumerotationPDF=
+ n:=Depart;
+ pair B;
+ B=u*(1,0);
+ if Complete:
+ for k=0 upto 2**(Niveau)-2:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ if (k mod 2)=0:
+ label(TEX(decimal(n)),B+u*(2l,-k));
+ else:
+ if l<(2**(Niveau-1))-1:
+ label(LATEX(decimal(n)),B+u*(2l+1,-k));
+ fi;
+ fi;
+ endfor;
+ endfor;
+ else:
+ for k=0 upto (2**(Niveau-1))-1:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ label(LATEX(decimal(n)),B+2u*(l,-k));
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ %
+ vardef PlacePointSupport=
+ n:=Depart;
+ pair K[],L[],M[],N[];
+ K[0]=u*(0,0);
+ M[0]=u*(1,1);
+ if Complete:
+ for k=0 upto 2**(Niveau)-2:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ if (k mod 2)=0:
+ K[n]:=K0+u*(2l,-k);
+ M[n]:=M0+u*(2l,-k);
+ else:
+ if l<(2**(Niveau-1))-1:
+ K[n]:=K0+u*(2l+1,-k);
+ M[n]:=M0+u*(2l+1,-k);
+ else:
+ n:=n-1;
+ fi;
+ fi;
+ endfor;
+ endfor;
+ else:
+ for k=0 upto (2**(Niveau-1))-1:
+ for l=0 upto (2**(Niveau-1))-1:
+ n:=n+1;
+ K[n]=K[0]+2u*(l,-k);
+ M[n]=M[0]+2u*(l,-k);
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ vardef EffectuerTraces=
+ \useKV[Pavage]{Traces}
+ enddef;
+}%
+
+\def\MPReseauRegulier{%
+ boolean Before,Numerote,Backgrounds,After;
+ Before=\useKV[Pavage]{Before};
+ After=\useKV[Pavage]{After};
+ Numerote=\useKV[Pavage]{Numerotation};
+ Backgrounds=\useKV[Pavage]{Backgrounds};
+ color ColPavage,ColArrierePlan;
+ ColPavage=\useKV[Pavage]{Couleur};
+ ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi;
+ Cote=\useKV[Pavage]{Cote};
+ Lignes=\useKV[Pavage]{Lignes};
+ Colonnes=\useKV[Pavage]{Colonnes};
+ Niveau=\useKV[Pavage]{Niveau};
+ Depart=\useKV[Pavage]{Depart};
+ Epaisseur=\useKV[Pavage]{Epaisseur};
+ pair A[];
+ A1=(0,0);
+ A2-A1=u*Cote*(1,0);
+ vardef PavageRegulier(expr Niv)=
+ picture Retour;
+ if Niv=3:
+ A3=rotation(A2,A1,60);
+ path TriBase,CadrePavage;
+ TriBase=polygone(A1,A2,A3);
+ CadrePavage=polygone(A1,Cote*cm*(Colonnes,0),Cote*cm*(Colonnes,0.5*sqrt(3)*Lignes),Cote*cm*(0,0.5*sqrt(3)*Lignes));
+ Retour=image(
+ fill CadrePavage withcolor ColPavage;
+ for k=0 upto Lignes:
+ for l=-1 upto Colonnes+1:
+ if k mod 2=0:
+ trace TriBase shifted (Cote*cm*(l,0.5*sqrt(3)*k));
+ else:
+ trace TriBase shifted (Cote*cm*(l+0.5,0.5*sqrt(3)*k));
+ fi;
+ endfor;
+ endfor;
+ clip currentpicture to CadrePavage;
+ trace CadrePavage withpen pencircle scaled Epaisseur;
+ );
+ elseif Niv=4:
+ A3=rotation(A1,A2,-90);
+ A4-A3=A1-A2;
+ path QuadriBase,CadrePavage;
+ QuadriBase=polygone(A1,A2,A3,A4);
+ CadrePavage=polygone(A1,Cote*cm*(Colonnes,0),Cote*cm*(Colonnes,Lignes),Cote*cm*(0,Lignes));
+ Retour=image(
+ fill CadrePavage withcolor ColPavage;
+ for k=0 upto Lignes-1:
+ for l=0 upto Colonnes-1:
+ trace QuadriBase shifted (Cote*cm*(l,k));
+ endfor;
+ endfor;
+ clip currentpicture to CadrePavage;
+ trace CadrePavage withpen pencircle scaled Epaisseur;
+ );
+ elseif Niv=6:
+ A3=rotation(A1,A2,-120);
+ A4=rotation(A2,A3,-120);
+ A5=rotation(A3,A4,-120);
+ A6=rotation(A4,A5,-120);
+ path HexaBase,CadrePavage;
+ HexaBase=polygone(A1,A2,A3,A4,A5,A6);
+ CadrePavage=polygone(Cote*cm*(1,0),Cote*cm*(3*Colonnes,0),Cote*cm*(3*Colonnes,sqrt(3)*(Lignes-1)),Cote*cm*(1,sqrt(3)*(Lignes-1)));
+ Retour=image(%
+ fill CadrePavage withcolor ColPavage;
+ for k=-1 upto 2*Lignes+1:
+ for l=-1 upto Colonnes+1:
+ if k mod 2=1:
+ trace HexaBase shifted (Cote*cm*(3*l,0.5*sqrt(3)*k));
+ else:
+ trace HexaBase shifted (Cote*cm*(1.5+3*l,sqrt(3)+0.5*sqrt(3)*k));
+ fi;
+ endfor;
+ endfor;
+ clip currentpicture to CadrePavage;
+ trace CadrePavage withpen pencircle scaled Epaisseur;
+ );
+ fi;
+ Retour
+ enddef;
+ %
+ vardef PlacePointSupport=
+ n:=Depart;
+ pair B;pair C;pair vdepla;
+ pair Hexa[],Hexb[],Hexc[],Hexd[],Hexe[],Hexf[];
+ pair Cara[],Carb[],Carc[],Card[];
+ pair Tria[],Trib[],Tric[];
+ path Maille[];
+ if Niveau=3:
+ B=iso(A1,A2,A3);
+ C=symetrie(B,A2,A3);
+ for k=1 upto Lignes:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ if k mod 2=1:
+ nbv:=(k-1)*1.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ else:
+ nbv:=(k-1)*1.5+0.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B));
+ fi;
+ fi;
+ if (n mod 2)=0:
+ Tria[n]=rotation(A1,B,180) shifted vdepla;
+ Trib[n]=rotation(A2,B,180) shifted vdepla;
+ Tric[n]=rotation(A3,B,180) shifted vdepla;
+ else:
+ Tria[n]-A1=vdepla;
+ Trib[n]-A2=vdepla;
+ Tric[n]-A3=vdepla;
+ fi;
+ Maille[n]=polygone(Tria[n],Trib[n],Tric[n]);
+ endfor;
+ endfor;
+ elseif Niveau=4:
+ B=iso(A1,A2,A3,A4);
+ for k=1 upto Lignes:
+ for l=1 upto Colonnes:
+ n:=n+1;
+ vdepla:=Cote*cm*((l-1),(k-1));
+ Cara[n]-A1=vdepla;
+ Carb[n]-A2=vdepla;
+ Carc[n]-A3=vdepla;
+ Card[n]-A4=vdepla;
+ Maille[n]=polygone(Cara[n],Carb[n],Carc[n],Card[n]);
+ endfor;
+ endfor;
+ elseif Niveau=6:
+ B=iso(A1,A2,A3,A4,A5,A6);
+ C=symetrie(B,A3,A4);
+ for k=1 upto Lignes-1:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ nbv:=(k-1)*3;
+ if l mod 2=1:
+ vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ if k=Lignes-1:
+ if l mod 2=1:
+ Hexa[n]-A1=vdepla;
+ Hexb[n]-A2=vdepla;
+ Hexc[n]-A3=vdepla;
+ Hexd[n]-A4=vdepla;
+ Hexe[n]-A5=vdepla;
+ Hexf[n]-A6=vdepla;
+ else:
+ n:=n-1;
+ fi;
+ else:
+ Hexa[n]-A1=vdepla;
+ Hexb[n]-A2=vdepla;
+ Hexc[n]-A3=vdepla;
+ Hexd[n]-A4=vdepla;
+ Hexe[n]-A5=vdepla;
+ Hexf[n]-A6=vdepla;
+ fi;
+ Maille[n]:=polygone(Hexa[n],Hexb[n],Hexc[n],Hexd[n],Hexe[n],Hexf[n]);
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ %
+ vardef Numerotation=
+ n:=Depart;
+ pair B;pair C;pair vdepla;
+ if Niveau=3:
+ B=iso(A1,A2,A3);
+ C=symetrie(B,A2,A3);
+ for k=1 upto Lignes:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ if k mod 2=1:
+ nbv:=(k-1)*1.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ else:
+ nbv:=(k-1)*1.5+0.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B));
+ fi;
+ fi;
+ label(TEX(decimal(n)),B shifted vdepla);
+ endfor;
+ endfor;
+ elseif Niveau=4:
+ B=iso(A1,A2,A3,A4);
+ for k=1 upto Lignes:
+ for l=1 upto Colonnes:
+ n:=n+1;
+ vdepla:=Cote*cm*((l-1),(k-1));
+ label(TEX(decimal(n)),B shifted vdepla);
+ endfor;
+ endfor;
+ elseif Niveau=6:
+ B=iso(A1,A2,A3,A4,A5,A6);
+ C=symetrie(B,A3,A4);
+ for k=1 upto Lignes-1:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ nbv:=(k-1)*3;
+ if l mod 2=1:
+ vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ if k=Lignes-1:
+ if l mod 2=1:
+ label(TEX(decimal(n)),B shifted vdepla);
+ else:
+ n:=n-1;
+ fi;
+ else:
+ label(TEX(decimal(n)),B shifted vdepla);
+ fi;
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ %
+ vardef NumerotationPDF=
+ n:=Depart;
+ pair B;pair C;pair vdepla;
+ if Niveau=3:
+ B=iso(A1,A2,A3);
+ C=symetrie(B,A2,A3);
+ for k=1 upto Lignes:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ if k mod 2=1:
+ nbv:=(k-1)*1.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ else:
+ nbv:=(k-1)*1.5+0.5;
+ if l mod 2=1:
+ vdepla:=(Cote*cm*((l-1) div 2),nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(Cote*cm*((l-1) div 2),(nbv*Cote*cm*sqrt(3)/3))+(xpart(C-B),-ypart(C-B));
+ fi;
+ fi;
+ label(LATEX(decimal(n)),B shifted vdepla);
+ endfor;
+ endfor;
+ elseif Niveau=4:
+ B=iso(A1,A2,A3,A4);
+ for k=1 upto Lignes:
+ for l=1 upto Colonnes:
+ n:=n+1;
+ vdepla:=Cote*cm*((l-1),(k-1));
+ label(LATEX(decimal(n)),B shifted vdepla);
+ endfor;
+ endfor;
+ elseif Niveau=6:
+ B=iso(A1,A2,A3,A4,A5,A6);
+ C=symetrie(B,A3,A4);
+ for k=1 upto Lignes-1:
+ for l=1 upto 2*Colonnes-1:
+ n:=n+1;
+ nbv:=(k-1)*3;
+ if l mod 2=1:
+ vdepla:=(1.5*Cote*cm*(l-1)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3);
+ else:
+ vdepla:=(1.5*Cote*cm*(l-2)+1.5*Cote*cm,nbv*Cote*cm*sqrt(3)/3)+(C-B);
+ fi;
+ if k=Lignes-1:
+ if l mod 2=1:
+ label(LATEX(decimal(n)),B shifted vdepla);
+ else:
+ n:=n-1;
+ fi;
+ else:
+ label(LATEX(decimal(n)),B shifted vdepla);
+ fi;
+ endfor;
+ endfor;
+ fi;
+ enddef;
+ vardef EffectuerTraces=
+ \useKV[Pavage]{Traces}
+ enddef;
+}%
+
+\def\MPReseauCode{%
+ boolean Before,Numerote,Backgrounds,After;
+ Before=\useKV[Pavage]{Before};
+ After=\useKV[Pavage]{After};
+ Numerote=\useKV[Pavage]{Numerotation};
+ Backgrounds=\useKV[Pavage]{Backgrounds};
+ color ColPavage,ColArrierePlan;
+ ColPavage=\useKV[Pavage]{Couleur};
+ ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi;
+ Cote=\useKV[Pavage]{Cote};
+ Lignes=\useKV[Pavage]{Lignes};
+ Colonnes=\useKV[Pavage]{Colonnes};
+ Niveau=\useKV[Pavage]{Niveau};
+ Depart=\useKV[Pavage]{Depart};
+ Epaisseur=\useKV[Pavage]{Epaisseur};
+ pair basei,basej;
+ basei=\useKV[Pavage]{Basei};
+ basej=\useKV[Pavage]{Basej};
+ vardef PavageReseau=
+ for k=0 upto Lignes-1:
+ for l=0 upto Colonnes -1:
+ trace Motif shifted (k*basei+l*basej);
+ endfor;
+ endfor;
+ enddef;
+ vardef Numerotation=
+ n:=Depart;
+ k:=0;
+ pair A[],B[];
+ A[0]=point(0) of Motif;
+ B[0]=A[0];
+ forever:
+ k:=k+1;
+ A[k]=point(k) of Motif;
+ B[0]:=B[0]+A[k];
+ exitif A[k]=A[0];
+ endfor;
+ B[0]:=B[0]/k;
+ for k=0 upto Lignes-1:
+ for l=0 upto Colonnes -1:
+ n:=n+1;
+ label(decimal(n),B[0] shifted(k*basei+l*basej));
+ endfor;
+ endfor;
+ enddef;
+ vardef PlacePointSupport=
+ pair M[][];
+ path Maille[];
+ n:=Depart;
+ k:=0;
+ pair A[],B[];
+ A[0]=point(0) of Motif;
+ forever:
+ k:=k+1;
+ A[k]=point(k) of Motif;
+ B[0]:=B[0]+A[k];
+ exitif A[k]=A[0];
+ endfor;
+ B[0]:=B[0]/k;
+ NbSommet:=k;
+ for k=0 upto Lignes-1:
+ for l=0 upto Colonnes -1:
+ n:=n+1;
+ for m=1 upto NbSommet:
+ M[n][m]=A[m] shifted (k*basei+l*basej);
+ endfor;
+ Maille[n]=polygone(M[n][1] for r=2 upto NbSommet:,M[n][r] endfor);
+ endfor;
+ endfor;
+ enddef;
+ vardef EffectuerTraces=
+ \useKV[Pavage]{Traces}
+ enddef;
+}%
+
+\def\MPPeriodiqueCode{%
+ boolean Before,Numerote,Backgrounds,After;
+ Before=\useKV[Pavage]{Before};
+ After=\useKV[Pavage]{After};
+ Numerote=\useKV[Pavage]{Numerotation};
+ Backgrounds=\useKV[Pavage]{Backgrounds};
+ color ColPavage,ColArrierePlan;
+ ColPavage=\useKV[Pavage]{Couleur};
+ ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi;
+ Cote=\useKV[Pavage]{Cote};
+ Lignes=\useKV[Pavage]{Lignes};
+ Colonnes=\useKV[Pavage]{Colonnes};
+ Niveau=\useKV[Pavage]{Niveau};
+ Depart=\useKV[Pavage]{Depart};
+ Epaisseur=\useKV[Pavage]{Epaisseur};
+ pair basei,basej;
+ vardef PavagePeriodique=
+ basei=iso(A1,A2)-iso(A1,A0);
+ basej=iso(A0,A3)-iso(A1,A0);
+ path CadrePavage;
+ pair Cpa[];
+ Cpa1=(0,ypart(-2*basej));
+ Cpa2=(xpart(2*Colonnes*basei),ypart(-2*basej));
+ Cpa3=(xpart(2*Colonnes*basei),ypart(2*Lignes*basej));
+ Cpa4=(0,ypart(2*Lignes*basej));
+ CadrePavage=Cpa1--Cpa2--Cpa3--Cpa4--cycle;
+ picture BlocContour,BlocPavage;
+ BlocContour=image(
+ for k=-Lignes upto Lignes+1:
+ for l=-1 upto Colonnes+1:
+ if ColPavage<>white:
+ fill Motif shifted (2*l*basei+2*k*basej) withcolor ColPavage;
+ fill symetrie(Motif,iso(A1,A2)) shifted (2*l*basei+2*k*basej) withcolor ColPavage;
+ fi;
+ trace Motif shifted (2*l*basei+2*k*basej);
+ trace symetrie(Motif,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ endfor;
+ endfor;
+ drawoptions();
+ );
+ BlocPavage=image(
+ trace BlocContour;
+ clip currentpicture to CadrePavage;
+ trace CadrePavage withpen pencircle scaled Epaisseur;
+ );
+ BlocPavage
+ enddef;
+ vardef Numerotation=
+ n:=-1;
+ pair ISO;
+ for k=-Lignes upto Lignes+1:
+ for l=-1 upto Colonnes+1:
+ n:=n+2;
+ ISO:=B[0] shifted (2*l*basei+2*k*basej);
+ if (xpart(ISO)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISO)>ypart(Cpa1+u*(0.2,0))) and (ypart(ISO)<ypart(Cpa4-u*(0.2,0))):
+ label(TEX(decimal(n)),ISO);
+ else:
+ n:=n-2;
+ fi;
+ endfor;
+ endfor;
+ %2eme tour
+ n:=-1;
+ for k=-Lignes upto Lignes+1:
+ for l=-1 upto Colonnes+1:
+ n:=n+2;
+ ISO:=symetrie(B[0],iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ if (xpart(ISO)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISO)>ypart(Cpa1+u*(0,0.2))) and (ypart(ISO)<ypart(Cpa4-u*(0,0.2))):
+ label(TEX(decimal(n+1)),ISO);
+ else:
+ n:=n-2;
+ fi;
+ endfor;
+ endfor;
+ enddef;
+ vardef PlacePointSupport=
+ path Maille[];
+ pair QuadA[],QuadB[],QuadC[],QuadD[];
+ n:=-1;
+ pair ISO;
+ for k=-Lignes upto Lignes+1:
+ for l=-1 upto Colonnes+1:
+ n:=n+2;
+ ISO:=B[0] shifted (2*l*basei+2*k*basej);
+ if (xpart(ISO)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISO)>ypart(Cpa1+u*(0,0.2))) and (ypart(ISO)<ypart(Cpa4-u*(0,0.2))):
+ QuadA[n]=A0 shifted (2*l*basei+2*k*basej);
+ QuadB[n]=A1 shifted (2*l*basei+2*k*basej);
+ QuadC[n]=A2 shifted (2*l*basei+2*k*basej);
+ QuadD[n]=A3 shifted (2*l*basei+2*k*basej);
+ Maille[n]=polygone(QuadA[n],QuadB[n],QuadC[n],QuadD[n]);
+ else:
+ n:=n-2;
+ fi;
+ endfor;
+ endfor;
+ %2eme tour
+ n:=-1;
+ for k=-Lignes upto Lignes+1:
+ for l=-1 upto Colonnes+1:
+ n:=n+2;
+ ISO:=symetrie(B[0],iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ if (xpart(ISO)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISO)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISO)>ypart(Cpa1+u*(0,0.2))) and (ypart(ISO)<ypart(Cpa4-u*(0,0.2))):
+ QuadA[n+1]=symetrie(A0,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ QuadB[n+1]=symetrie(A1,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ QuadC[n+1]=symetrie(A2,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ QuadD[n+1]=symetrie(A3,iso(A1,A2)) shifted (2*l*basei+2*k*basej);
+ Maille[n+1]=polygone(QuadA[n+1],QuadB[n+1],QuadC[n+1],QuadD[n+1]);
+ else:
+ n:=n-2;
+ fi;
+ endfor;
+ endfor;
+ enddef;
+ vardef EffectuerTraces=
+ \useKV[Pavage]{Traces}
+ enddef;
+}%
+
+\def\MPPavageEscherCode{%
+ boolean Before,Numerote,Backgrounds,After,Colore;
+ Before=\useKV[Pavage]{Before};
+ After=\useKV[Pavage]{After};
+ Numerote=\useKV[Pavage]{Numerotation};
+ Backgrounds=\useKV[Pavage]{Backgrounds};
+ Colore=\useKV[Pavage]{Colore};
+ color ColPavage,ColArrierePlan,CouleurUn,CouleurDeux,CouleurTrois,CouleurQuatre;
+ if Colore:
+ CouleurUn=\useKV[Pavage]{CouleurUn};
+ CouleurDeux=\useKV[Pavage]{CouleurDeux};
+ CouleurTrois=\useKV[Pavage]{CouleurTrois};
+ CouleurQuatre=\useKV[Pavage]{CouleurQuatre};
+ fi;
+ ColPavage=\useKV[Pavage]{Couleur};
+ ColArrierePlan=if Backgrounds:\useKV[Pavage]{ArrierePlan} else:ColPavage fi;
+ Cote=\useKV[Pavage]{Cote};
+ Rayon=\useKV[Pavage]{Rayon};
+ Lignes=\useKV[Pavage]{Lignes};
+ Colonnes=\useKV[Pavage]{Colonnes};
+ Niveau=\useKV[Pavage]{Niveau};
+ Depart=\useKV[Pavage]{Depart};
+ Ecart=\useKV[Pavage]{Ecart};
+ Position=\useKV[Pavage]{Position};
+ Epaisseur=\useKV[Pavage]{Epaisseur};
+ pair basei,basej;
+ picture Motif;
+ vardef PavageEscher=
+ path cc;
+ cc=cercles((0,0),u*Rayon);
+ if Niveau=3:
+ pair O[];
+ O1=pointarc(cc,0);
+ O3=pointarc(cc,120);
+ O5=pointarc(cc,240);
+ O2=Position[O3,O1]+Ecart*unitvector((O3-O1) rotated -90);
+ O4=rotation(O2,O3,-120);
+ O6=rotation(O4,O5,-120);
+ picture Motif;
+ Motif=image(
+ if Colore:
+ if known CouleurUn: fill polygone(O1,O2,O3,O4,O5,O6) withcolor CouleurUn fi;
+ if known CouleurDeux: fill rotation(polygone(O1,O2,O3,O4,O5,O6),O1,120) withcolor CouleurDeux fi;
+ if known CouleurTrois:fill rotation(polygone(O1,O2,O3,O4,O5,O6),O1,-120) withcolor CouleurTrois fi;
+ fi;
+ trace polygone(O1,O2,O3,O4,O5,O6);
+ trace rotation(polygone(O1,O2,O3,O4,O5,O6),O1,120);
+ trace rotation(polygone(O1,O2,O3,O4,O5,O6),O1,-120);
+ );
+ basei=(rotation(O2,O1,-120)-O4);
+ basej:=(rotation(O5,O1,-120)-O5);
+ elseif Niveau=4:
+ pair O[];
+ O1=pointarc(cc,0);
+ O3=pointarc(cc,90);
+ O5=pointarc(cc,180);
+ O7=pointarc(cc,270);
+ O2=Position[O3,O1]+Ecart*unitvector((O3-O1) rotated -90);
+ O4=rotation(O2,O3,-90);
+ O6=rotation(O4,O5,-90);
+ O8=rotation(O6,O7,-90);
+ picture Motif;
+ Motif=image(
+ if Colore:
+ if known CouleurUn: fill polygone(O1,O2,O3,O4,O5,O6,O7,O8) withcolor CouleurUn fi;
+ if known CouleurDeux: fill rotation(polygone(O1,O2,O3,O4,O5,O6,O7,O8),O1,90) withcolor CouleurDeux fi;
+ if known CouleurTrois:fill rotation(polygone(O1,O2,O3,O4,O5,O6,O7,O8),O1,180) withcolor CouleurTrois fi;
+ if known CouleurQuatre:fill rotation(polygone(O1,O2,O3,O4,O5,O6,O7,O8),O1,270) withcolor CouleurQuatre fi;
+ fi;
+ trace polygone(O1,O2,O3,O4,O5,O6,O7,O8);
+ trace rotation(polygone(O1,O2,O3,O4,O5,O6,O7,O8),O1,90);
+ trace rotation(polygone(O1,O2,O3,O4,O5,O6,O7,O8),O1,180);
+ trace rotation(polygone(O1,O2,O3,O4,O5,O6,O7,O8),O1,270);
+ );
+ basei=(rotation(O5,O1,180)-O5);
+ basej:=(rotation(O5,O1,-90)-O5);
+ elseif Niveau=6:
+ pair O[];
+ O1=pointarc(cc,0);
+ O3=pointarc(cc,60);
+ O5=pointarc(cc,120);
+ O7=pointarc(cc,180);
+ O9=pointarc(cc,240);
+ O11=pointarc(cc,300);
+ O2=Position[O3,O1]+Ecart*unitvector((O3-O1) rotated -90);
+ O4=rotation(O2,O3,-120);
+ O6=rotation(O4,O5,-120);
+ O8=rotation(O6,O7,-120);
+ O10=rotation(O8,O9,-120);
+ O12=rotation(O10,O11,-120);
+ picture Motif;
+ Motif=image(
+ if Colore:
+ if known CouleurUn: fill polygone(O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12) withcolor CouleurUn fi;
+ if known CouleurDeux: fill rotation(polygone(O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12),O1,120) withcolor CouleurDeux fi;
+ if known CouleurTrois: fill rotation(polygone(O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12),O1,-120) withcolor CouleurTrois fi;
+ fi;
+ trace polygone(O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12);
+ trace rotation(polygone(O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12),O1,120);
+ trace rotation(polygone(O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12),O1,-120);
+ );
+ basei=(rotation(O4,O1,-120)-O6);
+ basej:=(rotation(O9,O1,-120)-O9);
+ fi;
+ path CadrePavage;
+ pair Cpa[];
+ Cpa1=(0,ypart(-2*basej));
+ Cpa2=(xpart(2*Colonnes*basei),ypart(-2*basej));
+ Cpa3=(xpart(2*Colonnes*basei),ypart(2*Lignes*basej));
+ Cpa4=(0,ypart(2*Lignes*basej));
+ CadrePavage=Cpa1--Cpa2--Cpa3--Cpa4--cycle;
+ picture BlocContour,BlocPavage;
+ BlocContour=image(
+ for k=-2*Lignes upto 2*Lignes:
+ for l=-2*Colonnes upto 2*Colonnes:
+ trace Motif shifted (l*basei+k*basej);
+ endfor;
+ endfor;
+ );
+ BlocPavage=image(
+ trace BlocContour;
+ clip currentpicture to CadrePavage;
+ trace CadrePavage withpen pencircle scaled Epaisseur;
+ );
+ BlocPavage
+ enddef;
+ vardef BaryMotif(expr nimech)=
+ save Escherbary;
+ pair Escherbary,EB[],EBSom;
+ tour:=0;
+ EB[0]=point(0) of nimech;
+ EBSom=(0,0);
+ forever:
+ tour:=tour+1;
+ EB[tour]=point(tour) of nimech;
+ EBSom:=EBSom+EB[tour];
+ exitif EB[tour]=EB[0];
+ endfor;
+ Escherbary=EBSom/tour;
+ Escherbary
+ enddef;
+ %
+ vardef Numerotation=
+ pair ISORetiens;
+ for k=1 upto TotalMaille:
+ ISORetiens:=BaryMotif(Maille[k]);
+ label(TEX(""&decimal(k)&""),ISORetiens);
+ endfor;
+ enddef;
+ %
+ vardef AssocierPoint(expr nbpt,ll,kk,aanngg)=
+ PointE[nbpt][1]=rotation(O1,O1,aanngg) shifted (ll*basei+kk*basej);
+ PointE[nbpt][2]=rotation(O2,O1,aanngg) shifted (ll*basei+kk*basej);
+ PointE[nbpt][3]=rotation(O3,O1,aanngg) shifted (ll*basei+kk*basej);
+ PointE[nbpt][4]=rotation(O4,O1,aanngg) shifted (ll*basei+kk*basej);
+ PointE[nbpt][5]=rotation(O5,O1,aanngg) shifted (ll*basei+kk*basej);
+ PointE[nbpt][6]=rotation(O6,O1,aanngg) shifted (ll*basei+kk*basej);
+ if Niveau>3:
+ PointE[nbpt][7]=rotation(O7,O1,aanngg) shifted (ll*basei+kk*basej);
+ PointE[nbpt][8]=rotation(O8,O1,aanngg) shifted (ll*basei+kk*basej);
+ fi;
+ if Niveau>4:
+ PointE[nbpt][9]=rotation(O9,O1,aanngg) shifted (ll*basei+kk*basej);
+ PointE[nbpt][10]=rotation(O10,O1,aanngg) shifted (ll*basei+kk*basej);
+ PointE[nbpt][11]=rotation(O11,O1,aanngg) shifted (ll*basei+kk*basej);
+ PointE[nbpt][12]=rotation(O12,O1,aanngg) shifted (ll*basei+kk*basej);
+ fi;
+ enddef;
+ vardef AssocierMaille(expr nbpt)=
+ Maille[nbpt]=if Niveau=3:
+ polygone(PointE[nbpt][1],PointE[nbpt][2],PointE[nbpt][3],PointE[nbpt][4],PointE[nbpt][5],PointE[nbpt][6])
+ elseif Niveau=4:
+ polygone(PointE[nbpt][1],PointE[nbpt][2],PointE[nbpt][3],PointE[nbpt][4],PointE[nbpt][5],PointE[nbpt][6],PointE[nbpt][7],PointE[nbpt][8])
+ elseif Niveau=6:
+ polygone(PointE[nbpt][1],PointE[nbpt][2],PointE[nbpt][3],PointE[nbpt][4],PointE[nbpt][5],PointE[nbpt][6],PointE[nbpt][7],PointE[nbpt][8],PointE[nbpt][9],PointE[nbpt][10],PointE[nbpt][11],PointE[nbpt][12])
+ fi;
+ enddef;
+ vardef PlacePointSupport=
+ pair PointE[][];
+ path Maille[];
+ pair ISO[];
+ if Niveau=3:
+ ISO1:=(0,0);
+ ISO2=rotation(ISO1,O1,120);
+ ISO3=rotation(ISO1,O1,-120);
+ basei=(rotation(O2,O1,-120)-O4);
+ basej:=(rotation(O5,O1,-120)-O5);
+ elseif Niveau=4:
+ ISO1=(0,0);
+ ISO2=rotation(ISO1,O1,90);
+ ISO3=rotation(ISO1,O1,180);
+ ISO4=rotation(ISO1,O1,270);
+ basei=(rotation(O5,O1,180)-O5);
+ basej:=(rotation(O5,O1,-90)-O5);
+ elseif Niveau=6:
+ ISO1=(0,0);
+ ISO2=rotation(ISO1,O1,120);
+ ISO3=rotation(ISO1,O1,-120);
+ basei=(rotation(O4,O1,-120)-O6);
+ basej:=(rotation(O9,O1,-120)-O9);
+ fi;
+ n:=0;
+ pair ISORetiens;
+ for k=-2*Lignes upto 2*Lignes:
+ for l=-2*Colonnes upto 2*Colonnes:
+ n:=n+1;
+ ISORetiens:=ISO1 shifted (l*basei+k*basej);
+ if (xpart(ISORetiens)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISORetiens)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISORetiens)>ypart(Cpa1+u*(0,0.2))) and (ypart(ISORetiens)<ypart(Cpa4-u*(0,0.2))):
+ AssocierPoint(n,l,k,0);
+ AssocierMaille(n);
+ else:
+ n:=n-1;
+ fi;
+ n:=n+1;
+ ISORetiens:=ISO2 shifted (l*basei+k*basej);
+ if (xpart(ISORetiens)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISORetiens)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISORetiens)>ypart(Cpa1+u*(0,0.2))) and (ypart(ISORetiens)<ypart(Cpa4-u*(0,0.2))):
+ if Niveau=4:
+ AssocierPoint(n,l,k,90);
+ else:
+ AssocierPoint(n,l,k,120);
+ fi;
+ AssocierMaille(n);
+ else:
+ n:=n-1;
+ fi;
+ n:=n+1;
+ ISORetiens:=ISO3 shifted (l*basei+k*basej);
+ if (xpart(ISORetiens)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISORetiens)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISORetiens)>ypart(Cpa1+u*(0,0.2))) and (ypart(ISORetiens)<ypart(Cpa4-u*(0,0.2))):
+ if Niveau=4:
+ AssocierPoint(n,l,k,180);
+ else:
+ AssocierPoint(n,l,k,-120);
+ fi;
+ AssocierMaille(n);
+ else:
+ n:=n-1;
+ fi;
+ if Niveau=4:
+ n:=n+1;
+ ISORetiens:=ISO4 shifted (l*basei+k*basej);
+ if (xpart(ISORetiens)>xpart(Cpa1+u*(0.2,0))) and (xpart(ISORetiens)<xpart(Cpa2-u*(0.2,0))) and (ypart(ISORetiens)>ypart(Cpa1+u*(0,0.2))) and (ypart(ISORetiens)<ypart(Cpa4-u*(0,0.2))):
+ AssocierPoint(n,l,k,270);
+ AssocierMaille(n);
+ else:
+ n:=n-1;
+ fi;
+ fi;
+ endfor;
+ endfor;
+ TotalMaille=n;
+ enddef;
+ %
+ vardef EffectuerTraces=
+ \useKV[Pavage]{Traces}
+ enddef;
+}%
+
+\def\MPPavageEscher{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}
+ \MPPavageEscherCode
+ picture Motif;
+ trace PavageEscher;
+ PlacePointSupport;
+ if After:
+ EffectuerTraces;
+ fi;
+ if Numerote:
+ Numerotation;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={\MPPavageEscherCode}]
+ picture Motif;
+ trace PavageEscher;
+ PlacePointSupport;
+ if After:
+ EffectuerTraces;
+ fi;
+ if Numerote:
+ Numerotation;
+ fi;
+ \end{mpost}
+ \fi%
+}%
+
+\def\MPPeriodique{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ \MPPeriodiqueCode
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=(0,0)--u*(1,-2)--u*(2,0.5)--u*(0.75,1)--cycle;
+ fi;
+ pair A[],B[];
+ A[0]=point(0) of Motif;
+ B[0]=A[0];
+ k:=0;
+ forever:
+ k:=k+1;
+ A[k]=point(k) of Motif;
+ B[0]:=B[0]+A[k];
+ exitif A[k]=A[0];
+ endfor;
+ B[0]:=B[0]/k;
+ trace PavagePeriodique;
+ PlacePointSupport;
+ if After:
+ EffectuerTraces;
+ fi;
+ if Numerote:
+ Numerotation;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[\MPPeriodiqueCode]
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=(0,0)--u*(1,-2)--u*(2,0.5)--u*(0.75,1)--cycle;
+ fi;
+ pair A[],B[];
+ A[0]=point(0) of Motif;
+ B[0]=A[0];
+ k:=0;
+ forever:
+ k:=k+1;
+ A[k]=point(k) of Motif;
+ B[0]:=B[0]+A[k];
+ exitif A[k]=A[0];
+ endfor;
+ B[0]:=B[0]/k;
+ trace PavagePeriodique;
+ PlacePointSupport;
+% if Numerote:
+% Numerotation;
+% fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mpost}
+ \fi
+}%
+
+\def\MPReseau{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ \MPReseauCode
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=u*(0,0)--u*(0.75,0)--u*(1,0.5)--u*(0.25,0.5)--cycle;
+ fi;
+ PavageReseau;
+ PlacePointSupport;
+ if After:
+ EffectuerTraces;
+ fi;
+ if Numerote:
+ Numerotation;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={\MPReseauCode}]
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=u*(0,0)--u*(0.75,0)--u*(1,0.5)--u*(0.25,0.5)--cycle;
+ fi;
+ PavageReseau;
+ PlacePointSupport;
+ if After:
+ EffectuerTraces;
+ fi;
+ if Numerote:
+ Numerotation;
+ fi;
+ \end{mpost}
+ \fi
+}%
+
+\def\MPRegulier{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ \MPReseauRegulier
+ trace PavageRegulier(Niveau);
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={\MPReseauRegulier}]
+ trace PavageRegulier(Niveau);
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ \end{mpost}
+ \fi
+}%
+
+\def\MPPavage{%
+ \ifluatex%
+ \mplibforcehmode%
+ \begin{mplibcode}%
+ \MPPavageBase
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=u*(0,0)..u*(0.25,.1)..u*(0.5,0.7)..u*(1,1);
+ fi;
+ if Demo:
+ trace pavagescar(Motif,0,ColPavage);
+ else:
+ trace pavages(Motif,Niveau,ColPavage);
+ fi;
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ if Demo=false:
+ trace CadrePavage withpen pencircle scaled Epaisseur;
+ fi;
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={\MPPavageBase}]
+ path Motif;
+ if Before:
+ Motif=\useKV[Pavage]{Motif};
+ else:
+ Motif=u*(0,0)..u*(0.25,.1)..u*(0.5,0.7)..u*(1,1);
+ fi;
+ trace pavages(Motif,Niveau,ColPavage);
+ PlacePointSupport;
+ if Numerote:
+ Numerotation;
+ fi;
+ if After:
+ EffectuerTraces;
+ fi;
+ trace CadrePavage withpen pencircle scaled Epaisseur;
+ \end{mpost}
+ \fi%
+}%
+
+\NewDocumentCommand\Pavage{o}{%
+ \useKVdefault[Pavage]%
+ \setKV[Pavage]{#1}%
+ \ifboolKV[Pavage]{Regulier}{%
+ \MPRegulier%
+ }{%
+ \ifboolKV[Pavage]{SemiRegulier}{%
+ %
+ }{%
+ \ifboolKV[Pavage]{Reseau}{%
+ \MPReseau%
+ }{%
+ \ifboolKV[Pavage]{Quadrilatere}{%
+ \MPPeriodique%
+ }{%
+ \ifboolKV[Pavage]{Escher}{%
+ \MPPavageEscher%
+ }{%
+ \MPPavage%
+ }%
+ }%
+ }%
+ }%
+ }%
+}% \ No newline at end of file