std::vector<ZEllipsoid> ZSwcRangeAnalyzer::computeLayerRange(const ZSwcTree &tree) { std::vector<ZEllipsoid> range; ZCuboid treeBound = tree.boundBox(); double zStart = treeBound.firstCorner().z(); double zEnd = treeBound.lastCorner().z(); ZSwcNodeZRangeSelector selector; for (double z = zStart; z <= zEnd; z += m_zStep) { selector.setZRange(z - m_zMargin, z + m_zMargin); std::vector<Swc_Tree_Node*> nodeSet = selector.selectFrom(tree); if (!nodeSet.empty()) { ZCuboid bound = SwcTreeNode::boundBox(nodeSet.begin(), nodeSet.end()); ZEllipsoid ellipsoid; ellipsoid.setCenter(bound.center()); double rxy = sqrt(bound.width() * bound.width() + bound.height() * bound.height()) / 2.0; ellipsoid.setSize(rxy, rxy, bound.depth() / 2.0); range.push_back(ellipsoid); } } return range; }
std::vector<ZPoint> ZSwcRangeAnalyzer::computerLayerCentroid(const ZSwcTree &tree) { std::vector<ZPoint> centroidArray; ZCuboid treeBound = tree.boundBox(); double zStart = treeBound.firstCorner().z(); double zEnd = treeBound.lastCorner().z(); ZSwcNodeZRangeSelector selector; for (double z = zStart; z <= zEnd; z += m_zStep) { selector.setZRange(z - m_zMargin, z + m_zMargin); std::vector<Swc_Tree_Node*> nodeSet = selector.selectFrom(tree); if (!nodeSet.empty()) { centroidArray.push_back( SwcTreeNode::centroid(nodeSet.begin(), nodeSet.end())); } } return centroidArray; }