Referência Rápida do SeExpr¶
Esta página detalhada todas as variáveis, funções e operadores disponíveis no SeExpr. É uma versão bastante editada da documentação do utilizador oficial, sendo adaptada para ser usada no Krita.
Veja também
Código-fonte no Invent do KDE
Documentação da API do SeExpr da Disney
Veja também
Variáveis¶
Variáveis externas¶
Estas variáveis são fornecidas pelas aplicações externas, neste caso o Krita. Estas são registadas na ajuda de auto-completação do SeExpr, à qual poderá aceder com o Ctrl+Espaço.
Variáveis Locais¶
As variáveis locais podem ser definidas no início da expressão:
$a = noise($P);
$b = noise($a * 1);
pow($a, 0.5) + $b
As variáveis externas também podem ser sobrepostas com atribuições locais. Isto pode ser útil para ajustar a escala da frequência do ruído, por exemplo:
$P = $P * 10; # aumentar a frequência do ruído
fbm(vnoise($P) + $P/4)
Poderá também definir variáveis com espaços de nomes, p.ex.:
$A::a = $u * 10;
Estruturas de Controlo¶
O SeExpr oferece a famosa estrutura condicional if:
if ($ u > 0.5) {
$cor = [0, 0, 1];
}
else {
$cor = [1, 0, 0];
}
$cor
E o operador ternário:
$u = $i < .5 ? 0.0 : 10.0
Poderá encadear à vontade os operadores ternários, p.ex.:
$cor = $u < .5 ? ($v < 0.5 ? [0, 0, 1] : [1, 0, 0]) : [0, 1, 0];
$cor
Também poderá obter o mesmo com as estruturas if:
if ($ u > 0.5) {
if ($v < 0.5) {
$cor = [0, 0, 1];
}
else {
$cor = [1, 0, 0];
}
}
else {
$cor = [1, 0, 0];
}
$cor
Operadores (apresentados por prioridade decrescente)¶
- [a,b,c]¶
construtor de vectores
- $P[ n ]¶
acesso a componente do vector
Dica
O
n
deve ser 0, 1 ou 2, p.ex.:$P[0]
- ^¶
expoente
Nota
Igual à função
pow
.- !¶
NÃO lógico
- ~¶
inversão
Dica
~$A
dá o mesmo resultado que:
1 - $A
- */ %¶
multiplicação, divisão, módulo
Nota
O
%
é igual à funçãofmod
.- +-¶
adição, subtracção
- <> <= >=¶
comparação: menor que, maior que, menor ou igual a, maior ou igual a
Nota
Só usa o primeiro componente de um vector.
- == !=¶
igualdade, desigualdade
- &&¶
E lógico
- ||¶
OU lógico
- ?:¶
operador
if
ternárioDica
Exemplo:
$u < .5 ? 0 : 1
- ->¶
aplicação - A função à direita da seta é aplicada à expressão à esquerda.
Dica
Exemplos:
$Cs->contrast(.7) -> clamp(0.2,0.8) $u->hsi(20,1.2,1,$Cs->gamma(1.2))
Operadores de Atribuição¶
Para além da instrução básica de atribuição:
$xpto = $xpto2
também poderá fazer atribuições de operadores como por exemplo:
$xpto += $xpto2;
o que é equivalente a:
$xpto = $xpto + $xpto2;
Adicionalmente, existem:
+=
-=
/=
%=
*=
^=
Funções de Registo¶
- float printf ( string formato, [param0, param1, …] )¶
Imprime um texto no “stdout” formatado da forma indicada. Os parâmetros de formatação possíveis são o
%f
para números fraccionários (usa o primeiro componente de um argumento vectorial) ou%v
para um vector.Dica
Por exemplo, se escrever:
$u = printf("teste %f %v",[1,2,3],[4,5,6]);
iria obter na sua consola:
teste 1 [4,5,6]
- string sprintf ( string formato, [double|string, double|string, …] )¶
Devolve um texto formatado a partir dos valores indicados. Veja os detalhes do formato em
man sprintf
.
Funções de Cores, Máscaras e Associações¶
- float bias ( float x, float b)¶
A variação do gama, onde o parâmetro de controlo vai de
0
a1
com os valores> 0.5
a elevar a curva e os valores< 0.5
a baixar a curva. Definido comopow(x, log(b)/log(0.5))
.- float boxstep ( float x, float a )¶
- float gaussstep ( float x, float a, float b )¶
- float linearstep ( float x, float a, float b )¶
- float smoothstep ( float x, float a, float b )¶
As funções de passo são iguais a zero para
x < a
e um parax > b
(oux > a
no caso do “boxstep”). Entrea
eb
, o valor varia de forma contínua entre zero e um. A funçãogausstep
usa a curva em «sino» Gaussiana normal, que se baseia numa curva exponencial. A funçãosmoothstep
usa uma curva cúbica. Intuitivamente, ogausstep
tem uma transição mais forte perto do um e uma transição mais suave perto do zero, enquanto osmoothstep
tem uma suavidade média perto do um e do zero.- float clamp ( float x, float inf, float sup )¶
Restringe o
x
ao intervalo[inf, sup]
.- float compress ( float x, float inf, float sup )¶
Comprime o intervalo dinâmico de
[0, 1]
para[inf, sup]
.- float contrast ( float x, float c )¶
Ajusta o contraste. Para um
c
de0
a0.5
, o contraste é diminuído. Para oc > 0.5
, o contraste é aumentado.- float expand ( float x, float inf, float sup )¶
Expande o intervalo dinâmico de
[inf, sup]
para[0, 1]
.- float fit ( float x, float a1, float b1, float a2, float b2 )¶
Mapeamento linear de
[a1..x..b1]
a[a2..x..b2]
- float gamma ( float x, float g)¶
pow(x, 1/g)
- float invert ( float x )¶
Inverte o valor. Definido como
1 - x
.- color hsi ( color x, float h, float s, float i, float mapa=1 )¶
A função
hsi
desvia a matiz emh
(em graus) e ajusta a escala da saturação e intensidade ems
ei
respectivamente. Poderá ser indicado um mapa que irá controlar o desvio - o desvio completo irá acontecer quando o mapa for igual a 1 e não ocorrerá nenhum desvio quando o mapa for zero. O desvio será ajustado à escala para os valores entre zero e um.- color hsltorgb ( color hsl )¶
- color rgbtohsl ( color rgb )¶
Conversão do espaço de cores RGB para HSL. O HSL corresponde a Matiz, Saturação e Luminosidade (todos no intervalo
[0, 1]
). Estas funções também foram estendidas para suportar os valores de RGB e HSL fora do intervalo[0, 1]
de forma razoável. Para qualquer valor de RGB ou HSL (excepto os valores negativos), a conversão está bem-definida e é reversível.- color midhsi ( color x, float h, float s, float i, float mapa, float corte=1, int interp=0 )¶
A função
midhsi
é igual àhsi
, excepto que o mapa de controlo está centrado em torno do ponto médio (valor igual a0.5
) e pode ajustar a escala do desvio em ambas as direcções. No ponto médio, não existe qualquer desvio. Em 1.0 ocorre o desvio total e, em0.0
, ocorre o desvio inverso na totalidade. Os controlos decorte
einterp
são fornecidos para ajustar o mapa com a funçãoremap
. Os valores predefinidos decorte
einterp
resultam em não ser aplicado o mapeamento.- float mix ( float a, float b, float alfa )¶
Mistura do “a” e do “b” de acordo com o alfa. Definido como
a*(1-alfa) +b*alfa
.- float remap ( float x, float origem, float intervalo, float corte, int interp )¶
Função geral de mapeamento. Quando o
x
se encontra no± intervalo
da origem, o resultado é um. O resultado é igual a zero para além de uma distância decorte
desse intervalo. A forma de corte é controlada pelainterp
.Nota
Poderá usar valor numéricos ou constantes com nomes:
int linear = 0
int suave = 1
int gaussiano = 2
Funções de Ruído¶
- float cellnoise ( vector v )¶
- float cellnoise1 ( float x )¶
- float cellnoise2 ( float x, float y )¶
- float cellnoise3 ( float x, float y, float z )¶
- color ccellnoise ( vector v )¶
O
cellnoise
gera um campo de cubos coloridos constantes com base na localização inteira. Isto é igual à função “cellnoise” do PRMan.Nota
O
ccellnoise
devolve o ruído em células de cores.- float fbm ( vector v, int oitavas=6, float lacunas=2, float ganho=0.5 )¶
- float cfbm ( vector v, int oitavas=6, float lacunas=2, float ganho=0.5 )¶
- float vfbm ( vector v, int oitavas=6, float lacunas=2, float ganho=0.5 )¶
- float fbm4 ( vector v, int oitavas=6, float lacunas=2, float ganho=0.5 )¶
- float cfbm4 ( vector v, int oitavas=6, float lacunas=2, float ganho=0.5 )¶
- float cfbm4 ( vector v, int oitavas=6, float lacunas=2, float ganho=0.5 )¶
O
fbm
(Fractal Brownian Motion - Movimento Fractal de Brown) é uma função de ruído multi-frequências. A frequência de base é igual à da funçãonoise
. O número total de frequências é controlado pelasoitavas
. Aslacunas
é o intervalo entre as frequências - um valor de 2 significa que cada oitava é duas vezes a frequência anterior. Oganho
controla qual o ajuste da escala de cada frequência face à frequência anterior.Nota
O
cfbm
e ocfbm4
devolvem o ruído da cor.O
vfbm
e ovfbm4
devolvem o ruído do vector.- float hash ( float base1, [float base2, …] )¶
Como o
rand
, mas sem valores de base internos. Poderá indicar qualquer número de valores de base e o resultado será uma função aleatória com base em todos os valores de base.- float noise ( vector v )¶
- float noise ( float x, float y )¶
- float noise ( float x, float y, float z )¶
- float noise ( float x, float y, float z, float w )¶
- color cnoise ( vector v)¶
- color cnoise4 ( vector v, float t)¶
- float pnoise ( vector v, vector periodo )¶
- float snoise ( vector v)¶
- float snoise4 ( vector v, float t)¶
- vector vnoise (vector v )¶
- vector vnoise4 (vector v, float t )¶
O
noise
é uma função aleatório que mistura suavemente amostras em localizações inteiras. Esta é a função de ruído original de Ken Perlin.Nota
O
cnoise
e ocnoise4
devolvem o ruído da cor.O
noise4
devolve ruído vectorial com sinal.O
pnoise
devolve um ruído periódico.O
snoise
e osnoise4
devolvem um ruído com sinal no intervalo[-1, 1]
.O
vnoise
devolve um ruído vectorial com sinal.- float rand ( [float min, float max], [float base] )¶
Número aleatório entre
[min, max]
(ou[0, 1]
se não for indicado). Se for indicado um valor de base, será usado para além dos valores de base internos pode ser usado para criar vários geradores distintos.- float turbulence ( vector v, int oitavas=6, float lacunas=2, float ganho=0.5 )¶
- float cturbulence ( vector v, int oitavas=6, float lacunas=2, float ganho=0.5 )¶
- float vturbulence ( vector v, int oitavas=6, float lacunas=2, float ganho=0.5 )¶
O
turbulence
é uma variante dofbm
em que é retirado o valor absoluto de cada termo do ruído. Isto gera uma aparência mais ondulada.- float voronoi ( vector v, int tipo=1, float desvio=0.5, float fbmEscala=0, int fbmOitavas=4, float fbmLacunas=2, float fbmGanho=0.5)¶
- float cvoronoi ( vector v, int tipo=1, float desvio=0.5, float fbmEscala=0, int fbmOitavas=4, float fbmLacunas=2, float fbmGanho=0.5)¶
- float pvoronoi ( vector v, int tipo=1, float desvio=0.5, float fbmEscala=0, int fbmOitavas=4, float fbmLacunas=2, float fbmGanho=0.5)¶
O
voronoi
é um padrão de ruído celular. É uma variante com desvio docellnoise
. O parâmetro “tipo” descreve diferentes variantes da função de ruído. O parâmetrodesvio
controla quão irregular é o padrão (0 é como o “cellnoise” normal). Os parâmetros dofbm...
podem ser usados para distorcer o campo do ruído. Quando ofbmEscala
é zero (por omissão), não há qualquer distorção. Os restantes parâmetros são os mesmos da funçãofbm
.Nota
O
cvoronoi
devolve uma cor aleatória para cada célula e opvoronoi
devolve a localização do ponto no centro da célula.
Funções de Selecção¶
- float choose ( float indice, float opcao1, float opcao2, […] )¶
Escolha uma das opções indicadas com base no índice (assume-se que está no intervalo de
[0, 1]
).- int cycle ( int indice, int intervaloInf, int intervaloSup )¶
Circula pelos valores entre “intervaloInf” e “intervaloSup” com base no índice fornecido. Esta é uma função
mod
do deslocamento. O resultado é calculado comointervaloInf + valor % (intervaloSup-intervaloInf+1)
.- int pick ( float indice, int intervaloInf, int intervaloSup, [ float pesos, … ] )¶
Escolhe os valores aleatoriamente entre “intervaloInf” e “intervaloSup” com base no índice fornecido (que é disperso de forma automática). Os valores serão distribuídos de acordo com os pesos indicados. Todos os pesos não indicados assumem-se como sendo iguais a 1.0.
- float wchoose ( float indice, float opcao1, float peso1, float opcao2, float peso2, […] )¶
Escolhe uma das opções fornecidas com base no índice (que se assume no intervalo
[0, 1]
). Os valores serão distribuídos de acordo com os pesos indicados.
Dica
Este exemplo devolve valores inteiros entre e 1 e 10:
pick(valor, 1, 10)
Este exemplo devolve os valores 1 e 2 com uma frequência duas vezes e duas vezes e meia mais elevada, respectivamente, face aos outros valores (3-10):
pick(valor, 1, 10, 2, 2.5)
Este exemplo devolve 10, 11 e 13 até 20 (o 12 é ignorado devido ao seu peso zero):
pick(valor, 10, 20, 1, 1, 0)
Constantes e Funções Matemáticas Gerais¶
- float abs ( float x)¶
Valor absoluto de
x
.- float cbrt ( float x )¶
Raiz cúbica.
- float ceil ( float x )¶
Valor inteiro arredondado por excesso.
- float exp ( float x )¶
E
elevado ao expoentex
.- float floor ( float x )¶
Valor inteiro arredondado por defeito.
- float fmod ( float x, float y )¶
Resto de
x / y
.Nota
Também conhecido como o operador
%
.- float log ( float x )¶
Logaritmo natural.
- float log10 ( float x )¶
Logaritmo de base 10.
- float max ( float a, float b )¶
O valor máximo entre
a
eb
.- float min ( float a, float b )¶
O valor mínimo entre
a
eb
.- float pow ( float x, float y )¶
x
elevado ao expoentey
.Nota
Também conhecido como o operador
^
.- float round ( float x )¶
Inteiro mais próximo.
- float sqrt ( float x )¶
Raiz quadrada.
- float trunc ( float x )¶
Inteiro mais próximo em direcção a zero.
Funções Trigonométricas¶
- float acos ( float x )¶
Arco-coseno.
- float acosd ( float x )¶
Arco-coseno em graus.
- float acosh ( float x )¶
Arco-coseno hiperbólico.
- float asin ( float x )¶
Arco-seno.
- float asind ( float x )¶
Arco-seno em graus.
- float asinh ( float x )¶
Arco-seno hiperbólico.
- float atan ( float x )¶
Arco-tangente.
- float atand ( float x )¶
Arco-tangente em graus.
- float atan2 ( float y, float x)¶
Arco-tangente de
y/x
entre-PI
ePI
.- float atan2d ( float y, float x )¶
Arco-tangente em graus de
y/x
entre-180º
e180º
.- float atanh ( float x )¶
Arco-tangente hiperbólica.
- float cos ( float x )¶
Coseno.
- float cosd ( float x )¶
Coseno em graus.
- float cosh ( float x )¶
Coseno hiperbólico.
- float deg ( float x )¶
Conversão de radianos para graus.
- float hypot ( float x, float y )¶
Comprimento do vector 2D
[x, y]
.- float rad ( float x )¶
Conversão de graus para radianos.
- float sin ( float x )¶
Seno.
- float sind ( float x )¶
Seno em graus.
- float sinh ( float x )¶
Seno hiperbólico.
- float tan ( float x )¶
Tangente.
- float tand ( float x )¶
Tangente em graus.
- float tanh ( float x )¶
Tangente hiperbólica.
Funções Vectoriais¶
- float angle ( vector a, vector b )¶
O ângulo entre dois vectoers (em radianos).
- vector cross ( vector a, vector b )¶
Produto vectorial.
- float dist ( vector a, vector b )¶
Distância entre dois pontos.
- float dot ( vector a, vector b)¶
Produto interno de vectores.
- float length ( vector v )¶
Comprimento do vector.
- vector norm ( vector v )¶
O vector escalado ao comprimento da unidade.
- vector ortho ( vector a, vector b )¶
O vector ortográfico a dois vectores.
- vector rotate ( vector v, vector eixo, float angulo )¶
Roda o
v
em torno do eixo noangulo
indicado (em radianos).- vector up ( vector v, vector cima )¶
Roda o
v
de forma que o eixo dos Y aponte para a direcçãocima
indicada.
Suporte Vectorial¶
Os Vectores (pontos, cores ou vectores 3D) podem ser associados a escalares (valores símples de vírgula flutuante). Se for usado um valor escalar num contexto vectorial, será replicado nos três componentes, p.ex. 0.5
transforma-se em [0.5, 0.5, 0.5]
.
Se for usado um vector num contexto escalar, só é usado o primeiro componente. Um dos benefícios disto é que todas as funções que são definidas para funcionar com valores escalares estendem-se automaticamente aos vectores. Por exemplo, o pick
, choose
, cycle
, spline
, etc., irão funcionar bem com vectores.
Os operadores aritméticos como o +
, *
, etc., e as funções escalares são aplicados componente a componente de cada vector. Por exemplo, se aplicar a função gamma
a um mapa, ajusta o gama de todos os três canais de cores.
Funções de Curvas¶
A interpolação dos valores dos parâmetros a um conjunto de pontos de controlo é controlada pelas seguintes funções.
- color ccurve ( float param, float pos0, color val0, int interp0, float pos1, color val1, int interp1, […] )¶
Faz uma interpolação da rampa de cores indicada pelos pontos de controlo em
param
. Os pontos de controlo são indicados pelos grupos de três parâmetrospos_i
,val_i
einterp_i
.Dica
Os códigos de interpolação são:
0 - nenhum
1 - linear
2 - suave
3 - curva
4 - curva monótona (não-oscilante)
- float curve ( float param, float pos0, float val0, int interp0, float pos1, float val1, int interp1, […] )¶
Interpola uma rampa em 1D definida pelos pontos de controlo em
param
. Os pontos de controlo são definidos com os grupos de três parâmetrospos_i
,val_i
einterp_i
.Dica
Os códigos de interpolação são:
0 - nenhum
1 - linear
2 - suave
3 - curva
4 - curva monótona (não-oscilante)
- float spline ( float param, float y1, float y2, float y3, float y4, […] )¶
Faz a interpolação de um conjunto de valores para o parâmetro indicado em que os valores
y1
, …,yn
estão distribuídos de forma uniforme de[0, 1]
.
“Plugins” Personalizados¶
Poderão ser criadas funções personalizadas em C++ e carregadas como um ou mais “plugins” dinâmicos. Veja como Criar “Plugins” de Expressões Personalizados para ver mais detalhes.
Aviso
Esta funcionalidade não é suportada no Krita.
Comentários¶
Poderá adicionar comentários ao seu programa se usar o carácter
#
. O SeExpr irá então ignorar o resto da linha para fins de desenho. Contudo, eles não são ignorados; os comentários podem à mesma ser usados para declarar o intervalo de valores válido para as variáveis inteiras, fraccionárias e vectoriais. Isto permite-lhe geri-las com controlos gráficos que irão aceitar o intervalo indicado.Dica
O
$var0
é uma variável inteira que varia entre 0 e 10, inclusive:$var1
é uma variável de vírgula flutuante com o mesmo intervalo:$var2
é um variável de vector:A última é muito útil; o SeExpr considera os vectores com um intervalo
[0, 1]
como cores:Em todos os casos, se não for indicado, o intervalo dos controlos associados vai de 0 a 1.
Para uma expressão em várias linhas, cada uma pode ter o seu próprio comentário.