file_slraw.py file
#!/usr/bin/python
# ***** BEGIN GPL LICENSE BLOCK *****
#
# Script copyright (C) Domino Designs Limited
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------
# Second Life is a registered trademark of Linden Research, Inc.
from gimpfu import *
height = 256
width = 256
layernames = [ "Height",
"Factor",
"Water",
"Parcels",
"For Sale",
"Edit Object",
"Edit Land",
"Safe",
"Flying",
"Landmark",
"Scripts",
"Original Height",
"Original Factor"
]
layers = len( layernames )
def python_fu_save_raw_terrain( image, drawable, filename, raw_filename):
gimp.progress_init("Saving %s"%(filename))
raw = ""
r = ""
if len( image.layers ) != layers:
raise Error, "Image does not have %s layers"%( layers )
drawables = [ ]
for l in range( layers ): drawables.append( None )
for l in image.layers:
try:
layer = layernames.index( l.name )
except ValueError:
raise ValueError, "\"%s\" is not a supported layer name"%(l.name)
drawables[ layer ] = l.get_pixel_rgn( 0, 0, width, height )
for h in range(height):
for w in range(width):
for l in range( layers ):
raw += drawables[ l ][ w, h ]
gimp.progress_update( float(h) / height )
f = open( filename, "wb" )
f.write( raw )
f.close()
def register_save():
gimp.register_save_handler("file-slraw-save", "raw", "")
def python_fu_load_raw_terrain( filename, raw_filename ):
pixels = []
f = open( filename, "rb" )
raw = f.read()
f.close()
img = gimp.Image(height, width, GRAY )
img.disable_undo()
pdelta = 1.0 / layers
gimp.progress_init("Loading %s"%(filename))
for l in range( layers ):
layer = gimp.Layer( img, layernames[ l ], height, width, GRAY_IMAGE,
100, NORMAL_MODE )
pr = layer.get_pixel_rgn( 0, 0, width, height )
r = raw[l::layers]
for w in range( width ):
pr[ w, 0:height ] = r[ w::width ]
gimp.progress_update( pdelta * l + pdelta * ( w / width ) )
img.add_layer( layer, l )
img.active_layer = img.layers[0]
img.filename = filename
img.enable_undo()
return img
def register_load():
gimp.register_load_handler("file-slraw-load", "raw", "")
register(
"file-slraw-load",
"Load Second Life raw terrain file into layers",
"Select a raw terrain file to load",
"Domino Marama",
"Domino Designs Limited",
"2008",
"Second Life Terrain",
"",
[
(PF_STRING, "filename", "File Name",""),
(PF_STRING, "raw-filename", "raw file name", "")
],
[
(PF_IMAGE, "image", "raw terrain", "")
],
python_fu_load_raw_terrain,
"",
on_query = register_load
)
register(
"file-slraw-save",
"Save layers to Second Life raw terrain file",
"Select a raw terrain file to save as",
"Domino Marama",
"Domino Designs Limited",
"2008",
"Second Life Terrain",
"GREY",
[
(PF_IMAGE, "image", "Input image", "" ),
(PF_DRAWABLE, "drawable", "Drawable to save", ""),
(PF_STRING, "filename", "The name of the file to save the image in", ""),
(PF_STRING, "raw-filename", "The name entered", "")
],
[],
python_fu_save_raw_terrain,
"",
on_query = register_save
)
main()
Note:Ignore line 140, that's being added by the website. It'll go when I figure out why.
Recent comments
2 hours 17 min ago
8 hours 53 min ago
16 hours 43 min ago
16 hours 44 min ago
1 week 4 days ago
1 week 6 days ago
2 weeks 2 days ago
2 weeks 2 days ago
2 weeks 4 days ago
2 weeks 6 days ago