cadview – 1: Introduction

cadview is a C++ library which provides a cross-platform GUI widget for 2D drafting. Presently, the following features are supported:

  • Zoom/Pan
  • Polyline tool
  • Entering x,y co-ordinates via mouse selection or text entry


No installation packages are available yet and the executable has to be built from source. cadview depends on the following tools and libraries:

On a Fedora 16/17 machine, you can install the above dependencies as follows:

Obtain the source using Mercurial as follows:

This should place the source in a directory named cadview in your current directory. To build the binaries:

gladeui is a test application that uses cadview on GTK+. You can run gladeui as follows:

Select File>Polyline to activate the polyline tool. The UI controls are as follows:

  • Click to add a point to the polyline
  • A point can also be added by entering an x,y co-ordinate pair in the textbox and hitting <Enter>
  • Pan by holding down the middle mouse button
  • Zoom by turning the mouse wheel
  • Right-click or hit <Esc> to end the polyline

Screenshot of cadview

Design Overview

The visible area of the widget – the view – is represented by the cad_gui_view class. cad_gui_view does not interact directly with the underlying GUI but instead depends on a pair of adaptor classes for GUI facilities.

The first adaptor class is the template parameter U of cad_gui_view and provides facilities like getting the position of the mouse cursor (get_mouse_position) and invalidating the view (invalidate). The second adaptor class is the U::graphics_type type. This type provides facilities to draw on screen (draw_polyline, move_to, line_to) and converting between screen and world co-ordinates (device_to_user).

The cad_gtk_adaptor is an implementation of the first adaptor class (the U parameter) using GTK+. cad_cairo_graphics implements the U::graphics_type using cairo. In a similar way, we can create adaptors for other GUI platforms (e.g. cad_windows_adaptor to wrap around Windows API and cad_windows_graphics to talk to an HDC).

MySQL calls via PDO fail silently

By default any error that occurs on a MySQL call via PDO fails quietly. The caller must inspect $pdo->errorCode() to see if the call succeeded/failed. This behaviour can be changed by setting the ATTR_ERRMODE attribute either while constructing the PDO object or after construction via setAttribute.