-class BrushForEachFace
-{
- const BrushInstanceVisitor& m_visitor;
-public:
- BrushForEachFace(const BrushInstanceVisitor& visitor) : m_visitor(visitor)
- {
- }
- void operator()(BrushInstance& brush) const
- {
- brush.forEachFaceInstance(m_visitor);
- }
-};
-
-template<class Visitor>
-class FaceVisitAll : public BrushInstanceVisitor
-{
- const Visitor& m_visitor;
-public:
- FaceVisitAll(const Visitor& visitor)
- : m_visitor(visitor)
- {
- }
- void visit(FaceInstance& face) const
- {
- m_visitor.visit(face.getFace());
- }
-};
-
-template<class Visitor>
-class FaceInstanceVisitAll : public BrushInstanceVisitor
-{
- const Visitor& m_visitor;
-public:
- FaceInstanceVisitAll(const Visitor& visitor)
- : m_visitor(visitor)
- {
- }
- void visit(FaceInstance& face) const
- {
- m_visitor.visit(face);
- }
-};
-
-template<class Visitor>
-class FaceVisitSelected : public BrushInstanceVisitor
-{
- const Visitor& m_visitor;
-public:
- FaceVisitSelected(const Visitor& visitor)
- : m_visitor(visitor)
- {
- }
- void visit(FaceInstance& face) const
- {
- if(face.isSelected(SelectionSystem::eFace))
- {
- m_visitor.visit(face.getFace());
- }
- }
-};
-
-template<typename Functor>
-inline void Scene_forEachBrush(scene::Graph& graph, const Functor& functor)
-{
- graph.traverse(InstanceWalker< InstanceApply<BrushInstance, Functor> >(functor));
-}
-
-template<typename Type, typename Functor>
-class InstanceIfVisible : public Functor
-{
-public:
- InstanceIfVisible(const Functor& functor) : Functor(functor)
- {
- }
- void operator()(scene::Instance& instance)
- {
- if(instance.path().top().get().visible())
- {
- Functor::operator()(instance);
- }
- }
-};
-
-template<typename Functor>
-class BrushVisibleWalker : public scene::Graph::Walker
-{
- const Functor& m_functor;
-public:
- BrushVisibleWalker(const Functor& functor) : m_functor(functor)
- {
- }
- bool pre(const scene::Path& path, scene::Instance& instance) const
- {
- if(path.top().get().visible())
- {
- BrushInstance* brush = Instance_getBrush(instance);
- if(brush != 0)
- {
- m_functor(*brush);
- }
- }
- return true;
- }
-};
-
-template<typename Functor>
-inline void Scene_forEachVisibleBrush(scene::Graph& graph, const Functor& functor)
-{
- graph.traverse(BrushVisibleWalker<Functor>(functor));
-}
-
-template<typename Visitor>
-inline void Scene_ForEachBrush_ForEachFace(scene::Graph& graph, const Visitor& visitor)
-{
- Scene_forEachBrush(graph, BrushForEachFace(FaceVisitAll<Visitor>(visitor)));
-}
-
-template<typename Visitor>
-inline void Scene_ForEachSelectedBrush_ForEachFace(scene::Graph& graph, const Visitor& visitor)
-{
- Scene_forEachSelectedBrush(BrushForEachFace(FaceVisitAll<Visitor>(visitor)));
-}
-
-template<typename Visitor>
-inline void Scene_ForEachSelectedBrush_ForEachFaceInstance(scene::Graph& graph, const Visitor& visitor)
-{
- Scene_forEachSelectedBrush(BrushForEachFace(FaceInstanceVisitAll<Visitor>(visitor)));
-}
-
-template<typename Visitor>
-class FaceVisitorWrapper
-{
- Visitor& m_visitor;
-public:
- FaceVisitorWrapper(Visitor& visitor) : m_visitor(visitor)
- {
- }
-
- void operator()(FaceInstance& faceInstance)
- {
- m_visitor.visit(faceInstance.getFace());
- }
-};
-
-template<typename Visitor>
-inline void Scene_ForEachSelectedBrushFace(scene::Graph& graph, Visitor& faceVisitor)
-{
- g_SelectedFaceInstances.foreach(FaceVisitorWrapper<Visitor>(faceVisitor));
-}
-
-
-
-class FaceSetTexdefVisitor