Автор Тема: Совсем не страшный питон.  (Прочитано 2590 раз)

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

Оффлайн LanuHum

  • Житель
Re: Совсем не страшный питон.
« Ответ #15 : 29 Августа 2015, 00:55:57 »
Выполнить какой-нибудь скрипт в блендере не требующий визуального интерфейса можно так:
blender   --background   -noaudio   --python   myscript.py

Например, можно добавть в Geany такую команду сборки, как на картинке.  Оператор print, вызываемый из скрипта, будет печатать в консоль все, что захочется.
Вот, и первые твои открытия! А, вот, чтоб без конца не менять эти команды сборки, можно и на пикуте гуёвину сделать. Типа, выбираешь блендфайл, выбираешь скрипт, и пускай оно там в бэкграунде исполняется :)

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Совсем не страшный питон.
« Ответ #16 : 29 Августа 2015, 02:15:08 »
Раз такая "пьянка" пошла, то не подскажете где взять подобный  XML файл для Notepad++? Ссылка уже не работает :(
¯\_(ツ)_/¯

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Совсем не страшный питон.
« Ответ #17 : 29 Августа 2015, 02:46:50 »
 Еще один вопрос: что значат self и context ?
¯\_(ツ)_/¯

Оффлайн LanuHum

  • Житель
Re: Совсем не страшный питон.
« Ответ #18 : 29 Августа 2015, 09:55:43 »
Еще один вопрос: что значат self и context ?

Цитировать
Первым аргументом каждого метода класса, включая __init__, всегда является текущий экземпляр класса. Общепринято всегда называть этот аргумент self. В методе __init__ self ссылается на только что созданный объект, в других методах — на экземпляр класса, для которого метод вызывается. Хотя и необходимо явно указывать self при определении метода, вы его не указываете, когда вызываете метод; Python добавит его автоматически.

http://ru.diveintopython.net/fileinfo_class.html

Context - активный объект интерфейса: активная сцена, активная вкладка, активный 3Д-объект, активный материал, активная текстура.
Например, если в скрипте написано
tex = bpy.context.object.active_material
Это значит, что переменной tex присвоен материал, который выделен, и, принадлежит этот материал активному объекту сцены.
Если создаём класс, то:
class Test(operator):
    nt = IntProperty()
    def execute(self,context):
        n = self.nt     # переменной n присваиваем значение переменной nt, объявленной в этом классе
        k = len(context.object.data.vertices)    # переменной k присваиваем значение взятое у активного объекта
        print (k/n)
        return {FINISHED}
« Последнее редактирование: 29 Августа 2015, 10:37:02 от LanuHum »

Оффлайн LanuHum

  • Житель
Re: Совсем не страшный питон.
« Ответ #19 : 29 Августа 2015, 12:54:02 »
В Geany удобно размер шрифта изменять в редакторе: Ctrl - Scroll. Нужно, например, скриншот сделать, чтоб текст скрипта на PyQT5 в кадр влез, бац, и готово! :)
« Последнее редактирование: 29 Августа 2015, 12:56:31 от LanuHum »

bdancer

  • Гость
Re: Совсем не страшный питон.
« Ответ #20 : 29 Августа 2015, 13:56:54 »
LanuHum,
    scn.layers[0]=scn.lay_anim_0
    scn.layers[1]=scn.lay_anim_1
    scn.layers[2]=scn.lay_anim_2
    scn.layers[3]=scn.lay_anim_3
    scn.layers[4]=scn.lay_anim_4
    scn.layers[5]=scn.lay_anim_5
    scn.layers[6]=scn.lay_anim_6
    scn.layers[7]=scn.lay_anim_7
    scn.layers[8]=scn.lay_anim_8
    scn.layers[9]=scn.lay_anim_9
    scn.layers[10]=scn.lay_anim_10
    scn.layers[11]=scn.lay_anim_11
    scn.layers[12]=scn.lay_anim_12
    scn.layers[13]=scn.lay_anim_13
    scn.layers[14]=scn.lay_anim_14
    scn.layers[15]=scn.lay_anim_15
    scn.layers[16]=scn.lay_anim_16
    scn.layers[17]=scn.lay_anim_17
    scn.layers[18]=scn.lay_anim_18
    scn.layers[19]=scn.lay_anim_19

можно немного упростить:
for i in range(20):
    scn.layers[i] = getattr(scn, 'lay_anim_%i' % i)

Оффлайн mr.A

  • Житель
Re: Совсем не страшный питон.
« Ответ #21 : 29 Августа 2015, 13:58:01 »
Раз такая "пьянка" пошла, то не подскажете где взять подобный  XML файл для Notepad++? Ссылка уже не работает :(

Сгенерировать самому. Вот, например, такой скрипт http://sourceforge.net/projects/npp-python/files/1.2/ для второго питона. Переделать его в третий(2to3), правда нужно импорт править, у меня мало знаний. Сконфигурировать, по инструкции, файл my_imports.py  добавив ссылки на модули блендера. И, наверно, запустить так: 
blender   --background   -noaudio   --python    generate_python_autocomplete.py  < my_imports.py >  python.xml
В итоге получиться нужный xml. Но это все теория.

Оффлайн LanuHum

  • Житель
Re: Совсем не страшный питон.
« Ответ #22 : 29 Августа 2015, 14:27:45 »
LanuHum, можно немного упростить:
for i in range(20):
    scn.layers[i] = getattr(scn, 'lay_anim_%i' % i)
Спасибо, bdancer! Действительно, совсем не так  уж давно я открыл для себя getattr, hasattr. Удобные фишки.
bdancer, а ты можешь посоветовать новичкам среду для написания Блендер скриптов? Ты используешь NotePad++ с его автодополнением?

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Совсем не страшный питон.
« Ответ #23 : 29 Августа 2015, 16:22:39 »
Пытаюсь врубиться в суть Классов, LahuHum. Спасибо за ответ.
mr.A, спасибо! Попробую.
PS. Мне тоже интересно чем bdancer пользуется.
¯\_(ツ)_/¯

bdancer

  • Гость
Re: Совсем не страшный питон.
« Ответ #24 : 29 Августа 2015, 22:02:47 »
Я использую Sublime Text 3 без автодополнений, Atom тоже неплох, да, мне особо фичей и не надо.
Если нужно автодополнение - можно попробовать это http://wiki.blender.org/index.php/User:Ideasman42/BlenderAsPyModule или https://github.com/svenfraeys/SublimeBlender.
« Последнее редактирование: 29 Августа 2015, 23:06:02 от bdancer »

Оффлайн LanuHum

  • Житель
Re: Совсем не страшный питон.
« Ответ #25 : 29 Августа 2015, 23:07:22 »
Blender as pymodule  у меня собрать не получилось, ошибок куча.

Оффлайн mr.A

  • Житель
Re: Совсем не страшный питон.
« Ответ #26 : 30 Августа 2015, 13:53:13 »
Я собрал и установил Blender as pymodule. Но почему не работает?
$ python -c "import bpy ; bpy.ops.render.render(write_still=True)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.4/site-packages/2.75/scripts/modules/bpy/__init__.py", line 38, in <module>
    from _bpy import types, props, app, data, context
ImportError: No module named '_bpy'
Файл bpy.so и каталог 2.75 со всем добром лежат в /usr/lib/python3.4/site-packages. Что еще где добавить/поправить/прописать?
Для чего это нужно? Пошаговая отладка скрипта(в eric или idea) очень помагает понять как он работает или что там написл не так. С обычными скриптами проблем нет, а если есть import bpy и т.п. то никак не отладишь такой скрипт.
Blender as pymodule решил бы эту задачу.

Оффлайн LanuHum

  • Житель
Re: Совсем не страшный питон.
« Ответ #27 : 30 Августа 2015, 14:22:35 »
Попробуй переименовать bpy.so в _bpy.so

Оффлайн mr.A

  • Житель
Re: Совсем не страшный питон.
« Ответ #28 : 30 Августа 2015, 17:11:29 »
Переименовал, теперь другая ошибка:
$ python -c "import bpy ; bpy.ops.render.render(write_still=True)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.4/site-packages/2.75/scripts/modules/bpy/__init__.py", line 38, in <module>
    from _bpy import types, props, app, data, context
ImportError: dynamic module does not define init function (PyInit__bpy)
Погуглил, ничего понятного. Может собрал нет так. Да и этот метод вообще официально не поддерживатеся
Цитировать
The option to build Blender as a Python module is not officially supported, in the sense Blender.org isn't distributing it along with regular releases, Currently, its a build option you can enable, for your own use.
« Последнее редактирование: 30 Августа 2015, 17:15:28 от mr.A »

Оффлайн LanuHum

  • Житель
Re: Совсем не страшный питон.
« Ответ #29 : 30 Августа 2015, 17:37:52 »
Переименовал, теперь другая ошибка:
$ python -c "import bpy ; bpy.ops.render.render(write_still=True)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.4/site-packages/2.75/scripts/modules/bpy/__init__.py", line 38, in <module>
    from _bpy import types, props, app, data, context
ImportError: dynamic module does not define init function (PyInit__bpy)

Открой Geany, создай чистый файл с расширением py, напиши в нём import bpy, запусти и почитай консоль.
По-моему, ты ерунду пишешь python -c "import bpy ; bpy.ops.render.render(write_still=True)"

До рендера нужно ещё строчек сколько-то кода.
import bpy
scene =bpy.data.scenes.new()
add camera
add lamp
add mesh
Не могу я соображать, что там писать, если у меня нету этого.
Скинь куда-то собранный модуль, чтоб его скачать, если 64-битное и линуксовое. :)

 

* По форуму

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

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