void FlyEm::ZSubstackRoi::exportSwc(const string &filePath) { if (!m_cuboidArray.empty()) { ZSwcTree *tree = new ZSwcTree; int index = 0; for (ZIntCuboidArray::const_iterator iter = m_cuboidArray.begin(); iter != m_cuboidArray.end(); ++iter, ++index) { ZCuboid cuboid; cuboid.set(iter->cb[0], iter->cb[1], iter->cb[2], iter->ce[0], iter->ce[1], iter->ce[2]); ZSwcTree *subtree = ZSwcTree::CreateCuboidSwc(cuboid); if (!m_idArray.empty()) { subtree->setType(m_idArray[index]); } else { subtree->setType(index); } tree->merge(subtree, true); } tree->resortId(); tree->save(filePath); delete tree; } }
Geo3d_Scalar_Field* ZNeuronTracer::extractSeedSkel(const Stack *mask) { Stack *skel = Stack_Bwthin(mask, NULL); /* alloc <dist> */ Stack *dist = Stack_Bwdist_L_U16(mask, NULL, 0); ZStackProcessor::RemoveBranchPoint(skel, 26); Stack *skel_proc = C_Stack::clone(skel); Geo3d_Scalar_Field *field1 = extractLineSeed(skel_proc, dist); C_Stack::kill(skel_proc); for (int i = 0; i <field1->size; ++i) { int x = field1->points[i][0]; int y = field1->points[i][1]; int z = field1->points[i][2]; Set_Stack_Pixel(skel, x, y, z, 0, 0); } #ifdef _DEBUG_2 C_Stack::write(GET_TEST_DATA_DIR + "/test.tif", skel); #endif Geo3d_Scalar_Field *field2 = extractLineSeed(skel, dist, 0); Geo3d_Scalar_Field *field = Geo3d_Scalar_Field_Merge(field1, field2, NULL); Kill_Geo3d_Scalar_Field(field1); Kill_Geo3d_Scalar_Field(field2); #ifdef _DEBUG_2 ZSwcTree tree; tree.forceVirtualRoot(); for (int i = 0; i <field->size; ++i) { int x = field->points[i][0]; int y = field->points[i][1]; int z = field->points[i][2]; double radius = field->values[i]; SwcTreeNode::setFirstChild( tree.root(), SwcTreeNode::makePointer(x, y, z, radius)); } tree.save(GET_TEST_DATA_DIR + "/test.swc"); #endif /* free <dist> */ C_Stack::kill(dist); C_Stack::kill(skel); return field; }
void ZIntCuboidArray::exportSwc(const string &filePath) const { if (!empty()) { ZSwcTree *tree = new ZSwcTree; int index = 0; for (ZIntCuboidArray::const_iterator iter = begin(); iter != end(); ++iter, ++index) { ZCuboid cuboid; cuboid.set(iter->cb[0], iter->cb[1], iter->cb[2], iter->ce[0], iter->ce[1], iter->ce[2]); ZSwcTree *subtree = ZSwcTree::CreateCuboidSwc(cuboid); subtree->setType(index); tree->merge(subtree, true); } tree->resortId(); tree->save(filePath); delete tree; } }