Introduction
‘You don’t learn to walk by following rules. You learn by doing, and by falling over.’ –Richard Branson
Being a classically trained Mechanical Engineer, it took a several hundred hours of self-study to become productive at application development. In hind sight it seems ridiculous that companies would fund this learning adventure, but when confronted with one small limitation at a time, it seems that persistence can yield remarkable things.
There really isn’t a great platform to share this body of learning:
• each facet is so highly specific that it is unlikely to be reused without modification;
• the technology (languages, libraries, techniques, …) are deliberately out dated as a the goal should be to develop timeless platforms;
• by industry standards these tools are generally incomplete (exception handling, error checking, dimension size verification, …) as the preferred strategy when conducting scientific measurements is to abandon the operation and point to exactly the source of the detected problem vs continuing with incomplete or erroneous data.
Throughout this work a collection of scrapped hardware components will be used to provide a consistent context and to protect IP related to any specific project that this work may have originated from.
As shown, this instrument will be a basic Optical CMM comprised of a motion system, 2D camera, and a 3D sensor. With these tools both images and height maps can be generated. Once the data has been collected it can be used in a multitude of ways, but as of now the focus of this work is to demonstrate and share the programming process including hardware interfacing, integration, graphic display, HMI/GUI, ect.. The successful demonstration of these will invariably include programming fundamentals which will for completeness only be covered briefly.
CMM Project Intro
This video (10/2018) reviews the motivation, discusses hardware, and a super high-level overview of the software components.

Application Devlopment
The CMM project above will, or already has, jumped right into interfacing hardware components and discussing specific CMM related algorithms. The goal of this section is to dial back, assume the follower has limited programming knowledge, and to build up the fundamental knowledge (and libraries) necessary to dive into the above content specifically related to the CMM project.
This video poses the question “what is an application” and proposes an architecture that will be essential to dividing low-level power (C++ DLL) and a modern and easy to program HMI (C# Windows Forms App).
