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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² написаниС скриптов Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅ для Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° 2.5x. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 8

Автор Thomas Larsson

    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()


Π Π΅ΡˆΡ‘Ρ‚ΠΊΠ° (Lattice)

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° добавляСт 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):