Downloads: Source Code (Visual Studio 2008 SP1, C++) [Zip]


CloneTool is a simple tool for interactively combining meshes via a brusing interaction similar to the "clone brush" in 2D image painting software. The user selects a source region, which is smoothed and subtracted to extract a vector detail layer. This detail mesh is then copied to a target region, with the copy area specified by interactive brushing.

The Geometric Clone Brush is described in the following paper:

Drag, Drop, and Clone: An Interactive Interface for Surface Composition (2010).  Ryan Schmidt, Karan Singh.
Technical Report CSRG-611, Department of Computer Science, University of Toronto [PDF] [Video] [siggraph 2010 sketch]

Note: If you are interested in the Geometric Clone Brush, you should definitely check out GeoBrush, a more recent work that is far more capable (can copy non-height-field features, including non-disc topology, etc).

Here is a screenshot:

CloneTool is built on top of the libgeometry library (included in the subdirectory libgeometry\) which is in turn built on top of WildMagic4 from GeometricTools. To build CloneTool you will need to follow three steps:

  1. run libgeometry\WildMagic4\autobuild_vs2008_x64.bat (or autobuild_vs2008.bat if you have a 32-bit machine)
  2. open CloneTool\CloneTool.sln
  3. build and run

Note that some pre-compiled static libraries are included (for exmaple GLUT and GLUI). These are built for Visual Studio 2008 SP1 and are unlikely to work with other versions (but they might - who knows!).

Here is a list of controls, which you will need to know to use the software:

  • Camera Control uses Maya Keys (ALT+LMB: rotate, ALT+MMB: pan, ALT+RMB: zoom)
  • 'c' key begins clone operation (ESC key cancels)
  • Once clone is active, LMB-drag to position source region for clone operation. (you will see smoothed surface rendered in dark blue)
  • RMB-drag to position target region for clone (rendered in orange)
  • Click PAINT button to fix source location and begin painting
  • In paint mode, LMB-drag on source or target to paint increase in transfer weight (rendered in red)
  • Shift-LMB to paint inverse (reduce transfer weight)
  • During painting you can shift-drag RMB to reposition target region (paint mask is kept)
  • shift-drag LMB or RMB to scale source/target regions, ctrl-drag to rotate (only target region, during painting)
  • Use left/right arrow keys to increase/decrease smoothing on source region (before and during painting)
  • Click Accept or press 'a' to bake in clone operation

There are also options for each of the tools. You'll have to figure those out on your own...

Known Bugs

Too many to list. This is research software. It is not robust or efficient. Good luck!

If you are running inside the Visual Studio debugger and it is very slow, make sure you have set the environment variable _NO_DEBUG_HEAP=1 in the Environment field of the Debugging options in the CloneTool Configuration Properties (right-click on the CloneTool project in the Solution Explorer and select Properties at the bottom to get there). This will make an enormous difference.


This majority of this code is released under the Boost 1.0 License, so you can use it for any purpose, commercial or non-commercial. However, some of the code is taken from other sources and you will need to respect their individual licenses:

The subdirectory libgeometry\WildMagic4 is taken from the WildMagic library (version 4) developed and distributed by Dave Eberly at WildMagic contains, quite simply, the best low-level math library ever, and you should use it for everything. It is similarly under the Boost 1.0 License.

The subdirectory libgeometry\external\eigen contains the Eigen 3 distribution, a C++ headers-only math library. Eigen may be used under the LGPL3 or GPL3 licenses (FAQ).

The subdirectory libgeometry\external\SparseMatrix contains pre-compiled libraries that themselves contain compiled versions of many other math libraries, including LAPACK, BLAS, TAUCS, METIS, UMFPACK, and more. Please see the GSI page for details.

The subdirectory CloneTool contains pre-compiled static libraries for GLUT, by Mark Kilgard, and GLUI, by Paul Rademacher. GLUT is "not public domain but freely redistributable" (link) and GLUI is distributed under the LGPL.

The file libgeometry\mesh_processing\Triangulator2D.cpp contains the source code to the TRIANGLE software, copyright Jonathan Richard Shewchuk. This code may not be used in commercial products without permission from the copyright owner. Please contact him, not me.

If you want to reference TRIANGLE, here is a citation:

Jonathan Richard Shewchuk, Triangle: Engineering a 2D Quality Mesh Generator and Delaunay Triangulator, in ``Applied Computational Geometry: Towards Geometric Engineering'' (Ming C. Lin and Dinesh Manocha, editors), volume 1148 of Lecture Notes in Computer Science, pages 203-222, Springer-Verlag, Berlin, May 1996. (From the First ACM Workshop on Applied Computational Geometry.) [PostScript] [HTML].



Back To
DCS Logo
DGP Logo