这个问题包含两个单独的问题,
出于所有意图和目的,这些都是无关的。在我看来,您问第一个问题的唯一原因是因为您不知道如何在 GUI 中精确定位项目,但我可能错了。我将展示Adobe Illustrator,因为这就是我手头的东西。
使用 GUI 工具精确定位
精确定位事物的第一种方法是使用网格和网格对齐。这是一个 GUI 等效概念,在键入值时仅使用 x 位精度。当您减少可以定位点的位置时,您更有可能在其他地方复制定位。对称的手柄定位导致对称的结果。
图 1:对齐网格使定位可预测。
另一种方法是精确绘制一半形状并使用镜像工具生成对称的一半。另一种方法是使用一条小曲线作为量角器,然后捕捉到它的点。所以你看到有很多选项可以做到这一点,而不必费心去脚本层。
使用 Adobe ExtendScript 进行程序化定位
Adobe 提供了一个与平台无关的 javaScript 实现,称为 ExtendScript。模拟手工完成的脚本如下所示:
#target illustrator
var doc = app.activeDocument;
var pathItem = doc.pathItems.add();
pts = [[0,0], [5,0], [5,5], [0,5]]
// match units of drawn document
// convert points to 2 * mm
for(var i=0; i< pts.length; i++) {
for(var j=0; j< pts[i].length; j++) {
pts[i][j] *= 2 * 2.83464567;
}
}
var point1 = pathItem.pathPoints.add();
point1.anchor = pts[0];
point1.leftDirection = point1.anchor;
point1.rightDirection = pts[1];
var point2 = pathItem.pathPoints.add();
point2.anchor = pts[3];
point2.leftDirection = pts[2];
point2.rightDirection = point2.anchor;
pathItem.stroke = true;
pathItem.fill = false;
只需将其粘贴到扩展脚本工具包中进行测试,或放入.jsx
文件中
使用文件的程序化定位(后记)
有时您想使用任意程序来生成矢量图。可以做到这一点的输出格式的明智选择是:
- PS/EPS , (封装的) PostScript
- 可移植文件格式
- 可缩放矢量图形
- 图形交换格式
- 增强型元文件
在这些格式中, EPS和DXF的卷积最少。SVG也是一个不错的选择,但有点过于冗长,而且仍然像 PDF 绘图层一样神秘。也可以生成 PDF,但除非你有绘图 API,否则它是额外的工作(就像 QT 或 Cairo,但它绝不是困难,只是有点复杂)。我使用EPS是因为我有时需要手写EPS ,所以我很熟悉。
在EPS文件中绘制上述形状如下所示:
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 40 40
%%Title: Graph Drawing
%%Creator: Janne Ojala
%%CreationDate: 2013-03-23
%%EndComments
% optional stuff to get
% same scale as my settings
/mm {2.83464567 mul} def
2 mm dup scale % 1 unit = 2 mm
1 2 mm div setlinewidth
1 1 translate % offset
% end optional
newpath
0 0 moveto
5 0 5 5 0 5 curveto
stroke
%%EOF
其中第一部分第一行和最后一行是强制性的%%EOF
。绘图的核心是用 moveto 和 curve to 完成的,其中数字对是 4 个控制点。只需将其放在带有.eps
扩展名的文本文件中即可正常使用。
结果
比较解决方案,您可以看到与替代方案相比,javaScript 方法相当繁琐。
图 2:手绘(红色)、javascript(绿色)和 EPS 曲线(黑色)之间的比较
如需更多资源,请阅读:
TL;博士
是的,您可以以编程方式制作曲线。然而,精度不需要这个。这篇文章包含 2 种可编程访问的方法,以及一个关于如何在 GUI 中做同样事情的讨论。