高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】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
|