1

以下数字是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 简单曲线:(来源:no-ip.org

我试图通过这段代码绘制这条曲线:

MoveToEx(hDC, 67, 134, NULL);  
POINT points[] = {{87, 30}, {48, 238}, {117, 143}};  
PolyBezierTo(hDC, points, 3);  

但我不能画同样的曲线,我画的曲线是:


(来源:no-ip.org

我的错误在哪里?是否需要任何转换?
谢谢。

4

1 回答 1

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

于 2013-01-14T09:05:42.287 回答