Gimp 2.8 Plugin Script - Как добавяте нов GroupLayer?

Конвенцията за документация/наименуване на PDB е доста назад, ако се опитвате да правите неща с python в gimp и е трудно да разберете. В крайна сметка намерих gimp.GroupLayer (PDB списъци gimp-layer-group-new), за да създам нова група слоеве. Как да вмъкнете това в изображението и то да се покаже като група слоеве?

Опитвал съм неща като това:

img = gimp.image_list()[0]
gl = gimp.GroupLayer(img, "Should be a folder", 1, 1, 0)
img.insert_layer(gl)

Първото нещо, което наистина ме обърква, е, че очаква да посоча височина и ширина за GroupLayer, въпреки че той просто трябва да действа като контейнер за други действителни слоеве (очаква това, защото наследява от Layer, но това е друг въпрос) .

Истинският проблем е, че когато вмъкна новосъздадения GroupLayer, той се показва като нормален слой (няма папка в иконата на слоя). Проверих това, като направих два слоя, един нормален слой и един групов слой. Добавям груповия слой към изображението и след това се опитвам да добавя нормалния слой към изображението с груповия слой като родител:

img = gimp.image_list()[0]
gl = gimp.GroupLayer(img, "Group Layer", 1, 1, 0)
l = gimp.Layer(img, "Real Layer", 1, 1, 0)
img.insert_layer(gl)
img.insert_layer(l, gl) # gl should be the parent

Всичко, което получавам, е грешката:

Calling error for procedure 'gimp-image-insert-layer':
Item 'group layer #1' (34) cannot be used because it is not a group item`

Някой друг разбрал ли е това?

АКТУАЛИЗАЦИЯ

от Жоао С. О. Буено

Току-що поправих този проблем в gimp-git. Frgom gimp 2.8.12 включен,
извикването на gimp.GroupLayer работи с подписа gimp.GroupLayer(img, [name="", opacity=100.0, mode=gimp.NORMAL_MODE]).


person d0c_s4vage    schedule 26.09.2012    source източник
comment
Може да опитате да изпратите имейл на автора на GIMP-python. Той казва в документите, че не е пълен.   -  person stark    schedule 27.09.2012
comment
Хората, посочени като автори на GIMP Python във всяка уеб страница, отдавна са изчезнали от проекта. Това, което трябва да направите, е да изпратите по пощата списъка с програмисти или да попълните доклад за грешка в bugs.gnome.org   -  person jsbueno    schedule 27.09.2012


Отговори (1)


Изглежда, че има грешка при създаването на gimp.GroupLayer - и той се държи като нормален слой, въпреки че типът обект в Python се показва като групов слой.

Възможно е обаче да се създаде слой на работна група чрез PDB, като се използва pdb.gimp_layer_group_new(img) - този път има друг бъг, обектът се появява в Python като необикновен обект на слой - но след вмъкването му в изображението с pdb.gimp_image_insert_layer(image, layer, <parent (use None for top level)>, <position>) работи правилно (и извличането на обекта чрез атрибута "слой" на изображението ще ви даде правилен обект GroupLayer).

Съжалявам за това - по-голямата част от това е моя грешка - ще видя дали мога да поправя поведението за следващия GIMP 2.8 - GIMP 2.8 почти беше изпратен без никаква поддръжка за групи слоеве от Python.

актуализация: От GIMP 2.8.12 извикването на gimp.GroupLayer(image, ...) създава правилна група слоеве.

person jsbueno    schedule 26.09.2012
comment
страхотно, много благодаря! Нямах възможност да изпробвам това в моя плъгин, но изглежда, че знаете за какво говорите :^) Благодаря отново! - person d0c_s4vage; 27.09.2012
comment
Не съм опитвал, но след създаването на група слоеве с извикването на pdb, img.insert_layer също трябва да работи. - person jsbueno; 27.09.2012
comment
Благодаря отново за помощта и че ме насочихте в правилната посока. Вече всичко ми работи. Приставките за Gimp могат да бъдат доста забавни! :D - person d0c_s4vage; 28.09.2012