Нет, мне не нужно модифицировать сам Blender, мне нужно добавить несколько функций, и всё. Насколько я понимаю -это можно на pythone.Сомневаюсь я, однако, что недобулеан поедет на питоне...
Вот с чего надо начинать, думаю https://ru.wikibooks.org/wiki/Blender_%D0%B4%D0%BB%D1%8F_%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B8%D1%85/PythonЧтобы вытащить меш достаточно изучить аддон экспорта меша в OBJ формат.
# AngleArray - создает массив объектов по окружности.
# RotationAngle - угол поворота последющего элемента относительно предыдущего
# MaxRotation - длина дуги поворота в грудусах
# Size - радиус окружности, на которой лежит дуга
# Type - тип элементов (мешей)
def AngleArray(RotationAngle, MaxRotation, Size,type):
import bpy
vs=[v.co for v in bpy.data.meshes['Cube'].vertices]
print(vs)
... вот массив (список) всех вершин меша Cube (кубика по умолчанию) ...спасибо.Код: pythonimport bpy
vs=[v.co for v in bpy.data.meshes['Cube'].vertices]
print(vs)
С поверхностями начнутся проблемы. Полигоны есть. bpy.data.meshes['Cube'].polygons. У полигонов есть индексы вершин, согласно которых можно определить координаты вершин полигона, но использовать это, практически, можно в нескольких процентах из 100. В остальных случаях нужно то высчитывать tessfaces, то обращаться к модулю bmesh, то и то, и другое одновременно.... вот массив (список) всех вершин меша Cube (кубика по умолчанию) ...спасибо.Код: pythonimport bpy
vs=[v.co for v in bpy.data.meshes['Cube'].vertices]
print(vs)
я так понимаю он запишется в список? как таковой массив не объявляется в phython?ну и так хорошо, а как поверхности?
vs=[v.co for v in bpy.data.meshes['Cube'].surface]?
алгоритмы я конечно тут и буду выкладывать, разработать хороший способ и алгоритм - далеко не плёвое дело, и потребуются подсказки по возможностям среды. список вершин конечно надо, но надо и поверхности и к ним вершины. потом я узнаю что может python, это на киберфоруме, а разрабатывать буду тут.
Ну если есть индексы вершин, то где-то по этим индексам можно узнать их координаты?Ни где-то, а из созданного ранее списка вершин vs.
faces_with_coords = []
for p in bpy.data.meshes['Cube'].polygons:
face_with_coords = []
for v in p.vertices:
face_with_coords.append(vs[v][:])
faces_with_coords.append(face_with_coords)
import bpy
class Instrument(bpy.types.Panel):
"""Creates a Panel in the Object properties window"""
bl_label = "Hello World Panel"
bl_idname = "OBJECT_PT_hello"
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "object"
def draw(self, context):
layout = self.layout
obj = context.object
row = layout.row()
row.label(text="Hello world!", icon='WORLD_DATA')
row = layout.row()
row.label(text="Active object is: " + obj.name)
row = layout.row()
row.prop(obj, "name")
row = layout.row()
row.operator("mesh.primitive_cube_add")
def register():
bpy.utils.register_class(Instrument)
def unregister():
bpy.utils.unregister_class(Instrument)
if __name__ == "__main__":
register()
class Instrument(bpy.types.Panel):
"""Creates a Panel in the Object properties window"""
bl_label = "Hello World Panel"
bl_space_type = 'VIEW 3D'
bl_region_type = 'TOOLS'
Python script fail, look in the console for now...
PYTHON INTERACTIVE CONSOLE 3.5.1 (default, Feb 17 2016, 17:09:19) [MSC v.1800 64 bit (AMD64)]
Command History: Up/Down Arrow
Cursor: Left/Right Home/End
Remove: Backspace/Delete
Execute: Enter
Autocomplete: Ctrl-Space
Zoom: Ctrl +/-, Ctrl-Wheel
Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bpy.utils, bgl, blf, mathutils
Convenience Imports: from mathutils import *; from math import *
Convenience Variables: C = bpy.context, D = bpy.data
>>>
VIEW_3D пропущена чёрточка :)
bl_space_type = 'VIEW 3D'
Нашёл, это самая нижняя вкладка , написано "Mis...", сокращённо видимо. Ну вот теперь буду пробовать по существу. Ведь можно сделать 3 кнопки, выделить ряд граней, нажать на одну - залить в массив данные, выделить второй ряд - нажать 2-ую кнопку и зальются ещё данные в массив, третий ряд - третью кнопку (это для того, чтобы при ошибке можно было переназначить один ряд не влияя на два других - без отката действий), потом произвести необходимые действия. Это первый мой аддон будет, он будет не совсем простым, но существенного делать он не будет ничего, из такого чтобы можно было сказать что это супер, всё существенное начнётся со второго аддона. Разумеется мне они не особо нужны, но без них никак, без них только учебники учить, а по мне - проще написать код.А, разве это нельзя сделать, создавая группы вершин кнопками, уже созданными разработчиками Блендера?
Ну а ремеш там с какими-то параметрами делается или просто так?Да с параметрами. Создаёт сетку из четырёхугольников на базе выбранной поверхности. Желательно включить Wire и Draw All Edges у объекта перед операцией, что бы видеть сетку, или делать это в режиме редактирования объекта.
Ещё несколько вопросов :Ну если есть индексы вершин, то где-то по этим индексам можно узнать их координаты?Ни где-то, а из созданного ранее списка вершин vs.Кодfaces_with_coords = []
for p in bpy.data.meshes['Cube'].polygons:
face_with_coords = []
for v in p.vertices:
face_with_coords.append(vs[v][:])
faces_with_coords.append(face_with_coords)
:)
3) Всё-таки хочется узнать каких структур списки можно поднять по выделенным объектам - как выглядит самый информативный по выделенным вершинам или граням, есть -ли там какие-то доп поля по связям вершин или чему-то ещё? Третий вопрос не обязателен, он тянет на ответ эксперта, но всё-таки хотелось-бы увидеть не то что можно делать (это слишком длинный список и требует подробного изучения), а что там есть самое информативное? Заранее благодарен за ответы.Как эксперт эксперту:
Извините, я конечно не эксперт - это всё по одному мешу?3) Всё-таки хочется узнать каких структур списки можно поднять по выделенным объектам - как выглядит самый информативный по выделенным вершинам или граням, есть -ли там какие-то доп поля по связям вершин или чему-то ещё? Третий вопрос не обязателен, он тянет на ответ эксперта, но всё-таки хотелось-бы увидеть не то что можно делать (это слишком длинный список и требует подробного изучения), а что там есть самое информативное? Заранее благодарен за ответы.Как эксперт эксперту:
>> 1)Есть ряд выделенных граней, можно по выделенным граням поднять информацию о вершинах?спасибо, можно подробнее об этой записи
https://www.blender.org/api/blender_python_api_current/bpy.types.MeshEdge.html#bpy.types.MeshEdge.vertices
vertices?
Vertex indices
Type: int array of 2 items in [0, inf], default (0, 0)
Извините, я конечно не эксперт - это всё по одному мешу?Да. Аддон в комплекте с блендером. Подключается в пользовательских настройках во вкладке разработка(development) . Далее в панели инструментов текстового редактора находим, тыкаем мышкой, получаем всю доступную информацию...
а как называется аддон?Извините, я конечно не эксперт - это всё по одному мешу?Да. Аддон в комплекте с блендером. Подключается в пользовательских настройках во вкладке разработка(development) . Далее в панели инструментов текстового редактора находим, тыкаем мышкой, получаем всю доступную информацию...
а как называется аддон?API navigator
>> спасибо, можно подробнее об этой записиСпасибо, но разве грань полигон? Я имел ввиду случай, когда выделены связанные грани одного меша, но разных полигонов (поверхностей, может я термины не правильно использую).
... уточню по граням - они же полигоны https://www.blender.org/api/blender_python_api_current/bpy.types.MeshPolygon.html#bpy.types.MeshPolygon.vertices
... то есть массив выделенных полигонов, а каждый полигон из этого массива имеет список вершин ...