def loadHandler(self, human, values): if len(values) >= 3: mhclo = export_config.getExistingProxyFile(values[1], values[2], "clothes") else: mhclo = export_config.getExistingProxyFile(values[1], None, "clothes") if not mhclo: log.notice("%s does not exist. Skipping.", values[1]) else: self.setClothes(human, mhclo)
def loadHandler(self, human, values): mhclo = export_config.getExistingProxyFile(values, "clothes") if not mhclo: print values[1], "does not exist. Skipping." else: self.setClothes(human, mhclo)
def setClothes(self, human, filepath): if os.path.basename(filepath) == "clear.mhclo": for name,clo in human.clothesObjs.items(): gui3d.app.removeObject(clo) del human.clothesObjs[name] self.clothesList = [] human.activeClothing = None return proxy = mh2proxy.readProxyFile(human.meshData, filepath, False) if not proxy: return uuid = proxy.getUuid() # For loading costumes (sets of individual clothes) if proxy.clothings: t = 0 dt = 1.0/len(proxy.clothings) for (pieceName, uuid) in proxy.clothings: gui3d.app.progress(t, text="Loading %s" % pieceName) t += dt mhclo = export_config.getExistingProxyFile(pieceName+".mhclo", uuid, "clothes") if mhclo: self.setClothes(human, mhclo) else: log.warning("Could not load clothing %s", pieceName) gui3d.app.progress(1, text="%s loaded" % proxy.name) # Load custom textures for (uuid, texPath) in proxy.textures: if not uuid in human.clothesObjs.keys(): log.warning("Cannot override texture for clothing piece with uuid %s!" % uuid) continue pieceProxy = human.clothesProxies[uuid] if not os.path.dirname(texPath): pieceProxy = human.clothesProxies[uuid] clothesPath = os.path.dirname(pieceProxy.file) texPath = os.path.join(clothesPath, texPath) log.debug("Overriding texture for clothpiece %s to %s", uuid, texPath) clo = human.clothesObjs[uuid] clo.mesh.setTexture(texPath) # Apply overridden transparency setting to pieces of a costume for (uuid, isTransparent) in proxy.transparencies.items(): if not uuid in human.clothesProxies.keys(): log.warning("Could not override transparency for object with uuid %s!" % uuid) continue clo = human.clothesObjs[uuid] log.debug("Overriding transparency setting for clothpiece %s to %s", uuid, bool(proxy.transparencies[uuid])) if proxy.transparencies[uuid]: clo.mesh.setTransparentPrimitives(len(clo.mesh.faces)) else: clo.mesh.setTransparentPrimitives(0) return #folder = os.path.dirname(filepath) (folder, name) = proxy.obj_file obj = os.path.join(folder, name) try: clo = human.clothesObjs[uuid] except: clo = None if clo: gui3d.app.removeObject(clo) del human.clothesObjs[uuid] self.clothesList.remove(uuid) if human.activeClothing == uuid: human.activeClothing = None log.message("Removed clothing %s %s", proxy.name, uuid) return mesh = files3d.loadMesh(obj) if not mesh: log.error("Could not load mesh for clothing object %s", proxy.name) return if proxy.texture: (dir, name) = proxy.texture tex = os.path.join(folder, name) if not os.path.exists(tex): tex = os.path.join(self.systemClothes, "textures", name) mesh.setTexture(tex) else: pass clo = gui3d.app.addObject(gui3d.Object(human.getPosition(), mesh)) clo.setRotation(human.getRotation()) clo.mesh.setCameraProjection(0) clo.mesh.setSolid(human.mesh.solid) if proxy.cull: clo.mesh.setCull(1) else: clo.mesh.setCull(None) if proxy.transparent: clo.mesh.setTransparentPrimitives(len(clo.mesh.faces)) else: clo.mesh.setTransparentPrimitives(0) clo.mesh.priority = 10 human.clothesObjs[uuid] = clo human.clothesProxies[uuid] = proxy human.activeClothing = uuid self.clothesList.append(uuid) for tag in proxy.tags: tag = tag.lower() if tag in KnownTags: try: oldUuids = self.taggedClothes[tag] except KeyError: oldUuids = [] newUuids = [] for oldUuid in oldUuids: if oldUuid == uuid: pass elif True: try: oldClo = human.clothesObjs[oldUuid] except KeyError: continue log.message("Removed clothing %s", oldUuid) gui3d.app.removeObject(oldClo) del human.clothesObjs[oldUuid] self.clothesList.remove(oldUuid) if human.activeClothing == oldUuid: human.activeClothing = None else: log.message("Kept clothing %s", oldUuid) newUuids.append(oldUuid) newUuids.append(uuid) self.taggedClothes[tag] = newUuids self.adaptClothesToHuman(human) clo.setSubdivided(human.isSubdivided())