-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathexample8.py
109 lines (88 loc) · 2.76 KB
/
example8.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
## yapCAD poly() intersecton and drawing examples
from yapcad.geom import *
from yapcad.poly import *
import examples.example10 as example10
import random
def drawLegend(d):
## Put some documentary text on the drawing
d.layer = 'DOCUMENTATION'
att = {'style': 'OpenSans-Bold',
'height': 2.5}
d.draw_text("yapCAD", point(5,15), attr = att)
d.draw_text("example8.py", point(5,11), attr=att)
d.draw_text("Polygon() flowers, mirrored geometry",
point(5,7),attr=att)
d.layer = False # back to default layer
def flower(center = point(0,0),
petals = 10,
minDiam=5.0,
maxDiam=15,
minRadius=20,
maxRadius=40,
insideRad = 5, returnPoly = False):
glist= []
for i in range(petals):
angle = i*360/petals
anrad = angle*pi2/360.0
an2 = (((i+0.5)/petals)%1.0)*360
an2rad = an2*pi2/360.0
radius = (maxRadius-minRadius)*random.random()+minRadius
diam = (maxDiam-minDiam)*random.random()+minDiam
pnt = add(point(cos(anrad)*radius,sin(anrad)*radius),
center)
pnt2 = add(point(cos(an2rad)*insideRad,sin(an2rad)*insideRad),
center)
a = arc(pnt,diam/2)
glist.append(a)
glist.append(pnt2)
p = Polygon(glist)
#p.makeoutline()
if returnPoly:
return p
else:
return p.geom()
def mirrorArray(pnt=point(-45,45)):
flwr = flower(pnt,returnPoly=True)
glist = flwr.geom()
bb = bbox(glist)
flwr2 = deepcopy(flwr)
flwr2.grow(1.0)
glist.append(flwr2.geom())
ranp = example10.randomPoints(bb,500)
for p in ranp:
if flwr.isinside(p):
glist.append(arc(p,0.4))
ply = [point(bb[0]), point(bb[1][0],bb[0][1]),
point(bb[1]), point(bb[0][0],bb[1][1])]
glist = glist + ply
glist = glist + mirror(glist,'yz')
glist = glist + mirror(glist,'xz')
return glist
if __name__ == "__main__":
from yapcad.ezdxf_drawable import *
#set up DXF rendering
print("example8.py -- yapCAD computational geometry and DXF drawing example")
print("""
This is a demo of the Polygon() and mirror capabilities of yapCAD,
making and then mirroring random "flowers."
""")
dd=ezdxfDraw()
filename="example8-out"
print("Output file name is {}.dxf".format(filename))
dd.filename = filename
glist = mirrorArray()
def mydrawer(gl):
g1=[]
g2=[]
for g in gl:
if iscircle(g):
g1.append(g)
else:
g2.append(g)
dd.linecolor = 'white'
dd.draw(g2)
dd.linecolor = 'aqua'
dd.draw(g1)
drawLegend(dd)
mydrawer(glist)
dd.display()