def paste(top,right,front,free,output="result.png"):
im = pim.open(top)
w,h= im.size
edge=4
edgecolor=(0.0,0.0,0.0)
ΠΠ°ΡΠ΅ΠΌ, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡΡΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅, ΡΡΠΎΠ±Ρ Π²ΠΌΠ΅ΡΡΠΈΡΡ Π²ΡΠ΅ ΡΠ΅ΡΡΡΠ΅ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ. ΠΡ Π½Π΅ ΡΠΈΡΡΠ΅ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π³ΡΠ°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ, Π° ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΎΠ΄Π½ΠΎΡΠΎΠ½Π½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅ΠΌ Π²ΡΡΠ°Π²Π»ΡΡΡ Π²ΡΠ΅ ΡΠ΅ΡΡΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ:
comp = pim.new(im.mode,(w*2+3*edge,h*2+3*edge),
edgecolor)
ΠΡ ΡΠΆΠ΅ ΠΎΡΠΊΡΡΠ»ΠΈ Π²Π΅ΡΡ Π½Π΅Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΡΡΠΎ Π²ΡΡ, ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄Π΅Π»Π°ΡΡ - Π²ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π² Π²Π΅ΡΡ Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΠΊΠ²Π°Π΄ΡΠ°Π½ΡΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠ΄Π²ΠΈΠ½ΡΠ² Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π² Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠΌ, ΡΠ°ΠΊ ΠΈ Π² Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ Π½Π° ΡΠΈΡΠΈΠ½Ρ Π³ΡΠ°Π½ΠΈΡΡ:
comp.paste(im,(edge,edge))
ΠΡΡΠ°Π²ΠΊΠ° ΡΡΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π° ΡΠΎΠΉ ΠΆΠ΅ ΡΡ Π΅ΠΌΠΎΠΉ: ΠΎΡΠΊΡΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ). Π’ΠΈΠΏ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, png), Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΎΡΠΌΠ°ΡΠ° ΠΌΠ΅ΡΠΎΠ΄Ρ save(). ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΎΡΠΌΠ°Ρ Π΄Π»Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΠΏ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ open() ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ.
im = pim.open(right)
comp.paste(im,(w+2*edge,edge))
im = pim.open(front)
comp.paste(im,(edge,h+2*edge))
im = pim.open(free)
comp.paste(im,(w+2*edge,h+2*edge))
comp.save(output)
ΠΠ°ΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΡ Π²ΠΈΠ΄ ΠΈΠ· ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠ°ΠΉΠ». ΠΠ°ΠΌΠ΅ΡΠ° Π΄Π»Ρ ΡΠ΅Π½Π΄Π΅ΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΈΠΌΡ ΠΠ±ΡΠ΅ΠΊΡΠ° ΠΠ»Π΅Π½Π΄Π΅ΡΠ° (ΡΠΎ Π΅ΡΡΡ, ΡΡΠΎ Π½Π΅ ΠΈΠΌΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Camera). ΠΠ΅ΡΠ²Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Camera ΠΈ ΡΠ΅ΠΊΡΡΡΡ ΡΡΠ΅Π½Ρ ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π² ΡΡΠ΅Π½Π΅ - ΡΠΎΠΉ ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡ (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π½ΠΈΠΆΠ΅). Π€ΡΠ½ΠΊΡΠΈΡ setCurrentCamera() ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΠ±ΡΠ΅ΠΊΡ ΠΠ»Π΅Π½Π΄Π΅ΡΠ°, Π° Π½Π΅ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΠ°ΠΌΠ΅ΡΡ, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΌ ΠΈΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
def render(camera):
cam = Object.Get(camera)
scn = Scene.GetCurrent()
scn.setCurrentCamera(cam)
context = scn.getRenderingContext()
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ renderAnim() ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠ΅Π½Π΄Π΅ΡΠ°, Π° Π½Π΅ ΠΌΠ΅ΡΠΎΠ΄ render(). ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ render() Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ°Π΄ΡΠ° ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ, ΡΠ°ΠΊ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΊΠ°Π΄ΡΡ, ΡΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ renderAnim() ΠΎΡΡΠ΅Π½Π΄Π΅ΡΠΈΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠ°Π΄Ρ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ displayMode Π½Π° 0, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΡΠ΅Π½Π΄Π΅ΡΠ° (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΡΡΠΊΠ΅ ΠΊΠΎΠ΄Π°):
frame = context.currentFrame()
context.endFrame(frame)
context.startFrame(frame)
context.displayMode=0
context.renderAnim()
ΠΠ΅ΡΠΎΠ΄ renderAnim() ΡΠ΅Π½Π΄Π΅ΡΠΈΡ ΠΊΠ°Π΄ΡΡ Π² ΡΠ°ΠΉΠ»Ρ, ΡΠ°ΠΊ ΡΡΠΎ Π½Π°ΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ° Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΡΠΎΠ³ΠΎ ΠΊΠ°Π΄ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈ. Π’ΠΎΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π² ΠΎΠΊΠ½Π΅ ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ, Π½ΠΎ ΡΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ getFrameFilename() Π΄Π°ΡΡ Π½Π°ΠΌ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΡ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ:
filename= context.getFrameFilename()
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°Π΄ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π΄Π»Ρ Π²ΠΈΠ΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°ΠΌΠ΅ΡΡ, ΡΡΠΎ ΠΌΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠ°ΠΉΠ», Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΠΌ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π΅ ΠΈΠΌΡ, ΡΠΎΡΡΠΎΡΡΠ΅Π΅ ΠΈΠ· ΠΏΡΡΠΈ ΠΊ ΠΊΠ°Π΄ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ»ΠΈ, ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°ΠΌΠ΅ΡΡ. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΡΠΈ ΠΈΠ· ΠΏΠΈΡΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ os.path, ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ Windows, ΡΠ°ΠΊ ΠΈ ΠΏΠΎΠ΄ Linux, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ ΡΠΊΡΠΈΠΏΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ, ΠΌΡ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠ΄Π°Π»ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ» Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ ΠΈΠΌΡ ΠΏΠΎΡΠ΅ΡΠΏΠΈΡ Π½Π΅ΡΠ΄Π°ΡΡ ΠΏΠΎΠ΄ Windows. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ°ΠΉΠ»Π° ΠΏΠΎΠΊΠ° ΠΌΠΎΠ³Π»ΠΎ ΠΈ Π½Π΅ Π±ΡΡΡ - Π² ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π½Π°Ρ Π·Π°ΡΠΈΡΠ°Π΅Ρ Π±Π»ΠΎΠΊ try. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΡ Π²Π½ΠΎΠ²Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°:
camera = os.path.join(os.path.dirname(filename),camera)
try:
os.remove(camera)
except:
pass
os.rename(filename,camera)
return camera
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ Π²Π°ΠΆΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ° - ΠΊΠ°Π΄ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄ ΠΊΠ°ΠΌΠ΅ΡΡ, ΡΠΎ Π΅ΡΡΡ, ΡΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΠ³ΠΎΠ» Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΊΠ°ΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΠΎΠ³Π½Π°ΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΠΏΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΡΠ³ΠΎΠ» ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΡΠ» ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΊΠ°ΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π·ΡΠΈΡΠ΅Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ ΡΠΎ Π²ΡΠ΅Ρ ΡΠ³Π»ΠΎΠ² ΠΏΡΠΎΡΠΌΠΎΡΡΠ°. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΡΡΠ½ΡΡ, Π½ΠΎ ΡΡΠΎ ΡΠΊΡΡΠ½ΠΎ, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π·Π° Π½Π°Ρ.
Π‘ΠΏΠΎΡΠΎΠ±, ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅ΠΌ - ΡΡΠΎ Π²Π·ΡΡΡ Π³Π°Π±Π°ΡΠΈΡΠ½ΡΠΉ ΡΡΠΈΠΊ (bounding box) Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ³ΠΎΠ» Π·ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ, ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠΎΡ Π³Π°Π±Π°ΡΠΈΡΠ½ΡΠΉ ΡΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π°Ρ Π²ΠΈΠ΄. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π΄ΠΎ ΡΠ΅Π½ΡΡΠ° Π³Π°Π±Π°ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ°, ΡΠ³ΠΎΠ» Π·ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΡΡΡΡΠΉ ΡΠ³ΠΎΠ» ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π³Π°Π±Π°ΡΠΈΡΠ½ΡΠΌ ΡΡΠΈΠΊΠΎΠΌ ΠΈ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ Π΄ΠΎ ΠΊΠ°ΠΌΠ΅ΡΡ.
ΠΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΡΠΎΡ ΡΠ³ΠΎΠ» Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΊΠ°ΠΌΠ΅Ρ ΠΈ Π·Π°ΡΠ΅ΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΡΠ³ΠΎΠ» Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΡΠ°ΠΌΡΠΉ ΡΠΈΡΠΎΠΊΠΈΠΉ ΠΈΠ· Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ°. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΡΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ΅ΡΠΏΠ΅ΡΡ Π½Π΅ΡΠ΄Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΌΠ΅ΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ (ΠΈΠ»ΠΈ, ΡΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠΉ), Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ.
ΠΠΎΠ΄ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ Π½Π°ΡΠ½ΡΠΌ, ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
from math import asin,tan,pi,radians
Π‘Π°ΠΌΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΠ»Π΅Π½Π΄Π΅ΡΠ° (ΠΊΠ°ΠΌΠ΅Ρ) ΠΈ Π³Π°Π±Π°ΡΠΈΡΠ½ΡΠΉ ΡΡΠΈΠΊ (ΡΠΏΠΈΡΠΎΠΊ Π²Π΅ΠΊΡΠΎΡΠΎΠ², ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ³Π»Π° Π³Π°Π±Π°ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ°). ΠΠ½Π° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π³Π°Π±Π°ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ° Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΠ΅Ρ ΠΎΡΠ΅ΠΉ, Π·Π°ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΡΠΈΡΠΈΠ½Ρ. ΠΡ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ, ΡΡΠΎ Π½Π°Ρ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΠΎΡΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°Π½ Π² Π½Π°ΡΠ°Π»Π΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ maxw ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΌΡΡ Π±ΠΎΠ»ΡΡΡΡ ΡΠΈΡΠΈΠ½Ρ ΠΈΠ· Π²ΡΠ΅Ρ ΠΎΡΠ΅ΠΉ.
def frame(cameras,bb):
maxx = max(v.x for v in bb)
maxy = max(v.y for v in bb)
maxz = max(v.z for v in bb)
minx = min(v.x for v in bb)
miny = min(v.y for v in bb)
minz = min(v.z for v in bb)
wx=maxx-minx
wy=maxy-miny
wz=maxz-minz
m=Mathutils.Vector((wx/2.0,wy/2.0,wz/2.0))
maxw=max((wx,wy,wz))/2.0
ΠΠ°ΡΠ΅ΠΌ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Camera, ΡΡΠΎΠ±Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ d Π΄ΠΎ ΡΡΠ΅Π΄Π½Π΅ΠΉ ΡΠΎΡΠΊΠΈ Π³Π°Π±Π°ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ° (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅). ΠΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΡΠ°ΡΡΠ½ΠΎΠ΅ ΠΎΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΠΈΠ½Ρ ΠΈ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ:
sins=[]
for cam in cameras:
p=Mathutils.Vector(Object.Get(cam).getLocation(
'worldspace'))
d=(p-m).length
sins.append(maxw/d)
ΠΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΠΈΠ· ΡΡΠΈΡ ΡΠ°ΡΡΠ½ΡΡ (ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΌΠΎΠΌΡ ΡΠΈΡΠΎΠΊΠΎΠΌΡ ΡΠ³Π»Ρ), ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ³ΠΎΠ» ΡΠ΅ΡΠ΅Π· Π°ΡΠΊΡΠΈΠ½ΡΡ, ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΠΌ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π°ΡΡΠΈΠ±ΡΡ lens (Π»ΠΈΠ½Π·Π°) ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΠ°ΠΌΠ΅ΡΡ. Π‘ΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ³Π»ΠΎΠΌ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½ΠΎΠΉ Π°ΡΡΠΈΠ±ΡΡΠ° lens Π² ΠΠ»Π΅Π½Π΄Π΅ΡΠ΅ - ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ ΠΈ ΠΏΠ»ΠΎΡ ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ (lens ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠ°ΡΠΈΡ ΡΠΎΠΊΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ Π»ΠΈΠ½Π·Ρ). ΠΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ ΡΠΎΡΠΌΡΠ»Π° Π²Π·ΡΡΠ° ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΠ»Π΅Π½Π΄Π΅ΡΠ° (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ).
maxsin=max(sins)
angle=asin(maxsin)
for cam in cameras:
Object.Get(cam).getData().lens = 16.0/tan(angle)
ΠΡΡΠ³Π°Ρ ΡΠ΄ΠΎΠ±Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ - ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΡΡΡΠ΅ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈΡ Π½Π° ΡΡΠ΅Π½Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ°Π»Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ. Π€ΡΠ½ΠΊΡΠΈΡ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΏΡΠΎΡΡΠ°Ρ, Π½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠ°ΠΌΠ΅ΡΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΠΊΡΠΈΠΏΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ. Π‘Π»ΠΎΠ²Π°ΡΡ cameras ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ, ΠΏΠΎΠ²ΠΎΡΠΎΡΠΎΠ², ΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½ lens:
def createcams():
cameras = {
'Top' : (( 0.0, 0.0,10.0),( 0.0,0.0, 0.0),35.0),
'Right': ((10.0, 0.0, 0.0),(90.0,0.0,90.0),35.0),
'Front': (( 0.0,-10.0, 0.0),(90.0,0.0, 0.0),35.0),
'Free' : (( 5.8, -5.8, 5.8),(54.7,0.0,45.0),35.0)}
Π― ΡΡΠΎ ΡΠΆΠ΅ Π²ΡΠΎΠ΄Π΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π», Π½ΠΎ ΡΠΊΠ°ΠΆΡ Π·Π΄Π΅ΡΡ Π΅ΡΡ ΡΠ°Π·. ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΡΡΠ°Π²Π»ΡΡΡ ΡΠΈΡΠ»Π° (Π΄Π° ΠΈ ΡΡΡΠΎΠΊΠΈ ΡΠΎΠΆΠ΅) Π² ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π Π°ΡΡΡΠΎΡΠ½ΠΈΠ΅ 10.0 Π²Π·ΡΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ. Π Π²Π΄ΡΡΠ³ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅? ΠΡΠΊΡΠ΄Π° Π²Π·ΡΠ»ΠΎΡΡ 5.8, ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ, Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΠΎΠΌΡ Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΎΠΉ, Π²ΠΎΠΎΠ±ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Ρ ΠΎΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π΄Π»ΠΈΠ½Π° ΡΠ΅Π±ΡΠ° ΠΊΡΠ±Π°, Π΄Π»ΠΈΠ½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°Π²Π½Π° 10.0 (sqrt((10.0**2)/3.0)β5.8). ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΡΠ°Π²Π½ΡΡ 10.0, Π° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΌΠ΅ΡΡ 'Free' Π²ΡΡΠΈΡΠ»ΡΡΡ ΠΈΠ· Π½Π΅Ρ. Π’ΠΎΠ³Π΄Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΡ ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡΡΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ. - Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°.