diff --git a/matGeom/geom2d/drawArrow.m b/matGeom/geom2d/drawArrow.m index 37eb3454..5121b2bc 100644 --- a/matGeom/geom2d/drawArrow.m +++ b/matGeom/geom2d/drawArrow.m @@ -1,5 +1,5 @@ function varargout = drawArrow(varargin) -%DRAWARROW Draw an arrow on the current axis. +% Draw an arrow on the current axis. % % drawArrow(x1, y1, x2, y2) % draws an arrow between the points (x1 y1) and (x2 y2). @@ -14,7 +14,7 @@ % also specifies arrow type. TYPE can be one of the following : % 0: draw only two strokes % 1: fill a triangle -% .5: draw a half arrow (try it to see ...) +% 0.5: draw a half arrow (try it to see ...) % % Arguments can be single values or array of size N-by-1. In this case, % the function draws multiple arrows. @@ -45,6 +45,14 @@ % 2014-09-17 fix managment of handle values as suggested by Benoit Botton % 2016-05-23 Improve codee and reduce calculations (by JuanPi Carbajal) +% extract handle of axis to draw on +if isAxisHandle(varargin{1}) + ax = varargin{1}; + varargin(1) = []; +else + ax = gca; +end + if isempty (varargin) error ('should specify at least one argument'); end @@ -90,14 +98,14 @@ end hold on; -oldHold = ishold (gca); +oldHold = ishold(ax); if ~oldHold hold on; end axis equal; % angle of the edge -theta = atan2 (y2-y1, x2-x1); +theta = atan2(y2-y1, x2-x1); rl = r .* l; rh = r .* h; @@ -114,7 +122,7 @@ ya3 = y2 - rh .* sT; % draw main edge -tmp = line ([x1.'; x2.'], [y1.'; y2.'], 'color', [0 0 1]); +tmp = line(ax, [x1.'; x2.'], [y1.'; y2.'], 'color', [0 0 1]); handle.body = tmp; % draw only 2 wings @@ -131,9 +139,10 @@ % draw a full arrow ind = find (h ~= 0); -if ~isempty (ind) - tmp = patch ([x2(ind) xa1(ind) xa3(ind) xa2(ind) x2(ind)].', ... - [y2(ind) ya1(ind) ya3(ind) ya2(ind) y2(ind)].', [0 0 1]); +if ~isempty(ind) + tmp = patch (ax, ... + [x2(ind) xa1(ind) xa3(ind) xa2(ind) x2(ind)].', ... + [y2(ind) ya1(ind) ya3(ind) ya2(ind) y2(ind)].', [0 0 1]); handle.head = tmp; end diff --git a/matGeom/geom2d/drawBezierCurve.m b/matGeom/geom2d/drawBezierCurve.m index a48d1aad..b9edfca1 100644 --- a/matGeom/geom2d/drawBezierCurve.m +++ b/matGeom/geom2d/drawBezierCurve.m @@ -1,5 +1,5 @@ function varargout = drawBezierCurve(points, varargin) -%DRAWBEZIERCURVE Draw a cubic bezier curve defined by 4 control points. +% Draw a cubic bezier curve defined by 4 control points. % % drawBezierCurve(POINTS) % Draw the Bezier curve defined by the 4 control points stored in POINTS. @@ -25,9 +25,10 @@ % See also % drawPolyline, cubicBezierToPolyline % + % ------ % Author: David Legland -% e-mail: david.legland@grignon.inra.fr +% e-mail: david.legland@inrae.fr % Created: 2011-03-16, using Matlab 7.9.0.529 (R2009b) % Copyright 2011 INRA - Cepia Software Platform. @@ -35,14 +36,16 @@ % 2011-10-11 add management of axes handle % extract handle of axis to draw on -if isAxisHandle(points) - ax = points; - points = varargin{1}; +if isAxisHandle(varargin{1}) + ax = varargin{1}; varargin(1) = []; else ax = gca; end +points = varargin{1}; +varargin(1) = []; + % default number of discretization steps N = 64; diff --git a/matGeom/geom2d/drawBox.m b/matGeom/geom2d/drawBox.m index a1436487..3684202c 100644 --- a/matGeom/geom2d/drawBox.m +++ b/matGeom/geom2d/drawBox.m @@ -1,5 +1,5 @@ function varargout = drawBox(box, varargin) -%DRAWBOX Draw a box defined by coordinate extents. +% Draw a box defined by coordinate extents. % % drawBox(BOX) % Draws a box defined by its extent: BOX = [XMIN XMAX YMIN YMAX]. @@ -21,8 +21,9 @@ % axis([0 60 0 60]); % % See Also: -% drawOrientedBox, drawRect +% drawOrientedBox, drawRect % + % --------- % author : David Legland % INRA - TPV URPOI - BIA IMASTE diff --git a/matGeom/geom2d/drawCenteredEdge.m b/matGeom/geom2d/drawCenteredEdge.m index 1500be08..5aeb474a 100644 --- a/matGeom/geom2d/drawCenteredEdge.m +++ b/matGeom/geom2d/drawCenteredEdge.m @@ -1,5 +1,5 @@ function varargout = drawCenteredEdge(varargin) -%DRAWCENTEREDEDGE Draw an edge centered on a point. +% Draw an edge centered on a point. % % Draws a centered edge, defined by a center, a length and an orientation % (in degrees). This function can be used to draw principal axes of an @@ -41,8 +41,9 @@ % drawCenteredEdge(edges, 'linewidth', 2, 'color', 'g'); % % See also: -% edges2d, drawOrientedBox, drawEllipse, centeredEdgeToEdge, drawEdge +% edges2d, drawOrientedBox, drawEllipse, centeredEdgeToEdge, drawEdge % + % --------- % author : David Legland % INRA - TPV URPOI - BIA IMASTE diff --git a/matGeom/geom2d/drawCircle.m b/matGeom/geom2d/drawCircle.m index 164e7c4a..a9ffe573 100644 --- a/matGeom/geom2d/drawCircle.m +++ b/matGeom/geom2d/drawCircle.m @@ -1,5 +1,5 @@ function varargout = drawCircle(varargin) -%DRAWCIRCLE Draw a circle on the current axis. +% Draw a circle on the current axis. % % drawCircle(X0, Y0, R); % Draw the circle with center (X0,Y0) and the radius R. If X0, Y0 and R diff --git a/matGeom/geom2d/drawCircleArc.m b/matGeom/geom2d/drawCircleArc.m index 9d56e219..4a5fbe76 100644 --- a/matGeom/geom2d/drawCircleArc.m +++ b/matGeom/geom2d/drawCircleArc.m @@ -1,5 +1,5 @@ function varargout = drawCircleArc(varargin) -%DRAWCIRCLEARC Draw a circle arc on the current axis. +% Draw a circle arc on the current axis. % % drawCircleArc(ARC); % Draws circle arc defined by ARC = [XC YC R START EXTENT], with (XC, YC) @@ -29,8 +29,9 @@ % drawCircleArc(arc, 'LineWidth', 3, 'Color', 'r') % % See also: -% circles2d, drawCircle, drawEllipse, circleArcToPolyline +% circles2d, drawCircle, drawEllipse, circleArcToPolyline % + % -------- % author: David Legland % INRA - TPV URPOI - BIA IMASTE diff --git a/matGeom/geom2d/drawEdge.m b/matGeom/geom2d/drawEdge.m index fcd13381..ca45cbdb 100644 --- a/matGeom/geom2d/drawEdge.m +++ b/matGeom/geom2d/drawEdge.m @@ -1,5 +1,5 @@ function varargout = drawEdge(varargin) -%DRAWEDGE Draw an edge given by 2 points. +% Draw an edge defined by its two extremities. % % drawEdge(x1, y1, x2, y2); % draw an edge between the points (x1 y1) and (x2 y2). diff --git a/matGeom/geom2d/drawEllipseArc.m b/matGeom/geom2d/drawEllipseArc.m index f5987434..f140a8e0 100644 --- a/matGeom/geom2d/drawEllipseArc.m +++ b/matGeom/geom2d/drawEllipseArc.m @@ -1,5 +1,5 @@ function varargout = drawEllipseArc(varargin) -%DRAWELLIPSEARC Draw an ellipse arc on the current axis. +% Draw an ellipse arc on the current axis. % % drawEllipseArc(ARC) % draw ellipse arc specified by ARC. ARC has the format: @@ -43,8 +43,9 @@ % drawRay(ray2) % % See also: -% ellipses2d, drawEllipse, drawCircleArc +% ellipses2d, drawEllipse, drawEllipseAxes, drawCircleArc % + % --------- % author : David Legland % INRA - TPV URPOI - BIA IMASTE diff --git a/matGeom/geom2d/drawLabels.m b/matGeom/geom2d/drawLabels.m index a638b605..d0f9567b 100644 --- a/matGeom/geom2d/drawLabels.m +++ b/matGeom/geom2d/drawLabels.m @@ -35,7 +35,7 @@ end % extract handle of axis to draw on -if isscalar(varargin{1}) && ishandle(varargin{1}) +if isAxisHandle(varargin{1}) ax = varargin{1}; varargin(1) = []; else diff --git a/matGeom/geom2d/drawLine.m b/matGeom/geom2d/drawLine.m index 349bae5c..2cedd797 100644 --- a/matGeom/geom2d/drawLine.m +++ b/matGeom/geom2d/drawLine.m @@ -1,5 +1,5 @@ -function varargout = drawLine(lin, varargin) -%DRAWLINE Draw a straight line clipped by the current axis. +function varargout = drawLine(varargin) +% Draw a straight line clipped by the current axis. % % drawLine(LINE); % Draws the line LINE on the current axis, by using current axis to clip @@ -20,8 +20,9 @@ % drawLine([-30 140 10 20]); % % See also: -% lines2d, createLine, drawEdge +% lines2d, createLine, drawEdge, clipLine % + % --------- % author : David Legland % INRA - TPV URPOI - BIA IMASTE @@ -35,15 +36,18 @@ % 04/08/2010 rewrite using clipLine % 2011-10-11 add management of axes handle -% extract handle of axis to draw in -if isAxisHandle(lin) - ax = lin; - lin = varargin{1}; +% extract handle of axis to draw on +if isAxisHandle(varargin{1}) + ax = varargin{1}; varargin(1) = []; else ax = gca; end +% retrieve line +lin = varargin{1}; +varargin(1) = []; + % default style for drawing lines if length(varargin) ~= 1 varargin = [{'color', 'b'}, varargin]; diff --git a/matGeom/geom2d/drawOrientedBox.m b/matGeom/geom2d/drawOrientedBox.m index 5ec140dd..e7a82e85 100644 --- a/matGeom/geom2d/drawOrientedBox.m +++ b/matGeom/geom2d/drawOrientedBox.m @@ -1,5 +1,5 @@ function varargout = drawOrientedBox(box, varargin) -%DRAWORIENTEDBOX Draw centered oriented rectangle. +% Draw centered oriented rectangle. % % Syntax % drawOrientedBox(BOX) @@ -34,11 +34,12 @@ % axis equal; % % See also -% orientedBox, drawPolygon, drawRect, drawBox, drawCenteredEdge +% orientedBox, drawPolygon, drawRect, drawBox, drawCenteredEdge % + % ------ % Author: David Legland -% e-mail: david.legland@grignon.inra.fr +% e-mail: david.legland@inrae.fr % Created: 2011-05-09, using Matlab 7.9.0.529 (R2009b) % Copyright 2011 INRA - Cepia Software Platform. diff --git a/matGeom/geom2d/drawParabola.m b/matGeom/geom2d/drawParabola.m index 2b0d7f92..a069b8eb 100644 --- a/matGeom/geom2d/drawParabola.m +++ b/matGeom/geom2d/drawParabola.m @@ -1,5 +1,5 @@ function varargout = drawParabola(varargin) -%DRAWPARABOLA Draw a parabola on the current axis. +% Draw a parabola on the current axis. % % drawParabola(PARABOLA); % Draws a vertical parabola, defined by its vertex and its parameter. @@ -59,7 +59,7 @@ % Extract parabola if nargin < 1 - error('geom2d:drawParabola:IllegalArgument', ... + error('MatGeom:geom2d:drawParabola:IllegalArgument', ... 'Please specify parabola representation'); end diff --git a/matGeom/geom2d/drawPoint.m b/matGeom/geom2d/drawPoint.m index 15023ce5..3ab867dd 100644 --- a/matGeom/geom2d/drawPoint.m +++ b/matGeom/geom2d/drawPoint.m @@ -1,5 +1,5 @@ function h = drawPoint(varargin) -%DRAWPOINT Draw the point on the axis. +% Draw the point on the axis. % % drawPoint(X, Y); % Draws points defined by coordinates X and Y. diff --git a/matGeom/geom2d/drawRay.m b/matGeom/geom2d/drawRay.m index 18be1d09..0308d697 100644 --- a/matGeom/geom2d/drawRay.m +++ b/matGeom/geom2d/drawRay.m @@ -1,5 +1,5 @@ function varargout = drawRay(ray, varargin) -%DRAWRAY Draw a ray on the current axis. +% Draw a ray on the current axis. % % drawRay(RAY) % With RAY having the syntax: [x0 y0 dx dy], draws the ray starting from @@ -13,8 +13,9 @@ % Returns handle on line object % % See also: -% rays2d, drawLine +% rays2d, drawLine, clipRay % + % --------- % % author : David Legland diff --git a/matGeom/geom2d/drawRect.m b/matGeom/geom2d/drawRect.m index 67d0aa5a..f9c95fa1 100644 --- a/matGeom/geom2d/drawRect.m +++ b/matGeom/geom2d/drawRect.m @@ -1,5 +1,5 @@ function varargout = drawRect(rect, varargin) -%DRAWRECT Draw rectangle on the current axis. +% Draw rectangle on the current axis. % % drawRect(RECT) % draws the rectangles defined by RECT = [X0 Y0 W H]. @@ -22,7 +22,7 @@ % Returns handle of the created graphic objects. % % See Also: -% drawOrientedBox, drawBox, rectToPolygon +% drawOrientedBox, drawBox, rectToPolygon % % --------- diff --git a/matGeom/geom2d/drawShape.m b/matGeom/geom2d/drawShape.m index 0f0d6703..04db6a19 100644 --- a/matGeom/geom2d/drawShape.m +++ b/matGeom/geom2d/drawShape.m @@ -1,5 +1,5 @@ -function varargout = drawShape(type, param, varargin) -%DRAWSHAPE Draw various types of shapes (circles, polygons...). +function varargout = drawShape(varargin) +% Draw various types of shapes (circles, polygons...). % % drawShape(TYPE, PARAM) % Draw the shape of type TYPE, specified by given parameter PARAM. TYPE @@ -7,7 +7,7 @@ % PARAM depend on the type. For example, if TYPE is 'circle', PARAM will % contain [x0 y0 R]. % -% Examples : +% Examples: % drawShape('circle', [20 10 30]); % Draw circle centered on [20 10] with radius 10. % drawShape('rect', [20 20 40 10 pi/3]); @@ -19,8 +19,8 @@ % also specifies drawing options. OPTION can be 'draw' (default) or % 'fill'. % + % --------- -% % author : David Legland % INRA - TPV URPOI - BIA IMASTE % created the 07/04/2005. @@ -28,6 +28,20 @@ % HISTORY +% extract handle of axis to draw on +if isAxisHandle(varargin{1}) + ax = varargin{1}; + varargin(1) = []; +else + ax = gca; +end + +% extract type and representation of shape +type = varargin{1}; +param = varargin{2}; +varargin(1:2) = []; + + if ~iscell(type) type = {type}; end @@ -45,6 +59,10 @@ var = varargin{1}; if strcmpi(var, 'fill') option = 'fill'; + varargin(1) = []; + elseif strcmpi(var, 'draw') + option = 'draw'; + varargin(1) = []; end end @@ -67,15 +85,15 @@ h = zeros(length(shape), 1); if strcmp(option, 'draw') for i = 1:length(shape) - h(i) = drawPolygon(shape{i}); + h(i) = drawPolygon(ax, shape{i}, varargin{:}); end else for i = 1:length(shape) - h(i) = fillPolygon(shape{i}); + h(i) = fillPolygon(ax, shape{i}, varargin{:}); end end -% foramt output +% format output if nargout > 0 varargout = {h}; end diff --git a/matGeom/geom2d/drawVector.m b/matGeom/geom2d/drawVector.m index 6d6493e1..a3aa43e6 100644 --- a/matGeom/geom2d/drawVector.m +++ b/matGeom/geom2d/drawVector.m @@ -1,4 +1,4 @@ -function varargout = drawVector(pos, vect, varargin) +function varargout = drawVector(varargin) % Draw vector at a given position. % % drawVector(POS, VECT) @@ -27,6 +27,19 @@ % Created: 2013-03-18, using Matlab 7.9.0.529 (R2009b) % Copyright 2013 INRA - Cepia Software Platform. +% extract handle of axis to draw on +if isAxisHandle(varargin{1}) + ax = varargin{1}; + varargin(1) = []; +else + ax = gca; +end + +% retrieve position and direction of vector +pos = varargin{1}; +vect = varargin{2}; +varargin(1:2) = []; + % check input dimension nd = size(pos, 2); if size(vect, 2) ~= nd @@ -35,11 +48,11 @@ if nd == 2 % Display 2D vectors - h = quiver(pos(:, 1), pos(:, 2), vect(:, 1), vect(:, 2), 0, varargin{:}); + h = quiver(ax, pos(:, 1), pos(:, 2), vect(:, 1), vect(:, 2), 0, varargin{:}); elseif nd == 3 % Display 3D vectors - h = quiver3(pos(:, 1), pos(:, 2), pos(:, 3), ... + h = quiver3(ax, pos(:, 1), pos(:, 2), pos(:, 3), ... vect(:, 1), vect(:, 2), vect(:, 3), 0, varargin{:}); else