几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   DirectDWG (http://www.dimcax.com/hust/forumdisplay.php?f=89)
-   -   【转帖】how do i get an entities getarea (http://www.dimcax.com/hust/showthread.php?t=16577)

yang686526 2009-05-05 12:27 PM

【转帖】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.