Home » Source Code » mocaptoolbox » mcplotframe.m

mcplotframe.m ( File view )

From:mocaptoolbox
  • By mountain 2013-11-27
  • View(s):18
  • Download(s):0
  • Point(s): 1
			function par = mcplotframe(d, n, p, proj)
% Plots frames of motion capture data.
%
% syntax
% par = mcplotframe(d, n);
% par = mcplotframe(d, n, p);
% par = mcplotframe(d, n, p, proj);
%
% input parameters
% d: MoCap data structure
% n: vector containing the numbers of the frames to be plotted
% p: animpar structure
% proj: projection used: 0 = orthographic (default), 1 = perspective
%
% output
% par: animpar structure used for plotting the frames (if color strings were used, they will converted to RGB triplets)
%
% examples
% par = mcplotframe(d, 1);
% mcplotframe(d, 500:10:600, par, 1);
%
% comments
% If the animpar structure is not given, the function calls
% mcinitanimpar and sets the .limits field of the animpar structure
% automatically so that all the markers fit into all frames.
% If the par.pers field (perspective projection) is not given, it is created internally for backwards
% compatibility. For explanation of the par.pers field, see help mcinitanimpar
%
% see also
% mcanimate, mcinitanimpar
%
%  Part of the Motion Capture Toolbox, Copyright 2008,
% University of Jyvaskyla, Finland

if nargin<4
    proj=0;
end

if nargin<3
    p = mcinitanimpar;
    if nargin==1 || ~isnumeric(n) %output fix [BB20111031]
        disp([10, 'Error: please set frame number(s) you want to plot.', 10]);
        return
    end
end

for k=1:length(n)
    n1=n(k);
    if n1>d.nFrames
        w1=sprintf('Error: indicated frame(s) (%d) exceeds number of frames in data (%d).', max(n), d.nFrames);
        disp([10, w1, 10]);
        return
    end
end


if p.animate
    mkdir(p.folder)
    currdir = cd; % store current directory
    cd(p.folder)
end

%for compatibility
if ~isfield(p, 'pers')
    p.pers.c=[0 -3000 0];
    p.pers.th=[0 0 0];
    p.pers.e=[0 -2000 0];
end

par=p;

% color management (compatibility): convert old string color definition into num array [BB20111031]
if ischar(p.colors)
    colors=NaN(5,3);
    for k=1:5
        colors(k,:)=lookup_l(p.colors(k));
    end
end

bgcol=colors(1,:); % set background color

if isfield(p,'markercolors') && ~isempty(p.markercolors) %field and colors are set
    if ischar(p.markercolors) % but in string format
        mcol=NaN(d.nMarkers,3);
        for k=1:size(p.markercolors,2)
            mcol(k,:)=lookup_l(p.markercolors(k));%convert to num array
        end
    else 
        mcol=p.markercolors; %field and colors are set in num format already
    end
    if d.nMarkers > length(p.markercolors)
        for k=length(p.markercolors)+1:d.nMarkers
            mcol(k,:)=colors(2,:);
        end
    end
else %no field or/and empty
    mcol=repmat(colors(2,:),d.nMarkers,1);
end

if isfield(p,'conncolors') && ~isempty(p.conncolors) %field and colors are set
    if ischar(p.conncolors) % but in string format
        ccol=NaN(size(p.conn,1),3);
        for k=1:size(p.conncolors,2)
            ccol(k,:)=lookup_l(p.conncolors(k));%convert to num array
        end
    else 
        ccol=p.conncolors; %field and colors are set in num format already
    end
    if size(p.conn,1) > length(p.conncolors)
        for k=length(p.conncolors)+1:size(p.conn,1)
            ccol(k,:)=colors(3,:);
        end
    end
else %no field or/and empty
    ccol=repmat(colors(3,:),size(p.conn,1),1);
end

%BBFIX 20120404: mcmerge problems
if p.trl~=0
    tcol=repmat(colors(4,:),d.nMarkers,1);
    if isfield(p,'tracecolors') && ~isempty(p.tracecolors) %(field and) tracecolors are set
        if ischar(p.tracecolors) % but in string format
            for k=1:size(p.tracecolors,2)
                tcol(k,:)=lookup_l(p.tracecolors(k));%convert to num array
            end
        else
            tcol(1:size(p.tracecolors,1),:)=p.tracecolors; %tracecolors in num format already
        end
    end
    if isempty(p.trm)
        p.trm=1:d.nMarkers; %plot all traces if trm is empty
    else
        if length(p.trm)size(p.conn,1)%if cwidth is longer than conn
    cwidth=p.cwidth(1:size(p.conn,1));
else
    cwidth=p.cwidth;
end
p.cwidth=cwidth;

% if isfield(p,'cwidth') && length(p.cwidth)>1
%     p.cwidth=p.cwidth;
% else
%     p.cwidth=repmat(p.cwidth(1),1,length(p.conn));
% end
if isfield(p,'twidth') && length(p.twidth)>1
    p.twidth=p.twidth;
else
    if ~isempty(p.trm)
        p.twidth=repmat(p.twidth(1),1,length(p.trm));
    end
end
 


az=p.az;
el=p.el;
    
d1 = mcrotate(d, az, [0 0 1]);
d2 = mcrotate(d1, el, [1 0 0]); %%%%%%%
    
if proj==0 % orthographic projection    
    x=d2.data(n,1:3:end);
    y=d2.data(n,2:3:end);
    z=d2.data(n,3:3:end);
else % perspective projection
    if ~isfield(p,'pers') % for backward compatibility, use default values
        p.pers.c=[0 -4000 0];
        p.pers.th=[0 0 0];
        p.pers.e=[0 -2000 0];
    end

    th=180*p.pers.th/pi;
    rot1=[1 0 0; 0 cos(th(1)) -sin(th(1)); 0 sin(th(1)) cos(th(1))];
    rot2=[cos(th(2)) 0 sin(th(2)); 0 1 0; -sin(th(2)) 0 cos(th(2))];
    rot3=[cos(th(3)) -sin(th(3)) 0; sin(th(3)) cos(th(3)) 0; 0 0 1];
    dd=zeros(size(d2.data(n,:)));
    %p.pers.e(2)=min(min(d.data(n,2:3:end)));
    for k=1:d.nMarkers
        dd(:,3*k+(-2:0))=(rot1*rot2*rot3*(d2.data(n,3*k+(-2:0))'-repmat(p.pers.c',1,length(n))))';
    end
    % make closest marker to be on the projection plan
    dd(:,2:3:end)=dd(:,2:3:end)-min(min(dd(:,2:3:end)))+p.pers.e(2)-p.pers.c(2); 
    x=-(dd(:,1:3:end)-repmat(p.pers.e(1),length(n),d.nMarkers)).*(p.pers.e(2)./dd(:,2:3:end));
    y=(p.pers.e(2)-p.pers.c(2))./dd(:,2:3:end); % used for marker size scaling
    z=-(dd(:,3:3:end)-repmat(p.pers.e(3),length(n),d.nMarkers)).*(p.pers.e(2)./dd(:,2:3:end));    
end


if isempty(p.limits)
    % find ranges of coordinates
    tmp=x(:); maxx=max(tmp(find(~isnan(tmp)))); minx=min(tmp(find(~isnan(tmp))));
    tmp=y(:); maxy=max(tmp(find(~isnan(tmp)))); miny=min(tmp(find(~isnan(tmp))));
    tmp=z(:); maxz=max(tmp(find(~isnan(tmp)))); minz=min(tmp(find(~isnan(tmp))));
    midx = (maxx+minx)/2;
    midy = (maxy+miny)/2;
    midz = (maxz+minz)/2;
    
    scrratio = p.scrsize(1)/p.scrsize(2);
    range = max((maxx-minx)/scrratio, maxz-minz)/2;
    zrange = (maxy-miny)/2;
    % axis limits for plot
    p.limits = [midx-scrratio*1.2*range midx+scrratio*1.2*range midz-1.2*range midz+1.2*range];
end
minxx = p.limits(1);
maxxx = p.limits(2);
minzz = p.lim
...
...
(Please download the complete source code to view)
			
...
Expand> <Close

Want complete source code? Download it here

Point(s): 1

Download
0 lines left, continue to read
Sponsored links

File list

Tips: You can preview the content of files by clicking file names^_^
Name Size Date
01.97 kB
License.txt15.84 kB2013-02-12|03:05
01.97 kB
01.97 kB
._License.txt313.00 B2013-02-12|03:05
MCT_manual_v1.4.pdf1.92 MB2013-02-12|04:00
._MCT_manual_v1.4.pdf82.00 B2013-02-12|04:00
01.97 kB
.DS_Store15.00 kB2013-02-11|04:26
01.97 kB
._.DS_Store193.00 B2013-02-11|04:26
contents.m3.85 kB2013-02-12|03:20
._contents.m171.00 B2013-02-12|03:20
Icon^M0.00 B2008-03-04|19:13
._Icon^M43.58 kB2008-03-04|19:13
mc2frontal.m2.02 kB2011-10-18|09:23
._mc2frontal.m82.00 B2011-10-18|09:23
mcanimate.m1.33 kB2011-10-18|09:04
._mcanimate.m266.00 B2011-10-18|09:04
mcbandpass.m3.49 kB2011-10-18|09:01
._mcbandpass.m82.00 B2011-10-18|09:01
mcboundrect.m1.74 kB2011-10-19|08:03
._mcboundrect.m82.00 B2011-10-19|08:03
mcc3d2tsv.m2.70 kB2012-04-16|05:29
._mcc3d2tsv.m82.00 B2012-04-16|05:29
mccenter.m804.00 B2011-10-17|11:55
._mccenter.m82.00 B2011-10-17|11:55
mcconcatenate.m2.70 kB2013-02-12|03:01
._mcconcatenate.m82.00 B2013-02-12|03:01
mccreateconnmatrix.m1.89 kB2011-10-19|09:00
._mccreateconnmatrix.m82.00 B2011-10-19|09:00
mccumdist.m1.17 kB2011-10-19|08:54
._mccumdist.m82.00 B2011-10-19|08:54
mccut.m698.00 B2011-10-18|08:26
._mccut.m82.00 B2011-10-18|08:26
mcdecompose.m1.58 kB2011-10-18|08:20
._mcdecompose.m82.00 B2011-10-18|08:20
mcdemo.m1.82 kB2011-10-14|09:29
._mcdemo.m82.00 B2011-10-14|09:29
mcdemo1.m4.13 kB2012-04-12|05:37
._mcdemo1.m82.00 B2012-04-12|05:37
mcdemo10.m2.27 kB2013-01-29|07:56
._mcdemo10.m82.00 B2013-01-29|07:56
mcdemo11.m1.87 kB2012-04-12|08:04
._mcdemo11.m167.00 B2012-04-12|08:04
mcdemo2.m2.27 kB2008-05-21|00:26
._mcdemo2.m193.00 B2008-05-21|00:26
mcdemo3.m3.46 kB2013-02-11|13:20
._mcdemo3.m82.00 B2013-02-11|13:20
mcdemo4.m3.09 kB2008-05-27|15:53
._mcdemo4.m193.00 B2008-05-27|15:53
mcdemo5.m4.13 kB2013-01-29|07:45
._mcdemo5.m82.00 B2013-01-29|07:45
mcdemo6.m1.28 kB2008-05-21|00:20
._mcdemo6.m82.00 B2008-05-21|00:20
mcdemo7.m1.38 kB2008-05-21|00:20
._mcdemo7.m82.00 B2008-05-21|00:20
mcdemo8.m2.17 kB2010-05-21|10:42
._mcdemo8.m82.00 B2010-05-21|10:42
mcdemo9.m2.86 kB2013-01-29|07:56
._mcdemo9.m82.00 B2013-01-29|07:56
mcdemodata.mat1.27 MB2012-04-16|04:59
._mcdemodata.mat82.00 B2012-04-16|04:59
mceigenmovement.m1.66 kB2011-10-18|08:18
._mceigenmovement.m82.00 B2011-10-18|08:18
mcfillgaps.m5.57 kB2011-10-18|08:15
._mcfillgaps.m167.00 B2011-10-18|08:15
mcfilteremg.m1.32 kB2011-10-18|09:43
._mcfilteremg.m82.00 B2011-10-18|09:43
mcgetmarker.m1.29 kB2013-02-11|04:25
._mcgetmarker.m82.00 B2013-02-11|04:25
mcgetmarkername.m582.00 B2011-10-17|11:43
._mcgetmarkername.m82.00 B2011-10-17|11:43
mcgetsegmpar.m2.73 kB2011-10-18|08:00
._mcgetsegmpar.m82.00 B2011-10-18|08:00
mchilbert.m1.01 kB2011-10-17|11:48
._mchilbert.m82.00 B2011-10-17|11:48
mchilberthuang.m1.43 kB2011-10-18|07:57
._mchilberthuang.m82.00 B2011-10-18|07:57
mcicaproj.m1.59 kB2011-10-18|07:54
._mcicaproj.m82.00 B2011-10-18|07:54
mcinitanimpar.m2.73 kB2011-11-01|11:54
._mcinitanimpar.m266.00 B2011-11-01|11:54
mcinitj2spar.m675.00 B2011-10-17|10:24
._mcinitj2spar.m82.00 B2011-10-17|10:24
mcinitm2jpar.m643.00 B2011-10-17|10:24
._mcinitm2jpar.m82.00 B2011-10-17|10:24
mcinitstruct.m3.75 kB2011-10-18|09:28
._mcinitstruct.m82.00 B2011-10-18|09:28
mcj2s.m2.20 kB2011-10-17|12:28
._mcj2s.m82.00 B2011-10-17|12:28
mckinenergy.m2.08 kB2011-12-12|04:04
._mckinenergy.m82.00 B2011-12-12|04:04
mckurtosis.m791.00 B2011-10-17|12:24
._mckurtosis.m82.00 B2011-10-17|12:24
mcm2j.m1.08 kB2011-10-17|12:28
._mcm2j.m82.00 B2011-10-17|12:28
mcmakedemoparams.m2.39 kB2008-05-13|14:29
._mcmakedemoparams.m82.00 B2008-05-13|14:29
mcmarkerdist.m763.00 B2011-10-17|12:29
._mcmarkerdist.m82.00 B2011-10-17|12:29
mcmean.m623.00 B2011-10-19|08:52
._mcmean.m82.00 B2011-10-19|08:52
mcmerge.m14.48 kB2013-02-12|02:57
._mcmerge.m82.00 B2013-02-12|02:57
mcmissing.m936.00 B2011-10-18|07:41
._mcmissing.m82.00 B2011-10-18|07:41
mcmocapgram.m1.89 kB2013-02-01|16:12
._mcmocapgram.m338.00 B2013-02-01|16:12
mcnorm.m830.00 B2011-10-18|07:41
._mcnorm.m82.00 B2011-10-18|07:41
mcpcaproj.m2.76 kB2013-02-12|03:16
._mcpcaproj.m82.00 B2013-02-12|03:16
mcperiod.m3.21 kB2013-02-12|03:16
._mcperiod.m82.00 B2013-02-12|03:16
mcplotframe.m13.90 kB2013-02-10|11:58
._mcplotframe.m82.00 B2013-02-10|11:58
mcplotphaseplane.m3.38 kB2011-10-18|07:26
._mcplotphaseplane.m82.00 B2011-10-18|07:26
mcplottimeseries.m17.26 kB2013-01-29|08:36
._mcplottimeseries.m82.00 B2013-01-29|08:36
mcplottimeseries_dep.m6.72 kB2013-01-29|08:35
._mcplottimeseries_dep.m82.00 B2013-01-29|08:35
mcpotenergy.m1.69 kB2011-10-18|03:23
._mcpotenergy.m82.00 B2011-10-18|03:23
mcread.m2.44 kB2012-04-13|10:31
._mcread.m312.00 B2012-04-13|10:31
mcreademg.m1.71 kB2011-10-18|03:17
._mcreademg.m331.00 B2011-10-18|03:17
mcreorderdims.m678.00 B2011-10-18|03:04
._mcreorderdims.m82.00 B2011-10-18|03:04
mcresample.m951.00 B2011-10-17|13:01
._mcresample.m82.00 B2011-10-17|13:01
mcrotate.m2.50 kB2011-10-18|03:36
._mcrotate.m330.00 B2011-10-18|03:36
mcs2j.m1.41 kB2011-10-17|13:08
._mcs2j.m82.00 B2011-10-17|13:08
mcs2posture.m541.00 B2011-10-17|13:08
._mcs2posture.m82.00 B2011-10-17|13:08
mcsegmangle.m725.00 B2011-10-17|13:08
._mcsegmangle.m82.00 B2011-10-17|13:08
mcsethares.m3.93 kB2011-10-18|02:59
._mcsethares.m82.00 B2011-10-18|02:59
mcsetmarker.m3.03 kB2013-02-10|11:58
._mcsetmarker.m82.00 B2013-02-10|11:58
mcsimmat.m952.00 B2011-10-18|03:35
._mcsimmat.m82.00 B2011-10-18|03:35
mcskewness.m728.00 B2011-10-19|08:55
._mcskewness.m82.00 B2011-10-19|08:55
mcsmoothen.m3.43 kB2011-10-17|13:17
._mcsmoothen.m82.00 B2011-10-17|13:17
mcspectrum.m1.83 kB2011-10-18|02:53
._mcspectrum.m266.00 B2011-10-18|02:53
mcstatmoments.m707.00 B2011-10-19|08:56
._mcstatmoments.m82.00 B2011-10-19|08:56
mcstd.m649.00 B2011-10-19|08:55
._mcstd.m82.00 B2011-10-19|08:55
mctimeder.m6.67 kB2012-04-12|08:39
._mctimeder.m82.00 B2012-04-12|08:39
mctimeintegr.m1.59 kB2011-10-18|03:37
._mctimeintegr.m82.00 B2011-10-18|03:37
mctranslate.m761.00 B2011-10-17|13:24
._mctranslate.m82.00 B2011-10-17|13:24
mctrim.m2.00 kB2011-10-19|04:44
._mctrim.m82.00 B2011-10-19|04:44
mcvar.m629.00 B2011-10-19|08:56
._mcvar.m82.00 B2011-10-19|08:56
mcvect2grid.m1.38 kB2011-10-19|08:09
._mcvect2grid.m82.00 B2011-10-19|08:09
mcwindow.m3.32 kB2011-10-18|03:37
._mcwindow.m82.00 B2011-10-18|03:37
mcwritetsv.m2.27 kB2012-04-16|05:29
._mcwritetsv.m376.00 B2012-04-16|05:29
01.97 kB
.DS_Store6.00 kB2012-04-12|09:26
01.97 kB
._.DS_Store193.00 B2012-04-12|09:26
dir2quat.m568.00 B2008-01-17|18:16
._dir2quat.m193.00 B2008-01-17|18:16
initemptymc.mat127.62 kB2009-11-29|17:45
makecolumn.m257.00 B2007-09-11|13:58
mcica.m1.04 kB2010-05-07|03:59
._mcica.m193.00 B2010-05-07|03:59
mcpca.m829.00 B2008-12-10|13:09
._mcpca.m82.00 B2008-12-10|13:09
mcreadc3d.m1.21 kB2011-09-07|06:28
._mcreadc3d.m82.00 B2011-09-07|06:28
mcreadmat.m2.00 kB2011-09-07|06:26
._mcreadmat.m312.00 B2011-09-07|06:26
mcreadtsv.m3.50 kB2012-04-13|05:38
._mcreadtsv.m82.00 B2012-04-13|05:38
mcreadwii.m1.02 kB2011-09-07|06:26
._mcreadwii.m171.00 B2011-09-07|06:26
mypca.m507.00 B2008-10-21|15:46
._mypca.m82.00 B2008-10-21|15:46
qinv.m106.00 B2008-01-17|18:02
._qinv.m193.00 B2008-01-17|18:02
quatrot.m618.00 B2008-04-18|18:29
._quatrot.m193.00 B2008-04-18|18:29
readc3d.m12.15 kB2013-01-29|15:11
._readc3d.m341.00 B2013-01-29|15:11
readC3dIDL.m14.27 kB2009-11-30|03:02
smoothderiv.m390.00 B2006-05-21|13:26
._smoothderiv.m82.00 B2006-05-21|13:26
validfield.m464.00 B2007-04-30|11:04
._private193.00 B2013-01-31|03:26
._mocaptoolbox193.00 B2013-02-12|03:16
releasenotes_v1.4.txt5.74 kB2013-02-12|03:10
._releasenotes_v1.4.txt171.00 B2013-02-12|03:10
...
Sponsored links

mcplotframe.m (3.10 MB)

Need 1 point
Your Point(s)

Your Point isn't enough.

Get point immediately by PayPal

More(Debit card / Credit card / PayPal Credit / Online Banking)

Submit your source codes. Get more point

LOGIN

Don't have an account? Register now
Need any help?
Mail to: support@codeforge.com

切换到中文版?

CodeForge Chinese Version
CodeForge English Version

Where are you going?

^_^"Oops ...

Sorry!This guy is mysterious, its blog hasn't been opened, try another, please!
OK

Warm tip!

CodeForge to FavoriteFavorite by Ctrl+D