MacPerspective translator

Written by Paul Bourke
October 1990

MacPerspective was a 3D perspective drawing program developed by Knick Drafting for the Apple Macintosh computer in the mid-1980s. It featured an intuitive system for creating "wireframe" drawings by specifying the X, Y, and Z coordinates of lines to be drawn on the screen.

This MacPerspective Translator utility takes a native MacPerspective model file and converts the geometric information into a file format suitable for exporting to other 3D modelling packages.

Note: to transfer views of a model into a 2D package use the Copy to Clipboard option inside MacPerspective. This is particularly useful for transferring a 2D view of the model into ClarisCAD for plotting.


The basic way of translating a model is to open a MacPerspective file and then "export" to the format of your choice. After opening a model you can use this program to view it from various angles, this is useful for model checking purposes. The export formats are selected under the option menu.

This program is continually being "touched up", and thus it is not appropriate to comment on the exact contents of the options menu, explore for yourself.

During the translation various parameters as well as the progress status are displayed. Of particular interest are the number of duplicate edges removed and the number of each type of geometric element saved which is displayed at the end of the exporting process. The number of 3 and 4 point facets are shown as well as the number of lone edges. Lone edges are the number of edges which did not form part of a facet and give an indication of how complete the specification of planes has been.

File format

The binary file is organised as follows. There is a 2 byte header that gives the number of vertices as a short int. Actually it is the number of vertices-1. There is a single byte footer that always seems to have a value of 1.

The vertex data is split into three, first all the x coordinates, then the y, then the z. The first three vertices are handled differently to the rest. The first is the camera position, the second the focal point, and the third the current point. Following these three are the vertices making up the model.

Each vertex is a long int (4 bytes) with the origin located at 200,000,000. A line is drawn from the last vertex to the current vertex unless the value is negative, this corresponds to a "pen up". The vertices are converted to floating point vertices as follows:

newnumber = ( ABS(number) - 200,000,000 ) / scalingfactor

Typical scaling factor is 5000, I think this is close to making the units m.