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.
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.
mpost 3DLDFput
The result is an Encapsulated PostScript file 3DLDFput.<integer> for each figure in your drawing.
\vbox to \vsize{\vskip 2cm \line{\hskip 2cm Figure 1.\hss}% \vfil \line{\hskip 2cm\epsffile{3DLDFmp.1}\hss}% \vss}
tex 3DLDFtex
dvips -o 3DLDFtex.ps 3DLDFtex
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.