← Back to team overview

yade-users team mailing list archive

Re: [Question #698253]: Access to body material properties


Question #698253 on Yade changed:

    Status: Open => Answered

Jan Stránský proposed the following answer:

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.


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