« Earlier5 items total Later »

Adding drag capabilities to a Matlab gui

Here is an example from the newsgroup

but could be probably done neater with nested functions.

function test
 % test gui function

 % create figure
 fig = figure;

 % set the figure's WindowButtonDownFcn
 set(fig,'WindowButtonDownFcn',{@wbd});
end


function wbd(h,evd)

 disp('down')

 % get the values and store them in the figure's appdata
 props.WindowButtonMotionFcn = get(h,'WindowButtonMotionFcn');
 props.WindowButtonUpFcn = get(h,'WindowButtonUpFcn');
 setappdata(h,'TestGuiCallbacks',props);

 % set the new values for the WindowButtonMotionFcn and
 % WindowButtonUpFcn
 set(h,'WindowButtonMotionFcn',{@wbm})
 set(h,'WindowButtonUpFcn',{@wbu})
end


function wbm(h,evd)
 % executes while the mouse moves

 disp('motion')
end


function wbu(h,evd)
 % executes when the mouse button is released

 disp('up')

 % get the properties and restore them
 props = getappdata(h,'TestGuiCallbacks');
 set(h,props);
end

Create a movie with Matlab

If you want to show how your plots change with time, a movie is a good idea. Especially since MATLAB can produce movies that can be embedded in your presentations, or be seen with any good ol' movie player. Here's how:Courtesy of http://www.ecogito.net/matlab/

The idea is to create plot figures and compile them as frames of your movie.

    % Create a new figure, and position it
        fig1 = figure;
        winsize = get(fig1,'Position');
        winsize(1:2) = [0 0];
    % Create movie file with required parameters
        fps= 25;
        outfile = sprintf('%s',outFileName)
        mov = avifile(outfile,'fps',fps,'quality',100);
    % Ensure each frame is of the same size
        set(fig1,'NextPlot','replacechildren');
        for i=1:numframes
            plot(x,y); % generate your plot
    % put this plot in a movieframe
    % In case plot title and axes area are needed
    %     F = getframe(fig1,winsize);
    % For clean plot without title and axes
            F = getframe;
            mov = addframe(mov,F);
        end
    % save movie
        mov = close(mov);


Voila! (Make sure that you do not open any window over your plot window while MATLAB is compiling your movie, else those windows will become part of your movie)

Input data using a mouse

Use ginput function:

 x=0;y=0;
 while ~isempty(x)
    [x1,y1]=ginput(1);
    plot([x x1],[y y1],'b.-');
    hold on
    x=x1;y=y1;
end

Draw a cube

Simple function to draw a voxel (cube, cuboid) in a specific position of specific dimensions in a 3-D plot. Transparency of the voxel can also be specified.

Many voxels can be aggregated to form a different shapes (a simple 3-D "+" is shown in the screenshot).

Written by Joel Suresh

function voxel(i,d,c,alpha);

%VOXEL function to draw a 3-D voxel in a 3-D plot
%
%Usage
%   voxel(start,size,color,alpha);
%
%   will draw a voxel at 'start' of size 'size' of color 'color' and
%   transparency alpha (1 for opaque, 0 for transparent)
%   Default size is 1
%   Default color is blue
%   Default alpha value is 1
%
%   start is a three element vector [x,y,z]
%   size the a three element vector [dx,dy,dz]
%   color is a character string to specify color
%       (type 'help plot' to see list of valid colors)
%
%
%   voxel([2 3 4],[1 2 3],'r',0.7);
%   axis([0 10 0 10 0 10]);
%

%   Suresh Joel Apr 15,2003
%           Updated Feb 25, 2004

switch(nargin),
case 0
    disp('Too few arguements for voxel');
    return;
case 1
    l=1;    %default length of side of voxel is 1
    c='b';  %default color of voxel is blue
case 2,
    c='b';
case 3,
    alpha=1;
case 4,
    %do nothing
otherwise
    disp('Too many arguements for voxel');
end;

x=[i(1)+[0 0 0 0 d(1) d(1) d(1) d(1)]; ...
        i(2)+[0 0 d(2) d(2) 0 0 d(2) d(2)]; ...
        i(3)+[0 d(3) 0 d(3) 0 d(3) 0 d(3)]]';

for n=1:3
    if n==3,
        x=sortrows(x,[n,1]);
    else
        x=sortrows(x,[n n+1]);
    end;
    temp=x(3,:);
    x(3,:)=x(4,:);
    x(4,:)=temp;
    h=patch(x(1:4,1),x(1:4,2),x(1:4,3),c);
    set(h,'FaceAlpha',alpha);
    temp=x(7,:);
    x(7,:)=x(8,:);
    x(8,:)=temp;
    h=patch(x(5:8,1),x(5:8,2),x(5:8,3),c);
    set(h,'FaceAlpha',alpha);
end

Draw a circle

I track visitors to my site using google analytics and I noticed I had 8 visitors to my site last week looking for how to draw a circle. However I didn't have any circle drawing snippets. So I have borrowed some code from the Mathworks file exchange.

This code is courtesy of Zhenhai Wang.

function H=circle(center,radius,NOP,style)
%-----------------------------------------------------
% H=CIRCLE(CENTER,RADIUS,NOP,STYLE)
% This routine draws a circle with center defined as
% a vector CENTER, radius as a scaler RADIS. NOP is
% the number of points on the circle. As to STYLE,
% use it the same way as you use the rountine PLOT.
% Since the handle of the object is returned, you
% use routine SET to get the best result.
%
%   Usage Examples,
%
%   circle([1,3],3,1000,':');
%   circle([2,4],2,1000,'--');
%
%   Zhenhai Wang <zhenhai@ieee.org>
%   Version 1.00
%   December, 2002
%-----------------------------------------------------

if (nargin <3),
 error('Please see help for INPUT DATA.');
elseif (nargin==3)
    style='b-';
end;
THETA=linspace(0,2*pi,NOP);
RHO=ones(1,NOP)*radius;
[X,Y] = pol2cart(THETA,RHO);
X=X+center(1);
Y=Y+center(2);
H=plot(X,Y,style);
axis square;

« Earlier5 items total Later »




Sponsored by

Sole Central

Your one stop shop for Birkenstock and Crocs shoes and sandles.