高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】problem with negative scalefactors
problem with negative scalefactors
problem with negative scalefactors
code:
oddbblocktablerecordptr oddbblocktablerecordptr = oddbdatabaseptr->getmodelspaceid().safeopenobject(oddb::kforread);
oddbobjectiteratorptr oddbobjectiteratorptr = oddbblocktablerecordptr->newiterator();
for (oddbobjectiteratorptr->start(); !oddbobjectiteratorptr->done(); oddbobjectiteratorptr->step())
{
oddbentityptr oddbentityptr(oddbobjectiteratorptr->entity());
if (oddbentityptr->iskindof(oddbblockreference::desc()))
{
double dangle = 0.0;
odgematrix3d matrix;
odgescale3d odgescale3d(2.0, -2.0, 1.0);
oddbblockreferenceptr oddbblockreferenceptr = oddbentityptr;
// change scale factors
oddbblockreferenceptr->upgradeopen();
oddbblockreferenceptr->setscalefactors(odgescale3d);
dangle = oddbblockreferenceptr->rotation(); // 0.0
// move entity
matrix.settoidentity();
matrix.settranslation(odgevector3d(2.0, 0, 0));
oddbblockreferenceptr->transformby(matrix);
dangle = oddbblockreferenceptr->rotation(); // -3.14
odgescale3d= oddbblockreferenceptr->scalefactors(); // (-2.0, 2.0,1.0
}
}i have a problem when a scale factor of a blockreference is negative, and when a transformby is call on this entity.
you can see it in my sample, angle and scale factors are change after a translation ???
why ?
regards,
froggy.
block transform is stored as a combination of origin, scale, normal and rotation. in transfromby these values combine to a matrix, multiply by transform and decompose back. decomposition algorithm does not depend on old values.
vladimir
ok, but in objectarx, the same code doesn't generate the same block transform values.
is that because you don't use the same algorithm than in autocad or is it a bug ?
resulting transform is the same, so i wouldn't call that a bug. 'incompatiility' perhaps.
vladimir
thanks wvk, i will try to do with this 'incompatibility'.
best regards,
froggy.
|