Last active
May 18, 2018 12:03
-
-
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 file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 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