def startEdit(self): ''' as we are editing a egg-file, but for texture painting we modify a texture on the model, we need to find the corresponding texture's from the 3dmodel and the eggdata if we find it we start modifying it WARNING: the current implementation may select the wrong texture to edit if the filename of a texture is equal, but in different subdirectories ''' if ObjectEggBase.isEditmodeEnabled(self): ObjectEggBase.startEdit(self) print "I: ObjectEggTexture.startEdit" # search for the corresponding nodepath-texture in the egg-file eggTextureFilename = str(self.eggTexture.getFilename()).lstrip('./') # the texture we will modify editTexture = None modelTextureLayers = getTextureLayers(self.modelWrapper.model) for modelTexLayer in modelTextureLayers: modelTexFilename = str(modelTexLayer.texture.getFullpath()) if eggTextureFilename in modelTexFilename: editTexture = modelTexLayer.texture if editTexture: print "I: ObjectEggTexture.startEdit: start editing texture", eggTextureFilename print " - selected from these: ", [tex.texture.getFullpath() for tex in modelTextureLayers] #texturePainter.selectPaintModel() self.editTexture = editTexture self.editTextureFilename = tex.texture.getFullpath() texturePainter.enableEditor() texturePainter.startEditor(self.modelWrapper.model, editTexture) #texturePainter.startEdit() else: print "I: ObjectEggTexture.startEdit: texture not found", eggTextureFilename print " - fullpath", [tex.texture.getFullpath() for tex in modelTextureLayers] print " - filename", [tex.texture.getFilename() for tex in modelTextureLayers] else: print "W: ObjectEggTexture.startEdit: editmode not enabled"
def startEdit(self): if not TreeNode.isEditmodeStarted(self): TreeNode.startEdit(self) # disable the 3d window object selection messenger.send(EVENT_SCENEPICKER_MODELSELECTION_DISABLE) if self.renderMode == 0: # update terrain height using geoMip.generate texturePainter.startEditor(self.geoMipTerrain.terrain.getRoot(), self.geoMipTerrain.terrain.heightfield()) #texturePainter.startEdit() if self.renderMode == 1: # backup bruteforce state, and activate it self.bruteforceState =self.geoMipTerrain.terrain.getBruteforce() self.geoMipTerrain.terrain.setBruteforce(True) self.geoMipTerrain.terrain.update() # get the paint texture self.paintImage = self.geoMipTerrain.terrain.heightfield() if not( (self.paintImage.getXSize() != 0) and (self.paintImage.getYSize() != 0) and (4 >= self.paintImage.getNumChannels() > 0) ): # this only get's evaluated if the first 2 works, otherwise this may raise print "W: GeoMipTerrainHeightfield.startEdit: cannot edit undefined image", self.paintImage self.paintImage = None return self.paintTexture = Texture() self.paintTexture.load(self.paintImage) # prepare the shader inputs colorTextureStage = TextureStage("color") colorTextureStage.setSort(1) # the color texture is on sort 1 heightTextureStage = TextureStage("height") heightTextureStage.setSort(2) # the color texture is on sort 1 # create a copy of the terrain and update it with a shader self.geoMipTerrainCopy = self.geoMipTerrain.terrain.getRoot().copyTo(self.getParentNodepath()) self.geoMipTerrainCopy.setTextureOff(10000) self.geoMipTerrainCopy.setTexture(heightTextureStage, self.paintTexture, 10001) self.geoMipTerrainCopy.setTexture(colorTextureStage, self.paintTexture, 10001) self.geoMipTerrainCopy.setShader(COMPILED_SHADER) # start the texture painter #texturePainter.setEditTexture(self.paintImage) #texturePainter.setEditModel(self.geoMipTerrain.terrain.getRoot()) texturePainter.enableEditor() texturePainter.startEditor(self.geoMipTerrainCopy, self.geoMipTerrain.terrain.heightfield(), BACKGROUND_SHADER) #, self.paintTexture) #texturePainter.startPaint() heightTextureStage = TextureStage("height") heightTextureStage.setSort(2) # the color texture is on sort 1 #texturePainter.backgroundRender.setTexture(heightTextureStage,self.paintTexture,10001) #texturePainter.backgroundRender.setShader(COMPILED_BACKGROUND_SHADER,10001) #texturePainter.paintModel.setTexture(heightTextureStage,self.paintTexture,10001) #texturePainter.paintModel.setShader(COMPILED_BACKGROUND_SHADER,10001) # hide the original terrain self.geoMipTerrain.terrain.getRoot().hide() taskMgr.add(self.updateTask, 'geoMipUpdateTask')
def startEdit(self): ''' as we are editing a egg-file, but for texture painting we modify a texture on the model, we need to find the corresponding texture's from the 3dmodel and the eggdata if we find it we start modifying it WARNING: the current implementation may select the wrong texture to edit if the filename of a texture is equal, but in different subdirectories ''' if ObjectEggBase.isEditmodeEnabled(self): ObjectEggBase.startEdit(self) print "I: ObjectEggTexture.startEdit" # search for the corresponding nodepath-texture in the egg-file eggTextureFilename = str( self.eggTexture.getFilename()).lstrip('./') # the texture we will modify editTexture = None modelTextureLayers = getTextureLayers(self.modelWrapper.model) for modelTexLayer in modelTextureLayers: modelTexFilename = str(modelTexLayer.texture.getFullpath()) if eggTextureFilename in modelTexFilename: editTexture = modelTexLayer.texture if editTexture: print "I: ObjectEggTexture.startEdit: start editing texture", eggTextureFilename print " - selected from these: ", [ tex.texture.getFullpath() for tex in modelTextureLayers ] #texturePainter.selectPaintModel() self.editTexture = editTexture self.editTextureFilename = tex.texture.getFullpath() texturePainter.enableEditor() texturePainter.startEditor(self.modelWrapper.model, editTexture) #texturePainter.startEdit() else: print "I: ObjectEggTexture.startEdit: texture not found", eggTextureFilename print " - fullpath", [ tex.texture.getFullpath() for tex in modelTextureLayers ] print " - filename", [ tex.texture.getFilename() for tex in modelTextureLayers ] else: print "W: ObjectEggTexture.startEdit: editmode not enabled"
def startPaint(self): # if not self.paintActive: print "I: ShaderWrapper.startPaint" relativePath = posixpath.dirname(self.getParentFilepath()) texPath = posixpath.join(relativePath, self.tex1Path) if texPath in self.shader.loadedMaps: self.paintTex = self.shader.loadedMaps[texPath] # texturePainter.startEdit(self.paintTex) texturePainter.enableEditor() success = texturePainter.startEditor(self.getNodepath(), self.paintTex) if success: texturePainter.startEdit() # self.paintActive = True else: print "E: ShaderWrapper.startPaint: unable to start painting, shader not initialized"
def startPaint(self): # if not self.paintActive: print "I: ShaderWrapper.startPaint" relativePath = posixpath.dirname(self.getParentFilepath()) texPath = posixpath.join(relativePath, self.tex1Path) if texPath in self.shader.loadedMaps: self.paintTex = self.shader.loadedMaps[texPath] #texturePainter.startEdit(self.paintTex) texturePainter.enableEditor() success = texturePainter.startEditor(self.getNodepath(), self.paintTex) if success: texturePainter.startEdit() # self.paintActive = True else: print "E: ShaderWrapper.startPaint: unable to start painting, shader not initialized"
def startEdit(self): if not TreeNode.isEditmodeStarted(self): TreeNode.startEdit(self) # disable the 3d window object selection messenger.send(EVENT_SCENEPICKER_MODELSELECTION_DISABLE) if self.renderMode == 0: # update terrain height using geoMip.generate texturePainter.startEditor( self.geoMipTerrain.terrain.getRoot(), self.geoMipTerrain.terrain.heightfield()) #texturePainter.startEdit() if self.renderMode == 1: # backup bruteforce state, and activate it self.bruteforceState = self.geoMipTerrain.terrain.getBruteforce( ) self.geoMipTerrain.terrain.setBruteforce(True) self.geoMipTerrain.terrain.update() # get the paint texture self.paintImage = self.geoMipTerrain.terrain.heightfield() if not ( (self.paintImage.getXSize() != 0) and (self.paintImage.getYSize() != 0) and (4 >= self.paintImage.getNumChannels() > 0) ): # this only get's evaluated if the first 2 works, otherwise this may raise print "W: GeoMipTerrainHeightfield.startEdit: cannot edit undefined image", self.paintImage self.paintImage = None return self.paintTexture = Texture() self.paintTexture.load(self.paintImage) # prepare the shader inputs colorTextureStage = TextureStage("color") colorTextureStage.setSort(1) # the color texture is on sort 1 heightTextureStage = TextureStage("height") heightTextureStage.setSort(2) # the color texture is on sort 1 # create a copy of the terrain and update it with a shader self.geoMipTerrainCopy = self.geoMipTerrain.terrain.getRoot( ).copyTo(self.getParentNodepath()) self.geoMipTerrainCopy.setTextureOff(10000) self.geoMipTerrainCopy.setTexture(heightTextureStage, self.paintTexture, 10001) self.geoMipTerrainCopy.setTexture(colorTextureStage, self.paintTexture, 10001) self.geoMipTerrainCopy.setShader(COMPILED_SHADER) # start the texture painter #texturePainter.setEditTexture(self.paintImage) #texturePainter.setEditModel(self.geoMipTerrain.terrain.getRoot()) texturePainter.enableEditor() texturePainter.startEditor( self.geoMipTerrainCopy, self.geoMipTerrain.terrain.heightfield(), BACKGROUND_SHADER) #, self.paintTexture) #texturePainter.startPaint() heightTextureStage = TextureStage("height") heightTextureStage.setSort(2) # the color texture is on sort 1 #texturePainter.backgroundRender.setTexture(heightTextureStage,self.paintTexture,10001) #texturePainter.backgroundRender.setShader(COMPILED_BACKGROUND_SHADER,10001) #texturePainter.paintModel.setTexture(heightTextureStage,self.paintTexture,10001) #texturePainter.paintModel.setShader(COMPILED_BACKGROUND_SHADER,10001) # hide the original terrain self.geoMipTerrain.terrain.getRoot().hide() taskMgr.add(self.updateTask, 'geoMipUpdateTask')