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')
Example #3
0
 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"
Example #4
0
 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"
Example #5
0
    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"
Example #6
0
    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')