Voglio creare un modello di fori per gli altoparlanti in questo modo:
Ma non sono sicuro da dove cominciare. Ciò può essere ottenuto senza un posizionamento laborioso in Illustrator o software simile?
Voglio creare un modello di fori per gli altoparlanti in questo modo:
Ma non sono sicuro da dove cominciare. Ciò può essere ottenuto senza un posizionamento laborioso in Illustrator o software simile?
Risposte:
Aggiungerò il mio metodo, poiché mi sembra che sia il più semplice. Fondamentalmente, tu:
Ecco lo script Python (richiede svgwrite
e 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())
Creerà un file SVG nella directory in cui si trova. Puoi aprirlo in un browser:
O in Illustrator:
Dovresti usare una finestra Illustrator più grande di me, anche se la mia era un po 'troppo piccola per lavorare comodamente ...
Se non puoi avere gli script Python per creare file (magari eseguendolo in un interprete Python online), commenta semplicemente dwg.save()
. L'ultima riga stampa il contenuto di SVG sulla console, è possibile incollarlo nel Blocco note, quindi salvare come my file.svg
.
Mi sono lasciato trasportare e ho aggiunto alcune funzionalità "pulite", come:
Potresti facilmente lasciarli fuori, poiché Illustrator non nasconde oggetti al di fuori dei limiti della tela e ti consente di ridimensionare la tela manualmente:
In realtà non si specifica se l'immagine è qualcosa che ti sei generato o meno in TK, che hai a portata di mano o meno. Se disponi già di questo codice, puoi esportare la tela delle applicazioni TK come EPS e aprirla in Illustrator. Tutto quello che devi fare è chiamare canvas.postscript()
.
Esempio semplice 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()
Ciò si traduce in un file denominato "patten.eps"
.
Immagine 1 : apertura dell'EPS generato in Illustrator.
Puoi farlo in extayScript, SVG o direttamente scrivendo il programma EPS, tutti facili da fare (vedi l'appendice sotto per alcuni esempi). Vedi i seguenti post per le risorse:
PS : Non so se valga la pena scrivere script in quanto ci vogliono circa 3 minuti per attirarli con l'aiuto dello strumento di rotazione e Ctrl+D
Immagine 2 : un anello con il metodo sopra
%!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);
}
Puoi creare rapidamente qualcosa di simile al tuo esempio in Illustrator usando un tratto tratteggiato. Per disegnare facilmente gli anelli equidistanti, utilizzerei lo strumento griglia polare .
Quindi è solo una questione di impostare il tratto sugli anelli a tratteggiato con spazi che si adattano ai tuoi gusti:
Puoi ovviamente mettere a punto ogni riga per aggiungere più punti, se necessario, basta aumentare o diminuire il valore del gap individuale. Con la casella gap attiva, è possibile utilizzare la rotella di scorrimento per modificare rapidamente il valore. Tenere Ctrl / Cmdpremuto durante lo scorrimento per regolare con incrementi più fini
Un problema con questo metodo è che potrebbero esserci delle sovrapposizioni in alcuni punti:
Potrebbe essere necessario modificarli manualmente se ne hai bisogno per essere perfetti. Dovrebbe esserci al massimo 1 sovrapposizione per riga.
L'effetto di distorsione e trasformazione di Illustrator è perfetto per questo tipo di motivo ripetuto, ma per ottenere quel motivo esatto richiederà alcune modifiche. Inizia con una linea tratteggiata (con 11 punti per il tuo esempio)
Aggiungi un effetto Transform via Effect > Distort & Transform > Transform...
Noterai che le righe interne hanno troppi punti. È qui che arriva la modifica manuale, ma questo dovrebbe portarti abbastanza lontano da capire il resto.
Usa Inkscape:
E il risultato (usando 22,5 gradi per abbinare l'immagine dell'OP):