Versão Estável
0.46
Baixe Agora!
Estendendo o Inkscape com Ruby
Está perdido? Caiu aqui de paraquedas? Melhor ver a página "Como Fazer Extensões".
Uma extensão em Ruby pode ser feita sem nenhuma ajuda extra, mas agora existe o
RubyInk
e o
RubySVG. RubySVG é um Módulo que estende o
REXML para facilitar a manipulação de
SVG e RubyInk é uma classe que facilita o trabalho específico de criar extensões para o Inkscape.
Para usa-los você deve baixar o pacote
RubyInk.tar.gz e abri-lo dentro do seu diretório de extensões do Inkscape.
(Ele já carrega o RubySVG consigo)
Não sabe qual o diretório de extensões? Melhor ler a página "
Como Fazer Extensões".
Já descompactou? Então mão na massa! Vamos fazer um efeito que muda a cor dos elementos selecionados.
(O que você vai criar agora fica no mesmo diretório do RubyInk.rb - seu diretório de extensões)
Crie um
arquivo INX chamado
muda-cor.inx com:
-
<name>Muda Cor</name>
-
<param name="cor" type="string" _gui-text="Cor">red</param>
-
<command reldir="extensions">muda-cor.rb</command>
Agora crie o arquivo
muda-cor.rb com esse conteúdo:
#!/usr/bin/ruby
$: << $0.gsub( /[^\/]*$/, '' )
# Inicia a Mágica:
require 'RubyInk'
ink = RubyInk.new
ink.eachSelectedElement {
|element|
element.style['fill'] = ink.args['cor']
}
ink.dumpSvgDoc
Explicando:
A linha "
$: << $0.gsub( /[^\/]*$/, '' )" (estranha, não?) adiciona o diretório da extensão no path para que seja possível incluir o RubyInk e RubySVG.
Agora é só re-abrir o Inkscape, selecionar alguns elementos, procurar seu efeito no menu "Efeitos" e clicar.
Para saber mais, veja essa breve documentação:
Métodos RubyInk
new
Cria o objeto da classe RubyInk que ajudará o seu trabalho.
Exemplo:
ink = RubyInk.new
svgDoc
Referência ao objeto Documento
SVG, onde você pode acessar metodos DOM e XPath para localizar todos os elementos
SVG.
Exemplo (pega o elemento cujo ID é bola):
bola = ink.svgDoc.getElementById("bola")
args
Array de argumentos enviados pelo Inkscape
Exemplo (pega o valor do argumento cor e aplica como valor do atributo CSS de preenchimento):
bola.style['fill'] = ink.args['cor']
eachSelectedElement
Método que recebe um bloco de código que será executado para cada elemento selecionado na interface do Inkscape. O bloco de código receberá uma referencia a um objeto selecionado em cada interação.
Exemplo (o argumento cor é aplicado como preenchimento em todos os elementos selecionados):
ink.eachSelectedElement {
|element|
element.style['fill'] = ink.args['color']
}
dumpSvgDoc
Envia o código
SVG modificado para a saída padrão onde o Inkscape o espera.
Exemplo:
ink.dumpSvgDoc
Classes RubySVG
RubySVG é um Módulo que estende o REXML para facilitar a manipulação de
SVG, então para saber o que é possível com RubySVG é necessário ver a
documentação do REXML ou
tutoriais de REXML.
(Tutorial oficial)
SVG::Document
Atributos e Métodos:
-
root : Referência ao elemento raiz <svg>
-
getElementById(id) : Retorna o elemento com tal id
-
getElementsByTagName(tagName) : Retorna o elemento ou lista com tal nome de tag
SVG::Element
Todo elemento
SVG herda de
SVG::Element
Atributos e Métodos:
-
id : acesso direto ao atributo id
-
getElementsByTagName(tagName) : Retorna o elemento filho ou lista de filhos com tal nome de tag
SVG::DrawableElement
Atributos e Métodos:
-
style : referencia ao objeto style que facilita a manipulação de CSS
-
transform : acesso direto ao atributo transform
SVG::CircleElement
Atributos e Métodos:
-
cx : acesso direto ao atributo
-
cy : acesso direto ao atributo
-
r : acesso direto ao atributo
SVG::GroupElement
Nada ainda...
SVG::InlineStyle
Atributos e Métodos:
-
[] : retirna valor de um atributo CSS
-
[]= : define o valor de um atributo CSS
SVG::PathElement
Atributos e Métodos:
-
path : retorna o objeto de manipulação do caminho
SVG::RectElement
Atributos e Métodos:
-
x : acesso direto ao atributo
-
y : acesso direto ao atributo
-
width : acesso direto ao atributo
-
height : acesso direto ao atributo
-
rx : acesso direto ao atributo
-
ry : acesso direto ao atributo
SVG::SVGElement
Elemento
<svg>. Nada de especial
ainda.
SVG::Path
Atributos e Métodos: