matlab properties line store handle

Almacenamiento de identificadores de objetos generados por imline en MATLAB



properties store (2)

Es posible que deba completar su matriz con líneas predeterminadas para poder crearla. El enfoque típico para preasignar una matriz de objetos de tamaño N sería simplemente asignar un objeto al último elemento de la matriz.

M(N,N)=imline(gca,[NaN NaN],[NaN NaN]); %# set non-displayable vals for x and y

NOTA: la línea anterior no funcionará con imline ya que llamará al constructor predeterminado para cada uno de los otros objetos de la línea N * N-1 en la matriz y una llamada de imline sin argumentos fuerza la interacción del usuario con el eje actual.

Mi consejo (si está preasignando) es definir todas las líneas predeterminadas explícitamente en la matriz:

for k=1:N*N M(k)=imline(gca,[NaN NaN],[NaN NaN]); end %# Reshape (if necessary) M = reshape(M,[N N]);

Alternativamente, puede dejar que Matlab llene la matriz por usted. Si encuentra que necesitará este código a menudo, imline una nueva clase de imline . El siguiente ejemplo muestra lo mínimo que tendría que suceder. Simplemente define un constructor. Este ejemplo le permite pasar argumentos opcionales para imline también. Si no se especifican argumentos, el objeto de línea se crea con valores de posición como se indica arriba.

classdef myimline<imline methods function obj = myimline(varargin) if isempty(varargin) varargin = {gca,[NaN NaN],[NaN NaN]}; end obj = obj@imline(varargin{:}); end end end

Ejemplo de uso:

%# Generate a 100 element array of `imline` objects, %# but define the last one explicitly mat(100)=myimline(gca,[0 1],[0 1]);

El último objeto myimline en la matriz tiene puntos especificados como en la asignación, pero el resto de los elementos tienen los valores de posición predeterminados [NaN NaN] como se [NaN NaN] anteriormente.

Intento almacenar un conjunto de identificadores de objetos en una matriz. Los objetos son una serie de líneas generadas por imline (.). Quiero almacenar los identificadores para poder cambiar la propiedad de una línea deseada (en este caso, posición).

Sé cómo hacer esto; sin embargo, cuando intento llenar una matriz con las asas de las líneas, ocurre un error: MATLAB declara que la conversión de IMLINE a DOUBLE no es posible. Esto no ocurre con otros tipos de objetos. ¿Hay alguna forma de eludir esto?

Aquí hay un pseudocódigo para aclarar:

lines=zeros(1,x); % defining empty storage matrix for idx=1:x line=imline(ax_handl,[x_1 y_1; x_2 y_2]) set(line,''UserData'',idx) % in order to identify independent lines with the number lines(idx)=line; % here I try to store a line handle as it''s made end % now in the function responsible for motion of objects, I assign new position to line line_num=get(gco,''UserData''); % this relates other objects associated with line number setPosition(lines(line_num),[a b; c d]);


Use el método estático empty para crear una matriz vacía del tipo de clase:

lines = imline.empty(0,10); for idx=1:10 line = imline(gca, sortrows(rand(2,2))); set(line,''UserData'',idx) lines(idx) = line; end