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; } }
ZSwcTree* ZSwcGenerator::createRangeCompareSwc( const ZFlyEmNeuronRange &range, const ZFlyEmNeuronRange &reference) { if (range.isEmpty()) { return NULL; } double minZ = range.getMinZ(); double maxZ = range.getMaxZ(); double dz = (maxZ - minZ) / 50.0; if (dz == 0.0) { //Avoid dead loop dz = 1.0; } ZSwcTree *tree = createVirtualRootSwc(); double minReferenceZ = reference.getMinZ(); double maxReferenceZ = reference.getMaxZ(); for (double z = minReferenceZ; z < minZ; z += dz) { ZSwcTree *subtree = createCircleSwc(0, 0, z, reference.getRadius(z)); subtree->setType(5); tree->merge(subtree, true); } for (double z = maxZ + dz; z <= maxReferenceZ; z += dz) { ZSwcTree *subtree = createCircleSwc(0, 0, z, reference.getRadius(z)); subtree->setType(5); tree->merge(subtree, true); } for (double z = minZ; z <= maxZ; z += dz) { double r = range.getRadius(z); ZSwcTree *subtree = createCircleSwc(0, 0, z, r); ZFlyEmNeuronRangeCompare comp; ZFlyEmNeuronRangeCompare::EMatchStatus status = comp.compare(range, reference, z); switch (status) { case ZFlyEmNeuronRangeCompare::MISSING_BRANCH: subtree->setType(2); break; case ZFlyEmNeuronRangeCompare::EXTRA_BRANCH: subtree->setType(3); break; case ZFlyEmNeuronRangeCompare::GOOD_MATCH: subtree->setType(0); break; default: subtree->setType(0); } tree->merge(subtree, true); } tree->resortId(); return tree; }
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; } }
ZSwcTree* ZIntCuboidArray::toSwc() const { ZSwcTree *tree = NULL; if (!empty()) { 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(); } return tree; }