我想创建一个像这样的扬声器孔模式:
但我不知道从哪里开始。这是否可以在不费力地在 Illustrator 或类似软件中定位的情况下实现?
我想创建一个像这样的扬声器孔模式:
但我不知道从哪里开始。这是否可以在不费力地在 Illustrator 或类似软件中定位的情况下实现?
您实际上并没有指定图像是否是您在 TK 中自己生成的,手头是否有。如果您已经拥有此代码,则可以将 TK 应用程序画布导出为 EPS 并在 illustrator 中打开它。您需要做的就是调用canvas.postscript()
.
python 2中的简单示例:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from Tkinter import *
import math
def circle(c, x, y, r=10):
return c.create_oval(x-r, y-r, x+r, y+r, width=0, fill="black")
def draw_circles(c, num, r):
step = (2.0*math.pi)/float(num)
for i in range(num):
x = 400 + r * math.sin(i*step)
y = 400 + r * math.cos(i*step)
circle(c, x, y)
main_window = Tk()
main_window.title('Pattern to EPS')
canvas = Canvas(main_window,
width=800, height=800,
bg = 'white')
circle(canvas, 400, 400)
for i in range(1, 6):
draw_circles(canvas, i*8, i*60)
canvas.pack()
# next line generates a eps file
canvas.postscript(file = "pattern.eps", width=800, height=800 )
# uncomment next line if you want to see the tk window
# main_window.mainloop()
这会产生一个名为"patten.eps"
.
图 1:在 illustrator 中打开生成的 EPS。
您可以在extendScript、SVG 中或直接通过编写EPS 程序来执行此操作,所有这些都很容易做到(请参阅下面的附录中的一些示例)。有关资源,请参阅以下帖子:
PSCtrl :我不知道它是否值得编写脚本,因为在旋转工具和+的帮助下绘制它们大约需要 3 分钟D
图 2 : 使用上述方法的一个环
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 800 800
%%Title: pattern
%%Creator: joojaa
%%CreationDate: 2015-07-08
%%EndComments
/c {newpath 10 0 360 arc closepath fill} def
/cr {
dup 8 mul 2 dict begin /i exch def /r exch 60 mul def
1 1 i {360 i div mul dup sin exch cos r mul exch r mul c} for
end
} def
400 400 translate
0 0 c
1 1 6 {cr} for
%%EOF
#target illustrator
var doc = app.activeDocument;
function circle(x,y) {
doc.pathItems.ellipse(x+5,y-5,10,10);
}
function draw_circles(num, r){
var step = (2.0*Math.PI)/num;
for (var i = 0; i < num; i++) {
var x = -200 + r * Math.sin(i*step);
var y = 200 + r * Math.cos(i*step);
circle(x, y);
}
}
circle(-200,200);
for (var i = 1; i <= 6; i++) {
draw_circles(i*8, i*30);
}
我将添加我的方法,因为在我看来它是最简单的。基本上,你:
这是 Python 脚本(需要svgwrite
和math
):
"""
This script has two purposes:
- Simple demonstration of using Python (specifically the svgwrite library) to create an SVG file
- Answer the question http://graphicdesign.stackexchange.com/q/56200/21332
"""
# n[x] should give the number of circles at a distance of (x+1)*d from the center
d = 30
n = [8, 16, 20, 20, 20]
r = 7 # radius of each circle
# Calculate the center points of each circle
circles = [(0, 0)] # There is always one circle in the middle
import math
for i in range(0, len(n)):
m = n[i] # m is the number of circle in this "row", i is the number of the row
for j in range(0, m): # for each circle...
phi = 2*math.pi*j/m # Calculate the angle at which the circle will be
# Convert polar coordinates to cartesian
x = d*(i+1)*math.cos(phi)
y = d*(i+1)*math.sin(phi)
circles.append((x, y))
# Write circles to SVG
import svgwrite
# Determine correct size of drawing
width = max([c[0] for c in circles])*2.2
height = max([c[1] for c in circles])*2.2
dwg = svgwrite.Drawing('demo.svg', size = (width, height)) # output will be in the same folder as this script
# offsets for shifting all circles so that the SVG can be easily viewed in browser
x_offset = min([c[0] for c in circles])*1.1
y_offset = min([c[1] for c in circles])*1.1
for c in circles:
adjusted_x = c[0] - x_offset
adjusted_y = c[1] - y_offset
dwg.add(svgwrite.shapes.Circle((adjusted_x, adjusted_y), r))
# Save the file
dwg.save()
# Print SVG source to console
print(dwg.tostring())
它将在它所在的目录中创建一个 SVG 文件。您可以在浏览器中打开它:
或在 Illustrator 中:
你应该使用比我更大的 Illustrator 窗口,不过,我的窗口太小了,无法舒适地使用......
如果您不能让 Python 脚本创建文件(可能在在线 Python 解释器中运行它),那么只需注释掉dwg.save()
. 最后一行将 SVG 的内容打印到控制台,您可以将其粘贴到记事本中,然后另存为my file.svg
.
我得意忘形并添加了一些“整洁”的功能,例如:
您可以轻松地忽略这些,因为 Illustrator 不会隐藏画布边界之外的对象并允许您手动调整画布大小:
您可以使用虚线快速制作与 Illustrator 中的示例类似的内容。为了轻松绘制均匀分布的环,我会使用Polar Grid Tool。
然后只需将环上的 Stroke 设置为虚线,以符合您的喜好:
如果需要,您当然可以微调每一行以添加更多点,只需增加或减少单个间隙值。激活间隙框后,您可以使用滚轮快速更改值。滚动时按住Ctrl / Cmd以以更精细的增量进行调整
这种方法的一个问题是某些点可能有一些重叠:
如果您需要它们完美,则可能需要手动编辑它们。每行最多应有 1 个重叠。
Illustrator 的扭曲和变换效果非常适合这种重复图案,但为了获得准确的图案,需要进行一些调整。从虚线开始(以 11 个点为例)
通过添加变换效果Effect > Distort & Transform > Transform...
您会注意到内行的点太多。这就是手动调整的用武之地,但这应该让你足够远,可以弄清楚其余部分。