A fillet is tangential to two lines. The curve of the fillet is always tangential to a line drawn between its start and control points and a line drawn between its end and control points.
The following figure shows an example of how to draw a single curve, using the current position and two control points.
#include <os2.h> HPS hps; /* Presentation-space handle */ MRESULT EXPENTRY wpClient(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2){ POINTL aptl[2]; /* Structure for control points */ aptl[0].x = 50; /* Loads x-coord. of first control point */ aptl[0].y = 50; /* Loads y-coord. of first control point */ GpiMove(hps, aptl); /* Sets current position */ aptl[0].x = 75; /* Loads x-coord. of second control point */ aptl[0].y = 75; /* Loads y-coord. of second control point */ aptl[1].x = 100; /* Loads x-coord. of third control point */ aptl[1].y = 50; /* Loads y-coord. of third control point */ GpiPolyFillet(hps, 2, aptl); /* Draws fillet */ } /* wpClient */
When you draw a sharp fillet, the sharpness value controls the shape of the curve, as shown in a previous table.
The following figure shows an example of using a sharpness value of 3, which creates a hyperbolic curve.
#include <os2.h> HPS hps; /* Presentation-space handle */ MRESULT EXPENTRY wpClient(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2){ POINTL aptl[2]; /* Structure for control points */ FIXED fxSharpness; /* Sharpness value */ aptl[0].x = 50; /* Loads x-coord. of first control point */ aptl[0].y = 50; /* Loads y-coord. of first control point */ GpiMove(hps, aptl); /* Sets current position */ aptl[0].x = 75; /* Loads x-coord. of second control point */ aptl[0].y = 75; /* Loads y-coord. of second control point */ aptl[1].x = 100; /* Loads x-coord. of third control point */ aptl[1].y = 50; /* Loads y-coord. of third control point */ fxSharpness = MAKEFIXED(3, 0); /* Sets sharpness value */ GpiPolyFilletSharp(hps, /* Draws fillet */ 2L, aptl, &fxSharpness); } /* wpClient */