如何通过InDesign / Illustrator路径点绘制曲线?

时间:2013-01-14 08:55:42

标签: c++ delphi adobe-indesign adobe-illustrator bezier

以下数字是来自 Adob​​e 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 个答案:

答案 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 - 将所有数据保存在一个地方。