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; }
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; }
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; }