Skip to content

Commit 6a826af

Browse files
committed
Core: Skin: Add support volume skin weights import Closes #615
1 parent 8acda86 commit 6a826af

2 files changed

Lines changed: 57 additions & 8 deletions

File tree

Lines changed: 26 additions & 0 deletions
Loading

release/scripts/mgear/core/skin.py

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -301,21 +301,31 @@ def getVertexPositions(geo):
301301

302302
elif isinstance(shape, pm.nodetypes.NurbsSurface):
303303
# For NURBS surfaces, iterate CVs
304+
shapeName = shape.name()
305+
spansU = cmds.getAttr(shapeName + ".spansU")
306+
spansV = cmds.getAttr(shapeName + ".spansV")
307+
degreeU = cmds.getAttr(shapeName + ".degreeU")
308+
degreeV = cmds.getAttr(shapeName + ".degreeV")
309+
numCVsU = spansU + degreeU
310+
numCVsV = spansV + degreeV
304311
idx = 0
305-
for u in range(shape.numCVsInU()):
306-
for v in range(shape.numCVsInV()):
312+
for u in range(numCVsU):
313+
for v in range(numCVsV):
307314
pos = cmds.pointPosition(
308-
"{}.cv[{}][{}]".format(shape.name(), u, v), world=True
315+
"{}.cv[{}][{}]".format(shapeName, u, v), world=True
309316
)
310317
positions[idx] = [round(pos[0], 6), round(pos[1], 6), round(pos[2], 6)]
311318
idx += 1
312319
return positions, "nurbsSurface"
313320

314321
elif isinstance(shape, pm.nodetypes.NurbsCurve):
315322
# For NURBS curves, iterate CVs
316-
numCVs = shape.numCVs()
323+
shapeName = shape.name()
324+
spans = cmds.getAttr(shapeName + ".spans")
325+
degree = cmds.getAttr(shapeName + ".degree")
326+
numCVs = spans + degree
317327
for i in range(numCVs):
318-
pos = cmds.pointPosition("{}.cv[{}]".format(shape.name(), i), world=True)
328+
pos = cmds.pointPosition("{}.cv[{}]".format(shapeName, i), world=True)
319329
positions[i] = [round(pos[0], 6), round(pos[1], 6), round(pos[2], 6)]
320330
return positions, "nurbsCurve"
321331

@@ -1195,10 +1205,23 @@ def importSkin(filePath=None, vertexMismatchMode="auto", *args):
11951205
meshVertices = pm.polyEvaluate(objShapes, vertex=True)
11961206
elif isinstance(objNode.getShape(), pm.nodetypes.NurbsSurface):
11971207
# if nurbs, count the cvs instead of the vertices.
1198-
meshVertices = sum([len(shape.cv) for shape in objShapes])
1208+
# Use cmds to get spans and degree for CV count
1209+
meshVertices = 0
1210+
for shape in objShapes:
1211+
shapeName = shape.name()
1212+
spansU = cmds.getAttr(shapeName + ".spansU")
1213+
spansV = cmds.getAttr(shapeName + ".spansV")
1214+
degreeU = cmds.getAttr(shapeName + ".degreeU")
1215+
degreeV = cmds.getAttr(shapeName + ".degreeV")
1216+
meshVertices += (spansU + degreeU) * (spansV + degreeV)
11991217
elif isinstance(objNode.getShape(), pm.nodetypes.NurbsCurve):
1200-
# meshVertices = sum([len(shape.cv) for shape in objShapes])
1201-
meshVertices = sum(1 for _ in objShapes[0].cv)
1218+
# Use cmds to get spans and degree for CV count
1219+
meshVertices = 0
1220+
for shape in objShapes:
1221+
shapeName = shape.name()
1222+
spans = cmds.getAttr(shapeName + ".spans")
1223+
degree = cmds.getAttr(shapeName + ".degree")
1224+
meshVertices += spans + degree
12021225
else:
12031226
# TODO: Implement other skinnable objs like lattices.
12041227
meshVertices = 0

0 commit comments

Comments
 (0)