A cutter location (CLData) refers to the position which a CNC milling machine has been instructed to hold a milling cutter by the instructions in the program (typically G-code). Each line of motion controlling G-code consists of two parts: the type of motion from the last cutter location to the next cutter location (e.g. "G01" means linear, "G02" means circular), and the next cutter location itself (the cartesian point (20, 1.3, 4.409) in this example). "G01 X20Y1.3Z4.409" The fundamental basis for creating the cutter paths suitable for CNC milling are functions that can find valid cutter locations, and stringing them together in a series. There are two broad and conflicting approaches to the problem of generating valid cutter locations, given a CAD model and a tool definition: calculation by offsets, and calculation against triangles. Each is discussed in a later section of this article. The most common example of the general cutter location problem is cutter radius compensation (CRC), in which an endmill (whether square end, ball end, or bull end) must be offset to compensate for its radius. Since the 1950s, CRC calculations finding tangency points on the fly have been done automatically within CNC controls, following the instructions of G-codes such as G40, G41, and G42. The chief inputs have been the radius offset values stored in the offset registers (typically called via address D) and the left/right climb/conventional distinction called via G41 or G42 (respectively). With the advent of CAM software, which added a software-aided option to complement the older manual-programming environment, much of the CRC calculations could be moved to the CAM side, and various modes could be offered for how to handle CRC. Although 2-axis or 2.5-axis CRC problems (such as calculating toolpaths for a simple profile in the XY plane) are quite simple in terms of computational power, it is in the 3-, 4-, and 5-axis situations of contouring 3D objects with a ball-endmill that CRC becomes rather complex. This is where CAM becomes especially vital and far outshines manual programming. Typically the CAM vector output is postprocessed into G-code by a postprocessor program that is tailored to the particular CNC control model. Some late-model CNC controls accept the vector output directly, and do the translation to servo inputs themselves, internally. By offsets Start with a UV parametric point in a freeform surface, calculate the xyz point and the normal, and offset from the