script Gonta image en dessin

Où on parle des différentes versions de Pixia, de script Gonta...

Modérateur: gg

Messagede Eric le Dim Oct 14, 2007 17:10

GG sait bien voir le point virgule qui manque ...

La derniere méthode pour ajouter un script est la plus simple , a condition que je ne fasse pas d' erreur ..
Je teste toujours avant . Content de savoir que cela fonctionne ailleurs .
Avatar de l’utilisateur
Eric
 
Messages: 761
Inscription: Ven Aoû 25, 2006 10:49
Localisation: France (80)

Messagede gg le Dim Oct 14, 2007 21:53

ben ,en fait, ce n'est pas trop compliqué : si ça marche, c'est que c'est bon ! si ça ne marche pas... c'est qu'il y a un problème :lol:

lapalisse est mon maître :)


et le ; était facile à voir, c'était le dernier élément...

et mine de rien, je me suis vachement intéressé à l'écriture de script gonta, je n'ai jamais rien compris (ou presque) et je n'ai jamais eu l'idée d'un script qui me pousserait à m'impliquer réellement, mais je m'y suis penché de nombreuses fois, ça aide...
Avatar de l’utilisateur
gg
 
Messages: 984
Inscription: Lun Aoû 28, 2006 12:55

Messagede Eric le Mer Oct 17, 2007 20:47

Et Lapallisse à raison :lol:

A ce satané point virgule que l' on confond facilement avec la virgule ou les 2 points . ...

Bon un autre truc que j' avais déjà évoqué .
C' est une modif des puzzles de Gonta pour appliquer une texture sur une image.
La taille et l' orientation de cette texture est réglable , c' est un avantage par rapport à peindre avec une texture .
L' effet peut etre positif ou négatif

Le script :

Gauche:

Code: Tout sélectionner
coord=-1;
cx=0;cy=0;
?pp,Papier,0,20,0;
?ef,Effect ,-15,15,5;
?ang,Angle,0,360,0;
?px,Phase X,0,64,0;
?py,Phase Y,0,64,16;
?ta,Taille,1,20,10;
ang=2*pi*ang/360;
ta=ta/10;
bg=1;
LoadBmpNum(0,"Tex/papier",pp);
ef=ef/10;



Droite:

Code: Tout sélectionner
rc=R; gc=G; bc=B;
d=sqrt((x*x)+(y*y));
ang2=acos(x/d);
x3=cos(ang+ang2)*d;
y3=sin(ang+ang2)*d;
x2=int(x3/ta);
y2=int(y3/ta);
getb(0,x2-px,y2-py);
R=rc+(R-128)*ef;
G=gc+(G-128)*ef;
B=bc+(B-128)*ef;
_Pset(x,y);


ATTENTION:

Ce script ne peut etre utilisé en l' état !Il faut des textures. Si vous les faites :
:arrow: Il faut placer dans le repetoire Gonta->Tex les textures convenablement numérotées.
Soit papier00.bmp , papier01.bmp ,....papier14.bmp ....
:arrow: Ces textures ont une taille maxi de 256 pixels :
:arrow: Aucun vide dans la numérotation (crash de pixia )
:arrow: La numérotation commence à 00 !
:arrow: Modifier la ligne ( fenetre de droite )
?pp,Papier,0,20,0;
en remplaçant le chiffre 20 par le numéro de votre dernier bmp

En fait c' est pas sorcier.

Si vous les faites pas
Vous trouverez ici un fichier zip de 21 textures à dézipper dans Gonta->Tex pour tester ce filtre sans rien modifier ,ni renommer les bitmaps. (c' est dans le port folio )
http://www.puceron.net/Nouveaux-scripts

Hormis les 4 ou 5 premieres empruntées à un autre soft, j' ai fait les autres.
Toutes ne sont pas tip top , mais bon .

Par contre j' ai pas encore fait l' extrait de ce script pour la fonction ajouter de Gonta car il n' est pas finalisé.
Je cherche à modifier la superposition de l' image et de la texture .

@+ Eric
Avatar de l’utilisateur
Eric
 
Messages: 761
Inscription: Ven Aoû 25, 2006 10:49
Localisation: France (80)

Messagede gg le Jeu Oct 18, 2007 01:05

très sympa ce script... la première idée qui me vient à l'esprit, c'est qu'il parait parfait pour tracer des lignes pointillées... ou alors je me trompe, mais j'ai l'impression que dans ce cas, il ne faudrait pas une grosse modif du script.
Avatar de l’utilisateur
gg
 
Messages: 984
Inscription: Lun Aoû 28, 2006 12:55

Messagede gg le Jeu Oct 18, 2007 02:05

ouais bon, ce n'est pas évident évident... faisable mais carrément pas pratique.

alors je te pose une question : serait-il possible de faire ce genre de filtre avec gonta ?

ne serait-il pas possible de fixer un point de départ avec ses coordonnées (ça je crois bien que c'est possible), un point d'arrivée... et entre les deux faire dessiner des traits d'une largeur a, d'une longueur b, coupés par des intervalles blancs d'une longueur c.

ou alors (au mieux..) pouvoir utiliser la fonction de remplir une sélection, avec l'outil filtre et tout ce qu'on aurait à dire c'est la longueur et l'épaisseur des pointillés.

???

ou alors, à partir de ton filtre, avoir une image de rectangles noir et blancs et au lieu d'avoir en variable ton angle, le faire déduire par les variables des coordonnées des points d'arrivées et de départ (à ma grande honte, je ne me souviens plus de la formule pour déduire un angle à partir des coordonnées, à partir de l'arctangente si je me souviens bien (bon dieu, ça commence à faire vieux mes cours de math :) )
Avatar de l’utilisateur
gg
 
Messages: 984
Inscription: Lun Aoû 28, 2006 12:55

Messagede Eric le Jeu Oct 18, 2007 22:44

C' est pas vraiment ce qu' il y a de plus simple contrairement aux apparences , et je regrette le bon vieux basic des années 80 .

pour les pointillés , une approche
soit lplein la longueur du 'noir ' et lvide la longueur du blanc
pour un pointillé suivant l' axe x :
calculer si l' on est dans le plein ou le vide
soit ltot =lplein+lvide
la position dans le segment est donné par le reste (entier ) de la division x/ltot ( x modulo ltot qui s' écrit x%ltot )
si ce reste est inférieur à lplein+1 , c' est noir , autrement on est dans le blanc

pour l' épaisseur , toujours suivant l' axe x , y peut etre compris entre 0 et epaisseur . if (y>=0) && (y< epaisseur){ alors on calcul}

pour regler l' endroit du trait , dans la fenetre de droite on écrit cy=endroit du trait , Gonta va de cette façon calculer le y qu' il nous fournit en fonction de la hauteur qu' on lui donne . On lui indique ou se trouve le centre de l' image par cx= et cy=

donc à gauche 4 infos à recuperer :
la hauteur du trait , la longueur du noir , celle du blanc et l' epaisseur du trait .Il vaut mieux traduire la hauteur du trait en pourcentage de la taille de l' image en s' aidant de la taille de l' image ys fournie par Gonta
Un bouton glissiere s' ecrit:
?(on creer un bouton),mem (nom de la variable),Affiche ( le titre du bouton), valeur mini,valeur maxi, valeur par défaut;

Gauche :
---------------------------------------
Code: Tout sélectionner
coord=0;
?haut,Hauteur,1,100,10;
?lplein,Noir,0,100,10;
?lvide,Blanc,0,100,5;
?ep,Epaisseur,1,20,5;
cy=ys*haut/100;
cx=0;
ltot=lplein+lvide;



---------------------------------------
nous avons nos 4 glissieres et la place du trait (cy=ys*cy/100; )
___________________________

Droite : ( les calculs pour chaque pixels )
----------------------------------------------------
Code: Tout sélectionner
if((y>=0)&&(y<ep)){
pos=x%ltot;
if (pos<=lplein){
R=0;G=0;B=0;   
}



---------------------------------------------------------------

Logiquement c' est bon . Il serait élégant de finir par un plein (noir) ...

Maintenant la rotation ...

soit on calcule l' angle d' un point avec l' origine et la distance de ce point avec cette origine puis on change l' angle et on garde la meme distance pour le nouveau et le nouveau y
distance =racine carré (x*x)+(y*y)
angle =atn ( y/x ) avec angle en radian. (tangente :opposé/adjacent)
ou :
angle =acos(x/distance)
ou angle =asin(y/distance)
la valeur retournée est en radian . 360 degrés = 2 *pi *radian

puis modification:
angle2=angle+ajout;
et calcul des nouvelles coordonnees:
x2=distance*cos(angle2); y2=distance*sin(angle2);


Soit , parceque que j' ai fait ça souvent mais c' est tres tres tres lointain
:wink: je retrouve un peu du passé chez wikipédia
http://fr.wikipedia.org/wiki/Rotation_plane

soit teta l' angle de rotation:
x2=x*cos(teta)+y*sin(teta)
y2=-x*sin(teta)+y*cos(teta)

Cette méthode est preferable des lors que le centre du repere cartésien n' est pas en haut à gauche.

Rappel:Gonta ne travaille qu' en radian !

On peut maintenant ajouter une autre boucle dans le script qui se chargera de la rotation.
ajoutons:
à gauche un bouton glissiere :
?ang,Angle,0,360,0;


la conversion en radian
ang=ang*2*pi/360;
deux boucles:
loop=2;

à doite : loop=2 ( premier passage ) : les pointillés
loop=1: la rotation
calcul de x2 et y2
puis R=R(x2,y2);G=G(x2,y2);B=B(x2;y2) ce qui donne au point de coordonnée x y les composants R G B du point x2 y2
donc :
if (loop ==2){ comme avant}
else {
x2=(x*cos(ang))+(y*sin(ang));
y2=(y*cos(ang))-(x*sin(ang));
R=R(x2,y2);
G=G(x2,y2);
B=B(x2;y2)
}

Le principe fonctionne , mais pas pratique :
si on fait ça sur une image: toute l' image tourne
Suivant l' angle , on a plusieurs traits .... ( des qu' un point sort de l' image Gonta utilise le modulo cité plus haut et remet le point dans l'image
Souvent pratique , mais quelques fois casse pied !!!)
Dernier obstacle : la longueur de l' axe choisi par rapport à celle de la diagonale

Effectivement , c' est pas simple cette affaire , meme sans les pointillés

Autre piste : l' equation d' une droite : y =ax+b et que l' on peut calculer sachant que cette droite passe par deux points :wink:
en général a est la tangente de l' angle de la droite ( en radian pour Gonta)

à gauche : coord=-1, puis les boutons

à droite :
R=0;G=0;B=0; le pinceau
y2=ax+b a et b venant des boutons et x de Gonta
_Pset(x,y2) pour un point à tracer


Aiie ! c' est pire que tout !

La droite est naturellement pointillée et y' en a partout des bouts de droites ....

AH! ce bon vieux basic
Reverrais ça demain .

+ Eric
Avatar de l’utilisateur
Eric
 
Messages: 761
Inscription: Ven Aoû 25, 2006 10:49
Localisation: France (80)

Messagede gg le Ven Oct 19, 2007 00:20

:lol: :lol: :lol: :lol: bon courage. Je comprends mieux pourquoi je propose et n'essaie pas..; :lol: :lol:

heu... pour les pointillés, pourquoi ne pas utiliser les textures, un trait noir et un trait blanc qui se suivent, un peu comme pour ton script sur les textures... avec au besoin plusieurs modèles.
Avatar de l’utilisateur
gg
 
Messages: 984
Inscription: Lun Aoû 28, 2006 12:55

Messagede Eric le Dim Nov 04, 2007 08:42

heu... pour les pointillés, pourquoi ne pas utiliser les textures, un trait noir et un trait blanc qui se suivent, un peu comme pour ton script sur les textures... avec au besoin plusieurs modèles.


J' y ai bien pensé , mais le gros probleme est d' eviter la répétition du motif.
Il faut donc savoir calculer ou le recopier
J ' ai 2 instructions:
getb(0,x,y);
qui lit le pixel du bitmap .
Un modifiant x et y , on peut l' agrandir , le tourner ...

_Pset(x2,y2);
qui dessine ce pixel à l' endroit indiqué .

2 problemes: les coordonnées de lecture et celle d' écriture

Je vais m' y remettre , mais j' y crois pas beaucoup
Avatar de l’utilisateur
Eric
 
Messages: 761
Inscription: Ven Aoû 25, 2006 10:49
Localisation: France (80)

Messagede Eric le Sam Nov 10, 2007 21:48

Du coup , j' ai ressorti un autre de mes vieux reves : un truc pour faire une texture de bois ( Encore une fois :lol: )
J' ai modifié la fin du script Gonta Nuage , et les slider en conséquence.
ça ressemble presque à la texture procedurale bois de Blender ( soft 3D )
Le rendu prends du temps : commencer par une petite image ( 300x300 )
et désactiver la prévisualisation de gonta pour la demander coup par coup.

Faire suivre de standard flou et du réglage de la luminosité

ça prends du temps quand meme
@+ Eric

Bon : le code :
Fenetre gauche:

Code: Tout sélectionner
coord=0;
cx=0;cy=0;
?Aleas,Aleas,1,1000,1;
?iter,Iteration,1,10,2;
?lum,Facteur,40,100,70;
?div,Diviseur,1,400,100;
div=pi/(div/100);
lum=lum/100;
srand(Aleas);
loop=iter+2;
max=loop;
fr=1;


à droite :

Code: Tout sélectionner
if (loop==max){
R=rand(0,255);
G=0;
B=0;
}
else{
if (loop !=1){
if(x==0 && y==0){fr=fr*2;}
pas=int((xs-1)/(fr));
q=int(x/pas);
b1x=q*pas;
b2x=b1x+pas;
if(b2x>xs){b2x=xs;}
q=int(y/pas);
b1y=q*pas;
b2y=b1y+pas;
if(b2y>ys){b2y=ys;}
b00=R(b1x,b1y);
b01=R(b1x,b2y);
b10=R(b2x,b1y);
b11=R(b2x,b2y);

n=b2y-b1y;
if (n==0){v1=b00;}
if (n==1){v1= b01;}
if (n!=0 &&n!=1){
a=(y-b1y)/n;
vv1=3*pow(1-a, 2)-2*pow(1-a,3);
vv2=3*pow(a, 2)-2*pow(a, 3);
v1=b00*vv1+b01*vv2;
n=b2y-b1y;}
if (n==0){v2=b10;}
if (n==1){v2= b11;}
if (n!=0 &&n!=1){
a=(y-b1y)/n;
vv1=3*pow(1-a, 2)-2*pow(1-a,3);
vv2=3*pow(a, 2)-2*pow(a, 3);
v2=b10*vv1+b11*vv2;
n=b2x-b1x;}
if (n==0){fin=b00;}
if (n==1){fin= b01;}
if (n!=0 &&n!=1){
a=(x-b1x)/n;
vv1=3*pow(1-a, 2)-2*pow(1-a,3);
vv2=3*pow(a, 2)-2*pow(a, 3);
fin=(vv1*v1)+(vv2*v2);}
G=fin*pow(lum,max-(loop-1))+G;
B=G;}
}
if(loop==1){
v=(B-128)/128;
R=(sin((B/div))*128+127);
B=R;G=R;}
Avatar de l’utilisateur
Eric
 
Messages: 761
Inscription: Ven Aoû 25, 2006 10:49
Localisation: France (80)

Messagede nifa le Dim Nov 11, 2007 16:57

Alors voilà je sais que je suis galère mais je je n'arrive pas à comprendre pourquoi quand je fais copier coller ça ne marche pas.

cette fois ci il me dit Aléas erroné mais rien est erroné
nifa
 
Messages: 194
Inscription: Ven Déc 08, 2006 20:05

Messagede gg le Dim Nov 11, 2007 17:35

non, rien n'est erroné, je viens de l'installer et il marche sans souci. ça fait beaucoup de calcul, mais ça marche.
Tu fais comment ? Décris avec précision étape par étape ta façon de faire pour installer le script. On verra peut-être le moment où ça bugge...
Avatar de l’utilisateur
gg
 
Messages: 984
Inscription: Lun Aoû 28, 2006 12:55

Messagede nifa le Dim Nov 11, 2007 17:53

je vais dans réglage, je me mets dans ma catégorie puceron je met le nom bois, jefface tout ensuite je copie la partie gauche je colle puis la droite et je colle enfin je sauve et ça je fais Ok. puis je vaios pr tester et ça me met que quelquechose est erroné.

quand eric m'avait passé directement les fichiers àa integrer il avait pris sans soucis mais quand je colle il y a un truc qui ne lui plait pas et je me sens pas de tout retaper ligne par ligne.
nifa
 
Messages: 194
Inscription: Ven Déc 08, 2006 20:05

Messagede gg le Dim Nov 11, 2007 18:09

alors, mes différences. Avant de coller le filtre, d'abord j'utilise un autre filtre de puceron, puis je ferme les filtres. Comme ça quand je réouvre par réglages, je tombe directement dans la bonne catégorie et je n'ai que le titre à changer.

Je n'efface rien, je copie ma partie gauche sur le forum, je sélectionne tout la partie gauche dans gonta et je colle directement par dessus. Idem pour la droite. Après je sauve.

Alors effectivement, je ne vois pas ce qui peut clocher avec ta manière de faire, nos différences sont justes quelques détails insignifiants.

Je ne vois plus que deux solutions : ou tu es incroyablement maladroit quand tu copies le script et tu copies des trucs en trop ou en moins. Ce qui me paraitrait étrange qu'en même...

ou pour une raison indéterminée tu as un souci avec gonta... essaies avec la version qui est en téléchargement sur le site de puceron (il me semble que c'est celle qui est installée chez moi), ou si c'est celle que tu as déjà, essaie avec une autre version.

a la limite, ce que tu peux faire, c'est aussi reprendre un des fichiers textes des autres filtres, et remplacer les scripts (et les titres), histoire de voir si ça fonctionne.
Avatar de l’utilisateur
gg
 
Messages: 984
Inscription: Lun Aoû 28, 2006 12:55

Messagede nifa le Dim Nov 11, 2007 18:52

ce que tu m'as dit marche. mais quand je réessaye de rentrer les paramètre du bois il me dit que les paramètre initiaux sont erronées mais j'ai vérif ligne par ligne et ce n'est pas un pb de version c'est incompréhensible.
nifa
 
Messages: 194
Inscription: Ven Déc 08, 2006 20:05

Messagede gg le Dim Nov 11, 2007 19:04

j'ai dit beaucoup de chose... :lol: , c'est quoi qui marche ?

parce que c'est réellement incompréhensible. Je viens d'installer le script sur mon vieil win98... et là aussi, je n'ai aucun souci. C'est lent de chez lent (PII à 350 mhz et 256 de ram), mais ça marche très bien. Pourtant, je n'ai pas le même gonta sur l'un et sur l'autre ordi. Comme j'imagine que tu as un ordi plus puissant que ça (enfin... j'espère pour toi), ça ne peut pas être un blem de hardware.

perso, je n'ai qu'une réponse : ?????? mais quoi qui se passe ?

à la limite, tu travailles sur quelle taille d'image ? parce que là sur mon vieux machin j'ai un truc de 500x500 pix.

désolé.
Avatar de l’utilisateur
gg
 
Messages: 984
Inscription: Lun Aoû 28, 2006 12:55

PrécédentSuivante

Retourner vers Développement de Pixia

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités

cron