It is currently Wed Jun 10, 2026 2:35 pm


All times are UTC - 5 hours [ DST ]



Post new topic Reply to topic  [ 127 posts ]  Go to page 1, 2, 3, 4, 5 ... 7  Next
Author Message
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Thu May 17, 2012 9:54 am  (#11) 
Offline
GimpChat Member
User avatar

Joined: Jan 20, 2012
Posts: 583
Why don't you just create a function that appends a .txt file with a preset formula. Then to read have it read each line as a new preset or have it separated by a special char.

_________________


"In the face of adversity, there's three things: fly, freeze or fight; We're choosing to fight..."- Guy Boucher, Tampa Bay Lighting Head Coach


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Thu May 17, 2012 10:15 am  (#12) 
Offline
GimpChat Member
User avatar

Joined: Jan 20, 2012
Posts: 583
Would seem to be simple.
Create your "formula" have it in a set format. (Not true code but you should be able to understand)
Like this:
saveFormula(String name, String XForm, String YForm, Int pointsAmt){
appendText("formulas.txt",saveFormula());

_________________


"In the face of adversity, there's three things: fly, freeze or fight; We're choosing to fight..."- Guy Boucher, Tampa Bay Lighting Head Coach


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 1:36 pm  (#13) 
Offline
GimpChat Member
User avatar

Joined: Jan 20, 2012
Posts: 583
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Color Grading v1.5.2
# Copyright (c) 2012 John Lakkas
# [email protected]
# Licence: GNU GPLv3  ( http://www.gnu.org/licenses/ )

# This program is distributed WITHOUT ANY WARRANTY.
# You using it in your own risk.

# Version: 1.5.2
# > GIMP 2.8 compatibility fixes
# > Code cleaning
# Version: 1.5.1
# > Code bugfix
# Version: 1.5
# > Information pane for applying the corrections in another program
# > Profiles
# Version: 1.4
# > Major engine refactoring
# > Speed improvement
# Version: 1.3
# > Double version slider/colorwheel availability
# > UI reshaping to look like professional tools
# > Midtones bugfix
# Version: 1.2
# > saturation introduced
# Version: 1.1
# > levels introduced
# Version: 1.0
# > first production version

# Preview function taken from:
# python High Pass Sharpen
# version-1.2 01/04/2010
# Copyright (c) 2008-2010 Paul Sherman
# inspired by layerfx.py by Jonathan Stipe
# and the high-pass-sharpen.scm by Martin Egger

# HSV conversions taken from libgimpcolor/gimphsv.c
# LIBGIMP - The GIMP Library
# Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball

# From the following links:
# http://www.gimphelp.org/python_fu.shtml
# http://www.gimphelp.org/scripts/high_end_sharpen_py.shtml

import gimp, gimpplugin, math
from gimpenums import *
pdb = gimp.pdb
import gtk, gimpui, gimpcolor
from gimpshelf import shelf

import os
#import numpy
import math
import cairo
import ConfigParser
import string

class reuse_init(object):
   previewLayer = None

   def get_layer_pos(self, layer):
      i = 0
      while i < len(self.img.layers):
         if layer == self.img.layers[i]:
            return i
      else:
         i += 1
      return -1


   def layer_exists(self, layer):
      return layer != None and layer in self.img.layers

   def removePreviews(self):
      if self.layer_exists(self.previewLayer):
         self.img.remove_layer(self.previewLayer)
         self.previewLayer = None
      gimp.displays_flush()

   def make_label(self, text):
      label = gtk.Label(text)
      label.set_use_underline(True)
      label.set_alignment(1.0, 0.5)
      label.show()
      return label

   def make_slider_and_spinner(self, init, min, max, step, page, digits):
      controls = {'adj':gtk.Adjustment(init, min, max, step, page), 'slider':gtk.HScale(), 'spinner':gtk.SpinButton()}
      controls['slider'].set_adjustment(controls['adj'])
      controls['slider'].set_draw_value(False)
      controls['spinner'].set_adjustment(controls['adj'])
      controls['spinner'].set_digits(digits)
      controls['slider'].show()
      controls['spinner'].show()
      return controls

   def show_error_msg(self, msg):
      origMsgHandler = pdb.gimp_message_get_handler()
      pdb.gimp_message_set_handler(ERROR_CONSOLE)
      pdb.gimp_message(msg)
      pdb.gimp_message_set_handler(origMsgHandler)

   def stringToColor(self, string):
      colorlist = string[5:-1].split(", ")
      return gimpcolor.RGB(float(colorlist[0]), float(colorlist[1]), float(colorlist[2]), float(colorlist[3]))


class color_grading_cw(reuse_init):
   def __init__(self, runmode, img, drawable, shh, shs, shlev, midh, mids, midlev, highh, highs, highlev, satlev):
      self.img = img
      self.drawable = drawable
      #self.shelfkey = 'layerfx-drop-shadow'
      #print "runmode:"
      #print runmode
      if (runmode ==0 ):
         self.showDialog()
      else:
         fxlayer = self.makeLayer(self.img, self.drawable,
                           shh,
                           shs,
                           shlev,
                           midh,
                           mids,
                           midlev,
                           highh,
                           highs,
                           highlev,
                           satlev
                           )

   def showDialog(self):
      self.dialog = gimpui.Dialog("Color Grading", "colorgradingdialog")

      #notebook page1

      self.table = gtk.Table(5, 3, True)
      self.table.set_homogeneous(False)
      self.table.set_row_spacings(8)
      self.table.set_col_spacings(8)
      self.table.set_border_width(10)
      self.table.show()
      
      filename = os.path.join(os.path.expanduser("~"), ".gimp-2.8", "plug-ins", "colorwheel_150.png")
      self.pixbuf = gtk.gdk.pixbuf_new_from_file(filename)
      
      self.wheel_sh = ColorWheel(self.pixbuf, 75, 75, 75)
      self.wheel_sh.show()
      self.wheel_mid = ColorWheel(self.pixbuf, 75, 75, 75)
      self.wheel_mid.show()
      self.wheel_high = ColorWheel(self.pixbuf, 75, 75, 75)
      self.wheel_high.show()
      self.table.attach(self.wheel_sh, 0, 1, 1, 2)
      self.table.attach(self.wheel_mid, 1, 2, 1, 2)
      self.table.attach(self.wheel_high, 2, 3, 1, 2)
      
      self.shlev_label = self.make_label("Shadows level:")
      self.midlev_label = self.make_label("Midtones level:")
      self.highlev_label = self.make_label("Highlights level:")
      self.satlev_label = self.make_label("Saturation:")

      self.table.attach(self.shlev_label, 0, 1, 2, 3)
      self.table.attach(self.midlev_label, 1, 2, 2, 3)
      self.table.attach(self.highlev_label, 2, 3, 2, 3)
      self.table.attach(self.satlev_label, 0, 1, 5, 6)

      self.shlev_spinner = self.make_slider_and_spinner(0, -100, 100, 1, 1, 0)
      self.midlev_spinner = self.make_slider_and_spinner(0, -100, 100, 1, 1, 0)
      self.highlev_spinner = self.make_slider_and_spinner(0, -100, 100, 1, 1, 0)
      self.satlev_spinner = self.make_slider_and_spinner(0, -100, 100, 1, 1, 0)
      
      self.shlev_spinner['adj'].set_value(0)
      self.midlev_spinner['adj'].set_value(0)
      self.highlev_spinner['adj'].set_value(0)
      self.satlev_spinner['adj'].set_value(0)
      
      self.shlev_label.set_mnemonic_widget(self.shlev_spinner['spinner'])
      self.midlev_label.set_mnemonic_widget(self.midlev_spinner['spinner'])
      self.highlev_label.set_mnemonic_widget(self.highlev_spinner['spinner'])
      self.satlev_label.set_mnemonic_widget(self.satlev_spinner['spinner'])
      
      self.table.attach(self.shlev_spinner['slider'], 0, 1, 3, 4)
      self.table.attach(self.midlev_spinner['slider'], 1, 2, 3, 4)
      self.table.attach(self.highlev_spinner['slider'], 2, 3, 3, 4)
      self.table.attach(self.satlev_spinner['slider'], 1, 2, 5, 6)

      self.table.attach(self.shlev_spinner['spinner'], 0, 1, 4, 5)
      self.table.attach(self.midlev_spinner['spinner'], 1, 2, 4, 5)
      self.table.attach(self.highlev_spinner['spinner'], 2, 3, 4, 5)
      self.table.attach(self.satlev_spinner['spinner'], 2, 3, 5, 6)
      
      #notebook page2

      self.table2 = gtk.Table(13, 2, True)
      self.table2.set_homogeneous(False)
      self.table2.set_row_spacings(8)
      self.table2.set_col_spacings(8)
      self.table2.set_border_width(10)
      self.table2.show()
      
      #self.table2.set_col_spacing(1, 40)
      
      self.sh_hsv_label = self.make_label("Shadows HSV:")
      self.mid_hsv_label = self.make_label("Midtones HSV:")
      self.high_hsv_label = self.make_label("Highlights HSV:")
      
      self.sh_hsvv_label = self.make_label("1,1,1")
      self.mid_hsvv_label = self.make_label("1,1,1")
      self.high_hsvv_label = self.make_label("1,1,1")
      self.sh_hsvv_label.set_alignment(0.0, 0.5)
      self.mid_hsvv_label.set_alignment(0.0, 0.5)
      self.high_hsvv_label.set_alignment(0.0, 0.5)
      
      self.rch_label = self.make_label("Red Levels:")
      self.gch_label = self.make_label("Green Levels:")
      self.bch_label = self.make_label("Blue Levels:")

      self.rinp_label = self.make_label("Input:")
      self.ginp_label = self.make_label("Input:")
      self.binp_label = self.make_label("Input:")
      self.rout_label = self.make_label("Output:")
      self.gout_label = self.make_label("Output:")
      self.bout_label = self.make_label("Output:")
      
      self.sat_label = self.make_label("Saturation:")
      self.satv_label = self.make_label("1")
      self.satv_label.set_alignment(0.0, 0.5)
      
      self.rinpv_label = self.make_label("1")
      self.ginpv_label = self.make_label("1")
      self.binpv_label = self.make_label("1")
      self.routv_label = self.make_label("1")
      self.goutv_label = self.make_label("1")
      self.boutv_label = self.make_label("1")
      
      self.rinpv_label.set_alignment(0.0, 0.5)
      self.ginpv_label.set_alignment(0.0, 0.5)
      self.binpv_label.set_alignment(0.0, 0.5)
      self.routv_label.set_alignment(0.0, 0.5)
      self.goutv_label.set_alignment(0.0, 0.5)
      self.boutv_label.set_alignment(0.0, 0.5)
      
      self.table2.attach(self.sh_hsv_label, 0, 1, 0, 1)
      self.table2.attach(self.mid_hsv_label, 0, 1, 1, 2)
      self.table2.attach(self.high_hsv_label, 0, 1, 2, 3)
      self.table2.attach(self.sh_hsvv_label, 1, 2, 0, 1)
      self.table2.attach(self.mid_hsvv_label, 1, 2, 1, 2)
      self.table2.attach(self.high_hsvv_label, 1, 2, 2, 3)
      
      self.table2.attach(self.rch_label, 0, 1, 4, 5)
      self.table2.attach(self.rinp_label, 0, 1, 5, 6)
      self.table2.attach(self.rout_label, 0, 1, 6, 7)
      self.table2.attach(self.gch_label, 0, 1, 7, 8)
      self.table2.attach(self.ginp_label, 0, 1, 8, 9)
      self.table2.attach(self.gout_label, 0, 1, 9, 10)
      self.table2.attach(self.bch_label, 0, 1, 10, 11)
      self.table2.attach(self.binp_label, 0, 1, 11, 12)
      self.table2.attach(self.bout_label, 0, 1, 12, 13)
      self.table2.attach(self.sat_label, 0, 1, 13, 14)
      
      self.table2.attach(self.rinpv_label, 1, 2, 5, 6)
      self.table2.attach(self.routv_label, 1, 2, 6, 7)
      self.table2.attach(self.ginpv_label, 1, 2, 8, 9)
      self.table2.attach(self.goutv_label, 1, 2, 9, 10)
      self.table2.attach(self.binpv_label, 1, 2, 11, 12)
      self.table2.attach(self.boutv_label, 1, 2, 12, 13)
      self.table2.attach(self.satv_label, 1, 2, 13, 14)
      
      #notebook page3
      
      self.table3 = gtk.Table(5, 1, True)
      self.table3.set_homogeneous(False)
      self.table3.set_row_spacings(8)
      self.table3.set_col_spacings(8)
      self.table3.set_border_width(10)
      self.table3.show()
      
      self.liststore = gtk.ListStore(int, str)
      #self.liststore.append([1, 'Profile 1'])
      self.prof_list = gtk.TreeView(self.liststore)
      cell_renderer = gtk.CellRendererText()
      column0 = gtk.TreeViewColumn('id', cell_renderer, text=0)
      column1 = gtk.TreeViewColumn('Profile Name', cell_renderer, text=1)
      column0.set_resizable(True)
      column1.set_resizable(True)
      self.prof_list.append_column(column0)
      self.prof_list.append_column(column1)
      self.prof_list.connect("cursor-changed", self.prof_list_selection)
      self.prof_list.show()
      self.selected_profile = -1
      
      self.table3.attach(self.prof_list, 0, 1, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND)
      
      self.prof_name_text = gtk.Entry()
      self.prof_name_text.show()
      
      self.load_profile_button = gtk.Button("Load Profile")
      self.saveas_profile_button = gtk.Button("Save As Profile")
      self.delete_profile_button = gtk.Button("Delete Profile")
      self.load_profile_button.connect("clicked", self.load_sel_profile)
      self.saveas_profile_button.connect("clicked", self.saveas_sel_profile)
      self.delete_profile_button.connect("clicked", self.delete_sel_profile)
      self.load_profile_button.show()
      self.saveas_profile_button.show()
      self.delete_profile_button.show()
      
      self.table3.attach(self.load_profile_button, 0, 1, 1, 2, gtk.FILL, gtk.FILL)
      self.table3.attach(self.delete_profile_button, 0, 1, 2, 3, gtk.FILL, gtk.FILL)
      self.table3.attach(self.saveas_profile_button, 0, 1, 3, 4, gtk.FILL, gtk.FILL)
      self.table3.attach(self.prof_name_text, 0, 1, 4, 5, gtk.FILL, gtk.FILL)
      
      
      #notebook definition
      
      self.notebook = gtk.Notebook()
      self.notebook.connect("switch-page", self.refresh_info)
      self.notebook.show()
      
      self.nb_label1 = gtk.Label('Color Wheels')
      self.nb_label1.show()
      self.nb_label2 = gtk.Label('Information')
      self.nb_label2.show()
      self.nb_label3 = gtk.Label('Profiles')
      self.nb_label3.show()

      self.notebook.append_page(self.table, self.nb_label1)
      self.notebook.append_page(self.table2, self.nb_label2)
      self.notebook.append_page(self.table3, self.nb_label3)
      
      #Profile loading: If file does not exist create one.
      self.parser = ConfigParser.SafeConfigParser(
         defaults={
            'name':'Default profile',
            'shadowshsv': '0.0|0.0|0.0',
            'midtoneshsv': '0.0|0.0|0.0',
            'highlightshsv': '0.0|0.0|0.0',
            'redlevels_in': '0|1.0|255',
            'greenlevels_in': '0|1.0|255',
            'bluelevels_in': '0|1.0|255',
            'redlevels_out': '0|255',
            'greenlevels_out': '0|255',
            'bluelevels_out': '0|255',
            'saturation': '0',
            'shadowslev': '0',
            'midtoneslev': '0',
            'highlightslev': '0'
            })
      
      self.profile_filename = os.path.join(os.path.expanduser("~"), ".gimp-2.8", "plug-ins", "colorgrading.profiles")
      if (os.path.isfile(self.profile_filename) == True):
         self.parser.read(self.profile_filename)
      else:
         self.parser.add_section('Profiles')
         self.parser.set('Profiles', 'list', 'DEFAULT')
         self.parser.set('Profiles', 'userprofileprefix', 'Prof')
         self.parser.set('Profiles', 'integercurrent', '0')
         
         f = file(self.profile_filename, 'w')
         self.parser.write(f)
         f.close()
         
      self.refresh_prof_list()
      self.load_profile('DEFAULT')
      
      # Rest UI loading stuff
      
      self.dialog.vbox.hbox1 = gtk.HBox(False, 7)
      self.dialog.vbox.hbox1.show()
      self.dialog.vbox.pack_start(self.dialog.vbox.hbox1, True, True, 7)
      self.dialog.vbox.hbox1.pack_start(self.notebook, True, True, 7)
      
      reset_button = gtk.Button("_Reset")
      reset_button.connect("clicked", self.resetbutton)
      reset_button.show()
      
      self.preview_button = gtk.Button("Preview")
      self.preview_button.connect("clicked", self.preview)
      self.preview_button.set_size_request(100, -1)
      self.preview_button.show()
      
      if gtk.alternative_dialog_button_order():
         ok_button = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
         cancel_button = self.dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
         self.dialog.action_area.add(reset_button)
         self.dialog.action_area.add(self.preview_button)
      else:
         self.dialog.action_area.add(self.preview_button)
         self.dialog.action_area.add(reset_button)
         cancel_button = self.dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
         ok_button = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
      ok_button.connect("clicked", self.okbutton)
      
      self.dialog.show()
      self.dialog.run()
      self.removePreviews()
      
   
   def refresh_info(self, widget, page, page_num):
      if (page_num == 1):
         sh_hsv = self.wheel_sh.get_wheel_hsv()
         mid_hsv = self.wheel_mid.get_wheel_hsv()
         high_hsv = self.wheel_high.get_wheel_hsv()
      
         sh_hsv_str = "{0}, {1}, {2}".format( str(round(sh_hsv[0],1)), str(round(sh_hsv[1],3)), str(round(sh_hsv[2],2)) )
         mid_hsv_str = "{0}, {1}, {2}".format( str(round(mid_hsv[0],1)), str(round(mid_hsv[1],3)), str(round(mid_hsv[2],2)) )
         high_hsv_str = "{0}, {1}, {2}".format( str(round(high_hsv[0],1)), str(round(high_hsv[1],3)), str(round(high_hsv[2],2)) )
         
         self.sh_hsvv_label.set_text(sh_hsv_str)
         self.mid_hsvv_label.set_text(mid_hsv_str)
         self.high_hsvv_label.set_text(high_hsv_str)
         
         rgbshift = self.convert_to_rgbshifts(
                                 self.wheel_sh.hsv[0],
                                 self.wheel_sh.hsv[1],
                                 self.shlev_spinner['adj'].get_value(),
                                 self.wheel_mid.hsv[0],
                                 self.wheel_mid.hsv[1],
                                 self.midlev_spinner['adj'].get_value(),
                                 self.wheel_high.hsv[0],
                                 self.wheel_high.hsv[1],
                                 self.highlev_spinner['adj'].get_value(),
                                 self.satlev_spinner['adj'].get_value()
                                 )
         
         levels = self.convert_to_levels(rgbshift[0], rgbshift[1], rgbshift[2], rgbshift[3], rgbshift[4], rgbshift[5], rgbshift[6], rgbshift[7], rgbshift[8], rgbshift[9], rgbshift[10], rgbshift[11], rgbshift[12])
         
         redinp = "{0}  {1}  {2}".format( str(int(levels[0][0])), str(round(levels[0][2],2)), str(int(levels[0][1])) )
         redout = "{0}  {1}".format( str(int(levels[0][3])), str(int(levels[0][4])) )
         greeninp = "{0}  {1}  {2}".format( str(int(levels[1][0])), str(round(levels[1][2],2)), str(int(levels[1][1])) )
         greenout = "{0}  {1}".format( str(int(levels[1][3])), str(int(levels[1][4])) )
         blueinp = "{0}  {1}  {2}".format( str(int(levels[2][0])), str(round(levels[2][2],2)), str(int(levels[2][1])) )
         blueout = "{0}  {1}".format( str(int(levels[2][3])), str(int(levels[2][4])) )
         sat = str(int(levels[3][0]))
         
         self.rinpv_label.set_text(redinp)
         self.routv_label.set_text(redout)
         self.ginpv_label.set_text(greeninp)
         self.goutv_label.set_text(greenout)
         self.binpv_label.set_text(blueinp)
         self.boutv_label.set_text(blueout)
         self.satv_label.set_text(sat)
         
   
   def refresh_prof_list(self):
      self.profiles = string.split(self.parser.get('Profiles', 'list'), '|')
      self.profile_int = int(self.parser.get('Profiles', 'integercurrent'))
      self.liststore.clear()
      n = len(self.profiles)
      for i in range(0, n):
         name = self.parser.get(self.profiles[i], 'name')
         self.liststore.append([i, name])
   
   
   def prof_list_selection(self, widget):
      treeselection = widget.get_selection()
      selection = treeselection.get_selected()
      treemodel = selection[0]
      treeiter = selection[1]
      self.selected_profile = treemodel.get_value(treeiter, 0)
      #print treemodel.get_value(treeiter, 0)
      self.prof_name_text.set_text(treemodel.get_value(treeiter, 1))
      
      if (self.selected_profile == 0):
         self.delete_profile_button.set_sensitive(False)
      else:
         self.delete_profile_button.set_sensitive(True)
   
   
   def load_profile(self, profile_internal_name):
      hsv = string.split(self.parser.get(profile_internal_name, 'shadowshsv'), '|')
      sh_hsv = [float(hsv[0]), float(hsv[1]), float(hsv[2])]
      hsv = string.split(self.parser.get(profile_internal_name, 'midtoneshsv'), '|')
      mid_hsv = [float(hsv[0]), float(hsv[1]), float(hsv[2])]
      hsv = string.split(self.parser.get(profile_internal_name, 'highlightshsv'), '|')
      high_hsv = [float(hsv[0]), float(hsv[1]), float(hsv[2])]
      
      self.shlev_spinner['adj'].set_value( float(self.parser.get(profile_internal_name, 'shadowslev')) )
      self.midlev_spinner['adj'].set_value( float(self.parser.get(profile_internal_name, 'midtoneslev')) )
      self.highlev_spinner['adj'].set_value( float(self.parser.get(profile_internal_name, 'highlightslev')) )
      self.satlev_spinner['adj'].set_value( float(self.parser.get(profile_internal_name, 'saturation')) )
      
      self.wheel_sh.set_wheel_hsv(sh_hsv)
      self.wheel_mid.set_wheel_hsv(mid_hsv)
      self.wheel_high.set_wheel_hsv(high_hsv)
   
   
   def load_sel_profile(self, widget):
      self.load_profile(self.profiles[self.selected_profile])
      self.wheel_sh.refresh_view()
      self.wheel_mid.refresh_view()
      self.wheel_high.refresh_view()
   
   
   def saveas_sel_profile(self, widget):
      exists = False
      internal_name = ""
      profile_name = self.prof_name_text.get_text()
      
      if (profile_name != ""):
         n = len(self.profiles)
         for i in range(0, n):
            name = self.parser.get(self.profiles[i], 'name')
            if (profile_name == name):
               exists = True
               internal_name = self.profiles[i]
               break
      
         if (exists == False):
            internal_name = self.parser.get('Profiles', 'userprofileprefix') + str( int(self.parser.get('Profiles', 'integercurrent')) +1 )
            self.parser.add_section(internal_name)
            self.profile_int = self.profile_int + 1
            self.parser.set('Profiles', 'integercurrent', str(self.profile_int))
            self.profiles = self.profiles.append(internal_name)
            self.parser.set('Profiles', 'list', self.parser.get('Profiles', 'list') + "|" + internal_name )
      
         self.parser.set(internal_name, 'name', profile_name)
      
         sh_hsv = self.wheel_sh.get_wheel_hsv()
         mid_hsv = self.wheel_mid.get_wheel_hsv()
         high_hsv = self.wheel_high.get_wheel_hsv()
      
         sh_hsv_str = "{0}|{1}|{2}".format( str(round(sh_hsv[0],1)), str(round(sh_hsv[1],3)), str(round(sh_hsv[2],2)) )
         mid_hsv_str = "{0}|{1}|{2}".format( str(round(mid_hsv[0],1)), str(round(mid_hsv[1],3)), str(round(mid_hsv[2],2)) )
         high_hsv_str = "{0}|{1}|{2}".format( str(round(high_hsv[0],1)), str(round(high_hsv[1],3)), str(round(high_hsv[2],2)) )
      
         rgbshift = self.convert_to_rgbshifts(
                                 self.wheel_sh.hsv[0],
                                 self.wheel_sh.hsv[1],
                                 self.shlev_spinner['adj'].get_value(),
                                 self.wheel_mid.hsv[0],
                                 self.wheel_mid.hsv[1],
                                 self.midlev_spinner['adj'].get_value(),
                                 self.wheel_high.hsv[0],
                                 self.wheel_high.hsv[1],
                                 self.highlev_spinner['adj'].get_value(),
                                 self.satlev_spinner['adj'].get_value()
                                 )
         
         levels = self.convert_to_levels(rgbshift[0], rgbshift[1], rgbshift[2], rgbshift[3], rgbshift[4], rgbshift[5], rgbshift[6], rgbshift[7], rgbshift[8], rgbshift[9], rgbshift[10], rgbshift[11], rgbshift[12])
      
         redinp = "{0}|{1}|{2}".format( str(int(levels[0][0])), str(round(levels[0][2],2)), str(int(levels[0][1])) )
         redout = "{0}|{1}".format( str(int(levels[0][3])), str(int(levels[0][4])) )
         greeninp = "{0}|{1}|{2}".format( str(int(levels[1][0])), str(round(levels[1][2],2)), str(int(levels[1][1])) )
         greenout = "{0}|{1}".format( str(int(levels[1][3])), str(int(levels[1][4])) )
         blueinp = "{0}|{1}|{2}".format( str(int(levels[2][0])), str(round(levels[2][2],2)), str(int(levels[2][1])) )
         blueout = "{0}|{1}".format( str(int(levels[2][3])), str(int(levels[2][4])) )
         sat = str(int(levels[3][0]))
      
         self.parser.set(internal_name, 'shadowshsv', sh_hsv_str)
         self.parser.set(internal_name, 'midtoneshsv', mid_hsv_str)
         self.parser.set(internal_name, 'highlightshsv', high_hsv_str)
      
         self.parser.set(internal_name, 'redlevels_in', redinp)
         self.parser.set(internal_name, 'greenlevels_in', greeninp)
         self.parser.set(internal_name, 'bluelevels_in', blueinp)
         self.parser.set(internal_name, 'redlevels_out', redout)
         self.parser.set(internal_name, 'greenlevels_out', greenout)
         self.parser.set(internal_name, 'bluelevels_out', blueout)
      
         self.parser.set(internal_name, 'saturation', sat)
         self.parser.set(internal_name, 'shadowslev', str(self.shlev_spinner['adj'].get_value()))
         self.parser.set(internal_name, 'midtoneslev', str(self.midlev_spinner['adj'].get_value()))
         self.parser.set(internal_name, 'highlightslev', str(self.highlev_spinner['adj'].get_value()))
      
         f = file(self.profile_filename, 'w')
         self.parser.write(f)
         f.close()
      
         self.refresh_prof_list()
   
   
   def delete_sel_profile(self, widget):
      self.parser.remove_section(self.profiles[self.selected_profile])
      
      new_profiles = ""
      
      n = len(self.profiles)
      j = 0
      for i in range(0, n):
         if (self.selected_profile != i):
            j = j +1
            if (j != n-1):
               new_profiles = new_profiles + self.profiles[i] + "|"
            else:
               new_profiles = new_profiles + self.profiles[i]
      
      self.parser.set('Profiles', 'list', new_profiles)
      self.profiles = string.split(self.parser.get('Profiles', 'list'), '|')
      
      f = file(self.profile_filename, 'w')
      self.parser.write(f)
      f.close()
      
      self.refresh_prof_list()
   
   
   def okbutton(self, widget):
      # remove old preview layer if it exists
      if self.layer_exists(self.previewLayer):
         self.img.remove_layer(self.previewLayer)
         self.previewLayer = None

      # then build new layer with current settings to actually impliment...
      fxlayer = self.makeLayer(self.img, self.drawable,
         self.wheel_sh.hsv[0],
         self.wheel_sh.hsv[1],
         self.shlev_spinner['adj'].get_value(),
         self.wheel_mid.hsv[0],
         self.wheel_mid.hsv[1],
         self.midlev_spinner['adj'].get_value(),
         self.wheel_high.hsv[0],
         self.wheel_high.hsv[1],
         self.highlev_spinner['adj'].get_value(),
         self.satlev_spinner['adj'].get_value()
         )


   def resetbutton(self, widget):
      self.wheel_sh.reset()
      self.shlev_spinner['adj'].set_value(0)
      self.wheel_mid.reset()
      self.midlev_spinner['adj'].set_value(0)
      self.wheel_high.reset()
      self.highlev_spinner['adj'].set_value(0)
      self.satlev_spinner['adj'].set_value(0)


   def preview(self, widget):
      ptxt = self.preview_button.get_label()

      if self.layer_exists(self.previewLayer):
         self.img.remove_layer(self.previewLayer)
         gimp.displays_flush()

      else:
         self.previewLayer = self.makeLayer(self.img, self.drawable,
            self.wheel_sh.hsv[0],
            self.wheel_sh.hsv[1],
            self.shlev_spinner['adj'].get_value(),
            self.wheel_mid.hsv[0],
            self.wheel_mid.hsv[1],
            self.midlev_spinner['adj'].get_value(),
            self.wheel_high.hsv[0],
            self.wheel_high.hsv[1],
            self.highlev_spinner['adj'].get_value(),
            self.satlev_spinner['adj'].get_value()
            )


      if ptxt == "Preview":
         ptxt = "Undo Preview"
      else:
         ptxt = "Preview"
      self.preview_button.set_label(ptxt)
   
   
   def convert_to_rgbshifts(self, shh, shs, shlev, midh, mids, midlev, highh, highs, highlev, satlev):
      hsvsh = [shh, 1.0, shs * 0.40]
      hsvmid = [midh, 1.0, mids * 0.40]
      hsvhigh = [highh, 1.0, highs * 0.40]
      
      hsvtool = HSVbasics()
      
      rgbsh = hsvtool.gimp_hsv_to_rgb4(hsvsh)
      rgbmid = hsvtool.gimp_hsv_to_rgb4(hsvmid)
      rgbhigh = hsvtool.gimp_hsv_to_rgb4(hsvhigh)
      
      crsh = rgbsh[0]
      mgsh = rgbsh[1]
      ybsh = rgbsh[2]
      crmid = rgbmid[0]
      mgmid = rgbmid[1]
      ybmid = rgbmid[2]
      crhigh = rgbhigh[0]
      mghigh = rgbhigh[1]
      ybhigh = rgbhigh[2]
      return [crsh, mgsh, ybsh, shlev, crmid, mgmid, ybmid, midlev, crhigh, mghigh, ybhigh, highlev, satlev]
      
   
   def convert_to_levels(self, crsh, mgsh, ybsh, shlev, crmid, mgmid, ybmid, midlev, crhigh, mghigh, ybhigh, highlev, satlev):
      lowinred=0
      hiinred=255
      lowingreen=0
      hiingreen=255
      lowinblue=0
      hiinblue=255
      
      gammared=0.
      gammagreen=0.
      gammablue=0.
      
      lowoutred=0
      hioutred=255
      lowoutgreen=0
      hioutgreen=255
      lowoutblue=0
      hioutblue=255
      
      lowred = 0
      lowgreen = 0
      lowblue = 0
      
      lowin=0
      hiin=255
      lowout=0
      hiout=255
      gamma=1.

      #MIDTONES
      if (crmid > 0.):
         gammared = gammared +0.4*crmid/100.
         gammagreen = gammagreen -0.3*crmid/100.
         gammablue = gammablue -0.3*crmid/100.
      if (crmid < 0.):
         gammared = gammared +0.3*crmid/100.
         gammagreen = gammagreen -0.4*crmid/100.
         gammablue = gammablue -0.4*crmid/100.
      if (mgmid > 0.):
         gammared = gammared -0.3*mgmid/100.
         gammagreen = gammagreen +0.4*mgmid/100.
         gammablue = gammablue -0.3*mgmid/100.
      if (mgmid < 0.):
         gammared = gammared -0.4*mgmid/100.
         gammagreen = gammagreen +0.3*mgmid/100.
         gammablue = gammablue -0.4*mgmid/100.
      if (ybmid > 0.):
         gammared = gammared -0.3*ybmid/100.
         gammagreen = gammagreen -0.3*ybmid/100.
         gammablue = gammablue +0.4*ybmid/100.
      if (ybmid < 0.):
         gammared = gammared -0.4*ybmid/100.
         gammagreen = gammagreen -0.4*ybmid/100.
         gammablue = gammablue +0.3*ybmid/100.
      gammared = gammared +1.
      gammagreen = gammagreen +1.
      gammablue = gammablue +1.
      
      if (midlev > 0.):
         gammared = gammared +0.4*midlev/100.
         gammagreen = gammagreen +0.4*midlev/100.

         gammablue = gammablue +0.4*midlev/100.
      if (midlev < 0.):
         gammared = gammared +0.3*midlev/100.
         gammagreen = gammagreen +0.3*midlev/100.
         gammablue = gammablue +0.3*midlev/100.
      
      
      #SHADOWS
      crsh = crsh * 0.3
      mgsh = mgsh * 0.3
      ybsh = ybsh * 0.3
      
      if (crsh>0):
         lowingreen = lowingreen + crsh
         lowinblue = lowinblue + crsh
         lowoutred = lowoutred + crsh
      else:
         lowinred = lowinred - crsh
         lowoutgreen = lowoutgreen - crsh
         lowoutblue = lowoutblue - crsh
      
      if (mgsh>0):
         lowinred = lowinred + mgsh
         lowinblue = lowinblue + mgsh
         lowoutgreen = lowoutgreen + mgsh
      else:
         lowingreen = lowingreen - mgsh
         lowoutred = lowoutred - mgsh
         lowoutblue = lowoutblue - mgsh
      
      if (ybsh>0):
         lowinred = lowinred + ybsh
         lowingreen = lowingreen + ybsh
         lowoutblue = lowoutblue + ybsh
      else:
         lowinblue = lowinblue - ybsh
         lowoutred = lowoutred - ybsh
         lowoutgreen = lowoutgreen - ybsh
      
      
      if (shlev>0):
         lowoutred = lowoutred + shlev
         lowoutgreen = lowoutgreen + shlev
         lowoutblue = lowoutblue + shlev
      if (shlev<0):
         lowinred = lowinred - shlev
         lowingreen = lowingreen - shlev
         lowinblue = lowinblue - shlev
      
      
      #HIGHLIGHTS
      crhigh = crhigh * 0.3
      mghigh = mghigh * 0.3
      ybhigh = ybhigh * 0.3
      
      if (crhigh>0):
         hiinred = hiinred - crhigh
         hioutgreen = hioutgreen - crhigh
         hioutblue = hioutgreen - crhigh
      else:
         hiingreen = hiingreen + crhigh
         hiinblue = hiinblue + crhigh
         hioutred = hioutred + crhigh
      
      if (mghigh>0):
         hiingreen = hiingreen - mghigh
         hioutred = hioutred - mghigh
         hioutblue = hioutblue - mghigh
      else:
         hiinred = hiinred + mghigh
         hiinblue = hiinblue + mghigh
         hioutgreen = hioutgreen + mghigh
      
      if (ybhigh>0):
         hiinblue = hiinblue - ybhigh
         hioutred = hioutred - ybhigh
         hioutgreen = hioutgreen - ybhigh
      else:
         hiinred = hiinred + ybhigh
         hiingreen = hiingreen + ybhigh
         hioutblue = hioutblue + ybhigh
      
      if (highlev>0):
         hiinred = hiinred - highlev

         hiingreen = hiingreen - highlev
         hiinblue = hiinblue - highlev
      if (highlev<0):
         hioutred = hioutred + highlev
         hioutgreen = hioutgreen + highlev
         hioutblue = hioutblue + highlev
   
      return [[lowinred, hiinred, gammared, lowoutred, hioutred], [lowingreen, hiingreen, gammagreen, lowoutgreen, hioutgreen], [lowinblue, hiinblue, gammablue, lowoutblue, hioutblue], [satlev]]


   def makeLayer(self, img, drawable, shh, shs, shlev, midh, mids, midlev, highh, highs, highlev, satlev):
      pdb.gimp_image_undo_group_start(img)
      tmpLayer1 = pdb.gimp_layer_copy(drawable, True)
      pdb.gimp_image_add_layer(img, tmpLayer1, -1)
      tmpLayer1.name = drawable.name + " Color Grading"

      channelred=1
      channelgreen=2
      channelblue=3      
      
      rgbshift = self.convert_to_rgbshifts(shh, shs, shlev, midh, mids, midlev, highh, highs, highlev, satlev)
      levels = self.convert_to_levels(rgbshift[0], rgbshift[1], rgbshift[2], rgbshift[3], rgbshift[4], rgbshift[5], rgbshift[6], rgbshift[7], rgbshift[8], rgbshift[9], rgbshift[10], rgbshift[11], rgbshift[12])
      
      pdb.gimp_levels(tmpLayer1, channelred, levels[0][0], levels[0][1], levels[0][2], levels[0][3], levels[0][4])
      pdb.gimp_levels(tmpLayer1, channelgreen, levels[1][0], levels[1][1], levels[1][2], levels[1][3], levels[1][4])
      pdb.gimp_levels(tmpLayer1, channelblue, levels[2][0], levels[2][1], levels[2][2], levels[2][3], levels[2][4])
      pdb.gimp_hue_saturation(tmpLayer1, 0, 0., 0., levels[3][0])

      gimp.displays_flush()
      pdb.gimp_image_undo_group_end(img)
      return tmpLayer1


class ColorWheel(gtk.DrawingArea):
   def __init__(self, pixbuf1, centerx, centery, radius):
      gtk.DrawingArea.__init__(self)
      self.connect('expose-event', self.do_expose )
      self.connect("motion_notify_event", self.mouse_mv)
      self.set_events(gtk.gdk.EXPOSURE_MASK
         | gtk.gdk.LEAVE_NOTIFY_MASK
         | gtk.gdk.BUTTON_PRESS_MASK
         | gtk.gdk.POINTER_MOTION_MASK
         | gtk.gdk.POINTER_MOTION_HINT_MASK)
      self.set_size_request(2*radius, 2*radius)
      
      self.pixbuf = pixbuf1
      self.centerx = centerx
      self.centery = centery
      self.radius = radius
      self.x = centerx
      self.y = centery

      self.hsv = [0., 0., 1.]
   
   def mouse_mv(self, widget, event):
      if event.is_hint:
         x, y, state = event.window.get_pointer()
         
      else:
         x = event.x
         y = event.y
         state = event.state

      if state & gtk.gdk.BUTTON1_MASK:
         centerx = self.centerx
         centery = self.centery
         radius = self.radius

         x2 = (float(x) - float(centerx)) * (float(x) - float(centerx))
         y2 = (float(centery) - float(y)) * (float(centery) - float(y))
         r2 = float(radius) * float(radius)
         if (x2 + y2 < r2):
            self.x = x
            self.y = y
            self.refresh_view()
            #print self.get_wheel_hsv()
   
   def refresh_view(self):
      centerx = self.centerx
      centery = self.centery
      radius = self.radius
      x = self.x
      y = self.y

      x2 = (float(x) - float(centerx)) * (float(x) - float(centerx))
      y2 = (float(centery) - float(y)) * (float(centery) - float(y))
      r2 = float(radius) * float(radius)
      if (x2 + y2 < r2):
         dist = math.sqrt( ( x2 + y2 ) / r2 )

         theta = math.atan2(float(centery) - float(y), float(x) - float(centerx))
         if theta > 0:
            h = theta
            h = h / (2*math.pi)
         else:
            h = 2*math.pi + theta
            h = h / (2*math.pi)
         s = dist
         v = 1.0

         #hsvtool = HSVbasics()
         
         self.hsv = [h, s, v]
         #self.rgb = hsvtool.gimp_hsv_to_rgb4(self.hsv)
         #print self.hsvdeg
         #print self.rgb
         #print [x, y]
         
      self.cr = self.window.cairo_create()
      self.cr.set_operator(cairo.OPERATOR_SOURCE)
      #self.cr.set_source_rgb(0,0,0)
      #self.cr.paint()
      self.cr.set_source_pixbuf(self.pixbuf, 0, 0)
      self.cr.paint()
      self.cr.set_line_width(2)
      self.cr.stroke_preserve()
      self.cr.set_source_rgb(0.5, 0.5, 0.5)
      self.cr.arc(x, y, 4., 0.0, 2*math.pi)
      self.cr.stroke_preserve()
      #self.cr.fill()
   
   def get_wheel_hsv(self):
      h = self.hsv[0]*360
      s = self.hsv[1]
      v = 1.0
      return [h, s, v]

   def set_wheel_hsv(self, wheel_hsv):
      self.x = self.centerx + wheel_hsv[1] * self.radius * math.cos(wheel_hsv[0]*2*math.pi/360.0)
      self.y = self.centery - wheel_hsv[1] * self.radius * math.sin(wheel_hsv[0]*2*math.pi/360.0)
      #self.refresh_view()

   def reset(self):
      self.x = self.centerx
      self.y = self.centery
      self.hsv = [0., 0., 1.]
      self.cr = self.window.cairo_create()
      self.cr.set_operator(cairo.OPERATOR_SOURCE)
      #self.cr.set_source_rgb(0,0,0)
      #self.cr.paint()
      self.cr.set_source_pixbuf(self.pixbuf, 0, 0)
      self.cr.paint()
      self.cr.set_line_width(2)
      self.cr.stroke_preserve()
      self.cr.set_source_rgb(0.5, 0.5, 0.5)
      self.cr.arc(self.centerx, self.centery, 4., 0.0, 2*math.pi)
      self.cr.stroke_preserve()
      #self.cr.fill()

   def do_expose(self, widget, event):
      self.refresh_view()


class HSVbasics:



   #LIBGIMP - The GIMP Library
   # * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
   # *
   # * This library is free software; you can redistribute it and/or
   # * modify it under the terms of the GNU Lesser General Public
   # * License as published by the Free Software Foundation; either
   # * version 2 of the License, or (at your option) any later version.
   # *
   # * This library 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
   # * Library General Public License for more details.
   # *
   # * You should have received a copy of the GNU Lesser General Public
   # * License along with this library; if not, write to the
   # * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   # * Boston, MA 02111-1307, USA.



   # * gimp_rgb_to_hsv4:
   # * @rgb:        RGB triplet, rgb[0] is red channel, rgb[1] is green,
   # *              rgb[2] is blue (0..255)
   # * @hue:        Pointer to hue channel (0..1)
   # * @saturation: Pointer to saturation channel (0..1)
   # * @value:      Pointer to value channel (0..1)


   def gimp_rgb_to_hsv4(self, rgb):

      #double red, green, blue;
      #double h, s, v;
      #double min, max;
      #double delta;

      #double hue;
      #double saturation;
      #double value;

      #double[] hsv;

      red   = rgb[0] / 255.0;
      green = rgb[1] / 255.0;
      blue  = rgb[2] / 255.0;

      h = 0.0; #/* Shut up -Wall */

      if (red > green):
         maxc = max([red,   blue])
         minc = min([green, blue])
      else:
         maxc = max([green, blue])
         minc = min([red,   blue])
   
      v = maxc

      if (maxc != 0.0):
         s = (maxc - minc) / maxc
      else:
         s = 0.0

      if (s == 0.0):
         h = 0.0
      else:
         delta = maxc - minc

         if (delta == 0.0):
            delta = 1.0

         if (red == maxc):
            h = (green - blue) / delta
         elif (green == maxc):
            h = 2 + (blue - red) / delta
         elif (blue == maxc):
            h = 4 + (red - green) / delta

         h /= 6.0

         if (h < 0.0):
            h += 1.0
         elif (h > 1.0):
            h -= 1.0

      hue        = h
      saturation = s
      value      = v

      hsv = [hue, saturation, value]

      return hsv



   # * gimp_hsv_to_rgb4:
   # * @rgb:        RGB triplet, rgb[0] is red channel, rgb[1] is green,
   # *              rgb[2] is blue (0..255)
   # * @hue:        Hue channel (0..1)
   # * @saturation: Saturation channel (0..1)
   # * @value:      Value channel (0..1)

   def gimp_hsv_to_rgb4(self, hsv):
   
      #double h, s, v;
      #double f, p, q, t;

      hue = hsv[0]
      saturation = hsv[1]
      value = hsv[2]

      #double[] rgb;

      if (saturation == 0.0):
         hue = value
         saturation = value
         #value = value
      else:
         h = hue * 6.0
         s = saturation
         v = value

         if (h == 6.0):
            h = 0.0;

         f = h - int(h)
         p = v * (1.0 - s)
         q = v * (1.0 - s * f)
         t = v * (1.0 - s * (1.0 - f))

         if (int(h)==0):
            hue = v
            saturation = t
            value = p

         elif (int(h)==1):
            hue = q
            saturation = v
            value = p

         elif (int(h)==2):
            hue = p
            saturation = v
            value = t

         elif (int(h)==3):
            hue = p
            saturation = q
            value = v

         elif (int(h)==4):
            hue = t
            saturation = p
            value = v

         elif (int(h)==5):
            hue = v
            saturation = p
            value = q


      #rgb = new Double[3];

      rgb = [round(hue * 255.0), round(saturation * 255.0), round(value * 255.0)]

      return rgb;


class pycolorgradingcw(gimpplugin.plugin):
   def start(self):
      gimp.main(self.init, self.quit, self.query, self._run)

   def init(self):
      pass

   def quit(self):
      pass

   def query(self):
      authorname = "John Lakkas"
      copyrightname = "John Lakkas"
      menu_location = "<Image>/Filters/Color Grading Color Wheel etition"
      date = "May 2012"
      plug_description = "Color Grading plug-in alters image/layer shadows, midtones and highlights color tones"
      plug_help = "Color Grading plug-in alters image/layer shadows, midtones and highlights color tones."
      plug_params = [
         (PDB_INT32, "run_mode", "Run mode"),
         (PDB_IMAGE, "image", "Input image"),
         (PDB_DRAWABLE, "drawable", "Input drawable"),
         ####### 3 params above needed by all scripts using gimpplugin.plugin ######################
         (PDB_FLOAT, "shh", "Shadows Hue"),
         (PDB_FLOAT, "shs", "Shadows Saturation"),
         (PDB_FLOAT, "shlev", "Shadows levels"),
         (PDB_FLOAT, "midh", "Midtones Hue"),
         (PDB_FLOAT, "mids", "Midtones Saturation"),
         (PDB_FLOAT, "midlev", "Midtones levels"),
         (PDB_FLOAT, "highh", "Highlights Hue"),
         (PDB_FLOAT, "highs", "Highlights Saturation"),
         (PDB_FLOAT, "highlev", "Highlights levels"),
         (PDB_FLOAT, "satlev", "Saturation")
         ]

      gimp.install_procedure("py_color_grading_cw",
         plug_description,
         plug_help,
         authorname,
         copyrightname,
         date,
         menu_location,
         "RGB*, GRAY*",
         PLUGIN,
         plug_params,
         [])

   def py_color_grading_cw(self, runmode, img, drawable, shh=0.0, shs=0.0, shlev=0, midh=0.0, mids=0.0, midlev=0, highh=0.0, highs=0.0, highlev=0, satlev=0):
      color_grading_cw(runmode, img, drawable, shh, shs, shlev, midh, mids, midlev, highh, highs, highlev, satlev)

if __name__ == '__main__':
   pycolorgradingcw().start()

Try adapting this plugins save features for your own. It might help out.

_________________


"In the face of adversity, there's three things: fly, freeze or fight; We're choosing to fight..."- Guy Boucher, Tampa Bay Lighting Head Coach


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 9:19 pm  (#14) 
Offline
Script Coder
User avatar

Joined: Feb 18, 2011
Posts: 4826
Location: Bendigo Vic. Australia
Could someone who has this working show where they installed the 2 files please, as I think I did not understand the readme file correctly.

_________________
Image
No matter how much you push the envelope, it'll still be stationery.


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 9:27 pm  (#15) 
Offline
GimpChat Member
User avatar

Joined: Jan 20, 2012
Posts: 583
Userpath/plugins

_________________


"In the face of adversity, there's three things: fly, freeze or fight; We're choosing to fight..."- Guy Boucher, Tampa Bay Lighting Head Coach


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 9:47 pm  (#16) 
Offline
Script Coder
User avatar

Joined: Feb 18, 2011
Posts: 4826
Location: Bendigo Vic. Australia
I open a blank image and select vector path then nothing happens, no menu comes up

_________________
Image
No matter how much you push the envelope, it'll still be stationery.


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 9:48 pm  (#17) 
Offline
Global Moderator
User avatar

Joined: May 16, 2010
Posts: 16023
Graechan wrote:
Could someone who has this working show where they installed the 2 files please, as I think I did not understand the readme file correctly.


Parthas Build.
Place the b&p_vector_path_1.py file in the plugins folder and the other formula_viewer.pyw file needs to go in
gimp-2.8\python
and
gimp-2.8\lib\gimp\2.0\python Graechan. :)


I am not sure about any other compiled src. If the compile includes python it should be the same.

_________________
Image


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 10:19 pm  (#18) 
Offline
Script Coder
User avatar

Joined: Feb 18, 2011
Posts: 4826
Location: Bendigo Vic. Australia
I placed the formula viewer here C:\Program Files\GIMP 2\Python and vector path here C:\Users\Graechan\.gimp-2.8\plug-ins
still no go

_________________
Image
No matter how much you push the envelope, it'll still be stationery.


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 10:20 pm  (#19) 
Offline
Global Moderator
User avatar

Joined: May 16, 2010
Posts: 16023
Try and place it also in the gimp 2\lib\gimp\2.0\python file Graechan.
I had to place it in both locations.

_________________
Image


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 10:38 pm  (#20) 
Offline
Script Coder
User avatar

Joined: Feb 18, 2011
Posts: 4826
Location: Bendigo Vic. Australia
This is my C:\Program Files\GIMP 2\lib\gimp\2.0 folder and it does not hav a python folder
should I create one

Image

_________________
Image
No matter how much you push the envelope, it'll still be stationery.


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 10:52 pm  (#21) 
Offline
Global Moderator
User avatar

Joined: May 16, 2010
Posts: 16023
Graechan wrote:
This is my C:\Program Files\GIMP 2\lib\gimp\2.0 folder and it does not hav a python folder
should I create one

Image


I attached mine its small and already includes the preview file. :)
Just unzip to the GIMP 2\lib\gimp\2.0 folder Graechan. :bigthup

Let me know if it works.

Attachment:
python.zip [252.86 KiB]
Downloaded 145 times

_________________
Image


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 11:16 pm  (#22) 
Offline
Script Coder
User avatar

Joined: Feb 18, 2011
Posts: 4826
Location: Bendigo Vic. Australia
I now have formula viewer here C:\Program Files\GIMP 2\lib\gimp\2.0\python also
still no go

_________________
Image
No matter how much you push the envelope, it'll still be stationery.


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 11:27 pm  (#23) 
Offline
Global Moderator
User avatar

Joined: May 16, 2010
Posts: 16023
So you have the vector-path python file in gimp-2.8\plug-ins folder
and the preview file in both python directories?

Look in your pygimp.interp file and tell me if it has this
python=C:\Program Files\Gimp 2\python\pythonw.exe
/usr/bin/python=C:\Program Files\Gimp 2\python\pythonw.exe
:Python:E::py::python:


It should look exactly like above to work. :)

_________________
Image


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Fri May 18, 2012 11:53 pm  (#24) 
Offline
Script Coder
User avatar

Joined: Feb 18, 2011
Posts: 4826
Location: Bendigo Vic. Australia
My file is the same

python=C:\Program Files\GIMP 2\Python\pythonw.exe
/usr/bin/python=C:\Program Files\GIMP 2\Python\pythonw.exe
:Python:E::py::python:

and the location of my files is

Image

Image

A real dilema

_________________
Image
No matter how much you push the envelope, it'll still be stationery.


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Sat May 19, 2012 12:39 am  (#25) 
Offline
Global Moderator
User avatar

Joined: May 16, 2010
Posts: 16023
Try placing/moving the vector path python file from the /.gimp-2.8\plug-ins\python folder to just the plug-ins folder once.

_________________
Image


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Sat May 19, 2012 1:05 am  (#26) 
Offline
Script Coder
User avatar

Joined: Feb 18, 2011
Posts: 4826
Location: Bendigo Vic. Australia
I tried that still no go, do I need anything other than a blank image

_________________
Image
No matter how much you push the envelope, it'll still be stationery.


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Sat May 19, 2012 1:57 am  (#27) 
Offline
Global Moderator
User avatar

Joined: May 16, 2010
Posts: 16023
Does the vector path dialog pop up when you click on Filters>Bytes and Pixels>Vector Path?
Because you really do not need the preview panel.It's just there to preview the path you create.The plugin will work by just putting the values in x and y and the other settings.
Of course you need to know your math for this. As you won't be able to view the results.

This is so weird that it doesn't work for you.
I placed my preview file in both my
gimp-2.8\python folder AND my
gimp-2.8\lib\gimp\2.0\python folder THEN
I placed the vector path.py file in my .gimp-2.8\plug-ins folder and it works for me in Windows XP.
I am stumped Graechan sorry.

All i can suggest now is to uninstall gimp-2.8 and install Parthas newest install version.
It works for everything on my machine.

_________________
Image


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Sat May 19, 2012 2:14 am  (#28) 
Offline
Script Coder
User avatar

Joined: Feb 18, 2011
Posts: 4826
Location: Bendigo Vic. Australia
The answer to the puzzle was in your last post win XP I'm using 64bit gimp python 2.7.2, when I placed in any 32bit gimp it worked a charm
Thank you for sticking with me

_________________
Image
No matter how much you push the envelope, it'll still be stationery.


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Sat May 19, 2012 6:32 pm  (#29) 
Offline
Script Coder
User avatar

Joined: Feb 18, 2011
Posts: 4826
Location: Bendigo Vic. Australia
I worked out the puzzle win7 is funny fella, 2nd file goes in 32 folder as shown

Image

_________________
Image
No matter how much you push the envelope, it'll still be stationery.


Top
 Post subject: Re: Bytes and Pixels Vector Path plugin
PostPosted: Sun May 20, 2012 12:29 am  (#30) 
Offline
Global Moderator
User avatar

Joined: May 16, 2010
Posts: 16023
Graechan wrote:
The answer to the puzzle was in your last post win XP I'm using 64bit gimp python 2.7.2, when I placed in any 32bit gimp it worked a charm
Thank you for sticking with me

You would do the same for me Graechan. :)
I am very happy you got it working.

Any new formulas you want to share?

_________________
Image


Top
Post new topic Reply to topic  [ 127 posts ]  Go to page 1, 2, 3, 4, 5 ... 7  Next

All times are UTC - 5 hours [ DST ]



* Login  



Powered by phpBB3 © phpBB Group