Je veux créer un motif de trous d'enceinte comme celui-ci:
Mais je ne sais pas par où commencer. Est-ce possible sans un positionnement laborieux dans Illustrator ou un logiciel similaire?
Je veux créer un motif de trous d'enceinte comme celui-ci:
Mais je ne sais pas par où commencer. Est-ce possible sans un positionnement laborieux dans Illustrator ou un logiciel similaire?
Réponses:
J'ajouterai ma méthode, car il me semble que c'est la plus simple. Fondamentalement, vous:
Voici le script Python (nécessite svgwrite
et 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())
Il créera un fichier SVG dans le répertoire où il se trouve. Vous pouvez l'ouvrir dans un navigateur:
Ou dans Illustrator:
Vous devriez utiliser une fenêtre Illustrator plus grande que moi, cependant, la mienne était un peu trop petite pour travailler confortablement ...
Si vous ne pouvez pas demander aux scripts Python de créer des fichiers (peut-être en les exécutant dans un interpréteur Python en ligne), commentez simplement dwg.save()
. La dernière ligne imprime le contenu du SVG sur la console, vous pouvez le coller dans le Bloc-notes, puis l'enregistrer sous my file.svg
.
Je me suis laissé emporter et j'ai ajouté quelques fonctionnalités "soignées", comme:
Vous pouvez facilement les ignorer, car Illustrator ne masque pas les objets en dehors des limites du canevas et vous permet de redimensionner le canevas manuellement:
Vous ne spécifiez pas réellement si l'image est quelque chose que vous avez vous-même générée en savoirs traditionnels, que vous avez sous la main ou non. Si vous disposez déjà de ce code, vous pouvez exporter le canevas des applications TK au format EPS et l'ouvrir dans illustrator. Il vous suffit d'appeler canvas.postscript()
.
Exemple simple en 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()
Il en résulte un fichier nommé "patten.eps"
.
Image 1 : Ouverture de l'EPS généré dans l'illustrateur.
Vous pouvez le faire en extendScript, SVG ou directement en écrivant le programme EPS qui sont tous faciles à faire (voir l'annexe ci-dessous pour quelques exemples). Voir les articles suivants pour les ressources:
PS : Je ne sais pas si cela vaut la peine d'être scripté car il faut environ 3 minutes pour les dessiner à l'aide de l'outil de rotation et Ctrl+D
Image 2 : un anneau avec la méthode ci-dessus
%!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);
}
Vous pouvez rapidement créer quelque chose de similaire à votre exemple dans Illustrator à l'aide d'un trait en pointillés. Pour dessiner facilement les anneaux régulièrement espacés, j'utiliserais l' outil Polar Grid .
Ensuite, il suffit de régler le trait sur les anneaux en pointillés avec des écarts qui correspondent à votre goût:
Vous pouvez bien sûr affiner chaque ligne pour ajouter plus de points si nécessaire, il suffit d'augmenter ou de diminuer la valeur de l'écart individuel. Avec la case d'espace active, vous pouvez utiliser votre molette de défilement pour modifier rapidement la valeur. Maintenez enfoncé Ctrl / Cmdpendant le défilement pour régler par incréments plus fins
Un problème avec cette méthode est qu'il peut y avoir un chevauchement dans certains points:
Ceux-ci pourraient avoir besoin d'être modifiés manuellement si vous en avez besoin pour être parfait. Il doit y avoir au plus 1 chevauchement par ligne.
L'effet de distorsion et de transformation d'Illustrator est parfait pour ce type de motif répétitif, mais pour obtenir ce motif exact, il faudra quelques ajustements. Commencez par une ligne pointillée (avec 11 points pour votre exemple)
Ajouter un effet de transformation via Effect > Distort & Transform > Transform...
Vous remarquerez que les rangées intérieures ont trop de points. C'est là que le réglage manuel entre en jeu, mais cela devrait vous permettre de comprendre le reste.
Utilisez Inkscape:
Et le résultat (en utilisant 22,5 degrés pour correspondre à l'image de l'OP):