Azzera filtri
Azzera filtri

Mex mxGetField do loop

1 visualizzazione (ultimi 30 giorni)
Chris
Chris il 13 Mag 2013
Hello,
I'm trying to use a do loop in my mex function that will take the values passed via a struct form from matlab. The matlab struct is as follows:
TurbineComponents.Blade(1).Position = ...
TurbineComponents.Blade(1).Orientation = ...
etc
I try the following as my do loop in the mex file:
Do J = 1, NumBl
Blade1_pr = mxGetField(prhs(ArgNum),1,'Blade(J)')
b1p_pr = mxGetField(Blade1_pr,1,'Position')
b1p_ptr = mxGetPr(b1p_pr)
b1o_pr = mxGetField(Blade1_pr,1,'Orientation')
b1o_ptr = mxGetPr(b1o_pr)
b1v_pr = mxGetField(Blade1_pr,1,'RotationVel')
b1v_ptr = mxGetPr(b1v_pr)
b1t_pr = mxGetField(Blade1_pr,1,'TranslationVel')
b1t_ptr = mxGetPr(b1t_pr)
call mxcopyptrtoreal8(b1p_ptr,TurbineComponents%Blade(J)%Position,size2)
call mxcopyptrtoreal8(b1o_ptr,TurbineComponents%Blade(J)%Orientation,size3)
call mxcopyptrtoreal8(b1v_ptr,TurbineComponents%Blade(J)%RotationVel,size2)
call mxcopyptrtoreal8(b1t_ptr,TurbineComponents%Blade(J)%TranslationVel,size2)
end Do
The problem is coming from the first line of code, "Blade(J)" I believe. Is there a way to work around the field name?

Risposta accettata

James Tursa
James Tursa il 13 Mag 2013
Get Blade using the J as the index. E.g.,
Blade1_pr = mxGetField(prhs(ArgNum),J,'Blade')
  4 Commenti
James Tursa
James Tursa il 13 Mag 2013
This would be expected if not all elements are pre-allocated. When you create a struct or cell array the actual values for the elements are NULL pointers until you set them to something. So if you are passing a struct to your mex function with only some of the elements set, then you need to check for this condition inside your mex function (actually it is always a good idea to check for this regardless of what you expect). E.g.,
Blade1_pr = mxGetField(prhs(ArgNum),J,'Blade')
if( Blade1_pr == 0 ) cycle ! or whatever action is appropriate
b1p_pr = mxGetField(Blade1_pr,1,'Position')
if( b1p_pr == 0 ) cycle ! or whatever action is appropriate
etc.
You will have to decide what action is appropriate when elements are not set. Maybe generate an error or maybe fill in with a default value, etc.
Chris
Chris il 14 Mag 2013
Thanks James

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by