Bugfix: fixed a bug that caused NPE during vertex groups loading when
mesh block was saved without its parent.
This commit is contained in:
parent
32be69f3e6
commit
be3dc06e28
@ -286,30 +286,33 @@ public class MeshHelper extends AbstractBlenderHelper {
|
||||
List<Map<String, Float>> result = new ArrayList<Map<String, Float>>();
|
||||
|
||||
Structure parent = blenderContext.peekParent();
|
||||
Structure defbase = (Structure) parent.getFieldValue("defbase");
|
||||
List<String> groupNames = new ArrayList<String>();
|
||||
List<Structure> defs = defbase.evaluateListBase();
|
||||
for (Structure def : defs) {
|
||||
groupNames.add(def.getFieldValue("name").toString());
|
||||
}
|
||||
if(parent != null) {
|
||||
// the mesh might be saved without its parent (it is then unused)
|
||||
Structure defbase = (Structure) parent.getFieldValue("defbase");
|
||||
List<String> groupNames = new ArrayList<String>();
|
||||
List<Structure> defs = defbase.evaluateListBase();
|
||||
for (Structure def : defs) {
|
||||
groupNames.add(def.getFieldValue("name").toString());
|
||||
}
|
||||
|
||||
Pointer pDvert = (Pointer) meshStructure.getFieldValue("dvert");// dvert = DeformVERTices
|
||||
if (pDvert.isNotNull()) {// assigning weights and bone indices
|
||||
List<Structure> dverts = pDvert.fetchData();
|
||||
for (Structure dvert : dverts) {
|
||||
Map<String, Float> weightsForVertex = new HashMap<String, Float>();
|
||||
Pointer pDW = (Pointer) dvert.getFieldValue("dw");
|
||||
if (pDW.isNotNull()) {
|
||||
List<Structure> dw = pDW.fetchData();
|
||||
for (Structure deformWeight : dw) {
|
||||
int groupIndex = ((Number) deformWeight.getFieldValue("def_nr")).intValue();
|
||||
float weight = ((Number) deformWeight.getFieldValue("weight")).floatValue();
|
||||
String groupName = groupNames.get(groupIndex);
|
||||
Pointer pDvert = (Pointer) meshStructure.getFieldValue("dvert");// dvert = DeformVERTices
|
||||
if (pDvert.isNotNull()) {// assigning weights and bone indices
|
||||
List<Structure> dverts = pDvert.fetchData();
|
||||
for (Structure dvert : dverts) {
|
||||
Map<String, Float> weightsForVertex = new HashMap<String, Float>();
|
||||
Pointer pDW = (Pointer) dvert.getFieldValue("dw");
|
||||
if (pDW.isNotNull()) {
|
||||
List<Structure> dw = pDW.fetchData();
|
||||
for (Structure deformWeight : dw) {
|
||||
int groupIndex = ((Number) deformWeight.getFieldValue("def_nr")).intValue();
|
||||
float weight = ((Number) deformWeight.getFieldValue("weight")).floatValue();
|
||||
String groupName = groupNames.get(groupIndex);
|
||||
|
||||
weightsForVertex.put(groupName, weight);
|
||||
weightsForVertex.put(groupName, weight);
|
||||
}
|
||||
}
|
||||
result.add(weightsForVertex);
|
||||
}
|
||||
result.add(weightsForVertex);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
Loading…
x
Reference in New Issue
Block a user