forked from 1b-agent/opencadstudio-upstream
Merge pull request #1064 from UserDevtec/main
This commit is contained in:
commit
08cd0041a5
3 files changed
+31
-13
No files matched your search
@@ -2771,7 +2771,7 @@ annotate =
|
|||||||
.mleader = MLeader
|
.mleader = MLeader
|
||||||
.mtext-specify-insertion-point = MTEXT Plaatsingspunt specificeren:
|
.mtext-specify-insertion-point = MTEXT Plaatsingspunt specificeren:
|
||||||
.markup = Markering
|
.markup = Markering
|
||||||
.multileader = Multiverwijslijn
|
.multileader = Multiverwijs Lijn
|
||||||
.multileader-draw-order = Tekenvolgorde multiverwijslijn:
|
.multileader-draw-order = Tekenvolgorde multiverwijslijn:
|
||||||
.multiline-text =
|
.multiline-text =
|
||||||
Multiline
|
Multiline
|
||||||
@@ -3142,7 +3142,7 @@ model =
|
|||||||
.revolve-entity = Rotatieobject
|
.revolve-entity = Rotatieobject
|
||||||
.revolve-flags = Vlaggen omdraaien
|
.revolve-flags = Vlaggen omdraaien
|
||||||
.spherical = Sferisch
|
.spherical = Sferisch
|
||||||
.subtract = Aftrekken
|
.subtract = Verschil
|
||||||
.surface-construction = Oppervlaktebouw
|
.surface-construction = Oppervlaktebouw
|
||||||
.sweep-path = Vegen / Pad
|
.sweep-path = Vegen / Pad
|
||||||
.sweep-entity = Sweepobject
|
.sweep-entity = Sweepobject
|
||||||
@@ -3154,7 +3154,7 @@ model =
|
|||||||
.u-vector-1 = U-vector 1
|
.u-vector-1 = U-vector 1
|
||||||
.u-vector-2 = U-vector 2
|
.u-vector-2 = U-vector 2
|
||||||
.uid = UID
|
.uid = UID
|
||||||
.union = Unie
|
.union = Samenvoegen
|
||||||
.v-isolines = V-isolijnen
|
.v-isolines = V-isolijnen
|
||||||
.v-vector-1 = Vector 1
|
.v-vector-1 = Vector 1
|
||||||
.v-vector-2 = Vector 2
|
.v-vector-2 = Vector 2
|
||||||
@@ -3879,9 +3879,9 @@ properties =
|
|||||||
.mode = Modus
|
.mode = Modus
|
||||||
.monochrome = Monochroom
|
.monochrome = Monochroom
|
||||||
.more-colors = Meer kleuren...
|
.more-colors = Meer kleuren...
|
||||||
.multileader = Multiverwijslijn
|
.multileader = Multiverwijs Lijn
|
||||||
.multiline = Multiline
|
.multiline = Multilijn Tekst
|
||||||
.multileader-style = Multiverwijslijnstijl
|
.multileader-style = Multiverwijs Lijnstijl
|
||||||
.multiple-lines = Meerdere regels
|
.multiple-lines = Meerdere regels
|
||||||
.n-closed = N gesloten
|
.n-closed = N gesloten
|
||||||
.n-density = N-dichtheid
|
.n-density = N-dichtheid
|
||||||
|
|||||||
+22
-4
@@ -175,8 +175,7 @@ pub fn export_pdf(
|
|||||||
plot_style,
|
plot_style,
|
||||||
options,
|
options,
|
||||||
);
|
);
|
||||||
let mut file = std::fs::File::create(path).map_err(|e| e.to_string())?;
|
write_pdf_atomically(path, &bytes)
|
||||||
file.write_all(&bytes).map_err(|e| e.to_string())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Export several independently sized pages into one PDF file.
|
/// Export several independently sized pages into one PDF file.
|
||||||
@@ -190,8 +189,27 @@ pub fn export_pdf_pages(
|
|||||||
return Err("No pages were selected.".into());
|
return Err("No pages were selected.".into());
|
||||||
}
|
}
|
||||||
let bytes = build_pdf_pages(pages, plot_style);
|
let bytes = build_pdf_pages(pages, plot_style);
|
||||||
let mut file = std::fs::File::create(path).map_err(|e| e.to_string())?;
|
write_pdf_atomically(path, &bytes)
|
||||||
file.write_all(&bytes).map_err(|e| e.to_string())
|
}
|
||||||
|
|
||||||
|
/// Atomically write PDF bytes to a file. Writes to a temporary file first,
|
||||||
|
/// then renames it to the target path to avoid crashes when overwriting
|
||||||
|
/// a file that is locked by another process (e.g., PDF reader).
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
fn write_pdf_atomically(path: &Path, bytes: &[u8]) -> Result<(), String> {
|
||||||
|
let dir = path.parent().unwrap_or_else(|| std::path::Path::new("."));
|
||||||
|
let file_name = path.file_name()
|
||||||
|
.and_then(|n| n.to_str())
|
||||||
|
.ok_or_else(|| "Invalid file path".to_string())?;
|
||||||
|
let temp_path = dir.join(format!(".{}.tmp", file_name));
|
||||||
|
|
||||||
|
let mut file = std::fs::File::create(&temp_path)
|
||||||
|
.map_err(|e| format!("Failed to create temporary PDF file: {}", e))?;
|
||||||
|
file.write_all(bytes)
|
||||||
|
.map_err(|e| format!("Failed to write PDF data: {}", e))?;
|
||||||
|
|
||||||
|
std::fs::rename(&temp_path, path)
|
||||||
|
.map_err(|e| format!("Failed to write PDF file: {} (the file may be open in another application)", e))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Show a parented PDF save-file dialog and return the chosen path.
|
/// Show a parented PDF save-file dialog and return the chosen path.
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ fn measure_large_width(renderer: &iced::Renderer, label: &str) -> f32 {
|
|||||||
renderer,
|
renderer,
|
||||||
label,
|
label,
|
||||||
width,
|
width,
|
||||||
advanced_text::Wrapping::WordOrGlyph,
|
advanced_text::Wrapping::Word,
|
||||||
)
|
)
|
||||||
.height
|
.height
|
||||||
<= max_label_height
|
<= max_label_height
|
||||||
@@ -685,7 +685,7 @@ pub(super) fn render_large_dropdown<'a>(
|
|||||||
.size(10)
|
.size(10)
|
||||||
.width(Fill)
|
.width(Fill)
|
||||||
.align_x(iced::Center)
|
.align_x(iced::Center)
|
||||||
.wrapping(advanced_text::Wrapping::WordOrGlyph),
|
.wrapping(advanced_text::Wrapping::Word),
|
||||||
]
|
]
|
||||||
.align_x(iced::Center)
|
.align_x(iced::Center)
|
||||||
.spacing(0)
|
.spacing(0)
|
||||||
@@ -818,7 +818,7 @@ pub(super) fn render_large<'a>(
|
|||||||
.size(10)
|
.size(10)
|
||||||
.width(Fill)
|
.width(Fill)
|
||||||
.align_x(iced::Center)
|
.align_x(iced::Center)
|
||||||
.wrapping(advanced_text::Wrapping::WordOrGlyph),
|
.wrapping(advanced_text::Wrapping::Word),
|
||||||
]
|
]
|
||||||
.align_x(iced::Center)
|
.align_x(iced::Center)
|
||||||
.spacing(0)
|
.spacing(0)
|
||||||
|
|||||||
Reference in new issue
Block a user