![]() |
【转帖】oddbwipeout, modifying it after creating i
oddbwipeout, modifying it after creating it...
oddbwipeout, modifying it after creating it... i have a new requirement for my application to be able to create and manipulate oddbwipeout entities. i am able to successfully create a wipeout, but modifying an existing one seems to be a bit more of a challenge. below is the logic i use to manipulate a line entity: code: if(!oddbline::cast(piter->objectid().safeopenobject()).isnull() ) { oddblineptr pline = piter->objectid().safeopenobject(oddb::kforwrite); if(!pline.isnull()) { //check and move odgepoint3d startpoint; if(eok == pline->getstartpoint(startpoint)) { bcspointtowcs(startpoint); if(bounds.contains(startpoint, containstol)) { pline->setstartpoint(startpoint+=to); } } odgepoint3d endpoint; if(eok == pline->getendpoint(endpoint)) { bcspointtowcs(endpoint); if(bounds.contains(endpoint, containstol)) { pline->setendpoint(endpoint+=to); } } } continue; // if the entity was of this type, it can't be of another type! }// lineand here's the code that i am using to create the wipeout: code: void opendwgdrawing::createwipeout(opendwg::opendwgdrawing::pointsptr points, odstring layer) { odgepoint3darray arr; oddbwipeoutptr pwip = oddbwipeout::createobject(); oddbblocktablerecordptr precord = getdimensionblock().safeopenobject(oddb::kforwrite); precord->appendoddbentity(pwip); pwip->setdatabasedefaults(_pdb); pwip->setorientation(odgepoint3d::korigin, odgevector3d::kyaxis, odgevector3d::kxaxis); for(pointsptr::iterator it = points.begin(); it != points.end(); it++) { arr.append((*it)->point(this)); //(*it)->dumppoint(); } arr.append(arr.first()); //pwip->setclipboundary(arr); pwip->setboundary(arr); pwip->setdisplayopt(oddbrasterimage::imagedisplayopt::kshow,true); pwip->setdisplayopt(oddbrasterimage::imagedisplayopt::kclip,true); pwip->setdisplayopt(oddbrasterimage::imagedisplayopt::kshowunaligned,true); pwip->setdisplayopt(oddbrasterimage::imagedisplayopt::ktransparent,false); pwip->setlayer(getlayer(layer)); } i know how to test an object to see if it is a wipeout, and then get the wipeout smart pointer, but from there things become obscure. what would be optimial is to get access to the existing boundary... something like: code: odgepoint3darray arr; oddbwipeoutptr pwip ...// get the smart pointer to the existing od entity ... pwip->getboundary(arr); // get the existing bounds // enumerate the bounds and do misc testing to see which (if any) of the points are within the user specified points/bounds and then apply the desired transformation to the points that succeed pwip->setboundary(arr);// only call set if one or more points were changed..so far, the only getter i am seeing that may be of use is oddbwipeoutptr::getvertices. any help would be appreciated. anyone at all? this is quickly becomming a road block for me. can anyone point me in the proper direction to at least retreive the existing boundary points from an existing oddbwipeout object? oddbwipeoutptr::getvertices was the answer. apparently i just needed to look deeper into it. |
所有的时间均为北京时间。 现在的时间是 01:55 AM. |