アドオン削除panel 元型
# ========================================================================
# Blender 5.0+ Origin Cylinder (Links & Remove Only)
# リンクパネル と アドオン削除パネル のみを残したバージョン
# ========================================================================
bl_info = {
"name": "Origin Cylinder Generator (Links & Remove Only)",
"author": "zionad",
"version": (4, 2, 0),
"blender": (5, 0, 0),
"location": "View3D > Sidebar > Origin Cylinder",
"description": "リンクパネルとアドオン削除パネルのみ",
"category": "System",
}
import bpy
import webbrowser
# ========================================================================
# Links データ
# ========================================================================
ADDON_LINKS = {
"20261005 円柱作成": "<https://app.notion.com/p/20261005-3ef691cbf906807d9521eeb3fecabcf6>",
"20261003 円錐頂点矢印 と 球体_002": "<https://app.notion.com/p/20261003-3ed691cbf90680a187f7d9c5ea268c2b>",
"338 Sphere Cam": "<https://app.notion.com/p/338-Sphere-Cam-3c0347b3454a80abbb61ff2cd585792c>",
"posfie": "<https://posfie.com/@timekagura/t/zionad2022?sort=0>",
"zionadchat": "<https://x.com/zionadchat>",
"背後霊カメラ 最新版リンク": "<https://app.notion.com/p/Cam-blender-39f347b3454a806490a6f0107c2347dd>",
"blender コンテナ 20260713": "<https://note.com/zionadmillion/n/n9a47d88fe7b4>",
"骨格立方体": "<https://app.notion.com/p/351-2017-3cb347b3454a8086b15fec2f69408bd5>",
}
# ========================================================================
# Operators
# ========================================================================
class ORIGIN_CYLINDER_OT_open_url(bpy.types.Operator):
bl_idname = "origin_cylinder.open_url"
bl_label = "リンクを開く"
url: bpy.props.StringProperty()
def execute(self, context):
if self.url:
webbrowser.open(self.url)
return {'FINISHED'}
class ORIGIN_CYLINDER_OT_remove_addon(bpy.types.Operator):
bl_idname = "wm.tangent_cone_remove_addon"
bl_label = "アドオン削除"
def execute(self, context):
unregister()
return {'FINISHED'}
# ========================================================================
# Panels
# ========================================================================
class VIEW3D_PT_origin_cylinder_links(bpy.types.Panel):
bl_label = "Links"
bl_order = 100
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = 'Origin Cylinder'
def draw(self, context):
layout = self.layout
for name, url in ADDON_LINKS.items():
if name and url:
layout.operator("origin_cylinder.open_url", text=name, icon='URL').url = url
class VIEW3D_PT_origin_cylinder_remove(bpy.types.Panel):
bl_label = "Addon Remove"
bl_order = 101
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = 'Origin Cylinder'
def draw(self, context):
layout = self.layout
layout.operator("wm.tangent_cone_remove_addon", icon='CANCEL')
# ========================================================================
# Register
# ========================================================================
classes = (
ORIGIN_CYLINDER_OT_open_url,
ORIGIN_CYLINDER_OT_remove_addon,
VIEW3D_PT_origin_cylinder_links,
VIEW3D_PT_origin_cylinder_remove,
)
def register():
for cls in classes:
bpy.utils.register_class(cls)
def unregister():
for cls in reversed(classes):
try:
bpy.utils.unregister_class(cls)
except Exception:
pass
if __name__ == "__main__":
try:
unregister()
except Exception:
pass
register()