1

次の数字は、 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 単純曲線: (出典: 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、2 番目は 87,30、3 番目は 48,238 です。

Y 値が 134、次に 30、次に 238 の場合、得られているように見えるものについて期待できます。つまり、一方向に進み、反対方向に急激に戻る線です。

InDesign から得られる最初のポイントは「方向」ポイントですが、PolyBezier の場合、最初と最後のポイントがアンカーです。絶対に確実ではありませんが、アンカーが最初と最後になるようにポイントを再配置し、InDesign の「方向」ポイントがその間の 2 つのコントロール ポイントとして使用されるようにする必要があると思います。

POINT points[] = {{87, 30}, {67, 134}, {48,238}, {117, 143}};   
//                 anchor,   control,   control,  anchor
PolyBezier(hDC, points, 4);

他に MoveTo/LineTo (など) を使用していない限り、PolyBezierTo の代わりに PolyBezier を使用します。すべてのデータを 1 か所に保持します。

于 2013-01-14T09:05:42.287 に答える