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

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

Автор Michel Anders

import Blender

def setlayer(ob):

   layer = 1+int(Blender.Get('curframe')/25.0)%2

   ob.layers = [ layer ]

   ob.makeDisplayList()

   Blender.Window.RedrawAll()

if Blender.bylink and Blender.event == 'FrameChanged':

   setlayer(Blender.link)

Как ΠΈ Π² нашСм ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ скриптС, послСдниС строки нашСго скрипта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ ΠΊΠ°ΠΊ ΡΠΊΡ€ΠΈΠΏΡ‚ΡΠ²ΡΠ·ΡŒ ΠΈ ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ измСнСния ΠΊΠ°Π΄Ρ€ΠΎΠ², ΠΈ Ссли это Ρ‚Π°ΠΊ, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ связанный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ setlayer(). (Π‘ΠΊΡ€ΠΈΠΏΡ‚ доступСн ΠΊΠ°ΠΊ OddEvenScriptlink.py Π² Ρ„Π°ΠΉΠ»Π΅ scriptlinks.blend.)

ВсС, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ скрипт ΠΊΠ°ΠΊ ΡΠΊΡ€ΠΈΠΏΡ‚ΡΠ²ΡΠ·ΡŒ (scriptlink) Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π‘Π½ΠΎΠ²Π°, это выполняСтся Π² ОкнС Кнопок | панСль Script, щСлкая ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Enabling Script Links Π² ΠΏΠ°Π½Π΅Π»ΠΈ Scriptlinks (Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° всС Π΅Ρ‰Ρ‘ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ послС нашСго ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Π­Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²).  На этот Ρ€Π°Π· ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ скриптсвязи ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° вмСсто скриптсвязСй ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΈ Ρ‰Π΅Π»ΠΊΠ°Π΅ΠΌ Π½Π° New, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ OddEvenScriptlink.py ΠΈΠ· Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка.


ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт - анимация Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скриптсвязи

Одна ΠΈΠ· возмоТностСй ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ скриптсвязи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠ°Π΄Ρ€ΠΎΠ² - Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ мСш, ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ измСнСния Π²Π΅Ρ€ΡˆΠΈΠ½ МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΠ»ΠΈ посрСдством ассоцииации с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ мСша. Π­Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ использовании IPO, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ с Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ мСша (Ρ‚ΠΎ ΠΆΠ΅ число Π²Π΅Ρ€ΡˆΠΈΠ½, соСдинСнных Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ). Π­Ρ‚ΠΎ истинно Ρ‚Π°ΠΊΠΆΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΡ€ΠΈΠ²Ρ‹Ρ… ΠΈ тСкста.

Одним ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ этой Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° счСтчика, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ врСмя Π² сСкундах с Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»Π°ΡΡŒ анимация. Π­Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ тСкста ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Text3d с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° setText(). Ѐункция setcounter() Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ€Π°Π· это вмСстС с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ дСйствиями, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π‘Π»Π΅Π½Π΄Π΅Ρ€Π΅. (Π‘ΠΊΡ€ΠΈΠΏΡ‚ доступСн ΠΊΠ°ΠΊ CounterScriptLink.py Π² Ρ„Π°ΠΉΠ»Π΅ scriptlinks.blend.)

import Blender

objectname='Counter'

scriptname='CounterScriptLink.py'

def setcounter(counterob):

   seconds = int(Blender.Get('curframe')/25.0)+1

   counterob.getData().setText(str(seconds))

   counterob.makeDisplayList()

   Blender.Window.RedrawAll()

if Blender.bylink:

   setcounter(Blender.link)

else:

   countertxt    = Blender.Text3d.New(objectname)

   scn           = Blender.Scene.GetCurrent()

   counterob     = scn.objects.new(countertxt)

   setcounter(counterob)


   counterob.clearScriptLinks([scriptname])

   counterob.addScriptLink(scriptname,'FrameChanged')

Π­Ρ‚ΠΎΡ‚ скрипт ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ассоцирован Π² Π²ΠΈΠ΄Π΅ скриптсвязи с Π»ΡŽΠ±Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Text3d, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΡ€Π΅ΠΆΠ΄Π΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ссли Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Alt + P ΠΈΠ· тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, ΠΎΠ½ создаст Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Text3d ΠΈ присоСдинит сСбя ΠΊ этому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΊΠ°ΠΊ связанный скрипт. ВыдСлСнная строка ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° Π΅Π³ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… скриптах, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ выполняСм Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дСйствиС Π² случаС, Ссли скрипт Π½Π΅ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ ΠΊΠ°ΠΊ ΡΠΊΡ€ΠΈΠΏΡ‚ΡΠ²ΡΠ·ΡŒ (послС else). ПослСдниС Π΄Π²Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… строки ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΌΡ‹ соСдиняСм скрипт с вновь созданным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π‘Π½Π°Ρ‡Π°Π»Π°, ΠΌΡ‹ удаляСм (clear) Π»ΡŽΠ±ΡƒΡŽ ΡΠΊΡ€ΠΈΠΏΡ‚ΡΠ²ΡΠ·ΡŒ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, которая, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±Ρ‹Π»Π° связана Ρ€Π°Π½ΡŒΡˆΠ΅. Π­Ρ‚ΠΎ дСлаСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ связываниС этой ΠΆΠ΅ скриптсвязи Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°, Ρ‡Ρ‚ΠΎ допустимо, Π½ΠΎ Π΅Π΄Π²Π° Π»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. Π—Π°Ρ‚Π΅ΠΌ, ΠΌΡ‹ добавляСм скрипт ΠΊΠ°ΠΊ ΡΠΊΡ€ΠΈΠΏΡ‚ΡΠ²ΡΠ·ΡŒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° происходит ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°Π΄Ρ€Π° (FrameChanged). Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ 3D-Π²ΠΈΠ΄ с ΠΊΠ°Π΄Ρ€ΠΎΠΌ ΠΈΠ· Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ вмСстС с ΠΎΠΊΠ½ΠΎΠΌ Кнопок (слСва Π²Π²Π΅Ρ€Ρ…Ρƒ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит список ассоциаций скриптсвязСй с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ хотя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΡΠΊΡ€ΠΈΠΏΡ‚ΡΠ²ΡΠ·ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° ΠΈΠ· скрипта Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅, скриптсвязи для Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ! (Π’ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ScriptLinks). Π’ API ΠŸΠΈΡ‚ΠΎΠ½Π° Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° Π½Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΈΠ· скрипта.



Π― Π±ΡƒΠ΄Ρƒ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π²Π°ΠΌΠΈ

Иногда, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с слоТным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π²Π°ΠΆΠ½ΠΎΠΉ Π΄Π΅Ρ‚Π°Π»ΡŒΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³ΠΎΡ€ΠΎΠΆΠ΅Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ частями Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ, нСзависимо ΠΎΡ‚ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° рСдактирования.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ пространства  (Space handlers) ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π°ΠΌ способ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ дСйствия всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ 3D-Π²ΠΈΠ΄Π° пСрСрисовываСтся, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ дСйствиС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΌΡ‹ΡˆΠΈ. Π­Ρ‚ΠΈ дСйствия Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ рисованиС Π² области 3D-Π²ΠΈΠ΄Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ смоТСм Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ подсвСчиваниС (Highlight) Π² любом мСстС, Π³Π΄Π΅ Π½Π°ΠΌ нравится.

Как Π½Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠ΄ΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ? Π‘Π»Π΅Π½Π΄Π΅Ρ€ ΡƒΠΆΠ΅ прСдоставляСт Π½Π°ΠΌ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ способ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ Π² Π²ΠΈΠ΄Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ всё, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΎΠ½ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ΄ΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ сохраним имя этой Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΊΠ°ΠΊ свойство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (object property). Бвойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для использования Π² ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅, Π½ΠΎ Π½Π΅Ρ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² качСствС срСдства постоянно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½.

И Ρ‚Π°ΠΊ, снова Ρƒ нас Π΅ΡΡ‚ΡŒ скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ двумя способами: ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ пространства (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ 3D-Π²ΠΈΠ΄Π° пСрСрисовываСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ наши Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹), ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ запускС Π΅Π³ΠΎ ΠΈΠ· тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Alt + P, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½ для подсвСчивания.


Π‘Ρ…Π΅ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: AuraSpaceHandler.py

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ схСма ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ шаги ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠΌΠ΅ΠΌ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ситуации:

1. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ мСш.

2. Если Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎ:

β—¦ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Π³Ρ€ΡƒΠΏΠΏ Π²Π΅Ρ€ΡˆΠΈΠ½

β—¦ ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° Π²Ρ‹Π±ΠΎΡ€

β—¦ Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ ΠΊΠ°ΠΊ свойство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

3. Π˜Π½Π°Ρ‡Π΅:

β—¦ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит Π³Ρ€ΡƒΠΏΠΏΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½

β—¦ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½

β—¦ Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹:

β–ͺ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ малСнький диск

Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ доступСн ΠΊΠ°ΠΊ AuraSpaceHandler.py Π² Ρ„Π°ΠΉΠ»Π΅ scriptlinks.blend:

# SPACEHANDLER.VIEW3D.DRAW

Он начинаСтся со строки коммСнтария, которая являСтся сущСствСнной, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° сигнализируСт Π‘Π»Π΅Π½Π΄Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ это - скрипт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° пространства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связан с 3D-Π²ΠΈΠ΄ΠΎΠΌ (Π² настоящСС врСмя Π½ΠΈΠΊΠ°ΠΊΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ нСльзя ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ пространства) ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ обновлСния изобраТСния redraw.

import Blender

from Blender import *

scn = Scene.GetCurrent()

ob  = scn.objects.active

if ob.type == 'Mesh':

   me = ob.getData(mesh = True)

   if Blender.bylink:

      p=ob.getProperty('Highlight')

      vlist = me.getVertsFromGroup(p.getData())

      matrix = ob.matrix

      drawAuras([me.verts[vi].co*matrix for vi in vlist],

                 p.getData())

   else:

      groups = ['Select vertexgroup to highlight%t']

      groups.extend(me.getVertGroupNames())

      result = Draw.PupMenu( '|'.join(groups) )

      if result>0:

         try:

            p=ob.getProperty('Highlight')

            p.setData(groups[result])

         except:

            ob.addProperty('Highlight',groups[result])

Π”Π°Π»Π΅Π΅ скрипт приступаСт ΠΊ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ сцСны ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ мСш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ссли Π΅Π³ΠΎ Ρ‚ΠΈΠΏ - Mesh. На Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ строкС ΠΌΡ‹ провСряСм, Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π»ΠΈ скрипт ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ пространства, ΠΈ Ссли это Ρ‚Π°ΠΊ, ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ свойство с ΠΈΠΌΠ΅Π½Π΅ΠΌ Highlight (подсвСтка). Π”Π°Π½Π½Ρ‹Π΅ этого свойства являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Π΅Ρ€ΡˆΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ΄ΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ. ΠœΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ, получая список всСх Π²Π΅Ρ€ΡˆΠΈΠ½ Π² этой Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΈ получая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Нам ΠΎΠ½Π° Π½ΡƒΠΆΠ½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π—Π°Ρ‚Π΅ΠΌ, ΠΌΡ‹ создаСм список ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ вмСстС с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ drawAuras(), которая позаботится ΠΎ фактичСском рисовании.

Вторая выдСлСнная строка ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Ссли ΠΌΡ‹ запускаСм скрипт ΠΈΠ· тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°. Он создаёт строку, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· ΠΈΠΌΠ΅Π½ всСх Π³Ρ€ΡƒΠΏΠΏ Π²Π΅Ρ€ΡˆΠΈΠ½, связанных с Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… символами Ρ‚Ρ€ΡƒΠ±Ρ‹ (|) ΠΈ с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ подходящим Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ. Π­Ρ‚Π° строка пСрСдаётся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ PupMenu(), которая ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ мСню, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π²Ρ‹Π±ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π»ΠΈΠ±ΠΎ -1, Ссли Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ.

Если Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° Π³Ρ€ΡƒΠΏΠΏΠ° Π²Π΅Ρ€ΡˆΠΈΠ½, ΠΌΡ‹ пытаСмся ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ свойство Highlight. Если это получаСтся, ΠΌΡ‹ записываСм Π² Π΄Π°Π½Π½Ρ‹Π΅ этого свойства имя Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Π΅Ρ€ΡˆΠΈΠ½. Если свойство Π΅Ρ‰Π΅ Π½Π΅ сущСствовало, ΠΌΡ‹ добавляСм Π½ΠΎΠ²ΠΎΠ΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Highlight ΠΈ Π² качСствС Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ присваиваСм имя Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Π΅Ρ€ΡˆΠΈΠ½.