mirror of
https://github.com/blender/blender-addons.git
synced 2025-08-20 13:22:58 +00:00

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
204 lines
6.6 KiB
Python
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()
|