; 210_Shapes_circle-creator.scm ; last modified/tested by Paul Sherman [gimphelp.org] ; Wednesday, 07/15/2020 on GIMP 2.10.20 ;================================================== ; ; Installation: ; This script should be placed in the user or system-wide script folder. ; ; Windows 7/10 ; C:\Program Files\GIMP 2\share\gimp\2.0\scripts ; or ; C:\Users\YOUR-NAME\AppData\Roaming\GIMP\2.10\scripts ; ; ; Linux ; /home/yourname/.config/GIMP/2.10/scripts ; or ; Linux system-wide ; /usr/share/gimp/2.0/scripts ; ;================================================== ; ; LICENSE ; ; 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 . ; ;============================================================== ; Original information ; ; (c)2010 by Paul Sherman ; uploaded to gimphelp.org ; ; initial idea based upon: ; Plugin : draw-circle.scm ; Author : Arch. Giuseppe Conte ;============================================================== (define (210-circle-creator image layer Radius FeatherRadius isSolid circlethick sfcolor) (let* ( (sx 0) (sy 0) (diameter 0) (dx 0) (dy 0) (image-width (car (gimp-drawable-width layer))) (image-height (car (gimp-drawable-height layer))) (center-x (/ image-width 2)) (center-y (/ image-height 2)) (layer1 '()) ) ; make sure thickness of circle outline is not larger than the radius ; just knock it down rather than bother the user... (while (> circlethick Radius) (set! circlethick (- circlethick 1)) ) ; make sure radius fits inside image (width then height) (while (>= Radius (- center-x 2)) (set! Radius (- Radius 1)) ) (while (>= Radius (- center-y 2)) (set! Radius (- Radius 1)) ) ; since size is now asured to fit in the image, ; we can now center it in the image, since circle will be on it' own layer, ; dragging it where wanted is easier than setting x and y coordinates. (set! sx (- center-x Radius)) (set! sy (- center-y Radius)) (set! diameter (* Radius 2)) (set! dx diameter) (set! dy diameter) (set! layer1 (car (gimp-layer-copy layer 1))) (gimp-image-undo-group-start image) (gimp-image-insert-layer image layer1 0 -1) (gimp-image-set-active-layer image layer1) (gimp-edit-clear layer1) (gimp-image-select-ellipse image CHANNEL-OP-REPLACE sx sy dx dy) (gimp-context-set-foreground sfcolor) (gimp-edit-fill layer1 0) ; punch appropriate-size hole in circle, if not solid (if (not (= isSolid 1)) (begin (gimp-selection-shrink image circlethick) (gimp-edit-cut layer1))) (gimp-selection-none image) (plug-in-autocrop-layer 1 image layer1) ; tidy up (gimp-image-undo-group-end image) (gimp-displays-flush) ) ;;let ) ;;def (script-fu-register "210-circle-creator" "Circle Draw" "Draw a circle" "Paul Sherman" "Paul Sherman" "15 October 2010" "*" SF-IMAGE "Image" 0 SF-DRAWABLE "Layer" 0 SF-ADJUSTMENT "Radius" '(140 0 9999 1 10 0 1) SF-ADJUSTMENT "Feather Edge" '(1 0 9999 1 10 0 1) SF-TOGGLE "\nSolid Circle?\n" FALSE SF-ADJUSTMENT "Circle Thickness (used if not solid)" '(1 0 200 1 10 0 1) SF-COLOR "SF-COLOR" '(0 0 0) ) (script-fu-menu-register "210-circle-creator" "/Script-Fu/Shapes")