查看单个帖子
旧 2009-05-06, 09:22 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】open dgw file

open dgw file
open dgw file
i create simple file in autocad 2009, draw a line and save as autocad 2007.
open in my application:
code:
oddbdatabaseptr myhostappservices::readfile(const odstring& filename,
bool ballowcpconversion, bool bpartial, oda::filesharemode shmode, const odpassword& password)
{
oddbdatabaseptr pres;
pres = oddbhostappservices2::readfile(filename, true, false, oda::ksharedenyno, odstring::empty);
return pres;
}and
code:
void mydrawdevice::update(odgsdcrect* )
{
const qsize& sz = gl_widget_->size();
if(!(sz.width() && sz.height()))
return;
this->onsize(odgsdcrect(0, sz.width(), sz.height(), 0));
gl_widget_->makecurrent();

mytry
mutex_.lock();
this->updategeometry();
this->updatescreen();
my_odcatch
my_catchall
my_endcatch
mutex_.unlock();
gl_widget_->swapbuffers();
}but line not visible.
last edited by aziyatdinov@infrasoft.ru; 16th january 2009 at 06:51 amfff">.
this occur only if odgicontextfordbdatabase::enablegsmodel(true);
hi,
i cannot suggest you anything related to your own application. mfcapp is our viewer example. so compare initialization\rendering mfcapp code and your own application code. you can also load your file to mfcapp and test rendering results. i think that line will be visible in any rendering modes with mfcapp, so defect in your application.
after open file dwg instead of circles it is

used deviation on the last regen. deviation take into account viewer position and viewport size. if you initially see small circles and zoom in, you see geometry cache with low quality, so you need regenerate geometry cache to improve objects quality or set good quality on initial regeneration. you can hard code deviation in your vectorize device using odgsbasevectorizeview::deviation override, or implement auto-regen in your application.
this is quote from another thread on same theme:
quote:
replacing linetypes with continuous and reducing number of poits/triangles depending on screen resolution has the purpose to reduce size of geometry cache and time required for its processing.
how this problem is solved in autocad. after regen is performed it allows zooming in (for example via mouse wheel) only in some limits. after the zooming limit is reached the user have to invoke regen manually before he can continue zooming in.
surely the regen can be done with some extra precision to allow zooming in with suitable quality. the strategy is up to application. you can control deviation to produce geometry cache with some "extra" precision to allow high quality zooming in some limits and force regen if zooming limit is exceeded.
2 amark : could you please check the invisile line issue too ?

quote:
2 amark : could you please check the invisile line issue too ?
the sample code looks strange. if this is override of odgsbasevectorizedevice::update(odgsdcrect* prect), more correct to write as:
code:
...
mytry
mutex_.lock();
odgsbasevectorizedevice::update(prect);
my_odcatch
my_catchall
...what view creates your mydrawdevice? opengl view from our module, or your own view (if it is - may be something wrong in it)?
compare initialization code of your application and [singledoc] example. may be something missing in it.
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)