@@ -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