3D et pdf

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

3D et pdf

Messagepar cjorssen » Vendredi 06 Novembre 2009, 22:23

Bonsoir à tous,

Je cherche à reproduire la figure de P.Ivaldi ici http://www.piprime.fr/744/asymptote-using-three_asy-fig0040/. Je me suis fabriqué un wrapper qui permet de lancer "intelligemment" asy depuis une compilation latex. Alors, quand je compile avec pdflatex (et donc que je demande à asy de me sortir un pdf), je n'ai rien qui s'affiche dans evince. Quand je compile avec latex, j'ai un truc, mais c'est moche. Quand je demande séparément à asy de me produire un png, j'ai un truc avec une résolution médiocre et un décalage. J'avoue que ce schéma est une des seules raisons qui m'ont fait venir à asymptote par rapport à tikz alors je suis vraiment déçu (snif). Si quelqu'un a une idée ? Est-ce que ça pourrait être le viewer ? Est-ce que ça pourrait être les prc ? Est-ce qu'il pourrait me manquer des bibliothèques de 3D (à la compilation d'asymptote, j'en aurais été averti, non ?) ?

Merci d'avance.

Asymptote version 1.89svn
Ubuntu 9.04
TeXLive 2008

Code: Tout sélectionner
\documentclass{article}
\usepackage{moreverb}
\usepackage{graphicx}
\usepackage{ifpdf}

\makeatletter
\def\asy@fig@count{\z@}
\newenvironment{asyalt}{}{}

\newif\ifasy@mdfive
\let\asy@end@first\relax
\let\asy@end@second\relax

\def\asy@compare@two@mdfive#1#2{%
  \asy@compare@two@mdfive@i#1\asy@end@first\asy@nil#2\asy@end@second\asy@nil}
\def\asy@compare@two@mdfive@i#1#2\asy@nil#3#4\asy@nil{%
  \if#1#3
    \ifx\relax#2
      \def\asy@next{\asy@mdfivetrue}%
    \else
      \def\asy@next{\asy@compare@two@mdfive@i#2\asy@nil#4\asy@nil}%
    \fi
  \else
    \def\asy@next{\asy@mdfivefalse}%
  \fi
  \asy@next}

\def\asy@compile{%
  \ifpdf
    \immediate\write18{asy -f pdf \asy@fig@filename}
  \else
    \immediate\write18{asy \asy@fig@filename}
  \fi}

\def\asyalt{%
  \@tempcnta=\asy@fig@count\relax
  \advance\@tempcnta\@ne
  \xdef\asy@fig@count{\the\@tempcnta}%
  \edef\asy@fig@filename{\jobname-asy-fig-\asy@fig@count.asy}%
  \IfFileExists{\jobname-asy-fig-\asy@fig@count.asy}%
  {% Asy file already exists: need to see if a newer version exists
    \edef\asy@fig@filename@tmp{%
      \jobname-asy-fig-\asy@fig@count.asy.tmp}%
    \def\asy@next{\verbatimwrite{\asy@fig@filename@tmp}}}
  {% Asy file does not exist: no problem
    \let\asy@fig@filename@tmp\relax
    \def\asy@next{\verbatimwrite{\asy@fig@filename}}}%
  \asy@next}

\def\endasyalt{%
  \endverbatimwrite%
  \ifx\asy@fig@filename@tmp\relax
    \asy@compile
  \else
    \edef\asy@temp{%
      \noexpand\asy@compare@two@mdfive{%
        \pdfmdfivesum file{\asy@fig@filename}}{%
        \pdfmdfivesum file{\asy@fig@filename@tmp}}}
    \asy@temp%
    \ifasy@mdfive
      \immediate\write18{rm -f \asy@fig@filename@tmp}
    \else
      \immediate\write18{mv \asy@fig@filename@tmp\space\asy@fig@filename}
      \asy@compile
    \fi
  \fi
  \includegraphics{\jobname-asy-fig-\asy@fig@count}}

\begin{document}

\begin{asyalt}
unitsize(1inch);
path T,ct,tt;
T=(0,0)--(1,0)--(1/2,sqrt(3)/2)--cycle;
ct=(0,0)..(1,0)--(1/2,sqrt(3)/2)..cycle;
tt=shift(sqrt(3)/6*dir(30))*(scale(1/2)*T);
draw(T);
draw(shift(2*right)*ct);
fill(reverse(shift(4*right)*tt)^^(shift(4*right)*T),blue);
\end{asyalt}

\begin{asyalt}
import three;
size(8cm,0);
real radius=1, theta=37, phi=60;

currentprojection=perspective(4,1,2);

// Planes
pen bg=gray(0.9)+opacity(0.5);
draw(surface((1.2,0,0)--(1.2,0,1.2)--(0,0,1.2)--(0,0,0)--cycle),bg,bg);
draw(surface((0,1.2,0)--(0,1.2,1.2)--(0,0,1.2)--(0,0,0)--cycle),bg,bg);
draw(surface((1.2,0,0)--(1.2,1.2,0)--(0,1.2,0)--(0,0,0)--cycle),bg,bg);

real r=1.5;
draw(Label("$x$",1), O--r*X, Arrow3(HookHead3));
draw(Label("$y$",1), O--r*Y, Arrow3(HookHead3));
draw(Label("$z$",1), O--r*Z, Arrow3(HookHead3));
label("$\rm O$", (0,0,0), W);

triple pQ=radius*dir(theta,phi); // Point Q
// triple pQ=radius*expi(radians(theta),radians(phi)); // Point Q
draw(O--radius*dir(90,phi)^^O--pQ, dashed);
dot("$R*\mathrm{dir}\left(\theta,\phi\right)$",pQ);

// Arcs
draw("$\theta$", reverse(arc(O,0.5*pQ,0.5*Z)), N+0.3E, Arrow3(HookHead2));
draw("$\phi$", arc(O,0.5*X,0.5*(pQ.x,pQ.y,0)), N+0.3E, Arrow3(HookHead2));

path3 p3=O--arc(O,radius,0,phi,90,phi)--cycle;
draw(surface(p3), blue+opacity(0.5));
\end{asyalt}

\end{document}


--
Christophe
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Asymptote, 3D et pdf

Messagepar oleanet » Vendredi 06 Novembre 2009, 23:33

Bonsoir,

Je ne pourrai pas vous aider pour asymptote, mais j'ai essayé de reproduire la figure avec TeXgraph dans LaTeX, et ça passe tout seul:

Code: Tout sélectionner
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pgf}
\usepackage[export=pgf, nocall]{texgraph}

\begin{document}

\begin{texgraph}[name=fig3d, call]
view(-4,6,-4,6), ModelView(central), theta:=15*deg, phi:=65*deg,
view3D(0,5,0,5,0,5), alpha:=45*deg, beta:= 30*deg, R:=3.5,
A:=R*[sin(beta)*exp(i*alpha),cos(beta)],
win:=[Origin, M(4,4,4)],
Build3D(
        bdPlan([Origin, vecJ], [color:= lightgray, clip:=1, clipwin:=win, opacity:=0.6]),
        bdPlan([Origin, vecK], [color:= lightgray, clip:=1, clipwin:=win, opacity:=0.6]),
        bdPlan([Origin, vecI], [color:= lightgray, clip:=1, clipwin:=win, opacity:=0.6]),
        bdSurf(u*[sin(v)*exp(i*alpha),cos(v)], [u:=[0,R], v:=[0,pi/2], color:=blue,
                                                opacity:=0.6]),
        bdAxes(Origin, [arrowscale:=1.5, arrows:=1]),
        bdArc(vecI,Origin,pxy(A),2,1,[arrows:=1, labelarc("$\phi$")]),
        bdArc(vecK,Origin,A,2,1,[arrows:=1, labelarc("$\theta$")]),
        bdLine([R*[exp(i*alpha),0],Origin,A], [linestyle:=dashed, width:=8]),
        bdLabel(A, "$R*$dir$(\theta,\phi)$", [labelpos:=[0.5,1], showdot:=1,
                    labelstyle:=left]),
        bdLabel(Origin, "$O$", [labelpos:=[0.5,-1], showdot:=1,labelstyle:=right]),
        ),
Display3D()
\end{texgraph}

\end{document}


Capture dans le pdf obtenu: Image

Par défaut le programme texgraph n'est pas appelé (option générale nocall) dans ce cas l'environnement ne crée pas de fichier, il inclut simplement l'image (en pgf ici), j'ai donc mis l'option call dans l'environnement. Mais dès que je suis satisfaite de la figure obtenue, j'enlève cette option call pour ne pas recréer la figure à chaque compilation (j'ai suivi de loin le fil sur fr.comp.text.tex :) ).
oleanet
Méga-utilisateur
 
Messages: 258
Inscription: Dimanche 24 Décembre 2006, 15:17

Re: Asymptote, 3D et pdf

Messagepar OG » Samedi 07 Novembre 2009, 09:36

Bonjour

J'ai déjà écrit ce qui suit ici, sur Amitex ou ailleurs. Pour la 3D : 4 méthodes
1) -render=0 à l'ancienne pas de gestion des faces cachées
2) -f pdf -prc : format PRC d'Adobe dans le pdf, uniquement visible par Acrobat Reader (plateforme Intel)
3) -V : moteur de rendu OpenGL tu joues avec la figure (pour trouver le point de vue adapté notamment) et éventuellement tu exportes
4) -render={4,6,8..} -noprc -f {pdf,png,etc..} utilise le moteur de rendu OpenGL pour créer l'image
-render=n donne la qualité/résolution (attention croissance de la taille exponentielle)
Il faut savoir que certains drivers de cartes graphiques comme une Intel G45 (G{truc}) intégrée à la carte mère posent problèmes : ajouter l'option -glOptions=-indirect aide (mais ne résout pas tout quand on génère plusieurs graphiques à la chaîne j'ai vu le cas sur mon Dell D630). asy -V + export par la touche "e" a fonctionné.

Voilà il y a peut-être des choses à ajouter au wrapper. L'idéal est de faire des essais avant directement sur le fichier asy et si c'est pour quelques images 3D autant le faire de façon externe via \includegraphics.

Bref la 3D n'a rien à voir avec la 2D en terme de complexité...

bon courage
O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Asymptote, 3D et pdf

Messagepar OG » Samedi 07 Novembre 2009, 11:48

Re

J'ai oublié qu'il est possible de créer pour les pdf un PRC et une image png superposés. Ainsi les visionneuses pdf comme evince, xpdf, okular affichent au moins l'image bitmap tandis qu'acroread permet de sélectionner l'image et alors de manipuler le PRC.

Comme pour l'installation svn sous Jaunty il faudrait faire une petite note synthétique... pour ne pas décevoir les utilisateurs potentiels d'Asymptote.

O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Asymptote, 3D et pdf

Messagepar cjorssen » Samedi 07 Novembre 2009, 12:55

Bonjour et merci de vos réponses

@oleanet
Je ne pourrai pas vous aider pour asymptote, mais j'ai essayé de reproduire la figure avec TeXgraph dans LaTeX


Merci. J'ai vu que TeXgraph sur ce coup-là est plus efficace. Je vais peut-être y revenir.

@OG
J'ai déjà écrit ce qui suit ici, sur Amitex ou ailleurs.


Désolé, mais je n'ai pas trouvé l'info. Pourquoi ne pas demander l'ajout dans la FAQ d'asymptote ?

1) -render=0 à l'ancienne pas de gestion des faces cachées


Ça, ça marche, mais pas de transparence non plus. Ça ne me convient pas.

2) -f pdf -prc : format PRC d'Adobe dans le pdf, uniquement visible
par Acrobat Reader (plateforme Intel)


Je vais peut-être essayer mais je ne voulais pas d'acroread sur ma machine.

3) -V : moteur de rendu OpenGL tu joues avec la figure (pour trouver
le point de vue adapté notamment) et éventuellement tu exportes


Je voulais le faire depuis ma compilation LaTeX

4) -render={4,6,8..} -noprc -f {pdf,png,etc..}
utilise le moteur de rendu OpenGL pour créer l'image


Seule bonne solution à mon sens, mais j'ai toujours des barres noires (voir http://christophe.jorssen.free.fr/asy/asymptote-asy-fig-2.png). Étrange, non ?

Merci et bonne journée

--
Christophe
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant

Re: Asymptote, 3D et pdf

Messagepar OG » Samedi 07 Novembre 2009, 13:40

Re

cjorssen a écrit:Bonjour et merci de vos réponses

de rien

cjorssen a écrit:Seule bonne solution à mon sens, mais j'ai toujours des barres noires (voir http://christophe.jorssen.free.fr/asy/asymptote-asy-fig-2.png). Étrange, non ?

Pb de driver OpenGL. Que donne asy -glOptions=-indirect -render=4 ?
S'il y a toujours des bandes noires ou quelques parasites, la seule solution est asy -V -render=4 (ou 6) -f png
et de faire touche "e" pour l'export.

Je sais que la doc est parfois succincte mais pour ce sujet pas besoin de faq :"There are four choices for viewing 3D Asymptote output: (...)"
http://asymptote.sourceforge.net/doc/three.html#three

Le fait de ne compiler que les figures mises à jour est une fonctionnalité nécessaire.
Il serait bien que ceci soit ajoutée à asymptote.sty.

bon week-end
O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: [Asymptote] 3D et pdf

Messagepar cjorssen » Mercredi 11 Novembre 2009, 15:45

Bonjour et désolé pour le retard à la réponse...

Pb de driver OpenGL. Que donne asy -glOptions=-indirect -render=4 ?


J'ai encore des bandes noires. Je crois que ma carte graphique est vraiment pourrie... Alors, j'ai trouvé une solution. J'ai installé asy sur un autre ordinateur qui a une carte graphique bien supportée et ça fonctionne mieux. Le problème est que je dois être physiquement devant cette machine pour compiler (une compilation via ssh ne fonctionne pas). Par exemple,
Code: Tout sélectionner
ssh -X -f <ordinateur-qui-a-une-bonne-carte-graphique> gnome-terminal

puis dans le gnome-terminal à distance sur <ordinateur-qui-a-une-bonne-carte-graphique>
Code: Tout sélectionner
asy -f png -render 4 asymptote-asy-fig-2.asy

me donne
Code: Tout sélectionner
asy -f png -render 4 asymptote-asy-fig-2.asy
freeglut (asy): Unable to create direct context rendering for window ''
This may hurt performance.

et ne conclut pas, quand je n'ai pas un segmentation fault.

Je sais que la doc est parfois succincte mais pour ce sujet pas besoin de faq :"There are four choices for viewing 3D Asymptote output: (...)"


En effet, j'ai mal lu. Merci.

Bonne journée

--
Christophe
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] 3D et pdf

Messagepar OG » Mercredi 11 Novembre 2009, 17:45

Bonsoir
cjorssen a écrit:Bonjour et désolé pour le retard à la réponse...


Tout le monde est très occupé. Je suis un peu les fils sur fctt, je t'ai d'ailleurs répondu
sur le paquetage Ubuntu de Texlive2009.

cjorssen a écrit:J'ai encore des bandes noires. Je crois que ma carte graphique est vraiment pourrie... Alors, j'ai trouvé une solution. J'ai installé asy sur un autre ordinateur qui a une carte graphique bien supportée et ça fonctionne mieux. Le problème est que je dois être physiquement devant cette machine pour compiler (une compilation via ssh ne fonctionne pas). Par exemple,

L'autre solution est le mode interactif avec -V, mais là pas d'automatisation, ça te lance ImageMagick sur un fichier assez gros.
Concernant les cartes intégrées Intel {Truc} la situation est disparate, ça se passe mieux sur mon fixe
du Bureau que sur mon portable. (j'ai commandé un nouveau PC avec une vraie carte graphique... Asymptote oblige)
Pour le ssh -X, je vais essayer plus tard (ma machine de bureau est éteinte tout de même), mais ce sera un double tunnel !

bon courage
O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Asymptote, 3D et pdf

Messagepar GMaths » Mercredi 11 Novembre 2009, 21:46

OG a écrit:Le fait de ne compiler que les figures mises à jour est une fonctionnalité nécessaire.
Il serait bien que ceci soit ajoutée à asymptote.sty.

oh que oui !

Je viens seulement de tester le wrapper (avec des exemples 2D) sous texworks : pas mal du tout !

Ne faudrait-il pas donner envie à John Bowman d'étoffer son asymptote.sty... en déposant le code du wrapper (en l'état) sur le forum officiel ?
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] 3D et pdf

Messagepar GMaths » Samedi 14 Novembre 2009, 17:30

cjorssen a écrit:freeglut (asy): Unable to create direct context rendering for window ''

J'ai oublié d'écrire que si tu parvenais à compiler de la 3D via ssh... je serais intéressé de savoir comment tu fais.

Personnellement, je lance la compilation des exemples 2D sur mon serveur via ssh... puis je les transfère sur un site distant.
Mais dès lors où il y a une figure 3D... je me déplace jusqu'au serveur pour lancer la compilation et ne pas avoir ce problème.
J'ai pris l'habitude de le faire... et je n'ai plus trouvé le temps de chercher le pourquoi du non fonctionnement.
En fait, j'utilise ssh... sans trop maitriser le sujet.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] 3D et pdf

Messagepar cjorssen » Dimanche 15 Novembre 2009, 17:09

Ne faudrait-il pas donner envie à John Bowman d'étoffer son asymptote.sty... en déposant le code du wrapper (en l'état) sur le forum officiel ?


Je l'ai soumis ce matin.

D'autre part, je suis passé à ubuntu 9.10 et là : miracle. Tout fonctionne parfaitement, y compris les prc. Bref, canonical avait dit que les cartes intel seraient mieux supportées par karmic : c'est bien le cas !

Du coup, désolé, mais plus de compilation ssh...

Bonne soirée

--
Christophe
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] 3D et pdf

Messagepar Fabrice Couvreur » Dimanche 15 Novembre 2009, 23:14

Bonsoir à tous,
Utilisateur d' Asymptote, je découvre ce fil, et j'ai quelques questions à cause de mon ignorance totale sur un wrapper !
-dans le code que tu proposes, tu ne fais pas mention du package asymptote, pourquoi ?
-j'ai essayé de compiler ton code :
Code: Tout sélectionner
pdflatex gorg.tex

Code: Tout sélectionner
! LaTeX Error: File `gorg-asy-fig-1' not found.

Merci.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

Re: [Asymptote] 3D et pdf

Messagepar OG » Lundi 16 Novembre 2009, 20:59

Bonsoir

J'ai laissé mon PC à la fac allumé (ce qui est mal). Comme il n'est pas routé, j'ai du faire
un double tunnel ssh -X et là "asy -glOptions NURBSsphere.asy" a bien fonctionné !
(je me suis envoyé le fichier.eps produit)
Entre deux PC sous Linux c'est mieux qu'avec Windows, car pour l'option -X, "X forwarding"
il faut un serveur X sur les deux machines. La configuration de sshd doit bien sûr autoriser
le "X forwarding".

O.G qui attend un peu avant d'installer Karmic...
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: [Asymptote] 3D et pdf

Messagepar cjorssen » Dimanche 22 Novembre 2009, 17:00

Bonjour,

Fabrice Couvreur a écrit:-dans le code que tu proposes, tu ne fais pas mention du package asymptote, pourquoi ?


Parce que justement, ce que je propose, c'est de remplacer ce qui est fait dans le package asymptote.

Fabrice Couvreur a écrit:-j'ai essayé de compiler ton code :
Code: Tout sélectionner
pdflatex gorg.tex

[code]! LaTeX Error: File `gorg-asy-fig-1' not found.


As-tu autorisé \write18 (option --enable-shell-escape) de pdf(la)tex ?

Cela dit, c'est vrai que mon code ne devrait pas planter, mais en le donnant sur fctt, j'ai dit qu'il fallait le robustifier :-)

Bonne soirée

--
Christophe
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités