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

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

Автор Thomas Larsson

         return{'FINISHED'}  


# Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ

class OBJECT_OT_DeleteButton(bpy.types.Operator):

    bl_idname = "swatches.delete"

    bl_label = "Delete swatch" 


    def execute(self, context):

        global theSwatches

        n = findSwatch(context.object.my_swatch)

        theSwatches.pop(n)

        setSwatches()

        return{'FINISHED'}  


# РСгистрация

bpy.utils.register_module(__name__)


ОбъявлСниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π² мСню

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ Π΄ΠΎ сих ΠΏΠΎΡ€ попадались, Π±Ρ‹Π»ΠΈ простыми ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ. Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ слоТный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаёт искривлСнный Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€.

Для Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠŸΡ€ΠΎΠ±Π΅Π» ΠΈ Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ "Add twisted cylinder"; Π‘Π»Π΅Π½Π΄Π΅Ρ€ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ сопоставляСмыС ΠΈΠΌΠ΅Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²ΠΎ врСмя Π½Π°Π±ΠΎΡ€Π°. Π¦ΠΈΠ»ΠΈΠ½Π΄Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько ΠΎΠΏΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ появятся Π² области Tool props (Π½ΠΈΠΆΠ΅ сСкции Tools), сразу послС создания Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€Π°. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ отобразится Π² 3D-Π²ΠΈΠ΄Π΅.

ПослСдняя Ρ‡Π°ΡΡ‚ΡŒ скрипта рСгистрируСт Π΅Π³ΠΎ. ВмСсто наТатия клавиши ΠŸΡ€ΠΎΠ±Π΅Π», Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ скрипт Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ· подмСню Add Β» Mesh. Если Π±Ρ‹ ΠΌΡ‹ использовали append (Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ) вмСсто prepend (ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡ‚ΡŒ) Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ register(), Π²Ρ‹Π·ΠΎΠ² появился Π±Ρ‹ Π²Π½ΠΈΠ·Ρƒ вмСсто Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ мСню.



#----------------------------------------------------------

# File twisted.py

#----------------------------------------------------------

import bpy, math 


def addTwistedCylinder(context, r, nseg, vstep, nplanes, twist):

    # Ѐункция создания Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€Π°

    verts = []

    faces = []

    w = 2*math.pi/nseg

    a = 0

    da = twist*math.pi/180

    for j in range(nplanes+1):

        z = j*vstep

        a += da

        for i in range(nseg):

            verts.append((r*math.cos(w*i+a), r*math.sin(w*i+a), z))

            if j > 0:

                i0 = (j-1)*nseg

                i1 = j*nseg

                for i in range(1, nseg):

                    faces.append((i0+i-1, i0+i, i1+i, i1+i-1))

                faces.append((i0+nseg-1, i0, i1, i1+nseg-1))


    me = bpy.data.meshes.new("TwistedCylinder")

    me.from_pydata(verts, [], faces)

    ob = bpy.data.objects.new("TwistedCylinder", me)

    context.scene.objects.link(ob)

    context.scene.objects.active = ob return ob 


#

# Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

#


from bpy.props import * 


class MESH_OT_primitive_twisted_cylinder_add(bpy.types.Operator):

    '''Add a twisted cylinder'''

    bl_idname = "mesh.primitive_twisted_cylinder_add"

    bl_label = "Add twisted cylinder"

    bl_options = {'REGISTER', 'UNDO'}


    radius = FloatProperty(name="Radius",

        default=1.0, min=0.01, max=100.0)

    nseg = IntProperty(name="Major Segments",

        description="Number of segments for one layer",

        default=12, min=3, max=256)

    vstep = FloatProperty(name="Vertical step",

        description="Distance between subsequent planes",

        default=1.0, min=0.01, max=100.0)

    nplanes = IntProperty(name="Planes",

        description="Number of vertical planes",

        default=4, min=2, max=256)

    twist = FloatProperty(name="Twist angle",

        description="Angle between subsequent planes (degrees)",

        default=15, min=0, max=90)


    location = FloatVectorProperty(name="Location")

    rotation = FloatVectorProperty(name="Rotation")

    # Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅: Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ (Rotation) Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…! 


    def execute(self, context):

    ob = addTwistedCylinder(context, self.radius, self.nseg, self.vstep,

        self.nplanes, self.twist)

    ob.location = self.location

    ob.rotation_euler = self.rotation

    #context.scene.objects.link(ob)

    #context.scene.objects.active = ob

    return {'FINISHED'}  


#

# РСгистрация

# Π”Π΅Π»Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ скрипту ΠΈΠ· мСню Add > Mesh


def menu_func(self, context):

    self.layout.operator("mesh.primitive_twisted_cylinder_add",

        text="Twisted cylinder",

        icon='MESH_TORUS') 


def register():

    bpy.utils.register_module(__name__)

    bpy.types.INFO_MT_mesh_add.prepend(menu_func)  


def unregister():

    bpy.utils.unregister_module(__name__)

    bpy.types.INFO_MT_mesh_add.remove(menu_func)  


if __name__ == "__main__":

    register()


ΠœΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ взят прямо ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ API, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

ΠœΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Operator.modal которая ΠΏΡ€ΠΈ запускС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ события, ΠΏΠΎΠΊΠ° Π½Π΅ Π²Π΅Ρ€Π½Ρ‘Ρ‚ 'FINISHED' ΠΈΠ»ΠΈ 'CANCELLED'. Grab (сдвиг), Rotate (Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅), Scale (ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) ΠΈ Fly-Mode (Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎΠ»Ρ‘Ρ‚Π°) - ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Они особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… инструмСнтов, ваш ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ собствСнноС состояниС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ клавиши ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΎΠΏΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

Когда вызываСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΎΠ½ добавляСт модального ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΊ сСбС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° context.window_manager.modal_handler_add(self). ПослС этого Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ плоскости XY, повторяя пСрСмСщСния ΠΌΡ‹ΡˆΠΈ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΉΡ‚ΠΈ, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ ΠΈΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Esc.

ΠœΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° событий:

1. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

2. НаТатиС Π›ΠšΠœ  для подтвСрТдСния ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ оставляСтся Π² своСй Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

3. НаТатиС ПКМ  ΠΈΠ»ΠΈ клавиши Esc, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ Π²Ρ‹ΠΉΡ‚ΠΈ Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ возвращаСтся Π² свою ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.

Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ способ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ. Если функция modal() всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 'RUNNING_MODAL', скрипт Π²ΠΎΠΉΠ΄Ρ‘Ρ‚ Π² бСсконСчный Ρ†ΠΈΠΊΠ», ΠΈ Π’Π°ΠΌ придётся ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π‘Π»Π΅Π½Π΄Π΅Ρ€.

ΠœΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ опрСдСляСт Π΄Π²Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ __init()__ ΠΈ __del()__, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° модальная опСрация начинаСтся ΠΈ прСкращаСтся, соотвСтствСнно.

ЗапуститС скрипт. Активный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСмСщаСтся ΠΏΠΎ плоскости XY ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΌΡ‹ΡˆΠΈ. Π‘ΠΊΡ€ΠΈΠΏΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ создаСт панСль с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ, Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.


#----------------------------------------------------------

# File modal.py

# from API documentation

#----------------------------------------------------------

import bpy 


class MyModalOperator(bpy.types.Operator):

    bl_idname = "mine.modal_op"

    bl_label = "Move in XY plane" 


    def __init__(self):

        print("Start moving")  


    def __del__(self):

        print("Moved from (%d %d) to (%d %d)" %

            (self.init_x, self.init_y, self.x, self.y))  


    def execute(self, context):

        context.object.location.x = self.x / 100.0

        context.object.location.y = self.y / 100.0  


    def modal(self, context, event):

        if event.type == 'MOUSEMOVE': # ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

            self.x = event.mouse_x

            self.y = event.mouse_y

            self.execute(context)

        elif event.type == 'LEFTMOUSE': # ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅

            return {'FINISHED'}

        elif event.type in ('RIGHTMOUSE', 'ESC'): # ΠžΡ‚ΠΌΠ΅Π½Π°

            return {'CANCELLED'}


        return {'RUNNING_MODAL'}  


    def invoke(self, context, event):

        self.x = event.mouse_x

        self.y = event.mouse_y

        self.init_x = self.x

        self.init_y = self.y

        self.execute(context)


        print(context.window_manager.modal_handler_add(self))

        return {'RUNNING_MODAL'}  


#

# ПанСль Π² Ρ€Π°ΠΉΠΎΠ½Π΅ tools

#

class MyModalPanel(bpy.types.Panel):

    bl_label = "My modal operator"

    bl_space_type = "VIEW_3D"

    bl_region_type = "TOOLS" 


    def draw(self, context):

        self.layout.operator("mine.modal_op")  


# РСгистрация

bpy.utils.register_module(__name__) 


# АвтоматичСски ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈ запускС

bpy.ops.mine.modal_op('INVOKE_DEFAULT')


Invoke (Π²Ρ‹Π·ΠΎΠ²) ΠΏΡ€ΠΎΡ‚ΠΈΠ² execute (выполнСния)

Π­Ρ‚ΠΎΡ‚ скрипт ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ invoke (Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ) ΠΈ execute (Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ). Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ (invoking) событиС являСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Operator.invoke, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ устанавливаСт Π΄Π²Π° свойства Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° x ΠΈ y для полоТСния ΠΌΡ‹ΡˆΠΈ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Operator.execute. Как Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ (execute) ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ явно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ x ΠΈ y: bpy.ops.wm.mouse_position(’EXEC_DEFAULT’, x=20, y=66)

ВмСсто Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΌΡ‹ΡˆΠΈ Π² ΠΎΠΊΠ½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, информация отправляСтся Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ панСль Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ мСсто для отобраТСния ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ увСдомлСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ придСтся ΠΈΡΠΊΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΎΠΊΠ½Π΅, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»/DOS-ΠΎΠΊΠ½ΠΎ отобраТаСтся Π½Π΅ Π²ΠΎ всСх вСрсиях Blender. Однако Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ сообщСния Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π²ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ пространство ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ.