Re: Exemple minimal

Denis Roegel <[email protected]> Sat, 25 Jun 2005 18:04:40 +0200
Newsgroups gmane.comp.tex.metafont
Message-ID <[email protected]>
On Sat, Jun 25, 2005 at 07:20:45AM +0200, Jean-Michel Boucart wrote:
> Suite =E0 mon post pr=E9c=E9dent, je me suis concentr=E9 sur les foncti=
ons xval,=20
> yval ... dans 3d.

...
>=20
> Que faut-il comprendre ? Merci de m'=E9clairer.

Bonjour,

vous utilisez incorrectement xval, yval, zval...

En fait, de mani=E8re interne, il y a une liste s=E9quentielle de points,
d=E9coup=E9s en objets, chaque objet ayant un index de d=E9part. xval, et=
c.
utilise les index absolus qui ne pr=E9sentent pas beaucoup d'int=E9r=EAt =
pour
l'utilisateur. Si vous voulez, au sein d'un objet, conna=EEtre la valeur =
x
du point i de cet objet, utilisez une construction comme

  vec[points_[ipnt_(1)]]x

Ok, j'admets que c'est lourd, mais vous pouvez d=E9finir un raccourci
(par exemple def Xval(expr i)=3Dvec[points_[ipnt_(i)]]x enddef)
ou aussi =E9crire=20

  xval(pnt_obj("OIJK",1))

pour la valeur x du point 1 de l'objet OIJK.

Ci-dessous votre fichier avec quelques compl=E9ments. N'h=E9sitez pas =E0=
 poser
d'autres questions.

En ce qui concerne la documentation, il n'y a rien (=E0 ma connaissance) =
=E0 part ce qui
est sur CTAN.

D. Roegel

input 3dgeom;
drawing_scale:=3D15cm;

vardef def_Repere(expr inst)=3D=20
  new_obj_points(inst,2);
  set_Repere_points(inst);
enddef; =20

vardef set_Repere_points(expr inst)=3D
set_point(1)(1,1,0);set_point(2)(-1,1,0);
enddef; =20

vardef draw_Repere(expr inst)=3D =20
  draw_line(1,2);

  message "x1=3D" & decimal(vec[points_[ipnt_(1)]]x);
  message "y1=3D" & decimal(vec[points_[ipnt_(1)]]y);
  message "z1=3D" & decimal(vec[points_[ipnt_(1)]]z);
  message "x1=3D" & decimal(vec[points_[ipnt_(2)]]x);
  message "y1=3D" & decimal(vec[points_[ipnt_(2)]]y);
  message "z1=3D" & decimal(vec[points_[ipnt_(2)]]z);


 =20
  if xval(points_[ipnt_(1)])<.5 : message "x < 0,5" fi;
  if yval(points_[ipnt_(1)])<.5 : message "y < 0,5" fi;

  show_point("1:",pnt_obj("OIJK",1));
  show_point("2:",pnt_obj("OIJK",2));
enddef; =20


assign_obj("OIJK","Repere");

beginfig(1);
set_point_(Obs)(4,6,4);
Obs_phi:=3D90;
Obs_dist:=3D2;
point_of_view_obj("OIJK",1,Obs_phi);
reset_obj("OIJK");
draw_obj("OIJK");
endfig;
end.