Engineering topics
Staley, Martin
Publications and source records attributed to Staley, Martin.
Kip, Version 1.0
This high-performance ray tracing library provides very fast rendering, compact code, type flexibility via C++ 'generic programming' techniques, and ease of use through an application programming interface (API) that functions independently of any GUI, on-screen display, or other enclosing application. Kip supports constructive solid geometry models based on any of several built-in shapes and operators and allows for new, user-defined shapes and operators. Additional features include basic texturing, input/output of models using a simple human-readable file format with full error checking and detailed diagnostics, and support for shared data parallelism. Kip is written in pure, ANSI Standard C++, is entirely platform independent, and is very easy to use, as it requires no build system, configuration or installation scripts, wizards, special preprocessing, makefiles, or external libraries.
Metamesh, Version 1.0
Metamesh is a general-purpose C++ language library for creating data structures that represent meshes. An important difference between Metamesh and other "mesh" libraries is that Metamesh does not provide a specific mesh format, in the usual sense, or tools or a GUI by which users build specific meshes. Rather, it provides a mechanism by which mesh formats themselves can be built, based on their constituent parts and the relationships between them.Consider that a mesh in up to three space dimensions can, in principle, contain nodes (0d entities, or points), edges (1d entities), faces (2d entities), and cells (3d, or volumetric, entities). A node might be defined in terms of (x), (x,y), or (x,y,z) in Cartesian coordinates; or perhaps something else, in a different coordinate system. An edge is typically defined from two nodes; say, "edge E goes from node A=(ax,ay) to node B=(bx,by)." Faces can reasonably be defined in terms of nodes or edges, and cells in terms of nodes, edges, or faces. Note also that someone might wish to support general faces or cells, or only specific variants - say, triangular faces and tetrahedral cells, or quadrilateral faces and hexahedral cells. Or, perhaps, both triangular and quadrilateral faces (but no others), with prisms for each cell. Consider also that a mesh can have the same or a lesser dimension than that of its enclosing space. In 3d, for example, one could have a full 3d mesh, a 2d "sheet" mesh with no cells, a 1d "parametrized curve" with neither faces nor cells, or even a 1d "point cloud." And, in addition to defining a mesh scheme, a user might wish to place additional data onto one or more mesh entities. Imagine, for example, a velocity at each node, a flux across each edge or face, and a mass or average density per cell. Metamesh supports all of this, through the use of C++ class and function templates, and template metaprogramming techniques. Programmers begin with constructs that Metamesh provides (or, users can define their own), and assemble them in particular ways in order to create particular mesh formats. Metamesh then provides functionality automatically to meshes that are constructed in this manner. Finally, Metamesh provides very general functions for spinning, extruding, visualizing, and performing input/output of whatever meshes a user builds with it.