empties = [
('RedEmpty', origin, redGrp),
('GreenEmpty', dy, greenGrp),
('CubeEmpty', 2*dy, cubeGrp),
('SphereEmpty', 3*dy, sphereGrp) ]
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΡΡΡΡΠ΅ΠΊ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡ Π² ΡΠ»ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ (Display)
scn = bpy.context.scene
for (name, loc, group) in empties:
empty = bpy.data.objects.new(name, None)
empty.location = loc
empty.name = name
empty.dupli_type = 'GROUP'
empty.dupli_group = group
scn.objects.link(empty)
moveToLayer(empty, Display)
# Π‘Π»ΠΎΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ ΡΠ»ΠΎΠ΅ΠΌ
scn.layers[Display] = True
for n in range(20):
if n != Display:
scn.layers[n] = False
return
if __name__ == "__main__":
run()
ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ico-ΡΡΠ΅ΡΡ, Π΄Π΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ΅ΡΡΡΠΊΠΎΠΉ. ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΡΡΡΠΊΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π³ΡΡΠΏΠΏΡ Π²Π΅ΡΡΠΈΠ½ Π² Π²Π΅ΡΡ Π½Π΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ ΡΡΠ΅ΡΡ.
#----------------------------------------------------------
# File lattice.py
#----------------------------------------------------------
import bpy
def createIcoSphere(origin):
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ico-ΡΡΠ΅ΡΡ
bpy.ops.mesh.primitive_ico_sphere_add(location=origin)
ob = bpy.context.object
me = ob.data
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³ΡΡΠΏΠΏ Π²Π΅ΡΡΠΈΠ½
upper = ob.vertex_groups.new('Upper')
lower = ob.vertex_groups.new('Lower')
for v in me.vertices:
if v.co[2] > 0.001:
upper.add([v.index], 1.0, 'REPLACE')
elif v.co[2] < -0.001:
lower.add([v.index], 1.0, 'REPLACE')
else: upper.add([v.index], 0.5, 'REPLACE')
lower.add([v.index], 0.5, 'REPLACE')
return ob
def createLattice(origin):
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
lat = bpy.data.lattices.new('MyLattice')
ob = bpy.data.objects.new('LatticeObject', lat)
ob.location = origin ob.show_x_ray = True
# ΠΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊ ΡΡΠ΅Π½Π΅
scn = bpy.context.scene
scn.objects.link(ob)
scn.objects.active = ob
scn.update()
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠ΅ΡΡΡΠΊΠΈ
lat.interpolation_type_u = 'KEY_LINEAR'
lat.interpolation_type_v = 'KEY_CARDINAL'
lat.interpolation_type_w = 'KEY_BSPLINE'
lat.use_outside = False
lat.points_u = 2
lat.points_v = 2 lat.points_w = 2
# Π Π°ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΡΠ΅ΠΊ ΡΠ΅ΡΡΡΠΊΠΈ
s = 1.0
points = [
(-s,-s,-s), (s,-s,-s), (-s,s,-s), (s,s,-s),
(-s,-s,s), (s,-s,s), (-s,s,s), (s,s,s)
]
for n,pt in enumerate(lat.points):
for k in range(3):
pt.co_deform[k] = points[n][k]
pass
return ob
def run(origin):
sphere = createIcoSphere(origin)
lat = createLattice(origin)
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠ΅ΡΡΡΠΊΠΈ
mod = sphere.modifiers.new('Lat', 'LATTICE')
mod.object = lat
mod.vertex_group = 'Upper'
# Π Π΅ΡΡΡΠΊΠ° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Π»ΡΠ³ΠΊΠΎΠ³ΠΎ Π΄Π΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
bpy.context.scene.update()
bpy.ops.object.mode_set(mode='EDIT')
return
if __name__ == "__main__":
run((0,0,0))
ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊΡΠΈΠ²ΡΡ ΠΠ΅Π·ΡΠ΅. ΠΠ½Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊΡΡΠ³ Nurbs, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ bevel-ΠΎΠ±ΡΠ΅ΠΊΡ.
#----------------------------------------------------------
# File curve.py
#----------------------------------------------------------
import bpy
def createBevelObject():
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Bevel-ΠΊΡΠΈΠ²ΠΎΠΉ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
cu = bpy.data.curves.new('BevelCurve', 'CURVE')
ob = bpy.data.objects.new('BevelObject', cu)
bpy.context.scene.objects.link(ob)
# ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² cu.dimensions = '2D'
cu.resolution_u = 6
cu.twist_mode = 'MINIMUM'
ob.show_name = True
# ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠΎΡΠ΅ΠΊ
coords = [
(0.00,0.08,0.00,1.00),
(-0.20,0.08,0.00,0.35),
(-0.20,0.19,0.00,1.00),
(-0.20,0.39,0.00,0.35),
(0.00,0.26,0.00,1.00),
(0.20,0.39,0.00,0.35),
(0.20,0.19,0.00,1.00),
(0.20,0.08,0.00,0.35)
]
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΏΠ»Π°ΠΉΠ½Π° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠΎΡΠ΅ΠΊ
spline = cu.splines.new('NURBS')
nPointsU = len(coords)
spline.points.add(nPointsU)
for n in range(nPointsU):
spline.points[n].co = coords[n]
# ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠΏΠ»Π°ΠΉΠ½Π°. Π’ΠΎΡΠΊΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ.
spline.use_cyclic_u = True
spline.resolution_u = 6
spline.order_u = 3
return ob
def createCurveObject(bevob):
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΡΠΈΠ²ΠΎΠΉ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
cu = bpy.data.curves.new('MyCurve', 'CURVE')
ob = bpy.data.objects.new('MyCurveObject', cu)
bpy.context.scene.objects.link(ob)
# ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
cu.bevel_object = bevob
cu.dimensions = '3D'
cu.use_fill_back = True
cu.use_fill_front = True
ob.show_name = True
# ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΠ΅Π·ΡΠ΅
beziers = [
((-1.44,0.20,0.00), (-1.86,-0.51,-0.36), (-1.10,0.75,0.28)),
((0.42,0.13,-0.03), (-0.21,-0.04,-0.27), (1.05,0.29,0.21)),
((1.20,0.75,0.78), (0.52,1.36,1.19), (2.76,-0.63,-0.14)) ]
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΏΠ»Π°ΠΉΠ½Π° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠΎΡΠ΅ΠΊ ΠΠ΅Π·ΡΠ΅
spline = cu.splines.new('BEZIER')
nPointsU = len(beziers)
spline.bezier_points.add(nPointsU)
for n in range(nPointsU):
bpt = spline.bezier_points[n]
(bpt.co, bpt.handle_left, bpt.handle_right) = beziers[n]
return ob
def run(origin):
bevob = createBevelObject()
bevob.location = origin
curveob = createCurveObject(bevob)
curveob.location = origin
bevob.select = False
curveob.select = True
bpy.ops.transform.translate(value=(2,0,0))
return
if __name__ == "__main__":
run((0,0,0))
ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΊΡΠΈΠ²ΡΡ : POLY, NURBS ΠΈ BEZIER.
#----------------------------------------------------------
# File curve_types.py
#----------------------------------------------------------
import bpy
from math import sin, pi
# Poly (ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ) ΠΈ nurbs
def makePolySpline(cu):
spline = cu.splines.new('POLY')
cu.dimensions = '3D'
addPoints(spline, 8)
def makeNurbsSpline(cu):
spline = cu.splines.new('NURBS')
cu.dimensions = '3D'
addPoints(spline, 4)
spline.order_u = 3
return spline
def addPoints(spline, nPoints):
spline.points.add(nPoints-1)
delta = 1/(nPoints-1)
for n in range(nPoints):
spline.points[n].co = (0, n*delta, sin(n*pi*delta), 1)
# ΠΠ΅Π·ΡΠ΅
def makeBezierSpline(cu):
spline = cu.splines.new('BEZIER')
cu.dimensions = '3D'
order = 3
addBezierPoints(spline, order+1)
spline.order_u = order
def addBezierPoints(spline, nPoints):
spline.bezier_points.add(nPoints-1)
bzs = spline.bezier_points
delta = 1/(nPoints-1)
for n in range(nPoints):
bzs[n].co = (0, n*delta, sin(n*pi*delta))
print(bzs[n].co)
for n in range(1, nPoints):
bzs[n].handle_left = bzs[n-1].co
for n in range(nPoints-1):
bzs[n].handle_right = bzs[n+1].co
return spline
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΡΠΈΠ²ΠΎΠΉ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΊ ΡΡΠ΅Π½Π΅
def makeCurve(name, origin, dx):
cu = bpy.data.curves.new('%sCurve' % name, 'CURVE')
ob = bpy.data.objects.new('%sObject' % name, cu)
(x,y,z) = origin ob.location = (x+dx,y,z)
ob.show_name = True
bpy.context.scene.objects.link(ob)
return cu
def run(origin):
polyCurve = makeCurve("Poly", origin, 0)
makePolySpline(polyCurve)
nurbsCurve = makeCurve("NurbsEnd", origin, 1)
spline = makeNurbsSpline(nurbsCurve)
spline.use_endpoint_u = True
nurbsCurve = makeCurve("NurbsNoend", origin, 2)
spline = makeNurbsSpline(nurbsCurve)
spline.use_endpoint_u = False
bezierCurve = makeCurve("Bezier", origin, 3)
makeBezierSpline(bezierCurve)
return
if __name__ == "__main__":
run((0,0,0))
ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΡΡΡ ΠΈ ΠΎΠ±Π΅Π·ΡΡΠ½Ρ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ "ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΏΡΡΠΈ" (follow path).
#----------------------------------------------------------
# File path.py
#----------------------------------------------------------
import bpy
def run(origin):