3D et pdf

Tout ce qui concerne le langage Asymptote. Ce langage est supporté sur le forum via les balises asy.

Modérateur : gdm_asy

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
cjorssen
Utilisateur confirmé
Utilisateur confirmé
Messages : 49
Inscription : jeudi 05 novembre 2009, 15:08

3D et pdf

Message par cjorssen »

Bonsoir à tous,

Je cherche à reproduire la figure de P.Ivaldi ici http://www.piprime.fr/744/asymptote-usi ... y-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

oleanet
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 257
Inscription : dimanche 24 décembre 2006, 15:17

Re: Asymptote, 3D et pdf

Message par oleanet »

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 :) ).

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: Asymptote, 3D et pdf

Message par OG »

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
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: Asymptote, 3D et pdf

Message par OG »

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.

cjorssen
Utilisateur confirmé
Utilisateur confirmé
Messages : 49
Inscription : jeudi 05 novembre 2009, 15:08

Re: Asymptote, 3D et pdf

Message par cjorssen »

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/a ... -fig-2.png). Étrange, non ?

Merci et bonne journée

--
Christophe

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: Asymptote, 3D et pdf

Message par OG »

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/a ... -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.

cjorssen
Utilisateur confirmé
Utilisateur confirmé
Messages : 49
Inscription : jeudi 05 novembre 2009, 15:08

Re: [Asymptote] 3D et pdf

Message par cjorssen »

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

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [Asymptote] 3D et pdf

Message par OG »

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.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: Asymptote, 3D et pdf

Message par GMaths »

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
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] 3D et pdf

Message par GMaths »

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.

cjorssen
Utilisateur confirmé
Utilisateur confirmé
Messages : 49
Inscription : jeudi 05 novembre 2009, 15:08

Re: [Asymptote] 3D et pdf

Message par cjorssen »

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

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Asymptote] 3D et pdf

Message par Fabrice Couvreur »

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.

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [Asymptote] 3D et pdf

Message par OG »

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...

cjorssen
Utilisateur confirmé
Utilisateur confirmé
Messages : 49
Inscription : jeudi 05 novembre 2009, 15:08

Re: [Asymptote] 3D et pdf

Message par cjorssen »

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 : Tout sélectionner

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

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