![]() |
【转帖】oddbentity, oddbcurve and subclasses
oddbentity, oddbcurve and subclasses
oddbentity, oddbcurve and subclasses hi all, i'm writing my own entity drawer, but i have a great problem: how can i understand the type of oddbentity i found in database? when i understand the the oddbentity is an oddbcurve ( ), how do i get the right subclass (oddbpolyline, oddbline, ecc). i hope this is my last problem to understand thank you walter myzhar ============== ing. walter lucetti geomind srl pisa - italy ============== myzhar # 22nd may 2006, 09:36 am founding member join date: jun 2002 location: bulgaria posts: 377 well, if you have a oddbline entiity then it should return true to these checks bool iscurve = pent->iskindof(oddbcurve::desc()); bool isline = pent->iskindof(oddbline::desc()); best regards chudomir chudo # 22nd may 2006, 09:45 am registered user join date: feb 2006 location: pisa posts: 69 quote: originally posted by chudo well, if you have a oddbline entiity then it should return true to these checks bool iscurve = pent->iskindof(oddbcurve::desc()); bool isline = pent->iskindof(oddbline::desc()); i noticed also isa() and isderivedfrom() functions. do you think that using code: if(pentity->isderivedfrom( oddbcurve::desc() ) { if( oddbline::desc()==pentity->isa( ) ) { // operations......... } else if( oddbpolyline::desc()==pentity->isa( ) ) { // operations......... } // and so on.................. } i would obtain a right result? myzhar ============== ing. walter lucetti geomind srl pisa - italy ============== myzhar # 22nd may 2006, 09:50 am founding member join date: jun 2002 location: bulgaria posts: 377 oddbline::desc()==pentity->isa( ) is not really wrong, but if you have a custom entitiy which is child of the line then this check will not work. i have always seen in the documentations and code that iskindof() is recommened to be used. isa() is useful when you want to get a string representation of the class - for example pent->isa()->name() would return "acdbline" for the line entity. best regards chudomir chudo # 22nd may 2006, 10:02 am registered user join date: feb 2006 location: pisa posts: 69 ok, i agree !!! thank you very much walter myzhar ============== ing. walter lucetti geomind srl pisa - italy ============== myzhar # 22nd may 2006, 11:33 am moderator join date: mar 2002 posts: 2,994 if you need to check if an entity is oddbline isa() is ok. but if you need to switch depending on entity type and process different entities differently using protocol extensions is much more efficient than dozens of checks isa() for each known enity class. see odreadex example which dumps entities using protocol extensions. sergey slezkin sslezkin # 23rd may 2006, 01:46 am softdev join date: jun 2002 location: st'petersburg, russia posts: 522 also, if you're implementing your own entity drawer, maybe it is better to use the result of worlddraw, viewportdraw, setattributes calls or even use our vectorization support (odvectorizeex sample) instead handling all entities manually... sincerely yours, george udov george udov none ? | ? thread tools display modes linear mode search this thread rate this thread excellent good average bad terrible posting rules you may post new threads you may post replies you may post attachments you may edit your posts is on are on code is off html code is off forum jump user control panel private messages subscriptions who's online search forums forums home general topics news questions and remarks business issues industry commentary general software issues documentation issues future directions dwg libraries dwgdirect.net dwgdirect, c++ version dwgdirectx, activex version adtdirect/c3ddirect opendwg toolkit/viewkit dgn libraries dgndirect, c++ version (2.x+) dgndirect libraries (legacy 0.99xx) all times are gmt -7. the time now is 11:11 pmfff">. - - - copyright ?2000 - 2009, jelsoft enterprises ltd. copyright 1998-2008 open design alliance inc. well, if you have a oddbline entiity then it should return true to these checks bool iscurve = pent->iskindof(oddbcurve::desc()); bool isline = pent->iskindof(oddbline::desc()); best regards chudomir quote: originally posted by chudo well, if you have a oddbline entiity then it should return true to these checks bool iscurve = pent->iskindof(oddbcurve::desc()); bool isline = pent->iskindof(oddbline::desc()); i noticed also isa() and isderivedfrom() functions. do you think that using code: if(pentity->isderivedfrom( oddbcurve::desc() ) { if( oddbline::desc()==pentity->isa( ) ) { // operations......... } else if( oddbpolyline::desc()==pentity->isa( ) ) { // operations......... } // and so on.................. } i would obtain a right result? myzhar ============== ing. walter lucetti geomind srl pisa - italy ============== oddbline::desc()==pentity->isa( ) is not really wrong, but if you have a custom entitiy which is child of the line then this check will not work. i have always seen in the documentations and code that iskindof() is recommened to be used. isa() is useful when you want to get a string representation of the class - for example pent->isa()->name() would return "acdbline" for the line entity. best regards chudomir ok, i agree !!! thank you very much walter myzhar ============== ing. walter lucetti geomind srl pisa - italy ============== if you need to check if an entity is oddbline isa() is ok. but if you need to switch depending on entity type and process different entities differently using protocol extensions is much more efficient than dozens of checks isa() for each known enity class. see odreadex example which dumps entities using protocol extensions. sergey slezkin also, if you're implementing your own entity drawer, maybe it is better to use the result of worlddraw, viewportdraw, setattributes calls or even use our vectorization support (odvectorizeex sample) instead handling all entities manually... sincerely yours, george udov |
所有的时间均为北京时间。 现在的时间是 11:32 AM. |