Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Boîte à outils de dessin | |
| | |
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Boîte à outils de dessin Dim 14 Fév 2016 - 14:28 | |
| J'ai amélioré (j'espère) une boîte à outils que j'ai déjà donné quelque part. Sous forme de SUB, et sans faire appel à des ressources externes à Panoramic, donc pratique à intégrer n'importe où. Les paramètres d'appel sont: - les coordonnées d'affichage de la boîte - le numéro d'objet Picture sur lequel sera effectué le dessin. Ce Picture peut être vierge ou déjà contenir une image quelconque. Avec un exemple d'appel très succinct: - Code:
-
Picture 1: Full_Space 1 Dessin(0,Height(0),1) Terminate ' ============================================================================== SUB Dessin(xa%,ya%,p%) ' Boîte à outils affichée en xa%,ya% pour dessiner sur le picture p% ' Variables définies dans le programme principal: ' subact% (témoin d'activité) ' rtmp$ (répertoire des fichiers temporaires) ' forsub% (Form utilisée par la sub) IF VARIABLE("subact%") = 0 THEN DIM subact%: ' indicateur une sub active IF VARIABLE("rtmp$") = 0 THEN DIM rtmp$: rtmp$ = "C:\TEMP\" IF VARIABLE("forsub%") = 0 THEN DIM forsub% subact% = 1 DIM_LOCAL r,f%,t%,i%,j%,k%,x%,y%,a$,tr%,tg%,tb%,n2t%,npt%,fig%,trac%,term%,ret%,an,cpt DIM_LOCAL x1%,y1%,x2%,y2%,x3%,y3%,sx1%,fpr$,btg%,cap$,rx%,ry%,pix,ima%,fcp$,op%,ck% DIM_LOCAL wf%,hf%,di%,st%,ep%,me%,pa%,bp%,sh%,und%,fsg$,nsg%,ntsg% nsg% = 0: ntsg% = 5: ' nb total de sauvegardes (en boucle) fpr$ = rtmp$+"Savpre.bmp" fcp$ = rtmp$+"Savcop.bmp" fsg$ = rtmp$+"Svg" FILE_SAVE p%,fpr$: FILEBIN_OPEN_READ 1,fpr$: ' sauvegarde image du picture FILEBIN_POSITION 1,18: i% = FILEBIN_READ(1)+256*FILEBIN_READ(1): ' largeur FILEBIN_POSITION 1,22: j% = FILEBIN_READ(1)+256*FILEBIN_READ(1): ' hauteur FILEBIN_CLOSE 1: FILE_DELETE fpr$ r = WIDTH(p%)/i%: ' rapport proportion image dessinée/image réelle IF LABEL("Desfin")=0 THEN LABEL Desfin IF LABEL("Desopt")=0 THEN LABEL Desopt IF LABEL("Desanu")=0 THEN LABEL Desanu IF LABEL("Descou")=0 THEN LABEL Descou IF LABEL("Destim")=0 THEN LABEL Destim IF LABEL("Destra")=0 THEN LABEL Destra IF LABEL("Deslib")=0 THEN LABEL Deslib IF LABEL("Desrec")=0 THEN LABEL Desrec IF LABEL("Desron")=0 THEN LABEL Desron IF LABEL("Destyp")=0 THEN LABEL Destyp IF LABEL("Desrem")=0 THEN LABEL Desrem IF LABEL("Desatx")=0 THEN LABEL Desatx IF LABEL("Destex")=0 THEN LABEL Destex IF LABEL("Despol")=0 THEN LABEL Despol IF LABEL("Despom")=0 THEN LABEL Despom IF LABEL("Desdep")=0 THEN LABEL Desdep IF LABEL("Dessvg")=0 THEN LABEL Dessvg IF LABEL("Deserr")=0 THEN LABEL Deserr DATA "Pal16": ' palette 16 couleurs DATA "000000","000080","0000FF","008000","008080","00FF00","00FFFF","800000" DATA "800080","808000","808080","C0C0C0","FF0000","FF00FF","FFFF00","FFFFFF" n2t% = NUMBER_2D_TARGET: npt% = NUMBER_PRINT_TARGET ' ON_CLICK p%,Desrem f% = forsub%: WHILE OBJECT_EXISTS(f%)=1: f%=f%+1: END_WHILE: forsub% = f% wf% = 145: hf% = 430 FORM f%: TOP f%,ya%: LEFT f%,xa%: HEIGHT f%,hf%: WIDTH f%,wf%: BORDER_SMALL f% COLOR f%,180,255,255: FONT_BOLD f%: FONT_NAME f%,"Arial": ON_CLOSE f%,Desfin CAPTION f%,"- OUTILS DESSIN -" i%=f%+1: ALPHA i%: PARENT i%,f%: TOP i%,3: CAPTION i%,"Trait:" i%=f%+2: PICTURE i%: PARENT i%,f%: TOP i%,0: LEFT i%,32: WIDTH i%,35: HEIGHT i%,23 COLOR i%,0,0,0 i%=f%+3: PICTURE i%: PARENT i%,f%: TOP i%,3: LEFT i%,35: WIDTH i%,WIDTH(i%-1)-5 HEIGHT i%,18: COLOR i%,255,0,0 i%=f%+4: SPIN i%: PARENT i%,f%: LEFT i%,75: WIDTH i%,40: FONT_SIZE i%,10 MIN i%,1: MAX i%,20: POSITION i%,1/r i%=f%+5: PICTURE i%: PARENT i%,f%: TOP i%,25: LEFT i%,0: WIDTH i%,WIDTH(f%)-17 HEIGHT i%,63: 2D_TARGET_IS i%: ON_CLICK i%,Descou RESTORE: READ a$: WHILE a$<>"Pal16": READ a$: END_WHILE FOR j% = 1 TO 4 FOR i% = 1 TO 4 READ a$ tr%=HEX(LEFT$(a$,2)): tg%=HEX(MID$(a$,3,2)): tb%=HEX(RIGHT$(a$,2)) 2D_FILL_COLOR tr%,tg%,tb% 2D_RECTANGLE x%,y%,x%+31,y%+15: x%=x%+32 NEXT i% y%=y%+16: x% = 0 NEXT j% tr% = 0: tg% = 0: tb% = 0: COLOR f%+3,tr%,tg%,tb% i%=f%+6: ALPHA i%: PARENT i%,f%: TOP i%,98: CAPTION i%,"Motif rempliss.:" i%=f%+7: PICTURE i%: PARENT i%,f%: TOP i%,92: LEFT i%,89: WIDTH i%,38: HEIGHT i%,23 COLOR i%,0,0,0 i%=f%+8: PICTURE i%: PARENT i%,f%: TOP i%,115: LEFT i%,0: WIDTH i%,WIDTH(f%)-17 HEIGHT i%,45: 2D_TARGET_IS i%: ON_CLICK i%,Destyp x% = 0: y% = 2 2D_FILL_COLOR 0,0,0 FOR j% = 1 TO 2 FOR i% = 1 TO 4 k% = (j%-1)*4+i% SELECT k% CASE 1: 2D_FILL_OFF: 2D_FILL_COLOR 0,0,0: 2D_FILL_SOLID CASE 2: 2D_FILL_CROSS CASE 3: 2D_FILL_DIAGONAL_CROSS CASE 4: 2D_FILL_DIAGONAL_DOWN CASE 5: 2D_FILL_DIAGONAL_UP CASE 6: 2D_FILL_HORIZONTAL CASE 7: 2D_FILL_VERTICAL END_SELECT 2D_RECTANGLE x%,y%,x%+31,y%+20: x%=x%+32 IF j%=2 AND i%=3 THEN EXIT_FOR NEXT i% y%=y%+21: x% = 0 NEXT j% i%=f%+9: CONTAINER_OPTION i%: PARENT i%,f%: TOP i%,TOP(i%-1)+45: WIDTH i%,WIDTH(f%)-17 LEFT i%,0: HEIGHT i%,180: COLOR i%,255,255,180: op% = i% i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,10: LEFT i%,3: CAPTION i%,"Trait" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,25: LEFT i%,3: CAPTION i%,"Libre" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,40: LEFT i%,3: CAPTION i%,"Rectangle vide" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,55: LEFT i%,3: CAPTION i%,"Rectangle plein" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,85: LEFT i%,3: CAPTION i%,"Cercle/Ellipse vide" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,100: LEFT i%,3: CAPTION i%,"Cercle/Ellipse plein" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,115: LEFT i%,3: CAPTION i%,"Remplir (motif)" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,130: LEFT i%,3: CAPTION i%,"Sélection/Copier" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,145: LEFT i%,3: CAPTION i%,"Coller" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,160: LEFT i%,3: CAPTION i%,"Texte" MARK_ON op%+1 FOR j%=op%+1 TO i%: WIDTH j%,WIDTH(op%)-7: ON_CLICK j%,Desopt: NEXT j% i%=i%+1: CHECK i%: PARENT i%,f%: TOP i%,TOP(op%)+69: LEFT i%,20: CAPTION i%,"coins arrondis" COLOR i%,255,255,180: ck%=i% i%=i%+1: BUTTON i%: PARENT i%,f%: WIDTH i%,20: TOP i%,TOP(op%)+HEIGHT(op%)+2: LEFT i%,0 CAPTION i%,CHR$(231): sh%=i% i%=i%+1: BUTTON i%: PARENT i%,f%: WIDTH i%,20: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+20 CAPTION i%,CHR$(232) i%=i%+1: BUTTON i%: PARENT i%,f%: WIDTH i%,20: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+20 CAPTION i%,CHR$(233) i%=i%+1: BUTTON i%: PARENT i%,f%: WIDTH i%,20: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+20 CAPTION i%,CHR$(234) FOR j%=sh% TO i% FONT_NAME j%,"Wingdings": FONT_SIZE j%,10: ON_CLICK j%,Desdep NEXT j% i%=i%+1: SPIN i%: PARENT i%,f%: WIDTH i%,45: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+22 FONT_SIZE i%,10: MIN i%,1: MAX i%,300: POSITION i%,5 i%=i%+1: BUTTON i%: PARENT i%,f%: WIDTH i%,60: TOP i%,HEIGHT(f%)-60 HEIGHT i%,20: CAPTION i%,"Annuler": ON_CLICK i%,Desanu ON_CLICK i%,Dessvg: und% = i% i%=i%+1:BUTTON i%: PARENT i%,f%: WIDTH i%,55:TOP i%,TOP(i%-1): LEFT i%,70 HEIGHT i%,20: CAPTION i%,"Quitter": ON_CLICK i%,Desfin 2D_TARGET_IS p%: 2D_PEN_DOT FILE_SAVE p%,fpr$ t%=i%+1: TIMER t%: PARENT t%,f%: TIMER_INTERVAL t%,50: ON_TIMER t%,Destim ima% = t%+1: IMAGE ima% trac% = 0: term% = 0: btg% = 0 fig% = 1: ret% = 0: cap$ = CAPTION$(0) CLIPBOARD_COPY p% ON_ERROR_GOTO Deserr ' # # # # # # # # # # BOUCLE D' ATTENTE # # # # # # # # # # # # # # # # # # WHILE 1 > 0: WAIT 100: END_WHILE: GOTO Desfin ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desopt: ' Changement de figure x1% = -1 IF CHECKED(op%+10) = 0 AND OBJECT_EXISTS(ima%+1)=1 FOR i% = ima%+1 TO di%: DELETE i%: NEXT i% WIDTH f%,wf% FILE_SAVE p%,fpr$ END_IF ' Type de figure fig% = 1: ' trait IF CHECKED(op%+2) = 1 fig% = 2: ' tracé libre FILE_SAVE p%,fpr$: ' sauvegarde préalable ELSE IF CHECKED(op%+3) = 1 OR CHECKED(op%+4) = 1 OR CHECKED(op%+8) = 1 fig% = 3: ' rectangle vide ou plein ELSE IF CHECKED(op%+5) = 1 OR CHECKED(op%+6) = 1 fig% = 4: ' cercle vide ou plein ELSE IF CHECKED(op%+7) = 1 fig% = 5: ' remplissage ELSE IF CHECKED(op%+9) = 1 fig% = 6: ' coller ELSE IF CHECKED(op%+10) = 1 fig% = 7: ' texte GOSUB Destex END_IF END_IF END_IF END_IF END_IF END_IF CLIPBOARD_COPY p% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Destim: ' IF CHECKED(op%+7)=1 THEN RETURN: ' remplissage cpt = cpt+1: IF cpt>1000 THEN cpt = 2 x% = MOUSE_X_POSITION(p%)/r: y% = MOUSE_Y_POSITION(p%)/r: ' position actuelle souris a$ = "X= "+STR$(x%)+" pixels Y= "+STR$(y%)+" pixels" CAPTION 0,a$ 2D_PEN_COLOR tr%,tg%,tb%: 2D_PEN_WIDTH POSITION(f%+4) IF MOUSE_LEFT_DOWN(p%) = 1: ' bouton gauche souris enfoncé CLIPBOARD_PASTE p% IF fig% = 5 THEN GOSUB Desrem: RETURN IF fig% = 6: ' coller IF FILE_EXISTS(fcp$) = 0 THEN timer_on t%: RETURN: ' pas de copie FILE_SAVE p%,fpr$ FILE_LOAD ima%,fcp$: 2D_IMAGE_PASTE ima%,x%,y% ELSE x1% = x%: y1% = y%: ' origine IF fig% = 7: ' insertion texte au clic GOSUB Desatx ELSE trac% = 1 IF fig% = 2 AND btg% = 0 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable btg% = 1 END_IF END_IF END_IF IF fig%<6 IF MOUSE_LEFT_UP(p%) = 1: ' relâche, tracé final btg% = 0 IF x1% = -1 THEN RETURN TIMER_OFF t% term% = 1: 2D_PEN_SOLID SELECT fig% CASE 1: GOSUB Destra CASE 2: GOSUB Deslib CASE 3: GOSUB Desrec CASE 4: GOSUB Desron CASE 5: GOSUB Desrem END_SELECT GOSUB Dessvg: ' sauvegarde ' x1% = sx1%: x2% = sx2%: y1% = sy1%: y2% = sy2% CLIPBOARD_COPY p%: term% = 0 trac% = 0: 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255: 2D_PEN_WIDTH 1/r TIMER_ON t% END_IF IF trac% = 1 ' tracé provisoire, en continu 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255: 2D_PEN_WIDTH 1/r if x1% = -1 then return x2% = x%: y2% = y%: ' position actuelle IF x2%=x3% AND y2%=y3% THEN RETURN: ' position inchangée 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255: 2D_PEN_WIDTH 1/r SELECT fig% CASE 1: GOSUB Destra CASE 2: GOSUB Deslib CASE 3: GOSUB Desrec CASE 4: GOSUB Desron END_SELECT x3% = x%: y3% = y% END_IF END_IF TO_FOREGROUND f% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Destra: ' Tracé de droite IF cpt = 1 THEN RETURN: ' init CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable 2D_LINE x1%,y1%,x2%,y2% IF term% = 1 THEN x1% = -1: ' fin de tracé RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Deslib: ' Tracé libre 2D_PEN_SOLID: 2D_PEN_COLOR tr%,tg%,tb%: 2D_PEN_WIDTH POSITION(f%+4) 2D_LINE x1%,y1%,x2%,y2%: x1%=x2%: y1%=y2% IF term% = 1 THEN x1% = -1 RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desrec: ' Rectangle vide ou plein CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable IF term% = 1 AND CHECKED(op%+8) = 1: ' Fin de Select/copie, sauvegarde zone 2D_IMAGE_COPY ima%,x1%,y1%,x2%,y2%: FILE_SAVE ima%,fcp$ ELSE IF term% = 1: ' tracé final IF CHECKED(ck%) = 1: ' rectangle à coins arrondis j% = x2%-x1%: k% = y2%-y1%: ' largeur, hauteur i% = 20/r: ' rayon de courbure arbitraire WHILE i%>j%/2 OR i%>k%/2: i%=i%-1: END_WHILE: ' diminuer le rayon cpt = PI/i%: ' pas (angle) x% = x1%+i%: y% = y1%+i% 2D_LINE x2%-i%,y1%,x1%+i%,y1% FOR an = PI/2 TO PI STEP cpt 2D_POLY_TO x%+i%*COS(an),y%-i%*SIN(an) NEXT an y% = y2%-i% 2D_POLY_TO x1%,y2%-i% FOR an = PI TO 3*PI/2 STEP cpt 2D_POLY_TO x%+i%*COS(an),y%-i%*SIN(an) NEXT an x% = x2%-i% FOR an = 3*PI/2 TO 2*PI STEP cpt 2D_POLY_TO x%+i%*COS(an),y%-i%*SIN(an) NEXT an y% = y1%+i% FOR an = 0 TO PI/2+cpt STEP cpt 2D_POLY_TO x%+i%*COS(an),y%-i%*SIN(an) NEXT an IF CHECKED(op%+4) = 1: ' rectangle plein x% = x1%+(x2%-x1%)/2: y% = y1%+(y2%-y1%)/2 2D_FLOOD x%,y%,tr%,tg%,tb% END_IF ELSE IF CHECKED(op%+4) = 1: ' rectangle plein 2D_FILL_COLOR tr%,tg%,tb%: 2D_RECTANGLE x1%,y1%,x2%,y2% ELSE 2D_LINE x1%,y1%,x2%,y1%:2D_POLY_TO x2%,y2%:2D_POLY_TO x1%,y2%:2D_POLY_TO x1%,y1% END_IF END_IF sx1% = x1%: x1% = -1 ELSE: ' tracé provisoire 2D_LINE x1%,y1%,x2%,y1%:2D_POLY_TO x2%,y2%:2D_POLY_TO x1%,y2%:2D_POLY_TO x1%,y1% END_IF END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desron: ' Ellipse (ou cercle si Maj enfoncé) CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fpr$: ' sauvegarde préalable rx% = (x2%-x1%)/2: ry% = (y2%-y1%)/2: ' rayons H et V IF SCANCODE = 160 THEN ry% = rx%: SCANCODE = 0: ' cercle: touche 'Maj' enfoncée x3% = x1%+rx%: y3% = y1%+ry%: ' centre IF rx% = ry% 2D_FILL_OFF: 2D_CIRCLE x3%,y3%,rx%: 2D_FILL_ON: ' cercle ELSE 2D_POLY_FROM x3%+rx%,y3% FOR an = 0 TO 2*PI STEP PI/180 2D_POLY_TO x3%+rx%*COS(an),y3%+ry%*SIN(an) NEXT an END_IF IF term% = 1: ' tracé final IF CHECKED(op%+6) = 1: ' cercle/ellipse plein IF rx% = ry%: ' cercle 2D_FILL_COLOR tr%,tg%,tb%: 2D_CIRCLE x3%,y3%,rx% ELSE 2D_FLOOD x3%,y3%,tr%,tg%,tb% END_IF END_IF sx1% = x1%: x1% = -1 END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Destyp: ' Type de remplissage: plein ou motif x%=MOUSE_X_LEFT_DOWN(f%+8): y%=MOUSE_Y_LEFT_DOWN(f%+8) i% = 1+INT(x%/31): j% = 1+INT(y%/20): k% = (j%-1)*4+i%: IF k% = 8 THEN RETURN 2D_TARGET_IS f%+7: CLS: 2D_FILL_OFF: 2D_FILL_COLOR 0,0,0 SELECT k% CASE 1: 2D_FILL_COLOR 0,0,0: 2D_FILL_SOLID CASE 2: 2D_FILL_CROSS CASE 3: 2D_FILL_DIAGONAL_CROSS CASE 4: 2D_FILL_DIAGONAL_DOWN CASE 5: 2D_FILL_DIAGONAL_UP CASE 6: 2D_FILL_HORIZONTAL CASE 7: 2D_FILL_VERTICAL END_SELECT 2D_RECTANGLE 0,0,WIDTH(f%+7),HEIGHT(f%+7) 2D_TARGET_IS p%: 2D_FILL_OFF SELECT k% CASE 1: 2D_FILL_SOLID CASE 2: 2D_FILL_CROSS CASE 3: 2D_FILL_DIAGONAL_CROSS CASE 4: 2D_FILL_DIAGONAL_DOWN CASE 5: 2D_FILL_DIAGONAL_UP CASE 6: 2D_FILL_HORIZONTAL CASE 7: 2D_FILL_VERTICAL END_SELECT RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desrem: ' Remplissage au clic souris (uniquement la partie uniforme) IF CHECKED(op%+7)=0 THEN RETURN FILE_SAVE p%,fpr$: ' sauvegarde préalable x% = MOUSE_X_LEFT_DOWN(p%)/r: y% = MOUSE_Y_LEFT_DOWN(p%)/r 2D_FLOOD x%,y%,tr%,tg%,tb% sx1% = x1%: x1% = -1 CLIPBOARD_COPY p% TO_FOREGROUND f% GOSUB Dessvg RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desatx: ' Insertion texte au clic souris IF COUNT(me%)= 0 THEN RETURN TIMER_OFF t% CLIPBOARD_PASTE p%: FILE_SAVE p%,fpr$: ' sauvegarde préalable x% = x1%: y% = y1%: ' point d'insertion k% = TEXT_HEIGHT("Ay",p%): ' y3% = k%*COUNT(me%): ' hauteur totale IF CHECKED(st%+4)=1: ' Fond du texte transparent SHOW bp% HEIGHT pa%,k% FOR y3% = 1 TO COUNT(me%) a$ = ITEM_READ$(me%,y3%): WIDTH pa%,TEXT_WIDTH(a$,p%) 2D_TARGET_IS pa%: COLOR pa%,254,254,254: CLS: 2D_FILL_COLOR 254,254,254 PRINT_TARGET_IS pa%: PRINT a$: ' impression dans le picture auxiliaire PRINT_TARGET_IS p%: 2D_TARGET_IS p%: ' report dans le picture principal FOR j% = 0 TO HEIGHT(pa%)-1 FOR i% = 0 TO WIDTH(pa%)-1 x3% = COLOR_PIXEL_RED(pa%,i%,j%) IF x3%=tr% 2D_PEN_COLOR tr%,tg%,tb% 2D_POINT x%+i%,y%+j% END_IF NEXT i% DISPLAY NEXT j% y% = y%+k% NEXT y3% HIDE bp% ELSE: ' fond du texte opaque FOR i% = 1 TO COUNT(me%) PRINT_LOCATE x%,y%: PRINT ITEM_READ$(me%,i%): y% = y%+k% NEXT i% END_IF sx1% = x1% GOSUB Dessvg: ' sauvegarde TIMER_ON t% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Destex: ' Texte WIDTH f%,wf%+500 i%=ima%+1: ALPHA i%: PARENT i%,f%: TOP i%,4: LEFT i%,wf%: CAPTION i%,"Police:" i%=i%+1: EDIT i%: PARENT i%,f%: TOP i%,1: LEFT i%,wf%+40: WIDTH i%,140 FONT_NAME i%,"Arial": TEXT i%,"Arial": ON_CLICK i%,Despol: ep% = i% i%=i%+1: SPIN i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+10 WIDTH i%,40: MIN i%,4: MAX i%,255: POSITION i%,8: st% = i% ON_CHANGE st%,Despom i%=i%+1: CHECK i%: PARENT i%,f%: TOP i%,1: LEFT i%,LEFT(i%-1)+45: CAPTION i%,"G" FONT_BOLD i%: ON_CLICK i%,Despom i%=i%+1: CHECK i%: PARENT i%,f%: TOP i%,TOP(i%-1): WIDTH i%,30: LEFT i%,LEFT(i%-1)+30 FONT_ITALIC i%: CAPTION i%,"I": ON_CLICK i%,Despom i%=i%+1: CHECK i%: PARENT i%,f%: TOP i%,TOP(i%-1): WIDTH i%,30: LEFT i%,LEFT(i%-1)+30 FONT_UNDERLINE i%: CAPTION i%,"S": ON_CLICK i%,Despom i%=i%+1: CHECK i%: PARENT i%,f%: TOP i%,TOP(i%-1)+20: LEFT i%,LEFT(st%+1) WIDTH i%,120: CAPTION i%,"Fond transparent" i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,44: LEFT i%,wf%+50: COLOR i%,255,255,0 CAPTION i%,"Après saisie, cliquer le point d'insertion du texte dans le dessin " i%=i%+1: MEMO i%: PARENT i%,f%: TOP i%,64: LEFT i%,wf%-10: WIDTH i%,WIDTH(f%)-wf%-10 HEIGHT i%,300: FONT_BOLD_OFF i%: FONT_ITALIC_OFF i%: FONT_UNDERLINE_OFF i% FONT_NAME i%,"Arial": FONT_SIZE i%,POSITION(st%): me%=i% i%=i%+1: LIST i%: PARENT i%,f%: TOP i%,TOP(ep%)+25: LEFT i%,wf%+40: WIDTH i%,180 HEIGHT i%,340: HIDE i%: FONT_NAMES_LOAD i%: COLOR i%,255,255,180 FOR k% = COUNT(i%) TO 1 STEP -1 IF LEFT$(ITEM_READ$(i%,k%),1)="@" THEN ITEM_DELETE i%,k% NEXT k%: ON_CLICK i%,Despom i%=i%+1: PICTURE i%: LEFT i%,-2000: pa% = i%: HIDE i% i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(me%)+100: LEFT i%,LEFT(me%)+20: WIDTH i%,WIDTH(me%)-40 HEIGHT i%,60: FONT_SIZE i%,24: CAPTION i%,"PATIENCE ...": HIDE i%: bp%=i%: font_color bp%,255,0,0 di% = i% PRINT_TARGET_IS p% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Despol: SHOW me%+1 RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Despom: ' Police, taille et enrichissements du texte IF CLICKED(me%+1)=1 THEN TEXT ep%,ITEM_INDEX$(me%+1): HIDE me%+1: ' Police FONT_NAME me%,TEXT$(ep%): FONT_SIZE me%,POSITION(st%) FONT_NAME p%,TEXT$(ep%): FONT_SIZE p%,POSITION(st%)/r FONT_NAME pa%,TEXT$(ep%): FONT_SIZE pa%,POSITION(st%)/r FONT_BOLD_OFF me%: FONT_ITALIC_OFF me%: FONT_UNDERLINE_OFF me% FONT_BOLD_OFF p%: FONT_ITALIC_OFF p%: FONT_UNDERLINE_OFF p% FONT_BOLD_OFF pa%: FONT_ITALIC_OFF pa%: FONT_UNDERLINE_OFF pa% FONT_COLOR me%,tr%,tg%,tb%: FONT_COLOR p%,tr%,tg%,tb%: FONT_COLOR pa%,tr%,tg%,tb% IF CHECKED(st%+1)=1 THEN FONT_BOLD me%: FONT_BOLD p%: FONT_BOLD pa% IF CHECKED(st%+2)=1 THEN FONT_ITALIC me%: FONT_ITALIC p%: FONT_ITALIC pa% IF CHECKED(st%+3)=1 THEN FONT_UNDERLINE me%: FONT_UNDERLINE p%: FONT_UNDERLINE pa% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desdep: ' Déplacement de la dernière figure tracée (boutons flèches) IF fig% = 5 THEN RETURN TIMER_OFF t% i% = NUMBER_CLICK j% = POSITION(sh%+4): ' pas du déplacement, en pixels x1% = sx1% IF i% = sh% x1% = x1%-j%: x2% = x2%-j% ELSE IF i% = sh%+1 x1% = x1%+j%: x2% = x2%+j% ELSE IF i% = sh%+2 y1% = y1%-j%: y2% = y2%-j% ELSE y1% = y1%+j%: y2% = y2%+j% END_IF END_IF END_IF sx1% = x1% FILE_LOAD p%,fpr$: CLIPBOARD_COPY p% term% = 1: 2D_PEN_SOLID SELECT fig% CASE 1: GOSUB Destra CASE 2: GOSUB Deslib CASE 3: GOSUB Desrec CASE 4: GOSUB Desron CASE 7: GOSUB Desatx END_SELECT term% = 0: 2D_PEN_DOT TIMER_ON t% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desanu: ' Annule la dernière opération IF FILE_EXISTS(fpr$) = 1 THEN FILE_LOAD p%,fpr$: CLIPBOARD_COPY p% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Descou: ' Choix de la couleur x%=MOUSE_X_LEFT_DOWN(f%+5): y%=MOUSE_Y_LEFT_DOWN(f%+5) tr%=COLOR_PIXEL_RED(f%+5,x%,y%): tg%=COLOR_PIXEL_GREEN(f%+5,x%,y%) tb%=COLOR_PIXEL_BLUE(f%+5,x%,y%): COLOR f%+3,tr%,tg%,tb% IF OBJECT_EXISTS(ima%+1)=1 THEN GOSUB Despom RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Dessvg: ' Sauvegarde/Restore IF NUMBER_CLICK = und%: ' Undo ' Restore i% = nsg%-1: IF i%<1 THEN i% = ntsg%: ' n° dernière sauvegarde a$ = fsg$+STR$(i%)+".bmp" IF FILE_EXISTS(a$) = 1 THEN FILE_LOAD p%,a$: CLIPBOARD_COPY p% nsg% = i% ELSE ' Sauvegarde nsg% = nsg%+1: IF nsg%>ntsg% THEN nsg% = 1 FILE_SAVE p%,fsg$+STR$(nsg%)+".bmp" END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Deserr: FILE_SAVE p%,fpr$: ' Erreur, sauvegarde de l'existant a$ = "ERREUR N°:"+STR$(ERROR_NUMBER)+" "+ERROR_TYPE$+" Ligne:"+STR$(ERROR_LINE) a$=a$+CHR$(10)+"Sauvegarde dans: "+fpr$ MESSAGE a$ RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desfin: ret% = 1 TIMER_OFF t%: DELETE t%: OFF_CLICK p%: 2D_TARGET_IS n2t%: PRINT_TARGET_IS npt% DELETE f%: DELETE ima%: CAPTION 0,cap$ ' Suppression des sauvegardes FOR i% = 1 TO ntsg% a$ = fsg$+STR$(i%)+".bmp" IF FILE_EXISTS(a$) = 1 THEN FILE_DELETE a$ NEXT i% WAIT 100 subact% = 0: EXIT_SUB RETURN END_SUB ' ==============================================================================
On peut choisir: - la couleur et l'épaisseur du tracé - le motif de remplissage des figures fermées (mais de teinte uniforme) - le type de figure à tracer (le principe est classique): tracé libre: cliquer, tracer, puis relâcher trait: cliquer, déplacer jusqu'à l'arrivée, relâcher rectangle vide ou plein: cliquer un coin, déplacer jusqu'au coin opposé, relâcher cercle/ellipse vide ou plein: cliquer l'enveloppe haut/gauche, déplacer jusqu'en bas/droite, relâcher. Maintenir la touche 'Maj' enfoncée pour obtenir un cercle. Remplir: cliquer la couleur et le motif de remplissage désiré (plein ou hachuré), puis cliquer un point à l'intérieur de la zone à remplir (qui doit être de couleur uniforme) Copier/Coller: il ne s'agit pas du presse-papier mais d'une zone sélectionnée dans le dessin lui-même: Sélectionner: encadrer la zone à copier (dessiner un rectangle) et relâcher: la zone est copiée dans un fichier. Coller: cliquer le coin supérieur gauche de l'insertion de la zone précédemment copiée. Remarque: Il y a plusieurs variables globales utilisées, qui peuvent être définies dans le programme principal: - subact% qui indique que la sub est active ou non, pour éviter un conflit avec une autre sub, ou un double appel. (le Timer inclus n'aime pas que quelqu'un d'autre travaille en même temps...) - forsub%: fournit le numéro souhaité du 1er objet de la sub(à défaut, le 1er numéro disponible) - rtmp$: répertoire des fichiers de manoeuvre temporaires (implicite: C:\TEMP\). J'ai prévu un paramètre 'r' à l'appel, qui est le rapport entre les dimensions physiques du Picture en pixels, et les dimensions réelles de l'image de fond chargée dans ce Picture (cas d'un Stretch_On), pour ajuster automatiquement les coordonnées des dessins. Je ne l'ai pas utilisé, mais le cas échéant il faudrait en tenir compte, et ajuster également les largeurs de traits pour que les tracés redeviennent visibles si l'image est très compressée à l'affichage (les coordonnées données à Panoramic pour le pointage et le tracé tiennent compte du Stretch_On et sont ajustées en conséquence par Panoramic). EDIT 16h00 déjà une modif ! Finalement je tiens compte du paramètre r qui permet, si une image est préalablement chargée dans le picture avec un Stretch_On (par exemple une photo) de tenir compte de sa taille et de rectifier les coordonnées en fonction du taux de compression à l'écran. Ainsi le dessin se fait bien à l'endroit cliqué et non n'importe où. J'ai aussi ajusté la largeur du tracé provisoire en conséquence, pour qu'il soit visible. Pour le tracé réel, si la largeur est trop petite, il peut être invisible à l'écran mais il sera présent dans l'image finale, c'est à voir. Donc plus besoin de r dans les paramètres d'appel, il est calculé automatiquement dans la Sub. EDIT 17/02 ajout des rectangles à coins arrondis EDIT 18/02 ajout d'une fonction 'Texte' pour pouvoir insérer de petits textes dans l'image (avec choix de police, taille, enrichissements, de la couleur courante) à l'emplacement voulu. Possibilité de fond 'transparent', mais dans ce cas l'insertion est assez longue (pixel par pixel). EDIT 20/02 ajout de la possibilité de déplacer la dernière figure (ou texte) dessinée dans les quatre directions, d'un nombre de pixels choisi. Suite: Ajout de sauvegardes successives, en boucle. On peut donc faire des annulations successives des dernières figures dessinées. C'est la variable ntsg% (ici fixée à 5, mais modulable) qui fixe le nombre de sauvegardes accessibles.
Dernière édition par JL35 le Sam 20 Fév 2016 - 15:50, édité 10 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Boîte à outils de dessin Dim 14 Fév 2016 - 15:55 | |
| Bravo, JL35. Toi, tu n’as pas chômé le jour de Valentin ! O ! Pardon ! Valentin c’est plutôt la nuit et nous sommes le jour. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Dim 14 Fév 2016 - 16:16 | |
| Tu as raison mon ami, il faut croire que ça m'inspire (mais ne le dis surtout pas à mon épouse, qui ne plaisante pas avec ces choses-là ! ) Et je m'enfonce encore plus: j'ai fait une modif là-haut pour tenir compte du rapport entre les dimensions d'une image éventuellement contenue préalablement dans le picture et les dimensions du picture lui-même. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Boîte à outils de dessin Dim 14 Fév 2016 - 16:40 | |
| Salut Jeune homme. On n’a pas tous un volume Z : Ligne 12 - Code:
-
IF VARIABLE("rtmp$") = 0 THEN DIM rtmp$: rtmp$ = "Z:"
Garde ton Z à toi, moi je prends : - Code:
-
IF VARIABLE("rtmp$") = 0 THEN DIM rtmp$: rtmp$ = "C:\temp"
A part ça, bravo ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Dim 14 Fév 2016 - 17:51 | |
| Tu as dégainé plus vite que moi, je m'en étais aperçu et j'avais rectifié, mais trop tard ! Quelle idée aussi, de ne pas avoir de disque Z: ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Mer 17 Fév 2016 - 21:52 | |
| Ajout des rectangles (vides ou pleins) à coins arrondis. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 7:53 | |
| J'ai pris un peu de temps pour essayer cette boite à outils dessin(s). c'est intéressant et tout prêt à l'emploi pour intégrer dans un code, bravo JL35. J'ai eu un peu de mal avec les motifs et couleurs, j'ai fini par comprendre qu'il faut faire par étapes et dans le bon ordre. Dommage que le bouton annuler ne fonctionne que sur la dernière opération, mais je suppose que ça ne doit pas être simple de faire plus. Bon aujourd'hui je suis charpentier-couvreur, et on m'attend. A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 10:06 | |
| Merci Jean Claude d'avoir essayé et donné ton avis. C'est une boîte à outils, à intégrer dans un programme principal quelconque. Il n'y a pas de mode d'emploi (ça prendrait trop de place), mais ce n'est pas bien compliqué. Simplement, il faut bien choisir les paramètres avant de dessiner une figure: couleur et épaisseur de trait, et motif de remplissage éventuellement. J'aurais pu faire des annulations sur plusieurs niveaux, mais ça voudrait dire des enregistrements successifs sur des fichiers image à gérer, c'est faisable mais pas très simple, surtout dans une sub. Je suis parti du principe qu'il faut être bien sûr de soi avant de valider la dernière opération (ou l'annuler). Je n'ai pas de programme à te proposer pour la couverture, mais bon sang ! fais bien gaffe à toit (euh, à toi) ! ce n'est pas un temps à se balader sur les toits ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 13:30 | |
| T'inquiète pas JL35, 1) Il ne pleut pas chez moi, c'est gris, sans plus, et la température est de 11° 2) ce n'est pas moi qui monte sur le toit (pas folle la guêpe), je ne fais office que d’assistant (Arpète en langage courant du BTP). Et puis il n'y a que 3.60 X 2.10 m soit 7.56 m² à couvrir. Pour annuler des actions antérieurs, dans ton programme, c'est vrai que c'est pas adapté à une SUB, mais suivant le besoin on peut toujours se le coder soi-même. A propos, j'ai parlé de toi, au couvreur, et lui, il m'a parlé de toit, donc je suppose qu'il te connais... Bon je vais y retourner.... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 13:48 | |
| Le plus simple c'est de stocker les commandes dans une liste dans ce cas et de reconstruire le dessin jusqu'à l'opération n-1 en arrière plan puis d'afficher le résultat
Sinon, on peut avoir n copie des état d'images avec leur numéro stocké dans un tableau de manière a ne bouger que les références à chaque fois et de faire une copie du dessin actuel à la place de la plus vieille sauvegarde | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 15:23 | |
| C'est sûr qu'il y a des solutions relativement faciles à mettre en oeuvre, mais ça me paraît un peu lourd pour une simple sub, av ec des listes de fichiers (qui peuvent devenir très longues) à gérer, et à supprimer en fin de travail. Et comme dit Jean Claude, le couvreur adjoint, chacun peut se les implémenter en fonction de ses besoins. Je suis en train d'ajouter à la sub une fonction d'insertion de texte, ça rallonge un peu mais ça peut être utile. Au fait Jean Claude, le couvreur qui m'a parlé de toi(t), tu l'as faite celle-là à ton couvreur, si ça se trouve il ne l'a jamais entendue ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 16:59 | |
| Je viens de mettre une nouvelle version de KGF.dll en ligne. Les modifications concernent l'objet ImageList. D'une part, on peut maintenant ajouter une image contenue dans le presse-papier, à un objet ImageList, sans passer par un fichier. Et on peut également extraire une image et la placer, soit dans un fichier, soit dans le presse-papier, avec suppression optionnelle de l'image extraite. Les deux fonctions retournent le nombre d'images restantes dans la librairie.
Ainsi, cela devient un jeu d'enfant de faire une fonction "Annuler" non limitée: - avant chaque modification, on copie l'image dans le presse-papier, puis on l'ajoute à une ImageList, mémorisant le nombre résultant. - pour chaque annulation, on extrait la dernière image mémorisée (l'indice est le nombre mémorisé - 1) dans le presse-papier, tout en la supprimant et en mémorisant le nouveau nombre résultant. Puis, on copie le presse-papier dans l'image. - si le nombre mémorisé est 0, on est arrivé à l'état d'origine.
Je sais que tu voulais faire quelque chose en 100 % Panoramic. Mais tu peux imaginer une technique similaire avec une sauvegarde réelle dans un fichier, à chaque étape, et tu mémorises le nom du fichier dans une DLIST.
Voilà, tu as le choix... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 18:25 | |
| Merci Klaus pour ces infos, c'est vrai que c'est une possibilité séduisante (et simple à mettre en oeuvre). Mais ce n'est qu'une petite sub, et ça m'ennuie un peu d'y attacher KGF.dll, ce qui la rend moins universelle. Et d'un autre côté, gérer une liste de fichiers de sauvegarde, pour la même raison, même si c'est faisable facilement, ça me paraît un peu lourd pour une sub.
KGF.dll je m'en sers facilement dans mes programmes (j'aime bien notamment les fonctions d'impression qui font cruellement défaut dans Panoramic).
C'est à voir, j'y réfléchis...
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 19:35 | |
| Juste pour le plaisir, j'ai intégré KGF.dll et les fonctions de ImageList pour l'annulation multi-niveau. Cela se fait sans fichier de sauvegarde, uniquement en mémoire. Voici le code: - Code:
-
' JL35_dessin.bas
Picture 1: Full_Space 1 Dessin(0,Height(0),1) Terminate ' ============================================================================== SUB Dessin(xa%,ya%,p%) ' Boîte à outils affichée en xa%,ya% pour dessiner sur le picture p% ' Variables définies dans le programme principal: ' subact% (témoin d'activité) ' rtmp$ (répertoire des fichiers temporaires) ' forsub% (Form utilisée par la sub) IF VARIABLE("subact%") = 0 THEN DIM subact%: ' indicateur une sub active IF VARIABLE("rtmp$") = 0 THEN DIM rtmp$: rtmp$ = "C:\TEMP\" IF VARIABLE("forsub%") = 0 THEN DIM forsub% IF VARIABLE("KGF_DLL_FILE$")=0 DIM KGF_DLL_FILE$ : KGF_DLL_FILE$ = "KGF.dll" DIM IL%, IL_count% DLL_ON KGF_DLL_FILE$ IL% = DLL_CALL2("CreateImageList",width(p%),height(p%)) IL_count% = 0 END_IF subact% = 1 DIM_LOCAL r,f%,t%,i%,j%,k%,x%,y%,a$,tr%,tg%,tb%,n2t%,fig%,trac%,term%,ret%,an,cpt DIM_LOCAL x1%,y1%,x2%,y2%,x3%,y3%,fpr$,btg%,cap$,rx%,ry%,pix,ima%,fcp$,op%,ck% fpr$ = rtmp$+"Savpre.bmp" fcp$ = rtmp$+"Savcop.bmp" FILE_SAVE p%,fpr$: FILEBIN_OPEN_READ 1,fpr$: ' sauvegarde image du picture FILEBIN_POSITION 1,18: i% = FILEBIN_READ(1)+256*FILEBIN_READ(1): ' largeur FILEBIN_POSITION 1,22: j% = FILEBIN_READ(1)+256*FILEBIN_READ(1): ' hauteur FILEBIN_CLOSE 1: FILE_DELETE fpr$ r = WIDTH(p%)/i%: ' rapport proportion image dessinée/image réelle IF LABEL("Desfin")=0 THEN LABEL Desfin IF LABEL("Desopt")=0 THEN LABEL Desopt IF LABEL("Desanu")=0 THEN LABEL Desanu IF LABEL("Descou")=0 THEN LABEL Descou IF LABEL("Destim")=0 THEN LABEL Destim IF LABEL("Destra")=0 THEN LABEL Destra IF LABEL("Deslib")=0 THEN LABEL Deslib IF LABEL("Desrec")=0 THEN LABEL Desrec IF LABEL("Desron")=0 THEN LABEL Desron IF LABEL("Destyp")=0 THEN LABEL Destyp IF LABEL("Desrem")=0 THEN LABEL Desrem DATA "Pal16": ' palette 16 couleurs DATA "000000","000080","0000FF","008000","008080","00FF00","00FFFF","800000" DATA "800080","808000","808080","C0C0C0","FF0000","FF00FF","FFFF00","FFFFFF" n2t% = NUMBER_2D_TARGET ON_CLICK p%,Desrem f% = forsub%: WHILE OBJECT_EXISTS(f%)=1: f%=f%+1: END_WHILE: forsub% = f% FORM f%: TOP f%,ya%: LEFT f%,xa%: HEIGHT f%,390: WIDTH f%,145: BORDER_SMALL f% COLOR f%,180,255,255: FONT_BOLD f%: FONT_NAME f%,"Arial": ON_CLOSE f%,Desfin CAPTION f%,"- OUTILS DESSIN -" i%=f%+1: ALPHA i%: PARENT i%,f%: TOP i%,3: CAPTION i%,"Trait:" i%=f%+2: PICTURE i%: PARENT i%,f%: TOP i%,0: LEFT i%,32: WIDTH i%,35: HEIGHT i%,23 COLOR i%,0,0,0 i%=f%+3: PICTURE i%: PARENT i%,f%: TOP i%,3: LEFT i%,35: WIDTH i%,WIDTH(i%-1)-5 HEIGHT i%,18: COLOR i%,255,0,0 i%=f%+4: SPIN i%: PARENT i%,f%: LEFT i%,75: WIDTH i%,40: font_size i%,9 MIN i%,1: MAX i%,20: POSITION i%,1/r i%=f%+5: PICTURE i%: PARENT i%,f%: TOP i%,25: LEFT i%,0: WIDTH i%,WIDTH(f%)-17 HEIGHT i%,63: 2D_TARGET_IS i%: ON_CLICK i%,Descou RESTORE: READ a$: WHILE a$<>"Pal16": READ a$: END_WHILE FOR j% = 1 TO 4 FOR i% = 1 TO 4 READ a$ tr%=HEX(LEFT$(a$,2)): tg%=HEX(MID$(a$,3,2)): tb%=HEX(RIGHT$(a$,2)) 2D_FILL_COLOR tr%,tg%,tb% 2D_RECTANGLE x%,y%,x%+31,y%+15: x%=x%+32 NEXT i% y%=y%+16: x% = 0 NEXT j% tr% = 0: tg% = 0: tb% = 0: COLOR f%+3,tr%,tg%,tb% i%=f%+6: ALPHA i%: PARENT i%,f%: TOP i%,98: CAPTION i%,"Motif rempliss.:" i%=f%+7: PICTURE i%: PARENT i%,f%: TOP i%,92: LEFT i%,89: WIDTH i%,38: HEIGHT i%,23 COLOR i%,0,0,0 i%=f%+8: PICTURE i%: PARENT i%,f%: TOP i%,115: LEFT i%,0: WIDTH i%,WIDTH(f%)-17 HEIGHT i%,45: 2D_TARGET_IS i%: ON_CLICK i%,Destyp x% = 0: y% = 2 2D_FILL_COLOR 0,0,0 FOR j% = 1 TO 2 FOR i% = 1 TO 4 k% = (j%-1)*4+i% SELECT k% CASE 1: 2D_FILL_OFF: 2D_FILL_COLOR 0,0,0: 2D_FILL_SOLID CASE 2: 2D_FILL_CROSS CASE 3: 2D_FILL_DIAGONAL_CROSS CASE 4: 2D_FILL_DIAGONAL_DOWN CASE 5: 2D_FILL_DIAGONAL_UP CASE 6: 2D_FILL_HORIZONTAL CASE 7: 2D_FILL_VERTICAL END_SELECT 2D_RECTANGLE x%,y%,x%+31,y%+20: x%=x%+32 IF j%=2 AND i%=3 THEN EXIT_FOR NEXT i% y%=y%+21: x% = 0 NEXT j% i%=f%+9: CONTAINER_OPTION i%: PARENT i%,f%: TOP i%,TOP(i%-1)+45: WIDTH i%,WIDTH(f%)-17 LEFT i%,0: HEIGHT i%,170: COLOR i%,255,255,180: op% = i% i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,10: LEFT i%,3: CAPTION i%,"Trait" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,25: LEFT i%,3: CAPTION i%,"Libre" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,40: LEFT i%,3: CAPTION i%,"Rectangle vide" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,55: LEFT i%,3: CAPTION i%,"Rectangle plein"
i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,85: LEFT i%,3: CAPTION i%,"Cercle/Ellipse vide" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,100: LEFT i%,3: CAPTION i%,"Cercle/Ellipse plein" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,115: LEFT i%,3: CAPTION i%,"Remplir (motif)" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,130: LEFT i%,3: CAPTION i%,"Sélection/Copier" i%=i%+1: OPTION i%: PARENT i%,op%: TOP i%,145: LEFT i%,3: CAPTION i%,"Coller" MARK_ON op%+1 FOR j%=op%+1 TO i%: WIDTH j%,WIDTH(op%)-7: ON_CLICK j%,Desopt: NEXT j% i%=i%+1: CHECK i%: PARENT i%,f%: TOP i%,TOP(op%)+69: LEFT i%,20: CAPTION i%,"coins arrondis" COLOR i%,255,255,180: ck%=i%
i%=i%+1: BUTTON i%: PARENT i%,f%: WIDTH i%,60: TOP i%,TOP(op%)+HEIGHT(op%) HEIGHT i%,20: CAPTION i%,"Annuler": ON_CLICK i%,Desanu i%=i%+1:BUTTON i%: PARENT i%,f%: WIDTH i%,55:TOP i%,TOP(i%-1): LEFT i%,70 HEIGHT i%,20: CAPTION i%,"Quitter": ON_CLICK i%,Desfin 2D_TARGET_IS p%: 2D_PEN_DOT
t%=i%+1: TIMER t%: PARENT t%,f%: TIMER_INTERVAL t%,40: ON_TIMER t%,Destim ima% = t%+1: IMAGE ima% trac% = 0: term% = 0: btg% = 0 fig% = 1: ret% = 0: cap$ = CAPTION$(0) CLIPBOARD_COPY p% WHILE 1 > 0: WAIT 100: END_WHILE: GOTO Desfin ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desopt: ' Type de figure fig% = 1: ' trait IF CHECKED(op%+2) = 1 fig% = 2: ' tracé libre ' FILE_SAVE p%,fpr$: ' sauvegarde préalable CLIPBOARD_COPY p% IL_count% = DLL_CALL4("AddImageToImageList",IL%,0,0,0) ELSE IF CHECKED(op%+3) = 1 OR CHECKED(op%+4) = 1 OR CHECKED(op%+8) = 1 fig% = 3: ' rectangle vide ou plein ELSE IF CHECKED(op%+5) = 1 OR CHECKED(op%+6) = 1 fig% = 4: ' cercle vide ou plein ELSE IF CHECKED(op%+7) = 1 fig% = 5: ' remplissage ELSE IF CHECKED(op%+9) = 1 fig% = 6: ' coller END_IF END_IF END_IF END_IF END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Destim: IF CHECKED(op%+7)=1 THEN RETURN: ' remplissage cpt = cpt+1: IF cpt>1000 THEN cpt = 2 x% = MOUSE_X_POSITION(p%)/r: y% = MOUSE_Y_POSITION(p%)/r: ' position actuelle souris a$ = "X= "+STR$(x%)+" pixels Y= "+STR$(y%)+" pixels" CAPTION 0,a$ 2D_PEN_COLOR tr%,tg%,tb%: 2D_PEN_WIDTH POSITION(f%+4) IF MOUSE_LEFT_DOWN(p%) = 1: ' bouton gauche souris enfoncé IF fig% = 6: ' coller IF FILE_EXISTS(fcp$) = 0 THEN RETURN: ' pas de copie ' FILE_SAVE p%,fpr$ CLIPBOARD_COPY p% IL_count% = DLL_CALL4("AddImageToImageList",IL%,0,0,0) FILE_LOAD ima%,fcp$: 2D_IMAGE_PASTE ima%,x%,y% ELSE x1% = x%: y1% = y%: ' origine trac% = 1 IF fig% = 2 AND btg% = 0 ' FILE_SAVE p%,fpr$: ' sauvegarde préalable CLIPBOARD_COPY p% IL_count% = DLL_CALL4("AddImageToImageList",IL%,0,0,0) END_IF btg% = 1 END_IF END_IF IF MOUSE_LEFT_UP(p%) = 1: ' relâche, tracé final btg% = 0 IF x1% = -1 THEN RETURN TIMER_OFF t% ' clipboard_paste p%: term% = 1: 2D_PEN_SOLID SELECT fig% CASE 1: GOSUB Destra CASE 2: GOSUB Deslib CASE 3: GOSUB Desrec CASE 4: GOSUB Desron CASE 5: GOSUB Desrem END_SELECT ' x1% = sx1%: x2% = sx2%: y1% = sy1%: y2% = sy2% CLIPBOARD_COPY p%: term% = 0 trac% = 0: 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255: 2D_PEN_WIDTH 1/r TIMER_ON t% END_IF IF trac% = 1 ' tracé provisoire, en continu 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255: 2D_PEN_WIDTH 1/r if x1% = -1 then return x2% = x%: y2% = y%: ' position actuelle IF x2%=x3% AND y2%=y3% THEN RETURN: ' position inchangée 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255: 2D_PEN_WIDTH 1/r SELECT fig% CASE 1: GOSUB Destra CASE 2: GOSUB Deslib CASE 3: GOSUB Desrec CASE 4: GOSUB Desron END_SELECT x3% = x%: y3% = y% END_IF TO_FOREGROUND f% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Destra: ' Tracé de droite IF cpt = 1 THEN RETURN: ' init CLIPBOARD_PASTE p%: IF term% = 1 ' FILE_SAVE p%,fpr$: ' sauvegarde préalable CLIPBOARD_COPY p% IL_count% = DLL_CALL4("AddImageToImageList",IL%,0,0,0) END_IF 2D_LINE x1%,y1%,x2%,y2% IF term% = 1 THEN x1% = -1: ' fin de tracé RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Deslib: ' Tracé libre 2D_PEN_SOLID: 2D_PEN_COLOR tr%,tg%,tb%: 2D_PEN_WIDTH POSITION(f%+4) 2D_LINE x1%,y1%,x2%,y2%: x1%=x2%: y1%=y2% IF term% = 1 THEN x1% = -1 RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desrec: ' Rectangle vide ou plein CLIPBOARD_PASTE p%: IF term% = 1 ' FILE_SAVE p%,fpr$: ' sauvegarde préalable CLIPBOARD_COPY p% IL_count% = DLL_CALL4("AddImageToImageList",IL%,0,0,0) END_IF IF term% = 1 AND CHECKED(op%+8) = 1: ' Fin de Select/copie, sauvegarde zone 2D_IMAGE_COPY ima%,x1%,y1%,x2%,y2%: FILE_SAVE ima%,fcp$ ELSE IF term% = 1: ' tracé final CLIPBOARD_PASTE p% IF CHECKED(ck%) = 1: ' rectangle à coins arrondis j% = x2%-x1%: k% = y2%-y1%: ' largeur, hauteur i% = 20/r: ' rayon de courbure arbitraire WHILE i%>j%/2 OR i%>k%/2: i%=i%-1: END_WHILE: ' diminuer le rayon cpt = PI/i%: ' pas (angle) x% = x1%+i%: y% = y1%+i% 2D_LINE x2%-i%,y1%,x1%+i%,y1% FOR an = PI/2 TO PI STEP cpt 2D_POLY_TO x%+i%*COS(an),y%-i%*SIN(an) NEXT an y% = y2%-i% 2D_POLY_TO x1%,y2%-i% FOR an = PI TO 3*PI/2 STEP cpt 2D_POLY_TO x%+i%*COS(an),y%-i%*SIN(an) NEXT an x% = x2%-i% FOR an = 3*PI/2 TO 2*PI STEP cpt 2D_POLY_TO x%+i%*COS(an),y%-i%*SIN(an) NEXT an y% = y1%+i% FOR an = 0 TO PI/2+cpt STEP cpt 2D_POLY_TO x%+i%*COS(an),y%-i%*SIN(an) NEXT an IF CHECKED(op%+4) = 1: ' rectangle plein x% = x1%+(x2%-x1%)/2: y% = y1%+(y2%-y1%)/2 2D_FLOOD x%,y%,tr%,tg%,tb% END_IF ELSE IF CHECKED(op%+4) = 1: ' rectangle plein 2D_FILL_OFF: 2D_FILL_COLOR tr%,tg%,tb%: 2D_RECTANGLE x1%,y1%,x2%,y2% ELSE 2D_LINE x1%,y1%,x2%,y1%:2D_POLY_TO x2%,y2%:2D_POLY_TO x1%,y2%:2D_POLY_TO x1%,y1% END_IF END_IF x1% = -1 ELSE: ' tracé provisoire 2D_LINE x1%,y1%,x2%,y1%:2D_POLY_TO x2%,y2%:2D_POLY_TO x1%,y2%:2D_POLY_TO x1%,y1% END_IF END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desron: ' Ellipse (ou cercle si Maj enfoncé) CLIPBOARD_PASTE p%: IF term% = 1 CLIPBOARD_COPY p% IL_count% = DLL_CALL4("AddImageToImageList",IL%,0,0,0) ' FILE_SAVE p%,fpr$: ' sauvegarde préalable END_IF rx% = (x2%-x1%)/2: ry% = (y2%-y1%)/2: ' rayons H et V IF SCANCODE = 160 THEN ry% = rx%: SCANCODE = 0: ' cercle: touche 'Maj' enfoncée x3% = x1%+rx%: y3% = y1%+ry%: ' centre pix = 4*ATN(1) 2D_POLY_FROM x3%+rx%,y3% FOR an = 0 TO 2*pix STEP pix/180 2D_POLY_TO x3%+rx%*COS(an),y3%+ry%*SIN(an) NEXT an IF term% = 1: ' tracé final IF CHECKED(op%+6) = 1: ' cercle/ellipse plein 2D_FLOOD x3%,y3%,tr%,tg%,tb% END_IF x1% = -1 END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Destyp: ' Type de remplissage: plein ou motif x%=MOUSE_X_LEFT_DOWN(f%+8): y%=MOUSE_Y_LEFT_DOWN(f%+8) i% = 1+INT(x%/31): j% = 1+INT(y%/20): k% = (j%-1)*4+i%: IF k% = 8 THEN RETURN 2D_TARGET_IS f%+7: CLS: 2D_FILL_COLOR 0,0,0 SELECT k% CASE 1: 2D_FILL_OFF: 2D_FILL_COLOR 0,0,0: 2D_FILL_SOLID CASE 2: 2D_FILL_CROSS CASE 3: 2D_FILL_DIAGONAL_CROSS CASE 4: 2D_FILL_DIAGONAL_DOWN CASE 5: 2D_FILL_DIAGONAL_UP CASE 6: 2D_FILL_HORIZONTAL CASE 7: 2D_FILL_VERTICAL END_SELECT 2D_RECTANGLE 0,0,WIDTH(f%+7),HEIGHT(f%+7) 2D_TARGET_IS p% SELECT k% CASE 1: 2D_FILL_OFF: 2D_FILL_SOLID CASE 2: 2D_FILL_CROSS CASE 3: 2D_FILL_DIAGONAL_CROSS CASE 4: 2D_FILL_DIAGONAL_DOWN CASE 5: 2D_FILL_DIAGONAL_UP CASE 6: 2D_FILL_HORIZONTAL CASE 7: 2D_FILL_VERTICAL END_SELECT RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desrem: ' Remplissage au clic souris (uniquement la partie uniforme) IF CHECKED(op%+7)=0 THEN RETURN ' FILE_SAVE p%,fpr$: ' sauvegarde préalable CLIPBOARD_COPY p% IL_count% = DLL_CALL4("AddImageToImageList",IL%,0,0,0) x% = MOUSE_X_LEFT_DOWN(p%)/r: y% = MOUSE_Y_LEFT_DOWN(p%)/r 2D_FLOOD x%,y%,tr%,tg%,tb% x1% = -1 CLIPBOARD_COPY p% TO_FOREGROUND f% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desanu: ' Annule la dernière opération ' IF FILE_EXISTS(fpr$) = 1 THEN FILE_LOAD p%,fpr$: CLIPBOARD_COPY p% IF IL_count%>0 IL_count% = DLL_CALL5("ExtractImageFromImageList",IL%,IL_count%-1,1,1,0) CLIPBOARD_PASTE p% pause 100 END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Descou: ' Choix de la couleur x%=MOUSE_X_LEFT_DOWN(f%+5): y%=MOUSE_Y_LEFT_DOWN(f%+5) tr%=COLOR_PIXEL_RED(f%+5,x%,y%): tg%=COLOR_PIXEL_GREEN(f%+5,x%,y%) tb%=COLOR_PIXEL_BLUE(f%+5,x%,y%): COLOR f%+3,tr%,tg%,tb% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desfin: ret% = 1 TIMER_OFF t%: DELETE t%: OFF_CLICK p%: 2D_TARGET_IS n2t% DELETE f%: DELETE ima%: CAPTION 0,cap$ WAIT 100 subact% = 0: EXIT_SUB RETURN END_SUB ' ============================================================================== Fais plusieurs dessins, puis "Annuler" en série - c'est magique ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 20:40 | |
| Je viens de charger et lancer ta version, et là bizarrement le bouton Annuler n'annule plus rien du tout, même pas la dernière action, il est complètement inactif ? Je n'ai pas analysé le code, juste mis à jour mon chemin de KGF.dll... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 20:47 | |
| As-tu récupéré la dernière version de KGF.dll, la V6.01 du 18/02/2016 ? Il faut celle-là pour la fonction d'extraction d'images... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 20:59 | |
| EXACT Klaus ! j'en étais encore à la version du 12/2 autrement dit une éternité en retard, ça va tellement vite ! Là du coup ça marche très bien, c'est même bien séduisant et tentant toutes ces annulations possibles en série...
PS j'ai ajouté une option 'Texte' pour insertion de petits textes dans l'image. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Boîte à outils de dessin Jeu 18 Fév 2016 - 23:48 | |
| Super !
Bon, maintenant, su tu veux faire la même chose sans KGF.dll, tu procèdes comme suit: 1.définir une variable globale desNumeroSauvegarde% 2. initialement, mettre cette variable à zéro, au moment de la définition 3. choisir un nom de fichier temporaire, tel que desSauvegarde$="C:\...\tmp\desSauvegarde" 4. à chaque sauvegarde: 4.1. incrémenter desNumeroSauvegarde% 4.2. sauvegarder l'objet p% dans desSauvegarde$+str$(desNumeroSauvegarde%)+".bmp" 5. à chaque restauration: 5.1. si desNumeroSauvegarde%=0, alors ne rien faire - on est au niveau initial 5.2. sinon, recharger le fichier desSauvegarde$+str$(desNumeroSauvegarde%)+".bmp" dans l'objet p% 5.3. et décrémenter desNumeroSauvegarde%
Voilà. Fonctionnellement, c'est identique. Plus lent et utilisation de fichiers, mais tout aussi efficace.
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Ven 19 Fév 2016 - 10:16 | |
| Merci Klaus, je garde tout ça sous le coude. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Sam 20 Fév 2016 - 14:29 | |
| J'ai ajouté la possibilité de déplacer la dernière figure dessinée (ou le texte) dans les quatre directions, d'un nombre de pixels choisi.
Allez Jean Claude, pour te faire plaisir, j'ai ajouté la possibilité de plusieurs retours arrière par appuis successifs sur 'Annuler'. (une sauvegarde est effectuée après le dessin de chaque figure).
C'est la variable ntsg% qui détermine le nombre de retours arrière possibles, je l'ai fixée à 5, mais c'est modulable à sa guise.
Les sauvegardes sont faites dans le répertoire de manoeuvre (ici C:\TEMP\), au format bmp. A noter qu'elles sont effacées à la sortie de la sub, pour faire place nette. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Boîte à outils de dessin Sam 20 Fév 2016 - 20:46 | |
| Ah! merci JL35, j'aime que tu me fasses plaisir, Je vais essayer ça, c'est un plus pour ta procédure de pouvoir annuler plusieurs actions précédentes. Je vais également tester le déplacement de la dernière figure dessinée, mais à ce propos pourquoi ne pourrais-t'on pas déplacer toutes les figures crée depuis le début.... STOP, j'arrête là, j'abuse, je sors. A+
Dernière édition par Jean Claude le Dim 21 Fév 2016 - 8:54, édité 1 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Dim 21 Fév 2016 - 0:36 | |
| Ah non Jean Claude, faut pas pousser mémé dans les orties ! Ça c'est NIET, d'abord parce que je n'en vois pas trop l'intérêt, et ensuite parce que ce serait trop compliqué à coder dans une sub. J'espère que ça ne t'empêchera pas de dormir, moi en attendant | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Boîte à outils de dessin Dim 21 Fév 2016 - 1:22 | |
| - Citation :
- ce serait trop compliqué à coder dans une sub.
si jamais tu envisages de faire cela, en fait, c'est très simple ! Il suffit de faire ceci: 1. mémoriser l'image actuelle pour le retour arrière, éventuellement 2. utiliser 2D_IMAGE_COPY pour copier la partie du picture qui restera visible APRES le décalage 3. effacer le picture 4. utiliser 2D_IMAGE_PASTE pour mettre la partie copiée dans sa nouvelle position Nul besoin de tenir compte des positions des dessins successifs - ce serait impossible. Mais comme on raisonne sur l'image dans sa totalité, cela devient simple. Un exemple: un décalage de 10 pixels vers la droite va faire disparaître une bande verticale de 10 pixels. Donc, tu fais un 2D_IMAGE_COPY N,0,0,w%-10,h% : ' w% représente la largeur du picture, N est le numéro d'objet d'un IMAGE Panoramic. Ensuite, tu effaces le picture (par la commande COLOR, par exemple). Pour finir, tu récupères l'image copiée par 2D_IMAGE_COPY 10,0 et le tour est joué. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Boîte à outils de dessin Dim 21 Fév 2016 - 8:52 | |
| Ben, alors, tu vois JL35 que c'est possible ! Ne fais pas le ronchon, la démonstration de Klaus est valide. Bon ! j'arrête de t’embêter: si tu veux pas, tu veux pas. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Boîte à outils de dessin Dim 21 Fév 2016 - 10:52 | |
| Puisque c'est comme ça, je vais rester sur mon premier argument "je n'en vois pas trop l'intérêt", (disons que dans toutes les expériences que j'ai fait je n'en ai jamais éprouvé le besoin), et donc je ne suis pas motivé pour le faire. Maintenant, puisque c'est facile à implémenter, chacun peut modifier le code à sa guise, c'est grand ouvert ! Et bon dimanche à tous, là j'ai du monde qui va arriver. Et Jean Claude, prends bien soin de toit. | |
| | | Contenu sponsorisé
| Sujet: Re: Boîte à outils de dessin | |
| |
| | | | Boîte à outils de dessin | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |