Skip to content

Commit ad297d8

Browse files
committed
improved Geometry::print
Signed-off-by: Ken Museth <[email protected]>
1 parent ab6e722 commit ad297d8

File tree

2 files changed

+19
-40
lines changed

2 files changed

+19
-40
lines changed

openvdb_cmd/vdb_tool/include/Geometry.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1028,7 +1028,11 @@ void Geometry::readNVDB(const std::string&)
10281028

10291029
void Geometry::print(size_t n, std::ostream& os) const
10301030
{
1031-
os << "vtx = " << mVtx.size() << ", rbg = " << mRGB.size() << ", tri = " << mTri.size() << ", quad = " << mQuad.size()<< ", bbox=" << this->bbox();
1031+
os << "vtx = " << mVtx.size();
1032+
if (auto n = mRGB.size()) os << ", rbg = " << n;
1033+
if (auto n = mTri.size()) os << ", tri = " << n;
1034+
if (auto n = mQuad.size()) os << ", quad = " << n;
1035+
os << ", bbox=" << this->bbox();
10321036
if (size_t m = std::min(n, mVtx.size())) {
10331037
os << std::endl;
10341038
for (size_t i=0; i<m; ++i) {

openvdb_cmd/vdb_tool/include/Tool.h

Lines changed: 14 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1736,87 +1736,62 @@ void Tool::soupToLevelSet()
17361736

17371737
auto myOffset = [&](float dx)->GridT::Ptr{
17381738
timer.start();
1739-
//if (mParser.verbose) mTimer.restart("offset("+std::to_string(dx)+")");
17401739
auto xform = math::Transform::createLinearTransform(dx);
17411740
auto udf = tools::meshToUnsignedDistanceField<GridT>(*xform, mesh.vtx(), mesh.tri(), mesh.quad(), width);// mesh -> UDF
17421741
auto tmp = tools::levelSetRebuild(*udf, /*iso-value=*/dx, width);// UDF -> mesh -> SDF
17431742
t_offset += timer.milliseconds();
17441743
return tmp;
17451744
};// muOffset
17461745

1747-
/*
1748-
auto myErode = [&](GridT &grid)->void{
1749-
const float dx = grid.voxelSize()[0];
1750-
//if (mParser.verbose) mTimer.restart("erode("+std::to_string(dx)+")");
1751-
const int space = 1, time = 1;
1752-
auto filter = this->createFilter(grid, space, time);
1753-
if (isSDF == false) {
1754-
filter->normalize();
1755-
isSDF = true;
1756-
}
1757-
filter->offset(dx);// erode by dx
1758-
};// myErode
1759-
1760-
auto myUnion = [&](GridT &gridA, GridT &gridB){
1761-
//if (mParser.verbose) mTimer.restart("union("+std::to_string(gridA.voxelSize()[0])+")");
1762-
//tools::csgUnion(gridA, gridB, true);// overwrites A and cannibalizes B, and prune
1763-
//return tools::sdfToSdf(gridA);// re-normalize using fast sweeping
1764-
//return tools::levelSetRebuild(gridA, 0.0f, width);// SDF -> mesh -> SDF
1765-
//const int space = 1, time = 1;
1766-
//auto filter = this->createFilter(gridA, space, time);
1767-
//filter->normalize();// fast
1768-
isSDF = false;
1769-
return tools::csgUnionCopy(gridA, gridB);
1770-
};// myUnion
1771-
*/
1772-
17731746
auto myLevelSetDeform = [&](GridT &grid, const GridT &gridB)->GridT::Ptr{
17741747
timer.start();
17751748
const float dx = grid.voxelSize()[0];
1776-
//if (mParser.verbose) mTimer.restart("erode("+std::to_string(dx)+")");
17771749
const int space = 1, time = 1;
17781750
auto filter = this->createFilter(grid, space, time);
1751+
#if 1
17791752
if (isSDF == false) {
17801753
filter->normalize();
17811754
isSDF = true;
17821755
}
17831756
filter->offset(dx);// erode by dx
1784-
isSDF = false;// the next CSG operation will mess up the SDF
17851757
auto tmp = tools::csgUnionCopy(grid, gridB);
1758+
isSDF = false;// the CSG operation messed up the SDF
1759+
#else
1760+
filter->offset(dx);// erode by dx
1761+
auto tmp = tools::csgUnionCopy(grid, gridB);
1762+
filter = this->createFilter(*tmp, space, time);
1763+
filter->normalize();
1764+
#endif
17861765
t_deform += timer.milliseconds();
17871766
return tmp;
17881767
};// myLevelSetDeform
17891768

1790-
if (mParser.verbose) mTimer.start("Soup -> SDF");
1769+
//if (mParser.verbose) mTimer.start("Soup -> SDF");
17911770

17921771
// Main algorithm
17931772
float dx = voxel * pow(2, nLOD);
17941773
auto grid = myOffset(dx);
1795-
//grid->setName("soup2ls_"+std::to_string(dx));
1796-
//mGrid.push_back(grid);
17971774
while(dx > voxel) {
17981775
dx *= 0.5f;// refinement
17991776
grid = myUpsample(*grid);
18001777
auto base = myOffset(dx);
18011778
for (int j = 0; j<nErode; ++j) grid = myLevelSetDeform(*grid, *base);
1802-
//grid->setName("soup2ls_"+std::to_string(dx));
1803-
//mGrid.push_back(grid);
18041779
}
18051780
//grid = tools::levelSetRebuild(*grid, /*iso-value=*/0.0f, width);// SDF -> mesh -> SDF
18061781
if (dx!=voxel) std::cerr << "dx = " << dx << ", expected dx = " << voxel << std::endl;
18071782
t_offset /= 1000.0;
18081783
t_deform /= 1000.0;
18091784
t_upscale /= 1000.0;
1810-
std::cerr << "\nupsample = " << t_upscale
1811-
<< "s, offset = " << t_offset
1812-
<< "s, deform = " << t_deform
1813-
<< "s, total = " << (t_offset + t_deform + t_upscale) << "s\n";
1785+
std::cerr << "upscale:\t" << t_upscale
1786+
<< "s\noffset: \t" << t_offset
1787+
<< "s\ndeform: \t" << t_deform
1788+
<< "s\ntotal: \t" << (t_offset + t_deform + t_upscale) << "s\n";
18141789

18151790
if (grid_name.empty()) grid_name = "soup2ls_" + mesh.getName();
18161791
grid->setName(grid_name);
18171792
mGrid.push_back(grid);
18181793
if (!keep) mGeom.erase(std::next(it).base());
1819-
if (mParser.verbose) mTimer.stop();
1794+
//if (mParser.verbose) mTimer.stop();
18201795
} catch (const std::exception& e) {
18211796
throw std::invalid_argument(name+": "+e.what());
18221797
}

0 commit comments

Comments
 (0)