cosimo pisze:
Z wrażenia omal z krzesła nie spadłem

ale można i tak. Jednak w ogóle nie potrzebnie się nad tym głowiłeś. Skoro potrafiłeś policzyć wektory odsunięte o offset to trzeba był łukiem pojechać z końca jednego na początek drugiego podając tylko promień łuku tak jak jest w linii 52 tego przykładu na obrazku. Tam jest jeszcze dodane Abs(diam) na wypadek „ujemnego” offsetu.
Dodatkowe funkcje obowiązkowo opiszę w manualu

.
Nie tylko ujemne offsety - ciekawe rzeczy robią się też jeśli figura ma zakręty "w lewo" a jeszcze zabawniej jest jeśli są w niej wcięcia - np. coś w rodzaju wybrania pod jaskółczy ogon.
W załączniku - kawałek kodu który liczy parametry łuku łączącego w moim programie (s1 i s2 - łączone segmenty, orginalConnectionPoint - miejsce gdzie przed dodaniem offsety segmenty się stykały)
double startTangential=s1->getTangentialAngle(1.0);
double endTangential=s2->getTangentialAngle(0.0);
double startAngle,endAngle;
if(offset<0)
{
startAngle=startTangential+(M_PI/2);
endAngle=endTangential+(M_PI/2);
if(startAngle<endAngle)
startAngle+=(2*M_PI);
}
else
{
startAngle=startTangential-(M_PI/2);
endAngle=endTangential-(M_PI/2);
if(startAngle>endAngle)
endAngle+=(2*M_PI);
}
PathXYSegment *connector = new PathXYSegment_Arc(orginalConnectionPoint,radius,startAngle,endAngle);
Pozdrawiam
Grzesiek