查看单个帖子
旧 2009-05-04, 06:37 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】crash when retriving data for nurbs

crash when retriving data for nurbs
crash when retriving data for nurbs
hi,
here i have attached .zip file which contains a .dxf file and the file itself is corrupt and can't open in autocad itself. with opendwg c version, we can load this file and also can retrieve all the information of the file.
but it crashes while loading the file using the opendwg c++ version. so i have further investgated the file and found that reading file works fine, but retrieving the information of the nurbs fails to get the data and getnurbsdata api crashes.
can you please have a look why it was working with c -vesion of the library and doesn't work with c++ version?
following is the piece of code to test the api:
try
{
// create a database and load the drawing into it.
oddbdatabaseptr pdb;
pdb = svcs.readfile( argv[1], false, false, oda::ksharedenyno );
if (!pdb.isnull())
{
std(cout) << "file version: " << pdb->originalfileversion() << std(endl);
int splineid = 105;
oddbhandle objhandle(splineid);
char buff1[20];
objhandle.getintoasciibuffer(buff1);
oddbobjectid entid = pdb->getoddbobjectid(objhandle);
oddbentityptr pent = entid.safeopenobject();
std(cout) << " " << pent->isa()->name() << ", " << buff1 << std(endl);
oddbsplineptr pspline = pent;
int degree = 0;
bool rational , closed, periodic;
odgepoint3darray ctrlpts;
odgedoublearray weights;
odgeknotvector knots;
double tol;
pspline->getnurbsdata(degree, rational, closed, periodic, ctrlpts, knots, weights, tol);
}
}
catch (oderror& e)
{
std(cout) << "dwgdirect error: " << svcs.geterrordescription(e.code()).c_str()
<< std(endl) << std(endl);
}
catch (...)
{
std(cout) << "unknown error." << std(endl) << std(endl);
return 0;
}
i used the reading test example. so if you have any issue, please paste the above code in main of the reading file example.
thanks,
sujoy
attached files
as you noticed the file is invalid and can't be loaded/recovered by autocad.
among other issues the file has version r12 and spline entities inside it.
some spline entities have no control/fit points at all. this causes dd to throw an exception "degenerate geometry".
dd's recoverfile() will load and repair the file.
sergey slezkin
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)