SimilarityTransform * SimilarityTransform::accumulate(const Transform * T2) const { AffineTransform * T1aff = getAffineTransform(); AffineTransform * T2aff = dynamic_cast<const SimilarityTransform *>(T2)->getAffineTransform(); AffineTransform * aff = dynamic_cast<AffineTransform *>(T1aff->accumulate(T2aff)); SimilarityTransform * pSim = aff->getSimilarityTransform(); delete T1aff; delete T2aff; delete aff; return pSim; }
SimilarityTransform * SimilarityTransform::accumulateInverse(const Transform * T2) const { AffineTransform * T1aff = getAffineTransform(); AffineTransform * T2aff = dynamic_cast<const SimilarityTransform *>(T2)->getAffineTransform(); AffineTransform * aff = T1aff->accumulateInverse(T2aff); SimilarityTransform * pSim = aff->getSimilarityTransform(); // m->scale_ = scale_ * T2sim->scale_; // m->translation_ = translation_ + T2sim->translation_; //Do we need to scale here?? No delete T1aff; delete T2aff; delete aff; return pSim; }