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

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

Автор Michel Anders

БлоТная Ρ€Π°Π±ΠΎΡ‚Π° выполняСтся Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… строках. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π½Π°Π΄ всСми Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ, Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π΅, провСряСм ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ связанноС с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ Ρ€Π΅Π±Ρ€ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠ½Ρ†Π΅ ΠΈΠ· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ рассчитанного словаря. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ вычисляСм dv ΠΊΠ°ΠΊ Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈ добавляСм скалярноС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ этого Ρ€Ρ‘Π±Π΅Ρ€Π½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ Π² список dvdn.

weights.append((v1.index,sum(dvdn)/max(len(dvdn),1.0)))

ΠŸΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ строка ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ странно, Π½ΠΎ ΠΎΠ½Π° добавляСт ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, состоящий ΠΈΠ· индСкса Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈ срСднСй ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρ‹, Π³Π΄Π΅ срСднСС число получаСтся вычислСниСм суммы всСх Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρ‹ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π΅Π±Ρ€Ρƒ ΠΈΠ· списка, ΠΈ дСлСния Π΅Ρ‘ Π½Π° количСство Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ Π² спискС. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ список ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым (это случаСтся, ΠΊΠΎΠ³Π΄Π° мСш содСрТит Π½Π΅ связанныС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹), ΠΌΡ‹ прСдохраняСмся ΠΎΡ‚ ошибки дСлСния Π½Π° 0, дСля Π΅Ρ‘ Π½Π° Π΄Π»ΠΈΠ½Ρƒ списка ΠΈΠ»ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ большС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ сохраняСм наш ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ, избСгая ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if.


Π‘Ρ…Π΅ΠΌΠ° ΠΊΠΎΠ΄Π°: curvature.py

Π‘ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ localcurvature() Π² нашСм располоТСнии, сам скрипт вычислСния ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρ‹ становится совсСм ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ (ΠΏΠΎΠ»Π½Ρ‹ΠΉ скрипт доступСн ΠΊΠ°ΠΊ curvature.py):

if __name__ == "__main__":

   try:

      choice = Blender.Draw.PupMenu("Normalization%t|Only

                                     positive|Full range")

      if choice>0:

         ob = Blender.Scene.GetCurrent().objects.active

         me = ob.getData(mesh=True)


         try:

            me.removeVertGroup('Curvature')

         except AttributeError:

            pass


         me.addVertGroup('Curvature')


         for v,w in localcurvature(me,

                             positive=(choice==1)):

            me.assignVertsToGroup('Curvature',[v],w,

                             Blender.Mesh.AssignModes.ADD)


         Blender.Window.Redraw()


   except Exception as e:

      Blender.Draw.PupMenu('Error%t|'+str(e)[:80])

Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ строки ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ удаляСм Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½ Curvature ΠΈΠ· МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° try, ΠΈ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ AttributeError, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ΠΎ, Ссли Π³Ρ€ΡƒΠΏΠΏΠ° отсутствуСт. Π—Π°Ρ‚Π΅ΠΌ, ΠΌΡ‹ снова добавляСм Π³Ρ€ΡƒΠΏΠΏΡƒ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ пустая. ПослСдняя выдСлСнная строка ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΡ‹ добавляСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ любая Π²Π΅Ρ€ΡˆΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… вСс.



ВсС дСйствия ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½Ρ‹ конструкциСй  try … except , которая ΠΏΠΎΠΉΠΌΠ°Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈ ΠΎΠ½ΠΈ появятся Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ сообщСнии, Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅. НаиболСС вСроятно, это Π±ΡƒΠ΄Π΅Ρ‚ Π² ситуациях, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.


Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ всё это вмСстС: Огни святого Эльма

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ испускания ΠΈΠ· заострённого стСрТня Π±Ρ‹Π»Π° сдСлана ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ простого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° стСрТня Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΠΈ, Π·Π°Ρ‚Π΅ΠΌ, вычислСниСм ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ curvature.py.



Π—Π°Ρ‚Π΅ΠΌ, Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° систСма частиц ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ плотности (density) Π² ΠΏΠ°Π½Π΅Π»ΠΈ Extra Π±Ρ‹Π» настроСн Π½Π° Π³Ρ€ΡƒΠΏΠΏΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½ Curvature. Π‘Ρ‚Π΅Ρ€ΠΆΠ½ΡŽ ΠΈ систСмС частиц Π±Ρ‹Π»ΠΈ Π΄Π°Π½Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹: простой сСрый ΠΈ Π±Π΅Π»ΠΎΠ΅ Π₯Π°Π»ΠΎ соотвСтствСнно. Частицы Π±Ρ‹Π»ΠΈ симулированы для 250 ΠΊΠ°Π΄Ρ€ΠΎΠ², ΠΈ для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ прСдставлСн ΠΊΠ°Π΄Ρ€ 250.



ΠšΠΎΡΡ‚ΠΈ

Арматура ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ основой Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π΅Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ мСш управляСмым способом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π² Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π΄Ρ€Π°Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ·Ρ‹ ΠΈΡ… пСрсонаТам ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ способом.

РСализация Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° обСспСчиваСт Ρ€ΠΈΠ³Π³Π΅Ρ€Π° ΠΈ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ большим количСством возмоТностСй, Π½ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Π° Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π°Π±ΠΎΡ€ связанных костСй, Π³Π΄Π΅ каТдая ΠΊΠΎΡΡ‚ΡŒ Π΄Π΅Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ мСша. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡ этих костСй Π΄Ρ€ΡƒΠ³ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ обусловлСны нСсколькими Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ограничСниями.

Π₯отя кости ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ влияли Ρ‡Π΅Ρ€Π΅Π· envelope (ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚), Ρ‚Π΅ΠΌ самым дСформируя Π»ΡŽΠ±ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ мСша Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ радиуса, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π³Ρ€ΡƒΠΏΠΏΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌ с ΠΈΠΌΠ΅Π½Π΅ΠΌ этой кости. Вакая дСформация Π² дальнСйшСм управляСтся вСсом Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½, давая Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ настройки влияния кости.


Π’ΠΈΠΊ-Ρ‚Π°ΠΊ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ основныС возмоТности Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΌΡ‹ создадим Ρ€ΠΈΠ³ простой ΠΌΠΎΠ΄Π΅Π»ΠΈ часов. Часы - это Π΅Π΄ΠΈΠ½Ρ‹ΠΉ мСш, состоящий ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ…, Π½Π΅ соСдинённых ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΡΡƒΠ±ΠΌΠ΅ΡˆΠ΅ΠΉ - body (Ρ‚Π΅Π»ΠΎ), little hand (малСнькая Ρ€ΡƒΠΊΠ°), ΠΈ big hand (большая Ρ€ΡƒΠΊΠ°). (Π—Π΄Π΅ΡΡŒ Π°Π²Ρ‚ΠΎΡ€, Ρ‚ΠΈΠΏΠ°, ΠΏΠΎΡˆΡƒΡ‚ΠΈΠ». Π’ английском языкС стрСлки часов ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Β«handΒ», Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «ладонь» ΠΈΠ»ΠΈ Β«Ρ€ΡƒΠΊΠ°Β». Ну Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ стрСлки ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€ΡƒΠΊ. Π― Π΄ΠΎΠ»Π³ΠΎ Π½Π΅ ΠΌΠΎΠ³ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ пСрСвСсти эти little hand ΠΈ big hand. - ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.) Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ€ΡƒΠΊΠΈ часов ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π΄Π²ΡƒΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹ΠΌ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ - ΠΎΠ΄Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° часовой Ρ€ΡƒΠΊΠΈ (Arm), ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ часов, ΠΈ для ΠΊΠΎΠ½Ρ†Π° Ρ€ΡƒΠΊΠΈ (ΠΈΠ»ΠΈ Π»Π°Π΄ΠΎΠ½ΠΈ, Hand) ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚Π° настройка позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΡΡˆΠ½ΡƒΡŽ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΊΠ°Ρ€ΠΈΠΊΠ°Ρ‚ΡƒΡ€Ρ‹, Π³Π΄Π΅ ΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ слСд ΠΊΠΎΠ½Ρ†Π° Ρ€ΡƒΠΊΠΈ фактичСским Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ.


Π‘Ρ…Π΅ΠΌΠ° ΠΊΠΎΠ΄Π°: clock.py

ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ½Π°ΡΡ‚ΠΈΡ‚ΡŒ наши часы ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹ΠΌ способом:

1. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ мСша

2. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ мСш часов

3. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹

4. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹

5. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ кости Π² составС Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹.

6. Π‘Π²ΡΠ·Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ с Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€ΠΎΠΉ

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΈΠ· схСмы Π² ΠΊΠΎΠ΄ - ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΠ΄ΠΈΠ½ Π² ΠΎΠ΄ΠΈΠ½, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ мноТСство инструкций для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· костСй (ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ доступСн ΠΊΠ°ΠΊ clock.py):

me=Blender.Mesh.New('Clock')

me.verts.extend(clockmesh.Clock_verts)

me.faces.extend(clockmesh.Clock_faces)

scn=Blender.Scene.GetCurrent()

ob=scn.objects.new(me)

scn.objects.active=ob

me.addVertGroup('BigHand')

me.assignVertsToGroup('BigHand',

        clockmesh.Clock_vertexgroup_BigHand,

        1.0, Blender.Mesh.AssignModes.ADD)

… <Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ LittleHand,

   BigArm ΠΈ LittleArm ΠΎΠΏΡƒΡ‰Π΅Π½> …  

ar = Blender.Armature.New('ClockBones')

ar.envelopes=False

ar.vertexGroups=False

obbones = scn.objects.new(ar)

mod = ob.modifiers.append(Blender.Modifier.Types.ARMATURE

mod[Blender.Modifier.Settings.OBJECT]=obbones

mod[Blender.Modifier.Settings.ENVELOPES]=False

mod[Blender.Modifier.Settings.VGROUPS]=True


ar.makeEditable()

bigarm = Blender.Armature.Editbone()

bigarm.head = vec(0.0,0.0 ,0.57)

bigarm.tail = vec(0.0,0.75,0.57)

ar.bones['BigArm'] = bigarm

bighand = Blender.Armature.Editbone()

   bighand.head = bigarm.tail

bighand.tail = vec(0.0,1.50,0.57)

bighand.parent = bigarm

ar.bones['BigHand'] = bighand

… <Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для малСнькой Ρ€ΡƒΠΊΠΈ ΠΎΠΏΡƒΡ‰Π΅Π½> …

ar.update()

obbones.makeParent([ob])

Π’Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹. Π‘Π½Π°Ρ‡Π°Π»Π°, ΠΌΡ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ envelopes ΠΈ свойства vertexGroups Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странным, Π½ΠΎ эти свойства ΡΠ²Π»ΡΡŽΡ‚ΡΡ остатками ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Π° Π½Π΅ Π±Ρ‹Π»Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΊ ΠΌΠ΅ΡˆΡƒ, Π° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Ρ‡Π΅Ρ€Π΅Π· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ (parented) влияниС Π½Π° МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, насколько Π― ΠΌΠΎΠ³Ρƒ ΡΡƒΠ΄ΠΈΡ‚ΡŒ, доступная докумСнтация Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ нСвнятна Π² этом мСстС). ΠœΡ‹ опрСдСляСм, ΠΊΠ°ΠΊΠΎΠ΅ влияниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, устанавливая свойства Π² ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π΅ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹.

ПослС связывания Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° с нашим МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΌΡ‹ создадим Π½Π°ΡˆΡƒ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρƒ ΠΊΠΎΡΡ‚ΡŒ Π·Π° ΠΊΠΎΡΡ‚ΡŒΡŽ. ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ кости Π² Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρƒ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΌΠ΅Ρ‚ΠΎΠ΄ makeEditable(). Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ этот Ρ€Π΅ΠΆΠΈΠΌ рСдактирования для Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌΠ° рСдактирования для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Blender.Window.editMode()! Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ, ΠΌΡ‹ возвращаСмся Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ снова, вызывая ΠΌΠ΅Ρ‚ΠΎΠ΄ update().

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ создании нашСй Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΌΡ‹ создём экзСмпляры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Editbone. Π’Π½Π΅ Ρ€Π΅ΠΆΠΈΠΌΠ° рСдактирования эти Ρ‚Π΅ ΠΆΠ΅ кости ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Bone. Оба ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΊΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, подходящиС для  Ρ€Π΅ΠΆΠΈΠΌΠ° рСдактирования ΠΈΠ»ΠΈ для Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½Π°Π±Π΄ΠΈΡ‚ΡŒ нас Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ, Π‘Π»Π΅Π½Π΄Π΅Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ PoseBone для манипуляции костями Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠŸΠΎΠ·Ρ‹.