Skip to content

Instantly share code, notes, and snippets.

@nic96
Last active May 18, 2018 12:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nic96/f9dfa0feae9fc384c820 to your computer and use it in GitHub Desktop.
Save nic96/f9dfa0feae9fc384c820 to your computer and use it in GitHub Desktop.
This GIMP script makes a cube with the current layer as a texture for each side
;; This script converts a single layer into an isometric cube.
;; Copyright (C) 2015 Jeromy Reimer
;;
;; 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 3 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, see <http://www.gnu.org/licenses/>.
(define (create-isometric-box-from-layer image)
(let* (
(activelayer 0)
(cube-top 0)
(cube-bottom 0)
(cube-left 0)
(cube-right 0)
(cube-b-left 0)
(cube-b-right 0)
(background 0)
)
; convert image to rgb mode if it isn't already
(if (not (equal? (car (gimp-image-base-type image)) 0))
(gimp-image-convert-rgb image)
)
(set! activelayer (car (gimp-image-get-active-layer image)))
(gimp-image-resize image 150 150 0 0)
; creating a few duplicates of the orignal layer
(set! cube-top (car (gimp-layer-copy activelayer 1)))
(set! cube-left (car (gimp-layer-copy activelayer 1)))
(gimp-image-remove-layer image activelayer)
; paste a left side layer
(gimp-image-insert-layer image cube-left -1 0)
(gimp-layer-set-name cube-left "Cube Left")
; edit the left side layer
(set! activelayer (car (gimp-image-get-layer-by-name image "Cube Left")))
(gimp-layer-scale-full activelayer 134 162 1 0)
(gimp-brightness-contrast activelayer -30 0)
; copy the left side for the right side
(set! cube-right (car (gimp-layer-copy activelayer 1)))
(gimp-image-insert-layer image cube-right -1 0)
(gimp-layer-set-name cube-right "Cube Right")
; some more edits for the left side
(gimp-drawable-transform-shear-default activelayer 1 67 0 0)
(gimp-layer-scale-full activelayer 67 115 1 0)
; some more edits for the right side
(set! activelayer (car (gimp-image-get-layer-by-name image "Cube Right")))
(gimp-drawable-transform-shear-default activelayer 1 -67 0 0)
(gimp-brightness-contrast activelayer -97 0)
(gimp-layer-scale-full activelayer 67 115 1 0)
(gimp-layer-resize activelayer 67 115 1 0)
; paste and edit the top layer
(gimp-image-insert-layer image cube-top -1 0)
(gimp-layer-set-name cube-top "Cube Top")
(set! activelayer (car (gimp-image-get-layer-by-name image "Cube Top")))
(gimp-layer-scale-full activelayer 144 144 1 0)
(gimp-drawable-transform-rotate activelayer 2.35619449 1 0 0 0 0 0 1 0)
(gimp-layer-scale-full activelayer 134 67 1 0)
;move the cube top layer to the correct position
(let* (
(layerOffsets (gimp-drawable-offsets (car (gimp-image-get-layer-by-name image "Cube Top"))))
(layerOffsetsX (car layerOffsets))
(layerOffsetsY (cadr layerOffsets))
(activelayer 0)
)
(set! activelayer (car (gimp-image-get-layer-by-name image "Cube Top")))
(gimp-layer-translate activelayer (- 8 layerOffsetsX) (- 1 layerOffsetsY))
)
;move the cube right layer to the correct position
(let* (
(layerOffsets (gimp-drawable-offsets (car (gimp-image-get-layer-by-name image "Cube Right"))))
(layerOffsetsX (car layerOffsets))
(layerOffsetsY (cadr layerOffsets))
(activelayer 0)
)
(set! activelayer (car (gimp-image-get-layer-by-name image "Cube Right")))
(gimp-layer-translate activelayer (- 74 layerOffsetsX) (- 33 layerOffsetsY))
)
;move the cube left layer to the correct position
(let* (
(layerOffsets (gimp-drawable-offsets (car (gimp-image-get-layer-by-name image "Cube Left"))))
(layerOffsetsX (car layerOffsets))
(layerOffsetsY (cadr layerOffsets))
(activelayer 0)
)
(set! activelayer (car (gimp-image-get-layer-by-name image "Cube Left")))
(gimp-layer-translate activelayer (- 9 layerOffsetsX) (- 33 layerOffsetsY))
)
;finishing touches. merging layers.
(set! background (car (gimp-layer-new image 150 150 1 "background" 0 0)))
(gimp-image-insert-layer image background 0 0)
(set! activelayer (car (gimp-image-get-active-layer image)))
(gimp-image-merge-down image (car (gimp-image-get-layer-by-name image "background")) 0)
(gimp-image-merge-down image (car (gimp-image-get-layer-by-name image "Cube Top")) 0)
(gimp-image-merge-down image (car (gimp-image-get-layer-by-name image "Cube Right")) 0)
(set! activelayer (car (gimp-image-get-active-layer image)))
(gimp-layer-set-name activelayer "Cube")
;; (gimp-convert-indexed image 0 0 200 0 0 "ignored")
(gimp-displays-flush)
)
)
(script-fu-register "create-isometric-box-from-layer"
"<Image>/Layer/Cre_at Isometric Cube"
"Create an isometric cube from current layer"
"Jeromy Reimer"
"Copyright (C) 2015 Jeromy Reimer"
"September 13, 2015 v1.0"
"*"
SF-IMAGE "Image" 0
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment