Add and delete Line and port

6 visualizaciones (últimos 30 días)
Laurensius Christian Danuwinata
Laurensius Christian Danuwinata el 15 de Feb. de 2016
Hello, I have a popup-parameter in a Block Mask. And if an element from the list in popup chosen, the add_line and add_block should be execute. Then, if I choose new element, the old add_line and _block should be deleted and the new add_line and _block will be added. I can use it separately, but how can I write it just in one code? Thanks :D

Respuesta aceptada

Arnab Sen
Arnab Sen el 22 de Feb. de 2016
Hi Laurensius,
My understanding from the question is that you would like to perform different action when the popup list element is chosen for the first time than when the list element is chosen for the second time.
We can use 'persistent' variable for this purpose which holds the value between the function calls (Similar to 'static' variable in C). Based on the value of the persistent variable you may take different action as per required.
As an illustration, you may consider the following code in the callback of the particular popup:
b=valueOfPersistent;
if(b==1)
% the add_line and add_block code
disp('b==1');
else
%Code to delete the old add_line and _block and add new add_line and _block
disp(b);
end
And write the function 'valueOfPersistent' as follow:
function b=valueOfPersistent
persistent a;
if isempty(a)
a=1;
end
b=a;
a=a+1;
end
Here the function initializes the variable 'a' only once and increment the values each time the function is called from the callback and returns the latest value.
  2 comentarios
Laurensius Christian Danuwinata
Laurensius Christian Danuwinata el 24 de Feb. de 2016
Hi Arnab,
it worked actually, if b==1 then add_line, however if b==2.....,n it should delete_line as well as add the new line and port. here is the code : br=ValueOfPersistent
if(br==1) % the add_line and add_block code
for i=(d-numel(a))+1:d
add_block(strcat(gcs,'/DebugCAN'), strcat(gcs,'/',CANBO(room).BOname,'/In1'), 'Name', CANstruct(i).SignalName,'Position',[15 (158+40*(i-(d-numel(a)))) 45 (172+40*(i-(d-numel(a))))])
add_line(strcat(gcs,'/',CANBO(room).BOname),strcat(CANstruct(i).SignalName,'/','1'),strcat('CAN bit-packing 1','/',num2str(i-(d-numel(a)))),'autorouting','on');
end
disp('br==1'); else
%Code to delete the old add_line and _block and add new add_line and _block
for i=(d-numel(a)+1):d
delete_line(gcs,strcat(CANstruct(i).SignalName,'/','1'),strcat('CAN bit-packing 1','/',num2str(i-(d-numel(a)))));
end
delete_block(get_param(find_system(gcs,'regexp','on','LookUnderMasks','all','blocktype','port'),'Handle'))
disp(br); end
It wasn't working for the delete add_line and _block though, do you have any further suggestion?
Laurensius Christian Danuwinata
Laurensius Christian Danuwinata el 24 de Feb. de 2016
shortly, below %code to delete........ In the second loop, it should delete the value from the 1.loop( in 1.loop the line and block will be added) and then add_line and _block with the value from the current loop(2.Loop) and so on. I try to figure it out currently, would be best, if you have any suggestion for it :D, thank you so much anyway for the first answer with persistent function

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Programmatic Model Editing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by