Handige overzicht van commando’s in SeExpr¶
Deze pagina beschrijft gedetailleerd alle beschikbare variabelen, functies en operators in SeExpr. Het is een zwaar bewerkte versie van de officiële gebruikersdocumentatie, aangepast voor gebruik met Krita.
Zie ook
Broncode op KDE Invent
SeExpr van Disney API-documentatie
Zie ook
Variabelen¶
Externe variabelen¶
Deze variabelen worden geleverd door het host-programma, in dit geval Krita. Ze zijn verzamelt met de autocomplete help van SeExpr, die u kunt starten met Ctrl+Space.
Lokale variabelen¶
Lokale variabelen kunnen aan het begin van een script worden gedefinieerd.
$a = noise($P);
$b = noise($a * 1);
pow($a, 0.5) + $b
Externe variabelen kunnen ook lokaal worden overschreven. Dit kan handig zijn als u bijvoorbeeld de ruis-frequentie wilt aanpassen.
$P = $P * 10; # ruisfrequentie verhogen
fbm(vnoise($P) + $P/4)
U kunt ook namespaced variabelen definiëren, b.v.:
$A::a = $u * 10;
Besturingsstructuren¶
Bij SeExpr zijn ook structuren met de bekende if conditie mogelijk:
if ($ u > 0.5) {
$color = [0, 0, 1];
}
else {
$color = [1, 0, 0];
}
$color
En de ternaire operator:
$u = $i < .5 ? 0.0 : 10.0
U kunt naar wens ternaire operators nesten, bijv.:
$color = $u < .5 ? ($v < 0.5 ? [0, 0, 1] : [1, 0, 0]) : [0, 1, 0];
$color
U kunt hetzelfde bereiken met de if structuren:
if ($ u > 0.5) {
if ($v < 0.5) {
$color = [0, 0, 1];
}
else {
$color = [1, 0, 0];
}
}
else {
$color = [1, 0, 0];
}
$color
Opdrachten (in aflopende volgorde)¶
- [a,b,c]¶
maker van vectorconstructie
- $P[ n ]¶
toegang tot vectorcomponent
Hint
nmoet zijn 0, 1, of 2, b.v.:$P[0]
- ^¶
Exponent
Notitie
Hetzelfde als de “pow” functie.
- !¶
logisch NIET (NOT)
- ~¶
Inversie (omgekeerd)
Hint
~$A
Geeft hetzelfde resultaat als:
1 - $A
- */ %¶
Vermenigvuldigen, delen, modulus
Notitie
%is hetzelfde als defmodfunctie.- +-¶
Optellen, aftrekken
- <> <= >=¶
Vergelijking: kleiner dan, groter dan, kleiner of gelijk aan, groter of gelijk aan
Notitie
Gebruikt alleen het eerste component van een vector.
- == !=¶
gelijk aan, ongelijk aan
- &&¶
logisch EN (AND)
- ||¶
logisch OF
- ?:¶
ternaire
ifoperatorHint
Voorbeeld:
$u < .5 ? 0 : 1
- ->¶
apply - De functie rechts van de pijl wordt uitgevoerd op de uitdrukking links.
Hint
Voorbeelden:
$Cs->contrast(.7) -> clamp(0.2,0.8) $u->hsi(20,1.2,1,$Cs->gamma(1.2))
opdrachten voor toewijzen¶
Naast de standaard toewijs-opdracht:
$foo = $bar
U kunt ook toewijs-opdrachten opgeven zoals:
$foo += $bar;
die overeenkomt met:
$foo = $foo + $bar;
Daarnaast zijn er:
+=-=/=%=*=^=
Functies voor het loggen¶
- float printf ( string format, [param0, param1, …] )¶
Stuurt een string naar stdout die volgens instructie wordt opgemaakt. Geldige opmaak-parameters zijn
%fvoor float (neemt het eerste deel van een vector argument) of%vvoor een vector.Hint
Als u bijvoorbeeld schrijft:
$u = printf("test %f %v",[1,2,3],[4,5,6]);Dan krijgt u op de commandoregel te zien:
test 1 [4,5,6]
- string sprintf ( string format, [double|string, double|string, …] )¶
Geeft een string terug die opgemaakt is volgens de opgegeven waarden. Lees
man sprintfvoor details wat betreft de opmaak.
Functies wat betreft Kleuren, maskeren en Remapping¶
- float bias ( float x, float b)¶
Het variëren van gamma waarbij de control parameter gaat van
0tot1waarbij de waarde> 0.5de kromme omhoog trekt en waarden< 0.5de kromme omlaag trekt. Gedefinieerd alspow(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 )¶
De step functies zijn nul voor
x < aen voor forx > b(ofx > ain het geval van de boxstep). Tussenaenbvarieert de waarde continu tussen nul en een. Degausstepfunctie gebruikt de standaard Gaussiaanse “bell” kromme die gebaseerd is op een exponentiële kromme. Desmoothstepfunctie gebruikt een kubische kromme. Intuïtief heeftgausstepeen scherpe overgang vlakbij een en zachtere overgang bij nul waarsmoothstepeen middelmatige overgang vlakbij een en nul heeft.- float clamp ( float x, float lo, float hi )¶
Beperkt
xtot de range[lo, hi].- float compress ( float x, float lo, float hi )¶
Comprimeert de dynamische range van
[0, 1]naar[lo, hi].- float contrast ( float x, float c )¶
Past het contrast aan. Voor
cvan0tot0.5, wordt het contrast verminderd. Voorc > 0.5, wordt het contrast vergroot.- float expand ( float x, float lo, float hi )¶
Maakt de dynamische range groter van
[lo, hi]naar[0, 1].- float fit ( float x, float a1, float b1, float a2, float b2 )¶
Het lineair overzetten van
[a1..x..b1]naar[a2..x..b2]- float gamma ( float x, float g)¶
pow(x, 1/g)- float invert ( float x )¶
Inverteert de waarde. Gedefinieerd als
1 - x.- color hsi ( color x, float h, float s, float i, float map=1 )¶
De
hsifunctie verschuift de tint meth(in graden) en versterkt de verzadiging en intensiteit met respectievelijkseni. Een overzettabel kan gebruikt worden voor de verschuiving. Een volledige verschuiving vindt plaats als de overzetwaarde is een en geen verschuiving zal plaats vinden als de overzetwaarde nul is. De verschuiving wordt verschaalt met waarden tussen nul en een.- color hsltorgb ( color hsl )¶
- color rgbtohsl ( color rgb )¶
RGB naar HSL kleurruimte conversie. HSL is Tint(Hue), Verzadiging (Saturation), Helderheid (Lightness) (alles in de range
[0, 1]). Deze functies zijn uitgebreid om ook RGB en HSL waarden buiten de range[0, 1]in een redelijke manier te kunnen bewerken. Voor elke RGB en HSL waarden (behalve negatieve waarden) is de conversie goed gedefinieerd en omkeerbaar.- color midhsi ( color x, float h, float s, float i, float map, float falloff=1, int interp=0 )¶
De
midhsifunctie is hetzelfde als dehsifunctie behalve dat de controle-tabel is gecentreerd is rond het middelpunt (waarde van0.5) en de verschuiving beide richtingen kan plaats vinden. Bij het middelpunt vindt er geen verschuiving plaats. Bij 1.0, is er een volledige verschuiving, en bij0.0, is er een complete omgekeerde verschuiving. Daarnaast zijn erfalloffeninterpom de overzettabel aan te passen met behulp van deremapfunctie. Met de standaardfalloffeninterpwaarden vindt er geen remapping plaats.- float mix ( float a, float b, float alpha )¶
Een mengsel van a en b overeenkomstig alpha. Gedefinieerd als
a*(1-alpha) +b*alpha.- float remap ( float x, float source, float range, float falloff, int interp )¶
Algemene overzet-functie. Als
xis in de± reeksvan de bron, dan is het resultaat een (1). Het resultaat gaat naar nul (0) buiten die reeks verder dan defalloffafstand. De vorm van falloff wordt bestuurd doorinterp.Notitie
Getallen en constanten mogen worden gebruikt:
int linear = 0
int smooth = 1
int gaussian = 2
Ruis functies¶
- 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 )¶
cellnoisegenereert een veld van constant gekleurde kubussen op basis van de locatie van het gehele getal. Dit is gelijk aan de PRMan cellnoise function.Notitie
ccellnoisegeeft gekleurde cell-ruis.- float fbm ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- color cfbm ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- vector vfbm ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- float fbm4 ( vector v, float time, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- color cfbm4 ( vector v, float time, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- vector vfbm4 ( vector v, float time, int octaves=6, float lacunarity=2, float gain=0.5 )¶
fbm(Fractale Brownse beweging) is een multi-frequentie ruis functie. De basis frequentie is gelijk aan denoise(ruis)functie. Het totale aantal frequenties wordt geregeld metoctaves. Thelacunariteitregelt de afstand tussen de frequenties - een waarde 2 betekent dat elke octaaf twee keer de voorgaande frequentie is. De ``gain` regelt de schaal van elke frequentie vergeleken met die van de vorige frequentie.Notitie
cfbmencfbm4geeft gekleurde ruis.vfbmenvfbm4geeft vector ruis.- float hash ( float seed1, [float seed2, …] )¶
Als
rand, maar zonder interne seeds. Elk aantal seeds is mogelijk en het gegeven antwoord is afhankelijk van alle gegeven seeds.- 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 period )¶
- float snoise ( vector v)¶
- float snoise4 ( vector v, float t)¶
- vector vnoise (vector v )¶
- vector vnoise4 (vector v, float t )¶
noiseis een functie voor willekeurigheid die soepel mengt tussen samples op locaties met gehele getallen. Dit is de originele noise-functie van Ken Perlin.Notitie
cnoiseencnoise4geven gekleurde ruis.noise4geeft van teken voorziene vector-noise.pnoisegeeft periodieke ruis.snoiseensnoise4geeft noise (ruis) met een teken binnen de reeks[-1, 1].vnoisegeeft van teken voorziene vector-noise.- float rand ( [float min, float max], [float seed] )¶
Willekeurig getal tussen
[min, max](of[0, 1]indien niet gespecificeerd). Als een seed is gegeven, zal het gebruikt worden naast de interne seeds en kan gebruikt worden om meerdere gescheiden generators aan te maken.- float turbulence ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- color cturbulence ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
- vector vturbulence ( vector v, int octaves=6, float lacunarity=2, float gain=0.5 )¶
turbulenceis een variant vanfbmwaar de absolute waarde van elke ruisterm is genomen. Ziet er meer golvend uit.- float voronoi ( vector v, int type=1, float jitter=0.5, float fbmScale=0, int fbmOctaves=4, float fbmLacunarity=2, float fbmGain=0.5)¶
- color cvoronoi ( vector v, int type=1, float jitter=0.5, float fbmScale=0, int fbmOctaves=4, float fbmLacunarity=2, float fbmGain=0.5)¶
- vector pvoronoi ( vector v, float jitter=0.5, float fbmScale=0, int fbmOctaves=4, float fbmLacunarity=2, float fbmGain=0.5)¶
voronoiis een cellulair ruispatroon. Het is een zenuwachtige variant vancellnoise. Het type parameter beschrijft verschillende varianten van de ruisfunctie. De parameterjitterbestuurt hoe onregelmatig het patroon is (0 is zoals gewone cellnoise er uit ziet). De parametersfbm...kunnen gebruikt worden om het ruisveld te verstoren. WanneerfbmScalenul is (de standaard), is er geen verstoring. De overblijvende parameters zijn hetzelfde als voor de functiefbm.Hint
Voronoi types 1 tot 5:

Notitie
cvoronoigeeft een willekeurige kleur voor elk vakje enpvoronoigeeft de punt-locatie voor het middelpunt van dat vakje.
Functies voor selectie¶
- float choose ( float index, float choice1, float choice2, […] )¶
Selecteert een van de in de index opgegeven keuzes (aangenomen dat die in de range vallen
[0, 1]).- int cycle ( int index, int loRange, int hiRange )¶
Cyclisch gaan door de waarden tussen loRange en hiRange, op basis van de gegeven index. Dit is een offset
mod-functie. Het resultaat wordt berekend alsloRange + value % (hiRange-loRange+1).- int pick ( float index, int loRange, int hiRange, [ float weights, … ] )¶
Kiest willekeurige waarden tussen loRange en hiRange op basis van de opgegeven index (met automatische hash). De waarden worden verdeeld volgens de opgegeven gewichten. Een niet opgegeven gewicht wordt verondersteld 1.0 te zijn.
- float wchoose ( float index, float choice1, float weight1, float choice2, float weight2, […] )¶
Kiest een van de opgegeven keuzes op basis van de index (volgens aanname in bereik
[0, 1]. De waarden worden verdeeld naar de opgegeven gewichten.
Hint
Dit voorbeeld geeft gehele getallen tussen 1 en 10:
pick(value, 1, 10)
Dit voorbeeld geeft de waarden 1 en 2 respectievelijk twee en 2.5 zo vaak vergeleken met de andere waarden (3-10):
pick(value, 1, 10, 2, 2.5)
Dit voorbeeld geeft 10, 11, en 13 tot 20 (12 is overgeslagen vanwege het gewicht nul):
pick(value, 10, 20, 1, 1, 0)
Algemene wiskundige constanten en functies¶
- float abs ( float x)¶
Absolute waarde van
x.- float cbrt ( float x )¶
Derdemachtswortel.
- float ceil ( float x )¶
Volgende hogere integer.
- float exp ( float x )¶
Etot de machtx.- float floor ( float x )¶
Volgende lagere integer.
- float fmod ( float x, float y )¶
Restgetal van
x / y.Notitie
Ook beschikbaar als
%bewerking.- float log ( float x )¶
Natuurlijke logaritme.
- float log10 ( float x )¶
Logaritme met grondtal 10.
- float max ( float a, float b )¶
De grootste van
aenb.- float min ( float a, float b )¶
Kleinste van
aenb.- float pow ( float x, float y )¶
xtot de machty.Notitie
Ook beschikbaar als
^bewerking.- float round ( float x )¶
Dichtstbijzijnde integer.
- float sqrt ( float x )¶
Vierkantswortel.
- float trunc ( float x )¶
Dichtstbijzijnde integer richting nul (0).
Trigonometrie-functies¶
- float acos ( float x )¶
Arccosinus.
- float acosd ( float x )¶
Arc cosinus in graden.
- float acosh ( float x )¶
Hyperbolische arccosinus.
- float asin ( float x )¶
Arcsinus.
- float asind ( float x )¶
Arcsinus in graden.
- float asinh ( float x )¶
Hyperbolische arcsinus.
- float atan ( float x )¶
Arctangens.
- float atand ( float x )¶
Arctangens in graden.
- float atan2 ( float y, float x)¶
Arctangens van
y/xtussen-PIenPI.- float atan2d ( float y, float x )¶
Arctangens in graden van
y/xtussen-180ºen180º.- float atanh ( float x )¶
Hyperbolische arctangens.
- float cos ( float x )¶
Cosinus.
- float cosd ( float x )¶
Cosinus in graden.
- float cosh ( float x )¶
Hyperbolische cosinus.
- float deg ( float x )¶
Radialen naar graden.
- float hypot ( float x, float y )¶
Lengte van 2D vector
[x, y].- float rad ( float x )¶
Graden naar radialen.
- float sin ( float x )¶
Sinus.
- float sind ( float x )¶
Sinus in graden.
- float sinh ( float x )¶
Hyperbolische sinus.
- float tan ( float x )¶
Tangens.
- float tand ( float x )¶
Tangens in graden.
- float tanh ( float x )¶
Hyperbolische tangens.
Functies met vectoren¶
- float angle ( vector a, vector b )¶
Hoek tussen twee vectors (in radialen).
- vector cross ( vector a, vector b )¶
Kruisproduct van vector.
- float dist ( vector a, vector b )¶
Afstand tussen twee punten.
- float dot ( vector a, vector b)¶
Dot-product van vector.
- float length ( vector v )¶
Lengte van vector.
- vector norm ( vector v )¶
Vector verschaalt tot lengte-eenheid.
- vector ortho ( vector a, vector b )¶
Vector loodrecht op twee vectors.
- vector rotate ( vector v, vector axis, float angle )¶
Roteert
vrond een as met opgegeven hoek` (in radialen).- vector up ( vector v, vector up )¶
Roteert
vzodanig dat de Y as in deuprichting wijst.
Gebruik van vectoren¶
Vectors (punten, kleuren of 3D vectoren) mogen gemengd worden met scalars (eenvoudige zwevende-komma-waarden). Als een scalar gebruikt wordt in een vectorcontext, wordt het gerepliceerd in de drie componenten, bijv. 0.5 wordt [0.5, 0.5, 0.5].
Als een vector gebruikt wordt in een scalarcontext, wordt alleen de eerste component gebruikt. Een van de voordelen hiervan is dat alle functies die gedefinieerd zijn om te werken met scalars automatisch werken met vectoren. Bijvoorbeeld, pick, choose, cycle, spline, etc., zullen gewoon goed werken met vectoren.
Wiskundige bewerkingen zoals +, *, enz., en scalar functies worden onderdeel-gewijz toegepast op vectoren. Als voorbeeld, het toepassen van de gamma functie op een map wijzigt de gamma van alle drie de kleuren kanalen.
Functies met krommen¶
Interpolatie van parameterwaarden naar een set met besturingspunten wordt geregeerd door de volgende functies.
- color ccurve ( float param, float pos0, color val0, int interp0, float pos1, color val1, int interp1, […] )¶
Interpoleert kleurhelling gegeven door besturingspunten bij
param. Besturingspunten worden gespecificeerd door tripels van parameterspos_i,val_ieninterp_i.Hint
Interpolatie codes zijn:
0 - geen
1 - lineair
2 - glad
3 - spline
4 - monotone (niet-oscillerende) spline
- float curve ( float param, float pos0, float val0, int interp0, float pos1, float val1, int interp1, […] )¶
Interpoleert een 1D-helling gedefinieerd door besturingspunten bij
param. Besturingspunten worden gespecificeerd door tripels van parameterspos_i,val_ieninterp_i.Hint
Interpolatie codes zijn:
0 - geen
1 - lineair
2 - glad
3 - spline
4 - monotone (niet-oscillerende) spline
- float spline ( float param, float y1, float y2, float y3, float y4, […] )¶
Interpoleert een verzameling waarden met de opgegeven parameter waar
y1, …,yngelijk worden verdeeld tussen[0, 1].
Eigen aangepaste plugins¶
Eigen aangepaste functies kunt u schrijven in C++ en worden als een of meer dynamische plugins geladen.Lees Writing Custom Expression Plugins voor meer details
Waarschuwing
Deze functionaliteit wordt niet door Krita ondersteunt.
Commentaar¶
U kunt commentaar toevoegen aan uw script door het
#karakter te gebruiken. SeExpr zal dan voor het renderen de rest van de regel overslaan. Maar ze worden niet genegeerd; commentaar kan nog steeds worden gebruikt om een geldige range te declareren voor integer, float, en vector variabelen. Hierdoor kunt u ze gebruiken voor widgets die dan de opgegeven range zal accepteren.Hint
$var0is een integer variabel die varieert tussen 0 en 10 inclusief:$var1is een drijvende komma variabel met dezelfde range:$var2is een vector variabel:Deze laatste is erg handig; SeExpr ziet vectors met een bereik van
[0, 1]als kleuren:In alle gevallen indien niet anders opgegeven, is het bereik van de bijbehorende widgets’ van 0 tot 1.
Bij een meerregelige uitdrukking, mag elke regel zijn eigen commentaar hebben.