Transparence

Nous allons superposer une image et une ligne et ensuite nous allons mettre de la transparence sur cette image …
Comme d’hab l’idée c’est de donner des étapes de reproduction simple pour que vous puissiez vous aussi reproduire le bug. Ici 8 lignes de code suffisent.

Soit xg la cellule suivante :

xg{1} = linspace( 733607.122,733607.241,20);
xg{2} = linspace( 0,348,21);

et nc une matrice 21*20 :

nc = rand(21,20);

Créons notre ligne en rouge :

hold all
line(linspace(733607,733608,50),linspace(-50,400,50),'Color','r')

Ce qui affiche:

line

Maintenant créons notre image:

ObjImage = imagesc(xg{:},nc);

imagesc

Et enfin ajoutons la transparence sur l’image:

set(ObjImage,'alphaData',0.1)

transparence

Et donc comme vous pouvez le voir , le fait d’avoir rajouter de la transparence sur notre image a distordu notre ligne . J’ai tenté de switcher l’opengl entre hardware et software mais sans plus de résultat. Vu que j’ai besoin de faire de la transparence le renderer painters ou mettre la propriété drawmode des axes à fast ne me serviront pas ici.

A noter également je reproduis cette figure en R12Sp1 alors je me demande si c’est un bug ou pas?

A lire : Manipulating Transparency

Update 15 Juin 2011 : Ce bug existe toujours en R2010b , R2011a, R2011b Prerelease …
Update 9-Dec-2011 : bug encore reproductible en R2012a
Update 14-Sept-2012 : bug encore reproductible en R2012b
Update 17-Mars-2014 : bug encore reproductible en R2014a

whatsnew

Vu que TMW délivre une nouvelle release MATLAB tous les 6 mois , j’ai le droit à cette question au moins 2 fois par an!!
Quand ils me posent cette question , je les sens toujours un peu frileux de passer à la version N+1.

Et ma réponse est simple , non ce n’est pas RTFM mais presque …c’est tape :

>>whatsnew

et là ça leur ouvre directement dans le web browser de MATLAB les releases notes!!! Et là il suffit de piocher les rubriques qui nous intéressent. Moi je sais que je regarde toujours les nouveautés concernant le MATLAB Desktop : le M-lint (Code Analyser) , les préférences , l’outil de comparaison fichier /folders …

whatsnew a un nom facile à retenir , pas besoin de chercher dans son arborescence le PDF des releases notes comme c’est le cas pour d’autres logiciels.

Vous la connaissiez cette fonction?
Je l’ai mise dans la catégorie « Best of des fonction inutiles » mais finalement vous verrez à travers ce blog que j’en parle quand même assez souvent!!

Matlab avatar

Matlab Geek

Cette plaque minéralogique pour l’anecdote on l’utilisait à TMW pour faire des démos avec l’ Image Acquisition Toolbox .
Maintenant elle est accrochée chez moi !!
Le numéro 92 représente le département des Hauts de Seine , en effet TMW France est maintenant situé à Meudon , à la frontière d’Issy Les Moulineaux.

Ouvrir un fichier , un répertoire sous Windows

  • Flashback sur la R13

Cette fonction a fait son apparition avec MATLAB 6.5.

En allant sur les releases de l’époque , on apprend que winopen a fait son apparition avec des fonctions bien connues comme:

  • rmdir : Remove directory
  • movefile : Move file or directory
  • winopen : Open file in appropriate application (Windows only)
  • xmlread : Parse XML document and return Document Object Model node

Pour les deux premières rmdir et movefile, je me demande comment les programmateurs faisaient pour supprimer un répertoire ou déplacer des fichiers !

On apprend aussi que des fonctions qui appartenaient à la Neural Network Toolbox comme:

  • cell2mat : Combine a cell array of matrices into one matrix
  • mat2cell : Break matrix up into a cell array of matrices

ont été inclues dans MATLAB. La pareil ça a du faire des heureux !

Et pour terminer ce flashback des releases notes de la R13 , on peut lire :

Since dynamic field names improve on the getfield and setfield functions, these two functions will eventually be removed from the MATLAB language.

mouais , 10 ans plus tard les fonctions getfield et setfield sont toujours présentes , c’est là que le mot eventually prend tout son sens !

  • quand utiliser winopen :

Voilà ce que nous le dit le help de winopen :

winopen help

Moi je l’utilise tous les jours pour ouvrir rapidement le répertoire courant où je suis:

>>winopen .

Autre exemple, pour ouvrir le répertoire où sont stockées les préférences de MATLAB, je tape au prompt MATLAB:

>>winopen(prefdir)

Donc en un coup de cuillère à pot, voilà mon répertoire prefdir ouvert:

prefdir

Je l’utilise dans mes codes aussi pour ouvrir un fichier dans l’application désirée de Windows:

>> f = figure;
>> surf(peaks);
>> print (gcf, '-dbmp', 'myfile.bmp')
>> winopen('myfile.bmp')

Dans mon cas , la figure va s’ouvrir avec Windows Picture and Fax Viewer :

surf peaks

Cette note technique vous sera d’ailleurs utile pour que winopen fonctionne avec n’importe quel fichier:
How do I open a file in a choosen application from within MATLAB?

  • Limitation

Comme indiqué dans ma première phrase , je l’utilise que sous Windows . Vous n’avez pas le choix d’ailleurs car le premier test effectué dans winopen.m c’est ispc
:

ispc winopen

  • Comment winopen fonctionne

Autant winopen.m est éditable dans MATLAB, autant on n’a rien à se mettre sous la dent pour comprendre la façon dont ça marche.
La dernière ligne de code est: win_open_mex(pathstr, filename);

Rien qu’en regardant les 3 dernières lettres (mex) on se dit que c’est un MEX-file (une dll) qui est appelée. Et un bon vieux which va confirmer ce doute:

>> which win_open_mex -all
C:\MATLAB\SOF\r2010b\toolbox\matlab\winfun\private\win_open_mex.mexw32  % Private to winfun

ce qui signifie en d’autre termes que le code est illisible ou protégé intellectuellement.

C’est d’ailleurs dans le répertoire toolbox\matlab\winfun\private\ qu’on découvre un autre fichier intéressant fileassoc.m que je vous laisse découvrir …
cd(fullfile(matlabroot,'toolbox','matlab','winfun','private'))

Mettre en valeur son graphique

Ca permet par exemple juste en appuyant sur la lettre m de son clavier , de mettre en valeur (via un zoom) une partie de votre graphique . Voici ce que ça donne sur un de mes graphiques par exemple:

dragzoom

Juste en double cliquant sur la souris , on peut réduire (clic droit) ou augmenter (clic gauche) la taille de cette fenêtre. C’est très bien documenté .
Il existe pleins d’options sympathiques comme par exemple :
en cliquant sur la lettre g , vous faites apparaitre une grille en x et en y.
en cliquant sur la lettre c , vous obtenez en live (comme ginput) les coordonnées où se trouvent votre souris …

bref à télécharger sans hésiter pour épater ses collègues !

Stickers reçus !

Ils ont bien voyagé du Massachusetts aux Alpes de Haute-Provence en passant par le New-Jersey et Paris!

fedex

Pour ceux qui n’ont pas suivi l’aventure :
Episode 1 : Plus de stickers dans les DVD MATLAB , je me plains sur le MATLAB Central
Episode 2 : The MathWorks à Boston me contacte pour savoir combien d’autocollants MATLAB je veux

startup.m

Le fichier startup.m est lu par MATLAB au démarrage s’il existe dans le path MATLAB. Toutes les commandes mises dans ce fichier là seront exécutées.
Du style si vous avez tapé dans votre startup.m:

disp('I am a French MATLAB geek and proud of it!')

Salut ça va s’affichera dans le Command Window.

Personnellement je n’ai pas de startup.m et la raison est simple : j’utilise le MATLAB Compiler.

Alors quel peut bien-être le rapport entre le startup.m et le MATLAB Compiler?

Un bon MATLAB geek doit savoir que si on compile un code avec le MATLAB Compiler, le startup.m sera inclus dans la compilation. Et là ça peut faire tâche d’avoir un exécutable qui dans la fenêtre DOS marquera ‘I am a French MATLAB geek and proud of it’ Donc lorsque qu’on créé un standalone, une bonne pratique c’est de faire avant d’invoquer la commande mcc ou le deploytool:

warning off MATLAB:DELETE:FileNotFound
delete ([ctfroot '\toolbox\local\startup.m'])

ça c’est la méthode un peu bourin je suis d’accord vu que ça efface carrément son startup.m !

Plus proprement dans son startup.m il est conseillé d’utiliser la commande ismcc avec isdeployed.

Utilisez vous un startup.m ? Que mettez vous comme commandes dans ce fichier?

support

>>support

et beh elle vous ouvre la page web du support technique MathWorks!! … bon ça peut-être pratique si vous ne savez pas comment accéder à l’adresse web mathworks.com/support

Dans le même genre j’avais proposé sur un post du blog MATLAB Desktop, de faire une commande blogs qui ouvrirait la page des blogs de TMW :

Mon commentaire était :


# Aurélien Queffurust replied on January 6th, 2009 at 08:32 UTC :

Happy new year guys! Ok I have 2 ideas (which would’nt be a major enhancement!)

1) What about a new link from the MATLAB Start Button which will open the blogs page?
Currently we can only open the main page of MATLAB Central, access the newsgroup or the FEx.

2) The SUPPORT function already exists , the BLOGS function could be easily implemented in the same way?!

La réponse de Ken :

# Ken replied on January 6th, 2009 at 14:46 UTC :

Hi Aurelien,

This is an interesting idea! I’ll bounce it off of a few other MathWorkers. Applications in general seem to blurring the line between local and external content.

Thanks for the great feedback,
-Ken