Fix #105067: Node Wrangler: cannot preview multi-user material group
[blender-addons.git] / add_mesh_extra_objects / add_mesh_rocks / settings.py
blob2f7058f9dd687e4882f35d4ed96d410e6ce7cf04
1 # SPDX-FileCopyrightText: 2019-2022 Blender Foundation
3 # SPDX-License-Identifier: GPL-2.0-or-later
5 # Paul "BrikBot" Marshall
6 # Created: July 1, 2011
7 # Last Modified: November 17, 2011
8 # Homepage (blog): http://post.darkarsenic.com/
9 # //blog.darkarsenic.com/
10 # Thanks to Meta-Androco, RickyBlender, Ace Dragon, and PKHG for ideas
11 # and testing.
13 # Coded in IDLE, tested in Blender 2.59. NumPy Recommended.
14 # Search for "@todo" to quickly find sections that need work.
16 import inspect
17 import shutil
18 from . import utils
19 from xml.dom import minidom
21 basePath = inspect.getfile(inspect.currentframe())[0:-len("settings.py")]
22 path = basePath + "add_mesh_rocks.xml"
24 try:
25 source = minidom.parse(path)
26 # print("Rock generator settings file found:\n" + path)
27 except:
28 print("Rock generator settings file not found. Creating settings file.")
29 shutil.copy(basePath + "factory.xml", path)
30 source = minidom.parse(path)
32 xmlDefault = source.getElementsByTagName('default')[0]
33 xmlPresets = source.getElementsByTagName('preset')
34 default = []
35 presets = []
37 # ----- Gets and Sets -----#
40 def getDefault():
41 global default
42 return default
45 def getPresetLists():
46 global presets
47 return presets
50 def getPreset(ID=0):
51 global presets
52 return presets[ID]
54 # ---------- Core ----------#
57 def parse():
58 global xmlDefault
59 global xmlPresets
60 global default
61 global presets
63 # Parse default values
64 default = parseNode(xmlDefault)
66 # Parse preset values
67 for setting in xmlPresets:
68 presets.append(parseNode(setting))
70 return '{FINISHED}'
73 # Takes a node and parses it for data. Relies on that setting.xml has
74 # a valid format as specified by the DTD.
75 # For some reason minidom places an empty child node for every other node.
76 def parseNode(setting, title=True):
77 loc = 1
79 if title:
80 # Preset name (xmlPreset.childNodes[1]):
81 title = setting.childNodes[loc].childNodes[0].data
82 loc += 2
84 # Preset size values (xmlPreset.childNodes[3]):
85 scaleX = [float(setting.childNodes[loc].childNodes[1].childNodes[3].childNodes[0].data),
86 float(setting.childNodes[loc].childNodes[1].childNodes[5].childNodes[0].data)]
87 scaleY = [float(setting.childNodes[loc].childNodes[3].childNodes[3].childNodes[0].data),
88 float(setting.childNodes[loc].childNodes[3].childNodes[5].childNodes[0].data)]
89 scaleZ = [float(setting.childNodes[loc].childNodes[5].childNodes[3].childNodes[0].data),
90 float(setting.childNodes[loc].childNodes[5].childNodes[5].childNodes[0].data)]
91 skewX = float(setting.childNodes[loc].childNodes[7].childNodes[3].childNodes[0].data)
92 skewY = float(setting.childNodes[loc].childNodes[9].childNodes[3].childNodes[0].data)
93 skewZ = float(setting.childNodes[loc].childNodes[11].childNodes[3].childNodes[0].data)
94 if setting.childNodes[loc].childNodes[13].childNodes[0].data == 'False':
95 use_scale_dis = False
96 else:
97 use_scale_dis = True
98 scale_fac = utils.toList(setting.childNodes[loc].childNodes[15].childNodes[0].data)
99 loc += 2
101 # Presst shape values (xmlPreset.childNodes[5]):
102 deform = float(setting.childNodes[loc].childNodes[1].childNodes[0].data)
103 rough = float(setting.childNodes[loc].childNodes[3].childNodes[0].data)
104 detail = int(setting.childNodes[loc].childNodes[5].childNodes[0].data)
105 display_detail = int(setting.childNodes[loc].childNodes[7].childNodes[0].data)
106 smooth_fac = float(setting.childNodes[loc].childNodes[9].childNodes[0].data)
107 smooth_it = int(setting.childNodes[loc].childNodes[11].childNodes[0].data)
108 loc += 2
110 # Preset material values (xmlPreset.childNodes[7]):
111 loc += 2
113 # Preset random values (xmlPreset.childNodes[9]):
114 if setting.childNodes[loc].childNodes[1].childNodes[0].data == 'True':
115 use_generate = True
116 else:
117 use_generate = False
118 if setting.childNodes[loc].childNodes[3].childNodes[0].data == 'False':
119 use_random_seed = False
120 else:
121 use_random_seed = True
122 user_seed = int(setting.childNodes[loc].childNodes[5].childNodes[0].data)
124 if title:
125 parsed = [title, scaleX, scaleY, scaleZ, skewX, skewY, skewZ,
126 use_scale_dis, scale_fac, deform, rough, detail,
127 display_detail, smooth_fac, smooth_it,
128 use_generate, use_random_seed, user_seed]
129 else:
130 parsed = [scaleX, scaleY, scaleZ, skewX, skewY, skewZ, use_scale_dis,
131 scale_fac, deform, rough, detail, display_detail, smooth_fac,
132 smooth_it, use_generate, use_random_seed, user_seed]
134 return parsed
137 def save():
138 return '{FINISHED}'
141 def _print():
142 for i in presets:
143 print(i)
144 return '{FINISHED}'