Π‘Π»ΠΎΠΆΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΡΠΎΠΊΠ°Ρ . ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ Π½Π°Π΄ Π²ΡΠ΅ΠΌΠΈ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ, ΠΈ Π·Π°ΡΠ΅ΠΌ, Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΠΈΠΊΠ»Π΅, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠ½ΠΎΠΉ ΡΠ΅Π±ΡΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π²Π»Π΅ΡΡ Π²Π΅ΡΡΠΈΠ½Ρ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ ΠΈΠ· ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΡΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°ΡΡ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ 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 Π΄Π»Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ ΠΊΠΎΡΡΡΠΌΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΠΎΠ·Ρ.