forked from 1b-agent/opencadstudio-upstream
feat: node graph overlay; move to opencadcodec/opencadkernel/opencadgraph
The codec and kernel repositories and crates are renamed opencadcodec and opencadkernel. Inside OCS they are depended on under short keys, so code reads `codec::`, `kernel::` and the new `graph::` (opencadgraph, the node graph engine). File-format and protocol spellings stay as they were: the ACIS product id `acadrust`, the ACADRUST_* switches and the plugin version keys `acadrust_version` / `acadrust_source`. A button left of MCP on the command line opens a translucent node graph over the viewport, with a palette of object, input, math, logic, list, text and geometry nodes added by click or drag. An object node owns drawing entities and its rows are the Properties panel's own rows for them: the single-object page is extracted from refresh_properties as entity_property_sections, values use the control protocol's property_json, and writes go through set_property_value with a property target override, so the panel, MCP and the graph share one read/write path. A list reaching an object row makes one entity per element. Each graph action is one undo step; the canvas pans and zooms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
56c04408d6
commit
f537aff75c
430 files changed
+9925
-8540
No files matched your search
+69
-67
@@ -613,6 +613,8 @@ impl OpenCADStudio {
|
||||
self.control_screenshot(path, screenshot);
|
||||
Task::none()
|
||||
}
|
||||
Message::Graph(message) => self.on_graph(message),
|
||||
|
||||
Message::ControlToggle => {
|
||||
self.control.enabled = !self.control.enabled;
|
||||
Task::none()
|
||||
@@ -3061,24 +3063,24 @@ impl OpenCADStudio {
|
||||
}
|
||||
Message::LayerStateEditorMaskToggle(property) => {
|
||||
let flag = match property {
|
||||
super::LayerStateProperty::On => acadrust::LayerStateMask::ON,
|
||||
super::LayerStateProperty::Frozen => acadrust::LayerStateMask::FROZEN,
|
||||
super::LayerStateProperty::Locked => acadrust::LayerStateMask::LOCKED,
|
||||
super::LayerStateProperty::Plot => acadrust::LayerStateMask::PLOT,
|
||||
super::LayerStateProperty::On => codec::LayerStateMask::ON,
|
||||
super::LayerStateProperty::Frozen => codec::LayerStateMask::FROZEN,
|
||||
super::LayerStateProperty::Locked => codec::LayerStateMask::LOCKED,
|
||||
super::LayerStateProperty::Plot => codec::LayerStateMask::PLOT,
|
||||
super::LayerStateProperty::NewViewport => {
|
||||
acadrust::LayerStateMask::NEW_VIEWPORT
|
||||
codec::LayerStateMask::NEW_VIEWPORT
|
||||
}
|
||||
super::LayerStateProperty::Color => acadrust::LayerStateMask::COLOR,
|
||||
super::LayerStateProperty::LineType => acadrust::LayerStateMask::LINE_TYPE,
|
||||
super::LayerStateProperty::LineWeight => acadrust::LayerStateMask::LINE_WEIGHT,
|
||||
super::LayerStateProperty::PlotStyle => acadrust::LayerStateMask::PLOT_STYLE,
|
||||
super::LayerStateProperty::Color => codec::LayerStateMask::COLOR,
|
||||
super::LayerStateProperty::LineType => codec::LayerStateMask::LINE_TYPE,
|
||||
super::LayerStateProperty::LineWeight => codec::LayerStateMask::LINE_WEIGHT,
|
||||
super::LayerStateProperty::PlotStyle => codec::LayerStateMask::PLOT_STYLE,
|
||||
super::LayerStateProperty::Transparency => {
|
||||
acadrust::LayerStateMask::TRANSPARENCY
|
||||
codec::LayerStateMask::TRANSPARENCY
|
||||
}
|
||||
};
|
||||
if let Some(state) = self.layer_state_edit_draft.as_mut() {
|
||||
state.mask =
|
||||
acadrust::LayerStateMask::from_bits(state.mask.bits() ^ flag.bits());
|
||||
codec::LayerStateMask::from_bits(state.mask.bits() ^ flag.bits());
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
@@ -3627,7 +3629,7 @@ impl OpenCADStudio {
|
||||
for name in &targets {
|
||||
if let Some(layer) = self.tabs[i].scene.document.layers.get_mut(name) {
|
||||
layer.transparency =
|
||||
acadrust::types::Transparency::from_percent(v as f64 / 100.0);
|
||||
codec::types::Transparency::from_percent(v as f64 / 100.0);
|
||||
}
|
||||
if let Some(pl) = self.tabs[i]
|
||||
.layers
|
||||
@@ -4409,9 +4411,9 @@ impl OpenCADStudio {
|
||||
let values = if url.is_empty() {
|
||||
None
|
||||
} else {
|
||||
let mut values = vec![acadrust::xdata::XDataValue::String(url)];
|
||||
let mut values = vec![codec::xdata::XDataValue::String(url)];
|
||||
if !description.is_empty() {
|
||||
values.push(acadrust::xdata::XDataValue::String(description));
|
||||
values.push(codec::xdata::XDataValue::String(description));
|
||||
}
|
||||
Some(values)
|
||||
};
|
||||
@@ -6570,19 +6572,19 @@ impl OpenCADStudio {
|
||||
let i = self.active_tab;
|
||||
let handles = self.property_target_handles(i);
|
||||
self.apply_property_op(i, "CHPROP", &handles, |app, handle| {
|
||||
if let Some(acadrust::EntityType::MultiLeader(leader)) =
|
||||
if let Some(codec::EntityType::MultiLeader(leader)) =
|
||||
app.tabs[i].scene.document.get_entity_mut(handle)
|
||||
{
|
||||
if field == "line_weight" {
|
||||
leader.line_weight = value;
|
||||
leader.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::LEADER_LINE_WEIGHT,
|
||||
codec::entities::MultiLeaderPropertyOverrideFlags::LEADER_LINE_WEIGHT,
|
||||
);
|
||||
for root in &mut leader.context.leader_roots {
|
||||
for line in &mut root.lines {
|
||||
line.line_weight = value;
|
||||
line.override_flags.insert(
|
||||
acadrust::entities::LeaderLinePropertyOverrideFlags::LINE_WEIGHT,
|
||||
codec::entities::LeaderLinePropertyOverrideFlags::LINE_WEIGHT,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -6695,8 +6697,8 @@ impl OpenCADStudio {
|
||||
"is_annotative" | "enable_annotation_scale" | "annotative_ctx" => {
|
||||
let doc = &app.tabs[i].scene.document;
|
||||
let cur = match doc.get_entity(handle) {
|
||||
Some(acadrust::EntityType::MText(t)) => t.is_annotative,
|
||||
Some(acadrust::EntityType::MultiLeader(m)) => {
|
||||
Some(codec::EntityType::MText(t)) => t.is_annotative,
|
||||
Some(codec::EntityType::MultiLeader(m)) => {
|
||||
m.enable_annotation_scale
|
||||
}
|
||||
// TEXT (and any other context-only type): its
|
||||
@@ -6738,7 +6740,7 @@ impl OpenCADStudio {
|
||||
// only switches the panel to per-axis rows.
|
||||
"ins_uniform" => {
|
||||
let scales = match app.tabs[i].scene.document.get_entity(handle) {
|
||||
Some(acadrust::EntityType::Insert(ins)) => {
|
||||
Some(codec::EntityType::Insert(ins)) => {
|
||||
Some((ins.x_scale(), ins.y_scale(), ins.z_scale()))
|
||||
}
|
||||
_ => None,
|
||||
@@ -6750,7 +6752,7 @@ impl OpenCADStudio {
|
||||
app.props_asym_scale.insert(handle.value());
|
||||
} else {
|
||||
app.props_asym_scale.remove(&handle.value());
|
||||
if let Some(acadrust::EntityType::Insert(ins)) =
|
||||
if let Some(codec::EntityType::Insert(ins)) =
|
||||
app.tabs[i].scene.document.get_entity_mut(handle)
|
||||
{
|
||||
ins.set_y_scale(sx);
|
||||
@@ -6761,7 +6763,7 @@ impl OpenCADStudio {
|
||||
"tbl_title_suppressed" | "tbl_header_suppressed" => {
|
||||
let next = {
|
||||
let document = &app.tabs[i].scene.document;
|
||||
let Some(acadrust::EntityType::Table(table)) =
|
||||
let Some(codec::EntityType::Table(table)) =
|
||||
document.get_entity(handle)
|
||||
else {
|
||||
return;
|
||||
@@ -6770,7 +6772,7 @@ impl OpenCADStudio {
|
||||
table.table_style_handle.and_then(|style_handle| {
|
||||
document.objects.get(&style_handle).and_then(|object| {
|
||||
match object {
|
||||
acadrust::objects::ObjectType::TableStyle(
|
||||
codec::objects::ObjectType::TableStyle(
|
||||
style,
|
||||
) => Some(style),
|
||||
_ => None,
|
||||
@@ -6811,7 +6813,7 @@ impl OpenCADStudio {
|
||||
}
|
||||
}
|
||||
if field.starts_with("tbl_") {
|
||||
if let Some(acadrust::EntityType::Table(table)) =
|
||||
if let Some(codec::EntityType::Table(table)) =
|
||||
app.tabs[i].scene.document.get_entity_mut(handle)
|
||||
{
|
||||
table.block_record_handle = None;
|
||||
@@ -6828,20 +6830,20 @@ impl OpenCADStudio {
|
||||
// Navigate the active vertex or table cell.
|
||||
let n = if handles.len() == 1 {
|
||||
match self.tabs[i].scene.document.get_entity(handles[0]) {
|
||||
Some(acadrust::EntityType::LwPolyline(p)) => p.vertices.len(),
|
||||
Some(acadrust::EntityType::Polyline2D(p)) => p.vertices.len(),
|
||||
Some(acadrust::EntityType::PolygonMesh(p)) => p.vertices.len(),
|
||||
Some(acadrust::EntityType::Face3D(face)) => {
|
||||
Some(codec::EntityType::LwPolyline(p)) => p.vertices.len(),
|
||||
Some(codec::EntityType::Polyline2D(p)) => p.vertices.len(),
|
||||
Some(codec::EntityType::PolygonMesh(p)) => p.vertices.len(),
|
||||
Some(codec::EntityType::Face3D(face)) => {
|
||||
if face.is_triangle() {
|
||||
3
|
||||
} else {
|
||||
4
|
||||
}
|
||||
}
|
||||
Some(acadrust::EntityType::Polyline3D(p)) => {
|
||||
Some(codec::EntityType::Polyline3D(p)) => {
|
||||
crate::entities::polyline::polyline3d_control_vertex_count(p)
|
||||
}
|
||||
Some(acadrust::EntityType::Table(table)) => {
|
||||
Some(codec::EntityType::Table(table)) => {
|
||||
table.row_count().saturating_mul(table.column_count())
|
||||
}
|
||||
_ => 0,
|
||||
@@ -6973,13 +6975,13 @@ impl OpenCADStudio {
|
||||
if !handles.is_empty() {
|
||||
self.apply_property_op(i, "CHPROP", &handles, |app, handle| {
|
||||
match app.tabs[i].scene.document.get_entity_mut(handle) {
|
||||
Some(acadrust::EntityType::MText(m)) => {
|
||||
Some(codec::EntityType::MText(m)) => {
|
||||
m.background_color = color.clone();
|
||||
// Picking a colour turns the background on in Fill
|
||||
// mode (specific colour), preserving the frame bit.
|
||||
m.background_fill_flags = (m.background_fill_flags & !0x02) | 0x01;
|
||||
}
|
||||
Some(acadrust::EntityType::Hatch(h)) => {
|
||||
Some(codec::EntityType::Hatch(h)) => {
|
||||
crate::entities::hatch::set_background_color(h, &color);
|
||||
}
|
||||
_ => {}
|
||||
@@ -7006,10 +7008,10 @@ impl OpenCADStudio {
|
||||
let handles = self.property_target_handles(i);
|
||||
if field == "indicator_fill_color" {
|
||||
self.apply_property_op(i, "CHPROP", &handles, |app, handle| {
|
||||
if let Some(acadrust::EntityType::Extended(extended)) =
|
||||
if let Some(codec::EntityType::Extended(extended)) =
|
||||
app.tabs[i].scene.document.get_entity_mut(handle)
|
||||
{
|
||||
if let acadrust::entities::ExtendedEntityData::SectionObject(data) =
|
||||
if let codec::entities::ExtendedEntityData::SectionObject(data) =
|
||||
&mut extended.data
|
||||
{
|
||||
data.indicator_color = color;
|
||||
@@ -7033,8 +7035,8 @@ impl OpenCADStudio {
|
||||
| "dim_text_fill_color"
|
||||
) {
|
||||
let fill_mode = (field == "dim_text_fill_color").then(|| match color {
|
||||
acadrust::types::Color::None => 0,
|
||||
acadrust::types::Color::ByBlock => 1,
|
||||
codec::types::Color::None => 0,
|
||||
codec::types::Color::ByBlock => 1,
|
||||
_ => 2,
|
||||
});
|
||||
let aci = color.approximate_index();
|
||||
@@ -7044,14 +7046,14 @@ impl OpenCADStudio {
|
||||
"dim_text_fill_color" => crate::entities::dim_override::DIMTFILLCLR,
|
||||
_ => crate::entities::dim_override::DIMCLRD,
|
||||
};
|
||||
let targets: Vec<acadrust::Handle> = handles
|
||||
let targets: Vec<codec::Handle> = handles
|
||||
.iter()
|
||||
.copied()
|
||||
.filter(|&h| {
|
||||
matches!(
|
||||
self.tabs[i].scene.document.get_entity(h),
|
||||
Some(acadrust::EntityType::Leader(_))
|
||||
| Some(acadrust::EntityType::Dimension(_))
|
||||
Some(codec::EntityType::Leader(_))
|
||||
| Some(codec::EntityType::Dimension(_))
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
@@ -7062,7 +7064,7 @@ impl OpenCADStudio {
|
||||
&mut app.tabs[i].scene.document,
|
||||
handle,
|
||||
crate::entities::dim_override::DIMTFILL,
|
||||
Some(acadrust::xdata::XDataValue::Integer16(
|
||||
Some(codec::xdata::XDataValue::Integer16(
|
||||
fill_mode.unwrap_or(2),
|
||||
)),
|
||||
);
|
||||
@@ -7074,7 +7076,7 @@ impl OpenCADStudio {
|
||||
&mut app.tabs[i].scene.document,
|
||||
handle,
|
||||
code,
|
||||
Some(acadrust::xdata::XDataValue::Integer16(aci)),
|
||||
Some(codec::xdata::XDataValue::Integer16(aci)),
|
||||
);
|
||||
});
|
||||
self.tabs[i].properties.open_color_field = None;
|
||||
@@ -7086,20 +7088,20 @@ impl OpenCADStudio {
|
||||
"line_color" | "text_color" | "block_content_color" | "background_fill_color"
|
||||
) {
|
||||
self.apply_property_op(i, "CHPROP", &handles, |app, handle| {
|
||||
if let Some(acadrust::EntityType::MultiLeader(leader)) =
|
||||
if let Some(codec::EntityType::MultiLeader(leader)) =
|
||||
app.tabs[i].scene.document.get_entity_mut(handle)
|
||||
{
|
||||
match field.as_str() {
|
||||
"line_color" => {
|
||||
leader.line_color = color;
|
||||
leader.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::LINE_COLOR,
|
||||
codec::entities::MultiLeaderPropertyOverrideFlags::LINE_COLOR,
|
||||
);
|
||||
for root in &mut leader.context.leader_roots {
|
||||
for line in &mut root.lines {
|
||||
line.line_color = color;
|
||||
line.override_flags.insert(
|
||||
acadrust::entities::LeaderLinePropertyOverrideFlags::LINE_COLOR,
|
||||
codec::entities::LeaderLinePropertyOverrideFlags::LINE_COLOR,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -7108,14 +7110,14 @@ impl OpenCADStudio {
|
||||
leader.text_color = color;
|
||||
leader.context.text_color = color;
|
||||
leader.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::TEXT_COLOR,
|
||||
codec::entities::MultiLeaderPropertyOverrideFlags::TEXT_COLOR,
|
||||
);
|
||||
}
|
||||
"block_content_color" => {
|
||||
leader.block_content_color = color;
|
||||
leader.context.block_content_color = color;
|
||||
leader.property_override_flags.insert(
|
||||
acadrust::entities::MultiLeaderPropertyOverrideFlags::BLOCK_CONTENT_COLOR,
|
||||
codec::entities::MultiLeaderPropertyOverrideFlags::BLOCK_CONTENT_COLOR,
|
||||
);
|
||||
}
|
||||
"background_fill_color" => {
|
||||
@@ -7135,7 +7137,7 @@ impl OpenCADStudio {
|
||||
let cell_index = self.tabs[i].properties.prop_vertex;
|
||||
if !handles.is_empty() {
|
||||
self.apply_property_op(i, "TABLE CELL COLOR", &handles, |app, handle| {
|
||||
let Some(acadrust::EntityType::Table(table)) =
|
||||
let Some(codec::EntityType::Table(table)) =
|
||||
app.tabs[i].scene.document.get_entity_mut(handle)
|
||||
else {
|
||||
return;
|
||||
@@ -7148,7 +7150,7 @@ impl OpenCADStudio {
|
||||
cell_index / columns,
|
||||
cell_index % columns,
|
||||
) {
|
||||
use acadrust::entities::table::CellStateFlags;
|
||||
use codec::entities::table::CellStateFlags;
|
||||
if cell.state.intersects(
|
||||
CellStateFlags::FORMAT_LOCKED
|
||||
| CellStateFlags::FORMAT_READ_ONLY,
|
||||
@@ -7159,13 +7161,13 @@ impl OpenCADStudio {
|
||||
if field == "tbl_cell_content_color" {
|
||||
style.content_color = color;
|
||||
style.property_flags.insert(
|
||||
acadrust::entities::table::CellStylePropertyFlags::CONTENT_COLOR,
|
||||
codec::entities::table::CellStylePropertyFlags::CONTENT_COLOR,
|
||||
);
|
||||
} else {
|
||||
style.background_color = color;
|
||||
style.fill_enabled = true;
|
||||
style.property_flags.insert(
|
||||
acadrust::entities::table::CellStylePropertyFlags::BACKGROUND_COLOR,
|
||||
codec::entities::table::CellStylePropertyFlags::BACKGROUND_COLOR,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -7178,7 +7180,7 @@ impl OpenCADStudio {
|
||||
if !handles.is_empty() {
|
||||
let idx = if field == "gradient_color_2" { 1 } else { 0 };
|
||||
self.apply_property_op(i, "CHPROP", &handles, |app, handle| {
|
||||
if let Some(acadrust::EntityType::Hatch(h)) =
|
||||
if let Some(codec::EntityType::Hatch(h)) =
|
||||
app.tabs[i].scene.document.get_entity_mut(handle)
|
||||
{
|
||||
while h.gradient_color.colors.len() <= idx {
|
||||
@@ -7188,9 +7190,9 @@ impl OpenCADStudio {
|
||||
1.0
|
||||
};
|
||||
h.gradient_color.colors.push(
|
||||
acadrust::entities::hatch::GradientColorEntry {
|
||||
codec::entities::hatch::GradientColorEntry {
|
||||
value,
|
||||
color: acadrust::types::Color::Index(7),
|
||||
color: codec::types::Color::Index(7),
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -10053,7 +10055,7 @@ impl OpenCADStudio {
|
||||
|
||||
// ── TableStyle Dialog ─────────────────────────────────────────────
|
||||
Message::TableStyleDialogOpen => {
|
||||
use acadrust::objects::ObjectType;
|
||||
use codec::objects::ObjectType;
|
||||
let i = self.active_tab;
|
||||
self.tablestyle_selected = self.tabs[i]
|
||||
.scene
|
||||
@@ -10116,7 +10118,7 @@ impl OpenCADStudio {
|
||||
}
|
||||
|
||||
Message::TableStyleSetFlow(value) => {
|
||||
use acadrust::objects::TableFlowDirection;
|
||||
use codec::objects::TableFlowDirection;
|
||||
let i = self.active_tab;
|
||||
if let Some(s) = self.tablestyle_mut(i) {
|
||||
s.flow_direction = match value.as_str() {
|
||||
@@ -10176,7 +10178,7 @@ impl OpenCADStudio {
|
||||
border,
|
||||
value,
|
||||
} => {
|
||||
use acadrust::objects::TableBorderType;
|
||||
use codec::objects::TableBorderType;
|
||||
let i = self.active_tab;
|
||||
if let Some(s) = self.tablestyle_mut(i) {
|
||||
if let Some(bd) =
|
||||
@@ -10214,7 +10216,7 @@ impl OpenCADStudio {
|
||||
}
|
||||
|
||||
Message::TableStyleCellSetAlign { row, value } => {
|
||||
use acadrust::objects::CellAlignment;
|
||||
use codec::objects::CellAlignment;
|
||||
let i = self.active_tab;
|
||||
if let Some(s) = self.tablestyle_mut(i) {
|
||||
if let Some(c) = Self::ts_cell_of(s, row) {
|
||||
@@ -10237,7 +10239,7 @@ impl OpenCADStudio {
|
||||
Message::TableStyleCellApply(row) => self.on_table_style_cell_apply(row),
|
||||
|
||||
Message::TableStyleToggle(field) => {
|
||||
use acadrust::objects::ObjectType;
|
||||
use codec::objects::ObjectType;
|
||||
let i = self.active_tab;
|
||||
let name = self.tablestyle_selected.clone();
|
||||
for obj in self.tabs[i].scene.document.objects.values_mut() {
|
||||
@@ -10255,7 +10257,7 @@ impl OpenCADStudio {
|
||||
}
|
||||
|
||||
Message::TableStyleToggleAnnotative => {
|
||||
use acadrust::objects::ObjectType;
|
||||
use codec::objects::ObjectType;
|
||||
let i = self.active_tab;
|
||||
let name = self.tablestyle_selected.clone();
|
||||
for obj in self.tabs[i].scene.document.objects.values_mut() {
|
||||
@@ -10319,7 +10321,7 @@ impl OpenCADStudio {
|
||||
Task::none()
|
||||
}
|
||||
Message::MlStyleDialogSetCurrent => {
|
||||
use acadrust::objects::ObjectType;
|
||||
use codec::objects::ObjectType;
|
||||
let i = self.active_tab;
|
||||
let name = self.mlstyle_selected.clone();
|
||||
let exists = self.tabs[i]
|
||||
@@ -10408,7 +10410,7 @@ impl OpenCADStudio {
|
||||
if let Some(style) = self.mlstyle_mut(i) {
|
||||
style
|
||||
.elements
|
||||
.push(acadrust::objects::MLineStyleElement::default());
|
||||
.push(codec::objects::MLineStyleElement::default());
|
||||
}
|
||||
self.load_mlstyle_bufs(i);
|
||||
Task::none()
|
||||
@@ -10679,12 +10681,12 @@ impl OpenCADStudio {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn note_recent_color(&mut self, color: acadrust::types::Color) {
|
||||
pub(crate) fn note_recent_color(&mut self, color: codec::types::Color) {
|
||||
// Keep only real colours in the recent list. ByLayer / ByBlock / None
|
||||
// are logical CAD states rather than reusable colours.
|
||||
if matches!(
|
||||
&color,
|
||||
acadrust::types::Color::Index(_) | acadrust::types::Color::Rgb { .. }
|
||||
codec::types::Color::Index(_) | codec::types::Color::Rgb { .. }
|
||||
) {
|
||||
// No duplicates: selecting an existing colour moves it to the front.
|
||||
if let Some(pos) = self.recent_colors.iter().position(|c| c == &color) {
|
||||
@@ -10748,7 +10750,7 @@ impl OpenCADStudio {
|
||||
/// selected style (staged, no commit), so edits survive switching as well
|
||||
/// as Apply.
|
||||
fn stage_tablestyle_bufs(&mut self) {
|
||||
use acadrust::objects::ObjectType;
|
||||
use codec::objects::ObjectType;
|
||||
let i = self.active_tab;
|
||||
let name = self.tablestyle_selected.clone();
|
||||
let h: Option<f64> = self.ts_hmargin.trim().parse().ok();
|
||||
@@ -10839,9 +10841,9 @@ mod free_text_entry_tests {
|
||||
use super::Message;
|
||||
use crate::app::{OpenCADStudio, TextEntryMode};
|
||||
use crate::modules::annotate::table_cmd::TableCellEditCommand;
|
||||
use acadrust::entities::Table;
|
||||
use acadrust::types::Vector3;
|
||||
use acadrust::{EntityType, Handle};
|
||||
use codec::entities::Table;
|
||||
use codec::types::Vector3;
|
||||
use codec::{EntityType, Handle};
|
||||
|
||||
/// A test drawing with a 2×2 table and the cell editor active on [0,0],
|
||||
/// seeded with `cell_text`.
|
||||
|
||||
Reference in new issue
Block a user