GM a écrit :J'avais un peu de mal à faire mes valises avant de proposer un premier jet d'une proposition avec deferred drawing.
Je comprends, c'est le genre de choses auxquelles on ne peut pas s'empêcher de penser et qui peuvent gâcher des vacances !
Je laisse tomber les deux premiers exemples pour m'intéresser au dernier qui répond d'avantage à ma question...
Je vois que tu as réussi à adapter la fonction distance de geometry.asy, chose que je n'avais pas réussi à faire...
Je m'explique sur ma direction v pour la flèche de cotation : je ne veux pas me contenter de la mettre dans un plan par défaut et veux pouvoir la mettre ou je veux ! Exemples : avec la fonction que tu proposes, sur la première figure, la cote du rayon est mal placée (ou alors je n'ai pas compris comment changer cela).
Sur la figure suivante, à l'aide de la direction v et la fonction cote3D (code en dessous), je mets la flèche où je veux...
Sinon, le deferred drawing a l'air de fonctionner, voir l'exemple suivant avec la fonction que tu as proposée (cote3D_GM en violet), et celle que j'ai adaptée (cote3D en rouge) qui me convient parfaitement (sauf peut-être le choix d'un vecteur v par défaut, je verrai plus tard...).
Code : Tout sélectionner
unitsize(1cm);
//size(7cm,0);
import solids;
settings.render=0;
settings.prc=false;
currentprojection = orthographic(5,5,2);
// v "direction" de la flèche de cotation, si cc=false le label change de côté
void cote3D(picture pic=currentpicture,
Label L="", triple A, triple B, real d=5mm, triple v, bool cc=true,
pen p=currentpen, pen joinpen=dotted){
transform3 T=shift(d*unit(v));
triple A=A, B=B;
pic.add(new void(picture f, transform3 t) {
picture opic;
path3 dist;
triple Ap=t*A, Bp=t*B;
triple a=T*Ap, b=T*Bp;
if (cc) {dist=a--b;}
else {dist=b--a;}
draw(opic,L,dist,p,Arrows3);
draw(opic,a--Ap^^b--Bp,joinpen);
add(f,opic);
}, true);
}
void cote3D_GM(picture pic=currentpicture,
Label L="", triple A, triple B,
bool senspardefaut=true, real k=1cm,
pen p=currentpen, pen joinpen=dotted){
triple A=A, B=B;
path3 g=A--B;
triple AB=B-A,vAB=(abs(AB.x),abs(AB.y),abs(AB.z));
triple v=(vAB.x>vAB.y)? ((vAB.y>vAB.z)?Z:Y) : ((vAB.x>vAB.z)?Z:X);
transform3 Tp=shift(k*v);
pic.add(new void(picture f, transform3 t) {
picture opic;
path3 G=Tp*t*g;
Label L=L.copy();
draw(opic,L,G,p,Arrows3);
triple Ap=t*A, Bp=t*B;
draw(opic,(Ap--Tp*Ap)^^(Bp--Tp*Bp), joinpen);
add(f,opic);
}, true);
}
int i;
triple A=(0,0,0), B=(0,0,5), v=(0,1,0);
draw(A--B,blue);
draw("$\vec{u}$",A--X,bp+.6*green,Arrow3);
draw("$\vec{v}$",A--Y,bp+.6*green,Arrow3);
draw("$\vec{w}$",A--Z,bp+.6*green,Arrow3);
for (i=1; i<6; ++i){
dot((i,0,0));
dot((0,i,0));
}
cote3D_GM("$5$",A,B,5*cm,p=purple);
cote3D("$5$",A,B,d=5*cm,v,cc=false,p=red);
shipout(bbox(1mm,invisible));
Maintenant, j'ai quelques questions pour le retour des vacances
(ou si ça intéresse quelqu'un d'autre) :
1) À quoi sert cette ligne, je n'arrive pas bien à la comprendre ? C'est une structure conditionnelle (Si--Alors--Sinon) ?
Code : Tout sélectionner
triple v=(vAB.x>vAB.y)? ((vAB.y>vAB.z)?Z:Y) : ((vAB.x>vAB.z)?Z:X);
2) Tout se passe ici :
Mais où la transformation t envoie-t-elle A et B ? (Je sais, ma question n'est pas très claire, mais j'ai vraiment rien compris !
)
3) C'est pas le sujet ici, mais comment construire les pavés, je procède à peu près comme ça moi...
Merci, je passe le sujet en résolu, j'ai ce que je voulais
Christophe