مقدمه
Blender، نرمافزار قدرتمند و رایگان مدلسازی سهبعدی، به دلیل انعطافپذیری و قابلیت توسعهپذیری بالای خود شناخته شده است. یکی از مهمترین ویژگیهایی که به این نرمافزار اجازه میدهد تا نیازهای طیف وسیعی از کاربران را برآورده کند، قابلیت افزودن افزونهها (Add–ons) است. افزونهها ابزارهای جانبی هستند که عملکرد Blender را گسترش میدهند، قابلیتهای جدیدی اضافه میکنند یا گردش کار موجود را بهبود میبخشند. این مقاله به شما یک دید کلی از نحوه طراحی افزونهها در Blender و یک مثال ساده برای شروع میدهد.
چرا افزونه بنویسیم؟
ممکن است بپرسید چرا باید برای Blender افزونه بنویسیم؟ دلایل متعددی وجود دارد:
- اتوماسیون وظایف تکراری: بسیاری از کاربران
Blenderکارهایی را بارها و بارها انجام میدهند که میتوانند با یک اسکریپت یا افزونه خودکار شوند. - افزودن قابلیتهای سفارشی: اگر نیازمندی خاصی دارید که در
Blenderبه صورت پیشفرض وجود ندارد، میتوانید آن را از طریق یک افزونه پیادهسازی کنید. - بهبود گردش کار: افزونهها میتوانند ابزارها و پنلها را به گونهای سازماندهی کنند که سرعت و کارایی شما را افزایش دهند.
- اشتراکگذاری ابزارها: میتوانید ابزارهایی را که برای خودتان ساختهاید با جامعه
Blenderبه اشتراک بگذارید.
Blender از زبان برنامهنویسی پایتون (Python) برای توسعه افزونهها استفاده میکند. این انتخاب به دلیل سادگی پایتون و جامعه بزرگ آن، فرآیند توسعه را برای بسیاری از افراد آسان میکند.
ساختار یک افزونه ساده
یک افزونه Blender معمولاً شامل یک یا چند فایل پایتون است که ساختار خاصی را دنبال میکنند. در سادهترین حالت، یک افزونه میتواند تنها یک فایل .py باشد.
اجزای اصلی یک افزونه عبارتند از:
- اطلاعات ثبت نام افزونه: شامل نام، نسخه، نویسنده، و توضیحات افزونه است.
Blenderاز این اطلاعات برای نمایش افزونه در لیست افزونهها استفاده میکند. - کلاسها و توابع: منطق اصلی افزونه در اینجا قرار میگیرد. این میتواند شامل اپراتورها (
Operators)، پنلها (Panels)، منوها (Menus) و غیره باشد. - توابع ثبت و حذف: توابع
register()وunregister()برای بارگذاری و حذف افزونه ازBlenderاستفاده میشوند.
مثال ابتدایی: افزودن یک مکعب در موقعیت دلخواه
بیایید یک افزونه بسیار ساده بسازیم که تنها یک کار انجام میدهد: افزودن یک مکعب به صحنه در مختصات $(1, 2, 3)$ با فشردن یک دکمه.
گام به گام:
- ایجاد فایل افزونه:
- یک فایل متنی جدید باز کنید.
- آن را با نام
add_custom_cube.pyذخیره کنید. (این نام میتواند هر چیزی باشد، اما برای وضوح بهتر است مرتبط با کارکرد افزونه باشد).
- نوشتن کد پایتون:
- کدهای زیر را در فایل
add_custom_cube.pyکپی کنید:
- کدهای زیر را در فایل
import bpy
# اطلاعات افزونه
bl_info = {
"name": "افزودن مکعب سفارشی",
""author": "نام شما",
"version": (1, 0),
"blender": (3, 0, 0),
"location": "3D View > Sidebar > My Custom Tools",
"description": "یک مکعب در موقعیت (1, 2, 3) اضافه می کند.",
"category": "Add Mesh",
}
# کلاس اپراتور (Operator)
class ADD_MESH_OT_CustomCube(bpy.types.Operator):
bl_idname = "mesh.add_custom_cube"
bl_label = "افزودن مکعب سفارشی"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
bpy.ops.mesh.primitive_cube_add(location=(1, 2, 3))
return {'FINISHED'}
# کلاس پنل (Panel)
class VIEW3D_PT_CustomCubePanel(bpy.types.Panel):
bl_label = "ابزارهای سفارشی من"
bl_idname = "VIEW3D_PT_CustomCubePanel"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "My Custom Tools"
def draw(self, context):
layout = self.layout
row = layout.row()
row.operator(ADD_MESH_OT_CustomCube.bl_idname)
# توابع ثبت و حذف افزونه
def register():
bpy.utils.register_class(ADD_MESH_OT_CustomCube)
bpy.utils.register_class(VIEW3D_PT_CustomCubePanel)
def unregister():
bpy.utils.unregister_class(ADD_MESH_OT_CustomCube)
bpy.utils.unregister_class(VIEW3D_PT_CustomCubePanel)
if __name__ == "__main__":
register()
- شرح کد:
import bpy: این خط ماژول اصلیBlender(bpy) را وارد میکند که امکان تعامل باBlenderرا فراهم میآورد.bl_info: یک دیکشنری حاوی متادیتای افزونه.blenderحداقل نسخهBlenderمورد نیاز را مشخص میکند.locationنشان میدهد دکمه افزونه کجا ظاهر میشود.class ADD_MESH_OT_CustomCube(bpy.types.Operator):: این یک اپراتور است. اپراتورها عملیاتی را درBlenderانجام میدهند.bl_idname = "mesh.add_custom_cube": یک شناسه منحصر به فرد برای این اپراتور.bl_label = "افزودن مکعب سفارشی": متنی که روی دکمه نمایش داده میشود.bl_options = {'REGISTER', 'UNDO'}: این گزینهها اجازه میدهند عملیات در تاریخچهUndo/Redoثبت شود.def execute(self, context):: تابعی که وقتی اپراتور فراخوانی میشود، اجرا میشود.bpy.ops.mesh.primitive_cube_add(location=(1, 2, 3)): این خط دستور اضافه کردن یک مکعب را درBlenderفراخوانی میکند و موقعیت آن را روی $(1, 2, 3)$ تنظیم میکند.return {'FINISHED'}: نشان میدهد که عملیات با موفقیت به پایان رسیده است.
class VIEW3D_PT_CustomCubePanel(bpy.types.Panel):: این یک پنل است. پنلها فضایی در رابط کاربریBlenderهستند که میتوان دکمهها و تنظیمات را در آنها قرار داد.bl_label,bl_idname,bl_space_type,bl_region_type,bl_category: اینها مشخص میکنند پنل کجا و چگونه در رابط کاربری ظاهر شود.def draw(self, context):: تابعی که محتویات پنل را ترسیم میکند.layout = self.layout: دسترسی به چیدمان پنل.row = layout.row(): یک ردیف جدید در پنل ایجاد میکند.row.operator(ADD_MESH_OT_CustomCube.bl_idname): دکمهای ایجاد میکند که اپراتورADD_MESH_OT_CustomCubeرا فراخوانی میکند.
def register():وdef unregister():: این توابع توسطBlenderفراخوانی میشوند تا کلاسهای اپراتور و پنل را ثبت یا حذف کنند. این برای بارگذاری و حذف صحیح افزونه ضروری است.if __name__ == "__main__": register(): این خط تضمین میکند که اگر فایل به صورت مستقیم اجرا شود، افزونه ثبت میشود.
- نصب افزونه در
Blender:Blenderرا باز کنید.- به
Edit > Preferencesبروید. - در پنجره
Preferences،تبAdd-onsرا انتخاب کنید. - روی دکمه
Install...کلیک کنید. - فایل
add_custom_cube.pyرا که ذخیره کردهاید، پیدا کرده و انتخاب کنید. - روی
Install Add-onکلیک کنید. - در لیست افزونهها، افزونه با نام “افزودن مکعب سفارشی” (یا نامی که در
bl_infoدادهاید) را جستجو کنید. - تیک کنار نام افزونه را بزنید تا فعال شود.
- استفاده از افزونه:
- به پنجره
3D Viewportبرگردید. - با فشردن کلید
Nیا کشیدن دستگیره کوچک سمت راستViewport،Sidebarرا باز کنید. - یک تب جدید با عنوان “
MyCustomTools” (ابزارهای سفارشی من) را مشاهده خواهید کرد. - روی این تب کلیک کنید.
- دکمهای با عنوان “افزودن مکعب سفارشی” را خواهید دید.
- روی این دکمه کلیک کنید. یک مکعب جدید در مختصات $(1, 2, 3)$ به صحنه شما اضافه خواهد شد.
- به پنجره
نکات تکمیلی
- اشکالزدایی (
Debugging): هنگام نوشتن افزونه، ممکن است با خطاها مواجه شوید. برای اشکالزدایی، میتوانید از پنجرهConsoleدرBlender(Window>ToggleSystemConsole) استفاده کنید تا خروجیها و پیامهای خطا را مشاهده کنید. همچنین میتوانید از دستورprint()برای نمایش مقادیر در کنسول استفاده کنید. - مستندات
BlenderAPI: برای توسعه پیشرفتهتر، آشنایی باAPI(ApplicationProgrammingInterface) بلندر ضروری است. مستندات رسمیBlenderAPI(به صورت آنلاین قابل دسترسی است) منبع کاملی برای یافتن تمام توابع و کلاسهای موجود است. - سازماندهی کد: برای افزونههای بزرگتر، بهتر است کد خود را به چندین فایل تقسیم کنید و از پکیجهای پایتون استفاده کنید تا مدیریت کد آسانتر شود.
طراحی افزونه برای Blender دریچهای به سوی سفارشیسازی بینهایت و خودکارسازی فرآیندها در این نرمافزار قدرتمند است. با یادگیری اصول پایتون و API Blender، میتوانید ابزارهایی بسازید که نه تنها به شما کمک میکنند، بلکه تجربه کاری دیگر کاربران Blender را نیز بهبود میبخشند. این مثال ساده فقط آغاز راه است و پتانسیل ساخت افزونهها در Blender بسیار گسترده است.
