身内の宣伝コーナー
フルオーダーから既製デザイン柔軟に対応!
袴ロンパースの製作販売してます!レンタルもやってます!
大口注文やレンタルのサブスクなど相談ください!
よかったら見てみてね
ココから本題
今回は少しまたAddon関連のお話をしようと思います。
Addon関連、と言っても既製品ではなく自作の話ですのでAddon紹介とはまた違います。
もちろん自分では考えません(笑)
今回もまたChatGPTなどを使ってみます。
最近流行りですとグーグルさんのBARDもいい感じですよね
BARDさんもだいぶいい感じに熟れてきているので使ってみない手はないと思います。
色々ありまして、原文ママですが下記の通りです。
bl_info = {
"name": "Add Coordinated Lattice",
"blender": (2, 80, 0),
"category": "Object",
}
import bpy
from bpy.types import Operator, Menu
import mathutils
def add_coordinated_lattice(obj):
# Calculate bounding box coordinates
maxx = maxy = maxz = None
minx = miny = minz = None
for v in obj.bound_box:
maxx = max(v[0], maxx) if maxx is not None else v[0]
maxy = max(v[1], maxy) if maxy is not None else v[1]
maxz = max(v[2], maxz) if maxz is not None else v[2]
minx = min(v[0], minx) if minx is not None else v[0]
miny = min(v[1], miny) if miny is not None else v[1]
minz = min(v[2], minz) if minz is not None else v[2]
# Get center of bounding box
cx = (maxx + minx) / 2
cy = (maxy + miny) / 2
cz = (maxz + minz) / 2
# Get bounding box size
sx = (maxx - minx)
sy = (maxy - miny)
sz = (maxz - minz)
# Get lattice location (= bounding box center)
cv = mathutils.Vector((cx, cy, cz))
dv = mathutils.Vector(x * y for x, y in zip(cv, obj.scale))
eul = obj.rotation_euler
dv.rotate(eul)
loc = obj.location + dv
# Remove the layers property from the bpy.ops.object.add call
bpy.ops.object.add(
radius=1,
type='LATTICE',
enter_editmode=False,
location=loc
)
lat = bpy.context.object
# Set lattice rotation and size
lat.rotation_euler = obj.rotation_euler
sv = mathutils.Vector((sx, sy, sz))
lat.scale = mathutils.Vector(x * y for x, y in zip(sv, obj.scale))
# Make parents with lattice deform (obj -> lat)
obj.select_set(True)
bpy.context.view_layer.objects.active = lat
bpy.ops.object.parent_set(type='LATTICE')
if __name__ == '__main__':
if bpy.context.mode == 'OBJECT':
obj = bpy.context.object
if obj.type in {'MESH', 'CURVE'}:
add_coordinated_lattice(obj)
else:
print("This is only for mesh or curve.")
else:
print("Please change the mode to Object mode.")
class OBJECT_OT_add_coordinated_lattice(Operator):
bl_idname = "object.add_coordinated_lattice"
bl_label = "Add Coordinated Lattice"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
obj = bpy.context.active_object
if obj and obj.type in {'MESH', 'CURVE'} and bpy.context.mode == 'OBJECT':
add_coordinated_lattice(obj)
else:
self.report({'INFO'}, "This is only for mesh or curve in object mode.")
return {'FINISHED'}
def menu_func(self, context):
layout = self.layout
layout.operator("object.add_coordinated_lattice", icon='PLUGIN')
def draw_menu(self, context):
layout = self.layout
layout.separator()
layout.operator(OBJECT_OT_add_coordinated_lattice.bl_idname)
def register():
bpy.utils.register_class(OBJECT_OT_add_coordinated_lattice)
bpy.types.VIEW3D_MT_mesh_add.append(draw_menu)
def unregister():
bpy.utils.unregister_class(OBJECT_OT_add_coordinated_lattice)
bpy.types.VIEW3D_MT_mesh_add.remove(draw_menu)
if __name__ == "__main__":
register()
これをスクリプトに貼り付けて実行すると
メッシュを追加の最下部にコマンドが追加されているはずです
Addonの追加からしたかったのですがなんかエラーが出たので一旦諦めてます
Pythonの知識ゼロ
これもまたChat GPT とかChat AIを駆使して作成したものです
自分もPythonの知見はあって書いたりはしているのですが今回は完全にノータッチで行っています
すごいぞChat GPT
多少のやる気があれば十分にプログラムが書ける時代になりつつあるのを肌で感じています
すごい時代です
ココまで
私自身の活動案内
(ココナラで出品中)
この記事の関連商品