![]() |
【转帖】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. |