Example #1
0
	def on_loadWeightsButton_clicked(self):
		for mesh in selected():
			sc = mel.findRelatedSkinCluster(mesh)
			if not sc: continue
			sc = ls(sc)[0]
			
			doc = ElementTree(file=path + mesh.nodeName().replace('|', '').replace(':', '.') + '.xml')
			
			influences = [inf.attrib['name'] for inf in doc.findall('//Influence')]
			for i, vtx in enumerate(doc.findall('//Vertex')):
				weights = [(influences[int(w.attrib['influence'])],
					float(w.attrib['value'])) for w in vtx.findall('Weight')]
				skinPercent(sc, '%s.vtx[%d]' % (mesh, i),
					transformValue=weights)
Example #2
0
    def on_loadWeightsButton_clicked(self):
        for mesh in selected():
            sc = mel.findRelatedSkinCluster(mesh)
            if not sc: continue
            sc = ls(sc)[0]

            doc = ElementTree(
                file=path +
                mesh.nodeName().replace('|', '').replace(':', '.') + '.xml')

            influences = [
                inf.attrib['name'] for inf in doc.findall('//Influence')
            ]
            for i, vtx in enumerate(doc.findall('//Vertex')):
                weights = [(influences[int(w.attrib['influence'])],
                            float(w.attrib['value']))
                           for w in vtx.findall('Weight')]
                skinPercent(sc,
                            '%s.vtx[%d]' % (mesh, i),
                            transformValue=weights)
Example #3
0
    def __init__(self, *args, **kwargs):
        super(Exporter, self).__init__(*args, **kwargs)
        self.name_pat = re.compile('(%s)')
        self.frame_pat = re.compile('(%[\d\.]*(?:f|d))')
        self.split_pat = re.compile('((?:%s|%[\d\.]*(?:d|f)))')
        self.run_showers = (self.progress, self.status)
        self.run_disablers = (self.reload, self.toolBox, self.exportOptions,
                              self.exportButton)
        [o.hide() for o in self.run_showers]
        self.animation_widgets = ()
        for i in range(1, 3):
            self.animation_widgets += ((self.toolBox.widget(i),
                                        self.toolBox.itemText(i)), )
        self.main_progress = getMainProgressBar()
        self._aborted = False

        # Look at the selection to predict what kind of object the user is going
        # to export and auto-select it in the export type combo box.
        kwargs = dict(selection=True, dagObjects=True)
        jroots = len(
            dict(((j, None) for j in ls(type='joint', **kwargs))).keys())
        cams = len(ls(cameras=True, **kwargs))
        meshes, skins = ls(geometry=True, **kwargs), 0
        del_meshes = []
        for i, m in enumerate(meshes):
            if mel.findRelatedSkinCluster(m):
                skins += 1
                del_meshes.append(i)
        for i in del_meshes:
            del meshes[i]
        if not jroots and not cams and not meshes and not skins:
            comboIndex = 2  # Meshes as default
        else:
            comboIndex = sorted(((i, c) for i, c in enumerate( \
             (jroots, cams, meshes, skins))), key=lambda x: x[1])[-1][0]
        self.exportCombo.setCurrentIndex(comboIndex)
        self.setFromTimeSlider.click()
        self.fix_format()
Example #4
0
	def __init__(self, *args, **kwargs):
		super(Exporter, self).__init__(*args, **kwargs)
		self.name_pat = re.compile('(%s)')
		self.frame_pat = re.compile('(%[\d\.]*(?:f|d))')
		self.split_pat = re.compile('((?:%s|%[\d\.]*(?:d|f)))')
		self.run_showers = (self.progress, self.status)
		self.run_disablers = (self.reload, self.toolBox, self.exportOptions,
			self.exportButton)
		[o.hide() for o in self.run_showers]
		self.animation_widgets = ()
		for i in range(1, 3):
			self.animation_widgets += ((self.toolBox.widget(i),
				self.toolBox.itemText(i)),)
		self.main_progress = getMainProgressBar()
		self._aborted = False
		
		# Look at the selection to predict what kind of object the user is going
		# to export and auto-select it in the export type combo box.
		kwargs = dict(selection=True, dagObjects=True)
		jroots = len(dict(((j, None) for j in ls(type='joint', **kwargs))).keys())
		cams = len(ls(cameras=True, **kwargs))
		meshes, skins = ls(geometry=True, **kwargs), 0
		del_meshes = []
		for i, m in enumerate(meshes):
			if mel.findRelatedSkinCluster(m):
				skins += 1
				del_meshes.append(i)
		for i in del_meshes:
			del meshes[i]
		if not jroots and not cams and not meshes and not skins:
			comboIndex = 2  # Meshes as default
		else:
			comboIndex = sorted(((i, c) for i, c in enumerate( \
				(jroots, cams, meshes, skins))), key=lambda x: x[1])[-1][0]
		self.exportCombo.setCurrentIndex(comboIndex)
		self.setFromTimeSlider.click()
		self.fix_format()
Example #5
0
    def export_skin_weights(self):

        format, ext = str(self.format.text()), str(self.formatExt.text())
        format = self.name_pat.sub( \
         lambda m: '%(name)' + m.group(1)[1:], format)
        path = Path(self.path.text())

        # Validate selection.
        sel = selected()
        if not sel:
            error('Selection is empty.')

        # Find the skin cluster.
        sc = mel.findRelatedSkinCluster(sel[0])
        skin_cluster = None
        for s in sel:
            sc = mel.findRelatedSkinCluster(s)
            if sc:
                skin_cluster = ls(sc)[0]
                break
        if not skin_cluster:
            error('No skin cluster found.')

        for mesh in sel:

            mesh_element = Element('Mesh', name=mesh)
            xml_tree = ElementTree(mesh_element)

            sc = mel.findRelatedSkinCluster(mesh)
            if not sc: continue
            sc = ls(sc)[0]

            influences = sc.influenceObjects()
            inf_tag = SubElement(mesh_element, 'Influences')
            for i, inf in enumerate(influences):
                SubElement(inf_tag, 'Influence', index=str(i), name=inf)
            #joints = ls(ios, type='joint')
            #if len(joints) < len(ios):
            #	error('Remove non-joint influences before exporting to Massive.')

            # TODO: progress bar

            name = format % dict(name=mesh.name().replace('|', '') \
             .replace(':', '.')) + ext
            with open(path / name, 'w') as f:

                #f.write(os.linesep + '# influences')
                #for i, inf in enumerate(ios):
                #	if inf in influences:
                #		inf_index = influences.index(j)
                #	else:
                #		influences += (inf,)
                #		inf_index = len(influences)
                #f.write('%sdeformer %d %s' % (os.linesep, i, inf))

                #f.write(os.linesep)

                vertices = SubElement(mesh_element, 'Vertices')

                #f.write(os.linesep + '# weights')
                for i, vtx in enumerate(mesh.vtx):
                    vertex = SubElement(vertices,
                                        'Vertex',
                                        pos=str(vtx.getPosition()))
                    #f.write('%s%d: ' % (os.linesep, vi))
                    for ii, inf in enumerate(influences):
                        weight_val = skinPercent(sc,
                                                 '%s.vtx[%d]' % (mesh, i),
                                                 transform=inf,
                                                 query=True)
                        if weight_val:
                            SubElement(vertex,
                                       'Weight',
                                       influence=str(ii),
                                       value=str(weight_val))
                            #f.write(' %d %f' % (ii, weight_val))

                #f.write(os.linesep + ':')
                rough_string = tostring(xml_tree.getroot(), 'utf-8')
                reparsed = minidom.parseString(rough_string)
                f.write(reparsed.toprettyxml(indent='\t'))
Example #6
0
	def export_skin_weights(self):
		
		format, ext = str(self.format.text()), str(self.formatExt.text())
		format = self.name_pat.sub( \
			lambda m: '%(name)' + m.group(1)[1:], format)
		path = Path(self.path.text())
		
		# Validate selection.
		sel = selected()
		if not sel:
			error('Selection is empty.')
		
		# Find the skin cluster.
		sc = mel.findRelatedSkinCluster(sel[0])
		skin_cluster = None
		for s in sel:
			sc = mel.findRelatedSkinCluster(s)
			if sc:
				skin_cluster = ls(sc)[0]
				break
		if not skin_cluster:
			error('No skin cluster found.')
		
		for mesh in sel:
			
			mesh_element = Element('Mesh', name=mesh)
			xml_tree = ElementTree(mesh_element)
			
			sc = mel.findRelatedSkinCluster(mesh)
			if not sc: continue
			sc = ls(sc)[0]
			
			influences = sc.influenceObjects()
			inf_tag = SubElement(mesh_element, 'Influences')
			for i, inf in enumerate(influences):
				SubElement(inf_tag, 'Influence', index=str(i), name=inf)
			#joints = ls(ios, type='joint')
			#if len(joints) < len(ios):
			#	error('Remove non-joint influences before exporting to Massive.')
			
			# TODO: progress bar
			
			name = format % dict(name=mesh.name().replace('|', '') \
				.replace(':', '.')) + ext
			with open(path / name, 'w') as f:
				
				#f.write(os.linesep + '# influences')
				#for i, inf in enumerate(ios):
				#	if inf in influences:
				#		inf_index = influences.index(j)
				#	else:
				#		influences += (inf,)
				#		inf_index = len(influences)
					#f.write('%sdeformer %d %s' % (os.linesep, i, inf))
				
				#f.write(os.linesep)
				
				vertices = SubElement(mesh_element, 'Vertices')
				
				#f.write(os.linesep + '# weights')
				for i, vtx in enumerate(mesh.vtx):
					vertex = SubElement(vertices, 'Vertex', pos=str(vtx.getPosition()))
					#f.write('%s%d: ' % (os.linesep, vi))
					for ii, inf in enumerate(influences):
						weight_val = skinPercent(sc, '%s.vtx[%d]' % (mesh, i),
							transform=inf, query=True)
						if weight_val:
							SubElement(vertex, 'Weight', influence=str(ii),
								value=str(weight_val))
							#f.write(' %d %f' % (ii, weight_val))
				
				
				
				#f.write(os.linesep + ':')
				rough_string = tostring(xml_tree.getroot(), 'utf-8')
				reparsed = minidom.parseString(rough_string)
				f.write(reparsed.toprettyxml(indent='\t'))