Top(ological) Mod(eler) User Docs


Navigation in the object window is done using the mouse and keyboard similar to the Maya user interface.

Alt + Left Mouse BtnRotate view
Alt + Middle Mouse BtnPan view
Alt + Left + Middle Mouse BtnsDolly/Zoom view

The mouse cursor will change to give an idea of what operation you are doing.

Reading and Writing Files

You can read/write files in OBJ format or the DLFL format (specific to TopMod). The file extension is used to determine the format. During reading, if the file does not conform to the expected format, reading stops and the object is not loaded.


There is limited support for texture map using OpenGL's texture functions. PNG and JPEG file formats are accepted. The file size should be a power of 2 (OpenGL requirement). Loading a texture has no effect unless one of the Textured Renderers are chosen. Texture coordinates can be assigned randomly (works well only for quads which are mapped from 0 to 1). If the OBJ file includes texture coordinates they will be read and used.

Summary information

Summary information (number of vertices, faces, edges, etc.) can be output to the console window by chosing the corresponding Print options in the File menu.

Display Options

By default a wire-frame overlay is displayed on the object. This can be toggled on or off in the Display menu. Display of Vertices, Silhouette, coordinate axes and a grid can also be toggled on/off through this menu.
(There is a bug in the Vertex display mode, which has been fixed in the latest version. The version available in this directory is a slightly older version)

Renderer Options

Different renderers are available for displaying the object. The default is the Shaded renderer. The Normal is similar to this but uses normal information differently. The Lighted renderer uses lighting information, which has to be pre-computed for the object. The two Textured renderers use the texture map which has been loaded. If no texture map has been loaded, the Textured renderers will not display anything.
Shaded and Lighted are typically the most useful renderers.

Global Operations

Several operations can be performed on the entire object through the "Object menu. The names are self-explanatory. The lighting and normal information can be computed through this menu for use in the Lighted renderer. The Planarize, Make Object Spherical and Make Object Smooth are experimental features and might not work well for all objects. "Random" texture coordinates can also be assigned to each face - a unit texture quad will be mapped to each polygon. This works best if the mesh is a quadrilateral mesh.

Simple Selection Mode

Choosing an option from the Selection menu enters selection mode where the corresponding entity can be selected and information about the selected entity will be displayed in the console window. Vertex, Face and Edge are self-evident. A Corner is a (vertex,face) pair. So to select a corner, you will have to select a face and then a particular vertex in that face. This will be used in several of the operations described later.


Undo and redo options are available. Please note that all selections will be invalidated by both these operations. The undo buffer is limited to a pre-defined number of operations. Color information will be lost after an undo or redo.

Ctrl + ZUndo
Ctrl + XRedo


The available operations have been grouped into several categories. A group can be selected through the Mode pull-down menu. Selecting a particular group brings up another pull-down menu with operations in that group. The available groups are Basic, Extrude, Handles, Crust and Subdivision.

The following table gives a description of the various operations that are available, grouped as per the above mentioned groups.

Group/Mode Operation Required Selection Description
Basics Insert Edge 2 Corners Inserts an edge between the 2 corners. Corners can belong to different faces.
Delete Edge (with cleanup) 1 Edge Deletes the edge. Cleans up any point-spheres that may remain after edge deletion.
Delete Edge (without cleanup) 1 Edge Deletes the edge. Does not cleanup point-spheres that may remain in the mesh.
Sub-divide Edge 1 Edge Subdivides the edge into the specified number of equal-length subdivisions.
Connect Edges 2 (Edge,Face) pairs Inserts 2 edges between the end corners of the 2 (Edge,Face) pairs.
Sub-divide Face 1 Face Subdivides the face into quads or triangles. In both cases a new vertex is created at the midpoint of the face. For quads, the edges are also subdivided into 2.
Tile Texturing None Assigns texture coordinates to all corners based on a tiling algorithm.
Extrude Extrude Face 1 Face Extrudes the face using the specified parameters.
Extrude Face (Doo Sabin) 1 Face Extrudes the face using the specified parameters. The end face coordinates are computed using a version of the Doo-Sabin subdivision scheme.
Extrude Dual Face 1 Face Extrudes the dual of the selected face using the specified parameters. Original edges of the face may be deleted depending on flag.
Stellate 1 Face Stellate the face using the specified parameters.
Handles Add Hole/Handle 2 Corners Inserts a handle (or hole, depending on relative positions of the faces) between two faces using specified parameters. The corners determine the twist in the handle or hole. Corners should be in different, non-adjacent, non-co-planar faces for meaningful results.
Add Hole/Handle (closest vertex) 2 Faces Same as the previous operation, except that the corners are automatically chosen based on distance between the vertices of the 2 faces.
Add Handle (shape interpolation) 2 Corners Inserts a multi-segment, curved handle between the two faces. The shape of the handle is controlled by the weights for the normals. Twist can be achieved by a suitable choice of corners. Extra twists can also be added. Holes cannot be produced using this method.
Create Multi-face Handle (experimental) 3 of more faces Attempts to connect all the selected faces by creating new geometry to which all the faces can be connected using straight handles/holes. Two different algorithms are available. For a good demonstration of what this can do, select the middle faces on all sides of a 3x3x3 cube and use the ConvexHull algorithm with the Use Max. Offsets option checked.
Rind Modeling Rind Modeling (Scaling) None initially. Faces, after crust has been created. Creates a crust by using a scale factor for the inner (outer if scale factor is > 1) shell. After the crust has been created, holes can be punched in the crust by selecting faces where holes are needed. Undo will take you back to the state prior to crust modeling (i.e. hole punching cannot be undone on an individual basis).
Any operation other than hole punching, including undo and redo, will take you out of the crust modeling mode and further holes cannot be punched for the same crust.
Rind Modeling (Thickness) None initially. Faces, after crust has been created. Same as above, except that the crust will be created using the specified thickness. A negative thickness means that the second shell will be moved outward, along the normal to the face, producing a shell that is larger than the original mesh.
Wireframe Modeling None. Creates a wireframe-type model from the given mesh using the specified thickness. Every edge of the original mesh will become a thick wire.
Subdivision Catmull Clark None. Performs Catmull-Clark subdivision on the mesh.
Doo Sabin None. Performs Doo-Sabin subdivision on the mesh.
Honeycomb None. Performs Honeycomb subdivision on the mesh.
Corner-cutting None. Performs Corner-Cutting subdivision (similar to Doo-Sabin) on the mesh.
Root-4 None. Performs Root-4 subdivision on the given mesh.
Vertex Insertion None. This does not do anything currently. This operation is being developed.
Simplest None. Performs Simplest subdivision on the given mesh.
Vertex-Cutting (Truncate) None. Performs Vertex-Cutting subdivision on the given mesh.
Pentagonal None. Performs Pentagonal subdivision on the given mesh.
Dual None. Computes the Dual of the given mesh.

For published papers which give details about some of the above operations, including the basics, please visit my Publications page.

For questions or comments please write to: