# generat3D - evaluate Daz DSON scenes and write .dbz files # Copyright (C) 2026 Danilo M. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from .scene import AXES, REST_CHANNELS, key def evaluate(scene): """Morphed rest vertices and per-node rest channels {node id: {channel: [x, y, z]}}.""" values = scene.graph.evaluate() fig = scene.figure verts = fig.verts.copy() for k, (idx, deltas) in fig.morphs.items(): w = values.get(k, 0.0) if w: verts[idx] += w * deltas # indices are unique within one morph rest = {n.id: {ch: [values[key(n.id, n.id, f"{ch}/{a}")] for a in AXES] for ch in REST_CHANNELS} for n in fig.nodes} return verts, rest