Files
blender-addons/io_mesh_atomic/__init__.py
Damien Picard caed9c9da5 Atomic Blender: Get nodes with their types instead of names
Using hardcoded names to retrieve nodes can result in errors if the
user has enabled UI translation, because the new nodes may not have
the expected English names.

Instead, we retrieve the nodes using their types (BSDF_PRINCIPLED or
OUTPUT_MATERIAL).

Ref blender/blender#104145

Co-authored-by: Damien Picard <dam.pic@free.fr>
Pull Request #104403
2023-02-09 23:02:28 +01:00

204 lines
6.6 KiB
Python

# SPDX-License-Identifier: GPL-2.0-or-later
#
#
# Author : Clemens Barth (Blendphys@root-1.de)
# Homepage(Wiki) : http://development.root-1.de/Atomic_Blender.php
#
# Start of project : 2011-08-31 by CB
# First publication in Blender : 2011-11-11 by CB
# Fusion of the PDB, XYZ and Panel : 2019-03-22 by CB
# Last modified : 2019-05-17
#
# Contributing authors
# ====================
#
# So far ... none ... .
#
#
# Acknowledgements
# ================
#
# A big thank you to all those people who I met in particular in the IRC and
# who helped me a lot.
#
# Blender developers
# ------------------
# Campbell Barton (ideasman)
# Brendon Murphy (meta_androcto)
# Truman Melton (?) (truman)
# Kilon Alios (kilon)
# ?? (CoDEmanX)
# Dima Glib (dairin0d)
# Peter K.H. Gragert (PKHG)
# Valter Battioli (?) (valter)
# ? (atmind)
# Ray Molenkamp (bzztploink)
#
# Other
# -----
# Frank Palmino (Femto-St institute, Belfort-Montbéliard, France)
# ... for testing the addons and for feedback
bl_info = {
"name": "Atomic Blender PDB/XYZ",
"description": "Importing atoms listed in PDB or XYZ files as balls into Blender",
"author": "Clemens Barth",
"version": (1, 8, 1),
"blender": (2, 80, 0),
"location": "File -> Import -> PDB (.pdb) and File -> Import -> XYZ (.xyz)",
"warning": "",
"doc_url": "{BLENDER_MANUAL_URL}/addons/import_export/mesh_atomic.html",
"category": "Import-Export",
}
import bpy
from bpy.types import Operator, AddonPreferences
from bpy_extras.io_utils import ImportHelper, ExportHelper
from bpy.props import (
StringProperty,
BoolProperty,
EnumProperty,
IntProperty,
FloatProperty,
)
from . import (
pdb_gui,
xyz_gui,
utility_gui,
utility_panel
)
# -----------------------------------------------------------------------------
# Preferences
class AddonPreferences(AddonPreferences):
# This must match the addon name, use '__package__'
# when defining this in a submodule of a python package.
bl_idname = __name__
bool_pdb : BoolProperty(
name="PDB import/export",
default=True,
description="Import/export PDB",
)
bool_xyz : BoolProperty(
name="XYZ import/export",
default=True,
description="Import/export XYZ",
)
# This boolean is checked in the poll function in PANEL_PT_prepare
# (see utility.py).
bool_utility : BoolProperty(
name="Utility panel",
default=False,
description=("Panel with functionalities for modifying " \
"atomic structures"),
)
def draw(self, context):
layout = self.layout
layout.label(text="Choose the importer(s) and a 'utility' panel")
layout.prop(self, "bool_pdb")
layout.prop(self, "bool_xyz")
layout.prop(self, "bool_utility")
# -----------------------------------------------------------------------------
# Menu
# The entry into the menu 'file -> import'
def menu_func_import_pdb(self, context):
lay = self.layout
lay.operator(pdb_gui.IMPORT_OT_pdb.bl_idname,text="Protein Data Bank (.pdb)")
def menu_func_import_xyz(self, context):
lay = self.layout
lay.operator(xyz_gui.IMPORT_OT_xyz.bl_idname,text="XYZ (.xyz)")
# The entry into the menu 'file -> export'
def menu_func_export_pdb(self, context):
lay = self.layout
lay.operator(pdb_gui.EXPORT_OT_pdb.bl_idname,text="Protein Data Bank (.pdb)")
def menu_func_export_xyz(self, context):
lay = self.layout
lay.operator(xyz_gui.EXPORT_OT_xyz.bl_idname,text="XYZ (.xyz)")
# -----------------------------------------------------------------------------
# Register
def register():
from bpy.utils import register_class
register_class(AddonPreferences)
register_class(pdb_gui.IMPORT_OT_pdb)
register_class(pdb_gui.EXPORT_OT_pdb)
bpy.types.TOPBAR_MT_file_import.append(menu_func_import_pdb)
bpy.types.TOPBAR_MT_file_export.append(menu_func_export_pdb)
register_class(xyz_gui.IMPORT_OT_xyz)
register_class(xyz_gui.EXPORT_OT_xyz)
bpy.types.TOPBAR_MT_file_import.append(menu_func_import_xyz)
bpy.types.TOPBAR_MT_file_export.append(menu_func_export_xyz)
classes = (utility_gui.PANEL_PT_prepare,
utility_gui.PanelProperties,
utility_gui.DatafileApply,
utility_gui.DefaultAtom,
utility_gui.ReplaceAtom,
utility_gui.SeparateAtom,
utility_gui.DistanceButton,
utility_gui.RadiusAllBiggerButton,
utility_gui.RadiusAllSmallerButton,
utility_gui.SticksAllBiggerButton,
utility_gui.SticksAllSmallerButton)
from bpy.utils import register_class
utility_panel.read_elements()
for cls in classes:
register_class(cls)
scene = bpy.types.Scene
scene.atom_blend = bpy.props.PointerProperty(type=utility_gui.PanelProperties)
def unregister():
from bpy.utils import unregister_class
unregister_class(AddonPreferences)
unregister_class(pdb_gui.IMPORT_OT_pdb)
unregister_class(pdb_gui.EXPORT_OT_pdb)
bpy.types.TOPBAR_MT_file_import.remove(menu_func_import_pdb)
bpy.types.TOPBAR_MT_file_export.remove(menu_func_export_pdb)
unregister_class(xyz_gui.IMPORT_OT_xyz)
unregister_class(xyz_gui.EXPORT_OT_xyz)
bpy.types.TOPBAR_MT_file_import.remove(menu_func_import_xyz)
bpy.types.TOPBAR_MT_file_export.remove(menu_func_export_xyz)
classes = (utility_gui.PANEL_PT_prepare,
utility_gui.PanelProperties,
utility_gui.DatafileApply,
utility_gui.DefaultAtom,
utility_gui.ReplaceAtom,
utility_gui.SeparateAtom,
utility_gui.DistanceButton,
utility_gui.RadiusAllBiggerButton,
utility_gui.RadiusAllSmallerButton,
utility_gui.SticksAllBiggerButton,
utility_gui.SticksAllSmallerButton)
for cls in classes:
unregister_class(cls)
# -----------------------------------------------------------------------------
# Main
if __name__ == "__main__":
register()