Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «НаписаниС скриптов для Blender 2.49Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 38

Автор Michel Anders

   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():