-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathgui_atoms.py
144 lines (125 loc) · 4.53 KB
/
gui_atoms.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import bpy
import bmesh
from mathutils import Vector
from bpy.types import (Panel,
Operator,
AddonPreferences,
PropertyGroup,
)
from bpy.props import (StringProperty,
BoolProperty,
IntProperty,
FloatProperty,
FloatVectorProperty,
EnumProperty,
PointerProperty,
)
from blase.butils import read_batoms_collection_list, read_atoms_list
from blase.batoms import Batoms
# The panel.
class Atoms_PT_prepare(Panel):
bl_label = "Blase Atoms"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
# bl_options = {'DEFAULT_CLOSED'}
bl_category = "Atoms"
bl_idname = "BLASE_PT_Atoms"
def draw(self, context):
layout = self.layout
atpanel = context.scene.atpanel
box = layout.box()
row = box.row()
row.prop(atpanel, "collection_list")
row = box.row()
row.prop(atpanel, "atoms_list")
row = box.row()
row.prop(atpanel, "materials")
row = box.row()
row.prop(atpanel, "radius")
col = box.column(align=True)
row = box.row()
row.prop(atpanel, "color")
class AtomsProperties(bpy.types.PropertyGroup):
def Callback_collection_list(self, context):
items = read_batoms_collection_list()
items = [(item, item, "") for item in items]
items = tuple(items)
return items
def Callback_materials(self, context):
atpanel = bpy.context.scene.atpanel
modify_materials(atpanel.atoms_list, atpanel.materials)
def Callback_atoms_list(self, context):
atpanel = bpy.context.scene.atpanel
coll = bpy.data.collections[atpanel.collection_list]
items = read_atoms_list(coll)
items = [(item, item, "") for item in items]
items = tuple(items)
return items
def Callback_modify_radius(self, context):
atpanel = bpy.context.scene.atpanel
print('Callback_modify_radius')
modify_radius(atpanel.collection_list, atpanel.atoms_list, atpanel.radius)
def Callback_modify_color(self, context):
atpanel = bpy.context.scene.atpanel
print('Callback_modify_radius')
color = atpanel.color
modify_color(atpanel.collection_list, atpanel.atoms_list, color)
collection_list: EnumProperty(
name="Collection",
description="Collection",
items=Callback_collection_list)
atoms_list: EnumProperty(
name="Atom",
description="Atom",
items=Callback_atoms_list)
materials: EnumProperty(
name="Materials",
description="Materials models",
items=(('0',"blase", ""),
('1',"metal", ""),
('2',"glass",""),
('3',"plastic", ""),
('4',"mirror", "")),
default='0', update=Callback_materials)
radius: FloatProperty(
name="Radius", default=1.0,
description = "Radius", update = Callback_modify_radius)
colorR: FloatProperty(
name="R", default=False,
description = "R")
colorG: FloatProperty(
name="G", default=False,
description = "G")
colorB: FloatProperty(
name="B", default=False,
description = "B", update = Callback_modify_color)
color = FloatVectorProperty(
name="color",
subtype='COLOR',
default=(1.0, 1.0, 1.0),
min=0.0, max=1.0,
description="color picker"
)
# Modifying the radius of a selected atom or stick
def modify_materials(collection_name, model_type, atoms = None):
coll = bpy.data.collections[collection_name]
if not batoms:
batoms = Batoms(coll)
print('drawing atoms')
batoms.draw_atoms()
# Modifying the radius of a selected atom or stick
def modify_radius(collection_name, atoms_list, radius, batoms = None):
# Modify atom radius (all selected)
coll = bpy.data.collections[collection_name]
if not batoms:
batoms = Batoms(coll)
print('drawing atoms')
batoms.draw_atoms(props={atoms_list:{'radius': radius,}})
# Modifying the radius of a selected atom or stick
def modify_color(collection_name, atoms_list, color, batoms = None):
# Modify atom radius (all selected)
coll = bpy.data.collections[collection_name]
if not batoms:
batoms = Batoms(coll)
print('drawing atoms')
batoms.draw_atoms(props={atoms_list:{'color': color,}})