how do i get an entities getarea?
how do i get an entities getarea?
i have searched the forum and haven't been able to find an answer to the questions:
is there a better way to get the area of any entity that exposes getarea()?
how do you convert odstring to something you can use switch?
code:
oddbentityptr pent = pentiter->objectid().safeopenobject();
oddbentity* ent;
ent = pent.get();
odstring enttype(tostring(ent->isa()));
double a;
if(enttype == oddbpolyline::desc())
{
((oddbpolyline*)ent)->getarea(a);
}
.... followed by numerous other type checks and casts
thanks
tim
ok dug some more and this is closer to what i want to do:
code:
if ( pent->iskindof( oddbpolyline::isa() ) )
{
oddbpolylineptr pentity = pent;
pentity->getarea(a);
}
if ( pent->iskindof( oddbarc::isa() ) )
{
oddbarc pentity = pent;
pentity->getarea(a);
}... repeat adnauseum
but obviously the above doesnt work since isa() is not static.
so then i tried:
code:
if(pent->iskindof( oddbpolyline::desc() ))
{
oddbpolylineptr pentity = pent;
pentity->getarea(a);
}but still no luck ... any suggestions?
last edited by
timothy_hesse@gensler.com; 25th february 2009 at 02:51 pmfff">.
finally figured it out
finally figured it out:
code:
double a = 0;
if (pent.isa() == oddbpolyline::desc())
{
oddbpolyline pentity = pent;
pentity->getarea(a);
}
... etc ...is there a way to test to see if an entity has getarea()
1. in general - no. but note that most of entities having getarea() are derived from oddbcurve class.
2. besides iskindof() you can use:
code:
oddbentityptr pent = ???;
// without cast() call here will be exception if classes are unrelated
oddbcurveptr pcurve = oddbcurve::cast(pent);
if (!pcurve.isnull())
{ // the entity is derived from oddbcurve
...
}
3. you you need to determine if entity has "area" property for example to display it when you can use com (activex) for properties.
sergey slezkin