138 |
class BoxPrimitiveTransform { }; |
class BoxPrimitiveTransform { }; |
139 |
|
|
140 |
|
|
141 |
|
/** A tag for a primitive transform that can print out |
142 |
|
* stuff. |
143 |
|
* Implies |
144 |
|
* <pre> |
145 |
|
void dump(std::ostream &out) const { } |
146 |
|
* </pre> |
147 |
|
*/ |
148 |
|
class DumpingPrimitiveTransform { }; |
149 |
|
|
150 |
|
template<class Primitive> class PrimitiveHierarchicalTransform ; |
151 |
|
|
152 |
/** An inverse hierarchical transformation. |
/** An inverse hierarchical transformation. |
153 |
*/ |
*/ |
154 |
template<class Primitive> class InverseHierarchicalTransform : |
template<class Primitive, class OrigPrimitive> class InverseHierarchicalTransform : |
155 |
public Transform |
public Transform |
156 |
{ |
{ |
157 |
const Transform *super; |
const Transform *super; |
199 |
return 0; |
return 0; |
200 |
} |
} |
201 |
|
|
202 |
|
void dumpParams(const DumpingPrimitiveTransform *__, std::ostream &out) const { |
203 |
|
t.dump(out); |
204 |
|
} |
205 |
|
void dumpParams(const void *__, std::ostream &out) const { |
206 |
|
} |
207 |
|
|
208 |
public: |
public: |
209 |
Primitive t; |
Primitive t; |
210 |
|
|
249 |
} |
} |
250 |
|
|
251 |
virtual void dump(std::ostream &out) const { |
virtual void dump(std::ostream &out) const { |
252 |
|
out << "[inversetrans "<< |
253 |
|
PrimitiveHierarchicalTransform<OrigPrimitive>::name |
254 |
|
<< " "; |
255 |
|
super->dump(out); |
256 |
|
dumpParams(&t, out); |
257 |
|
out <<"]"; |
258 |
} |
} |
259 |
|
|
260 |
virtual Pt getSqSize() const { |
virtual Pt getSqSize() const { |
283 |
template<class Primitive> class PrimitiveHierarchicalTransform : |
template<class Primitive> class PrimitiveHierarchicalTransform : |
284 |
public HierarchicalTransform |
public HierarchicalTransform |
285 |
{ |
{ |
286 |
|
|
287 |
const Transform *super; |
const Transform *super; |
288 |
Transform *inverse; |
Transform *inverse; |
289 |
|
|
387 |
float *p) { |
float *p) { |
388 |
t.setParams(p); |
t.setParams(p); |
389 |
} |
} |
390 |
|
|
391 |
|
void dumpParams(const DumpingPrimitiveTransform *__, std::ostream &out) const { |
392 |
|
t.dump(out); |
393 |
|
} |
394 |
|
void dumpParams(const void *__, std::ostream &out) const { |
395 |
|
} |
396 |
public: |
public: |
397 |
|
static const char *name; |
398 |
|
|
399 |
PrimitiveHierarchicalTransform() { |
PrimitiveHierarchicalTransform() { |
400 |
super = 0; |
super = 0; |
449 |
|
|
450 |
virtual const Transform &getInverse() const { |
virtual const Transform &getInverse() const { |
451 |
if(!this->inverse) { |
if(!this->inverse) { |
452 |
InverseHierarchicalTransform<typename Primitive::InverseType> *inv |
InverseHierarchicalTransform< |
453 |
= new InverseHierarchicalTransform<typename Primitive::InverseType>( |
typename Primitive::InverseType, |
454 |
|
Primitive> *inv |
455 |
|
= new InverseHierarchicalTransform< |
456 |
|
typename Primitive::InverseType, |
457 |
|
Primitive >( |
458 |
&(super->getInverse()), this); |
&(super->getInverse()), this); |
459 |
t.inverse(inv->t); |
t.inverse(inv->t); |
460 |
((PrimitiveHierarchicalTransform<Primitive> *)this) |
((PrimitiveHierarchicalTransform<Primitive> *)this) |
464 |
} |
} |
465 |
|
|
466 |
virtual void dump(std::ostream &out) const { |
virtual void dump(std::ostream &out) const { |
467 |
|
out << "[trans "<<name<< " "; |
468 |
|
super->dump(out); |
469 |
|
dumpParams(&t, out); |
470 |
|
out <<"]"; |
471 |
} |
} |
472 |
|
|
473 |
virtual Pt getSqSize() const { |
virtual Pt getSqSize() const { |