以下数字是来自 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
我的错误在哪里?是否需要转换?
感谢。
答案 0 :(得分:4)
嗯...
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 - 将所有数据保存在一个地方。