Hi, Alan
Thank you for your attention, but I don't need the psedu-3D effect. Asymptote
could create real 3D file which pdf has supported since, maybe, version 1.5.
On Sun, Sep 28, 2008 at 10:19 PM, Alan BRASLAU
On 2008-09-28 04:35 Zhichu Chen wrote:
It is said that Asymptote has supported PRC format 3D file: http://asymptote.sourceforge.net/gallery/3D%20graphs/
I really wanna give it a try, but once I was building from the svn source, I was told that I don't have LaTeX in my $PATH. I haven't really been using LaTeX for a long time, and I prefer I don't need to install a bunch of LaTeX programs and packages just for a drawing program which, IMHO, only use LaTeX to make nice labels.
Is there any workarounds? And how to embed .prc files into the .pdf document? -- Best Regards Chen
This doesn't really answer your question but may be of some related interest to the mailing list.
I am quite fond of pfg/tikz as a drawing package that works rather well with plain tex, latex and context. Asymptote is a similar tool, but it seems to be less portable. However, it appears on the other hand to be much more powerful for 3D. Neverless, I am sharing with this context list an impressive tikz example
-- Alan Braslau CEA DSM-IRAMIS-SPEC CNRS URA 2464 Orme des Merisiers 91191 Gif-sur-Yvette cedex FRANCE tel: +33 1 69 08 73 15 fax: +33 1 69 08 87 86 mailto:alan.braslau@cea.fr
.''`. : :' : `. `'` `- that I have adapted to context. (I have put the author on copy.)
Basically, the only changes to the latex source are \usepackage{preview} -> \startTEXpage \stopTEXpage \begin{tikzpicture} -> \starttikzpicture and a few other minor syntax adaptations...)
Alan
% What is it % ========== % % Examples inspired by the thread at comp.text.tex about how to convert some hand % drawn pictures into programmatic 3D sketches: % http://groups.google.com/group/comp.text.tex/browse_thread/thread/a03baf5d6f... % The sketches present stereographic and cylindrical map projections and they % pose some interesting challenges for doing them with a 2D drawing package PGF/TikZ. % % The main idea is to draw in selected 3D planes and then project onto the canvas % coordinate system with an appriopriate transformation. Some highlights: % [*] usage of pgf math engine for calculation of projection transformations and % transitions points from visible (solid lines) to invisible (dashed lines) on % meridians and latitude circles % [*] definition of 3D plane transformation with expanded styles so that they are robust % against redefinition of macros used in their construction % [*] usage of named coordinates (nodes) for definition of characteristic points in % local coordinate systems so that they are accessible outside of their plane of % definition % [*] calculation of intersections points with TikZ intersection coordinate system % [*] usage of 'to' path operation instead of 'arc' for marking angles to allow for % easy positioning of text labels on the curve % [*] 3D lighting effects with shading % % % Who's done it % ============= % % Tomasz M. Trzeciak % % % Distribution and use % ==================== % % Use as you see fit. Consider giving a proper attribution to the author. % % % Change log % ========== % % 2008/08/07 posted to latex-community.org % 2008/08/08 fixed some typos, added note about 'to' path operation to the description, % fixed positioning issue of nodes and 'to' path operation as suggested % by Kjell, removed some dead code from KART picture % 2008/09/28 adapted as an example to ConTeXt
\usemodule[tikz] \usetikzlibrary[calc,fadings,decorations.pathreplacing]
%% helper macros
\def\pgfmathsinandcos#1#2#3{% \pgfmathsetmacro#1{sin(#3)}% \pgfmathsetmacro#2{cos(#3)}% } \def\LongitudePlane#1#2#3{% \pgfmathsinandcos\sinEl\cosEl{#2} % elevation \pgfmathsinandcos\sint\cost{#3} % azimuth \tikzset{#1/.estyle={cm={\cost,\sint*\sinEl,0,\cosEl,(0,0)}}} } \def\LatitudePlane#1#2#3{% \pgfmathsinandcos\sinEl\cosEl{#2} % elevation \pgfmathsinandcos\sint\cost{#3} % latitude \pgfmathsetmacro\yshift{\cosEl*\sint} \tikzset{#1/.estyle={cm={\cost,0,0,\cost*\sinEl,(0,\yshift)}}} % } \def\DrawLongitudeCircle#1#2{ \LongitudePlane{current plane}{\angEl}{#2} \tikzset{current plane/.prefix style={scale=#1}} % angle of "visibility" \pgfmathsetmacro\angVis{atan(sin(#2)*cos(\angEl)/sin(\angEl))} % \draw[current plane] (\angVis:1) arc (\angVis:\angVis+180:1); \draw[current plane,dashed] (\angVis-180:1) arc (\angVis-180:\angVis:1); } \def\DrawLatitudeCircle#1#2{ \LatitudePlane{current plane}{\angEl}{#2} \tikzset{current plane/.prefix style={scale=#1}} \pgfmathsetmacro\sinVis{sin(#2)/cos(#2)*sin(\angEl)/cos(\angEl)} % angle of "visibility" \pgfmathsetmacro\angVis{asin(min(1,max(\sinVis,-1)))} \draw[current plane] (\angVis:1) arc (\angVis:-\angVis-180:1); \draw[current plane,dashed] (180-\angVis:1) arc (180-\angVis:\angVis:1); }
%% document-wide tikz options and styles
\tikzset{%
=latex, % option for nice arrows inner sep=0pt,% outer sep=2pt,% mark coordinate/.style={inner sep=0pt,outer sep=0pt,minimum size=3pt,fill=black,circle}% }
\starttext
\startTEXpage \starttikzpicture % "THE GLOBE" showcase
\def\R{2.5} % sphere radius \def\angEl{35} % elevation angle \filldraw[ball color=white] (0,0) circle (\R); \foreach \t in {-80,-60,...,80} { \DrawLatitudeCircle{\R}{\t} } \foreach \t in {-5,-35,...,-175} { \DrawLongitudeCircle{\R}{\t} } % some fancy transparent shading % \tikzfading[name=fade inside,inner color=transparent!80,outer color=transparent!30] % \shadedraw[ball color=white,path fading=fade inside] (0,0) circle (\R);
\stoptikzpicture \stopTEXpage
\startTEXpage \starttikzpicture % CENT
%% some definitions
\def\R{2.5} % sphere radius \def\angEl{35} % elevation angle \def\angAz{-105} % azimuth angle \def\angPhi{-40} % longitude of point P \def\angBeta{19} % latitude of point P
%% working planes
\pgfmathsetmacro\H{\R*cos(\angEl)} % distance to north pole \tikzset{xyplane/.estyle={cm={cos(\angAz),sin(\angAz)*sin(\angEl),- sin(\angAz),cos(\angAz)*sin(\angEl),(0,-\H)}}} \LongitudePlane{xzplane}{\angEl}{\angAz} \LongitudePlane{pzplane}{\angEl}{\angPhi} \LatitudePlane{equator}{\angEl}{0}
%% draw xyplane and sphere
\draw[xyplane] (-2*\R,-2*\R) rectangle (2.2*\R,2.8*\R); \fill[ball color=white] (0,0) circle (\R); % 3D lighting effect %\fill[white] (0,0) circle (\R); % just a white circle \draw (0,0) circle (\R);
%% characteristic points
\coordinate (O) at (0,0); \coordinate[mark coordinate] (N) at (0,\H); \coordinate[mark coordinate] (S) at (0,-\H); \path[pzplane] (\angBeta:\R) coordinate[mark coordinate] (P); \path[pzplane] (\R,0) coordinate (PE); \path[xzplane] (\R,0) coordinate (XE); \path (PE) ++(0,-\H) coordinate (Paux); % to aid Phat calculation \coordinate[mark coordinate] (Phat) at (intersection cs: first line={(N)--(P)}, second line={(S)--(Paux)});
%% draw meridians and latitude circles
\DrawLatitudeCircle{\R}{0} % equator %\DrawLatitudeCircle{\R}{\angBeta} \DrawLongitudeCircle{\R}{\angAz} % xzplane \DrawLongitudeCircle{\R}{\angAz+90} % yzplane \DrawLongitudeCircle{\R}{\angPhi} % pzplane
%% draw xyz coordinate system
\draw[xyplane,<->] (1.8*\R,0) node[below] {$x,\xi$} -- (0,0) -- (0,2.4*\R) node[right] {$y,\eta$}; \draw[->] (0,-\H) -- (0,1.6*\R) node[above] {$z,\zeta$};
%% draw lines and put labels
\draw[dashed] (P) -- (N) +(0.3ex,0.6ex) node[above left] {\bf $N$}; \draw (P) -- (Phat) node[above right] {\bf $\hat{P}$}; \path (S) +(0.4ex,-0.4ex) node[below] {\bf $S$}; \draw[->] (O) -- (P) node[above right] {\bf $P$}; \draw[dashed] (XE) -- (O) -- (PE); \draw[pzplane,->,thin] (0:0.5*\R) to[bend right=15] node[pos=0.4,right] {$\beta$} (\angBeta:0.5*\R); \draw[equator,->,thin] (\angAz:0.4*\R) to[bend right=30] node[pos=0.4,below] {$\phi$} (\angPhi:0.4*\R); \draw[thin,decorate,decoration={brace,raise=0.5pt,amplitude=1ex}] (N) -- (O) node[midway,right=1ex] {$a$};
\stoptikzpicture \stopTEXpage
\startTEXpage \starttikzpicture % MERC
%% some definitions
\def\R{3} % sphere radius \def\angEl{25} % elevation angle \def\angAz{-100} % azimuth angle \def\angPhiOne{-50} % longitude of point P \def\angPhiTwo{-35} % longitude of point Q \def\angBeta{33} % latitude of point P and Q
%% working planes
\pgfmathsetmacro\H{\R*cos(\angEl)} % distance to north pole \LongitudePlane{xzplane}{\angEl}{\angAz} \LongitudePlane{pzplane}{\angEl}{\angPhiOne} \LongitudePlane{qzplane}{\angEl}{\angPhiTwo} \LatitudePlane{equator}{\angEl}{0}
%% draw background sphere
\fill[ball color=white] (0,0) circle (\R); % 3D lighting effect %\fill[white] (0,0) circle (\R); % just a white circle \draw (0,0) circle (\R);
%% characteristic points
\coordinate (O) at (0,0); \coordinate[mark coordinate] (N) at (0,\H); \coordinate[mark coordinate] (S) at (0,-\H); \path[xzplane] (\R,0) coordinate (XE); \path[pzplane] (\angBeta:\R) coordinate (P); \path[pzplane] (\R,0) coordinate (PE); \path[qzplane] (\angBeta:\R) coordinate (Q); \path[qzplane] (\R,0) coordinate (QE);
%% meridians and latitude circles
% \DrawLongitudeCircle{\R}{\angAz} % xzplane % \DrawLongitudeCircle{\R}{\angAz+90} % yzplane \DrawLongitudeCircle{\R}{\angPhiOne} % pzplane \DrawLongitudeCircle{\R}{\angPhiTwo} % qzplane \DrawLatitudeCircle{\R}{\angBeta} \DrawLatitudeCircle{\R}{0} % equator % shifted equator in node with nested call to tikz (I didn't know it's possible) \node at (0,1.6*\R) { \tikz{\DrawLatitudeCircle{\R}{0}} };
%% draw lines and put labels
\draw (-\R,-\H) -- (-\R,2*\R) (\R,-\H) -- (\R,2*\R); \draw[->] (XE) -- +(0,2*\R) node[above] {$y$}; \node[above=8pt] at (N) {\bf $N$}; \node[below=8pt] at (S) {\bf $S$}; \draw[->] (O) -- (P); \draw[dashed] (XE) -- (O) -- (PE); \draw[dashed] (O) -- (QE); \draw[pzplane,->,thin] (0:0.5*\R) to[bend right=15] node[midway,right] {$\beta$} (\angBeta:0.5*\R); \path[pzplane] (0.5*\angBeta:\R) node[right] {$\hat{1}$}; \path[qzplane] (0.5*\angBeta:\R) node[right] {$\hat{2}$}; \draw[equator,->,thin] (\angAz:0.5*\R) to[bend right=30] node[pos=0.4,above] {$\phi_1$} (\angPhiOne:0.5*\R); \draw[equator,->,thin] (\angAz:0.6*\R) to[bend right=35] node[midway,below] {$\phi_2$} (\angPhiTwo:0.6*\R); \draw[equator,->] (-90:\R) arc (-90:-70:\R) node[below=0.3ex] {$x = a\phi$}; \path[xzplane] (0:\R) node[below] {$\beta=0$}; \path[xzplane] (\angBeta:\R) node[below left] {$\beta=\beta_0$};
\stoptikzpicture \stopTEXpage
\startTEXpage \starttikzpicture % KART
\def\R{2.5}
\node[draw,minimum size=2cm*\R,inner sep=0,outer sep=0,circle] (C) at (0,0) {}; \coordinate (O) at (0,0); \coordinate[mark coordinate] (Phat) at (20:2.5*\R); \coordinate (T1) at (tangent cs: node=C, point={(Phat)}, solution=1); \coordinate (T2) at (tangent cs: node=C, point={(Phat)}, solution=2); \coordinate[mark coordinate] (P) at ($(T1)!0.5!(T2)$);
\draw[dashed] (T1) -- (O) -- (T2) -- (Phat) -- (T1) -- (T2); \draw[->] (-1.5*\R,0) -- (2.5*\R,0) node[right] {$x$}; \draw[->] (0,-1.5*\R) -- (0,1.5*\R) node[above] {$y$}; \draw (O) node[below left] {\bf $O$} -- (P) +(1ex,0) node[above=1ex] {\bf $P$}; \draw (P) -- (Phat) node[above=1ex] {\bf $\hat{P}$};
\stoptikzpicture \stopTEXpage
\stoptext
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : https://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- Best Regards Chen ---------------------------------------------------------------- Zhi-chu Chen | Shanghai Synchrotron Radiation Facility No. 2019 | Jialuo Rd. | Jiading | Shanghai | P.R. China tel: 086 21 5955 3405 | zhichu.chen.googlepages.com | www.sinap.ac.cn ----------------------------------------------------------------