forked from 1b-agent/opencadstudio-upstream
feat: replace paper-space shader with 2D Iced canvas widget
Paper space is now rendered as a 2D vector canvas (iced::widget::canvas) instead of a 3D shader widget. This allows direct interaction with paper-space entities (title blocks, viewport borders, annotations) without needing to enter MSPACE first. Changes: - src/scene/paper_canvas.rs: new PaperCanvas<'a> canvas::Program that renders paper wires (with linetype dashes), solid/gradient hatch fills, and wipeout backgrounds using the paper camera's orthographic transform. - Scene: three new public helpers (paper_canvas_wires, paper_canvas_hatches, paper_canvas_wipeouts) feed the canvas with the same data the old shader used, including inactive viewport projections and interim/preview wires. - view.rs: paper_canvas_view() now wraps PaperCanvas instead of shader(ViewportPane::paper_sheet(…)). The PaperViewportPane 3D shader overlay for the active MSPACE viewport is unchanged. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
1 parent
1c0520e4e4
commit
459b525ffe
3 files changed
+224
-2
No files matched your search
+6
-2
@@ -4,9 +4,10 @@ use super::history::history_dropdown_labels;
|
||||
use super::helpers::grid_plane_from_camera;
|
||||
use crate::scene::{VIEWCUBE_DRAW_PX, VIEWCUBE_PAD};
|
||||
use crate::scene::grip::grips_to_screen;
|
||||
use crate::scene::paper_canvas::PaperCanvas;
|
||||
use crate::scene::viewport_pane::{PaperViewportPane, ViewportPane};
|
||||
use crate::ui::overlay;
|
||||
use iced::widget::{button, column, container, mouse_area, row, shader, stack, text, Row, Space};
|
||||
use iced::widget::{button, canvas, column, container, mouse_area, row, shader, stack, text, Row, Space};
|
||||
use iced::window;
|
||||
use iced::{keyboard, Background, Border, Color, Element, Fill, Subscription, Task, Theme};
|
||||
|
||||
@@ -470,7 +471,10 @@ impl H7CAD {
|
||||
fn paper_canvas_view<'a>(tab: &'a super::document::DocumentTab) -> Element<'a, Message> {
|
||||
let scene = &tab.scene;
|
||||
|
||||
let paper_sheet = shader(ViewportPane::paper_sheet(scene))
|
||||
// 2-D canvas for the paper sheet — paper entities, viewport borders, and
|
||||
// inactive viewport projections are rendered as vector paths. This lets
|
||||
// users select/edit paper-space entities directly without entering MSPACE.
|
||||
let paper_sheet = canvas(PaperCanvas::new(scene))
|
||||
.width(Fill)
|
||||
.height(Fill);
|
||||
|
||||
|
||||
Reference in new issue
Block a user