![]() |
【转帖】how do i get an entities getarea
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 |
所有的时间均为北京时间。 现在的时间是 04:36 AM. |