Как нарисовать кривую по точкам пути InDesign / Illustrator?

Следующие числа являются точками пути очень простой кривой из 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

Где моя ошибка? Нужна ли какая-либо конверсия?
Благодарю.

1

Решение

Хм …

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 — все данные хранятся в одном месте.

4

Другие решения

Других решений пока нет …