def __create_curve_from_edge(edge): edgeloop = __get_edge_loop(edge, [], None) edgeloop.insert(0, edge) edge_curves = [] for edgeloop_edge in edgeloop: edge_curves.append( pm.curve( # name=n, degree=1, ws=True, point=[ v.getPosition() for v in edgeloop_edge.connectedVertices() ])) pm.select(None) if (len(edge_curves) > 1): merged_curve = pm.attachCurve(edge_curves[:-1], method=1, keepMultipleKnots=False, ch=False)[0] edge_curves.pop(edge_curves.index(merged_curve)) # closed_curve = pm.closeCurve( merged_curve )[0] closed_curve = merged_curve # pm.delete( merged_curve ) else: closed_curve = None pm.delete(edge_curves) return closed_curve, edgeloop
def __create_curve_from_edge( edge ) : edgeloop = __get_edge_loop( edge, [], None ) edgeloop.insert(0, edge ) edge_curves = [] for edgeloop_edge in edgeloop : edge_curves.append( pm.curve( # name=n, degree=1, ws=True, point=[ v.getPosition() for v in edgeloop_edge.connectedVertices() ] ) ) pm.select(None) if( len( edge_curves ) > 1 ) : merged_curve = pm.attachCurve( edge_curves[:-1], method=1, keepMultipleKnots=False, ch=False )[0] edge_curves.pop( edge_curves.index(merged_curve) ) # closed_curve = pm.closeCurve( merged_curve )[0] closed_curve = merged_curve # pm.delete( merged_curve ) else : closed_curve = None pm.delete( edge_curves ) return closed_curve, edgeloop
def project_curves_onto_mesh2( mesh, source_mesh, direction ) : # duplicate sources_mesh dup_source_mesh = pm.duplicate( source_mesh )[0] dup_source_mesh.setParent(None) # create curve around mesh edge_curves = [] for edge in mesh.getShape().e : edge_curves.append( pm.curve( # name=n, degree=1, ws=True, point=[ v.getPosition(space='world') for v in edge.connectedVertices() ] ) ) merged_curve = pm.attachCurve( edge_curves, method=1, keepMultipleKnots=False, ch=False )[0] merged_curve = pm.duplicate( merged_curve ) pm.delete( edge_curves ) # project curve onto dup_source_mesh projected_curves = projected_curves = pm.polyProjectCurve( dup_source_mesh, merged_curve, direction=direction )[0] # pm.delete( projected_curves.getChildren()[1:] ) projected_curve = projected_curves.getChildren()[0] split_mesh = pm.polySplit( dup_source_mesh, detachEdges=0, projectedCurve=projected_curve ) split_mesh = split_mesh[0] # delete faces not within mesh bounds # faces_to_delete = [] pm.select(None) for face in split_mesh.f : face_center = ( 0.0, 0.0, 0.0 ) for v in face.connectedVertices() : face_center += v.getPosition( space='world' ) face_center /= len( face.connectedVertices() ) if( point_in_rect_bb( face_center, mesh.getBoundingBox( space='world' ) ) ) : # faces_to_delete.append( face ) dot = face.getNormal( space='world' ).dot( mesh.f[0].getNormal( space='world' ) ) if( dot > 0.0 ) : pm.select(face, add=True) # for face in faces_to_delete : # dot = face.getNormal( space='world' ).dot( mesh.f[0].getNormal( space='world' ) ) # if( dot > 0.0 ) : # pm.select(face, add=True) pm.runtime.InvertSelection() pm.delete() # transfer UVs from mesh to dup_source_mesh pm.transferAttributes( mesh, split_mesh, transferUVs=2 ) # assign mesh material to dup_source_mesh # rename dup_source_mesh to mesh pm.delete( split_mesh, ch=True ) n = mesh.name() p = mesh.getParent() pm.delete( mesh ) split_mesh.rename( n ) for attr in split_mesh.listAttr() : if attr.isLocked() : attr.setLocked(False) # cleanup pm.delete( projected_curves ) pm.delete( merged_curve ) pm.delete( dup_source_mesh ) # split_mesh.centerPivots( True ) # t = split_mesh.getPivots( worldSpace=1 )[0] # split_mesh.setTranslation((-t[0], -t[1], -t[2]), space='world') # pm.makeIdentity( split_mesh, apply=True ) # split_mesh.setParent( p ) # split_mesh.setTranslation( ( 0,0,0 ) ) # pm.makeIdentity( split_mesh, apply=True ) # position bodge split_mesh.setTranslation( ( 0, 0, 1 ), space='world' ) split_mesh.setParent( p ) pm.polyTriangulate( split_mesh ) if( not split_mesh.hasAttr( THU_MFT_SPRITE_ATTR ) ) : split_mesh.addAttr( THU_MFT_SPRITE_ATTR, dt='string' ) split_mesh.setAttr( THU_MFT_SPRITE_ATTR, split_mesh.name().replace( '.png', '' ) )
def project_curves_onto_mesh2(mesh, source_mesh, direction): # duplicate sources_mesh dup_source_mesh = pm.duplicate(source_mesh)[0] dup_source_mesh.setParent(None) # create curve around mesh edge_curves = [] for edge in mesh.getShape().e: edge_curves.append( pm.curve( # name=n, degree=1, ws=True, point=[ v.getPosition(space='world') for v in edge.connectedVertices() ])) merged_curve = pm.attachCurve(edge_curves, method=1, keepMultipleKnots=False, ch=False)[0] merged_curve = pm.duplicate(merged_curve) pm.delete(edge_curves) # project curve onto dup_source_mesh projected_curves = projected_curves = pm.polyProjectCurve( dup_source_mesh, merged_curve, direction=direction)[0] # pm.delete( projected_curves.getChildren()[1:] ) projected_curve = projected_curves.getChildren()[0] split_mesh = pm.polySplit(dup_source_mesh, detachEdges=0, projectedCurve=projected_curve) split_mesh = split_mesh[0] # delete faces not within mesh bounds # faces_to_delete = [] pm.select(None) for face in split_mesh.f: face_center = (0.0, 0.0, 0.0) for v in face.connectedVertices(): face_center += v.getPosition(space='world') face_center /= len(face.connectedVertices()) if (point_in_rect_bb(face_center, mesh.getBoundingBox(space='world'))): # faces_to_delete.append( face ) dot = face.getNormal(space='world').dot( mesh.f[0].getNormal(space='world')) if (dot > 0.0): pm.select(face, add=True) # for face in faces_to_delete : # dot = face.getNormal( space='world' ).dot( mesh.f[0].getNormal( space='world' ) ) # if( dot > 0.0 ) : # pm.select(face, add=True) pm.runtime.InvertSelection() pm.delete() # transfer UVs from mesh to dup_source_mesh pm.transferAttributes(mesh, split_mesh, transferUVs=2) # assign mesh material to dup_source_mesh # rename dup_source_mesh to mesh pm.delete(split_mesh, ch=True) n = mesh.name() p = mesh.getParent() pm.delete(mesh) split_mesh.rename(n) for attr in split_mesh.listAttr(): if attr.isLocked(): attr.setLocked(False) # cleanup pm.delete(projected_curves) pm.delete(merged_curve) pm.delete(dup_source_mesh) # split_mesh.centerPivots( True ) # t = split_mesh.getPivots( worldSpace=1 )[0] # split_mesh.setTranslation((-t[0], -t[1], -t[2]), space='world') # pm.makeIdentity( split_mesh, apply=True ) # split_mesh.setParent( p ) # split_mesh.setTranslation( ( 0,0,0 ) ) # pm.makeIdentity( split_mesh, apply=True ) # position bodge split_mesh.setTranslation((0, 0, 1), space='world') split_mesh.setParent(p) pm.polyTriangulate(split_mesh) if (not split_mesh.hasAttr(THU_MFT_SPRITE_ATTR)): split_mesh.addAttr(THU_MFT_SPRITE_ATTR, dt='string') split_mesh.setAttr(THU_MFT_SPRITE_ATTR, split_mesh.name().replace('.png', ''))