Question #698253 on Yade changed:
https://answers.launchpad.net/yade/+question/698253

    Status: Open => Answered

Jan Stránský proposed the following answer:
Hi,

body->material is "by default" an abstract base Material instance [1]. It has 
no CP1, CP2, ..., K1, ...
If you want to access those properties defined on derived classes, you have to 
cast the instance.
(You have something already in your code).

WhateverMat* mat = dynamic_cast<WhateverMat*>(B->material.get());

A robust code should count with the possibility, that B->material is not
WhateverMat, but some else material, like:

WhateverMat* mat = dynamic_cast<WhateverMat*>(B->material.get());
if (mat) { // if true, mat is WhateverMat. If false, mat is NOT WhateverMat
   // do something with WhateverMat
} else {
   // do something for the case it is not WhateverMat (different code, error, 
...)
}


a note:
CpmPhys* mat = dynamic_cast<CpmPhys*>(B->material.get());
also being valid code, casting B->material (a Material) to CpmPhys (IPhys) will 
always result into null pointer.

Cheers
Jan

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to