Ich möchte ein Lochmuster für Lautsprecher wie folgt erstellen:
Aber ich bin mir nicht sicher, wo ich anfangen soll. Geht das ohne mühseliges Positionieren in Illustrator oder ähnlicher Software?
Ob das Bild selbst in TK erstellt wurde, zur Hand ist oder nicht, legen Sie nicht fest. Wenn Sie diesen Code bereits haben, können Sie die Leinwand der TK-Anwendung als EPS exportieren und in Illustrator öffnen. Alles, was Sie tun müssen, ist anzurufen canvas.postscript()
.
Einfaches Beispiel in 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()
Dadurch entsteht eine Datei mit dem Namen "patten.eps"
.
Bild 1 : Öffnen des generierten EPS im Illustrator.
Sie können dies in ExtendScript, SVG oder direkt durch Schreiben des EPS-Programms tun, was alles einfach ist (siehe Anhang unten für einige Beispiele). Siehe folgende Beiträge für Ressourcen:
PS : Ich weiß nicht, ob es sich lohnt, ein Skript zu schreiben, da es ungefähr 3 Minuten dauert, sie mit Hilfe des Rotationswerkzeugs und Ctrl+ einzuzeichnenD
Bild 2 : Ein Ring mit obiger Methode
%!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);
}
Ich füge meine Methode hinzu, da sie mir am einfachsten erscheint. Grundsätzlich gilt für Sie:
Hier ist das Python-Skript (erfordert svgwrite
und 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())
Es erstellt eine SVG-Datei in dem Verzeichnis, in dem es sich befindet. Sie können diese in einem Browser öffnen:
Oder in Illustrator:
Sie sollten ein größeres Illustrator-Fenster als ich verwenden, meins war jedoch etwas zu klein, um bequem damit zu arbeiten ...
Wenn Sie Python-Skripts keine Dateien erstellen lassen können (möglicherweise in einem Online-Python-Interpreter ausführen), kommentieren Sie einfach dwg.save()
. Die letzte Zeile druckt den Inhalt der SVG-Datei auf die Konsole, Sie können dies in Notepad einfügen und dann als my file.svg
.
Ich habe mich hinreißen lassen und ein paar "nette" Funktionen hinzugefügt, wie:
Sie könnten diese einfach weglassen, da Illustrator keine Objekte außerhalb der Leinwandgrenzen ausblendet und Sie die Größe der Leinwand manuell ändern können:
Mit einem gestrichelten Strich können Sie schnell etwas Ähnliches wie Ihr Beispiel in Illustrator erstellen. Um die gleichmäßig verteilten Ringe einfach zu zeichnen, würde ich das Polar Grid Tool verwenden .
Dann müssen Sie nur noch den Strich auf den Ringen so einstellen, dass er mit Lücken gestrichelt ist, die Ihren Wünschen entsprechen:
Sie können natürlich jede Zeile feinabstimmen, um bei Bedarf weitere Punkte hinzuzufügen, indem Sie einfach den individuellen Abstandswert erhöhen oder verringern. Wenn das Lückenfeld aktiv ist, können Sie mit Ihrem Scrollrad den Wert schnell ändern. Halten Sie Ctrl / Cmdbeim Scrollen gedrückt, um die Einstellung in feineren Schritten vorzunehmen
Ein Problem bei dieser Methode besteht darin, dass sich einige Punkte möglicherweise überschneiden:
Diese müssen möglicherweise manuell bearbeitet werden, wenn sie perfekt sein sollen. Es sollte höchstens 1 Überlappung pro Reihe geben.
Der Verzerrungs- und Transformationseffekt von Illustrator ist perfekt für diese Art von sich wiederholenden Mustern, aber um genau dieses Muster zu erhalten, müssen einige Anpassungen vorgenommen werden. Beginnen Sie mit einer gepunkteten Linie (mit 11 Punkten für Ihr Beispiel)
Fügen Sie einen Transformationseffekt hinzu überEffect > Distort & Transform > Transform...
Sie werden feststellen, dass die inneren Reihen zu viele Punkte haben. Hier kommt die manuelle Optimierung ins Spiel, aber das sollte Sie weit genug bringen, um den Rest herauszufinden.
Verwenden Sie Inkscape:
Und das Ergebnis (unter Verwendung von 22,5 Grad, um dem Bild des OP zu entsprechen):
Superbest
Peter Wone