Skip to content

Add ImageMap FULL PR4 UI (zones, gizmos, gated preview) - #13

Draft
aceRage wants to merge 1 commit into
cursor/imagemap-full-pr3-gcode-3mf-706dfrom
cursor/feat-imagemap-full-pr4-ui-f9c3
Draft

Add ImageMap FULL PR4 UI (zones, gizmos, gated preview)#13
aceRage wants to merge 1 commit into
cursor/imagemap-full-pr3-gcode-3mf-706dfrom
cursor/feat-imagemap-full-pr4-ui-f9c3

Conversation

@aceRage

@aceRage aceRage commented Sep 4, 2026

Copy link
Copy Markdown
Owner

Description

Stacks #10 (PR1 libs) + #11 (PR2 hooks) + #12 (PR3 G-code/3MF) + this UI layer.

Feature-patch extract from OrcaSlicer-ImageMap @92548381056.

Ships a usable ImageMap surface on Ultra: create/edit texture-mapping zones in the sidebar, preview, and slice. Surgical Plater + gizmo merge — not a wholesale Plater replace.

C3 is best-effort: no crash; paint-depth clamp holds. Same-object paint-depth + TM is easier with this UI but is not marketing-supported.

See docs/imagemap-full-pr4.md.

How Ultra paint-depth gizmo paths were preserved

  • Live Ultra GLGizmoMmuSegmentation.cpp is unchanged except one additive “Manage Color Data” button after the existing remap UI.
  • ImageMap’s ~1.05 MiB MMU gizmo was copied as GLGizmoTextureMappingTools.cpp and renamed:
    • GLGizmoMmuSegmentationGLGizmoMmuSegmentationImageMap (compiled, not registered)
    • GLMmSegmentationGizmo3DSceneGLMmSegmentationGizmo3DSceneImageMap
  • New gizmos are appended after BrimEars so Ultra Emboss/Svg/Measure/Assembly/Simplify IDs do not shift.
  • GLGizmoPainterBase::should_render_triangle_texture_preview() defaults to false. Ultra FdmSupports / Seam / FuzzySkin / MMU paint-depth do not enter the TM preview path.
  • Default slope uniforms stay Ultra’s exact set (slope.actived, slope.volume_world_normal_matrix, slope.normal_z).
  • PaintDepth.* / paint_depth_* / test_paint_depth*.cpp are untouched.

New gizmo IDs

EType Name Notes
TrueColorPainting RGB Color Painting After BrimEars
ImageProjection Project image… After TrueColor
TextureGradientPointPicker Set linear gradient point Hidden (on_is_selectable() == false)

Ultra MmSegmentation remains Color Painting + paint-depth.

Preview gating

TriangleSelectorPatch::render_texture_preview returns immediately unless:

  1. m_texture_preview_needed, and
  2. m_model_volume != nullptr, and
  3. the volume has texture preview data or vertex-color preview or texture-mapping color facets (model_volume_has_texture_preview_data / vertex-color / TM color helpers).

MMUPaintedTexturePreview.cpp/.hpp is additive.

Surgical Plater hunks

Helpers live in TextureMappingPlaterHooks.cpp/.hpp. PartPlate.cpp is not edited.

Hunk Where
get_extruders_colors() + TM display colors after mixed-filament colors Plater.cpp
Sidebar init after mixed-filament panel init_texture_mapping_panelTextureMappingSidebarPanel.cpp
3MF import zone assign load_files after read_from_archive
OBJ+PNG zone assign read_from_file
Canonicalize before slice background_process.apply
Undo/redo def reload update_after_undo_redo
Config-change panel refresh on_config_change
Wipe-tower count from texture_mapping_zones (not prime-tower images) ArrangeJob.cpp only

Forbidden-region grep evidence (this PR4 diff)

git diff cursor/imagemap-full-pr3-gcode-3mf-706d...HEAD -- \
  src/slic3r/GUI/Plater.cpp src/slic3r/GUI/PartPlate.cpp \
  src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp \
  | rg 'phone|select_machine|load_ams_list|PartPlateList|SendJob|Stream|Remote'

No matches. PartPlate.cpp / SendJob / Stream / Remote / load_ams_list / get_select_machine_dialog / phone combo are not in this diff.

Tab / object list

  • Multimaterial Texture Mapping optgroup (outer-wall gradient strength / max / min line width) is added after the existing paint-depth Advanced block. Paint-depth UI is not hidden.
  • Object-list filament count includes texture_mapping_zones.total_filaments.
  • Filament-delete remapping skips virtual TM zone IDs.

Out of scope

  • GLTF/tinygltf import (Color Data “Export GLB” is stubbed: “GLTF/GLB export is not supported.”)
  • Calibration Electron app
  • Prime-tower image assets
  • Stream/phone feature work
  • Changing paint_depth_* / PaintDepth.*

Screenshots/Recordings/Graphs

Cloud cannot run the wx GUI. No screenshots from this environment.

Tests

  • test_paint_depth*.cpp untouched (git diff empty).
  • Cloud cannot build libslic3r_tests or run GUI smoke. Maintainers: [paintdepth],[texturemapping].

U1–U4 manual checks (REAPER)

Cloud cannot run GUI smoke. Please run:

  • U1: Create a TM zone in the sidebar, assign filaments A/B, slice. No crash. Wipe-tower count uses texture_mapping_zones, not prime-tower images.
  • U2: Import OBJ+PNG and/or a 3MF with texture data → zone assigned; texture_mapping_definitions / global settings persist after save/reopen.
  • U3: Ultra color paint (MMU / paint-depth) still works. paint_depth_* settings remain visible. TrueColor + Image Projection gizmos open from the toolbar.
  • U4: Same object with paint-depth + TM: no crash; paint-depth clamp still bounds painted claims; texture preview only appears when the volume has texture preview data.
Open in Web Open in Cursor 

Surgical Plater/hooks merge onto Ultra. New gizmo IDs after BrimEars.
Keep Ultra paint-depth MMU paths; preview gated on texture data.

Co-authored-by: aceRage <aceRage@users.noreply.github.com>
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

Documentation validation failed

🔗 Link Validation Errors

📄 doc/developer-reference\Built-in-placeholders-variables.md:

  • Line 93: home#process-settings - Fragment does not exist
  • Line 93: home#material-settings - Fragment does not exist

📄 doc/developer-reference\How-to-wiki.md:

  • Line 44: home#material-settings - Fragment does not exist
  • Line 45: home#process-settings - Fragment does not exist
  • Line 46: home#prepare - Fragment does not exist
  • Line 47: home#calibrations - Fragment does not exist
  • Line 50: home#process-settings - Fragment does not exist
  • Line 50: home#support-settings - Fragment does not exist
  • Line 50: home#others-settings - Fragment does not exist

📄 doc/Home.md:

  • Line 14: Precise-wall.md - File does not exist
  • Line 17: extrusion-rate-smoothing.md - File does not exist
  • Line 33: adaptive-pressure-advance.md - File does not exist

📄 doc/Tab.cpp:

  • Line 2411: fill-patterns - File does not exist
  • Line 2412: fill-patterns - File does not exist
  • Line 2415: fill-patterns - File does not exist
  • Line 2606: multimaterial_settings_prime_tower#brim-chamfer - Fragment does not exist
  • Line 2607: multimaterial_settings_prime_tower#brim-chamfer-max-width - Fragment does not exist
  • Line 2619: multimaterial_settings_prime_tower#wall-gap - Fragment does not exist
  • Line 2634: multimaterial_settings_ooze_prevention#delta-temperature - Fragment does not exist
  • Line 2646: multimaterial_settings_advanced#paint-depth-mode - Fragment does not exist
  • Line 2647: multimaterial_settings_advanced#paint-depth-walls - Fragment does not exist
  • Line 2648: multimaterial_settings_advanced#paint-depth-distance - Fragment does not exist
  • Line 2652: multimaterial_settings_advanced#paint-sparse-infill - Fragment does not exist
  • Line 2656: multimaterial_settings_advanced#paint-depth-solid-interfaces - Fragment does not exist

🖼️ Image Validation Errors

📄 doc/developer-reference\How-to-create-profiles.md:

  • Line 142: [Markdown] Alt text "Help menu" ≠ filename "go-to-configuration-folder"
  • Line 144: [Markdown] Alt text "Delete system folder" ≠ filename "profile-delete-system-folder"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants