From e87556450e6d03a0069746bcb8fc79ed3a64552b Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 26 Aug 2014 18:02:55 -0700 Subject: [PATCH] More voxel edit bits. --- interface/src/ui/MetavoxelEditor.cpp | 1 + .../metavoxels/src/MetavoxelMessages.cpp | 66 ++++++++++++++++++- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/interface/src/ui/MetavoxelEditor.cpp b/interface/src/ui/MetavoxelEditor.cpp index 55609b8e16..5702db39a2 100644 --- a/interface/src/ui/MetavoxelEditor.cpp +++ b/interface/src/ui/MetavoxelEditor.cpp @@ -219,6 +219,7 @@ void MetavoxelEditor::selectedAttributeChanged() { editor->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); _valueArea->setWidget(editor); } + updateTool(); } void MetavoxelEditor::createNewAttribute() { diff --git a/libraries/metavoxels/src/MetavoxelMessages.cpp b/libraries/metavoxels/src/MetavoxelMessages.cpp index 88a3fb9ab1..8916e98a43 100644 --- a/libraries/metavoxels/src/MetavoxelMessages.cpp +++ b/libraries/metavoxels/src/MetavoxelMessages.cpp @@ -649,7 +649,38 @@ VoxelColorBoxEdit::VoxelColorBoxEdit(const Box& region, float granularity, const color(color) { } +class VoxelColorBoxEditVisitor : public MetavoxelVisitor { +public: + + VoxelColorBoxEditVisitor(const VoxelColorBoxEdit& edit); + + virtual int visit(MetavoxelInfo& info); + +private: + + const VoxelColorBoxEdit& _edit; +}; + +VoxelColorBoxEditVisitor::VoxelColorBoxEditVisitor(const VoxelColorBoxEdit& edit) : + MetavoxelVisitor(QVector() << AttributeRegistry::getInstance()->getVoxelColorAttribute(), + QVector() << AttributeRegistry::getInstance()->getVoxelColorAttribute()), + _edit(edit) { +} + +int VoxelColorBoxEditVisitor::visit(MetavoxelInfo& info) { + if (!info.isLeaf) { + return DEFAULT_ORDER; + } + return STOP_RECURSION; +} + void VoxelColorBoxEdit::apply(MetavoxelData& data, const WeakSharedObjectHash& objects) const { + // expand to fit the entire edit + while (!data.getBounds().contains(region)) { + data.expand(); + } + VoxelColorBoxEditVisitor setVisitor(*this); + data.guide(setVisitor); } VoxelMaterialBoxEdit::VoxelMaterialBoxEdit(const Box& region, float granularity, @@ -660,5 +691,38 @@ VoxelMaterialBoxEdit::VoxelMaterialBoxEdit(const Box& region, float granularity, averageColor(averageColor) { } -void VoxelMaterialBoxEdit::apply(MetavoxelData& data, const WeakSharedObjectHash& objects) const { +class VoxelMaterialBoxEditVisitor : public MetavoxelVisitor { +public: + + VoxelMaterialBoxEditVisitor(const VoxelMaterialBoxEdit& edit); + + virtual int visit(MetavoxelInfo& info); + +private: + + const VoxelMaterialBoxEdit& _edit; +}; + +VoxelMaterialBoxEditVisitor::VoxelMaterialBoxEditVisitor(const VoxelMaterialBoxEdit& edit) : + MetavoxelVisitor(QVector() << AttributeRegistry::getInstance()->getVoxelMaterialAttribute() << + AttributeRegistry::getInstance()->getVoxelColorAttribute(), QVector() << + AttributeRegistry::getInstance()->getVoxelMaterialAttribute() << + AttributeRegistry::getInstance()->getVoxelColorAttribute()), + _edit(edit) { +} + +int VoxelMaterialBoxEditVisitor::visit(MetavoxelInfo& info) { + if (!info.isLeaf) { + return DEFAULT_ORDER; + } + return STOP_RECURSION; +} + +void VoxelMaterialBoxEdit::apply(MetavoxelData& data, const WeakSharedObjectHash& objects) const { + // expand to fit the entire edit + while (!data.getBounds().contains(region)) { + data.expand(); + } + VoxelMaterialBoxEditVisitor setVisitor(*this); + data.guide(setVisitor); }