Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Single Dose - Glossy stroke 3d.py
#1
Bug 
Hello everyone!

Plugin: glossy_stroke_3d.py; (I don't remember where I got it)
Author Eric Leroy;
Date: 2010;

Problem:
The plugin only works once for every Gimp restart.

After a single use, the plugin stops responding. Requiring the Gimp to be restarted so that in just one more instance the plugin will run again.

The plugin can be found in <Image>/Filters/Light and Shadow

Would it be possible to detect the cause of this problem and somehow fix it?
PHP Code:
#! /usr/bin/env python

###############################################################################
# The GIMP -- GNU image manipulation program
# Copyright (c) 1995-2010
# Spencer Kimball, Peter Mattis and the GIMP Development Team
#
# glossystroke3d
# Version 1.2.0 (For the GIMP 2.6), 15 Dec 2010
# Stroke the current selection, create a 3D effect and a dropped shadow
# Adapted from the tutorial: "iText tutorial" of Craig Marshall & Phil Harper. 
# Published in http://gug.criticalhit.dk/tutorials/itext2/
#
# Copyright (c) 2010 Eric Leroy (eral) kelk1@hotmail.com
# -----------------------------------------------------------------------------
#
# 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.
#
###############################################################################

from gimpfu import *

def python_glossy_stroke_3d(
 
   imglayerfg_colorbrushstrokeroundingls_colorls_zglow
 
   brightshinepolishsh_colords_xds_yds_blurds_opac) :

 
   pdb.gimp_undo_push_group_start(img)

 
   # save some values
 
   cur_color pdb.gimp_context_get_foreground()
 
   cur_brush pdb.gimp_context_get_brush()
 
   img_w pdb.gimp_image_width(img)
 
   img_h pdb.gimp_image_height(img)
 
   cur_sel pdb.gimp_selection_save(img)

 
   # stroke the selection
 
   stroke_layer pdb.gimp_layer_new(
 
       img              # IMAGE
 
       img_w            # WIDTH
 
       img_h            # HEIGHT
 
       RGBA_IMAGE       # RGBA TYPE
 
       "stroke_layer"   # NAME
 
       100              # OPACITY
 
       NORMAL_MODE        # NORMAL MODE
 
       )
 
   pdb.gimp_image_add_layer(imgstroke_layer, -1)
 
   pdb.gimp_image_set_active_layer(imgstroke_layer)
 
   pdb.gimp_context_set_foreground(fg_color)
 
   pdb.gimp_context_set_brush(brush)
 
   if stroke == 0:
 
     pdb.gimp_edit_stroke(stroke_layer)
 
   else:
 
     pdb.gimp_edit_bucket_fill(
 
         stroke_layer   # DRAWABLE
 
         FG_BUCKET_FILL # FILL W/ FG
 
         NORMAL_MODE    # NORMAL PAINT MODE
 
         100.0          # 100% opacity
 
         0              # TRESHOLD
 
         False          # DO NOT USE THE COMPOSITE IMG
 
         0              # NOT USED
 
         0                # NOT USED
 
         )


 
   # save selected stroke to channel
 
   pdb.gimp_selection_layer_alpha(stroke_layer)
 
   sel_chan pdb.gimp_selection_save(img)

 
   # create volume
 
   pdb.gimp_selection_shrink(imgrounding)
 
   volume_layer pdb.gimp_layer_new(
 
       img              # IMAGE
 
       img_w            # WIDTH
 
       img_h            # HEIGHT
 
       RGBA_IMAGE       # RGBA TYPE
 
       "volume_layer"   # NAME
 
       100              # OPACITY
 
       NORMAL_MODE        # NORMAL MODE
 
       )
 
   pdb.gimp_image_add_layer(imgvolume_layer, -1)
 
   pdb.gimp_image_set_active_layer(imgvolume_layer)
 
   pdb.gimp_context_set_foreground((255255255))
 
   pdb.gimp_edit_bucket_fill(
 
       volume_layer     # DRAWABLE
 
       FG_BUCKET_FILL   # FILL W/ FG
 
       NORMAL_MODE      # NORMAL PAINT MODE
 
       100.0            # 100% opacity
 
       0                # TRESHOLD
 
       False            # DO NOT USE THE COMPOSITE IMG
 
       0                # NOT USED
 
       0                  # NOT USED
 
       )
 
   pdb.gimp_selection_none(img)
 
   pdb.plug_in_gauss(
 
       img              # IMAGE
 
       volume_layer     # DRAWABLE
 
       rounding 2.0   # HORIZONTAL BLURRING RADIUS
 
       rounding 2.0   # VERTICAL BLURRING RADIUS
 
       0                  # IIR (0) OR RLE (1)
 
       )
 
   pdb.gimp_layer_set_mode(volume_layerOVERLAY_MODE)
 
   volume_layer_copy pdb.gimp_layer_copy(volume_layerTrue)
 
   pdb.gimp_image_add_layer(imgvolume_layer_copy, -1)

 
   # create lighting effect
 
   pdb.gimp_image_set_active_channel(imgsel_chan)
 
   pdb.plug_in_gauss(imgsel_chanrounding 2.0rounding 2.00)
 
   glossy_layer pdb.gimp_layer_new(
 
       img              # IMAGE
 
       img_w            # WIDTH
 
       img_h            # HEIGHT
 
       RGBA_IMAGE       # RGBA TYPE
 
       "glossy_layer"   # NAME
 
       100              # OPACITY
 
       SCREEN_MODE        # SCREEN
 
       )
 
   pdb.gimp_image_add_layer(imgglossy_layer, -1)
 
   pdb.gimp_image_set_active_layer(imgglossy_layer)
 
   pdb.gimp_selection_load(sel_chan)
 
   pdb.gimp_context_set_foreground((000))
 
   pdb.gimp_edit_bucket_fill(
 
       glossy_layer     # DRAWABLE
 
       FG_BUCKET_FILL   # FILL W/ FG
 
       NORMAL_MODE      # NORMAL PAINT MODE
 
       100.0            # 100% opacity
 
       0                # TRESHOLD
 
       False            # DO NOT USE THE COMPOSITE IMG
 
       0                # NOT USED
 
       0                  # NOT USED
 
       )
 
   pdb.gimp_selection_none(img)
 
   if ds_x ds_y:
 
     if ds_y == 0:
 
       ls_x = -ds_x
        ls_y 
0
      else
:
 
       ls_x = -ds_x abs(ds_y)
 
       ls_y = -ds_y abs(ds_y)
 
   else:
 
     if ds_x == 0:
 
       ls_x 0
        ls_y 
= -ds_y
      else
:
 
       ls_x = -ds_x abs(ds_x)
 
       ls_y = -ds_y abs(ds_x)

 
   pdb.plug_in_lighting(
 
       img              # IMAGE
 
       glossy_layer     # DRAWABLE
 
       sel_chan         # BUMP MAP
 
       None             # ENVIRONMENT MAP
 
       True             # ENABLE BUMPMAPPING
 
       False            # DISABLE ENVMAPPING
 
       0                # LINEAR BUMPMAP
 
       1                # DIRECTIONAL LIGHT SOURCE
 
       ls_color         # WHITE LIGHT SOURCE
 
       ls_x             # LIGHT POSITION X
 
       ls_y             # LIGHT POSITION Y
 
       ls_z             # LIGHT POSITION Z
 
       ls_x             # LIGHT DIRECTION X
 
       ls_y             # LIGHT DIRECTION Y
 
       ls_z             # LIGHT DIRECTION Z
 
       glow             # AMBIANT INTENSITY (GLOWING)
 
       bright           # DIFFUSE INTENSITY (BRIGHT)
 
       bright           # DIFFUSE REFLECTIVITY
 
       shine            # SPECULAR REFLECTIVITY (SHINY)
 
       polish           # HIGHLIGHT (POLISHED)
 
       True             # ANTIALIASING
 
       False            # SAME IMAGE
 
       False              # TRANSPARENT BACKGROUND
 
       )

 
   # drop shadow
 
   pdb.gimp_image_set_active_layer(imgstroke_layer)
 
   act_lay pdb.gimp_image_get_active_layer(img)
 
   pdb.gimp_selection_layer_alpha(act_lay)
 
   pdb.script_fu_drop_shadow(
 
       img             # IMAGE
 
       act_lay         # MASK LAYER
 
       ds_x            # X OFFSET
 
       ds_y            # Y OFFSET
 
       ds_blur         # BLUR RADIUS
 
       sh_color        # SHADOW COLOR
 
       ds_opac         # SHADOW LAYER OPACITY
 
       True              # ALLOW RESIZING
 
       )

 
   # restore initial state
 
   pdb.gimp_image_resize(
 
       img             # IMAGE
 
       img_w           # WIDTH
 
       img_h           # HEIGHT
 
       0               # X OFFSET
 
       0                 # Y OFFSET
 
       )
 
   pdb.gimp_selection_load(cur_sel)
 
   pdb.gimp_image_remove_channel(imgcur_sel)
 
   pdb.gimp_image_remove_channel(imgsel_chan)
 
   pdb.gimp_image_set_active_layer(imglayer)
 
   pdb.gimp_context_set_foreground(cur_color)
 
   pdb.gimp_context_set_brush(cur_brush)

 
   pdb.gimp_undo_push_group_end(img)
 
   return

register
(
 
   "python_fu_glossy_stroke_3d",
 
   "Stroke with a glossy 3-D effect and a dropped shadow",
 
   "Stroke with a glossy 3-D effect and a dropped shadow",
 
   "Eric Leroy",
 
   "Eric Leroy",
 
   "2010",
 
   "GlossyStroke 3D",
 
   "*",
 
   [
 
     (PF_IMAGE"image""Input image"None),
 
     (PF_DRAWABLE"drawable""Input layer"None),
 
     (PF_COLOR"fg_color""Color:", (0157255)),
 
     (PF_BRUSH"brush""Stroking brush:"None),
 
     (PF_OPTION"stroke""Selection:"0, ["Stroke""Fill"]),
 
     (PF_SPINNER"rounding""3D amount:"2, (0501)),
 
     (PF_COLOR"ls_color""Light color:", (255255255)),
 
     (PF_SPINNER"ls_z""Light height:"0.5, (0.020.00.1)),
 
     (PF_SPINNER"glow""Glowing:"5.0, (0.01000000.01)),
 
     (PF_SPINNER"bright""Brightness:"1.00, (0.01000000.01)),
 
     (PF_SPINNER"shine""Shiny:"5.0, (0.01000000.01)),
 
     (PF_SPINNER"polish""Polish:"30.0, (0.01000000.01)),
 
     (PF_COLOR"sh_color""Shadow color:", (000)),
 
     (PF_SPINNER"ds_x""Shadow offset X:"10, (-50501)),
 
     (PF_SPINNER"ds_y""Shadow offset Y:"10, (-50501)),
 
     (PF_SPINNER"ds_blur""Shadow blur radius:"15, (0501)),
 
     (PF_SLIDER"ds_opac""Shadow opacity:"80, (01001))
 
   ],
 
   [],
 
   python_glossy_stroke_3d,
 
   menu="<Image>/Filters/Light and Shadow")

main() 
Thanks for listening!
                               .....
Samj PortableGimp 2.10.28 - Win-10 /64.
Reply


Messages In This Thread
Single Dose - Glossy stroke 3d.py - by Krikor - 01-18-2022, 10:54 AM
RE: Single Dose - Glossy stroke 3d.py - by Ofnuts - 01-18-2022, 11:43 AM
RE: Single Dose - Glossy stroke 3d.py - by Krikor - 01-18-2022, 06:44 PM
RE: Single Dose - Glossy stroke 3d.py - by Ofnuts - 01-18-2022, 08:37 PM
RE: Single Dose - Glossy stroke 3d.py - by teapot - 01-25-2022, 10:43 PM
RE: Single Dose - Glossy stroke 3d.py - by Krikor - 01-26-2022, 12:59 AM
RE: Single Dose - Glossy stroke 3d.py - by teapot - 01-26-2022, 06:06 AM
RE: Single Dose - Glossy stroke 3d.py - by Krikor - 01-26-2022, 04:40 PM
RE: Single Dose - Glossy stroke 3d.py - by teapot - 01-26-2022, 07:30 PM
RE: Single Dose - Glossy stroke 3d.py - by Krikor - 01-27-2022, 11:39 AM
RE: Single Dose - Glossy stroke 3d.py - by Krikor - 01-27-2022, 03:05 PM
RE: Single Dose - Glossy stroke 3d.py - by Krikor - 01-27-2022, 06:24 PM
RE: Single Dose - Glossy stroke 3d.py - by Krikor - 01-27-2022, 06:45 PM
RE: Single Dose - Glossy stroke 3d.py - by teapot - 01-27-2022, 10:23 PM
RE: Single Dose - Glossy stroke 3d.py - by Krikor - 01-28-2022, 01:40 AM
RE: Single Dose - Glossy stroke 3d.py - by arifk - 02-15-2022, 05:40 PM
RE: Single Dose - Glossy stroke 3d.py - by arifk - 02-16-2022, 11:03 AM
RE: Single Dose - Glossy stroke 3d.py - by Ofnuts - 02-18-2022, 09:47 AM
RE: Single Dose - Glossy stroke 3d.py - by Ofnuts - 02-16-2022, 12:52 AM

Forum Jump: