ELLIPSESELECT An interactive ellipse selection tool
HE = ELLIPSESELECT('init', A, B, X0, Y0, PHI, STYLE)
Creates the ellipse and initialzes callbacks. Returns the handle of the ellipse HE.
A Length of the semi-major axis
B Length of the semi-minor axis
X0 Abscissa of the center of the ellipse
Y0 Ordinate of the center of the ellipse
PHI Angle (in radians) between x-axis and the major axis
STYLE Definition of the plotted line style
Once created, the ellipse shape can the adjusted interactively using the mouse.
The center can be moved by dragging the 'x' at the center of the ellipse. The lengths of the axes can be adjusted by dragging on the red and black control points on the ellipse. The ellipse can be rotated through an arbitrary angle by left clicking and dragging on the ellipse boundary.
The ellipse parameters are saved in the ellipse handle's userdata roperty and can be obtained using:
PARAMS = ELLIPSESELECT('params', HE), where PARAMS is a structure with the ellipse parameters.
The ellipse can be deleted by right clicking on the ellipse boundary and selecting 'delete' from the context-menu. Alternatively, the ellipse can be deleted programmatically by using the following call to ELLIPSESELECT.
STATUS = ELLIPSESELECT('deletehandle',HE)
STATUS returns 0 if the delete operation was successful, -1 otherwise.
%generate some data
phi=pi/4; rotmat = [cos(phi),sin(phi);-sin(phi),cos(phi)];
scatter(y(1,:),y(2,:),'c.'); hold on
%create an ellipse
he = ellipseselect('init',1,1,0,0,pi/4,'r-.');
% modify ellipse line style
% get current ellipse parameters
params = ellipseselect('params',he);
% delete the ellipse
status = ellipseselect('deletehandle',he);
Rajiv Narayan (2020). Ellipseselect (https://www.mathworks.com/matlabcentral/fileexchange/12569-ellipseselect), MATLAB Central File Exchange. Retrieved .
FYI, the easiest solution for Matlab version > R2014a is to change line 302 of ellipseselect.m from "num2str(hnd)" to "double(hnd)". However, this solution may break in future releases.
What did you change the line num2str(hnd) to?
Conversion of handle to string is wrong.
Changing this line num2str(hnd) worked for me.
This is nice piece of work.
This worked great in older versions of Matlab, but is now throwing errors for r2015 due to "upgraded" graphics...
Any tips to resolve this issue?
Undefined function 'abs' for input arguments of type 'matlab.graphics.chart.primitive.Line'.
Error in num2str (line 66)
xmax = double(max(abs(widthCopy(:))));
Error in ellipseselect>cbkstr (line 301)
s=sprintf ('cbkswitch(''%s'' , ''%s'', %s)',mfilename, action, num2str(hnd));
Error in ellipseselect (line 87)
The coolest & useful program ever. To edit the ellipse in real time, you should unselect the arrow on top (took a while to figure it out)
This code was very helpful and easy to use.
I found this code very useful and well documented.
Inspired by: EllipseDraw1.0