To use 3DLDF, call
make run
from the command line in the
shell. The working directory should be
3DLDF-1.1.5.1/
or 3DLDF-1.1.5.1/CWEB
.
Either will work, but the latter may be more convenient, because
this is the location of the CWEB, TeX and MetaPost files that you'll
be editing.
Alternatively, call ldfr
, which is merely a
shell script that calls make run
.
This takes care of running 3dldf
, MetaPost, TeX,
and dvips
, producing a PostScript file containing your
drawings. You can display the latter on your terminal using Ghostview
or some other
PostScript viewer, print it out, and whatever else you like to do with
PostScript files.
However, you can also perform the actions performed by
make run
by hand, by writing your own shell
scripts, by defining Emacs-Lisp commands, or in other ways. Even if you
choose to use make run
, it's important to understand what it
does. The following explains how to do this by hand.
The CWEB source files for 3DLDF are in the subdirectory
3DLDF-1.1.5.1/CWEB/
. They
must be ctangled
, and the resulting C++
files must be
compiled and
linked, in order to create the executable file 3dldf
.
The C++
files and header files generated by ctangle
,
the object files generated by the compiler, and the executable
3dldf
all reside in 3DLDF-1.1.5.1/CWEB/
. Therefore, the
latter must be your working directory.
Since 3DLDF has no input routine as yet,
as explained in No Input Routine,
it is necessary to add C++
code to the function main()
in
main.web
, and/or in a separate function in another file. In the
latter case, the function containing the user code must be invoked in
main()
. Look for the line "Your code here!" in
main.web
.
This is an example of what you could write in main()
.
Feel free to make it more complicated, if you wish.
beginfig(1); default_focus.set(2, 3, -10, 2, 3, 10, 20); Rectangle R(origin, 5, 3); Circle C(origin, 3, 90); C.half(180).filldraw(black, light_gray); R.filldraw(); C.half().filldraw(black, light_gray); Point p = C.get_point(4); p.shift(0, -.5 * p.get_y()); p.label("$C$", ""); Point q = R.get_mid_point(0); q.shift(0, 0, -.5 * q.get_z()); q.label("$R$", ""); current_picture.output(default_focus, PERSP, 1, NO_SORT); endfig(1);
Fig. 72.
main.web
, and any other CWEB files you've changed.
Since these files have changed, they must be ctangled
, and the
resulting C++
files must be recompiled. If you've changed any files
other than
main.web
, ctangle
will also generate a header
file for each of these files. If a header file differs from the version
that existed before ctangle
was run, all of the C++
files
that depend on it must be recompiled. Then 3dldf
must be
relinked. To do this, call make 3dldf
from the command line.
If you've made any errors in typing your code, the
compiler should have issued error messages, so go back into
the appropriate CWEB file and correct your errors. Then call
make 3dldf
again.
CWEB/3dldf
at the command line. It writes a
file of MetaPost code called 3DLDFput.mp
.
3DLDFmp.mp
, which inputs
3DLDFput.mp
.
mpost 3DLDFput
The result is an Encapsulated PostScript file
3DLDFput.
<integer> for each figure in your drawing.
3DLDFtex.tex
should contain code for including the
3DLDFput.
<integer> files. This is an example taken from
the 3DLDFtex.tex
included in the distribution.
You may change it to suit your purposes.
\vbox to \vsize{\vskip 2cm \line{\hskip 2cm Figure 1.\hss}% \vfil \line{\hskip 2cm\epsffile{3DLDFmp.1}\hss}% \vss}
3DLDFtex.tex
to produce the DVI file,
3DLDFtex.dvi
.
tex 3DLDFtex
dvips
on the DVI file to produce the PostScript file,
3DLDFtex.ps
.
dvips -o 3DLDFtex.ps 3DLDFtex
3DLDFtex.ps
can be viewed using Ghostview, it can be printed using
lpr
(on a Unix-like system), you can convert it to PDF with
ps2pdf
, or to some other format using the appropriate program.
I sincerely hope that it worked. If it didn't, ask your local computer wizard for help.
On the computer I'm using, I found that special
arguments for
setting landscape
and papersize
in TeX files for
DIN A3 landscape didn't work. Ghostview cut off the right sides of the
drawings. Nor did it work to call
dvips -t landscape -t a3
.
This caused an error message which said that
landscape
would be ignored. When I called dvips
with the -t landscape
option alone, it worked, and
Ghostview showed the entire drawing.
Another problem was Adobe Acrobat. It would display the entire DIN A3 page, but not always in landscape format. I was unable to find a way of rotating the pages in Acrobat. I finally found out, that if I included even a single letter of text in a label, Acrobat would display the document correctly.