示例#1
0
ZSwcTree* ZSwcGenerator::createSurfaceSwc(
    const ZObject3dScan &obj, int sparseLevel)
{
  size_t volume = obj.getBoundBox().getVolume();

  int intv = 0;
  if (volume > MAX_INT32) {
    intv = iround(Cube_Root((double) volume / MAX_INT32));
  }

  ZStack *stack = NULL;
  std::cout << "Creating object mask ..." << "ds: " << intv <<  std::endl;
  if (intv > 0) {
    ZObject3dScan obj2 = obj;
    obj2.downsampleMax(intv, intv, intv);
    stack = obj2.toStackObject();
  } else {
    stack = obj.toStackObject();
  }

  ZSwcTree *tree = NULL;
  if (stack != NULL) {
    tree = createSurfaceSwc(*stack, sparseLevel);
    tree->setColor(obj.getColor());
    tree->rescale(intv + 1, intv + 1, intv + 1);
    delete stack;
  }

  return tree;
}
示例#2
0
ZSwcTree* ZObject3dPlayer::getSwcDecoration() const
{
  const ZObject3d *obj = getCompleteData();

  ZSwcTree *tree = NULL;
  if (obj != NULL) {
    if (!obj->isEmpty()) {
      tree = ZSwcGenerator::createSwc(*obj, 1.0, 3);
      tree->setColor(obj->getColor());
    }
  }

  return tree;
}
示例#3
0
ZSwcTree* ZSwcGenerator::createSwc(
    const ZObject3d &obj, double radius, int sampleStep)
{
  if (obj.isEmpty()) {
    return NULL;
  }

  ZSwcTree *tree = new ZSwcTree();
  tree->forceVirtualRoot();
  Swc_Tree_Node *parent = tree->root();
  for (size_t i = 0; i < obj.size(); i += sampleStep) {
    Swc_Tree_Node *tn = SwcTreeNode::makePointer(
          obj.getX(i), obj.getY(i), obj.getZ(i), radius);
    SwcTreeNode::setId(tn, i + 1);
    SwcTreeNode::setFirstChild(parent, tn);
//    SwcTreeNode::setParent(tn, parent);
  }

//  tree->resortId();
  tree->setColor(obj.getColor());

  return tree;
}