高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】issue with 3dpolylines
issue with 3dpolylines
issue with 3dpolylines
i am reading in a dwg file and at one point i encounter 3dpolylines. i can iterate through the polylines but for some reason all vertices have (x,y,z) = (-5.xxxe-17,0,0), effectively (0,0,0). i tried explode and then capturing endpoints of individual lines to end up with the same results. am i doing something wrong?
here is the relevant part of the code:
code:
else if fff"> ( !strcmp(pent->isa()->name(), "acdb3dpolyline"fff"> )
{
oddb3dpolyline * ppoly3 = dynamic_castfff"><oddb3dpolyline*> (pent.get());
odrxobjectptrarray entities;
ppoly3->explode(entities);
int fff"> numents = entities.length();
for fff"> ( int fff"> i=0; i<numents; i++ )
{
const char fff"> *entname = entities[i]->isa()->name();
if fff"> ( !strcmp(entname, "acdbline"fff">) )
{
oddbline * pline = dynamic_castfff"><oddbline*> (entities[i].get());
#ifdeffff"> _debug
odgepoint3d start; pline->getstartpoint(start);
odgepoint3d end; pline->getendpoint(end);
#endi
plz don't ask me to post the dwg file as an attachment. it is our client's property and i cannot distribute it for ... you know why.
- jaydutt shuklafff">
last edited by jaydutt; 24th january 2006 at 10:56 amfff">.
question on explode()
is it possible for a polyline, 2dpolyline or 3dpolyline to explode into an something other than a line or another polyline of same kind?
- jaydutt shuklafff">
hi,
i would like to make a few notes about your code which i hope can help you:
1) the check if (!strcmp(pent->isa()->name(), "acdb3dpolyline") is ok, but a better style would be:
if (pent->iskindof(oddb3dpolyline::desc())).
then there is no need to get the entity string type name.
2) instead of dynamic_cast, you can use:
oddb3dpolylineptr p3dpline = pent;
the smart pointer should do the appropriate cast itself.
3) you can print the names of the exploded entities somewhere to check what their type is. in this case using isa()->name() is ok. btw i think the 3dpolyline would be exploded to lines. if all the verts are 0,0,0 and acad displays the file ok then may be the polylines are invalid?
best regards
chudomir
hi,
and could you provide us with some reduced file that contains no your client's property but a couple of such polylines ?
you also can save the file to dxf (text) and look for the polyline in it. it may happen that the file really contains 3d polyline with all vertices having coordinates you are talking about.
(you can search for acdb3dpolyline string and/or for its handle value)
sergey slezkin
yes sergey, that is the case. i ran the file through sample applications provided (odvectorizerex) and the file actually has the coords i am talking about. so nothing is wrong with the libs or my code. i just need to ignore zero-length lines.
and yes, polyline can explode in to either a series of arcs, or lines or any combination of them. that's what i have found out so far.
- jaydutt shuklafff">
|