source: trunk/src/uvmat_doc/FUNCTIONS_DOC/plot_object.html @ 37

Last change on this file since 37 was 37, checked in by sommeria, 14 years ago

create_grid.fig ,
uvmat_doc and all the included files added

File size: 36.4 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2                "http://www.w3.org/TR/REC-html40/loose.dtd">
3<html>
4<head>
5  <title>Description of plot_object</title>
6  <meta name="keywords" content="plot_object">
7  <meta name="description" content="'plot_object': draws a projection object (points, line, plane...)">
8  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
9  <meta name="generator" content="m2html &copy; 2003 Guillaume Flandin">
10  <meta name="robots" content="index, follow">
11  <link type="text/css" rel="stylesheet" href="../m2html.css">
12</head>
13<body>
14<a name="_top"></a>
15<div><a href="../index.html">Home</a> &gt;  <a href="index.html">.</a> &gt; plot_object.m</div>
16
17<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
18<td align="right"><a href="index.html">Index for .&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
19
20<h1>plot_object
21</h1>
22
23<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
24<div class="box"><strong>'plot_object': draws a projection object (points, line, plane...)</strong></div>
25
26<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
27<div class="box"><strong>function [hh]=plot_object(ObjectDataIn,ProjObject,hplot,col) </strong></div>
28
29<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
30<div class="fragment"><pre class="comment">'plot_object': draws a projection object (points, line, plane...)
31-------------------------------------------------------------------
32 function [ObjectData_out,hh]=plot_object(ObjectData,hplot,col)
33
34OUTPUT
35             hh: handles of the graphic object (core part)
36
37INPUT:
38
39 ObjectDataIn: structure representing the object properties:
40        .Style : style of projection object
41        .Coord: set of coordinates defining the object position;
42        .ProjMode=type of projection ;
43       .ProjAngle=angle of projection;
44       .DX,.DY,.DZ=increments;
45       .YMax,YMin: min and max Y
46 ProjObject: projection object corresponding to the current plot (e. g. plane)
47 hplot: handle of the object plot to modify or if it is an axis, the axis
48            where the object must be plotted, or if it is a figure the plotting figure
49 col: color of the plot, e;g; 'm', 'b' ..;</pre></div>
50
51<!-- crossreference -->
52<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
53This function calls:
54<ul style="list-style-image:url(../matlabicon.gif)">
55<li><a href="warndlg_uvmat.html" class="code" title="function hwarn=warndlg_uvmat(warntext,title)">warndlg_uvmat</a>    'warndlg_uvmat': display warning message (error, warning, confirmation) in a given figure</li></ul>
56This function is called by:
57<ul style="list-style-image:url(../matlabicon.gif)">
58<li><a href="mouse_down.html" class="code" title="function xy=mouse_down(hObject,eventdata)">mouse_down</a>     'mouse_down': function activated when the mouse button is pressed on a figure (callback for 'WindowButtonDownFcn'</li><li><a href="mouse_motion.html" class="code" title="function mouse_motion(hObject,eventdata,handles)">mouse_motion</a>    'mouse_motion': permanently called by mouse motion over a figure (Callback for 'WindowButtonMotionFcn' of the figure)</li><li><a href="probe_calib.html" class="code" title="function varargout = probe_calib(varargin)">probe_calib</a>        'probe_calib': performs geometric calibration from a set of reference points</li><li><a href="update_obj.html" class="code" title="function Object_out=update_obj(UvData,IndexObj,ObjectData,PlotHandles)">update_obj</a>       'update_obj': update the object graph representation and its projection field, record it in the uvmat interface</li><li><a href="uvmat.html" class="code" title="function varargout = uvmat(varargin)">uvmat</a>        'uvmat': function associated with the GUI 'uvmat.fig' for images and data field visualization</li></ul>
59<!-- crossreference -->
60
61
62<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
63<div class="fragment"><pre>0001 <span class="comment">%'plot_object': draws a projection object (points, line, plane...)</span>
640002 <span class="comment">%-------------------------------------------------------------------</span>
650003 <span class="comment">% function [ObjectData_out,hh]=plot_object(ObjectData,hplot,col)</span>
660004 <span class="comment">%</span>
670005 <span class="comment">%OUTPUT</span>
680006 <span class="comment">%             hh: handles of the graphic object (core part)</span>
690007 <span class="comment">%</span>
700008 <span class="comment">%INPUT:</span>
710009 <span class="comment">%</span>
720010 <span class="comment">% ObjectDataIn: structure representing the object properties:</span>
730011 <span class="comment">%        .Style : style of projection object</span>
740012 <span class="comment">%        .Coord: set of coordinates defining the object position;</span>
750013 <span class="comment">%        .ProjMode=type of projection ;</span>
760014 <span class="comment">%       .ProjAngle=angle of projection;</span>
770015 <span class="comment">%       .DX,.DY,.DZ=increments;</span>
780016 <span class="comment">%       .YMax,YMin: min and max Y</span>
790017 <span class="comment">% ProjObject: projection object corresponding to the current plot (e. g. plane)</span>
800018 <span class="comment">% hplot: handle of the object plot to modify or if it is an axis, the axis</span>
810019 <span class="comment">%            where the object must be plotted, or if it is a figure the plotting figure</span>
820020 <span class="comment">% col: color of the plot, e;g; 'm', 'b' ..;</span>
830021
840022 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
850023 <span class="comment">%  Copyright Joel Sommeria, 2008, LEGI / CNRS-UJF-INPG, sommeria@coriolis-legi.org.</span>
860024 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
870025 <span class="comment">%     This file is part of the toolbox UVMAT.</span>
880026 <span class="comment">%</span>
890027 <span class="comment">%     UVMAT is free software; you can redistribute it and/or modify</span>
900028 <span class="comment">%     it under the terms of the GNU General Public License as published by</span>
910029 <span class="comment">%     the Free Software Foundation; either version 2 of the License, or</span>
920030 <span class="comment">%     (at your option) any later version.</span>
930031 <span class="comment">%</span>
940032 <span class="comment">%     UVMAT is distributed in the hope that it will be useful,</span>
950033 <span class="comment">%     but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
960034 <span class="comment">%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
970035 <span class="comment">%     GNU General Public License (file UVMAT/COPYING.txt) for more details.</span>
980036 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
990037
1000038 <a name="_sub0" href="#_subfunctions" class="code">function [hh]=plot_object(ObjectDataIn,ProjObject,hplot,col)</a>
1010039 hh=[];<span class="comment">%default output</span>
1020040 <span class="keyword">if</span> isequal(ProjObject,ObjectDataIn)<span class="comment">% object representation does not appear in its own projection plot</span>
1030041     <span class="keyword">return</span>
1040042 <span class="keyword">end</span>
1050043 <span class="keyword">if</span> ~isfield(ProjObject,<span class="string">'Style'</span>)
1060044     ObjectData=ObjectDataIn;
1070045 <span class="keyword">elseif</span> isequal(ProjObject.Style,<span class="string">'plane'</span>)
1080046     ObjectData=ObjectDataIn;<span class="comment">% TODO: modify take into account rotation of axis</span>
1090047 <span class="keyword">else</span>
1100048     <span class="keyword">return</span> <span class="comment">% no object representation yet available</span>
1110049 <span class="keyword">end</span>
1120050 <span class="keyword">if</span> ~isfield(ObjectData,<span class="string">'Style'</span>)|isempty(ObjectData.Style)|~ischar(ObjectData.Style)
1130051     <a href="warndlg_uvmat.html" class="code" title="function hwarn=warndlg_uvmat(warntext,title)">warndlg_uvmat</a>(<span class="string">'undefined ObjectData.Style in plot_object.m'</span>,<span class="string">'ERROR'</span>)
1140052     <span class="keyword">return</span>
1150053 <span class="keyword">end</span>
1160054 <span class="keyword">if</span> ~isfield(ObjectData,<span class="string">'Style'</span>)|isempty(ObjectData.Style)|~ischar(ObjectData.Style)
1170055     <a href="warndlg_uvmat.html" class="code" title="function hwarn=warndlg_uvmat(warntext,title)">warndlg_uvmat</a>(<span class="string">'undefined ObjectData.Style in plot_object.m'</span>,<span class="string">'ERROR'</span>)
1180056     <span class="keyword">return</span>
1190057 <span class="keyword">end</span>
1200058 XMin=0;<span class="comment">%default</span>
1210059 XMax=0;
1220060 YMin=0;
1230061 YMax=0;
1240062 ZMin=0;
1250063 ZMax=0;
1260064
1270065 <span class="comment">%determine the plotting axes (with handle 'haxes')</span>
1280066 test_newobj=1;
1290067 <span class="keyword">if</span> ishandle(hplot)
1300068     <span class="keyword">if</span> isequal(get(hplot,<span class="string">'Tag'</span>),<span class="string">'proj_object'</span>
1310069         test_newobj=0;
1320070         haxes=get(hplot,<span class="string">'parent'</span>);
1330071     <span class="keyword">elseif</span> isequal(get(hplot,<span class="string">'Type'</span>),<span class="string">'axes'</span>)
1340072         axes(hplot)
1350073         haxes=hplot;
1360074     <span class="keyword">elseif</span> isequal(get(hplot,<span class="string">'Type'</span>),<span class="string">'figure'</span>)
1370075         figure(hplot);<span class="comment">%set the input figure as the current one</span>
1380076         haxes=findobj(hplot,<span class="string">'Type'</span>,<span class="string">'axes'</span>);<span class="comment">%look for axes in the figure</span>
1390077         haxes=haxes(1);
1400078         axes(haxes); <span class="comment">%set the first found axis as the current one</span>
1410079     <span class="keyword">else</span>
1420080         figure; <span class="comment">%create new figure</span>
1430081         hplot=axes;<span class="comment">%create new axes</span>
1440082         haxes=hplot;
1450083     <span class="keyword">end</span>
1460084 <span class="keyword">else</span>
1470085     figure; <span class="comment">%create new figure</span>
1480086     hplot=axes;<span class="comment">%create new axes</span>
1490087     haxes=hplot;
1500088 <span class="keyword">end</span>
1510089
1520090 <span class="comment">%default input parameters</span>
1530091 <span class="keyword">if</span> ~isfield(ObjectData,<span class="string">'ProjMode'</span>)|isempty(ObjectData.ProjMode)
1540092      ObjectData.ProjMode=<span class="string">'projection'</span>;<span class="comment">%default</span>
1550093 <span class="keyword">end</span>
1560094 <span class="keyword">if</span> ~isfield(ObjectData,<span class="string">'Coord'</span>)|isempty(ObjectData.Coord)
1570095      ObjectData.Coord=[0 0 0];<span class="comment">%default</span>
1580096 <span class="keyword">end</span>
1590097 <span class="keyword">if</span> ~isfield(ObjectData,<span class="string">'Phi'</span>)|isempty(ObjectData.Phi)
1600098      ObjectData.Phi=0;<span class="comment">%default</span>
1610099 <span class="keyword">end</span>
1620100 <span class="keyword">if</span> ~isfield(ObjectData,<span class="string">'Range'</span>)
1630101     ObjectData.Range(1,1)=0; <span class="comment">%edfault</span>
1640102 <span class="keyword">end</span>
1650103 <span class="keyword">if</span> size(ObjectData.Range,2)&gt;=2
1660104     YMax=ObjectData.Range(1,2);<span class="comment">%default</span>
1670105 <span class="keyword">end</span>
1680106 <span class="keyword">if</span> size(ObjectData.Range,2)&gt;=2 &amp; size(ObjectData.Range,1)&gt;=2
1690107     YMin=ObjectData.Range(2,2);
1700108 <span class="keyword">else</span>
1710109     YMin=0;
1720110 <span class="keyword">end</span>
1730111 XMax=ObjectData.Range(1,1);
1740112 <span class="keyword">if</span> size(ObjectData.Range,1)&gt;=2
1750113     XMin=ObjectData.Range(2,1);
1760114 <span class="keyword">end</span>
1770115 <span class="keyword">if</span> isfield(ObjectData,<span class="string">'RangeX'</span>)
1780116    XMax=max(ObjectData.RangeX);
1790117    XMin=min(ObjectData.RangeX);
1800118 <span class="keyword">end</span>
1810119 <span class="keyword">if</span> isfield(ObjectData,<span class="string">'RangeY'</span>)
1820120    YMax=max(ObjectData.RangeY);
1830121    YMin=min(ObjectData.RangeY);
1840122 <span class="keyword">end</span>
1850123 <span class="keyword">if</span> isfield(ObjectData,<span class="string">'RangeZ'</span>)
1860124    ZMax=max(ObjectData.RangeZ);
1870125    ZMin=min(ObjectData.RangeZ);
1880126 <span class="keyword">end</span>
1890127 <span class="keyword">if</span> isequal(ObjectData.Style,<span class="string">'points'</span>)&amp;isequal(ObjectData.ProjMode,<span class="string">'projection'</span>)
1900128     YMax=max(XMax,YMax);
1910129     YMax=max(YMax,ZMax);
1920130 <span class="keyword">elseif</span> isequal(ObjectData.Style,<span class="string">'rectangle'</span>)|isequal(ObjectData.Style,<span class="string">'ellipse'</span>)|isequal(ObjectData.Style,<span class="string">'volume'</span>)
1930131     <span class="keyword">if</span>  isequal(YMax,0)
1940132         ylim=get(haxes,<span class="string">'YLim'</span>);
1950133         YMax=(ylim(2)-ylim(1))/100;
1960134     <span class="keyword">end</span>
1970135     <span class="keyword">if</span> isequal(XMax,0)
1980136         XMax=YMax;<span class="comment">%default</span>
1990137     <span class="keyword">end</span>
2000138 <span class="keyword">elseif</span> isequal(ObjectData.Style,<span class="string">'plane'</span>)
2010139    <span class="keyword">if</span>  isequal(XMax,0)
2020140         xlim=get(haxes,<span class="string">'XLim'</span>);
2030141         XMax=xlim(2);
2040142    <span class="keyword">end</span>
2050143    <span class="keyword">if</span>  isequal(YMax,0)
2060144         ylim=get(haxes,<span class="string">'YLim'</span>);
2070145         YMax=ylim(2);
2080146    <span class="keyword">end</span>
2090147 <span class="keyword">end</span>
2100148 sizcoord=size(ObjectData.Coord);
2110149
2120150 <span class="comment">%determine the coordinates xline, yline,xsup,xinf, yinf,ysup determining the new object plot</span>
2130151 test_line= isequal(ObjectData.Style,<span class="string">'points'</span>)|isequal(ObjectData.Style,<span class="string">'line'</span>)|isequal(ObjectData.Style,<span class="string">'polyline'</span>)|<span class="keyword">...</span>
2140152     isequal(ObjectData.Style,<span class="string">'polygon'</span>)| isequal(ObjectData.Style,<span class="string">'plane'</span>)| isequal(ObjectData.Style,<span class="string">'volume'</span>);
2150153 test_patch=isequal(ObjectData.ProjMode,<span class="string">'inside'</span>)||isequal(ObjectData.ProjMode,<span class="string">'outside'</span>)||isequal(ObjectData.Style,<span class="string">'volume'</span>)<span class="keyword">...</span>
2160154     ||isequal(ObjectData.ProjMode,<span class="string">'mask_inside'</span>)||isequal(ObjectData.ProjMode,<span class="string">'mask_outside'</span>);
2170155 <span class="keyword">if</span> test_line
2180156     xline=ObjectData.Coord(:,1);
2190157     yline=ObjectData.Coord(:,2);
2200158     <span class="keyword">if</span> isequal(ObjectData.Style,<span class="string">'polygon'</span>)
2210159         xline=[xline; ObjectData.Coord(1,1)];<span class="comment">%closing the line</span>
2220160         yline=[yline; ObjectData.Coord(1,2)];
2230161     <span class="keyword">elseif</span> isequal(ObjectData.Style,<span class="string">'plane'</span>)| isequal(ObjectData.Style,<span class="string">'volume'</span>)
2240162         phi=ObjectData.Phi*pi/180;<span class="comment">%angle in radians</span>
2250163         Xend_x=xline(1)+XMax*cos(phi);
2260164         Xend_y=yline(1)+XMax*sin(phi);
2270165         Xbeg_x=xline(1)+XMin*cos(phi);
2280166         Xbeg_y=yline(1)+XMin*sin(phi);
2290167         Yend_x=xline(1)-YMax*sin(phi);
2300168         Yend_y=yline(1)+YMax*cos(phi);
2310169         Ybeg_x=xline(1)-YMin*sin(phi);
2320170         Ybeg_y=yline(1)+YMin*cos(phi);
2330171         xline=[Xbeg_x Xend_x NaN Ybeg_x Yend_x];
2340172         yline=[Xbeg_y Xend_y NaN Ybeg_y Yend_y];
2350173     <span class="keyword">end</span>
2360174     SubLineStyle=<span class="string">'none'</span>;<span class="comment">%default</span>
2370175     <span class="keyword">if</span> isfield(ObjectData,<span class="string">'ProjMode'</span>)
2380176         <span class="keyword">if</span> isequal(ObjectData.ProjMode,<span class="string">'projection'</span>)
2390177             SubLineStyle=<span class="string">'--'</span>; <span class="comment">%range of projection marked by dash</span>
2400178             <span class="keyword">if</span> isfield (ObjectData,<span class="string">'DX'</span>)
2410179                rmfield(ObjectData,<span class="string">'DX'</span>);
2420180             <span class="keyword">end</span>
2430181             <span class="keyword">if</span> isfield (ObjectData,<span class="string">'DY'</span>)
2440182                rmfield(ObjectData,<span class="string">'DY'</span>);
2450183             <span class="keyword">end</span>
2460184         <span class="keyword">elseif</span> isequal(ObjectData.ProjMode,<span class="string">'filter'</span>)
2470185             SubLineStyle=<span class="string">':'</span>;<span class="comment">%range of projection not visible</span>
2480186         <span class="keyword">end</span>
2490187     <span class="keyword">end</span> 
2500188     <span class="keyword">if</span> isequal(ObjectData.Style,<span class="string">'line'</span>)|isequal(ObjectData.Style,<span class="string">'polyline'</span>)|isequal(ObjectData.Style,<span class="string">'polygon'</span>)
2510189         <span class="keyword">if</span> length(xline)&lt;2
2520190             theta=0;
2530191         <span class="keyword">else</span>
2540192             theta=angle(diff(xline)+i*diff(yline));
2550193             theta(length(xline))=theta(length(xline)-1);
2560194         <span class="keyword">end</span>
2570195         xsup(1)=xline(1)+YMax*sin(theta(1));
2580196         xinf(1)=xline(1)-YMax*sin(theta(1));
2590197         ysup(1)=yline(1)-YMax*cos(theta(1));
2600198         yinf(1)=yline(1)+YMax*cos(theta(1));
2610199         <span class="keyword">for</span> ip=2:length(xline)
2620200             xsup(ip)=xline(ip)+YMax*sin((theta(ip)+theta(ip-1))/2)/cos((theta(ip-1)-theta(ip))/2);
2630201             xinf(ip)=xline(ip)-YMax*sin((theta(ip)+theta(ip-1))/2)/cos((theta(ip-1)-theta(ip))/2);
2640202             ysup(ip)=yline(ip)-YMax*cos((theta(ip)+theta(ip-1))/2)/cos((theta(ip-1)-theta(ip))/2);
2650203             yinf(ip)=yline(ip)+YMax*cos((theta(ip)+theta(ip-1))/2)/cos((theta(ip-1)-theta(ip))/2);
2660204         <span class="keyword">end</span>
2670205     <span class="keyword">end</span>
2680206 <span class="keyword">end</span>
2690207
2700208 <span class="comment">%shading image</span>
2710209 <span class="keyword">if</span> test_patch
2720210     npMx=512;
2730211     npMy=512; 
2740212     flag=zeros(npMy,npMx);
2750213     <span class="keyword">if</span> isequal(ObjectData.Style,<span class="string">'ellipse'</span>)
2760214         XimaMin=ObjectData.Coord(1,1)-XMax;
2770215         XimaMax=ObjectData.Coord(1,1)+XMax;
2780216         YimaMin=ObjectData.Coord(1,2)-YMax;
2790217         YimaMax=ObjectData.Coord(1,2)+YMax;
2800218         xlim=[1.2*XimaMin-0.2*XimaMax 1.2*XimaMax-0.2*XimaMin];<span class="comment">%create an image around the ellipse</span>
2810219         ylim=[1.2*YimaMin-0.2*YimaMax 1.2*YimaMax-0.2*YimaMin];
2820220         scale_x=2*1.4*XMax/npMx;
2830221         scale_y=2*1.4*YMax/npMy;
2840222         xi=[0.5:npMx-0.5]*scale_x+xlim(1);
2850223         yi=[0.5:npMy-0.5]*scale_y+ylim(1);
2860224         [Xi,Yi]=meshgrid(xi,yi);
2870225         X2Max=XMax*XMax;
2880226         Y2Max=YMax*YMax;
2890227         distX=(Xi-ObjectData.Coord(1,1));
2900228         distY=(Yi-ObjectData.Coord(1,2));
2910229         flag=(distX.*distX/X2Max+distY.*distY/Y2Max)&lt;1;
2920230     <span class="keyword">elseif</span> isequal(ObjectData.Style,<span class="string">'rectangle'</span>)|isequal(ObjectData.Style,<span class="string">'volume'</span>)
2930231         XimaMin=ObjectData.Coord(1,1)-XMax;
2940232         XimaMax=ObjectData.Coord(1,1)+XMax;
2950233         YimaMin=ObjectData.Coord(1,2)-YMax;
2960234         YimaMax=ObjectData.Coord(1,2)+YMax;
2970235         xlim=[1.2*XimaMin-0.2*XimaMax 1.2*XimaMax-0.2*XimaMin];<span class="comment">%create an image around the ellipse</span>
2980236         ylim=[1.2*YimaMin-0.2*YimaMax 1.2*YimaMax-0.2*YimaMin];
2990237         scale_x=2*1.4*XMax/npMx;
3000238         scale_y=2*1.4*YMax/npMy;
3010239         xi=[0.5:npMx-0.5]*scale_x+xlim(1);
3020240         yi=[0.5:npMy-0.5]*scale_y+ylim(1);
3030241         [Xi,Yi]=meshgrid(xi,yi);
3040242         distX=abs(Xi-ObjectData.Coord(1,1));
3050243         distY=abs(Yi-ObjectData.Coord(1,2));
3060244         flag=distX&lt;XMax &amp; distY&lt; YMax;
3070245     <span class="keyword">elseif</span> isequal(ObjectData.Style,<span class="string">'polygon'</span>)
3080246         XimaMin=min(ObjectData.Coord(:,1));
3090247         XimaMax=max(ObjectData.Coord(:,1));
3100248         YimaMin=min(ObjectData.Coord(:,2));
3110249         YimaMax=max(ObjectData.Coord(:,2));
3120250         xlim=[1.2*XimaMin-0.2*XimaMax 1.2*XimaMax-0.2*XimaMin];
3130251         ylim=[1.2*YimaMin-0.2*YimaMax 1.2*YimaMax-0.2*YimaMin];
3140252         [Xlim,Ylim]=meshgrid(linspace(xlim(1),xlim(2),npMx),linspace(ylim(1),ylim(2),npMy));
3150253         <span class="comment">%flag=roipoly(xlim,ylim,flag,ObjectData.Coord(:,1),ObjectData.Coord(:,2));%=1 inside the polygon, 0 outsid</span>
3160254         flag=inpolygon(Xlim,Ylim,ObjectData.Coord(:,1),ObjectData.Coord(:,2));<span class="comment">%=1 inside the polygon, 0 outsid</span>
3170255     <span class="keyword">end</span> 
3180256     <span class="keyword">if</span> isequal(ObjectData.ProjMode,<span class="string">'outside'</span>)||isequal(ObjectData.ProjMode,<span class="string">'mask_outside'</span>)
3190257         flag=~flag;
3200258     <span class="keyword">end</span>
3210259     imflag=zeros(npMx,npMy,3);
3220260     imflag(:,:,3)=flag; <span class="comment">% blue color</span>
3230261     <span class="keyword">if</span> isequal(col,<span class="string">'m'</span>)
3240262          imflag(:,:,1)=flag; <span class="comment">% magenta color</span>
3250263     <span class="keyword">end</span>
3260264     dx=(xlim(2)-xlim(1))/npMx;
3270265     dy=(ylim(2)-ylim(1))/npMy;
3280266 <span class="keyword">end</span>
3290267
3300268 PlotData=[];<span class="comment">%default</span>
3310269 <span class="comment">%MODIFY AN EXISTING OBJECT PLOT</span>
3320270 <span class="keyword">if</span> test_newobj==0;
3330271     hh=hplot;
3340272     PlotData=get(hplot,<span class="string">'UserData'</span>);           
3350273     <span class="keyword">if</span> test_line
3360274         set(hplot,<span class="string">'XData'</span>,xline)
3370275         set(hplot,<span class="string">'YData'</span>,yline)
3380276     <span class="comment">%modify subobjects</span>
3390277         <span class="keyword">if</span> isfield(PlotData,<span class="string">'SubObject'</span>)
3400278            <span class="keyword">if</span> length(PlotData.SubObject)==2 &amp;&amp; ~isequal(ObjectData.Style,<span class="string">'points'</span>)&amp;&amp; ~isequal(ObjectData.Style,<span class="string">'plane'</span>);
3410279                 set(PlotData.SubObject(1),<span class="string">'XData'</span>,xinf);
3420280                 set(PlotData.SubObject(1),<span class="string">'YData'</span>,yinf);
3430281                 set(PlotData.SubObject(2),<span class="string">'XData'</span>,xsup);
3440282                 set(PlotData.SubObject(2),<span class="string">'YData'</span>,ysup);
3450283            <span class="keyword">elseif</span> isequal(ObjectData.Style,<span class="string">'points'</span>)&amp;&amp; ~isequal(YMax,0)
3460284                <span class="keyword">for</span> ipt=1:min(length(PlotData.SubObject),size(ObjectData.Coord,1))
3470285                     set(PlotData.SubObject(ipt),<span class="string">'Position'</span>,[ObjectData.Coord(ipt,1)-YMax ObjectData.Coord(ipt,2)-YMax 2*YMax 2*YMax])
3480286                <span class="keyword">end</span>
3490287                <span class="comment">%complement missing points</span>
3500288                <span class="keyword">if</span> size(ObjectData.Coord,1)&gt;length(PlotData.SubObject)
3510289                    <span class="keyword">for</span> ipt=length(PlotData.SubObject)+1:size(ObjectData.Coord,1)
3520290                      PlotData.SubObject(ipt)=rectangle(<span class="string">'Curvature'</span>,[1 1],<span class="keyword">...</span>
3530291                   <span class="string">'Position'</span>,[ObjectData.Coord(ipt,1)-YMax ObjectData.Coord(ipt,2)-YMax 2*YMax 2*YMax],<span class="string">'EdgeColor'</span>,col,<span class="keyword">...</span>
3540292                   <span class="string">'LineStyle'</span>,SubLineStyle,<span class="string">'Tag'</span>,<span class="string">'proj_object'</span>);
3550293                    <span class="keyword">end</span>
3560294                <span class="keyword">end</span>                                         
3570295            <span class="keyword">end</span>
3580296         <span class="keyword">end</span>
3590297         <span class="keyword">if</span> isfield(PlotData,<span class="string">'DeformPoint'</span>)
3600298            <span class="keyword">for</span> ipt=1:length(PlotData.DeformPoint)
3610299                <span class="keyword">if</span> ishandle(PlotData.DeformPoint(ipt))
3620300                    <span class="keyword">if</span> length(xline)&gt;=ipt &amp;   length(yline)&gt;=ipt   
3630301                         set(PlotData.DeformPoint(ipt),<span class="string">'XData'</span>,xline(ipt),<span class="string">'YData'</span>,yline(ipt));
3640302                     <span class="keyword">end</span>
3650303                <span class="keyword">end</span>
3660304            <span class="keyword">end</span>
3670305            <span class="keyword">if</span> length(xline)&gt;length(PlotData.DeformPoint)
3680306                <span class="keyword">for</span> ipt=length(PlotData.DeformPoint)+1:length(xline)
3690307                     PlotData.DeformPoint(ipt)=line(xline(ipt),yline(ipt),<span class="string">'Color'</span>,col,<span class="string">'LineStyle'</span>,<span class="string">'.'</span>,<span class="string">'Tag'</span>,<span class="string">'DeformPoint'</span>,<span class="keyword">...</span>
3700308                         <span class="string">'SelectionHighlight'</span>,<span class="string">'off'</span>,<span class="string">'UserData'</span>,hplot);
3710309                <span class="keyword">end</span>
3720310                set(hplot,<span class="string">'UserData'</span>,PlotData)
3730311            <span class="keyword">end</span>
3740312         <span class="keyword">end</span>
3750313     <span class="keyword">elseif</span> isequal(ObjectData.Style,<span class="string">'rectangle'</span>)|isequal(ObjectData.Style,<span class="string">'ellipse'</span>)
3760314         set(hplot,<span class="string">'Position'</span>,[ObjectData.Coord(1,1)-XMax ObjectData.Coord(1,2)-YMax 2*XMax 2*YMax])         
3770315     <span class="keyword">end</span>
3780316     <span class="keyword">if</span> test_patch
3790317         <span class="keyword">for</span> iobj=1:length(PlotData.SubObject)
3800318             objtype=get(PlotData.SubObject(iobj),<span class="string">'Type'</span>);
3810319             <span class="keyword">if</span> isequal(objtype,<span class="string">'image'</span>)
3820320                 set(PlotData.SubObject(iobj),<span class="string">'CData'</span>,imflag,<span class="string">'AlphaData'</span>,(flag)*0.2)
3830321                 set(PlotData.SubObject(iobj),<span class="string">'XData'</span>,[xlim(1)+dx/2 xlim(2)-dx/2])
3840322                 set(PlotData.SubObject(iobj),<span class="string">'YData'</span>,[ylim(1)+dy/2 ylim(2)-dy/2])
3850323             <span class="keyword">end</span>
3860324         <span class="keyword">end</span>
3870325     <span class="keyword">end</span>
3880326 <span class="keyword">end</span>
3890327
3900328 <span class="comment">%create the object</span>
3910329 <span class="keyword">if</span> test_newobj
3920330     axes(haxes)
3930331     hother=findobj(<span class="string">'Tag'</span>,<span class="string">'proj_object'</span>);<span class="comment">%find all the proj objects</span>
3940332     <span class="keyword">for</span> iobj=1:length(hother)
3950333         <span class="keyword">if</span> isequal(get(hother(iobj),<span class="string">'Type'</span>),<span class="string">'rectangle'</span>)|isequal(get(hother(iobj),<span class="string">'Type'</span>),<span class="string">'patch'</span>)
3960334             set(hother(iobj),<span class="string">'EdgeColor'</span>,<span class="string">'b'</span>)
3970335             <span class="keyword">if</span> isequal(get(hother(iobj),<span class="string">'FaceColor'</span>),<span class="string">'m'</span>)
3980336                 set(hother(iobj),<span class="string">'FaceColor'</span>,<span class="string">'b'</span>)
3990337             <span class="keyword">end</span>
4000338         <span class="keyword">elseif</span> isequal(get(hother(iobj),<span class="string">'Type'</span>),<span class="string">'image'</span>)
4010339                Acolor=get(hother(iobj),<span class="string">'CData'</span>);
4020340                Acolor(:,:,1)=zeros(size(Acolor,1),size(Acolor,2));
4030341                set(hother(iobj),<span class="string">'CData'</span>,Acolor);
4040342         <span class="keyword">else</span>
4050343              set(hother(iobj),<span class="string">'Color'</span>,<span class="string">'b'</span>)
4060344         <span class="keyword">end</span>
4070345         set(hother(iobj),<span class="string">'Selected'</span>,<span class="string">'off'</span>)
4080346     <span class="keyword">end</span>
4090347     hother=findobj(<span class="string">'Tag'</span>,<span class="string">'DeformPoint'</span>);
4100348     set(hother,<span class="string">'Color'</span>,<span class="string">'b'</span>);
4110349     set(hother,<span class="string">'Selected'</span>,<span class="string">'off'</span>
4120350     <span class="keyword">if</span> isequal(ObjectData.Style,<span class="string">'points'</span>)
4130351         hh=line(ObjectData.Coord(:,1),ObjectData.Coord(:,2),<span class="string">'Color'</span>,col,<span class="string">'LineStyle'</span>,<span class="string">'.'</span>,<span class="string">'Marker'</span>,<span class="string">'+'</span>);
4140352         <span class="keyword">for</span> ipt=1:length(xline)
4150353               PlotData.DeformPoint(ipt)=line(ObjectData.Coord(ipt,1),ObjectData.Coord(ipt,2),<span class="string">'Color'</span>,<span class="keyword">...</span>
4160354                   col,<span class="string">'LineStyle'</span>,<span class="string">'.'</span>,<span class="string">'SelectionHighlight'</span>,<span class="string">'off'</span>,<span class="string">'UserData'</span>,hh,<span class="string">'Tag'</span>,<span class="string">'DeformPoint'</span>);
4170355               <span class="comment">%create circle around each point</span>
4180356               <span class="keyword">if</span> ~isequal(YMax,0)
4190357                  PlotData.SubObject(ipt)=rectangle(<span class="string">'Curvature'</span>,[1 1],<span class="keyword">...</span>
4200358                   <span class="string">'Position'</span>,[ObjectData.Coord(ipt,1)-YMax ObjectData.Coord(ipt,2)-YMax 2*YMax 2*YMax],<span class="string">'EdgeColor'</span>,col,<span class="keyword">...</span>
4210359                   <span class="string">'LineStyle'</span>,SubLineStyle,<span class="string">'Tag'</span>,<span class="string">'proj_object'</span>);
4220360               <span class="keyword">end</span>
4230361         <span class="keyword">end</span>
4240362     <span class="keyword">elseif</span>  isequal(ObjectData.Style,<span class="string">'line'</span>)|isequal(ObjectData.Style,<span class="string">'polyline'</span>)|<span class="keyword">...</span><span class="comment">        </span>
4250363           isequal(ObjectData.Style,<span class="string">'polygon'</span>) |isequal(ObjectData.Style,<span class="string">'plane'</span>)|isequal(ObjectData.Style,<span class="string">'volume'</span>)<span class="comment">%  (isequal(ObjectData.Style,'polygon') &amp; ~test_patch) |isequal(ObjectData.Style,'plane')</span>
4260364         hh=line(xline,yline,<span class="string">'Color'</span>,col);
4270365         <span class="keyword">if</span> ~isequal(ObjectData.Style,<span class="string">'plane'</span>)&amp; ~isequal(ObjectData.Style,<span class="string">'volume'</span>)
4280366             <span class="keyword">for</span> ipt=1:sizcoord(1)
4290367                 PlotData.DeformPoint(ipt)=line(ObjectData.Coord(ipt,1),ObjectData.Coord(ipt,2),<span class="string">'Color'</span>,<span class="keyword">...</span>
4300368                       col,<span class="string">'LineStyle'</span>,<span class="string">'none'</span>,<span class="string">'Marker'</span>,<span class="string">'.'</span>,<span class="string">'Tag'</span>,<span class="string">'DeformPoint'</span>,<span class="string">'SelectionHighlight'</span>,<span class="string">'off'</span>,<span class="string">'UserData'</span>,hh);
4310369             <span class="keyword">end</span>
4320370             PlotData.SubObject(1)=line(xinf,yinf,<span class="string">'Color'</span>,col,<span class="string">'LineStyle'</span>,SubLineStyle,<span class="string">'Tag'</span>,<span class="string">'proj_object'</span>);<span class="comment">%draw sub-lines</span>
4330371             PlotData.SubObject(2)=line(xsup,ysup,<span class="string">'Color'</span>,col,<span class="string">'LineStyle'</span>,SubLineStyle,<span class="string">'Tag'</span>,<span class="string">'proj_object'</span>);
4340372         <span class="keyword">end</span>
4350373     
4360374     <span class="keyword">elseif</span> isequal(ObjectData.Style,<span class="string">'rectangle'</span>)
4370375         hh=rectangle(<span class="string">'Position'</span>,[ObjectData.Coord(1,1)-XMax ObjectData.Coord(1,2)-YMax 2*XMax 2*YMax],<span class="string">'EdgeColor'</span>,col);   
4380376     <span class="keyword">elseif</span> isequal(ObjectData.Style,<span class="string">'ellipse'</span>)
4390377         hh=rectangle(<span class="string">'Curvature'</span>,[1 1],<span class="string">'Position'</span>,[ObjectData.Coord(1,1)-XMax ObjectData.Coord(1,2)-YMax 2*XMax 2*YMax],<span class="string">'EdgeColor'</span>,col);
4400378     <span class="keyword">else</span>
4410379         <a href="warndlg_uvmat.html" class="code" title="function hwarn=warndlg_uvmat(warntext,title)">warndlg_uvmat</a>(<span class="string">'unknown ObjectData.Style in plot_object.m'</span>,<span class="string">'ERROR'</span>)
4420380         <span class="keyword">return</span>
4430381     <span class="keyword">end</span>
4440382     set(hh,<span class="string">'Tag'</span>,<span class="string">'proj_object'</span>)
4450383     <span class="comment">%set(hh,'UserData',ObjectData)%</span>
4460384 <span class="comment">%         hh=hplot;</span>
4470385 <span class="comment">%     set(hh,'DeleteFcn',@deletefcn)</span>
4480386 <span class="comment">%     if isequal(ObjectData.ProjMode,'inside')</span>
4490387 <span class="comment">%          if isequal(ObjectData.Style,'ellipse')|isequal(ObjectData.Style,'rectangle')</span>
4500388 <span class="comment">%             set(hh,'FaceColor',col)</span>
4510389 <span class="comment">%             set(hh,'EdgeColor',col)</span>
4520390 <span class="comment">%          end</span>
4530391 <span class="comment">%     end</span>
4540392     <span class="keyword">if</span> test_patch
4550393         hold on
4560394         hhh=image([xlim(1)+dx/2 xlim(2)-dx/2],[ylim(1)+dy/2 ylim(2)-dy/2],imflag,<span class="string">'Tag'</span>,<span class="string">'proj_object'</span>,<span class="string">'HitTest'</span>,<span class="string">'off'</span>);
4570395         set(hhh,<span class="string">'AlphaData'</span>,(flag)*0.2)
4580396         PlotData.SubObject=hhh;   
4590397     <span class="keyword">end</span>
4600398     <span class="keyword">if</span> isfield(PlotData,<span class="string">'SubObject'</span>)
4610399         set(PlotData.SubObject,<span class="string">'UserData'</span>,hh)<span class="comment">%record the parent handles in the SubObjects</span>
4620400     <span class="keyword">end</span>
4630401     <span class="keyword">if</span> isfield(PlotData,<span class="string">'DeformPoint'</span>)
4640402         <span class="keyword">for</span> ipt=1:sizcoord(1)
4650403             set(PlotData.DeformPoint(ipt),<span class="string">'UserData'</span>,hh);<span class="comment">%record the parent handles in the SubObjects</span>
4660404         <span class="keyword">end</span>
4670405         set(PlotData.DeformPoint,<span class="string">'UserData'</span>,hh)<span class="comment">%record the parent handles in the SubObjects</span>
4680406     <span class="keyword">end</span>
4690407 <span class="keyword">end</span>
4700408 set(hh,<span class="string">'UserData'</span>,PlotData)</pre></div>
471<hr><address>Generated on Fri 13-Nov-2009 11:17:03 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
472</body>
473</html>
Note: See TracBrowser for help on using the repository browser.