forked from 1b-agent/opencadstudio-upstream
feat: per-viewport layer freeze columns in Layer Manager
Add VP freeze/thaw toggle columns to the layer panel when in a paper space layout. Each viewport gets its own column (VP 1, VP 2, …) showing a freeze icon per layer. Clicking toggles frozen_layers on the Viewport entity and syncs back to the panel. - scene: viewport_list() → [(handle, label, frozen_handles)] - LayerPanel: VpCol + vp_frozen per layer, sync_with_viewports() - Message::LayerToggleVpFreeze(layer_idx, vp_col_idx) - Sync VP columns on layout switch, VPLAYER cmd, undo/redo, layer ops Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
c2f1c9078f
commit
efc259fdbe
6 files changed
+187
-43
No files matched your search
@@ -240,6 +240,37 @@ impl Scene {
|
||||
})
|
||||
}
|
||||
|
||||
/// List of user viewports in the current layout: (handle, label, frozen_layer_handles).
|
||||
pub fn viewport_list(&self) -> Vec<(acadrust::Handle, String, Vec<acadrust::Handle>)> {
|
||||
if self.current_layout == "Model" {
|
||||
return vec![];
|
||||
}
|
||||
let layout_block = self.current_layout_block_handle();
|
||||
if layout_block.is_null() {
|
||||
return vec![];
|
||||
}
|
||||
let mut result: Vec<(acadrust::Handle, String, Vec<acadrust::Handle>)> = self
|
||||
.document
|
||||
.entities()
|
||||
.filter_map(|e| {
|
||||
if let EntityType::Viewport(vp) = e {
|
||||
if vp.id > 1 && vp.common.owner_handle == layout_block {
|
||||
Some((vp.common.handle, vp.id, vp.frozen_layers.clone()))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
.into_iter()
|
||||
.map(|(h, id, frozen)| (h, format!("VP {}", id - 1), frozen))
|
||||
.collect();
|
||||
result.sort_by_key(|(_, label, _)| label.clone());
|
||||
result
|
||||
}
|
||||
|
||||
/// Count of user viewports (id > 1) in the current layout.
|
||||
pub fn viewport_count(&self) -> usize {
|
||||
if self.current_layout == "Model" {
|
||||
|
||||
Reference in new issue
Block a user