Mark2D#
Interactive point picker for 2D images. Click to select atom positions, features, or lattice vectors.
Usage#
import numpy as np
from quantem.widget import Mark2D
image = np.random.rand(256, 256)
w = Mark2D(image, max_points=10)
w # display widget, click to pick points
# Access selected points
print(w.selected_points)
Features#
Point picking — Click to place markers, click again to remove
Gallery mode — Pick points on multiple images independently
Marker customization — Shapes: circle, triangle, square, diamond, star
Undo/redo — Undo and redo point selections
Max points — Configurable maximum number of points per image
ROI center guides — Active ROI shows dotted horizontal/vertical center lines
Tool locking — Disable selected tools for shared/read-only workflows
Tool hiding — Hide selected controls completely with
hide_*flags
Methods#
w = Mark2D(image)
w.set_image(new_image)
w.set_image([img1, img2], labels=["A", "B"])
# Disable selected tools for shared notebooks
w = Mark2D(
image,
disable_points=True,
disable_roi=True,
disable_display=True,
)
# Fully lock everything
w_read_only = Mark2D(image, disable_all=True)
# Hide selected controls completely (also locks interaction)
w_hidden = Mark2D(
image,
hide_display=True,
hide_export=True,
)
# ROI geometry helpers (defaults to most recently added ROI)
w.add_roi(128, 128, shape="circle", radius=20)
center = w.roi_center() # (row, col)
radius = w.roi_radius() # int for circle/square, None for rectangle
size = w.roi_size() # (width, height)
w.clear_rois()
# Line profile
w.set_profile((10, 10), (200, 200))
w.profile_values # Float32Array of intensity along line
w.profile_distance # calibrated length
w.clear_profile()
# Point data access
w.points_as_array() # NumPy array of (row, col)
w.points_as_dict() # list of dicts
w.clear_points()
w.points_enabled = False # disable point picking
# Export
w.save_image("annotated.png", include_markers=True)
# Equivalent explicit list form:
# Mark2D(image, disabled_tools=["points", "roi", "display"])
# Mark2D(image, hidden_tools=["display", "export"])
State Persistence#
w = Mark2D(image, snap_enabled=True, cmap="viridis")
w.summary() # Print human-readable state
w.state_dict() # Get all settings as a dict
w.save("state.json") # Save versioned envelope JSON file
# Restore from file or dict — points, ROIs, and settings come back
w2 = Mark2D(image, state="state.json")
Examples#
API Reference#
See quantem.widget.Mark2D for full documentation.