loc1 = obs[1].getLocation()
bb0 = obs[0].getBoundBox()
bb1 = obs[1].getBoundBox()
w = (diagonal(bb0)+diagonal(bb1))/4.0
ΠΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ ΠΎΠ±ΠΎΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π²Π° Π½ΠΎΠ²ΡΡ ΠΈ ΠΏΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΡΠΈΠ²ΡΡ IPO:
ipo0 = Ipo.New('Object','ObjectIpo0')
ipo1 = Ipo.New('Object','ObjectIpo1')
ΠΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΊΠ°Π΄ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π² 1 ΠΈ 30 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π½ΠΎ ΡΠΊΡΠΈΠΏΡ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²ΠΎΠ΄ΠΈΠ» ΡΡΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ. ΠΡ ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ IPO Π΄Π»Ρ IPO ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΡ ΡΠΎΡΠΊΡ (ΠΈΠ»ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΊΠ°Π΄Ρ) ΠΈ ΡΡΠΈΠΌ ΡΠ°ΠΌΡΠΌ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆ (Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°Π΄ΡΠ°, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) Π½Π° ΠΊΡΠΈΠ²ΡΡ (Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°). ΠΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΊ ΡΡΠΈΠΌ ΠΊΡΠΈΠ²ΡΠΌ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ - ΠΈΡ Π½ΠΎΠΌΠ΅ΡΡ ΠΊΠ°Π΄ΡΠ° ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄Π»Ρ ΠΊΠ°Π΄ΡΠ° 30 Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅:
for i,icu in enumerate((Ipo.OB_LOCX,
Ipo.OB_LOCY,Ipo.OB_LOCZ)):
ipo0[icu]=(1,loc0[i])
ipo0[icu][30]=loc1[i]
ipo1[icu]=(1,loc1[i])
ipo1[icu][30]=loc0[i]
ipo0[icu].interpolation =
IpoCurve.InterpTypes.BEZIER
ipo1[icu].interpolation =
IpoCurve.InterpTypes.BEZIER
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΠΊΠ»ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΊΠ°Π΄ΡΠ΅ 1 ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ, Π° ΠΊΠ»ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΠΊΠ°Π΄ΡΠ΅ 30 - ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ»Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΡΡ Ρ ΡΠΎΡΠ½ΠΎΡΡΡΡ Π΄ΠΎ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. ΠΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ΅ΠΆΠΈΠΌΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ ΡΡΠΈΡ ΠΊΡΠΈΠ²ΡΡ Π½Π° "Bezier", ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ»Π°Π²Π½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. Π£ Π½Π°Ρ ΡΠ΅ΠΏΠ΅ΡΡ Π΅ΡΡΡ Π΄Π²Π΅ ΠΊΡΠΈΠ²ΡΠ΅ IPO, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠΎΠ±ΠΌΠ΅Π½ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ Π΄Π²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π½ΠΎ ΡΠ°ΡΡΡΡ ΠΏΠΎΠΊΠ° ΡΠ°ΠΊΠΎΠ², ΡΡΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΡΠΊΠ²ΠΎΠ·Ρ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½Π°ΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»ΡΡ Π² ΠΊΠ°Π΄ΡΠ΅ 15 ΡΠΎ ΡΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΉ z. Π Π°Π½Π΅Π΅ ΠΌΡ Π²ΡΡΠΈΡΠ»ΠΈΠ»ΠΈ w, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π²ΠΈΠ½ΡΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Ρ ΠΏΡΡΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. ΠΠ΄Π΅ΡΡ ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠΎ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ z Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΏΡΡΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ Π²ΡΡΠΈΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ:
mid_z = (loc0[2]+loc1[2])/2.0
ipo0[Ipo.OB_LOCZ][15] = mid_z + w
ipo1[Ipo.OB_LOCZ][15] = mid_z - w
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠ΅ ΠΊΡΠΈΠ²ΡΠ΅ IPO ΠΊ Π½Π°ΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ:
obs[0].setIpo(ipo0)
obs[1].setIpo(ipo1)
ΠΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΊΠ°ΠΊ swap2.py Π² ΡΠ°ΠΉΠ»Π΅ orbit.blend. Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠ΅ ΠΏΡΡΠΈ Π΄Π²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡ Π΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅:
ΠΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³Π»ΠΎΡΠΈΠ» - ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·
Π§Π°ΡΡΠΎ ΠΌΡΠ»ΡΡΡΡΠ½ΡΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠΈ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΈΠΌΠ΅ΡΡ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ, ΠΏΡΡΠ°ΡΡΡ ΠΏΠΎΠ³Π»ΠΎΡΠ°ΡΡ ΡΠ²ΠΎΡ ΠΏΠΈΡΡ, ΠΈ Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°ΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΎΠ±Π΅Π΄ΠΎΠΌ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π±ΡΠ΄ΡΡ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΡ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ·ΠΊΡΡ Π³Π»ΠΎΡΠΊΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠ» ΡΠ΄ΠΎΠ±Π½ΠΎ Π±Π΅Π· Π²ΡΡΠΊΠΈΡ Π²ΠΈΠ΄ΠΈΠΌΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠΎΡΠΌΡ.
Π’ΡΡΠ΄Π½ΠΎ Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ³Π»Π°ΡΡΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅ ΠΏΠ΅ΡΠΈΡΡΠ°Π»ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠ»ΡΡΠΈ ΡΠΎΡΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ°Ρ ΡΠΎΡΠΌΠ° ΠΌΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ: ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄Π²ΠΈΠ³Π°ΡΡ Π²Π΄ΠΎΠ»Ρ Π½Π΅Π³ΠΎ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π΄Π΅ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ - ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π°ΡΠΌΠ°ΡΡΡΡ, ΡΠΎΡΡΠΎΡΡΡΡ ΠΈΠ· Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ΅ΠΏΠΈ ΠΊΠΎΡΡΠ΅ΠΉ Ρ ΠΌΠ΅ΡΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄Π΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ (ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ) ΠΈ Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΡΠ°Π± ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΡΡΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠΈΠΌ ΠΏΡΡΡΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ 'ΠΊΡΡΠΊΠ°' Π²Π½ΡΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ ΡΠ»Π΅Π³ΠΊΠ° Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠΌΠΈ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΎΠ½ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΊΠΎΡΡΠΈ ΠΊ ΠΊΠΎΡΡΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ³Π»ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΎ-ΡΠΎ ΡΡΠΎ ΠΆΠ΅ΡΡΠΊΠΎΠ³ΠΎ.
(ΠΠΠ ΠΠ‘Π’ΠΠΠ¬Π’ΠΠΠ (peristalsis) - Π²ΠΎΠ»Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠ΅ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ, ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΠΈΠ΅ΡΡ Π²Π΄ΠΎΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»ΡΡ ΠΎΡΠ³Π°Π½ΠΎΠ² Π² ΡΠ΅Π»Π΅ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°. ΠΡΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΡΠ°ΠΌΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½Ρ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΠ»ΡΡ ΠΎΡΠ³Π°Π½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ½Π°Π±ΠΆΠ΅Π½Ρ ΠΊΡΡΠ³ΠΎΠ²ΡΠΌΠΈ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΡΠ½ΡΠΌΠΈ ΠΌΡΡΡΠ°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠ½ΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΡΡΡ Π² ΠΊΠΈΡΠ΅ΡΠ½ΠΈΠΊΠ΅). ΠΠ΅ΡΠΈΡΡΠ°Π»ΡΡΠΈΠΊΠ° ΡΡΠΈΠ»ΠΈΠ²Π°Π΅ΡΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ°ΡΡΡΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅Π½ΠΎΠΊ ΠΏΠΎΠ»ΠΎΠ³ΠΎ ΠΎΡΠ³Π°Π½Π°. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π½ΠΊΠΈ ΠΎΡΠ³Π°Π½Π° ΡΠ°ΡΡΡΠ³ΠΈΠ²Π°ΡΡΡΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊΡΡΠ³ΠΎΠ²ΡΡ ΠΌΡΡΡ. ΠΠ΅ΡΠ΅Π΄ ΠΈΡ ΡΠ°ΡΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ°ΡΡΠ»Π°Π±Π»Π΅Π½ΠΈΠ΅ ΠΊΡΡΠ³ΠΎΠ²ΡΡ ΠΌΡΡΡ ΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΡΠ½ΡΡ , Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅ΠΌΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΡΠ³Π°Π½Π° (ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ, ΠΊΠΈΡΠ΅ΡΠ½ΠΈΠΊΠ°) ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Π² Π΄ΠΈΡΡΠ°Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. - Ρ ΡΠ°ΠΉΡΠ° http://vocabulary.ruβ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΏΡΠΈΡΡΠ½ΠΎΠ³ΠΎ Π°ΠΏΠΏΠ΅ΡΠΈΡΠ° ΠΎΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ° βΊ)
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΡΡΠ΅ΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΏΠΎ ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΊ ΡΠ΅Π±Π΅Π½ΠΊΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΡΠΈ ΠΊΠΎΡΡΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π°ΡΡΠΈΠ±ΡΡ bones ΠΎΠ±ΡΠ΅ΠΊΡΠ° Pose, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ, Π²ΡΠ·Π²Π°Π² getPose() Π² Π°ΡΠΌΠ°ΡΡΡΠ΅, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»ΠΎΠ²Π°ΡΡΠΌ. Π¦ΠΈΠΊΠ» ΠΏΠΎ ΠΊΠ»ΡΡΠ°ΠΌ ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΡΡΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°ΡΡ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ sort_by_parent(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΡΡΠ΅ΠΉ ΠΠΎΠ·Ρ pbones ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠΊ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΡΡΠΈ ΠΠΎΠ·Ρ. Π‘ΠΏΠΈΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π±ΡΠ» ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΡΠ½ΠΊΡΠΎΠΌ, ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ Π·Π° Π½ΠΈΠΌ Π΅Π³ΠΎ Π΄Π΅ΡΡΠΌΠΈ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠ°ΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠΈΠΌΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄Π»Ρ Π°ΡΠΌΠ°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΡΡΠΈ Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ΅Π±Π΅Π½ΠΊΠΎΠΌ, Π½ΠΎ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ΅ΠΏΠΈ ΠΊΠΎΡΡΠ΅ΠΉ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ bones, ΡΡΠΎΠ±Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡΡΠ΅ΠΉ ΠΠΎΠ·Ρ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΡ Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ (pop) ΠΊΠΎΡΡΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΊΠΎΡΡΠ΅ΠΉ ΠΠΎΠ·Ρ pbones ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π΅Ρ ΠΈΠΌΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π΅ΡΡ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ). (Π― Π½Π΅ cΠΌΠΎΠ³ Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΡΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π·Π΄Π΅ΡΡ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠ΅ΠΊΡΡΠ°, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π΄Π°ΡΡ ΡΠ±ΠΎΠΉ, ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌΠΎΡΡΠΈΡΠ΅ Π½ΠΈΠΆΠ΅ β ΠΏΡΠΈΠΌ. ΠΏΠ΅Ρ.) ΠΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΠΈΠΌΠ΅Π½Π° Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΡΡΠ΅ΠΉ ΠΠΎΠ·Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΡΡΠ΅ΠΉ ΠΠΎΠ·Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° in:
def sort_by_parent(pbones):
bones=[]
if len(pbones)<1 : return bones
bone = pbones.pop(0)
while(not bone.name in bones):
bones.append(bone.name)
ΠΠ°ΡΠ΅ΠΌ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΊΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΡΠΏΠΈΡΠΊΡ, ΠΈ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ»Π³ΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ΅ΠΏΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ, ΠΌΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ (ΠΈΠ»ΠΈ, ΡΠΎΡΠ½Π΅Π΅, Π΅Π³ΠΎ ΠΈΠΌΡ) Π² Π½Π°Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ (Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π½ΠΈΠΆΠ΅). ΠΡΠ»ΠΈ ΡΠ΅ΠΏΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π΄Π°Π»ΡΡΠ΅, ΠΌΡ Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ Π½ΠΎΠ²ΡΡ ΠΊΠΎΡΡΡ ΠΠΎΠ·Ρ. ΠΠΎΠ³Π΄Π° Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΉ, ΠΌΠ΅ΡΠΎΠ΄ pop() Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ IndexError, ΠΈ ΠΌΡ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· Π½Π°ΡΠ΅Π³ΠΎ ΡΠΈΠΊΠ»Π° while:
parent = bone.parent
while(parent):
if not parent.name in bones:
bones.insert(bones.index(bone.name),
parent.name)
bone = parent
parent = parent.parent
try:
bone = pbones.pop(0)
except IndexError:
break
return bones
Π§Π΅ΠΌ Π΄ΠΎΠ»ΡΡΠ΅ Ρ ΠΏΡΡΠ°Π»ΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎΠ±Ρ Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π΄Π²Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π°Π±Π·Π°ΡΠ°, ΡΠ΅ΠΌ ΡΠΈΠ»ΡΠ½Π΅Π΅ ΠΌΠ½Π΅ ΡΡΠΎ Π½Π΅ Π½ΡΠ°Π²ΠΈΠ»ΠΎΡΡ, ΠΈΠ±ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ Π½Π΅ Π½Π°Π±Π»ΡΠ΄Π°Π». Π’ΠΎΠ³Π΄Π° Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅ peristaltic.blend, ΠΈ ΡΠ±Π΅Π΄ΠΈΠ»ΡΡ, ΡΡΠΎ ΠΎΠ½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ . Π¦Π΅ΠΏΠΎΡΠΊΠ° ΠΊΠΎΡΡΠ΅ΠΉ Π² ΡΠ°ΠΉΠ»Π΅ ΠΏΠΎ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΊ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ: ['Bone', 'Bone.001', 'Bone.002', 'Bone.003', 'Bone.004', 'Bone.005']. ΠΡΠ»ΠΈ Π½Π° Π²Ρ ΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΠΈΡΠΎΠΊ pbones ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅: ["Bone.001", "Bone.002", "Bone.003", "Bone.004", "Bone.005", "Bone"], ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ Π½Π°Π΄ΠΎ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π½Π° Π²Ρ ΠΎΠ΄ ΠΏΡΠΈΠ΄ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΈΡΠΎΠΊ ["Bone.002", "Bone.001", "Bone.003", "Bone.004", "Bone.005", "Bone"] (ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎΠΌΠ΅Π½ΡΠ½Ρ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ), ΡΠΎ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΅Π³ΠΎ 3 ΠΊΠΎΡΡΠΈ: ['Bone', 'Bone.001', 'Bone.002']. ΠΠΎΡ ΠΌΠΎΠΉ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ:
def sort_by_parent(pbones):
bones=[]
while True: # ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ
# Π²ΡΠ΅Ρ ΠΊΠΎΡΡΠ΅ΠΉ ΠΈΠ· Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°
try:
bone = pbones.pop(0)
except IndexError:
break # ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΡΠΈΠΊΠ»Π°
if not bone.name in bones:
bones.append(bone.name)
parent = bone.parent
while(parent):
if not parent.name in bones:
bones.insert(bones.index(bone.name),
parent.name)
bone = parent
parent = parent.parent
return bones
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ - ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°. Π‘Π½Π°ΡΠ°Π»Π°, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ΅Π½Π΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ ΡΡΠΎ - Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π°ΡΠΌΠ°ΡΡΡΠ°. ΠΡΠ»ΠΈ Π½Π΅Ρ, ΠΌΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π΅ΠΌ ΠΎΠ± ΡΡΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (Π²ΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΠ°ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°), Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π°ΡΠΌΠ°ΡΡΡΠΎΠΉ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ getData():