ΠΠ΄ΠΈΠ½ Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ: ΡΠΈΠΌΠ²ΠΎΠ» ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅, ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ±Π΅ΡΠ½ΡΠ΅ ΡΠΈΠΊΠ»Ρ Π²ΠΎΠΊΡΡΠ³ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°, ΡΠ°ΠΊΠΎΠΉ ΡΡΠ±Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ½Π°ΡΡΠΆΠΈ Π²Π½Π΅ΡΠ½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°, Π½ΠΎ Π²Π½ΡΡΡΠΈ Π»ΡΠ±ΠΎΠΉ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΡΡΠ±Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ», ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π½Π°ΡΡ, Π»Π΅ΠΆΠΈΡ Π»ΠΈ ΠΊΡΠΈΠ²Π°Ρ Π²Π½ΡΡΡΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΡΠΎ ΠΎΠ½Π° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π½Π΅ΡΠ½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ, ΠΈ Π½ΠΎΠ²ΡΠΉ ΡΡΠ±Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ Π»Π΅ΠΆΠ°ΡΠΈΠΌ Π²Π½ΡΡΡΠΈ ΠΊΡΠΈΠ²ΠΎΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ expand() (ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΡΡΠΊΠ΅ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Tools.py. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠ° ΠΈ Π²ΡΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ expand.py β ΠΏΡΠΈΠΌ. ΠΏΠ΅Ρ.), Π±Π΅ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ plist, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΠΏΠΈΡΠΊΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ MVert, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Ρ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅ΡΡΡΡΡΡ Ρ Π½ΠΈΠΌΠΈ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²Π°Ρ ΡΠΎΡΠΊΠ° ΠΊΡΠΈΠ²ΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠ°ΡΡΠΈΡΠΈΡΡ, Π»Π΅ΠΆΠΈΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊΡΠΈΠ²ΡΡ , ΠΌΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΡΡΠΎ ΠΊΡΠΈΠ²Π°Ρ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΊΡΠΈΠ²ΠΎΠΉ. (ΠΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅Π²Π΅ΡΠ½ΡΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΊΡΠΈΠ²Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡ Π²Π½Π΅ΡΠ½ΡΡ ΠΊΡΠΈΠ²ΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΡΠΊΠ΅, Π½ΠΎ Π΄Π»Ρ ΠΊΡΠΈΠ²ΡΡ , ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ» Π² ΡΡΠΈΡΡΠ΅, ΡΠ°ΠΊΠΎΠ³ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.)
def expand(me,loop,offset=0.05,plist=[]):
ov = [me.verts[i] for i in verts_from_edgeloop(loop)]
inside=False
for polygon in plist:
if in_polygon(loop[0].v1.co,polygon):
inside=True
break # ΠΌΡ Π½Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π» Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ
Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ
n=len(ov)
points=[]
for i in range(n):
va = (ov[i].co-ov[(i+1)%n].co).normalize()
vb = (ov[i].co-ov[(i-1)%n].co).normalize()
cosa=abs(vec(va).dot(vb))
if cosa>0.99999 : # ΠΏΠΎΡΡΠΈ ΠΊΠΎΠ»Π»ΠΈΠ½Π΅Π°ΡΠ½Ρ
c = vec(va[1],va[0],va[2])
else:
c = va+vb
l = offset/c.length
p = ov[i].co+l*c
if in_polygon(p,ov) != inside:
p = ov[i].co-l*c
print i,ov[i].co,va,vb,c,l,cosa,p
points.append(p)
return points
ΠΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ (ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π² Tools.py), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ±Π΅Ρ, ΡΠΎΡΠΌΠΈΡΡΡΡΠΈΡ ΡΡΠ±Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ», ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π²Π΅ΡΡΠΈΠ½. ΠΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ in_polygon() ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π²Π΅ΡΡΠΈΠ½, Π° Π½Π΅ ΡΡΠ±Π΅Ρ, ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½, ΡΠΎ Π΅ΡΡΡ ΡΠΌΠ΅ΠΆΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ ΡΠΎΡΠΌΠΈΡΡΡΡ ΡΡΠ±ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ.
Π§ΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ ΡΠΎΡΠΊΠ° Π²Π½ΡΡΡΠΈ Π·Π°ΠΌΠΊΠ½ΡΡΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ Π²Π΅ΡΡΠΈΠ½, ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ±Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ Π»ΠΈΠ½ΠΈΠ΅ΠΉ (ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ Π»ΡΡΠΎΠΌ), ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π΄ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ. ΠΡΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°Π΅ΠΌΡΡ ΡΡΠ±Π΅Ρ Π½Π΅ΡΠ΅ΡΠ½ΠΎΠ΅, ΡΠΎΡΠΊΠ° Π»Π΅ΠΆΠΈΡ Π²Π½ΡΡΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°; Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ½ΠΎΠ΅, ΠΎΠ½Π° Π»Π΅ΠΆΠΈΡ ΡΠ½Π°ΡΡΠΆΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΡΡΠ½ΠΎΠΊ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ:
Π€ΡΠ½ΠΊΡΠΈΡ in_polygon(), ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ Π·Π΄Π΅ΡΡ - ΡΠ°ΡΡΡ Tools.py. ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΡΠΊΡ (ΠΠ΅ΠΊΡΠΎΡ) ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π²Π΅ΡΡΠΈΠ½ (ΠΎΠ±ΡΠ΅ΠΊΡΡ MVert) ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ»ΠΈ ΠΡΡΠΈΠ½Ρ ΠΈΠ»ΠΈ ΠΠΎΠΆΡ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π»ΡΠ±Π°Ρ z-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Ρ ΡΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ Ρ Π²Π΅ΡΡΠΈΠ½Ρ Π² ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ.
from Blender.Geometry import LineIntersect2D
from Blender.Mathutils import Vector as vec
def in_polygon(p,polygon):
intersections = 0
n = len(polygon)
if n<3 : return False
for i in range(n):
if LineIntersect2D (p,vec(1.0,0.0,0.0),polygon[i].
co,polygon[(i+1)%n].co):
intersections+=1
return intersections % 2 == 1
Π’ΡΡΠ΄Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ LineIntersect2D(), Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Blender.Geometry. ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ (%) Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ return - ΡΠΏΠΎΡΠΎΠ± ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π½Π΅ΡΠ΅ΡΠ½ΠΎΠ΅ Π»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π²ΡΡ Π²ΠΌΠ΅ΡΡΠ΅: Engrave.py
ΠΠΎΠΎΡΡΠΆΠ΅Π½Π½ΡΠ΅ Π²ΡΠ΅ΠΌΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΌΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΠ΅ΠΊΡΠΈΡΡ , ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°Π³ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ³ΡΠ°Π²ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡ:
1. ΠΠΎΠΊΠ°Π·Π°ΡΡ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠ΅Π΅ ΠΌΠ΅Π½Ρ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π½Π°Π΄ΠΎ Π³ΡΠ°Π²ΠΈΡΠΎΠ²Π°ΡΡ.
2. ΠΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ - ΠΌΠ΅Ρ, ΠΈ Π²ΡΠ±ΡΠ°Π½Ρ Π³ΡΠ°Π½ΠΈ.
3. Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Text3d.
(Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΊΡΠΈΠΏΡ engrave.py ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Text3d ΡΠΆΠ΅ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ ΠΈ Π²ΡΠ±ΡΠ°Π½ ΠΊΠ°ΠΊ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ 3 ΠΏΡΠ½ΠΊΡΠ° Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ β ΠΏΡΠΈΠΌ. ΠΏΠ΅Ρ.)
4. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΌΠ΅Ρ, Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌΠΈ Π³ΡΡΠΏΠΏΠ°ΠΌΠΈ Π²Π΅ΡΡΠΈΠ½.
5. ΠΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ±Π΅ΡΠ½ΡΠ΅ ΡΠΈΠΊΠ»Ρ ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ.
6. ΠΡΠ΄Π°Π²ΠΈΡΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π²Π½ΠΈΠ·.
7. ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΡ Π½ΠΈΠ· Π²ΡΠ΄Π°Π²Π»Π΅Π½Π½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
8. ΠΠΎΠ±Π°Π²ΠΈΡΡ "cartouche" (ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ) Π²ΠΎΠΊΡΡΠ³ ΡΠ΅ΠΊΡΡΠ°.
9. ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΌΠ΅ΠΆΠ΄Ρ cartouche ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ.
10.ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ subsurface.
11.Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ crease (ΡΠΊΠ»Π°Π΄ΠΊΠΈ) Π½Π° ΡΡΠ±ΡΠ°Ρ , ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² Π³ΡΡΠΏΠΏΠ°Ρ Π²Π΅ΡΡΠΈΠ½ TextTop ΠΈ TextBottom.
ΠΠ°Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΊΡΠΈΠΏΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π° ΡΡΠΎΠΉ ΡΡ Π΅ΠΌΠΎΠΉ ΠΏΠΎΡΡΠΈ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΡΠ°Π½ΡΡΠ΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅. ΠΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π·Π΄Π΅ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ (ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΊΡΠΈΠΏΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΊΠ°ΠΊ engrave.py). ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Text3d (c Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅) Π² ΡΠΏΠΈΡΠΎΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ Π²Π΅ΡΡΠΈΠ½ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΊΡΠΈΠ²ΠΎΠΉ Π² ΡΠ΅ΠΊΡΡΠ΅, ΠΈ ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΏΡΡΡΠΎΠΉ ΠΠ΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΡΡΠ΅Π½Ρ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΡΡΡΠΌΠΈ Π³ΡΡΠΏΠΏΠ°ΠΌΠΈ Π²Π΅ΡΡΠΈΠ½:
vlist = curve2mesh(c)
me = Blender.Mesh.New('Mesh')
ob = Blender.Scene.GetCurrent().objects.new(me,'Mesh')
me.addVertGroup('TextTop')
me.addVertGroup('TextBottom')
me.addVertGroup('Outline')
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΈ Π²Π΅ΡΡΠΈΠ½Ρ Π² ΠΌΠ΅Ρ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡΠΈΠ΅ ΡΡΠ±ΡΠ°. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ ΠΊΡΠΈΠ²ΠΎΠΉ Π² ΡΠΈΠΌΠ²ΠΎΠ»Π΅ Π·Π°ΠΌΠΊΠ½ΡΡΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π±ΡΠ°, ΡΡΠΎΠ±Ρ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΌΠΎΡΡΠΎΠΌ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½ΠΎΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. ΠΠ° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ, ΠΌΡ ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π»ΡΠ±ΡΠ΅ Π·Π°Π΄Π²ΠΎΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΡΠΈΠ²ΠΎΠΉ. ΠΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π²Π΅ΡΡΠΈΠ½Ρ ΠΊ Π³ΡΡΠΏΠΏΠ΅ Π²Π΅ΡΡΠΈΠ½ TextTop ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠΏΠΈΡΠΎΠΊ Π½ΠΎΠ²ΡΡ ΡΡΠ±Π΅Ρ Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
loop=[]
for v in vlist:
offset=len(me.verts)
me.verts.extend(v)
edgeoffset=len(me.edges)
me.edges.extend([(i+offset,i+offset+1)
for i in range(len(v)-1)])
me.edges.extend([(len(v)-1+offset,offset)])
me.remDoubles(0.001)
me.assignVertsToGroup('TextTop',
range(offset,len(me.verts)),
1.0,
Blender.Mesh.AssignModes.ADD)
loop.append([me.edges[i] for i in range(edgeoffset,
len(me.edges) )])
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ±Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ, ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΉ, ΡΡΠ±Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» Π²ΠΎΠΊΡΡΠ³ Π½Π΅Π³ΠΎ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠΈ Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ ΠΈ ΡΡΠ±ΡΠ° ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΌΠ΅ΡΡ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΎΡΠΈΠΌ ΡΠΎΠ·Π΄Π°ΡΡ Π³ΡΠ°Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΡΡΠ±Π΅ΡΠ½ΡΠΌΠΈ ΡΠΈΠΊΠ»Π°ΠΌΠΈ, ΠΈ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π½Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅: Π·Π΄Π΅ΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΠΈΡΠΎΠ½Π° zip(), ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ°ΡΡ ΡΡΠ±Π΅Ρ Π΄Π²ΡΡ ΡΡΠ±Π΅ΡΠ½ΡΡ ΡΠΈΠΊΠ»ΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΡΡΠ±Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ (Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ Π² Tools.py), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡΡΠΈΡΡΠ΅Ρ ΡΡΠ±ΡΠ°, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π»Π΅ΠΆΠ°Π»ΠΈ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Ρ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡ ΡΡΠ±Π΅Ρ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π²Π΅ΡΡΠΈΠ½ ΠΈ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ· Π½ΠΈΡ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ Π½Π΅ΡΠΊΡΡΡΠ΅Π½Π½ΡΡ Π³ΡΠ°Π½Ρ. ΠΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ least_warped() (ΠΊΠΎΠ΄ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠΈΠΌΠ΅ΡΡΠΎΠ² Π³ΡΠ°Π½Π΅ΠΉ, Π·Π°Π΄Π°Π½Π½ΡΡ Π΄Π²ΡΠΌΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΡΠ΄ΠΊΠ°ΠΌΠΈ Π²Π΅ΡΡΠΈΠ½. ΠΠ΅ΡΠΊΡΡΡΠ΅Π½Π½Π°Ρ Π³ΡΠ°Π½Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΌΡΠΉ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΠΏΠ΅ΡΠΈΠΌΠ΅ΡΡ, ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Ρ ΠΌΡ Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊ ΠΌΠ΅ΡΡ.
for l in range(len(loop)):
points = expand.expand(me,loop[l],
0.02,loop[:l]+loop[l+1:])
offset=len(me.verts)
me.verts.extend(points)
edgeoffset=len(me.edges)
me.edges.extend([(i+offset,i+offset+1)
for i in range(len(points)-1)])
me.edges.extend([(len(points)-1+offset,offset)])
eloop=[me.edges[i] for i in
range(edgeoffset,len(me.edges))]
me.assignVertsToGroup('Outline',
range(offset,len(me.verts)),
1.0,
Blender.Mesh.AssignModes.ADD)
faces=[]
for e1,e2 in zip( expand.ordered_edgeloop(loop[l]),
expand.ordered_edgeloop(eloop)):
f1=(e1.v1.index,e1.v2.index,
e2.v2.index,e2.v1.index)