Следующие числа являются точками пути очень простой кривой из Adobe InDesign:
pathPoint0 = app.selection[0].paths[0].pathPoints[0] // PointType: SMOOTH
pathPoint1 = app.selection[0].paths[0].pathPoints[1] // PointType: PLAIN
pathPoint0.leftDirection : {x=87.32570997045623, y=30.81406367905744}
pathPoint0.anchor : {x=67.69218412206757, y=134.53280706833522}
pathPoint0.rightDirection : {x=48.0586582736789, y=238.25155045761298}
pathPoint1.anchor : {117.05865827421783, 143.2515504576449}
Кривая содержит 2 точки пути, гладкую точку и плоскую точку.
InDesign простая кривая:
http://doxy.no-ip.org/idcurve.png
Я пытаюсь нарисовать эту кривую с помощью этого кода:
MoveToEx(hDC, 67, 134, NULL);
POINT points[] = {{87, 30}, {48, 238}, {117, 143}};
PolyBezierTo(hDC, points, 3);
Но я не могу нарисовать ту же кривую, моя нарисованная кривая:
http://doxy.no-ip.org/mycurve.png
Где моя ошибка? Нужна ли какая-либо конверсия?
Благодарю.
Хм …
MoveToEx(hDC, 67, 134, NULL);
POINT points[] = {{87, 30}, {48, 238}, {117, 143}};
Ваше первое очко 67,134, второе 87,30, третье 48,238.
При значениях Y 134, а затем 30, а затем 238. Я бы ожидал, что вы, похоже, получаете — линию, которая идет в одном направлении, а затем резко возвращается в противоположном направлении.
Первая точка, которую вы получаете от InDesign, это точка «направления», но для PolyBezier первая и последняя точки являются якорями. Я не совсем уверен, но я думаю, что вам нужно переставить точки так, чтобы ваши привязки были первыми и последними, а точки «направления» InDesign используются в качестве двух контрольных точек между ними:
POINT points[] = {{87, 30}, {67, 134}, {48,238}, {117, 143}};
// anchor, control, control, anchor
PolyBezier(hDC, points, 4);
Если вы не используете MoveTo / LineTo (и так далее), я бы просто использовал PolyBezier вместо PolyBezierTo — все данные хранятся в одном месте.
Других решений пока нет …