Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как написать мизерный адднон для blender 3D?

ZOG Мастер (1750), закрыт 2 года назад
Мне нужен аддон, который бы выравнивал координаты двух выбранных точек. Алгоритм для примера такой: есть две точки А (х= - 2; у= 3; z= 4) и Б (х= 1; у= 5; z= 6). Я их выделяю, жму кнопку, а алгоритм делает следующее: По Z и Y просто выравниваем значения: (Za + Zб) / 2, (Ya + Yб) / 2 потом присваиваем полученное значение координатам. А вот по Х нужно будет соблюсти знаки: если Ха была отрицательной, а Хб положительной, то и после вычисления среднего значения они должны сохранить свои знаки, т. е. складываем модули двух координат, результат делим на 2, а после присвоения подставляем к Ха знак минуса. Ни разу не писал аддоны под blender, может кто подскажет, вроде не сложное действие. Самое главное впихнуть кнопку типа "выровнять" куда-нибудь в меню
Дополнен 6 лет назад
для чего мне это нужно: время от времени занимаюсь созданием киберлиц для одного симулятора, беру за основу стандартное лицо какого-нибудь игрока и "леплю" из него другое. Для этого модель должна быть симметричной, но зачастую есть небольшой разбег некоторых точек, которые приходится вручную выравнивать, что весьма запаривает, так вот хотелось бы как-то автоматизировать этот поцесс
Лучший ответ
Сергей Шиманский Мудрец (11470) 6 лет назад
насколько знаю для блендера можно писать скрипты на питоне
ZOGМастер (1750) 6 лет назад
Ок, я в курсе
Остальные ответы
657567654 Гуру (4679) 6 лет назад
s x 0 -- сплюснуть группу вертексов по оси Х.
s y 0 -- сплюснуть группу вертексов по оси Y.
s z 0 -- сплюснуть группу вертексов по оси Z.
ZOGМастер (1750) 6 лет назад
Я знаю, спасибо. Но это долго и муторно. Хотелось бы оформить это в виде кнопки на панели инструментов - нажал и выделенные точки сами выровнялись. "s x 0 -- сплюснуть группу вертексов по оси Х" - это не подходит как раз таки, ведь модель станет плоской по Х. Мне нужно чтобы по Х точки получали одинаковые координаты, но с разными знаками
657567654 Гуру (4679) переключить систему координат с локальной/глобальной на видовую, и X/Z будут в плоскости экрана находиться.
sungreen Мыслитель (9143) 6 лет назад
Ниже привожу текст требуемого дополнения, необходимо создать в текстовом редакторе Blender связанный текстовй блок и скопировать туда этот скрипт. Запустить его ALT+P. После этого в панели инструментов Tools окна 3D View появиться секция Avarage vertex и кнопка Avarage, которая будет выравнивать вершины по описанному выше алгоритму.

import math
import bpy
import mathutils

class MakerPanel(bpy.types.Panel) :
bl_space_type = "VIEW_3D"
bl_region_type = "TOOLS"
bl_category = "Tools"
bl_label = "Avarage vertex"

def draw(self, context) :
TC = self.layout.column(align = True)
TC.operator("mesh.make", text = "Avarage")

class Make(bpy.types.Operator) :
bl_idname = "mesh.make"
bl_label = "Avarage"
bl_options = {"UNDO"}

def invoke(self, context, event) :
bpy.ops.object.mode_set(mode='OBJECT')
ob = bpy.context.object
me = ob.data
verts = [v for v in ob.data.vertices if v.select]
if(len(verts)==2):
x = (math.fabs(verts[0].co[0])+math.fabs(verts[1].co[0]))/2
y = (verts[0].co[1]+verts[1].co[1])/2
z = (verts[0].co[2]+verts[1].co[2])/2
verts[0].co[1] = y
verts[1].co[1] = y
verts[0].co[2] = z
verts[1].co[2] = z
verts[0].co[0] = x if verts[0].co[0]>0 else -x
verts[1].co[0] = x if verts[1].co[0]>0 else -x
bpy.ops.object.mode_set(mode='EDIT')
return {'FINISHED'}
#end invoke

def register() :
bpy.utils.register_class(Make)
bpy.utils.register_class(MakerPanel)

def unregister() :
bpy.utils.unregister_class(Make)
bpy.utils.unregister_class(MakerPanel)

if __name__ == "__main__" :
register()
ZOGМастер (1750) 5 лет назад
Спасибо за ответ! Но скрипт выдаёт ошибку:
ZOGМастер (1750) 5 лет назад
Поправил отступы и пробелы, но всё равно ошибка
sungreen Мыслитель (9143) Прошу прощения за отступы. Здесь такой движок, который не сохранил их при публикации. К сожалению картинки с сообщениями об ошибке трудно читаемы, мне не удалось разобрать что там написано.
Похожие вопросы