【问题标题】:How to draw curve by InDesign/Illustrator path points?如何通过 InDesign/Illustrator 路径点绘制曲线?
【发布时间】:2013-01-14 08:55:41
【问题描述】:

以下数字是 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

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

【问题讨论】:

  • @mhtaqia:我怀疑他在评论低分辨率和(尤其是)缺乏抗锯齿。

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


【解决方案1】:

嗯……

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

【讨论】:

  • 我试过了:POINT points[] = {{67, 134}, {87, 30}, {48, 238}, {117, 143}}; PolyBezier(hDC,点,4);结果是一样的,注意:第二个和第三个点是“控制点”。
  • @mhtaqia:是的,我很确定你想交换你的第一点和第二点,如我的回答所示。
  • 你的代码绘制的曲线是doxy.no-ip.org/jerry-curve.png 好像不是InDesign的曲线。
猜你喜欢
  • 2018-05-24
  • 2018-01-11
  • 2021-10-29
  • 2011-02-26
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
相关资源
最近更新 更多