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
Orme des Merisiers
91191 Gif-sur-Yvette cedex FRANCE
tel: +33 1 69 08 73 15
fax: +33 1 69 08 87 86


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


% What is it
% ==========
% Examples inspired by the thread at comp.text.tex about how to convert some 
% drawn pictures into programmatic 3D sketches:
% The sketches present stereographic and cylindrical map projections and they 
% pose some interesting challenges for doing them with a 2D drawing package 
% The main idea is to draw in selected 3D planes and then project onto the 
% coordinate system with an appriopriate transformation. Some highlights:
% [*] usage of pgf math engine for calculation of projection transformations 
%     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 
% [*] 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 
%             fixed positioning issue of nodes and 'to' path operation as 
%             by Kjell, removed some dead code from KART picture
% 2008/09/28  adapted as an example to ConTeXt


%% helper macros

  \pgfmathsinandcos\sinEl\cosEl{#2} % elevation
  \pgfmathsinandcos\sint\cost{#3} % azimuth
  \pgfmathsinandcos\sinEl\cosEl{#2} % elevation
  \pgfmathsinandcos\sint\cost{#3} % latitude
  \tikzset{#1/.estyle={cm={\cost,0,0,\cost*\sinEl,(0,\yshift)}}} % 
  \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); 
  \LatitudePlane{current plane}{\angEl}{#2}
  \tikzset{current plane/.prefix style={scale=#1}}
  % angle of "visibility"
  \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

  >=latex, % option for nice arrows 
  inner sep=0pt,%
  outer sep=2pt,%
  mark coordinate/.style={inner sep=0pt,outer sep=0pt,minimum 


\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 
% \shadedraw[ball color=white,path fading=fade inside] (0,0) circle (\R);


\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

%% 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
\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$};


\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

%% 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}{0} % equator
% shifted equator in node with nested call to tikz (I didn't know it's 
\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$};


\starttikzpicture % KART


\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 
\draw (P) -- (Phat) node[above=1ex] {\bf $\hat{P}$};



If your question is of interest to others as well, please add an entry to the 

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

Reply via email to