ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ Π½Π°ΡΠΈ ΡΠΏΠΈΡΠΊΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π²Π΅ΡΡΠΈΠ½ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π³ΡΠ°Π½Π΅ΠΉ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ mymesh, Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² Π½Π°ΡΠ΅ΠΉ ΡΡΠ΅Π½Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² MVert ΠΈ MFace Π² ΡΡΠΎΡ ΠΌΠ΅Ρ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ:
me=Blender.Mesh.New('Bug')
me.verts.extend(verts)
me.faces.extend(faces)
scn=Blender.Scene.GetCurrent()
ob=scn.objects.new(me,'Bug')
scn.objects.active=ob
me.remDoubles(0.001)
me.recalcNormals()
ΠΠ΅ΡΠ²Π°Ρ ΡΡΡΠΎΠΊΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Bug (ΠΡΠΊ). ΠΠ½ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π²Π΅ΡΡΠΈΠ½, ΡΡΠ±Π΅Ρ ΠΈΠ»ΠΈ Π³ΡΠ°Π½Π΅ΠΉ, Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ°Π²Π»Π΅Π½ Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΠΠ»Π΅Π½Π΄Π΅ΡΠ°, ΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠΎΠΊΠ° Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ Π‘ΡΠ΅Π½Π΅. ΠΡΠ»ΠΈ ΠΈΠΌΡ ΠΌΠ΅ΡΠ° ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΊ Π½Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΡΡΡΡΠΈΠΊΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Bug.001).
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ Π² ΠΌΠ΅ΡΠ΅. ΠΡΡΠΈΠ±ΡΡ verts β ΡΡΠΎ ΠΌΠ΅ΡΡΠΎ, ΠΊΡΠ΄Π° ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π°Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² MVert. Π£ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ extend(), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ x, y, ΠΈ z ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΡ Π²Π΅ΡΡΠΈΠ½. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ extend() Π°ΡΡΠΈΠ±ΡΡΠ° faces ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠΈ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΌΠ΅ΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π³ΡΠ°Π½Ρ. ΠΠΎΡΡΠ΄ΠΎΠΊ Π·Π΄Π΅ΡΡ Π²Π°ΠΆΠ΅Π½: Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Π½ΠΎΠ²Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π³ΡΠ°Π½ΠΈ Π½Π΅ ΡΠΌΠΎΠ³ΡΡ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π½ΠΈΡ . ΠΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΡΡΠ±ΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°Π½Π΅ΠΉ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΡΠ²Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ±ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡ Π½Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ.
ΠΠ΅Ρ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ Π΅ΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠ°ΠΊ ΡΡΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠΎΠΊΠ°Ρ (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ), ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΡ ΡΡΠ΅Π½Ρ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² Π½Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ new() - ΠΌΠ΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠ°Π½Π΅Π΅, ΠΈ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠΌΡ, Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΄Π°Π½Π½ΠΎΠ΅ ΠΌΠ΅ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π° ΠΌΠ΅ΡΠ΅ΠΉ ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΈΠΌΡΠ½. ΠΠ°ΠΊ ΠΈ Ρ ΠΌΠ΅ΡΠ΅ΠΌ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ ΠΈΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΡΡΡΠΈΠΊΡΠ°. ΠΡΠ»ΠΈ ΠΈΠΌΡ ΠΎΠΏΡΡΠ΅Π½ΠΎ, Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΠ»ΡΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΈΠΏ ΡΠ²ΠΎΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° (Mesh Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅).
ΠΠ½ΠΎΠ²Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠ°Π½, Π½ΠΎ Π½Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΈΡΠΏΡΠ°Π²ΠΈΠΌ ΡΡΠΎ, ΠΏΡΠΈΡΠ²ΠΎΠΈΠ² Π½Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Π² scene.objects.active.
ΠΠΎΠ³Π΄Π° ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π½Π°Ρ ΠΌΠ΅Ρ ΠΈΠ· ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π½Π°Π±ΠΎΡΠΎΠ² Π²Π΅ΡΡΠΈΠ½, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΡΠΈΡΡΡΠΌ, ΠΊΠ°ΠΊ Π±Ρ Π½Π°ΠΌ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Ρ Π½Π°Ρ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΠ°Ρ Π²Π΅ΡΡΠΈΠ½, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΠΎΡΡΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅, ΠΈ ΡΡΠΎ Π²ΡΠ΅ Π½ΠΎΡΠΌΠ°Π»ΠΈ Π³ΡΠ°Π½Π΅ΠΉ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π°ΡΡΠΆΡ.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΠ΅ΡΠ°
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²Π° ΠΈΠ· ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΎΠ² ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΠΈ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊ ΡΡΠΈΠΌ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π±Π»ΠΎΠΊΠ°ΠΌ ΠΏΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ ΠΌΡ ΡΠΊΠ»Π΅ΠΈΠΌ ΠΈΡ Π²ΠΌΠ΅ΡΡΠ΅. Π ΠΠ»Π΅Π½Π΄Π΅ΡΠ΅ 2.49, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΡΠΈΠ»ΠΈΡΡ), ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π² API. ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Tools (ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ), Π½ΠΎ ΠΌΡ ΠΎΡΠ²Π΅ΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ Π·Π΄Π΅ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠΊΡΡΠ³ ΡΡΠ΅Π΄Π½Π΅ΠΉ ΡΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠ½ ΠΏΡΠΎΡΡΡ, Π½ΠΎ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π³ΡΡΠΏΠΏΡ Π²Π΅ΡΡΠΈΠ½ ΠΊ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΡΠΊΡΠ΅ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΠ±Π΅Ρ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π³ΡΠ°Π½ΠΈ ΠΏΠ»ΠΎΡΠΊΠΈΠΌΠΈ ΠΈ Π½Π΅Π΄Π΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ. ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π²Π° Π½Π°Π±ΠΎΡΠ° Π²Π΅ΡΡΠΈΠ½ (ΠΈΠ»ΠΈ ΠΊΡΠ°Π΅Π²ΡΡ ΡΠΈΠΊΠ»Π°) Π²ΠΌΠ΅ΡΡΠ΅. ΠΠΎ ΠΏΡΠΎΠ±ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π½ΡΠ΅ ΡΠΎΡΠΊΠΈ Π² ΡΡΠ±Π΅ΡΠ½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅, ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ Π²ΡΠ±ΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠΈ Π²Π΅ΡΡΠΈΠ½, ΠΌΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΡΠ±Π΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΠΈ ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ (Ρ ΠΎΡΡ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡ Π³ΡΠ°Π½Π΅ΠΉ, Π΅ΡΠ»ΠΈ ΡΡΠ±Π΅ΡΠ½ΡΠ΅ ΡΠΈΠΊΠ»Ρ ΠΎΡΠ΅Π½Ρ ΡΠ°Π·Π½ΠΎΡΠΎΠ΄Π½ΡΠ΅ ΠΏΠΎ ΡΠΎΡΠΌΠ΅).
Π ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠ΅ Π³ΡΠ°Π½ΠΈ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ:
1. Π£Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ±Π° ΡΡΠ±Π΅ΡΠ½ΡΡ ΡΠΈΠΊΠ»Π° ΡΠΈΠΊΠ»Π° ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΠΈ Π½Π΅Π½ΡΠ»Π΅Π²ΡΡ Π΄Π»ΠΈΠ½Ρ.
2. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π±ΡΠ° Π² ΡΠΈΠΊΠ»Π΅ 1:
1. ΠΠ°ΠΉΡΠΈ ΡΠ΅Π±ΡΠΎ Π² ΡΠΈΠΊΠ»Π΅ 2, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±Π»ΠΈΠΆΠ΅ Π²ΡΠ΅Π³ΠΎ.
2. Π‘ΠΎΠ·Π΄Π°ΡΡ Π³ΡΠ°Π½Ρ, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ ΡΡΠΈ Π΄Π²Π° ΡΠ΅Π±ΡΠ°.
Π€ΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ Π½Π° Π²ΠΈΠ΄ ΡΡ Π΅ΠΌΡ:
def bridge_edgeloops(e1,e2,verts):
e1 = e1[:]
e2 = e2[:]
faces=[]
if len(e1) == len(e2) and len(e1) > 0 :
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ: Π΄Π²Π° ΡΠΏΠΈΡΠΊΠ° ΡΡΠ±Π΅Ρ ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π²Π΅ΡΡΠΈΠ½. Π ΡΠ±ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ Π΄Π²ΡΡ ΡΠ΅Π»ΡΡ (ΠΈΠ½Π΄Π΅ΠΊΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ Π²Π΅ΡΡΠΈΠ½ verts), Π° Π²Π΅ΡΡΠΈΠ½Ρ - Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ x, y, ΠΈ z.
ΠΠ΅ΡΠ²Π°Ρ Π²Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ - ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠΎΠΏΠΈΠΈ Π΄Π²ΡΡ ΡΡΠ±Π΅ΡΠ½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π½Π΅ Ρ ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΡΡΠΈΡΡ ΡΠΏΠΈΡΠΊΠΈ Π² ΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅. Π‘ΠΏΠΈΡΠΎΠΊ Π³ΡΠ°Π½Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠΎΠΈΡΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ, ΠΈ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ°Π·ΡΠΌΠ½ΠΎΡΡΡ ΠΈ ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ Π΄Π»ΠΈΠ½ ΠΎΠ±ΠΎΠΈΡ ΡΡΠ±Π΅ΡΠ½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ². ΠΡΠ»ΠΈ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Π΅ΡΡΡ, ΠΌΡ ΠΏΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΊΡΡΠΊΡ:
for a in e1:
distance = None # ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅
best = None # Π»ΡΡΡΠΈΠΉ
enot = [] # ΠΎΡΠ²Π΅ΡΠ³Π½ΡΡΡΠ΅ ΡΡΠ±ΡΠ°
ΠΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ΅Π±ΡΡ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅, ΡΡΡΠ»Π°ΡΡΡ Π½Π° ΡΡΠΎ ΡΠ΅Π±ΡΠΎ ΡΠ΅ΡΠ΅Π· a. ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ distance ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΎ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ ΡΠ΅Π±ΡΠ° Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΡΠ±Π΅ΡΠ½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅, Π° best Π±ΡΠ΄Π΅Ρ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΡΡΠΎ ΡΠ΅Π±ΡΠΎ. enot - ΡΠΏΠΈΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΏΠΈΡ Π²ΡΠ΅ ΡΡΠ±ΡΠ° ΠΈΠ· Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° Π±ΠΎΠ»ΡΡΠ΅ΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΈ, ΡΠ΅ΠΌ Π½Π°ΠΈΠ»ΡΡΡΠ΅Π΅.
Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, enot Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²ΡΠ΅ ΡΡΠ±ΡΠ° ΠΈΠ· Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΌΠΈΠ½ΡΡ ΠΎΠ΄Π½ΠΎ - ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠΌ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΏΠ΅ΡΠ΅Π½Π°Π·Π½Π°ΡΠ°Π΅ΠΌ enot Π½Π° Π²ΡΠΎΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΡΠΎΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎ ΡΠ΅Π±ΡΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ. ΠΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ±Π΅Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΡΠ΅ΡΠΏΠ°Π½:
while len(e2):
b = e2.pop(0)
Π’Π΅ΠΊΡΡΠ΅Π΅ ΡΠ΅Π±ΡΠΎ ΠΈΠ· Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ b. ΠΠ»Ρ Π½Π°ΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ, ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ a ΠΈ b ΠΊΠ°ΠΊ ΡΡΠΌΠΌΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ Π² a ΠΈ b. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π»ΠΈ ΠΊΠΎΡΠΎΡΠ΅ ΡΡΠΌΠΌΠ° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ Π΄ΠΎ ΠΏΠ΅ΡΠ΅Π²ΡΡΠ½ΡΡΡΡ Π²Π΅ΡΡΠΈΠ½ b. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»Π°ΡΡ ΡΠ°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΌΡ ΠΌΠ΅Π½ΡΠ΅ΠΌ Π²Π΅ΡΡΠΈΠ½Ρ Π² ΡΠ΅Π±ΡΠ΅ b. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, Π½ΠΎ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π²ΡΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ ΠΌΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌ, ΡΡΠΎ ΡΡΠ±ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ½Π΅Π°ΡΠ½Ρ (ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½Ρ) - ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Ρ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠΌΠ΅Π½ΡΡΠ°Ρ ΡΠΈΡΠ»ΠΎ Π½Π΅ΠΏΠ»ΠΎΡΠΊΠΈΡ Π³ΡΠ°Π½Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ. ΠΡΠΎΠ²Π΅ΡΡΡ, Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ Π»ΠΈ ΠΏΠ΅ΡΠ΅Π²ΡΡΠ½ΡΡΡΠΉ Π²ΡΠΎΡΠΎΠΉ ΠΊΡΠ°ΠΉ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠΌΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ, ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅ΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠΎΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² Π²ΠΈΠ΄Π΅ Π³Π°Π»ΡΡΡΠΊΠ°-Π±Π°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΡΡΡΡΡ ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΈΡΡΠ½ΠΊΠ΅:
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΡΡΠ½ΠΎΠΊ, Π³Π΄Π΅ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π²Π΅ΠΊΡΠΎΡΠ° - ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ Mathutil.Vector, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠΈΠΉ Π½Π°ΡΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠΈ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ x, y, ΠΈ z Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π²Π΅ΠΊΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΡΠΈΡΠ°ΡΡ, ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ, ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΡ Π΄Π»ΠΈΠ½Ρ.
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅:
d1 = (vec(verts[a[0]]) - vec(verts[b[0]])).length + \
(vec(verts[a[1]]) β vec(verts[b[1]])).length
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Ρ ΠΏΠ΅ΡΠ΅Π²ΡΡΠ½ΡΡΡΠΌ ΡΠ΅Π±ΡΠΎΠΌ b, Π±ΡΠ΄Π΅Ρ Π»ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠ΅:
d2 = (vec(verts[a[0]]) - vec(verts[b[1]])).length + \
(vec(verts[a[1]]) - vec(verts[b[0]])).length
if d2<d1 :
b =(b[1],b[0])
d1 = d2
ΠΡΠ»ΠΈ ΡΠ°ΡΡΡΠΈΡΠ°Π½Π½ΠΎΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅, ΠΌΡ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌ ΡΠ΅Π±ΡΠΎ Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π½Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ΅, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ:
if distance == None or d1<distance :
if best != None:
enot.append(best)
best = b
distance = d1
else:
enot.append(b)
Π‘ΠΏΠΈΡΠΎΠΊ ΠΎΡΠΊΠ»ΠΎΠ½ΡΠ½Π½ΡΡ ΡΡΠ±Π΅Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½ΠΎΠ²ΡΠΌ e2, Π·Π°ΡΠ΅ΠΌ ΠΌΡ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π³ΡΠ°Π½Π΅ΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠΎΠΉ ΡΡΠ±Π΅Ρ, ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ Π½ΠΎΠ²ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ ΡΡΠ±Π΅Ρ (a) β Π΄ΠΎΠΏ. ΠΏΠ΅Ρ.
e2 = enot
faces.append((a,best))
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π½Π°Ρ ΡΠΏΠΈΡΠΎΠΊ Π³ΡΠ°Π½Π΅ΠΉ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ Π΄Π²ΡΡ ΡΡΠ±Π΅Ρ, Π² ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²:
return [(a[0],b[0],b[1],a[1]) for a,b in faces]
ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π² ΡΡΠΎΠΌ ΡΠΊΡΠΈΠΏΡΠ΅, ΠΈ ΠΌΡ Π²Π½ΠΎΠ²Ρ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ creepycrawlies.py Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅, Π³Π΄Π΅ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, Π³ΡΡΠΏΠΏΡ Π²Π΅ΡΡΠΈΠ½ ΠΈ Π°ΡΠΌΠ°ΡΡΡΡ ΠΊ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠ»Π»ΡΡΡΡΠ°ΡΠΈΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ°Π·ΡΡ Π±Π΅ΡΡΠΈΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΡΠΊΡΠΈΠΏΡΠΎΠΌ.
ΠΡΠ»Π΅ΠΏΠΈΡΠ΅ Π²Π°ΡΠ΅Π³ΠΎ Π±ΠΎΡΡΠ° - Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΡΠΈΠ»Π΅ ΠΠ»Π΅Π½Π΄Π΅Ρ
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΠ»Π΅Π½Π΄Π΅Ρ Π°Π΄Π°ΠΏΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π·Π°Π΄Π°ΡΠ°ΠΌ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ 3D-Π³ΡΠ°ΡΠΈΠΊΠΈ, ΠΌΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΠ°ΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ (ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π² ΡΠΎΡΠΌΠ°ΡΠ΅ CSV) ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π² 3D Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.