Planned Features - noodlecollie/calliper GitHub Wiki


  • Create project files, which encompass all files relevant to the given project. This includes individual map files, custom contents, metadata, etc.
  • Add and remove files from the project. File paths are relative to the project file, and do not have to be underneath it in the file system tree.
  • Display project files in a tree view.
  • Open a file by double-clicking it in the tree view. Files that the application cannot open should prompt the user to select an appropriate program.

Editing Operations

  • Translate any object in local or global axes. Align to grid via origin, vertex, bounding box vertex, or other user-defined point.
  • Rotate any object around local or global axes, or user-defined axis. Rotate around origin, centroid or other user-defined point.
  • Scale any compatible object in local or global axes. Allow scaling from origin, centroid or from edge of bounding box, and along any combination of the chosen axes (ie. single axis, two axes or all three axes).
  • Align operations to a grid. The grid can be aligned to world axes, or to the axes of a specific object.
  • Change the grid's resolution, between 1 and 512 units, in powers of two.
  • Assign parents to objects, where transformations to the parent affect the children.

Camera Control

  • Navigate the camera through mouse-look controls, toggleable on or off via a key.
  • Control the camera as in 3D modelling software, using orbit, track and dolly motions.


  • Create cuboid brushes via a bounding box, aligned to the grid. Clicking and dragging should resize the box in two dimensions; rolling the mouse wheel should change the depth in the third dimension.
  • Create more complex brush primitives, eg. cylinders, toruses, arches.
  • Update complex brush primitives live as their parameters are changed. Allow the user to modify a complex primitive's parameters for as long as possible, eg. until a clip operation converts a cylinder down to being a standard brush.


  • Apply a given texture to a brush face by clicking on the face.
  • "Paint" the same texture onto multiple brush faces by clicking and dragging the mouse across all the faces.
  • Configure the texture axes to be defined relative to the brush, the parent or the world.
  • Translate and scale the texture by inputting numerical values.
  • Align the texture to the left, right, top, bottom or centre of the brush face.
  • Fit the texture to the brush face horizontally, vertically or in both axes.
  • Drag the texture with the mouse to translate it on the brush face.

Texture and Model Browsing

Same principles apply to both textures and models.

  • Choose an item from a tree of available items.
  • See a preview of each item, whose representation is as close as possible to its in-game appearance. This includes animating textures, displaying reflection/refraction effects, displaying animations and skins, etc.
  • Filter item by keyword and by file name.
  • Assign items to automatic groups (eg. skybox, UI, detail, etc.) and to user-defined groups, and filter by group.


  • Convert a brush face to or from a displacement face. Specify the density of the vertices on the face.
  • Transform displacement vertices in the same way as a 3D modelling program would allow: translation, rotation and scale.
  • Align translation operations to a given vertex or to a user-defined point.
  • Specify the axis of rotation to be a world axis, an object axis or some user-defined axis. Rotate around the centroid or a user-defined point.
  • Scale points in local or global axes. Scale from centroid or from one edge of the bounds of the selected vertices. Scale on any combination of the chosen axes.
  • Apply translation operations to displacement vertices using specialised manipulation brushes, eg. raise/lower, flatten, smooth, noise. Each brush type should be configurable with falloffs, etc.
  • Allow brush manipulations to act along the current face normal, any of the global or local axes, or along a user-defined axis.


  • Create entities of a given type by clicking on the desired location in the 3D view.
  • Create entities oriented to the normal of the surface that was clicked on.
  • Continually create entities as the mouse is dragged across the view.
  • Create entities scattered within a brush area, eg. within some radius around the point that was clicked on.
  • Replicate entities along a given axis, eg. to create a stack of boxes.


  • Configure the compile pipeline stages.
  • Specify the program and input parameters for each stage, with the ability to choose from a number of variables that relate to the current map or project, eg. map file name, custom content to embed, etc.


  • Change the style sheet for the application.
  • Configure a list of bookmarks to useful websites, eg. TF2Maps.
  • Specify the FGD and paths to be used for the current game configuration.
  • Configure speed and sensitivity for camera.


  • Display FGD help for given item as auto-generated rich text, with contents, links, etc. Include support for Markdown?