2013-01-14 113 views
1

以下編號是一個非常簡單的曲線的路徑點從Adob​​e公司的InDesign如何通過InDesign/Illustrator路徑點繪製曲線?

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

我不明白。 –

+1

@mhtaqia:我懷疑他在評論低分辨率和(尤其是)缺乏反鋸齒。 –

回答

4

嗯......

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

你的第一點是67134第二個是87,30和你的第三個48238。

在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 - 保持所有的數據在一個地方。

+0

我試過了:POINT points [] = {{67,134},{87,30},{48,238},{117,143}}; PolyBezier(hDC,積分,4);結果是一樣的,注意:第二和第三個點是「控制點」。 –

+0

@mhtaqia:是的,我敢肯定你想交換你的第一和第二點,如我的答案所示。 –

+0

您的代碼繪製的曲線是http://doxy.no-ip.org/jerry-curve.png它似乎不是InDesign曲線。 –