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

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

Автор Michel Anders

ПослСдняя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±ΠΎΠ»Π΅Π΅ тонкая. Если Π½Π°ΠΌ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько ΡƒΡ‚ΠΎΠΏΠ»Π΅Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π²ΠΎΠΊ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ краями Ρ‡ΡƒΡ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ острыми, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ острых ΠΊΡ€Π°Ρ‘Π². Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π² наш мСш. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° скоса bevel ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ острыС края, Π½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ вСроятно, ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ subsurface ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΌΠ΅ΡˆΡƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Π—Π΄Π΅ΡΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΏΡ€ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ символами нашСго тСкста, вСсьма вСроятно, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ столкнёмся со мноТСством ΡƒΠ·ΠΊΠΈΡ… Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ². Π­Ρ‚ΠΈ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ испортят внСшний Π²ΠΈΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° нашСго ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° subsurface, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ рисункС:



Π”Π²Π΅ Π²Π΅Ρ‰ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡΠΌΡΠ³Ρ‡ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Одна - это Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вСс crease (складки) ΠΊ Ρ€Ρ‘Π±Ρ€Π°ΠΌ нашСго Π²Ρ‹Π³Ρ€Π°Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСкста, этим самым взвСшивая эти края сильнСС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ расчСтС subsurface ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ нас ΠΎΡ‚ Ρ†Π΅Π»ΠΈ примСнСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это сдСлаСт эти края острыми. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ рисунок ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: Π»ΡƒΡ‡ΡˆΠ΅, Π½ΠΎ всС Π΅Ρ‰Π΅ Π½Π΅ выглядит идСально.



Π”Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Ρ€ΠΎΠ²Π½ΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π²Ρ‹Π³Ρ€Π°Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСкста. Π­Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΊΠΎΠ»ΡŒΡ†ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ Π²ΠΎΠΊΡ€ΡƒΠ³ тСкста, заставляя subsurface Π²ΠΎΠΊΡ€ΡƒΠ³ тСкста вСсти сСбя Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½ΠΈΠΆΠ΅. Π’ нашСй ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΡ‹ примСняСм ΠΎΠ±Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π½ΠΎ сначала ΠΌΡ‹ примСмся Π·Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ.



ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Text3d Π² мСш

ΠžΠ±ΡŠΠ΅ΠΊΡ‚  Text3d базируСтся Π½Π° ΠΊΡ€ΠΈΠ²ΠΎΠΉ с нСсколькими Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Π‘Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ ссылаСтся - ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠšΡ€ΠΈΠ²ΠΎΠΉ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° (Curve), ΠΈ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ частям ΠΊΡ€ΠΈΠ²ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ Π² нашСм тСкстС, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΊΡ€ΠΈΠ²Ρ‹Π΅ Π² Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈ Ρ€Ρ‘Π±Ρ€Π°. ВсС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ Π² модулях Blender.Curve ΠΈ Blender.Geometry.

Π’ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π΅, ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Text3d ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Curve (ΠšΡ€ΠΈΠ²ΠΎΠΉ) Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΎΠ΅ ΠΈ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠ΅, Ρ‡Π΅ΠΌ описано Π² основном тСкстС. ΠžΠ±ΡŠΠ΅ΠΊΡ‚  Text3d - спСциализированная вСрсия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Curve, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ подклассу Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² API Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Text3d Π½Π΅ являСтся подклассом Curve, ΠΊΠ°ΠΊ ΠΈ Π½Π΅Ρ‚ Ρƒ Π½Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², доступных Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ экзСмплярС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π—Π²ΡƒΡ‡ΠΈΡ‚ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎ? Π’Π°ΠΊ ΠΈ Π΅ΡΡ‚ΡŒ. Как ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Π’Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚Π΅ всС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹? Π’Π΅ΡΡŒ фокус Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Text3d, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ связанному с Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Curve, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ этот малСнький ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

txt = ob.getData()

curve = Blender.Curve.Get(txt.getName())

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ txt, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ Text3d-спСцифичной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, txt.setText('foo')) ΠΈ curve, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ Curve-спСцифичной   ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ   (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, curve.getNumCurves()).


ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Curve Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° состоят ΠΈΠ· мноТСства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² CurNurb, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ сСгмСнты ΠΊΡ€ΠΈΠ²ΠΎΠΉ. ЕдинствСнный тСкстовый символ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΡƒΡ… сСгмСнтов ΠΊΡ€ΠΈΠ²ΠΎΠΉ. МалСнькая Π±ΡƒΠΊΠ²Π° e, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, состоит ΠΈΠ· внСшнСго сСгмСнта ΠΈ нСбольшого Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ сСгмСнта ΠΊΡ€ΠΈΠ²ΠΎΠΉ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ CurNurb, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, состоят ΠΈΠ· мноТСства ΡƒΠ·Π»ΠΎΠ² ΠΈΠ»ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ сСгмСнт ΠΊΡ€ΠΈΠ²ΠΎΠΉ. Π’ случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Text3d эти ΡƒΠ·Π»Ρ‹ всСгда ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ BezTriple, ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Geometry Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° прСдоставляСт Π½Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ BezierInterp(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ. Π­Ρ‚ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΊΡ€ΠΈΠ²ΠΎΠΉ Π² этих Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… (часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ handle, Ρ€ΡƒΠΊΠΎΡΡ‚ΡŒ), ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² BezTriple. Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ выглядит Ρ‚Π°ΠΊ (ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ нашСго ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π² Tools.py) (Π­Ρ‚Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ этого Ρ€Π°Π·Π΄Π΅Π»Π°, нСсмотря Π½Π° завСрСния Π°Π²Ρ‚ΠΎΡ€Π°, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Ρ„Π°ΠΉΠ»Π΅ Tools.py, ΠΏΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΠΎΠΌ ΠΊΠΎ 2-ΠΉ Π³Π»Π°Π²Π΅, Π½Π°ΠΉΡ‚ΠΈ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ engrave.py β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.):

import Blender

from Blender.Geometry import BezierInterp as interpolate

from Blender.Mathutils import Vector as vec

def curve2mesh(c):

   vlists=[]

   for cn in c:

      npoints = len(cn)


      points=[]

      first=True

      for segment in range(npoints-1):

         a=cn[segment].vec

         b=cn[segment+1].vec

         lastpoints = interpolate(vec(a[1]),vec(a[2]),

                         vec(b[0]), vec(b[1]),6)

         if first:

            first = False

            points.append(lastpoints[0])

            points.extend(lastpoints[1:])

      if cn.isCyclic():

         a=cn[-1].vec

         b=cn[0].vec

         lastpoints=interpolate(vec(a[1]), vec(a[2]),

                                vec(b[0]), vec(b[1]),6)

         points.extend(lastpoints[:-2])


      vlists.append(points)


   return vlists  

Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ строки ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… аспСкта. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡŽ. ΠœΡ‹ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ довольно Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠ΅Π΅ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ BezierInterp() Π² interpolate(), ΠΈ ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ бСрутся ΠΎΡ‚ Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² BezTriple, ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ BezTriple ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ списку ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²: входящая Ρ€ΡƒΠΊΠΎΡΡ‚ΡŒ, позиция Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΈ исходящая Ρ€ΡƒΠΊΠΎΡΡ‚ΡŒ (смотри ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ рисунок). ΠœΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ исходящСй рукояти ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ входящСй рукояти. ΠŸΡΡ‚Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ являСтся количСством Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ interpolate().



Вторая выдСлСнная строка заботится ΠΎ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹Ρ… ΠΊΡ€ΠΈΠ²Ρ‹Ρ… - ΠΊΡ€ΠΈΠ²Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡ… ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΈ послСдниС Ρ‚ΠΎΡ‡ΠΊΠΈ связаны. Π­Ρ‚ΠΎ являСтся случаСм всСх ΠΊΡ€ΠΈΠ²Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ символы Π² тСкстС. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список списков. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ список содСрТит всС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ (ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΈΠ· x, y, z ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚) для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΡ€ΠΈΠ²ΠΎΠΉ. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ символы состоят ΠΈΠ· Π±ΠΎΠ»Π΅Π΅, Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΡ€ΠΈΠ²ΠΎΠΉ. НапримСр, нСбольшая Π±ΡƒΠΊΠ²Π° e Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΡˆΡ€ΠΈΡ„Ρ‚Π°Ρ…, ΠΈΠ»ΠΈ Π±ΡƒΠΊΠ²Π° o состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΡ€ΠΈΠ²Ρ‹Ρ…, ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Ρ‘Ρ‚ внСшнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π±ΡƒΠΊΠ²Ρ‹ ΠΈ ΠΎΠ΄Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ.  ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Text3d, содСрТащий тСкст Foo, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список ΠΈΠ· пяти списков - ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ F, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ для Π΄Π²ΡƒΡ… ΠΊΡ€ΠΈΠ²Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ o, Ρ‚Π°ΠΊ ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ с Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΌ ΠΈ пятым.


Π’Ρ‹Π΄Π°Π²Π»ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ€Ρ‘Π±Π΅Ρ€Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°

Π’Ρ‹Π΄Π°Π²Π»ΠΈΠ²Π°Π½ΠΈΠ΅ (Extrusion) являСтся процСссом, Π³Π΄Π΅ ΠΌΡ‹ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅ΠΌ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ (ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ,  ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠ΅ ΠΈΡ… Ρ€Ρ‘Π±Ρ€Π°) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΈΡ… Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, послС Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ соСдиняСм эти Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ с ΠΈΡ… ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°ΠΌΠΈ Π½ΠΎΠ²Ρ‹ΠΌΠΈ Ρ€Ρ‘Π±Ρ€Π°ΠΌΠΈ, ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, создавая Π½ΠΎΠ²ΡƒΡŽ Π³Ρ€Π°Π½ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ старыми ΠΈ Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ. Нам Π½ΡƒΠΆΠ½ΠΎ это для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ‚ΠΎΠΏΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΠ΅ нашСго тСкста, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΎΡ€ΠΎΠ·Π΄ΠΊΡƒ с Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ стСнками. Ѐункция extrude_selected_edges() Π² Tools.py ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ мСш ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΈ Π²Ρ‹Π΄Π°Π²ΠΈΡ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… Ρ€Ρ‘Π±Ρ€Π°Ρ… Π² мСшС Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, добавляя всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½ΠΎΠ²Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π° ΠΈ Π³Ρ€Π°Π½ΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эта Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° являСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, ΠΊΠΎΠ΄ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ здСсь.


Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ (Expanding) Ρ€Ρ‘Π±Π΅Ρ€Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°

Если Ρƒ нас Π΅ΡΡ‚ΡŒ список Ρ€Ρ‘Π±Π΅Ρ€, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΡƒΡŽ ΠΊΡ€ΠΈΠ²ΡƒΡŽ (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ символ, ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΎΠΊΡ€ΡƒΠΆΠΈΡ‚ΡŒ эти Ρ€Ρ‘Π±Ρ€Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π΅ "Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅" любого ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° subsurface, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с нашим мСшСм. Π­Ρ‚ΠΎ Π±Ρ‹Π» Π±Ρ‹ довольно слоТный процСсс, Ссли ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ это Π² 3D, Π½ΠΎ, ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, наши ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ символы ΠΈΠΌΠ΅ΡŽΡ‚ всС свои Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π½Π° плоскости xy (Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС символы Π² Π½ΠΎΠ²Ρ‹Ρ… экзСмплярах Text3d ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π»Π΅ΠΆΠ°Ρ‚ Π½Π° плоскости xy)..



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