几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   DirectDWG (http://www.dimcax.com/hust/forumdisplay.php?f=89)
-   -   【转帖】about gettransformedcopy90 (http://www.dimcax.com/hust/showthread.php?t=14982)

yang686526 2009-05-04 03:20 PM

【转帖】about gettransformedcopy90
 
about gettransformedcopy()
about gettransformedcopy()
gettransformedcopy() may fail because not all entities can be transformed by any matrix. for example by non-uniscale matrix.
who can tell me what is non-uniscale matrix.
if gettransformedcopy() fails, should i transform entities in block by myself, or there is any other way?
for example, a line entity in block, but gettransformedcopy() can't get it.
should i do as follows?
struct point
{
double x;
double y;
};
bool transform(oddbentityptr pent, odgematrix3d mtx)
{
oddblineptr pline = pent;
point tmpstart= {(pline->startpoint()).x, (pline->startpoint()).y};
point tmpend= {(pline->endpoint()).x, (pline->endpoint()).y};
point start = {0, 0};
point end= {0, 0};
start.x = mtx(0,0)*tmpstart.x + mtx(0,1)*tmpstart.y + mtx(0,3);
start.x = mtx(1,0)*tmpstart.x + mtx(1,1)*tmpstart.y + mtx(1,3);
end.x = mtx(0,0)*tmpend.x + mtx(0,1)*tmpend.y + mtx(0,3);
end.x = mtx(0,0)*tmpend.x + mtx(0,1)*tmpend.y + mtx(0,3);
return true;
}
give me a hand will be appreciated.
please give me a hand
non-uniscale is a matrix which has different scales for x/y/z.
oddbline can be transformed by non-uniscale matrix.
but it's non always trivial to transform an entity by "any" matrix. what should be done with 3dsolid for example?
btw, odgepoint3d class has transformby(const odgematrix3d&) method.
you need not perform transformation for point "manually".
sergey slezkin


所有的时间均为北京时间。 现在的时间是 07:24 PM.