身内の宣伝コーナー

 

フルオーダーから既製デザイン柔軟に対応!

袴ロンパースの製作販売してます!レンタルもやってます!

大口注文やレンタルのサブスクなど相談ください!

  

  

袴ロンパースのFor 結
まだプレゼント企画中です

よかったら見てみてね

 

 

 

ココから本題 

今回は少しまた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  

多少のやる気があれば十分にプログラムが書ける時代になりつつあるのを肌で感じています

すごい時代です

 

 

 

ココまで 

 

 

 

 

 

私自身の活動案内

 

    

(ココナラで出品中)

        

 

  

 

この記事の関連商品