Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}