Estendendo o Inkscape com Python
Está perdido? Caiu aqui de paraquedas? Melhor ver a página "Como Fazer Extensões".
Introdução
Uma extensão em Python pode ser feita sem nenhuma ajuda extra, mas sará muito mais fácil usando o módulo
inkex.
Esse módulo provê a classe
Effect que facilita o trabalho específico de criar extensões para o Inkscape.
O Inkscape já provê o módulo
inkex no seu diretório de extensões.
Não sabe qual o diretório de extensões? Melhor ler a página "
Como Fazer Extensões".
Um exemplo bem simples, pra começar
Crie um
arquivo INX chamado
muda-cor.inx, no seu diretório de extensões, com:
-
<name>Muda Cor</name>
-
<param name="cor" type="string" _gui-text="Cor">red</param>
-
<command reldir="extensions">muda-cor.py</command>
Agora crie o arquivo
muda-cor.py, no seu diretório de extensões, com esse conteúdo:
#!/usr/bin/env python
import inkex, simplestyle
class MudaCor(inkex.Effect):
def __init__(self):
inkex.Effect.__init__(self)
self.OptionParser.add_option("-c", "--cor",
action="store", type="string",
dest="cor", default="red",
help="A cor a ser aplicada no elemento selecionado.")
def effect(self):
for id, node in self.selected.iteritems():
style = simplestyle.parseStyle(node.get('style'))
style['fill'] = self.options.cor
node.set('style', simplestyle.formatStyle(style))
if __name__ == '__main__':
e = MudaCor()
e.affect()
Agora é só re-abrir o Inkscape, selecionar alguns elementos, procurar seu efeito no menu "Efeitos" e clicar.
Atenção para a limitação: como não fizemos teste do tipo de elemento selecionado podemos acabar aplicando cor de preenchimento onde faz pouco sentido, como em elementos de grupo. Neste caso deveríamos buscar seus filhos recursivamente e aplicar a estes a cor de preenchimento.
E qual o significado de de cada linha dessas?
#!/usr/bin/env python
Diz ao sistema operacional quem deve interpretar esse script. Usamos
/usr/bin/env python em lugar do direto
/usr/bin/python para garantir que o interpretador seja encontrado mesmo que instalado fora do path padrão.
import inkex, simplestyle
Aqui carregamos os módulos que irão ajudar no desenvolvimento da extensão.
-
inkex: provê as funcionalidades comuns a maioria das extensões e principalmente a classe Effect que padroniza as extensões e reduz praticamente todo o trabalho repetitivo de interpretar as entradas, carregar o parser XML, instanciar o documento...
-
simplestyle: faz a parte chata da manipulação de atributos estilo.
class MudaCor(inkex.Effect):
É aqui que sua extensão começa a nascer. Aqui uma classe é criada para sua extensão, estendendo a classe
Effect.
...
Em Construção... (hei... você pode ajudar!)
Todo material do sítio
Inkscape Brasil é propriedade do grupo Inkscape Brasil e pode ser
reproduzido livremente, desde que
permaneça livre e a fonte seja citada, seguindo os termos da licença
Creative Commons (by-sa).
Inkscape é um
Software Livre, distribuido sobre Termos
GNU-GPL.