![]() |
【转帖】oddbspatialfilterboundary
oddbspatialfilter::boundary
oddbspatialfilter::boundary i tried to read spatial filters from a dwg file. (i use dd 1.13.02.) here a drawing with two xclip blocks. it copied and was made two. oddbspatialfilterptr pfilt = oddbindexfiltermanager::getfilter( pblk, oddbspatialfilter::desc(), oddb::kforread ); odgepoint2darray points; pfilt->boundary( points ); it becomes the value with two same. points = (55, 55), (145,145) the value of the 2nd block is different. please teach me how to calculate. attached files hi, here is how to calculate boundary in wcs: oddbspatialfilterptr pfilt = oddbindexfiltermanager::getfilter( pblk, oddbspatialfilter::desc(), oddb::kforread ); odgiclipboundary def; pfilt->getdefinition(def); oduint32 i; odgematrix3d toworld = pblk->blocktransform() * def.m_xinverseblockrefxform * def.m_xtoclipspace.inverse(); odgepoint3darray boundary; if(def.m_points.size() > 2) { // polygonal border boundary.resize(def.m_points.size()+1); for(i = 0; i < def.m_points.size(); i ++) { boundary[i].x = def.m_points[i].x; boundary[i].y = def.m_points[i].y; boundary[i].z = 0.0; boundary[i].transformby(toworld); } boundary[i].x = def.m_points[0].x; boundary[i].y = def.m_points[0].y; boundary[i].z = 0.0; boundary[i].transformby(toworld); } else { // rectangular border boundary.resize(5); boundary[0].x = def.m_points[0].x; boundary[0].y = def.m_points[0].y; boundary[1].x = def.m_points[0].x; boundary[1].y = def.m_points[1].y; boundary[2].x = def.m_points[1].x; boundary[2].y = def.m_points[1].y; boundary[3].x = def.m_points[1].x; boundary[3].y = def.m_points[0].y; boundary[4].x = def.m_points[0].x; boundary[4].y = def.m_points[0].y; for(i = 0; i < 5; i ++) { boundary[i].z = 0.0; boundary[i].transformby(toworld); } } last edited by dmitry a. novikov; 16th september 2005 at 05:54 amfff">. thank you for reply. simple dwg(base.dwg) is ok. but it shifts, when this drawing(026.dwg). in for example, the case of the 1st point before transform : 12710.29, -33954.25 after transform : 1673419.98, 474983.33 both have shifted. please teach me how to calculate. attached files (85.3 kb, 8 views) hi, i forgot to take block record's origin into account. oddbspatialfilterptr pfilt = oddbindexfiltermanager::getfilter( pblk, oddbspatialfilter::desc(), oddb::kforread ); odgiclipboundary def; pfilt->getdefinition(def); oduint32 i; oddbblocktablerecordptr pblockrecord = pblk->blocktablerecord().safeopenobject(); odgematrix3d toworld = pblk->blocktransform() * odgematrix3d::translation(odgepoint3d::korigin - pblockrecord->origin()) * def.m_xinverseblockrefxform * def.m_xtoclipspace.inverse(); ... great! calculably. it succeeded in the clipping of the block. thank you very much. |
所有的时间均为北京时间。 现在的时间是 06:19 PM. |