Axiom - Geometry and Graphics Structures

On these pages I am trying to understand the Axiom geometry and graphics structures, add extra code to export these to 3D graphics files and try to find a simpler way to work with these things

My motivation is to:

The draw and plot commands in axiom are well documented. However I have been having some difficulty getting information about some of the geometry and graphics structures that surround them.

I have found some documentation here:

but mostly I have been trying to work out the information from the code files. As I work out how the existing Axiom code works in this area I have been putting my documentation on this page.

Applications of Graphics In Axiom


For instance I would like to:

  • define shapes and show union and intersection (join and meet)
  • slice through shapes and show sections.
  • show scales and grids
  • combine many graphs in one view
  • add annotations in 3D view.
  • define and transform shapes using Clifford algebra as well as usual Matrix methods.
  • Use structures that can be extended to n-dimensions and are not specific to 2 or 3(+ 1 for colour) dimensions.
conformal plane

Existing Axiom Graphics Structures

Click on a structure in this diagram to see more about it:

axiom graphics structures ThreeSpace SubSpace SubSpaceComponentProperty ThreeDimensionalViewport TwoDimensionalViewport GraphImage ViewDefaultsPackage DrawComplex TwoDimensionalPlotClipping RealSolvePackage PlaneAlgebraicCurvePlot CoordinateSystems DenavitHartenbergMatrix TopLevelDrawFunctionsForCompiledFunctions GraphicsDefaults VariousOpenInventorStructures gnuPlot MoebiusTransform Point PointPackage PointFunctions2 ParametricPlaneCurve ParametricSpaceCurve ParametricSurface PlottablePlaneCurveCategory PlottableSpaceCurveCategory Plot3D Plot PlotTools ViewportPackage DrawOption TubePlot

I am trying to put together documentation for each of these categories, packages and domains on this page.

My first impression of geometry and graphics structures is that it seems messy, it would be nice to have a more consistent set of conventions, it is hard for me to discover an overall plan so I have tried to show the main connections in the above diagram. Of course the implementation is a lot more complicated than that.

One of the things that makes it so complicated is that it it written in a mixture of spad,C and Lisp.

Other issues that concern me:

Scene Graph and Open Inventor

axiom scene graph

A scenegraph structure would be much better. The advantage of a scene graph is that transforms can be applied without modifying the points defining the geometry. This is faster and also minimises the accumulation of rounding errors when floating point numbers are subject to many calculations. In the scene graph structure each geometry primitive is defined in its local coordinate system. To get its absolute coordinates we have to apply all the transform nodes between it and the root node.

Many 3D file formats such as X3D, VRML and Java3D are based on a scene graph and these are based on an older standard called Open Inventor. Open Inventor, originally IRIS Inventor, is a C++ object oriented retained mode 3D graphics API designed by SGI to provide a higher layer of programming for OpenGL.

There seem to be many structures in axiom to implement Open Inventor (IVNodeCategory, RenderTools, IVSimpleInnerNode, IVSeparator, IVGroup, IVCoordinate3, IVQuadMesh, IVIndexedLineSet, IVUtilities).

I can't find any documentation about using Open Inventor structures from Axiom, apart from the discussion on this thread:

Is it one of the write modes available: 'pixmap','bitmap','postscript' or 'image' files?

Exporting Graphics Information

I would like to be able to output a draw 3D image to a standard 3D file format rather than the x-window. Axiom/Fricas does have the ability to write to 'pixmap','bitmap','postscript' and 'image' files, however most of these formats flattern the 3D geometry information to a 2D image or are quite out-of-date file formats.

I want a format which I can import into a 3D editor like blender. Also it must be able to output any geometry, either produced by draw/plot or makeObject or built from primitives. For instance so that a plot can be exported together with axes and grid.

I am looking at creating two graphics output writers (because they would have complimentary capabilities):

I am putting information about this work on this page as I do it.

Existing File Formats

Any information that I can find out about the 'pixmap','bitmap','postscript' and 'image' export capability of Axiom (and the working datafile format 'viewfile?') I will put on this page.

metadata block
see also:
Correspondence about this page

Book Shop - Further reading.

Where I can, I have put links to Amazon for books that are relevant to the subject, click on the appropriate country flag to get more details of the book or to buy it from them.

flag flag flag flag flag flag Axiom Volume 1: Tutorial. Documentation is freely availible from:


This site may have errors. Don't use for critical systems.

Copyright (c) 1998-2021 Martin John Baker - All rights reserved - privacy policy.