2016-05-06 3 views
2

Я пытаюсь написать своего рода библиотеку-обертку для GIMP, чтобы упростить мои проекты создания произведений, но у меня возникла проблема с интерфейсом gimpfu из моего модуля-обертки. Следующий код плагин прекрасно работает, и отображает изображение с горизонтальными линиями, проходящими через него:вызов функции gimp-fu из внешнего модуля

from gimpfu import * 
from basicObjects import * 

def newFilt() : 
    img = gimp.Image(500, 500, RGB) 
    background = gimp.Layer(img, "Background", 500, 500,RGB_IMAGE, 100, NORMAL_MODE) 
    img.add_layer(background, 1) 
    background.fill(BACKGROUND_FILL) 
    pdb.gimp_context_set_brush('1. Pixel') 
    pdb.gimp_context_set_brush_size(2) 
    for i in range(100): 
     Line= line([(0,5*i),(500,5*i)]) 
     pdb.gimp_pencil(background,Line.pointcount,Line.printpoints()) 
    gimp.Display(img) 
    gimp.displays_flush() 

register(
    "python_fu_render", 
    "new Image", 
    "Filters", 
    "Brendan", 
    "Brendan", 
    "2016", 
    "Render", 
    "", 
    [], 
    [], 
    newFilt, menu="<Image>/File/Create") 

main() 

класс «линии» определяется в basicObjects, и функционирует, как и ожидалось, однако, если я пытаюсь заменить «PDB. gimp_pencil (фон, Line.pointcount, Line.printpoints())»с 'Line.draw (фон)', и добавить функцию дро() к классу линии, как таковой:

from gimfu import * 
class line: 
    """creates a line object and defines functions specific to lines """ 
    def __init__(self, points): 
     self.points = points 
     self.pointcount = len(points)*2 
    def printpoints(self): 
     """converts point array in form [(x1,y1),(x2,y1)] to [x1,y1,x2,y2] as nessecary for gimp pdb calls""" 
     output=[] 
     for point in self.points: 
      output.append(point[0]) 
      output.append(point[1]) 
     return output 
    def draw(self,layer): 
     pdb.gimp_pencil(layer,self.pointcount,self.printpoints()) 

изображение не отображается, и в консоли ошибки gimp нет сообщений. Как я могу сделать вызов pdb из внешнего файла? Как-то сделать оболочку отдельной плагиновой помощью?

ответ

1

Первый: Модуль gimp и gimp-fu работает только в том случае, если скрипт Python работает как плагин изнутри GIMP. Я не знаю, что вы называете «внешним файлом», но точка входа всегда должна быть подключаемым скриптом. Он может импортировать другие модули Python как любую обычную программу.

Во-вторых: запуск плагинов GIMP - это Python 2.x (2.7 в эти дни) - и поэтому любой объявленный класс должен наследовать от object - объявление класса без наследования с объекта, поскольку вы только принесете вам неожиданные проблемы - хотя это может быть не ваша проблема прямо сейчас.

Объявление класса выглядит хорошо, но ваш пример при его вызове - Line.draw(background), кажется, указывает, что вы пытаетесь вызвать метод в самом классе, а не в экземпляре вашего класса line.

Смежные вопросы