-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate_books_2.py
152 lines (125 loc) · 5.58 KB
/
generate_books_2.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import c4d
from c4d import gui
import random
#first shelf z -150 second shelf z -50 size 2.582
# y 357.25+2.582 y 309+2.582
#starting point z = -250+2.582
start = c4d.Vector(-724.424, 357.25+2.582/2, -250+2.582/2)
shelfSpaceY = 48.25#-2.582*2
shelfSpaces = [[100,100,100,0 ,0 ,0 ,0 ,0 ],
[100,100,100,100,100,100,100,100],
[100,100,100,100,100,100,100,100],
[100,100,100,100,100,100,100,100],
[48 ,48 ,48 ,48 ,48 ,48 ,48 ,0 ],
[100,100,100,100,100,100,0 ,0 ],
[100,100,100,100,100,100,0 ,0 ],
[100,100,100,100,100,0 ,0 ,0 ]]
#gaps = [[start z, width z, stack ct, stack height, margin], ...]
null = [0,0,0,0,0]
gaps = [[null,null,null,null,null,null,null,null],
[[35,30,0,0, 0],[30,40,0,0,0],null,null,[5,30,4,10,10],null,null,null],
[null,null,[45,10,4,13,1],[10,35,0,0,0],[35,30,0,0,0],[45,30,4,20,2],[15,35,5,33,1],null],
[[30,15,0,0,0],[7,35,6,30,2],[55,30,7,38,1],null,[0,40,0,0,0],null,[25,35,0,0,0],null],
[null,[0,25,0,0,0],null,null,null,[0,48-2.582,5,20,14],[0,20,0,0,0,],null],
[[80,20,0,0,0],[75,25,0,0,0],[55,20,0,0,0],[35,30,0,0,0],[40,10,0,0,0],null,null,null],
[null,null,[65,35,0,0,0],[0,45,7,35,10],[75,25,0,0,0],[65,45,0,0,0],null,null],
[null,null,null,null,[50,47,0,0,0],[15,40,0,0,0],null,null]]
def main():
print("hi")
gui.MessageDialog("hi")
#mass correcting shelfSpaces values
for c in range(0,8):
for r in range(0,8):
shelfSpaces[c][r] -= 2.582
template = doc.SearchObject("book template")
booksNull = c4d.BaseObject(c4d.Onull)
booksNull.InsertUnder(template)
for c in range(0,8):
for r in range(0,8):
if(shelfSpaces[c][r] != 0):
#fill shelf
spaceTaken = 0
while(shelfSpaces[c][r] - spaceTaken > .15):
print("making book")
#make book
book = c4d.BaseObject(c4d.Oinstance)
book[c4d.INSTANCEOBJECT_LINK] = template
#book = template.GetClone()
#calculates previous shelf space taken up to this point
prevShelvesSpace = 0
c_temp = 0
while(c_temp < c):
prevShelvesSpace += shelfSpaces[c_temp][0]
prevShelvesSpace += 2.582#width of shelf divider
c_temp+=1
#put in position
book.SetAbsPos(c4d.Vector( start[0], (start[1] - shelfSpaceY * r), (start[2] + prevShelvesSpace + spaceTaken) ))
#if approaching gap
if shelfSpaces[c][r]-gaps[c][r][0] - spaceTaken < .25:
thickness = (shelfSpaces[c][r]-gaps[c][r][0]-spaceTaken)
#if only enough space for 2 books
elif shelfSpaces[c][r]-gaps[c][r][0] - spaceTaken < 1:
thickness = (shelfSpaces[c][r]-gaps[c][r][0]-spaceTaken)/2
#if up against shelf
elif shelfSpaces[c][r]-spaceTaken < 1.25:
thickness = (shelfSpaces[c][r]-spaceTaken)
else:
thickness = random.normalvariate(.85,.27)
#randomize length
length = random.normalvariate(.85,.13)
book.SetAbsScale(c4d.Vector(length,length,thickness))
#randomize color/apply random material from layer?
#
#insert into scene and update space taken
book.InsertUnder(booksNull)
spaceTaken += 3.936*thickness
c4d.EventAdd()
gui.MessageDialog("done")
def makeStack(gap):#gap=[start z, z width, book ct, height, margin (split)]
gui.MessageDialog("makin a stack")
#def makeBook(template,booksNull,c,r,spaceTaken):
#print("making book")
#make book
#book = c4d.BaseObject(c4d.Oinstance)
#book[c4d.INSTANCEOBJECT_LINK] = template
#book = template.GetClone()
#calculates previous shelf space taken up to this point
#prevShelvesSpace = 0
#c_temp = 0
#while(c_temp < c):
#prevShelvesSpace += shelfSpaces[c_temp][0]
#prevShelvesSpace += 2.582#width of shelf divider
#c_temp+=1
#
#put in position
#book.SetAbsPos(c4d.Vector( start[0], (start[1] - shelfSpaceY * r), (start[2] + prevShelvesSpace + spaceTaken) ))
#
#if approaching gap
#if shelfSpaces[c][r]-gaps[c][r][0] - spaceTaken < .25:
#thickness = (shelfSpaces[c][r]-gaps[c][r][0]-spaceTaken)
#if only enough space for 2 books
#elif shelfSpaces[c][r]-gaps[c][r][0] - spaceTaken < 1:
#thickness = (shelfSpaces[c][r]-gaps[c][r][0]-spaceTaken)/2
#if up against shelf
#elif shelfSpaces[c][r]-spaceTaken < 1.25:
#thickness = (shelfSpaces[c][r]-spaceTaken)
#else:
#thickness = random.normalvariate(.85,.27)
#
#randomize length
#length = random.normalvariate(.85,.13)
#
#book.SetAbsScale(c4d.Vector(length,length,thickness))
#
#randomize color/apply random material from layer?
#
#insert into scene and update space taken
#book.InsertUnder(booksNull)
#
#return 3.936*thickness
# Execute main()
if __name__=='__main__':
doc.StartUndo()
main()
c4d.EventAdd()
doc.EndUndo()