31 #ifndef OPENVDB_MATH_TRANSFORM_HAS_BEEN_INCLUDED
32 #define OPENVDB_MATH_TRANSFORM_HAS_BEEN_INCLUDED
35 #include <openvdb/Types.h>
68 typedef boost::shared_ptr<Transform>
Ptr;
69 typedef boost::shared_ptr<const Transform>
ConstPtr;
80 static Transform::Ptr createLinearTransform(
double voxelSize = 1.0);
83 double depth,
double voxelSize = 1.0);
85 double depth,
double voxelSize = 1.0);
109 void preRotate(
double radians,
const Axis axis =
X_AXIS);
110 void preTranslate(
const Vec3d&);
111 void preScale(
const Vec3d&);
112 void preScale(
double);
115 void postRotate(
double radians,
const Axis axis =
X_AXIS);
116 void postTranslate(
const Vec3d&);
117 void postScale(
const Vec3d&);
118 void postScale(
double);
162 template<
typename MapType>
typename MapType::Ptr map();
163 template<
typename MapType>
typename MapType::ConstPtr map()
const;
164 template<
typename MapType>
typename MapType::ConstPtr constMap()
const;
168 void read(std::istream&);
170 void write(std::ostream&)
const;
175 void print(std::ostream& os = std::cout,
const std::string& indent =
"")
const;
191 template<
typename MapType>
192 inline typename MapType::Ptr
195 if (
mMap->type() == MapType::mapType()) {
196 return boost::static_pointer_cast<MapType>(
mMap);
198 return typename MapType::Ptr();
202 template<
typename MapType>
203 inline typename MapType::ConstPtr
204 Transform::map()
const
206 return boost::const_pointer_cast<
const MapType>(
207 const_cast<Transform*
>(
this)->map<MapType>());
211 template<
typename MapType>
212 inline typename MapType::ConstPtr
213 Transform::constMap()
const
215 return map<MapType>();
223 template<
typename ResolvedMapType,
typename OpType>
227 ResolvedMapType& resolvedMap = *transform.
map<ResolvedMapType>();
229 op.operator()<ResolvedMapType>(resolvedMap);
231 op.template operator()<ResolvedMapType>(resolvedMap);
236 template<
typename ResolvedMapType,
typename OpType>
240 const ResolvedMapType& resolvedMap = *transform.
map<ResolvedMapType>();
242 op.operator()<ResolvedMapType>(resolvedMap);
244 op.template operator()<ResolvedMapType>(resolvedMap);
263 template<
typename TransformType,
typename OpType>
267 using namespace openvdb;
269 const Name mapType = transform.mapType();
270 if (mapType == UniformScaleMap::mapType()) {
271 doProcessTypedMap<UniformScaleMap, OpType>(transform, op);
273 }
else if (mapType == UniformScaleTranslateMap::mapType()) {
274 doProcessTypedMap<UniformScaleTranslateMap, OpType>(transform, op);
276 }
else if (mapType == ScaleMap::mapType()) {
277 doProcessTypedMap<ScaleMap, OpType>(transform, op);
279 }
else if (mapType == ScaleTranslateMap::mapType()) {
280 doProcessTypedMap<ScaleTranslateMap, OpType>(transform, op);
282 }
else if (mapType == UnitaryMap::mapType()) {
283 doProcessTypedMap<UnitaryMap, OpType>(transform, op);
285 }
else if (mapType == AffineMap::mapType()) {
286 doProcessTypedMap<AffineMap, OpType>(transform, op);
288 }
else if (mapType == TranslationMap::mapType()) {
289 doProcessTypedMap<TranslationMap, OpType>(transform, op);
291 }
else if (mapType == NonlinearFrustumMap::mapType()) {
292 doProcessTypedMap<NonlinearFrustumMap, OpType>(transform, op);
304 #endif // OPENVDB_MATH_TRANSFORM_HAS_BEEN_INCLUDED