![]() |
【转帖】need advice about redrawing
need advice about redrawing
need advice about redrawing hello, i want my application to show two parallel lines when the user is introducing a new element. i’ve been using your function overlapdraw(), but i thought i prefer using two lines pertaining to database because it seems to me this results in a more “clear” code. so i’ve tried these 2 approaches: approach 1) code: in cview derived class include file i’ve declared: oddblineptr pline1; oddbobjectid idline1; oddblineptr pline2; oddbobjectid idline2; in cview derived class oninitdialog(): oddbblocktablerecordptr pspace; pspace = pdb->getmodelspaceid().safeopenobject(oddb::kforwrite); pline1 = oddbline::createobject(); pdbsbesa->addoddbobject(pline1); idline1= pspace->appendoddbentity(pline1); pline1->setcolorindex(1); pline1->setlayer("0"); pline1->setlineweight(oddb::klnwt000); pline2 = oddbline::createobject(); pdbsbesa->addoddbobject(pline2); idline2= pspace->appendoddbentity(pline2); pline2->setcolorindex(1); pline2->setlayer("0"); pline2->setlineweight(oddb::klnwt000); and in cview derived class onmousemove(): pline1 = oddbline::cast(idline1.safeopenobject(oddb::kforwrite)); pline1->setstartpoint(pt3dworldstartpointline1); pline1->setendpoint(pt3dworldendpointline1); pline2 = oddbline::cast(idline2.safeopenobject(oddb::kforwrite)); pline2->setstartpoint(pt3dworldstartpointline2); pline2->setendpoint(pt3dworldendpointline2); redrawwindow(); this way, no line is painted during onmousemove(). approach 2: code: in cview derived class include file i’ve declared: oddbobjectid idline1; oddbobjectid idline2; i’ve also created two functions in cview derived class: //************************************************** void cviewcad::start2linesdraw() { if(!idline1.isnull()) return; if(!idline2.isnull()) return; oddbblocktablerecordptr pspace; pspace = pdb->getmodelspaceid().safeopenobject(oddb::kforwrite); oddblineptr pline1; pline1 = oddbline::createobject(); pdb->addoddbobject(pline1); oddblineptr pline2; pline2 = oddbline::createobject(); pdb->addoddbobject(pline2); idline1= pspace->appendoddbentity(pline1); idline2= pspace->appendoddbentity(pline2); pline1->setstartpoint(pt3dworldstartpointline1); pline1->setendpoint(pt3dworldstartpointline1); pline1->setcolorindex(1); pline1->setlayer("0"); pline1->setlineweight(oddb::klnwt000); pline2->setstartpoint(pt3dworldstartpointline2); pline2->setendpoint(pt3dworldstartpointline2); pline2->setcolorindex(1); pline2->setlayer("0"); pline2->setlineweight(oddb::klnwt000); } //************************************************** void cviewdatoscad:: update2linesdraw () { if(idline1.isnull()) return; if(idline2.isnull()) return; oddblineptr pline1; pline1 = oddbline::cast(idline1.safeopenobject(oddb::kforwrite)); pline1->setstartpoint(pt3dworldstartpointline1); pline1->setendpoint(pt3dworldendpointline1); pline1->setcolorindex(1); oddblineptr pline2; pline2 = oddbline::cast(idline2.safeopenobject(oddb::kforwrite)); pline2->setstartpoint(pt3dworldstartpointline2); pline2->setendpoint(pt3dworldendpointline2); pline2->setcolorindex(1); //color rojo } //************************************************** and in cview derived class onmousemove(): start2linesdraw (); update2linesdraw (); redrawwindow(); //************************************************** when i use this code the lines are painted properly “but” the application throws the following error: |
所有的时间均为北京时间。 现在的时间是 12:27 AM. |