2013-01-14 56 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曲线。 –