Add custom segmentation classes#70
Merged
harleensachdev merged 9 commits intoJul 14, 2026
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this adds
Builds on #57 (mask editing). Lets a user create a brand-new annotation class at runtime (name + colour), paint it with the brush, see it in the organ list / hover-identify / 3D view, and download or save it alongside the edited mask.
How it works
createNewAnnotationClass(CornerstoneNifti2.tsx) picks the next free segment index, registers its colour in Cornerstone's LUT, and remembers its name for the session.extractSegmentSurfaceruns marching cubes (vtk.js) client-side on the live labelmap, debounced so it doesn't rebuild on every brush stroke.labels.jsonsidecar (name + colour per custom index) whenever custom classes exist. The download path zips the mask + sidecar together so the metadata isn't lost, and the save-to-server path only sends the sidecar when there's actually something in it.Testing done
labels.jsoncontains the right name/colour pairs.labels.jsonis sent/created when no custom classes exist.npm run buildpasses with no TypeScript errors.