Автор Тема: Blender и национальная безопасность  (Прочитано 1790 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Blender и национальная безопасность
« : 26 Февраля 2012, 20:42:06 »
Всем нам в той или иной степени приходилось пользоваться скриптами в blender, различнымы дополнениями (addons).
Но бывает так, что их не хватает для достижения желаемого эффекта.

На мой взгляд знание кода и умение читать код уже пользительно, а если освоить и его написание, то совсем хорошо.
Поэтому попробую собрать здесь некоторые фрагменты, которые помогут сбросить часть рутины и сделать моделинг еще более приятным.

Через Blender API можно получить доступ и управлять как моделью так и самим интерфейсом программы.
Например, включение русификации интерфейса blender можно выполнить скриптом


Код: Python [Выделить]

import bpy
bpy.context.user_preferences.system.use_international_fonts=True
bpy.context.user_preferences.system.language='RUSSIAN'
bpy.context.user_preferences.system.use_translate_interface=True
bpy.context.user_preferences.system.use_translate_tooltips=True


А следующий пример кода выводит структуру нашего меша.
Код: Python [Выделить]

import bpy

for obj in bpy.data.objects:
    print(obj.name)
   
if "Cube" in bpy.data.meshes:
    mesh = bpy.data.meshes["Cube"]
    dir(mesh)
 
    print("\nVetices list:",len(mesh.vertices))   
    for v in mesh.vertices:
        print(v.index,v.co)

    print("\nEdge sctruct:",len(mesh.edges))   
    for e in mesh.edges:
        print("\nedge:",e.index)
        for ne in e.vertices:
            print(ne,end=' ')       

    print("\nFace sctruct",len(mesh.faces))   
    for f in mesh.faces:
        print("\nface:",f.index)
        for nf in f.vertices:
            print(nf,end=' ')               
           
    print("\nPolygons sctruct",len(mesh.polygons))   
    for p in mesh.polygons:
        print("\npolygons:",p.index)
        for np in p.vertices:
            print(np,end=' ')
   

Поскольку код ничего не делает кроме как просто выводит структуру меша Cube. Как видно наш куб состоит из 8 вершин, 12 ребер и 6 полигонов.
Каждая вершина описана тройкой координат, ребро - парой вершин, а полигон - списков вершин.

Цитировать
Camera
Cube
Lamp

Vetices list: 8
0 <Vector (1.0000, 1.0000, -1.0000)>
1 <Vector (1.0000, -1.0000, -1.0000)>
2 <Vector (-1.0000, -1.0000, -1.0000)>
3 <Vector (-1.0000, 1.0000, -1.0000)>
4 <Vector (1.0000, 1.0000, 1.0000)>
5 <Vector (1.0000, -1.0000, 1.0000)>
6 <Vector (-1.0000, -1.0000, 1.0000)>
7 <Vector (-1.0000, 1.0000, 1.0000)>

Edge sctruct: 12

edge: 0
0 1
edge: 1
0 3
edge: 2
0 4
edge: 3
1 2
edge: 4
1 5
edge: 5
2 3
edge: 6
2 6
edge: 7
3 7
edge: 8
4 5
edge: 9
4 7
edge: 10
5 6
edge: 11
6 7
Face sctruct 0

Polygons sctruct 6

polygons: 0
0 1 2 3
polygons: 1
4 7 6 5
polygons: 2
0 4 5 1
polygons: 3
1 5 6 2
polygons: 4
2 6 7 3
polygons: 5

« Последнее редактирование: 27 Февраля 2012, 18:24:24 от sungreen »
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Blender и национальная безопасность
« Ответ #1 : 19 Августа 2015, 08:49:36 »
... для тех, кому хочется переключать интерфейс с русского на английский по горячей клавише, посвящается ...
... работает по ALT+R когда мышка на меню/панеле, но можно поправить код на своё усмотрение ...

import bpy

bl_info = {
    "name": "toggle language interface",
    "description": "toggle between interface",
    "author": "blender-3d.ru",
    "version": (1, 0),
    "category": "User Interface"
    }
   
class WM_OT_toggle_language(bpy.types.Operator):
    bl_idname = "wm.toggle_language"
    bl_label = "Toggle Language"
   
    @classmethod
    def poll(cls, context):
        return context.active_object
       
    def execute(self, context):
        if bpy.context.user_preferences.system.language!='ru_RU':
            bpy.context.user_preferences.system.language='ru_RU'
        else:               
            bpy.context.user_preferences.system.language='en_US'
       
        bpy.context.user_preferences.system.use_international_fonts=True
        bpy.context.user_preferences.system.use_translate_interface=True
        bpy.context.user_preferences.system.use_translate_tooltips=True
        return {'FINISHED'}
       
def register():
    bpy.utils.register_class(WM_OT_toggle_language)
   
    kc = bpy.context.window_manager.keyconfigs.addon
    if kc:
        km = kc.keymaps.new(name="Window", space_type="EMPTY")
        kmi = km.keymap_items.new('wm.toggle_language', 'R', 'PRESS', alt=True)
       
def unregister():
    bpy.utils.unregister_class(WM_OT_toggle_language)
    kc = bpy.context.window_manager.keyconfigs.addon
    if kc:
        km = kc.keymaps["Window"]
        for kmi in km.keymap_items:
            if kmi.idname == 'wm.toggle_language':
                km.keymap_items.remove(kmi)
                break
               
if __name__ == "__main__":
    register()

Для Кота

bdancer

  • Гость
Re: Blender и национальная безопасность
« Ответ #2 : 19 Августа 2015, 10:08:56 »
А зачем poll на context.active_object?

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Blender и национальная безопасность
« Ответ #3 : 21 Августа 2015, 01:45:38 »
Цитировать
... для тех, кому хочется переключать интерфейс с русского на английский по горячей клавише, посвящается ...
... работает по ALT+R когда мышка на меню/панеле, но можно поправить код на своё усмотрение ...
Спасибо, полезная утилита! Поставил на F9.
¯\_(ツ)_/¯

 

* По форуму

* Последние вложения

Слежение.jpg
Скачано: 9
Автор: Barabashka
vvv.png
Скачано: 67
Автор: Николай Николаев
Слежение.jpg
Скачано: 15
Автор: Barabashka
mehanizm-dlya-podemnoy-krovati-mkb-l633670.jpg
Скачано: 23
Автор: СемёнСемёныч
Безымянный.jpg
Скачано: 22
Автор: СемёнСемёныч