Effacer les filtres
Effacer les filtres

Mex mxGetField do loop

1 vue (au cours des 30 derniers jours)
Chris
Chris le 13 Mai 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?

Réponse acceptée

James Tursa
James Tursa le 13 Mai 2013
Get Blade using the J as the index. E.g.,
Blade1_pr = mxGetField(prhs(ArgNum),J,'Blade')
  4 commentaires
James Tursa
James Tursa le 13 Mai 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 le 14 Mai 2013
Thanks James

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by