From 8552450aa8c3b142070ecde287d40fe29dc0c2b4 Mon Sep 17 00:00:00 2001 From: Panos <25664832+mechpanos@users.noreply.github.com> Date: Thu, 3 Sep 2026 13:57:24 +0300 Subject: [PATCH 1/5] fix: chunk block-wire vertex buffers BlockWireGpu::from_wires built one unbounded vertex buffer per (source_id, mesh_edge) group. On a block-heavy drawing that reached ~505 MiB in a single create_buffer_init, which fails on a 2 GB card; wgpu then returns an invalid buffer and the unchecked get_mapped_range_mut() inside create_buffer_init panics. The instance buffer in the same function was already chunked. Convert the vertex buffer the same way, matching the solid-mesh chunking in mesh_gpu.rs (#203) and the fill chunking in face3d_gpu.rs (#358), including mesh_gpu.rs's clamp: max_buffer_size is an API validation limit, not physical VRAM, and NVIDIA reports several GB on a 2 GB card. Chunk sizes are rounded down to a multiple of 6 so a segment's quad never straddles two buffers -- the shader derives its corner from vertex_index % 6 and every draw restarts that counter at zero. Instance buffers are hoisted out so they are built once and reused across vertex chunks instead of re-uploaded per chunk. Co-Authored-By: Claude Opus 5 --- src/scene/pipeline/wire_gpu.rs | 67 +++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 18 deletions(-) diff --git a/src/scene/pipeline/wire_gpu.rs b/src/scene/pipeline/wire_gpu.rs index 351889ddb..458bfe7c4 100644 --- a/src/scene/pipeline/wire_gpu.rs +++ b/src/scene/pipeline/wire_gpu.rs @@ -740,11 +740,33 @@ impl BlockWireGpu { }; vertices.extend_from_slice(&[vertex; 6]); } - let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("block_wire.vertices"), - contents: bytemuck::cast_slice(&vertices), - usage: wgpu::BufferUsages::VERTEX, - }); + // Split vertex data into buffers small enough to allocate on + // low-VRAM devices. Same scheme as the solid-mesh chunking in + // `mesh_gpu.rs` (#203) and the fill chunking in `face3d_gpu.rs` + // (#358); the block-wire path was never converted, so a + // block-heavy drawing produced one multi-hundred-MB buffer. + // `max_buffer_size` is an API validation limit, not physical VRAM + // (NVIDIA reports several GB on a 2 GB card), so clamp it the way + // `mesh_gpu.rs` already does. + let vertex_budget = ((device.limits().max_buffer_size as usize / 10) * 9) + .min(32 * 1024 * 1024); + let vsize = std::mem::size_of::(); + // Round down to a multiple of 6: each segment expands to six + // vertices and must not straddle two chunks. + let max_verts = ((vertex_budget / vsize).max(6) / 6) * 6; + let vertex_chunks: Vec<(wgpu::Buffer, u32)> = vertices + .chunks(max_verts) + .map(|chunk| { + ( + device.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("block_wire.vertices"), + contents: bytemuck::cast_slice(chunk), + usage: wgpu::BufferUsages::VERTEX, + }), + chunk.len() as u32, + ) + }) + .collect(); let const_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("block_wire.const"), contents: bytemuck::bytes_of(&constant), @@ -791,19 +813,28 @@ impl BlockWireGpu { let max_instances = ((device.limits().max_buffer_size as usize / 10) * 9 / std::mem::size_of::()) .max(1); - for chunk in instances.chunks(max_instances) { - out.push(Self { - vertex_buffer: vertex_buffer.clone(), - instance_buffer: instance_buffer_mapped( - device, - "block_wire.instances", - chunk, - ), - vertex_count: vertices.len() as u32, - instance_count: chunk.len() as u32, - is_3d_mesh_edge: mesh_edge, - const_bind_group: const_bind_group.clone(), - }); + // Build each instance buffer once and reuse it across vertex + // chunks, rather than re-uploading it per chunk. + let instance_chunks: Vec<(wgpu::Buffer, u32)> = instances + .chunks(max_instances) + .map(|chunk| { + ( + instance_buffer_mapped(device, "block_wire.instances", chunk), + chunk.len() as u32, + ) + }) + .collect(); + for (vertex_buffer, vertex_count) in &vertex_chunks { + for (instance_buffer, instance_count) in &instance_chunks { + out.push(Self { + vertex_buffer: vertex_buffer.clone(), + instance_buffer: instance_buffer.clone(), + vertex_count: *vertex_count, + instance_count: *instance_count, + is_3d_mesh_edge: mesh_edge, + const_bind_group: const_bind_group.clone(), + }); + } } } out From 771a5b2c5c456066b22997f2af877d5c7f679951 Mon Sep 17 00:00:00 2001 From: Panos <25664832+mechpanos@users.noreply.github.com> Date: Thu, 3 Sep 2026 15:14:09 +0300 Subject: [PATCH 2/5] fix: one VRAM-aware buffer budget for every GPU upload path max_buffer_size is an API validation limit, not physical VRAM. NVIDIA reports several GB of it on a 2 GB card, so sizing a chunk from it produces buffers larger than the whole device. That is the same bug as #203 (mesh_gpu), #358 (face3d_gpu) and the block-wire vertex buffer: rediscovered three times because each upload path spelled the budget out for itself. mesh_gpu.rs was the only site that clamped the result. Move that clamp into src/scene/pipeline/gpu_budget.rs and route every allocating path through it, so a new upload path cannot reintroduce the mistake by copying one of the unclamped expressions. Five sites had no clamp at all: text_gpu (block-text instances), wire_gpu (block-wire instances), and face3d_gpu (vertices, instances, and upload_chunks). Three behaviour changes worth noting: * Silhouette chunks were capped at a private 64 MiB constant and now use the shared 32 MiB budget. * The storage-hatch chunk limit was the minimum of two device limits, both of them validation figures; it is now also capped by the budget. The `*_fits` predicates next to it are genuine "would wgpu reject this" checks and are left alone. * mesh_gpu's instanced path used the unclamped ceiling to decide whether a mesh fits in a single buffer, which would still admit a multi-GB allocation. It now uses the clamped budget, so a few more meshes take the chunked path. OCS_GPU_CHUNK_MIB overrides the cap. Raising it above the real VRAM is the cheapest way to force an allocation failure and check that the renderer degrades instead of aborting. Co-Authored-By: Claude Opus 5 --- src/scene/pipeline/face3d_gpu.rs | 12 ++--- src/scene/pipeline/gpu_budget.rs | 62 +++++++++++++++++++++++++ src/scene/pipeline/hatch_gpu/storage.rs | 6 ++- src/scene/pipeline/mesh_gpu.rs | 14 +++--- src/scene/pipeline/mod.rs | 7 +-- src/scene/pipeline/text_gpu.rs | 5 +- src/scene/pipeline/wire_gpu.rs | 13 ++---- 7 files changed, 84 insertions(+), 35 deletions(-) create mode 100644 src/scene/pipeline/gpu_budget.rs diff --git a/src/scene/pipeline/face3d_gpu.rs b/src/scene/pipeline/face3d_gpu.rs index 929d83d73..15e58d1db 100644 --- a/src/scene/pipeline/face3d_gpu.rs +++ b/src/scene/pipeline/face3d_gpu.rs @@ -376,11 +376,9 @@ fn upload_block_chunks( if vertices.is_empty() { continue; } - let budget = (device.limits().max_buffer_size as usize / 10) * 9; - let max_vertices = ((budget / std::mem::size_of::()).max(3) / 3) * 3; - let max_instances = ((device.limits().max_buffer_size as usize / 10) * 9 - / std::mem::size_of::()) - .max(1); + // Triangle lists: chunks must stay a multiple of 3. + let max_vertices = super::gpu_budget::max_elements_grouped::(device, 3); + let max_instances = super::gpu_budget::max_elements::(device); let instances: Vec = group .iter() .filter_map(|wire| { @@ -459,10 +457,8 @@ fn upload_chunks( verts: &[Face3DVertex], label: &'static str, ) -> Vec { - let budget = (device.limits().max_buffer_size as usize / 10) * 9; // 10% headroom - let vsize = std::mem::size_of::(); // Round down to a multiple of 3 so triangles never straddle chunks. - let max_verts = ((budget / vsize).max(3) / 3) * 3; + let max_verts = super::gpu_budget::max_elements_grouped::(device, 3); verts .chunks(max_verts) .map(|c| Face3DChunk { diff --git a/src/scene/pipeline/gpu_budget.rs b/src/scene/pipeline/gpu_budget.rs new file mode 100644 index 000000000..0ea3c750f --- /dev/null +++ b/src/scene/pipeline/gpu_budget.rs @@ -0,0 +1,62 @@ +//! One VRAM-aware budget for every GPU buffer this renderer allocates. +//! +//! `wgpu::Limits::max_buffer_size` is an **API validation limit**, not a +//! statement about physical memory: NVIDIA reports several GB of it on a 2 GB +//! card. Sizing a chunk from that limit therefore produces buffers larger than +//! the whole device, the allocation fails, and the frame dies — issue #203 +//! (`mesh_gpu`), #358 (`face3d_gpu`) and the block-wire path were all the same +//! bug rediscovered. +//! +//! `mesh_gpu.rs` was the only site that clamped the result. This module makes +//! that clamp the single shared rule so a new upload path cannot reintroduce +//! the mistake by copying one of the unclamped expressions. + +use iced::wgpu; + +/// Upper bound on any single buffer, regardless of what the device claims it +/// would validate. Chosen to match the clamp `mesh_gpu` has used since #203: +/// large enough that chunk overhead stays negligible, small enough that a +/// failed allocation is recoverable on a low-VRAM card. +const HARD_CAP_BYTES: usize = 32 * 1024 * 1024; + +/// 10% headroom below the device's validation limit, matching the `/ 10 * 9` +/// the individual sites used before they shared this helper. +fn device_ceiling(device: &wgpu::Device) -> usize { + (device.limits().max_buffer_size as usize / 10) * 9 +} + +/// Test/debug override, in MiB. Raising it above the real VRAM is the +/// cheapest way to force an out-of-memory path and check that the renderer +/// degrades the frame instead of aborting. +fn cap_bytes() -> usize { + static CAP: std::sync::OnceLock = std::sync::OnceLock::new(); + *CAP.get_or_init(|| { + std::env::var("OCS_GPU_CHUNK_MIB") + .ok() + .and_then(|value| value.trim().parse::().ok()) + .filter(|mib| *mib > 0) + .map(|mib| mib * 1024 * 1024) + .unwrap_or(HARD_CAP_BYTES) + }) +} + +/// Largest byte size a single buffer built by this renderer may take. +pub fn buffer_budget(device: &wgpu::Device) -> usize { + device_ceiling(device).min(cap_bytes()) +} + +/// How many `T` fit in one buffer. Never returns 0, so callers can pass the +/// result straight to `slice::chunks`, which panics on a zero chunk size. +pub fn max_elements(device: &wgpu::Device) -> usize { + (buffer_budget(device) / std::mem::size_of::().max(1)).max(1) +} + +/// `max_elements` rounded down to a whole number of `group` elements, for +/// vertex data whose primitives must not straddle a chunk boundary: 3 for a +/// triangle list, 6 for the quad expansion the wire shaders use. +/// +/// Always returns at least one whole group. +pub fn max_elements_grouped(device: &wgpu::Device, group: usize) -> usize { + let group = group.max(1); + (max_elements::(device) / group).max(1) * group +} diff --git a/src/scene/pipeline/hatch_gpu/storage.rs b/src/scene/pipeline/hatch_gpu/storage.rs index 950a98929..e9ec6c4fc 100644 --- a/src/scene/pipeline/hatch_gpu/storage.rs +++ b/src/scene/pipeline/hatch_gpu/storage.rs @@ -196,9 +196,13 @@ impl StorageHatchBatch { } let limits = device.limits(); + // Both device figures are API validation limits, not physical VRAM, so + // the shared budget caps them (`storage.rs` chunks are allocations, not + // just size checks — the `*_fits` predicates below are the checks). let chunk_limit = limits .max_buffer_size - .min(limits.max_storage_buffer_binding_size as u64); + .min(limits.max_storage_buffer_binding_size as u64) + .min(crate::scene::pipeline::gpu_budget::buffer_budget(device) as u64); let mut ranges = Vec::new(); let mut start = 0; let mut used = [0u64; 7]; diff --git a/src/scene/pipeline/mesh_gpu.rs b/src/scene/pipeline/mesh_gpu.rs index f1c55b1ea..36bfa856c 100644 --- a/src/scene/pipeline/mesh_gpu.rs +++ b/src/scene/pipeline/mesh_gpu.rs @@ -1580,10 +1580,8 @@ pub fn build_mesh_batch_filtered( // Derive the caps from the real device limit and vertex size. The previous // fixed 6 M-vertex cap assumed 40 B/vertex, but `position_low` (RTE) grew // MeshVertex to 52 B, so 6 M × 52 B = 312 MB blew past the 256 MB cap. - let hard_budget = (device.limits().max_buffer_size as usize / 10) * 9; - let budget = hard_budget.min(32 * 1024 * 1024); - let vsize = std::mem::size_of::(); - let max_verts = (budget / vsize).max(3); + let budget = super::gpu_budget::buffer_budget(device); + let max_verts = super::gpu_budget::max_elements::(device).max(3); // A triangle contributes three line segments (six standalone edge // vertices). Bound chunks by the largest buffer produced for wire meshes. let max_tris = @@ -1800,9 +1798,9 @@ pub fn build_mesh_batch_filtered( .verts .len() .saturating_mul(std::mem::size_of::()) - <= hard_budget + <= budget && part.indices.len().saturating_mul(std::mem::size_of::()) - <= hard_budget + <= budget && part .set .instance_source @@ -1812,7 +1810,7 @@ pub fn build_mesh_batch_filtered( .edge_verts .len() .saturating_mul(std::mem::size_of::()) - <= hard_budget; + <= budget; let triangle_edges_fit = !part.include_edges || !source.edge_verts.is_empty() || part @@ -1820,7 +1818,7 @@ pub fn build_mesh_batch_filtered( .len() .saturating_mul(2) .saturating_mul(std::mem::size_of::()) - <= hard_budget; + <= budget; feature_edges_fit && triangle_edges_fit }) && part diff --git a/src/scene/pipeline/mod.rs b/src/scene/pipeline/mod.rs index bf04a427e..595876a13 100644 --- a/src/scene/pipeline/mod.rs +++ b/src/scene/pipeline/mod.rs @@ -1,5 +1,6 @@ mod device_capabilities; pub mod face3d_gpu; +pub mod gpu_budget; pub mod hatch_gpu; pub mod wipeout_gpu; pub mod image_gpu; @@ -2728,11 +2729,7 @@ impl Pipeline { .normalize_or(glam::DVec3::NEG_Z); use crate::scene::pipeline::mesh_gpu::{SilhouetteInstance, SilhouetteVertex}; use wgpu::util::DeviceExt; - const SILHOUETTE_CHUNK_BYTES: u64 = 64 * 1024 * 1024; - let chunk_bytes = device - .limits() - .max_buffer_size - .min(SILHOUETTE_CHUNK_BYTES) as usize; + let chunk_bytes = gpu_budget::buffer_budget(device); let max_vertices = chunk_bytes / std::mem::size_of::() / 2 * 2; if max_vertices < 2 { self.silhouette_chunks.clear(); diff --git a/src/scene/pipeline/text_gpu.rs b/src/scene/pipeline/text_gpu.rs index 14d2b3b53..2519fbe0a 100644 --- a/src/scene/pipeline/text_gpu.rs +++ b/src/scene/pipeline/text_gpu.rs @@ -541,9 +541,8 @@ pub fn upload_block_vertex_refs( }) }) .collect(); - let max_instances = ((device.limits().max_buffer_size as usize / 10) * 9 - / std::mem::size_of::()) - .max(1); + let max_instances = + super::gpu_budget::max_elements::(device); for chunk in instances.chunks(max_instances) { let instance_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("block_text.instances"), diff --git a/src/scene/pipeline/wire_gpu.rs b/src/scene/pipeline/wire_gpu.rs index 458bfe7c4..e5db97efc 100644 --- a/src/scene/pipeline/wire_gpu.rs +++ b/src/scene/pipeline/wire_gpu.rs @@ -745,15 +745,10 @@ impl BlockWireGpu { // `mesh_gpu.rs` (#203) and the fill chunking in `face3d_gpu.rs` // (#358); the block-wire path was never converted, so a // block-heavy drawing produced one multi-hundred-MB buffer. - // `max_buffer_size` is an API validation limit, not physical VRAM - // (NVIDIA reports several GB on a 2 GB card), so clamp it the way - // `mesh_gpu.rs` already does. - let vertex_budget = ((device.limits().max_buffer_size as usize / 10) * 9) - .min(32 * 1024 * 1024); - let vsize = std::mem::size_of::(); // Round down to a multiple of 6: each segment expands to six // vertices and must not straddle two chunks. - let max_verts = ((vertex_budget / vsize).max(6) / 6) * 6; + let max_verts = + super::gpu_budget::max_elements_grouped::(device, 6); let vertex_chunks: Vec<(wgpu::Buffer, u32)> = vertices .chunks(max_verts) .map(|chunk| { @@ -810,9 +805,7 @@ impl BlockWireGpu { }) }) .collect(); - let max_instances = ((device.limits().max_buffer_size as usize / 10) * 9 - / std::mem::size_of::()) - .max(1); + let max_instances = super::gpu_budget::max_elements::(device); // Build each instance buffer once and reuse it across vertex // chunks, rather than re-uploading it per chunk. let instance_chunks: Vec<(wgpu::Buffer, u32)> = instances From d0ef752532213ddb6b41eccdd26fe56b424a7f58 Mon Sep 17 00:00:00 2001 From: Panos <25664832+mechpanos@users.noreply.github.com> Date: Thu, 3 Sep 2026 15:28:13 +0300 Subject: [PATCH 3/5] fix: an out-of-memory GPU no longer aborts the process The crash in #358 was not the out-of-memory itself. wgpu reports OOM as recoverable and the app already installs a handler that logs and keeps the session alive. What killed the process was what happened next: create_buffer_init maps the new buffer unconditionally, and mapping the invalid buffer an OOM device returns panics. That panic unwinds through iced's main-thread redraw, trips the wgpu-hal swapchain assertion in a destructor, and becomes a non-unwinding abort -- no chance to autosave. Every allocation whose size scales with the drawing now goes through src/scene/pipeline/gpu_upload.rs, which creates the buffer unmapped and fills it with Queue::write_buffer. A failed allocation then surfaces as a validation error on the write, which reaches install_gpu_error_handler and degrades the frame -- exactly what that handler's comment promised: "A bad frame must degrade, not end the session." Converted: block-wire vertices and instances, the wire const storage buffer, all three wire-arena allocators, face3d vertices and instances, block-text instances and text vertices, both hatch backends, and the silhouette buffers. mesh_gpu already allocated this way, which is why the mesh path never produced this panic; the rest now match it. No mapped_at_creation:true remains in the renderer. The create_buffer_init calls left are fixed-size or bounded-small -- uniforms, the viewcube's static geometry, per-image and per-wipeout quads -- where an allocation failure is not a realistic outcome. Two trade-offs worth stating: * write_buffer stages through a copy, which mapping at creation avoided. Chunking bounds that transient cost, and the measured block-wire upload got faster with chunking, not slower. * `queue` had to be threaded through the wire, face3d, text and hatch builders and their callers. Mechanical, but it widens the diff. This touches every upload path, so it needs a visual check against a real drawing before it goes upstream. Co-Authored-By: Claude Opus 5 --- src/scene/pipeline/face3d_gpu.rs | 45 +++++---- src/scene/pipeline/gpu_upload.rs | 116 ++++++++++++++++++++++++ src/scene/pipeline/hatch_gpu/mod.rs | 4 +- src/scene/pipeline/hatch_gpu/storage.rs | 89 ++++++++++-------- src/scene/pipeline/hatch_gpu/texture.rs | 36 +++++--- src/scene/pipeline/mod.rs | 53 +++++++---- src/scene/pipeline/text_gpu.rs | 37 +++++--- src/scene/pipeline/wire_arena.rs | 86 +++++++----------- src/scene/pipeline/wire_gpu.rs | 94 ++++++++++--------- src/scene/view/render.rs | 10 +- 10 files changed, 362 insertions(+), 208 deletions(-) create mode 100644 src/scene/pipeline/gpu_upload.rs diff --git a/src/scene/pipeline/face3d_gpu.rs b/src/scene/pipeline/face3d_gpu.rs index 15e58d1db..2d973e48e 100644 --- a/src/scene/pipeline/face3d_gpu.rs +++ b/src/scene/pipeline/face3d_gpu.rs @@ -20,7 +20,6 @@ use crate::scene::model::wire_model::WireModel; use iced::wgpu; -use iced::wgpu::util::DeviceExt; pub(crate) fn planar_solid_faces_view(wire: &WireModel, view_dir: glam::Vec3) -> bool { if !wire.fill_is_2d_solid || wire.fill_is_3d { @@ -187,6 +186,7 @@ impl Face3DGpu { /// legacy planar SOLID interior while keeping other 2-D overlays. pub fn from_wires( device: &wgpu::Device, + queue: &wgpu::Queue, face3d_wires: &[WireModel], all_wires: &[WireModel], keep_3d_mesh_fills: bool, @@ -302,6 +302,7 @@ impl Face3DGpu { let (block_chunks_3d, block_chunks_2d) = upload_block_chunks( device, + queue, all_wires, keep_3d_mesh_fills, show_2d_solid_fills, @@ -309,8 +310,8 @@ impl Face3DGpu { depth_map, ); Self { - chunks_3d: upload_chunks(device, &verts_3d, "face3d.vbuf.3d"), - chunks_2d: upload_chunks(device, &verts_2d, "face3d.vbuf.2d"), + chunks_3d: upload_chunks(device, queue, &verts_3d, "face3d.vbuf.3d"), + chunks_2d: upload_chunks(device, queue, &verts_2d, "face3d.vbuf.2d"), block_chunks_3d, block_chunks_2d, } @@ -319,6 +320,7 @@ impl Face3DGpu { fn upload_block_chunks( device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[WireModel], keep_3d_mesh_fills: bool, show_2d_solid_fills: bool, @@ -415,21 +417,25 @@ fn upload_block_chunks( .chunks(max_instances) .map(|chunk| { ( - device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("face3d.block.instances"), - contents: bytemuck::cast_slice(chunk), - usage: wgpu::BufferUsages::VERTEX, - }), + super::gpu_upload::upload_buffer( + device, + queue, + "face3d.block.instances", + chunk, + wgpu::BufferUsages::VERTEX, + ), chunk.len() as u32, ) }) .collect(); for vertex_chunk in vertices.chunks(max_vertices) { - let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("face3d.block.vertices"), - contents: bytemuck::cast_slice(vertex_chunk), - usage: wgpu::BufferUsages::VERTEX, - }); + let vertex_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "face3d.block.vertices", + vertex_chunk, + wgpu::BufferUsages::VERTEX, + ); for (instance_buffer, instance_count) in &instance_buffers { let chunk = BlockFace3DChunk { vertex_buffer: vertex_buffer.clone(), @@ -454,6 +460,7 @@ fn upload_block_chunks( /// range never truncates. fn upload_chunks( device: &wgpu::Device, + queue: &wgpu::Queue, verts: &[Face3DVertex], label: &'static str, ) -> Vec { @@ -462,11 +469,13 @@ fn upload_chunks( verts .chunks(max_verts) .map(|c| Face3DChunk { - vertex_buffer: device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some(label), - contents: bytemuck::cast_slice(c), - usage: wgpu::BufferUsages::VERTEX, - }), + vertex_buffer: super::gpu_upload::upload_buffer( + device, + queue, + label, + c, + wgpu::BufferUsages::VERTEX, + ), vertex_count: c.len() as u32, }) .collect() diff --git a/src/scene/pipeline/gpu_upload.rs b/src/scene/pipeline/gpu_upload.rs new file mode 100644 index 000000000..98ae90bcb --- /dev/null +++ b/src/scene/pipeline/gpu_upload.rs @@ -0,0 +1,116 @@ +//! Buffer creation that survives an out-of-memory device. +//! +//! `wgpu::util::DeviceExt::create_buffer_init` — and any +//! `mapped_at_creation: true` followed by `get_mapped_range_mut()` — maps the +//! new buffer unconditionally. When the allocation fails wgpu hands back an +//! *invalid* buffer, and mapping an invalid buffer panics: +//! +//! ```text +//! thread 'main' panicked at wgpu-29.0.4/src/backend/wgpu_core.rs:2253:18: +//! Error in Buffer::get_mapped_range: Validation Error +//! Caused by: Buffer with 'block_wire.vertices' label is invalid +//! ``` +//! +//! That panic unwinds through iced's main-thread redraw, trips the `wgpu-hal` +//! swapchain assertion in a destructor, and turns into a **non-unwinding +//! abort** — the process dies with the user's unsaved drawing in it. +//! +//! Writing through the queue instead never maps. A failed allocation produces +//! a validation error on the `write_buffer`, which reaches the handler +//! installed by `install_gpu_error_handler` and degrades the frame, which is +//! what that handler was written for: "A bad frame must degrade, not end the +//! session." + +use iced::wgpu; + +/// Create a buffer and fill it without ever mapping it. +/// +/// `COPY_DST` is added to `usage` because the contents arrive via +/// `Queue::write_buffer`. Callers pass the same usage flags they would have +/// given `create_buffer_init`. +/// +/// Empty `data` still produces a one-element buffer: wgpu rejects zero-sized +/// buffers, and every draw path here already guards its instance/vertex count +/// before issuing a draw, so a placeholder allocation is harmless. +pub fn upload_buffer( + device: &wgpu::Device, + queue: &wgpu::Queue, + label: &str, + data: &[T], + usage: wgpu::BufferUsages, +) -> wgpu::Buffer { + let bytes: &[u8] = bytemuck::cast_slice(data); + upload_bytes(device, queue, label, bytes, std::mem::size_of::(), usage) +} + +/// `upload_buffer` for data already flattened to bytes. `min_size` is the +/// placeholder size used when `bytes` is empty. +pub fn upload_bytes( + device: &wgpu::Device, + queue: &wgpu::Queue, + label: &str, + bytes: &[u8], + min_size: usize, + usage: wgpu::BufferUsages, +) -> wgpu::Buffer { + const ALIGN: usize = wgpu::COPY_BUFFER_ALIGNMENT as usize; + let logical = bytes.len().max(min_size).max(ALIGN); + // `write_buffer` copies whole `COPY_BUFFER_ALIGNMENT` units, so both the + // allocation and the source slice are rounded up to it. Every vertex and + // instance type here is `#[repr(C)]` over 4-byte fields, so the padding + // branch below is a safety net rather than a routine cost. + let size = logical.div_ceil(ALIGN) * ALIGN; + let buffer = device.create_buffer(&wgpu::BufferDescriptor { + label: Some(label), + size: size as u64, + usage: usage | wgpu::BufferUsages::COPY_DST, + mapped_at_creation: false, + }); + if !bytes.is_empty() { + if bytes.len().is_multiple_of(ALIGN) { + queue.write_buffer(&buffer, 0, bytes); + } else { + let mut padded = bytes.to_vec(); + padded.resize(bytes.len().div_ceil(ALIGN) * ALIGN, 0); + queue.write_buffer(&buffer, 0, &padded); + } + } + buffer +} + +/// Allocate `size` bytes and write `data` into the front of it. +/// +/// For buffers deliberately larger than their initial contents — the wire +/// arena reserves headroom so later edits patch in place instead of +/// reallocating. Same no-mapping guarantee as [`upload_buffer`]; `usage` must +/// already contain `COPY_DST` for the later patches, and it is added here +/// regardless. +pub fn alloc_with_prefix( + device: &wgpu::Device, + queue: &wgpu::Queue, + label: &str, + size: u64, + data: &[T], + usage: wgpu::BufferUsages, +) -> wgpu::Buffer { + const ALIGN: u64 = wgpu::COPY_BUFFER_ALIGNMENT; + let size = size.max(ALIGN).div_ceil(ALIGN) * ALIGN; + let buffer = device.create_buffer(&wgpu::BufferDescriptor { + label: Some(label), + size, + usage: usage | wgpu::BufferUsages::COPY_DST, + mapped_at_creation: false, + }); + let bytes: &[u8] = bytemuck::cast_slice(data); + if !bytes.is_empty() { + let unit = ALIGN as usize; + if bytes.len().is_multiple_of(unit) { + queue.write_buffer(&buffer, 0, bytes); + } else { + let mut padded = bytes.to_vec(); + padded.resize(bytes.len().div_ceil(unit) * unit, 0); + queue.write_buffer(&buffer, 0, &padded); + } + } + buffer +} diff --git a/src/scene/pipeline/hatch_gpu/mod.rs b/src/scene/pipeline/hatch_gpu/mod.rs index 1585d043e..8731bfd9c 100644 --- a/src/scene/pipeline/hatch_gpu/mod.rs +++ b/src/scene/pipeline/hatch_gpu/mod.rs @@ -167,7 +167,7 @@ impl HatchGpu { .filter(|hatch| hatch.boundary.len() >= 3) .cloned() .collect(); - *resident = StorageHatchBatch::build(device, &self.bind_group_layout, &renderable); + *resident = StorageHatchBatch::build(device, queue, &self.bind_group_layout, &renderable); } HatchBackend::Texture { resident, .. } => { let renderable: Vec = hatches @@ -198,7 +198,7 @@ impl HatchGpu { .filter(|hatch| hatch.boundary.len() >= 3) .cloned() .collect(); - *preview = StorageHatchBatch::build(device, &self.bind_group_layout, &renderable); + *preview = StorageHatchBatch::build(device, queue, &self.bind_group_layout, &renderable); } HatchBackend::Texture { preview, .. } => { let renderable: Vec = hatches diff --git a/src/scene/pipeline/hatch_gpu/storage.rs b/src/scene/pipeline/hatch_gpu/storage.rs index e9ec6c4fc..d44c1eab1 100644 --- a/src/scene/pipeline/hatch_gpu/storage.rs +++ b/src/scene/pipeline/hatch_gpu/storage.rs @@ -3,7 +3,6 @@ use crate::scene::model::hatch_model::{HatchModel, HatchPattern, PatFamily}; use iced::wgpu; -use iced::wgpu::util::DeviceExt; // ── GPU structs ──────────────────────────────────────────────────────────── // @@ -188,6 +187,7 @@ impl StorageHatchBatch { /// Builds whole-hatch chunks within the device's buffer limits. pub(super) fn build( device: &wgpu::Device, + queue: &wgpu::Queue, bgl: &wgpu::BindGroupLayout, hatches: &[HatchModel], ) -> Vec { @@ -224,12 +224,13 @@ impl StorageHatchBatch { ranges.push(start..hatches.len()); ranges .into_iter() - .filter_map(|range| Self::build_chunk(device, bgl, &hatches[range])) + .filter_map(|range| Self::build_chunk(device, queue, bgl, &hatches[range])) .collect() } fn build_chunk( device: &wgpu::Device, + queue: &wgpu::Queue, bgl: &wgpu::BindGroupLayout, hatches: &[HatchModel], ) -> Option { @@ -500,42 +501,56 @@ impl StorageHatchBatch { return None; } - let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.vertex"), - contents: bytemuck::cast_slice(&verts), - usage: wgpu::BufferUsages::VERTEX, - }); - let index_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.index"), - contents: bytemuck::cast_slice(&indices), - usage: wgpu::BufferUsages::INDEX, - }); - let placement_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.placements"), - contents: bytemuck::cast_slice(&placements), - usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST, - }); - let instance_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.instances"), - contents: bytemuck::cast_slice(&instances), - usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_DST, - }); - let family_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.families"), - contents: bytemuck::cast_slice(&families), - usage: wgpu::BufferUsages::STORAGE, - }); - let dash_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.dashes"), - contents: bytemuck::cast_slice(&dashes), - usage: wgpu::BufferUsages::STORAGE, - }); + let vertex_buffer = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.vertex", + &verts, + wgpu::BufferUsages::VERTEX, + ); + let index_buffer = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.index", + &indices, + wgpu::BufferUsages::INDEX, + ); + let placement_buffer = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.placements", + &placements, + wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST, + ); + let instance_buffer = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.instances", + &instances, + wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_DST, + ); + let family_buffer = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.families", + &families, + wgpu::BufferUsages::STORAGE, + ); + let dash_buffer = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.dashes", + &dashes, + wgpu::BufferUsages::STORAGE, + ); - let visibility_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.visibility"), - contents: bytemuck::cast_slice(&visibility), - usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_DST, - }); + let visibility_buffer = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.visibility", + &visibility, + wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_DST, + ); let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { label: Some("hatch.bg"), diff --git a/src/scene/pipeline/hatch_gpu/texture.rs b/src/scene/pipeline/hatch_gpu/texture.rs index c777b3bb1..7ad49c703 100644 --- a/src/scene/pipeline/hatch_gpu/texture.rs +++ b/src/scene/pipeline/hatch_gpu/texture.rs @@ -199,16 +199,20 @@ impl TextureHatch { .into_iter() .map(|[x, y]| HatchVertex { pos: [x, y, 0.0], _pad: 0.0 }) .collect(); - let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.texture.vbuf"), - contents: bytemuck::cast_slice(&vertices), - usage: wgpu::BufferUsages::VERTEX, - }); - let index_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.texture.ibuf"), - contents: bytemuck::cast_slice(&indices), - usage: wgpu::BufferUsages::INDEX, - }); + let vertex_buffer = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.texture.vbuf", + &vertices, + wgpu::BufferUsages::VERTEX, + ); + let index_buffer = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.texture.ibuf", + &indices, + wgpu::BufferUsages::INDEX, + ); let base = model .render_instance .map_or([0.0; 3], |instance| instance.translation); @@ -231,11 +235,13 @@ impl TextureHatch { } }) .collect(); - let placement_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.texture.placements"), - contents: bytemuck::cast_slice(&placements), - usage: wgpu::BufferUsages::VERTEX, - }); + let placement_buffer = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.texture.placements", + &placements, + wgpu::BufferUsages::VERTEX, + ); // ── Gradient projection range (snapped-local space) ─────────────── let base_mode = mode & 0xFF; diff --git a/src/scene/pipeline/mod.rs b/src/scene/pipeline/mod.rs index 595876a13..a27331615 100644 --- a/src/scene/pipeline/mod.rs +++ b/src/scene/pipeline/mod.rs @@ -1,6 +1,7 @@ mod device_capabilities; pub mod face3d_gpu; pub mod gpu_budget; +pub mod gpu_upload; pub mod hatch_gpu; pub mod wipeout_gpu; pub mod image_gpu; @@ -2341,6 +2342,7 @@ impl Pipeline { pub fn build_wire_buffers( &self, device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[WireModel], depth_map: &rustc_hash::FxHashMap, ) -> ( @@ -2383,6 +2385,7 @@ impl Pipeline { let refs: Vec<&WireModel> = wires[i..j].iter().collect(); batches.extend(WireGpu::from_run_refs( device, + queue, &refs, depth_map, mesh_edge, @@ -2392,6 +2395,7 @@ impl Pipeline { } let block_batches = BlockWireGpu::from_wires( device, + queue, &block_wires, depth_map, None, @@ -2426,6 +2430,7 @@ impl Pipeline { pub fn upload_selected_wires( &mut self, device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[WireModel], selected: &rustc_hash::FxHashSet, hovered: &rustc_hash::FxHashSet, @@ -2495,6 +2500,7 @@ impl Pipeline { let mut gpu = if let Some(tint) = selected_tint { WireGpu::from_highlight_refs( device, + queue, &selected_regular, tint, depth_map, @@ -2505,6 +2511,7 @@ impl Pipeline { }; gpu.extend(WireGpu::from_highlight_refs( device, + queue, &hover_regular, WireModel::HOVER, depth_map, @@ -2514,6 +2521,7 @@ impl Pipeline { let mut block_gpu = if let Some(tint) = selected_tint { BlockWireGpu::from_wires( device, + queue, &selected_blocks, depth_map, Some(tint), @@ -2524,6 +2532,7 @@ impl Pipeline { }; block_gpu.extend(BlockWireGpu::from_wires( device, + queue, &hover_blocks, depth_map, Some(WireModel::HOVER), @@ -2554,6 +2563,7 @@ impl Pipeline { pub fn upload_text_highlight( &mut self, device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[WireModel], selected: &rustc_hash::FxHashSet, hovered: &rustc_hash::FxHashSet, @@ -2634,10 +2644,11 @@ impl Pipeline { } } self.text_highlight_vcount = out.len() as u32; - self.text_highlight_vbuf = text_gpu::upload_vertices(device, &out); + self.text_highlight_vbuf = text_gpu::upload_vertices(device, queue, &out); let mut block_gpu = if let Some(tint) = selected_tint { text_gpu::upload_block_vertex_refs( device, + queue, &selected_blocks, depth_map, Some(tint), @@ -2647,6 +2658,7 @@ impl Pipeline { }; block_gpu.extend(text_gpu::upload_block_vertex_refs( device, + queue, &hover_blocks, depth_map, Some(WireModel::HOVER), @@ -2670,13 +2682,14 @@ impl Pipeline { pub fn upload_preview_wires( &mut self, device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[WireModel], depth_map: &rustc_hash::FxHashMap, ) { self.gpu_preview_wires = if wires.is_empty() { vec![] } else { - WireGpu::from_run(device, wires, depth_map, false, self.wire_const_bgl.as_ref()) + WireGpu::from_run(device, queue, wires, depth_map, false, self.wire_const_bgl.as_ref()) }; } @@ -2709,7 +2722,7 @@ impl Pipeline { atlas.clear_dirty(); } } - self.text_preview_vbuf = text_gpu::upload_vertices(device, verts); + self.text_preview_vbuf = text_gpu::upload_vertices(device, queue, verts); self.text_preview_vcount = verts.len() as u32; } @@ -2720,6 +2733,7 @@ impl Pipeline { pub fn upload_silhouettes( &mut self, device: &wgpu::Device, + queue: &wgpu::Queue, sets: &[crate::scene::model::mesh_model::MeshLodSet], content_id: u64, view_dir: glam::Vec3, @@ -2728,7 +2742,6 @@ impl Pipeline { let view = glam::DVec3::new(view_dir.x as f64, view_dir.y as f64, view_dir.z as f64) .normalize_or(glam::DVec3::NEG_Z); use crate::scene::pipeline::mesh_gpu::{SilhouetteInstance, SilhouetteVertex}; - use wgpu::util::DeviceExt; let chunk_bytes = gpu_budget::buffer_budget(device); let max_vertices = chunk_bytes / std::mem::size_of::() / 2 * 2; if max_vertices < 2 { @@ -2804,12 +2817,12 @@ impl Pipeline { .chunks(max_instances.max(1)) .map(|instances| { ( - device.create_buffer_init( - &wgpu::util::BufferInitDescriptor { - label: Some("mesh.silhouette.instances"), - contents: bytemuck::cast_slice(instances), - usage: wgpu::BufferUsages::VERTEX, - }, + gpu_upload::upload_buffer( + device, + queue, + "mesh.silhouette.instances", + instances, + wgpu::BufferUsages::VERTEX, ), instances.len() as u32, ) @@ -2911,12 +2924,12 @@ impl Pipeline { if vertex_count == 0 { return; } - let vertex_buffer = device.create_buffer_init( - &wgpu::util::BufferInitDescriptor { - label: Some("mesh.silhouette.vbuf"), - contents: bytemuck::cast_slice(&verts[..vertex_count]), - usage: wgpu::BufferUsages::VERTEX, - }, + let vertex_buffer = gpu_upload::upload_buffer( + device, + queue, + "mesh.silhouette.vbuf", + &verts[..vertex_count], + wgpu::BufferUsages::VERTEX, ); for (instance_buffer, instance_count) in &group.instance_buffers { chunks.push(SilhouetteChunk { @@ -3033,6 +3046,7 @@ impl Pipeline { pub fn upload_face3d( &mut self, device: &wgpu::Device, + queue: &wgpu::Queue, face3d_wires: &[WireModel], all_wires: &[WireModel], wireframe_only: bool, @@ -3044,7 +3058,7 @@ impl Pipeline { // Edge buffer is always built from `face3d_wires`, so 3DFACE // outlines stay on the screen regardless of mode. self.gpu_face3d_edges = - WireGpu::from_batch(device, face3d_wires, depth_map, self.wire_const_bgl.as_ref()); + WireGpu::from_batch(device, queue, face3d_wires, depth_map, self.wire_const_bgl.as_ref()); // Fill buffer split: 3D quads + PolyfaceMesh / PolygonMesh face // tris go to `chunks_3d` (gated by `keep_3d_mesh_fills`); // 2D fills (text-LOD greek, MultiLeader background, dimension arrows) go to @@ -3067,6 +3081,7 @@ impl Pipeline { } else { self.gpu_face3d_fill = Some(Face3DGpu::from_wires( device, + queue, face3d_wires, all_wires, keep_3d_mesh_fills, @@ -3404,9 +3419,9 @@ impl Pipeline { atlas.clear_dirty(); } } - self.text_vbuf = text_gpu::upload_vertices(device, verts); + self.text_vbuf = text_gpu::upload_vertices(device, queue, verts); self.text_vcount = verts.len() as u32; - self.block_text_gpu = text_gpu::upload_block_vertices(device, wires, depth_map); + self.block_text_gpu = text_gpu::upload_block_vertices(device, queue, wires, depth_map); if let Some(started) = perf_started { let elapsed_ms = started.elapsed().as_secs_f64() * 1000.0; if elapsed_ms >= 1.0 { diff --git a/src/scene/pipeline/text_gpu.rs b/src/scene/pipeline/text_gpu.rs index 2519fbe0a..7ad16f053 100644 --- a/src/scene/pipeline/text_gpu.rs +++ b/src/scene/pipeline/text_gpu.rs @@ -14,7 +14,6 @@ #![allow(dead_code)] use iced::wgpu; -use iced::wgpu::util::DeviceExt; use crate::scene::text::glyph_quads::GlyphQuad; use crate::scene::text::sdf_atlas::GlyphAtlas; @@ -462,15 +461,17 @@ pub fn create_pipelines( pub fn upload_block_vertices( device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[crate::scene::model::wire_model::WireModel], depth_map: &rustc_hash::FxHashMap, ) -> Vec { let refs: Vec<&crate::scene::model::wire_model::WireModel> = wires.iter().collect(); - upload_block_vertex_refs(device, &refs, depth_map, None) + upload_block_vertex_refs(device, queue, &refs, depth_map, None) } pub fn upload_block_vertex_refs( device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[&crate::scene::model::wire_model::WireModel], depth_map: &rustc_hash::FxHashMap, tint: Option<[f32; 4]>, @@ -516,7 +517,7 @@ pub fn upload_block_vertex_refs( } else { source.text_verts.as_slice() }; - let Some(vertex_buffer) = upload_vertices(device, vertices) else { + let Some(vertex_buffer) = upload_vertices(device, queue, vertices) else { continue; }; let instances: Vec = group @@ -544,11 +545,13 @@ pub fn upload_block_vertex_refs( let max_instances = super::gpu_budget::max_elements::(device); for chunk in instances.chunks(max_instances) { - let instance_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("block_text.instances"), - contents: bytemuck::cast_slice(chunk), - usage: wgpu::BufferUsages::VERTEX, - }); + let instance_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "block_text.instances", + chunk, + wgpu::BufferUsages::VERTEX, + ); out.push(BlockTextGpu { vertex_buffer: vertex_buffer.clone(), instance_buffer, @@ -561,15 +564,21 @@ pub fn upload_block_vertex_refs( } /// Upload a finished vertex list; `None` if empty. -pub fn upload_vertices(device: &wgpu::Device, verts: &[TextVertex]) -> Option { +pub fn upload_vertices( + device: &wgpu::Device, + queue: &wgpu::Queue, + verts: &[TextVertex], +) -> Option { if verts.is_empty() { return None; } - Some(device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("text.vbuf"), - contents: bytemuck::cast_slice(verts), - usage: wgpu::BufferUsages::VERTEX, - })) + Some(super::gpu_upload::upload_buffer( + device, + queue, + "text.vbuf", + verts, + wgpu::BufferUsages::VERTEX, + )) } // ── Tests ───────────────────────────────────────────────────────────────── diff --git a/src/scene/pipeline/wire_arena.rs b/src/scene/pipeline/wire_arena.rs index f7ae562bc..8f15c5fba 100644 --- a/src/scene/pipeline/wire_arena.rs +++ b/src/scene/pipeline/wire_arena.rs @@ -255,48 +255,34 @@ fn make_const_bg( fn alloc_inst_initialized( device: &wgpu::Device, + queue: &wgpu::Queue, cap: u64, data: &[WireInstance], ) -> wgpu::Buffer { - let buffer = device.create_buffer(&wgpu::BufferDescriptor { - label: Some("wire_arena.ibuf"), - size: cap * std::mem::size_of::() as u64, - usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST, - mapped_at_creation: true, - }); - if !data.is_empty() { - let bytes = bytemuck::cast_slice(data); - let mut mapped = buffer - .slice(..bytes.len() as u64) - .get_mapped_range_mut(); - mapped.copy_from_slice(bytes); - drop(mapped); - } - buffer.unmap(); - buffer + super::gpu_upload::alloc_with_prefix( + device, + queue, + "wire_arena.ibuf", + cap * std::mem::size_of::() as u64, + data, + wgpu::BufferUsages::VERTEX, + ) } fn alloc_const_initialized( device: &wgpu::Device, + queue: &wgpu::Queue, cap: u64, data: &[WireConst], ) -> wgpu::Buffer { - let buffer = device.create_buffer(&wgpu::BufferDescriptor { - label: Some("wire_arena.cbuf"), - size: cap * std::mem::size_of::() as u64, - usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_DST, - mapped_at_creation: true, - }); - if !data.is_empty() { - let bytes = bytemuck::cast_slice(data); - let mut mapped = buffer - .slice(..bytes.len() as u64) - .get_mapped_range_mut(); - mapped.copy_from_slice(bytes); - drop(mapped); - } - buffer.unmap(); - buffer + super::gpu_upload::alloc_with_prefix( + device, + queue, + "wire_arena.cbuf", + cap * std::mem::size_of::() as u64, + data, + wgpu::BufferUsages::STORAGE, + ) } fn blank_const() -> WireConst { @@ -328,7 +314,7 @@ impl WireArena { /// path). pub fn build( device: &wgpu::Device, - _queue: &wgpu::Queue, + queue: &wgpu::Queue, wires: &[&WireModel], depth_map: &FxHashMap, const_bgl: &wgpu::BindGroupLayout, @@ -468,8 +454,8 @@ impl WireArena { .max(MIN_CONST_CAP) .min(MAX_CONSTS)) as u32; let upload_started = iced::time::Instant::now(); - let inst_buf = alloc_inst_initialized(device, inst_cap as u64, &instances); - let const_buf = alloc_const_initialized(device, const_cap as u64, &consts_cpu); + let inst_buf = alloc_inst_initialized(device, queue, inst_cap as u64, &instances); + let const_buf = alloc_const_initialized(device, queue, const_cap as u64, &consts_cpu); let upload_ms = upload_started.elapsed().as_secs_f64() * 1000.0; let const_bind_group = make_const_bg(device, const_bgl, &const_buf); if perf { @@ -934,25 +920,18 @@ fn can_resize_packed_terminal_slab( fn alloc_packed_initialized( device: &wgpu::Device, + queue: &wgpu::Queue, cap: u64, data: &[PackedWireInstance], ) -> wgpu::Buffer { - let buffer = device.create_buffer(&wgpu::BufferDescriptor { - label: Some("wire_arena.packed.ibuf"), - size: cap * std::mem::size_of::() as u64, - usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST, - mapped_at_creation: true, - }); - if !data.is_empty() { - let bytes = bytemuck::cast_slice(data); - let mut mapped = buffer - .slice(..bytes.len() as u64) - .get_mapped_range_mut(); - mapped.copy_from_slice(bytes); - drop(mapped); - } - buffer.unmap(); - buffer + super::gpu_upload::alloc_with_prefix( + device, + queue, + "wire_arena.packed.ibuf", + cap * std::mem::size_of::() as u64, + data, + wgpu::BufferUsages::VERTEX, + ) } fn visible_ranges( @@ -998,6 +977,7 @@ fn visible_ranges( impl PackedWireArena { fn build( device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[&WireModel], depth_map: &FxHashMap, mesh_edge: bool, @@ -1078,7 +1058,7 @@ impl PackedWireArena { let inst_cap = ((inst_tail as u64 * HEADROOM_NUM / HEADROOM_DEN) .max(MIN_INST_CAP) .min(MAX_PACKED_INSTANCES)) as u32; - let inst_buf = alloc_packed_initialized(device, inst_cap as u64, &instances); + let inst_buf = alloc_packed_initialized(device, queue, inst_cap as u64, &instances); Some(Self { inst_buf, @@ -1351,7 +1331,7 @@ impl PersistentWireArena { )?) } else { PersistentWireArenaKind::Packed(PackedWireArena::build( - device, wires, depth_map, mesh_edge, + device, queue, wires, depth_map, mesh_edge, )?) }; Some(Self { inner }) diff --git a/src/scene/pipeline/wire_gpu.rs b/src/scene/pipeline/wire_gpu.rs index e5db97efc..a23eb6faf 100644 --- a/src/scene/pipeline/wire_gpu.rs +++ b/src/scene/pipeline/wire_gpu.rs @@ -28,34 +28,20 @@ use crate::scene::model::wire_model::WireModel; use iced::wgpu; -/// Allocate a VERTEX buffer with `mapped_at_creation` and write `data` directly -/// into the mapped slice. Skips the intermediate staging copy that -/// `create_buffer_init` performs and avoids holding a second `Vec` worth of -/// memory during upload — meaningful on cold open where wire buffers can run -/// into the hundreds of MB. -fn instance_buffer_mapped( +/// Allocate a VERTEX buffer and fill it through the queue. +/// +/// This used to map at creation to skip the staging copy. Mapping panics on +/// the invalid buffer an out-of-memory device returns, and that panic aborts +/// the process from inside iced's redraw, so the staging copy is the price of +/// a session that survives a failed allocation. Chunking keeps the transient +/// staging cost bounded. See `super::gpu_upload`. +fn instance_buffer( device: &wgpu::Device, + queue: &wgpu::Queue, label: &str, data: &[T], ) -> wgpu::Buffer { - let bytes: &[u8] = bytemuck::cast_slice(data); - // wgpu rejects size-0 buffers; the renderer already guards `instance_count` - // before issuing a draw, so a placeholder allocation is fine here. - let size = bytes.len().max(std::mem::size_of::()) as u64; - let buf = device.create_buffer(&wgpu::BufferDescriptor { - label: Some(label), - size, - usage: wgpu::BufferUsages::VERTEX, - mapped_at_creation: true, - }); - { - let mut view = buf.slice(..).get_mapped_range_mut(); - if !bytes.is_empty() { - view.slice(..bytes.len()).copy_from_slice(bytes); - } - } - buf.unmap(); - buf + super::gpu_upload::upload_buffer(device, queue, label, data, wgpu::BufferUsages::VERTEX) } // ── Instance layout ─────────────────────────────────────────────────────── @@ -684,6 +670,7 @@ pub(crate) fn wire_draw_depth( impl BlockWireGpu { pub fn from_wires( device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[&WireModel], depth_map: &rustc_hash::FxHashMap, color_override: Option<[f32; 4]>, @@ -753,11 +740,13 @@ impl BlockWireGpu { .chunks(max_verts) .map(|chunk| { ( - device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("block_wire.vertices"), - contents: bytemuck::cast_slice(chunk), - usage: wgpu::BufferUsages::VERTEX, - }), + super::gpu_upload::upload_buffer( + device, + queue, + "block_wire.vertices", + chunk, + wgpu::BufferUsages::VERTEX, + ), chunk.len() as u32, ) }) @@ -812,7 +801,7 @@ impl BlockWireGpu { .chunks(max_instances) .map(|chunk| { ( - instance_buffer_mapped(device, "block_wire.instances", chunk), + instance_buffer(device, queue, "block_wire.instances", chunk), chunk.len() as u32, ) }) @@ -840,18 +829,20 @@ impl BlockWireGpu { /// each chunk. fn build_const_bind_group( device: &wgpu::Device, + queue: &wgpu::Queue, bgl: &wgpu::BindGroupLayout, consts: &[WireConst], ) -> std::sync::Arc { - use wgpu::util::DeviceExt; // wgpu rejects zero-sized buffers; pad with one zeroed record when empty. let one = [::zeroed()]; let data: &[WireConst] = if consts.is_empty() { &one } else { consts }; - let buf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("wire_const.buf"), - contents: bytemuck::cast_slice(data), - usage: wgpu::BufferUsages::STORAGE, - }); + let buf = super::gpu_upload::upload_buffer( + device, + queue, + "wire_const.buf", + data, + wgpu::BufferUsages::STORAGE, + ); let bg = device.create_bind_group(&wgpu::BindGroupDescriptor { label: Some("wire_const.bg"), layout: bgl, @@ -869,6 +860,7 @@ impl WireGpu { /// of a large selected polyline or block before packing the overlay. pub fn from_highlight_refs( device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[&WireModel], color: [f32; 4], depth_map: &rustc_hash::FxHashMap, @@ -895,12 +887,13 @@ impl WireGpu { if instances.is_empty() { return Vec::new(); } - let bind_group = build_const_bind_group(device, const_bgl, &consts); + let bind_group = build_const_bind_group(device, queue, const_bgl, &consts); return instances .chunks(MAX_INSTANCES) .map(|chunk| Self { - instance_buffer: instance_buffer_mapped( + instance_buffer: instance_buffer( device, + queue, "wire.highlight.ibuf", chunk, ), @@ -928,8 +921,9 @@ impl WireGpu { instances .chunks(MAX_PACKED_INSTANCES) .map(|chunk| Self { - instance_buffer: instance_buffer_mapped( + instance_buffer: instance_buffer( device, + queue, "wire.highlight.compat.ibuf", chunk, ), @@ -947,6 +941,7 @@ impl WireGpu { /// uses chunked resident buffers. pub fn from_run_refs( device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[&WireModel], depth_map: &rustc_hash::FxHashMap, mesh_edge: bool, @@ -975,8 +970,9 @@ impl WireGpu { return instances .chunks(MAX_INSTANCES) .map(|chunk| Self { - instance_buffer: instance_buffer_mapped( + instance_buffer: instance_buffer( device, + queue, "wire.run.hybrid.compat.ibuf", chunk, ), @@ -1012,11 +1008,11 @@ impl WireGpu { if instances.is_empty() { return Vec::new(); } - let bind_group = build_const_bind_group(device, const_bgl, &consts); + let bind_group = build_const_bind_group(device, queue, const_bgl, &consts); instances .chunks(MAX_INSTANCES) .map(|chunk| Self { - instance_buffer: instance_buffer_mapped(device, "wire.run.hybrid.ibuf", chunk), + instance_buffer: instance_buffer(device, queue, "wire.run.hybrid.ibuf", chunk), first_instance: 0, instance_count: chunk.len() as u32, is_3d_mesh_edge: mesh_edge, @@ -1037,6 +1033,7 @@ impl WireGpu { /// image for transparent / coincident wires. pub fn from_run( device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[WireModel], depth_map: &rustc_hash::FxHashMap, mesh_edge: bool, @@ -1071,11 +1068,11 @@ impl WireGpu { if instances.is_empty() { return vec![]; } - let bg = build_const_bind_group(device, const_bgl, &consts); + let bg = build_const_bind_group(device, queue, const_bgl, &consts); return instances .chunks(MAX_INSTANCES) .map(|chunk| { - let buf = instance_buffer_mapped(device, "wire.run.ibuf", chunk); + let buf = instance_buffer(device, queue, "wire.run.ibuf", chunk); Self { instance_buffer: buf, first_instance: 0, @@ -1108,7 +1105,7 @@ impl WireGpu { instances .chunks(MAX_PACKED_INSTANCES) .map(|chunk| { - let buf = instance_buffer_mapped(device, "wire.run.compat.ibuf", chunk); + let buf = instance_buffer(device, queue, "wire.run.compat.ibuf", chunk); Self { instance_buffer: buf, first_instance: 0, @@ -1125,6 +1122,7 @@ impl WireGpu { /// per-instance. pub fn from_batch( device: &wgpu::Device, + queue: &wgpu::Queue, wires: &[WireModel], depth_map: &rustc_hash::FxHashMap, const_bgl: Option<&wgpu::BindGroupLayout>, @@ -1158,13 +1156,13 @@ impl WireGpu { if instances.is_empty() { return vec![]; } - let bg = build_const_bind_group(device, const_bgl, &consts); + let bg = build_const_bind_group(device, queue, const_bgl, &consts); return instances .chunks(MAX_INSTANCES) .enumerate() .map(|(i, chunk)| { let label = format!("wire.batch.ibuf.{i}"); - let instance_buffer = instance_buffer_mapped(device, &label, chunk); + let instance_buffer = instance_buffer(device, queue, &label, chunk); Self { instance_buffer, first_instance: 0, @@ -1191,7 +1189,7 @@ impl WireGpu { .enumerate() .map(|(i, chunk)| { let label = format!("wire.batch.compat.ibuf.{i}"); - let instance_buffer = instance_buffer_mapped(device, &label, chunk); + let instance_buffer = instance_buffer(device, queue, &label, chunk); Self { instance_buffer, first_instance: 0, diff --git a/src/scene/view/render.rs b/src/scene/view/render.rs index 3a151c5d8..b52238d7c 100644 --- a/src/scene/view/render.rs +++ b/src/scene/view/render.rs @@ -608,6 +608,7 @@ impl shader::Primitive for Primitive { { inner.upload_face3d( device, + queue, &vp.face3d_wires[..], &vp_wires[..], !face3d_fill_active, @@ -785,6 +786,7 @@ impl shader::Primitive for Primitive { inner.wire_arena_fallback = std::sync::Arc::new( crate::scene::pipeline::WireGpu::from_run_refs( device, + queue, ®ular, &draw_depths, false, @@ -821,6 +823,7 @@ impl shader::Primitive for Primitive { inner.wire_arena_fallback = std::sync::Arc::new( crate::scene::pipeline::WireGpu::from_run_refs( device, + queue, &mesh, &draw_depths, true, @@ -918,7 +921,7 @@ impl shader::Primitive for Primitive { Some(entry) => entry, None => { let entry = - inner.build_wire_buffers(device, &vp_wires[..], &draw_depths); + inner.build_wire_buffers(device, queue, &vp_wires[..], &draw_depths); pipeline .wire_buffer_cache .insert(vp.wire_content_id, entry.clone()); @@ -1000,6 +1003,7 @@ impl shader::Primitive for Primitive { }; inner.upload_selected_wires( device, + queue, &vp_wires[..], &vp.selected_handles, &vp.hover_handles, @@ -1012,6 +1016,7 @@ impl shader::Primitive for Primitive { // base text buffer. inner.upload_text_highlight( device, + queue, &vp_wires[..], &vp.selected_handles, &vp.hover_handles, @@ -1066,7 +1071,7 @@ impl shader::Primitive for Primitive { // Live overlay (command preview / interim / grip drag) — small and // refreshed every frame it's present, so a drag never re-uploads // the resident base wire buffer. - inner.upload_preview_wires(device, &vp.preview_wires[..], &draw_depths); + inner.upload_preview_wires(device, queue, &vp.preview_wires[..], &draw_depths); inner.upload_preview_text(device, queue, &vp.preview_text_verts[..]); // Cull / scissor / LOD project AABBs relative-to-eye (matching the // GPU's RTE path) so the math stays precise at UTM-scale coords. @@ -1087,6 +1092,7 @@ impl shader::Primitive for Primitive { if inner.silhouette_key != silhouette_key { inner.upload_silhouettes( device, + queue, if silhouette_enabled { &vp.meshes[..] } else { &[] }, vp.wire_content_id, vp.view_dir, From 0d11421dea900c4f811b237d955aa5f0267b4994 Mon Sep 17 00:00:00 2001 From: Panos <25664832+mechpanos@users.noreply.github.com> Date: Thu, 3 Sep 2026 16:07:13 +0300 Subject: [PATCH 4/5] fix: free superseded wire buffers before allocating their replacement The renderer shares one set of wire GPU buffers per wire_content_id across every pane and viewport slot. Every geometry edit mints a new content id, so every edit builds a new set -- and the old one stayed in wire_buffer_cache until the map exceeded sixteen entries. Sixteen entries is a sane bound for small drawings and fatal for large ones. The policy counted entries, not bytes. On the reproducer a single set is most of the card: the VRAM trace shows 572 MiB baseline rising to 1871 MiB on a 2048 MiB GT 1030. The second set has nowhere to go, so the first edit after opening exhausts VRAM. The perf log shows exactly that -- two `shared-fullupload` lines, an edit, then the process dies. Evict on every miss instead of at a count threshold, and do it before building the replacement rather than after, so the old allocation is released while the new one is still being sized. Dropping this slot's own handles first is what lets the retain see the superseded entry as garbage; a pane still drawing that content keeps its own clone and its strong count stays above one, so shared geometry is never pulled out from under a live viewport. The trade is that returning to a previous content id -- undo, mostly -- now rebuilds instead of hitting a warm entry. On a card where the alternative is dying, that is the right way round. Adds a PERF line reporting evicted and retained entry counts, so the policy can be watched rather than assumed. Co-Authored-By: Claude Opus 5 --- locales/ar-SA/opencadstudio.ftl | 1 + locales/bg-BG/opencadstudio.ftl | 1 + locales/cs-CZ/opencadstudio.ftl | 1 + locales/de-DE/opencadstudio.ftl | 1 + locales/el-GR/opencadstudio.ftl | 3681 +++++++++++++++++++++++++++++++ locales/en-US/opencadstudio.ftl | 1 + locales/es-ES/opencadstudio.ftl | 1 + locales/fi-FI/opencadstudio.ftl | 1 + locales/fr-FR/opencadstudio.ftl | 1 + locales/hi-IN/opencadstudio.ftl | 1 + locales/hu-HU/opencadstudio.ftl | 1 + locales/it-IT/opencadstudio.ftl | 1 + locales/ja-JP/opencadstudio.ftl | 1 + locales/ko-KR/opencadstudio.ftl | 1 + locales/nl-NL/opencadstudio.ftl | 1 + locales/pl-PL/opencadstudio.ftl | 1 + locales/pt-BR/opencadstudio.ftl | 1 + locales/ru-RU/opencadstudio.ftl | 1 + locales/tr-TR/opencadstudio.ftl | 1 + locales/zh-CN/opencadstudio.ftl | 1 + locales/zh-TW/opencadstudio.ftl | 1 + src/i18n.rs | 7 +- src/scene/view/render.rs | 40 +- 23 files changed, 3736 insertions(+), 12 deletions(-) create mode 100644 locales/el-GR/opencadstudio.ftl diff --git a/locales/ar-SA/opencadstudio.ftl b/locales/ar-SA/opencadstudio.ftl index 28f435735..72fdf28a3 100644 --- a/locales/ar-SA/opencadstudio.ftl +++ b/locales/ar-SA/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = إغلاق diff --git a/locales/bg-BG/opencadstudio.ftl b/locales/bg-BG/opencadstudio.ftl index 793c311c2..9abf6e410 100644 --- a/locales/bg-BG/opencadstudio.ftl +++ b/locales/bg-BG/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Затвори diff --git a/locales/cs-CZ/opencadstudio.ftl b/locales/cs-CZ/opencadstudio.ftl index 654730c42..77fcab83e 100644 --- a/locales/cs-CZ/opencadstudio.ftl +++ b/locales/cs-CZ/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Zavřít diff --git a/locales/de-DE/opencadstudio.ftl b/locales/de-DE/opencadstudio.ftl index 2e4326ac7..617953887 100644 --- a/locales/de-DE/opencadstudio.ftl +++ b/locales/de-DE/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Schließen diff --git a/locales/el-GR/opencadstudio.ftl b/locales/el-GR/opencadstudio.ftl new file mode 100644 index 000000000..b0ea9afe1 --- /dev/null +++ b/locales/el-GR/opencadstudio.ftl @@ -0,0 +1,3681 @@ +language = + .system = Γλώσσα συστήματος + .english = English + .turkish = Türkçe + .dutch = Nederlands + .french = Français + .german = Deutsch + .hindi = हिन्दी + .russian = Русский + .chinese-simplified = 简体中文 + .spanish = Español + .portuguese = Português (Brasil) + .arabic = العربية + .japanese = 日本語 + .korean = 한국어 + .czech = Čeština + .italian = Italiano + .finnish = Suomi + .hungarian = Magyar + .polish = Polski + .chinese-traditional = 繁體中文 + .bulgarian = Български + .greek = Ελληνικά + +action = + .close = Κλείσιμο + .options = Επιλογές + .plugins = Πρόσθετα + +ribbon-tab = + .draw = Σχεδίαση + .annotate = Επισημείωση + .insert = Εισαγωγή + .model = Μοντελοποίηση + .layout = Διάταξη + .manage = Διαχείριση + .view = Προβολή + +options = + .language-section = Γλώσσα + .language-label = Γλώσσα περιβάλλοντος: + .open-save-section = Άνοιγμα και αποθήκευση + .default-save-format-label = Προεπιλεγμένη μορφή αποθήκευσης: + .default-save-format-help = Χρησιμοποιείται στην πρώτη αποθήκευση ενός νέου σχεδίου. Τα υπάρχοντα σχέδια διατηρούν τον τύπο και την έκδοση του αρχείου τους. + .theme-section = Θέμα + .theme-label = Θέμα εφαρμογής: + .theme-help = Η αλλαγή ενός βασικού χρώματος μεταβαίνει σε Προσαρμοσμένο. Το θέμα παράγει κάθε απόχρωση των στοιχείων από αυτά τα έξι χρώματα. + .color-background = Φόντο + .color-text = Κείμενο + .color-primary = Κύριο + .color-success = Επιτυχία + .color-warning = Προειδοποίηση + .color-danger = Κίνδυνος + .browser-storage = Αποθηκευτικός χώρος προγράμματος περιήγησης + .dark = Σκούρο + .default-application = Προεπιλεγμένη εφαρμογή + .iced-theme = Θέμα Iced: + .theme = Θέμα + +command-line = + .ready = Το Open CAD Studio είναι έτοιμο. + .hint = Πληκτρολογήστε μια εντολή ή χρησιμοποιήστε την κορδέλα. Ανοίξτε OBJ από την καρτέλα Εισαγωγή. + .label = Εντολή: + .literal-spaces = Κυριολεκτικά κενά: το Space παραμένει στη γραμμή αντί να εκτελεί την εντολή. Παραμένει ενεργό μέχρι να απενεργοποιηθεί. + .invalid = Μη έγκυρο + .unable-to-save-file-is-in-use = Αδυναμία αποθήκευσης: το αρχείο χρησιμοποιείται. + +start = + .new-drawing = Νέο σχέδιο + .open-file = Άνοιγμα αρχείου… + .donate = Δωρεά + .send-feedback = Αποστολή σχολίων + .sponsors = Χορηγοί + .tutorials = Οδηγοί + .loading-videos = Φόρτωση βίντεο… + .videos-online = Τα βίντεο φορτώνονται από το διαδίκτυο. + .open-playlist = Άνοιγμα λίστας αναπαραγωγής στο YouTube + .discussions = Συζητήσεις + .pinned = Καρφιτσωμένα + .loading-discussions = Φόρτωση συζητήσεων… + .discussions-online = Οι συζητήσεις φορτώνονται από το GitHub. + .open-discussions = Άνοιγμα συζητήσεων στο GitHub + .supporters = Υποστηρικτές + .support-on-patreon = Υποστήριξη στο Patreon + .recent-files = Πρόσφατα αρχεία + .videos = Βίντεο + .welcome = Καλώς ορίσατε + .recent-documents = Πρόσφατα έγγραφα + .no-recent-files = Τα αρχεία που ανοίγετε θα εμφανίζονται εδώ. + .browser-storage = Αποθηκευτικός χώρος προγράμματος περιήγησης + .keep-recent-files = Διατήρηση πρόσφατων αρχείων + +modal = + .about = Σχετικά + .keyboard-shortcuts = Συντομεύσεις πληκτρολογίου + .command-aliases = Ψευδώνυμα εντολών + .find-replace = Εύρεση και αντικατάσταση + .plugin-manager = Διαχείριση προσθέτων + .update-available = Διαθέσιμη ενημέρωση + .layer-manager = Διαχείριση επιπέδων + .layer-state-manager = Διαχείριση καταστάσεων επιπέδων + .edit-layer-state = Επεξεργασία κατάστασης επιπέδων + .plot = Εκτύπωση + .layout-manager = Διαχείριση διατάξεων + .scale-manager = Διαχείριση κλιμάκων + .annotation-object-scale = Κλίμακα αντικειμένου επισημείωσης + .plot-style-editor = Επεξεργασία στυλ εκτύπωσης + .text-style-manager = Διαχείριση στυλ κειμένου + .multiline-style-manager = Διαχείριση στυλ πολλαπλών γραμμών + .table-style-manager = Διαχείριση στυλ πινάκων + .multileader-style-manager = Διαχείριση στυλ πολλαπλών επεξηγήσεων + .dimension-style-manager = Διαχείριση στυλ διαστάσεων + .default-application = Προεπιλεγμένη εφαρμογή + .save-warning = Προειδοποίηση αποθήκευσης + .unable-save = Αδυναμία αποθήκευσης σχεδίου + .drawing-changed = Το σχέδιο άλλαξε στον δίσκο + .delete-layer = Διαγραφή επιπέδου + .unsaved-changes = Μη αποθηκευμένες αλλαγές + .unsaved-save-prompt = Θέλετε να αποθηκεύσετε τις αλλαγές; + .point-style = Στυλ σημείου + .attribute-editor = Επεξεργασία χαρακτηριστικών + .save-drawing-as = Αποθήκευση σχεδίου ως + .recovery-report = Αναφορά ανάκτησης σχεδίου + .recovery-prompt = Ανάκτηση σχεδίου + .file-name-could-not-be-saved = Δεν ήταν δυνατή η αποθήκευση του "__ocs_arg_file_name__". + .file-name-was-changed-by-another-application = Το "__ocs_arg_file_name__" τροποποιήθηκε από άλλη εφαρμογή. + .count-selected-layers = __ocs_arg_count__ επιλεγμένα επίπεδα + .subject-still-has-count-obj-deleting-will-also = + __ocs_arg_subject__ __ocs_arg_has__ ακόμη __ocs_arg_count__ __ocs_arg_obj__. + Η διαγραφή θα αφαιρέσει επίσης __ocs_arg_those__ από το σχέδιο. Συνέχεια; + .delete-objects = Διαγραφή αντικειμένων + .details-error = Λεπτομέρειες: __ocs_arg_error__ + .file-name = Όνομα αρχείου: + .format = Μορφή: + .layer-name = Επίπεδο "__ocs_arg_name__" + .make-open-cad-studio-your-default-cad-app = Να οριστεί το Open CAD Studio ως προεπιλεγμένη εφαρμογή CAD; + .not-now = Όχι τώρα + .open-dwg-and-dxf-drawings-in-open-cad-studio-b = Άνοιγμα σχεδίων .dwg και .dxf στο Open CAD Studio από προεπιλογή. Μπορείτε να το αλλάξετε αργότερα από τις ρυθμίσεις του συστήματός σας. + .path-path = Διαδρομή: __ocs_arg_path__ + .reload-from-disk = Επαναφόρτωση από τον δίσκο + .save-as = Αποθήκευση ως... + .saving-now-could-destroy-those-external-change = Η αποθήκευση τώρα μπορεί να καταστρέψει αυτές τις εξωτερικές αλλαγές. Επαναφορτώστε το αντίγραφο του δίσκου, αποθηκεύστε την τοπική σας εργασία αλλού ή αντικαταστήστε το ρητά. + .the-file-is-open-or-being-used-by-another-appl = Το αρχείο είναι ανοικτό ή χρησιμοποιείται από άλλη εφαρμογή. Κλείστε το εκεί και δοκιμάστε ξανά, ή αποθηκεύστε αυτό το σχέδιο με διαφορετικό όνομα. + .the-selected-layer-state-is-no-longer-availabl = Η επιλεγμένη κατάσταση επιπέδων δεν είναι πλέον διαθέσιμη. + .this-drawing-contains-count-aec-civil-objects = + Αυτό το σχέδιο περιέχει __ocs_arg_count__ αντικείμενα AEC/Civil που το "__ocs_arg_target__" δεν μπορεί να αποθηκεύσει, οπότε δεν θα αποθηκευτούν. + Για να τα διατηρήσετε, αποθηκεύστε στην αρχική έκδοση (__ocs_arg_src_version__). + .yes-set-as-default = Ναι, ορισμός ως προεπιλογή + .has = έχει + .hold = περιέχουν + .objects = αντικείμενα + .that-object = αυτό το αντικείμενο + .those-objects = αυτά τα αντικείμενα + +clipboard = + .no-supported-content = Το πρόχειρο δεν περιέχει υποστηριζόμενο κείμενο ή αντικείμενα σχεδίου. + .unavailable = Το πρόχειρο του συστήματος δεν είναι διαθέσιμο. + .occupied = Το πρόχειρο του συστήματος χρησιμοποιείται αυτή τη στιγμή. Δοκιμάστε ξανά. + .conversion-failed = Δεν ήταν δυνατή η ανάγνωση του κειμένου του προχείρου. + .copybase-specify-base-point = COPYBASE Ορίστε σημείο βάσης: + .copy-to-clipboard = Αντιγραφή στο πρόχειρο + .cut = Αποκοπή + .cut-to-clipboard = Αποκοπή στο πρόχειρο + .pasteclip-pick-insertion-point = PASTECLIP Επιλέξτε σημείο εισαγωγής: + .paste-as-block = Επικόλληση ως μπλοκ + .paste-from-clipboard = Επικόλληση από το πρόχειρο + .paste-to-original-coordinates = Επικόλληση στις αρχικές συντεταγμένες + +viewport = + .split-vertical = Κατακόρυφος διαχωρισμός θύρας προβολής + .split-horizontal = Οριζόντιος διαχωρισμός θύρας προβολής + .move = Μετακίνηση θύρας προβολής + .close = Κλείσιμο θύρας προβολής + +recovery = + .opened-with-repairs = Το σχέδιο άνοιξε με αναφορά ανάκτησης + .open-failed = Δεν ήταν δυνατό το άνοιγμα του σχεδίου + .repaired-description = Εντοπίστηκαν προβλήματα κατά το άνοιγμα του σχεδίου. Ελέγξτε την αναφορά· αν επιδιορθώθηκαν δεδομένα σχεδίου, αποθηκεύστε τα σε νέο αρχείο. + .failed-description = Η ανάκτηση δεν μπόρεσε να παραγάγει αξιοποιήσιμα δεδομένα σχεδίου. Ελέγξτε την αναφορά και δοκιμάστε ένα αντίγραφο ασφαλείας ή αυτόματης αποθήκευσης. + .entities-checked = Οντότητες που ελέγχθηκαν + .issues-found = Προβλήματα που βρέθηκαν + .entities-removed = Οντότητες που αφαιρέθηκαν + .references-checked = Αναφορές που ελέγχθηκαν + .referenced-entities-removed = Αναφερόμενες οντότητες που αφαιρέθηκαν + .references-unavailable = Οι αναφορές δεν είναι διαθέσιμες + .log-path = Αρχείο καταγραφής ανάκτησης + .log-write-failed = Δεν ήταν δυνατή η εγγραφή του αρχείου καταγραφής ανάκτησης + .log-download-ready = Η αναφορά ανάκτησης είναι έτοιμη για λήψη. + .save-copy = Αποθήκευση επιδιορθωμένου αντιγράφου + .show-log = Εμφάνιση αρχείου καταγραφής ανάκτησης + .save-new-file-required = Ένα επιδιορθωμένο σχέδιο πρέπει να αποθηκευτεί σε νέο αρχείο. + .prompt-heading = Το κανονικό άνοιγμα απέτυχε + .prompt-description = Το σχέδιο δεν τροποποιήθηκε. Η λειτουργία ανάκτησης μπορεί να προσπαθήσει να διασώσει αξιοποιήσιμα δεδομένα, αλλά κατεστραμμένες εγγραφές ενδέχεται να παραλειφθούν. Θέλετε να συνεχίσετε; + .attempt = Δοκιμή ανάκτησης + .decline = Άκυρο + +area = + .option-objects = Αντικείμενα + .option-back = Πίσω + .option-add = Πρόσθεση εμβαδού + .option-subtract = Αφαίρεση εμβαδού + .prompt-first = AREA Ορίστε πρώτο σημείο γωνίας ή [Αντικείμενα/Πρόσθεση εμβαδού/Αφαίρεση εμβαδού] <Αντικείμενα>: + .prompt-add = AREA ADD Ορίστε πρώτο σημείο γωνίας ή [Αντικείμενα/Αφαίρεση εμβαδού] <Αντικείμενα>: + .prompt-subtract = AREA SUBTRACT Ορίστε πρώτο σημείο γωνίας ή [Αντικείμενα/Πρόσθεση εμβαδού] <Αντικείμενα>: + .prompt-next = AREA Ορίστε επόμενο σημείο ({ $count } επιλεγμένα, Enter για υπολογισμό): + .prompt-objects = AREA Επιλέξτε αντικείμενα ({ $count } επιλεγμένα, Enter για υπολογισμό): + .objects-not-measurable = AREA: κανένα από τα επιλεγμένα αντικείμενα δεν έχει μετρήσιμο εμβαδόν. + .result = Εμβαδόν = { $area }, Περίμετρος = { $perimeter } + .result-area-only = Εμβαδόν = { $area } + .running-result = + Εμβαδόν = { $area }, Περίμετρος = { $perimeter } + Συνολικό εμβαδόν = { $total_area }, Συνολική περίμετρος = { $total_perimeter } + .running-result-area-only = + Εμβαδόν = { $area } + Συνολικό εμβαδόν = { $total_area } + +command-move = + .base = + MOVE Ορίστε σημείο βάσης [{ $count -> + [one] { $count } αντικείμενο + *[other] { $count } αντικείμενα + }]: + .target = MOVE Ορίστε προορισμό [βάση { $x },{ $y }]: + +command-copy = + .array-count = COPY Δώστε πλήθος στοιχείων διάταξης: + .base = + COPY Ορίστε σημείο βάσης [{ $count -> + [one] { $count } αντικείμενο + *[other] { $count } αντικείμενα + }]: + .array-target = COPY Ορίστε δεύτερο σημείο για διάταξη { $count } στοιχείων [βάση { $x },{ $y }]: + .target = + COPY Ορίστε προορισμό [{ $count -> + [one] { $count } αντίγραφο μέχρι τώρα + *[other] { $count } αντίγραφα μέχρι τώρα + } | Διάταξη | Enter=τέλος | βάση { $x },{ $y }]: + +common = + .none-use-shortcuts-set-key-command = (κανένα — χρησιμοποιήστε: SHORTCUTS SET <πλήκτρο> <εντολή>) + .alignment-indented-label-title-case = Στοίχιση: + .background-fill-enabled = Γέμισμα φόντου ενεργό + .borders-type-weight-color-spacing-hidden = Περιγράμματα (τύπος / πάχος / χρώμα / απόσταση / κρυφά) + .data-type = Τύπος δεδομένων: + .fill-color-indented-label-sentence-case = Χρώμα γεμίσματος: + .format-string = Συμβολοσειρά μορφής: + .off-color-ltype = Ανεν. Χρώμα Τύπ.γραμ. + .text-color-indented-label-sentence-case = Χρώμα κειμένου: + .text-height-indented-label-sentence-case = Ύψος κειμένου: + .unit-type = Τύπος μονάδας: + .name-already-in-use = Το όνομα "__ocs_fmt_0__" χρησιμοποιείται ήδη + .rrggbb-or-blank = #RRGGBB ή κενό + .default-parenthesized-lowercase = (προεπιλογή) + .none-parenthesized-lowercase = (κανένα) + .value-1st-arrowhead-dimblk1 = 1ο άκρο βέλους (DIMBLK1) + .value-2d-wireframe = Συρμάτινο πλέγμα 2D + .value-2nd-arrowhead-dimblk2 = 2ο άκρο βέλους (DIMBLK2) + .value-3d-wireframe = Συρμάτινο πλέγμα 3D + .value-3dalign-aligned-the-solid-to-the-destination-p = 3DALIGN: το στερεό στοιχίστηκε στα σημεία προορισμού. + .value-3dalign-each-point-triple-must-be-non-coincide = 3DALIGN: κάθε τριάδα σημείων πρέπει να είναι μη συμπίπτουσα και μη συνευθειακή. + .value-3dalign-select-exactly-one-solid-created-this = 3DALIGN: επιλέξτε ακριβώς ένα στερεό που δημιουργήθηκε σε αυτή τη συνεδρία. + .value-3dmirror-added-a-mirror-across-the-plane = 3DMIRROR: προστέθηκε καθρεπτισμός ως προς το επίπεδο __ocs_fmt_0__. + .value-3dmirror-could-not-determine-the-solid-s-exten = 3DMIRROR: δεν ήταν δυνατός ο προσδιορισμός της έκτασης του στερεού. + .value-3dmirror-select-exactly-one-solid-created-this = 3DMIRROR: επιλέξτε ακριβώς ένα στερεό που δημιουργήθηκε σε αυτή τη συνεδρία. + .value-3drotate-could-not-determine-the-solid-s-exten = 3DROTATE: δεν ήταν δυνατός ο προσδιορισμός της έκτασης του στερεού. + .value-3drotate-rotated-angle-deg-about-the-axis = 3DROTATE: περιστροφή __ocs_fmt_0__° γύρω από τον άξονα __ocs_fmt_1__. + .value-3drotate-select-exactly-one-solid-created-this = 3DROTATE: επιλέξτε ακριβώς ένα στερεό που δημιουργήθηκε σε αυτή τη συνεδρία. + .align-applied = ALIGN: εφαρμόστηκε. + .above = Πάνω + .accept = Αποδοχή + .add = Προσθήκη + .add-leader = Προσθήκη επεξήγησης + .align-space = Διάστημα στοίχισης: + .aligned = Στοιχισμένο + .alignment-title-case = Στοίχιση + .all = Όλα + .alternate = Εναλλακτικές + .alternate-units = Εναλλακτικές μονάδες + .angle = Γωνία + .angular-decimals-dimadec = Δεκαδικά γωνιών (DIMADEC) + .angular-unit-dimaunit = Μονάδα γωνίας (DIMAUNIT) + .angular-zero-supp-dimazin = Απόκρυψη μηδενικών γωνιών (DIMAZIN) + .annotation = Επισημείωση + .annotative = Επισημειωματικό + .apparent-intersection = Φαινομενική τομή + .apply = Εφαρμογή + .apply-cell = Εφαρμογή κελιού + .apply-margins = Εφαρμογή περιθωρίων + .arc = Τόξο + .arch = Αρχιτεκτονικές + .architectural = Αρχιτεκτονικές + .area = Εμβαδόν + .arrow-size = Μέγεθος βέλους + .arrowhead = Άκρο βέλους + .arrowhead-size = Μέγεθος άκρου βέλους + .as-displayed = Όπως εμφανίζεται + .attachment-direction = Κατεύθυνση σύνδεσης: + .attribute = Χαρακτηριστικό + .attributes = Χαρακτηριστικά + .auto = Αυτόματο + .bedit-block-tab-name-is-not-open = BEDIT: η καρτέλα μπλοκ "__ocs_fmt_0__" δεν είναι ανοικτή. + .break-entity-type-not-supported = BREAK: ο τύπος οντότητας δεν υποστηρίζεται. + .break-fragment-s = BREAK: __ocs_fmt_0__ τμήμα(τα). + .back = Πίσω + .background-color = Χρώμα φόντου + .backward = Αντίστροφα + .baseline = Γραμμή βάσης + .below = Κάτω + .block = Μπλοκ + .block-name-created = Το μπλοκ "__ocs_fmt_0__" δημιουργήθηκε. + .block-orig-new-name = Μπλοκ "__ocs_fmt_0__" → "__ocs_fmt_1__" + .block-content = Περιεχόμενο μπλοκ + .block-color = Χρώμα μπλοκ + .block-connection = Σύνδεση μπλοκ + .block-rotation = Περιστροφή μπλοκ + .blocks = Μπλοκ + .blue = Μπλε + .bulge = Κύρτωση + .boolean-failed-the-solids-may-not-overlap = Η δυαδική πράξη απέτυχε — τα στερεά ενδέχεται να μην επικαλύπτονται. + .boolean-select-exactly-two-solids-created-this = Δυαδική πράξη: επιλέξτε ακριβώς δύο στερεά που δημιουργήθηκαν σε αυτή τη συνεδρία. + .bottom = Κάτω + .bottom-center-title-case = Κάτω κέντρο + .bottom-left-title-case = Κάτω αριστερά + .bottom-right-title-case = Κάτω δεξιά + .bottom-attachment = Σύνδεση κάτω: + .bottom-center-sentence-case = Κάτω κέντρο + .bottom-left-sentence-case = Κάτω αριστερά + .bottom-right-sentence-case = Κάτω δεξιά + .bottomcenter = Κάτω κέντρο + .bottomleft = Κάτω αριστερά + .bottomright = Κάτω δεξιά + .box = Κουτί + .break = Διακοπή + .brightness = Φωτεινότητα + .by-layer = Ανά επίπεδο + .byblock = ByBlock + .bycolor = ByColor + .bylayer = ByLayer + .convtosurface-converted-n-solid-s-to-surface-s = CONVTOSURFACE: μετατράπηκαν __ocs_fmt_0__ στερεό(ά) σε επιφάνεια(ες). + .convtosurface-select-a-solid-created-this-sess = CONVTOSURFACE: επιλέξτε ένα στερεό που δημιουργήθηκε σε αυτή τη συνεδρία. + .coords-mode-label = COORDS = __ocs_fmt_0__ (__ocs_fmt_1__) + .copy-specify-destination-count-copies-so-far-a = COPY Ορίστε προορισμό [__ocs_arg_count__ αντίγραφα μέχρι τώρα | Διάταξη | Enter=τέλος | βάση __ocs_arg_bx__,__ocs_arg_by__]: + .cancel = Άκυρο + .cancel-active-command = Ακύρωση ενεργής εντολής + .cannot-delete-a-style-that-is-current-or-in-us = Δεν είναι δυνατή η διαγραφή στυλ που είναι τρέχον ή σε χρήση. + .cannot-delete-the-model-layout = Δεν είναι δυνατή η διαγραφή της διάταξης Model. + .cannot-delete-the-standard-style = Δεν είναι δυνατή η διαγραφή του στυλ Standard. + .cannot-rename-the-model-layout = Δεν είναι δυνατή η μετονομασία της διάταξης Model. + .cannot-rename-the-standard-style = Δεν είναι δυνατή η μετονομασία του στυλ Standard. + .catchment-tagged-successfully = Η λεκάνη απορροής επισημάνθηκε με επιτυχία. + .center = Κέντρο + .center-mark-dimcen = Σημάδι κέντρου (DIMCEN) + .centered = Κεντραρισμένο + .centimeters = Εκατοστά + .chamfer = Λοξότμηση + .changelog = Ιστορικό αλλαγών + .changing-a-base-colour-switches-to-custom-iced = Η αλλαγή ενός βασικού χρώματος μεταβαίνει σε Προσαρμοσμένο. Το Iced παράγει κάθε απόχρωση των στοιχείων από αυτά τα έξι χρώματα. + .circle = Κύκλος + .class-version = Έκδοση κλάσης + .clear = Εκκαθάριση + .clear-all = Εκκαθάριση όλων + .clip = Αποκοπή + .clipboard = Πρόχειρο + .clipboard-is-empty = Το πρόχειρο είναι κενό. + .close = Κλείσιμο + .closed-filled = Κλειστό γεμισμένο + .color = Χρώμα + .command-cancelled-because-the-active-drawing-s = Η εντολή ακυρώθηκε επειδή άλλαξε ο ενεργός χώρος σχεδίασης. + .command-history-navigation = Πλοήγηση στο ιστορικό εντολών + .command-label-title-case = Εντολή: + .conceptual = Εννοιολογική + .cone = Κώνος + .content = Περιεχόμενο + .content-type = Τύπος περιεχομένου: + .continue = Συνέχεια + .contrast = Αντίθεση + .coordinates = Συντεταγμένες + .copied-path = Η διαδρομή αντιγράφηκε: __ocs_fmt_0__ + .copy = Αντιγραφή + .could-not-open-file-location-error = Δεν ήταν δυνατό το άνοιγμα της θέσης αρχείου: __ocs_fmt_0__ + .could-not-rename-block-orig = Δεν ήταν δυνατή η μετονομασία του μπλοκ "__ocs_fmt_0__" + .could-not-set-default-app-err = Δεν ήταν δυνατός ο ορισμός προεπιλεγμένης εφαρμογής: __ocs_fmt_0__ + .crossing = Τέμνουσα + .current-dim-style-set-to = Το τρέχον στυλ διαστάσεων ορίστηκε σε '__ocs_fmt_0__'. + .current-multiline-style = Τρέχον στυλ πολλαπλών γραμμών: __ocs_fmt_0__ + .current-table-style-name = Τρέχον στυλ πίνακα: __ocs_fmt_0__ + .current-text-style = Τρέχον στυλ κειμένου: __ocs_fmt_0__ + .custom = Προσαρμοσμένο + .cyan = Κυανό + .cylinder = Κύλινδρος + .dataextraction-rows-rows-fname = DATAEXTRACTION __ocs_fmt_0__ γραμμές → "__ocs_fmt_1__" + .dataextraction-write-failed-e = DATAEXTRACTION: η εγγραφή απέτυχε: __ocs_fmt_0__ + .ddedit-entity-type-not-supported = DDEDIT: ο τύπος οντότητας δεν υποστηρίζεται. + .ddedit-text-updated = DDEDIT: το κείμενο ενημερώθηκε. + .dimbreak-not-yet-implemented-nothing-changed = DIMBREAK: δεν έχει υλοποιηθεί ακόμη — δεν άλλαξε τίποτα. + .dimjogline-not-yet-implemented-nothing-changed = DIMJOGLINE: δεν έχει υλοποιηθεί ακόμη — δεν άλλαξε τίποτα. + .dimspace-spacing-adjusted = DIMSPACE Οι αποστάσεις προσαρμόστηκαν. + .divide-entity-type-not-supported-or-n-2 = DIVIDE: ο τύπος οντότητας δεν υποστηρίζεται ή N < 2. + .divide-count-point-s-placed = DIVIDE: τοποθετήθηκαν __ocs_fmt_0__ σημείο(α). + .draworder-select-entities-first = DRAWORDER: επιλέξτε πρώτα οντότητες. + .danger = Κίνδυνος + .data = Δεδομένα + .data-row = Γραμμή δεδομένων: + .decimal = Δεκαδικές + .decimal-sep-ascii-dimdsep = Δεκαδικός διαχωριστής ASCII (DIMDSEP) + .decimal-separator = Δεκαδικός διαχωριστής + .decimals-dimaltd = Δεκαδικά (DIMALTD) + .decimals-dimdec = Δεκαδικά (DIMDEC) + .default-title-case = Προεπιλογή + .default-text = Προεπιλεγμένο κείμενο: + .deg-min-sec = Μοίρες/λεπτά/δεύτερα + .delete = Διαγραφή + .delete-selected-entities = Διαγραφή επιλεγμένων οντοτήτων + .description-title-case = Περιγραφή + .description-label-title-case = Περιγραφή: + .diameter = Διάμετρος + .dim-style = Στυλ διάστασης + .dimension = Διάσταση + .dimensions = Διαστάσεις + .discard = Απόρριψη + .discussions = Συζητήσεις + .discussions-load-from-github = Οι συζητήσεις φορτώνονται από το GitHub. + .display = Εμφάνιση + .distance = Απόσταση + .donate = Δωρεά + .done = Τέλος + .double = Διπλό + .draft = Πρόχειρο + .draw = Σχεδίαση + .drawing = Σχέδιο + .drawing-units = Μονάδες σχεδίου + .drop-0-ft-keep-0-in = Παράλειψη 0 ft, διατήρηση 0 in + .dynamic = Δυναμικό + .extrude-could-not-build-profile-select-a-close = EXTRUDE: δεν ήταν δυνατή η δημιουργία προφίλ. Επιλέξτε μια κλειστή οντότητα 2D (Κύκλος, LwPolyline κ.λπ.). + .extrude-entity-not-found = EXTRUDE: η οντότητα δεν βρέθηκε. + .extrude-solid-created = EXTRUDE: το στερεό δημιουργήθηκε. + .edge = Ακμή + .editing-selected = Επεξεργασία: __ocs_arg_selected__ + .elements = Στοιχεία: + .ellipse = Έλλειψη + .enable-alternate-units-dimalt = Ενεργοποίηση εναλλακτικών μονάδων (DIMALT) + .end-angle = Τελική γωνία + .endpoint = Τελικό σημείο + .engineering = Μηχανολογικές + .enter = Enter + .expected-coordinates-x-y-or-a-number-got-text = Αναμένονταν συντεταγμένες (x,y) ή αριθμός, ελήφθη: "__ocs_fmt_0__" + .extension = Προέκταση + .extension-dimdle = Προέκταση (DIMDLE) + .extension-dimexe = Προέκταση (DIMEXE) + .extents = Όρια + .find-replace-replaced-1-occurrence-of-search = FIND/REPLACE: αντικαταστάθηκε 1 εμφάνιση του "__ocs_fmt_0__". + .find-replace-replaced-replaced-occurrence-s-of = FIND/REPLACE: αντικαταστάθηκαν __ocs_fmt_0__ εμφάνιση(εις) του "__ocs_fmt_1__". + .flatshot-created-n-projected-edge-s-at-z-0 = FLATSHOT: δημιουργήθηκαν __ocs_fmt_0__ προβαλλόμενη(ες) ακμή(ές) στο Z=0. + .flatshot-select-a-solid-created-this-session = FLATSHOT: επιλέξτε ένα στερεό που δημιουργήθηκε σε αυτή τη συνεδρία. + .fade = Ξεθώριασμα + .failed-to-create-layout-e = Αποτυχία δημιουργίας διάταξης: __ocs_fmt_0__ + .feet = Πόδια + .fence = Διαδρομή + .file-locations-are-unavailable-in-the-web-appl = Οι θέσεις αρχείων δεν είναι διαθέσιμες στη διαδικτυακή εφαρμογή. + .fill-color-sentence-case = Χρώμα γεμίσματος + .fill-color-aci-dimtfillclr = Χρώμα γεμίσματος ACI (DIMTFILLCLR) + .fillet = Στρογγύλεμα + .finalize-command-repeat-last = Ολοκλήρωση εντολής / Επανάληψη τελευταίας + .finalizing = Ολοκλήρωση… + .find-and-replace = Εύρεση και αντικατάσταση + .first-seg-angle = Γωνία 1ου τμήματος: + .fit = Προσαρμογή + .fit-dimatfit = Προσαρμογή (DIMATFIT) + .fit-legacy-dimfit = Προσαρμογή (παλαιό DIMFIT) + .fixed-height = Σταθερό ύψος: + .fixed-length-dimfxl = Σταθερό μήκος (DIMFXL) + .fixed-length-ext-lines-dimfxlon = Γραμμές προέκτασης σταθερού μήκους (DIMFXLON) + .flat-shaded = Επίπεδη σκίαση + .flat-shaded-edges = Επίπεδη σκίαση + ακμές + .flow-direction = Κατεύθυνση ροής: + .font-load-failed-script-e = Η φόρτωση γραμματοσειράς απέτυχε (__ocs_fmt_0__): __ocs_fmt_1__ + .force-text-inside-dimtix = Εξαναγκασμός κειμένου εντός (DIMTIX) + .format = Μορφή + .format-dimlunit = Μορφή (DIMLUNIT) + .fraction-format-dimfrac = Μορφή κλάσματος (DIMFRAC) + .fractional = Κλασματικές + .front = Εμπρός + .full = Πλήρες + .full-file-paths-are-unavailable-in-the-web-app = Οι πλήρεις διαδρομές αρχείων δεν είναι διαθέσιμες στη διαδικτυακή εφαρμογή. + .general = Γενικά + .generate-tolerances-dimtol = Δημιουργία ανοχών (DIMTOL) + .geometry = Γεωμετρία + .gouraud-shaded = Σκίαση Gouraud + .gouraud-shaded-edges = Σκίαση Gouraud + ακμές + .green = Πράσινο + .group = Ομάδα + .group-created = Η ομάδα "__ocs_fmt_0__" δημιουργήθηκε. + .groups = Ομάδες + .h-margin = Οριζ. περιθώριο: + .hatchedit-hatch-entity-not-found = HATCHEDIT: η οντότητα διαγράμμισης δεν βρέθηκε. + .hatchedit-hatch-updated = HATCHEDIT: η διαγράμμιση ενημερώθηκε. + .hatchedit-not-a-hatch-entity = HATCHEDIT: δεν είναι οντότητα διαγράμμισης. + .handle = Αναγνωριστικό + .hatch = Διαγράμμιση + .header-row = Γραμμή κεφαλίδας: + .header-row-suppressed = Η γραμμή κεφαλίδας αποκρύπτεται + .height = Ύψος + .height-dimtxt = Ύψος (DIMTXT) + .helix = Έλικας + .hidden = Κρυφό + .hidden-line = Κρυφές γραμμές + .high = Υψηλή + .horizontal = Οριζόντια + .horizontal-inside-dimtih = Οριζόντιο εντός (DIMTIH) + .horizontal-just-dimjust = Οριζόντια στοίχιση (DIMJUST) + .horizontal-outside-dimtoh = Οριζόντιο εκτός (DIMTOH) + .hyperlink = Υπερσύνδεσμος + .image-short-pw-ph-px = IMAGE "__ocs_fmt_0__": __ocs_fmt_1__×__ocs_fmt_2__ px + .image-e = IMAGE: __ocs_fmt_0__ + .importobj-imported-file-stem-as-mesh = IMPORTOBJ: το "__ocs_fmt_0__" εισήχθη ως πλέγμα. + .importobj-target-drawing-was-closed = IMPORTOBJ: το σχέδιο προορισμού έκλεισε. + .importobj-error = IMPORTOBJ: __ocs_fmt_0__ + .interfere-created-an-interference-solid-from-t = INTERFERE: δημιουργήθηκε στερεό παρεμβολής από την επικάλυψη. + .interfere-select-exactly-two-solids-created-th = INTERFERE: επιλέξτε ακριβώς δύο στερεά που δημιουργήθηκαν σε αυτή τη συνεδρία. + .interfere-the-selected-solids-do-not-overlap = INTERFERE: τα επιλεγμένα στερεά δεν επικαλύπτονται. + .import = Εισαγωγή + .inches = Ίντσες + .index = Ευρετήριο + .insert = Εισαγωγή + .insert-block = Εισαγωγή μπλοκ + .insertion = Εισαγωγή + .installed = Εγκατεστημένο + .intersection = Τομή + .invert-selection-object-s-selected = Αντιστροφή επιλογής: επιλέχθηκαν __ocs_fmt_0__ αντικείμενο(α). + .invisible = Αόρατο + .jis = JIS + .join-count-in-object-s-joined-into-count-out = JOIN: __ocs_fmt_0__ αντικείμενο(α) ενώθηκαν σε __ocs_fmt_1__. + .jog-angle-dimjogang = Γωνία τεθλασμένης ° (DIMJOGANG) + .jogged-radius = Τεθλασμένη ακτίνα + .join = Ένωση + .keep-0-ft-drop-0-in = Διατήρηση 0 ft, παράλειψη 0 in + .keep-recent-files = Διατήρηση πρόσφατων αρχείων + .kilometers = Χιλιόμετρα + .layerstate-deleted-name = LAYERSTATE: διαγράφηκε το "__ocs_fmt_0__". + .layerstate-restored-name-restored-layer-s = LAYERSTATE: επαναφέρθηκε το "__ocs_fmt_0__" (__ocs_fmt_1__ επίπεδο/α). + .layerstate-saved-name-in-the-drawing = LAYERSTATE: αποθηκεύτηκε το "__ocs_fmt_0__" στο σχέδιο. + .layerstate-updated-name = LAYERSTATE: ενημερώθηκε το "__ocs_fmt_0__". + .layout-e = LAYOUT: __ocs_fmt_0__ + .lengthen-applied = LENGTHEN: εφαρμόστηκε. + .lengthen-entity-type-not-supported = LENGTHEN: ο τύπος οντότητας δεν υποστηρίζεται. + .loft-could-not-loft-profiles-ensure-sections-h = LOFT: δεν ήταν δυνατή η διαμόρφωση των προφίλ. Βεβαιωθείτε ότι οι τομές έχουν τον ίδιο αριθμό ακμών και είναι συμβατές. + .loft-solid-created-from-profiles = LOFT: δημιουργήθηκε στερεό από __ocs_fmt_0__ προφίλ. + .landing-distance-sentence-case = Απόσταση προσγείωσης + .landing-distance-label-sentence-case = Απόσταση προσγείωσης: + .landing-gap-sentence-case = Κενό προσγείωσης + .landing-gap-label-sentence-case = Κενό προσγείωσης: + .landscape = Οριζόντιος + .language-title-case = Γλώσσα + .language-label-title-case = Γλώσσα: + .layer = Επίπεδο + .layer-matched-to-layer = Το επίπεδο αντιστοιχίστηκε στο "__ocs_fmt_0__". + .layer-state-name-already-exists = Η κατάσταση επιπέδων "__ocs_fmt_0__" υπάρχει ήδη. + .layer-state-name-was-not-found = Η κατάσταση επιπέδων "__ocs_fmt_0__" δεν βρέθηκε. + .layer-state-name-cannot-be-empty = Το όνομα κατάστασης επιπέδων δεν μπορεί να είναι κενό. + .layers = Επίπεδα + .layout = Διάταξη + .layout-name-silindi = Η διάταξη "__ocs_fmt_0__" διαγράφηκε + .layout-new-name-created-use-mview-to-add-a-vie = Η διάταξη "__ocs_fmt_0__" δημιουργήθηκε — χρησιμοποιήστε MVIEW για να προσθέσετε θύρα προβολής + .layout-orig-new-name = Διάταξη "__ocs_fmt_0__" → "__ocs_fmt_1__" + .layout-name-created = Η διάταξη '__ocs_fmt_0__' δημιουργήθηκε. + .layout-name-deleted = Η διάταξη '__ocs_fmt_0__' διαγράφηκε. + .layout-manager = Διαχείριση διατάξεων + .layout-name-cannot-be-empty = Το όνομα διάταξης δεν μπορεί να είναι κενό. + .layout-renamed-old-name-new-name = Η διάταξη μετονομάστηκε: '__ocs_fmt_0__' → '__ocs_fmt_1__' + .leader = Επεξήγηση + .leader-format = Μορφή επεξήγησης + .leader-structure = Δομή επεξήγησης + .leaders = Επεξηγήσεις + .leading-trailing = Αρχικά και τελικά + .left = Αριστερά + .left-attachment = Σύνδεση αριστερά: + .left-to-right-dimtxtdirection = Από αριστερά προς δεξιά (DIMTXTDIRECTION) + .length = Μήκος + .light = Φως + .limits-generation-dimlim = Δημιουργία ορίων (DIMLIM) + .line = Γραμμή + .linear = Γραμμική + .lines = Γραμμές + .linetype-title-case = Τύπος γραμμής + .linetype-scale = Κλίμακα τύπου γραμμής + .lineweight-title-case = Πάχος γραμμής + .list = Λίστα + .loaded = Φορτώθηκε + .loading-discussions = Φόρτωση συζητήσεων… + .loading-videos = Φόρτωση βίντεο… + .load = Φόρτωση… + .low = Χαμηλή + .measure-entity-type-not-supported-or-distance = MEASURE: ο τύπος οντότητας δεν υποστηρίζεται ή η απόσταση είναι πολύ μεγάλη. + .measure-count-point-s-placed = MEASURE: τοποθετήθηκαν __ocs_fmt_0__ σημείο(α). + .mleaderalign-leaders-aligned = MLEADERALIGN Οι επεξηγήσεις στοιχίστηκαν. + .mleadercollect-leaders-collected = MLEADERCOLLECT Οι επεξηγήσεις συγκεντρώθηκαν. + .model-uppercase = MODEL + .ms-is-only-available-in-paper-space-layouts = Το MS είναι διαθέσιμο μόνο σε διατάξεις χώρου χαρτιού. + .mspace = MSPACE + .mtext = Mtext + .mview-the-clipping-boundary-has-no-usable-area = MVIEW: το όριο αποκοπής δεν έχει αξιοποιήσιμο εμβαδόν. + .magenta = Ματζέντα + .manage = Διαχείριση + .meters = Μέτρα + .middle = Μέση + .middle-center-title-case = Μέση κέντρο + .middle-left-title-case = Μέση αριστερά + .middle-right-title-case = Μέση δεξιά + .middle-center-sentence-case = Μέση κέντρο + .middle-left-sentence-case = Μέση αριστερά + .middle-right-sentence-case = Μέση δεξιά + .middleleft = Μέση αριστερά + .middleright = Μέση δεξιά + .midpoint = Μέσο + .miles = Μίλια + .millimeters = Χιλιοστά + .model-title-case = Μοντέλο + .modify = Τροποποίηση + .move = Μετακίνηση + .multiple = Πολλαπλά + .multiplier-dimaltf = Πολλαπλασιαστής (DIMALTF) + .name-title-case = Όνομα + .name-label-title-case = Όνομα: + .nearest = Πλησιέστερο + .new = Νέο + .no = Όχι + .no-drawing-open-use-new-or-open-first = Δεν υπάρχει ανοικτό σχέδιο — χρησιμοποιήστε πρώτα Νέο ή Άνοιγμα. + .no-groups-found-for-selected-objects = Δεν βρέθηκαν ομάδες για τα επιλεγμένα αντικείμενα. + .no-plugin-handled-command = Κανένα πρόσθετο δεν χειρίστηκε: __ocs_fmt_0__ + .no-viewport-found-in-this-layout = Δεν βρέθηκε θύρα προβολής σε αυτή τη διάταξη. + .node = Κόμβος + .none-title-case = Κανένα + .normal = Κανονικό + .nothing-found-at-that-point = Δεν βρέθηκε τίποτα σε αυτό το σημείο. + .nothing-to-redo = Δεν υπάρχει τίποτα για επανάληψη. + .nothing-to-undo = Δεν υπάρχει τίποτα για αναίρεση. + .ok = OK + .object-title-case = Αντικείμενο + .object-is-on-locked-layer-layer-unlock-the-layer-to-edit-it = Το αντικείμενο βρίσκεται στο κλειδωμένο επίπεδο "__ocs_fmt_0__" — ξεκλειδώστε το επίπεδο για να το επεξεργαστείτε. + .object-is-on-locked-layer-layer-unlock-the-layer-to-select-or-edit-it = Το αντικείμενο βρίσκεται στο κλειδωμένο επίπεδο "__ocs_fmt_0__" — ξεκλειδώστε το επίπεδο για να το επιλέξετε ή να το επεξεργαστείτε. + .oblique = Λοξή (°): + .oblique-angle = Γωνία λοξότητας + .off = Ανενεργό + .offset = Παράλληλη μετατόπιση + .on = Ενεργό + .open = Άνοιγμα + .open-dwg-dxf-not-yet-implemented = Άνοιγμα DWG/DXF: δεν έχει υλοποιηθεί ακόμη. + .open-cancelled = Το άνοιγμα ακυρώθηκε: "__ocs_fmt_0__" + .open-failed-e = Το άνοιγμα απέτυχε: __ocs_fmt_0__ + .open-or-create-a-drawing-to-add-a-layout = Ανοίξτε ή δημιουργήστε ένα σχέδιο για να προσθέσετε διάταξη. + .open-or-create-a-drawing-to-manage-layer-state = Ανοίξτε ή δημιουργήστε ένα σχέδιο για να διαχειριστείτε καταστάσεις επιπέδων. + .open-or-create-a-drawing-to-manage-layouts = Ανοίξτε ή δημιουργήστε ένα σχέδιο για να διαχειριστείτε διατάξεις. + .open-or-create-a-drawing-to-switch-layouts = Ανοίξτε ή δημιουργήστε ένα σχέδιο για να αλλάξετε διάταξη. + .opened-file-location = Άνοιξε η θέση αρχείου: __ocs_fmt_0__ + .opening-name-size-label = Άνοιγμα "__ocs_fmt_0__" (__ocs_fmt_1__)… + .options-title-case = Επιλογές + .origin = Αρχή + .ortho = Ορθογωνικά + .output = Έξοδος + .outside = Εκτός + .outside-limits = Εκτός ορίων. + .overall-scale = Συνολική κλίμακα + .overwrite = Αντικατάσταση + .pedit-applied = PEDIT: εφαρμόστηκε. + .pedit-cannot-convert-this-entity = PEDIT: δεν είναι δυνατή η μετατροπή αυτής της οντότητας. + .pedit-operation-not-applicable-to-this-entity = PEDIT: η ενέργεια δεν εφαρμόζεται σε αυτή την οντότητα. + .perf = PERF + .polysolid-built-a-wall-solid-from-used-segment = POLYSOLID: δημιουργήθηκε στερεό τοίχου από __ocs_fmt_0__ τμήμα(τα) (πλάτος __ocs_fmt_1__, ύψος __ocs_fmt_2__). + .polysolid-select-a-polyline-first = POLYSOLID: επιλέξτε πρώτα μια πολυγραμμή. + .polysolid-the-polyline-has-no-usable-segments = POLYSOLID: η πολυγραμμή δεν έχει αξιοποιήσιμα τμήματα. + .pspace = PSPACE + .pyramid-could-not-build-all-faces = PYRAMID: δεν ήταν δυνατή η δημιουργία όλων των εδρών. + .pyramid-created-a-n-sided-pyramid-radius-radiu = PYRAMID: δημιουργήθηκε πυραμίδα με __ocs_fmt_0__ πλευρές (ακτίνα __ocs_fmt_1__, ύψος __ocs_fmt_2__). + .pyramid-radius-and-height-must-be-positive = PYRAMID: η ακτίνα και το ύψος πρέπει να είναι θετικά. + .pyramid-tessellation-failed = PYRAMID: η τριγωνοποίηση απέτυχε. + .pyramid-tessellation-produced-no-geometry = PYRAMID: η τριγωνοποίηση δεν παρήγαγε γεωμετρία. + .page-setup = Διαμόρφωση σελίδας + .paper = Χαρτί + .parallel = Παράλληλα + .parsing-entities = Ανάλυση οντοτήτων… + .paste = Επικόλληση + .perpendicular = Κάθετα + .photometric = Φωτομετρικές + .pick-a-point = Επιλέξτε σημείο + .pick-an-object = Επιλέξτε αντικείμενο + .pinned = Καρφιτσωμένα + .place-text-manually-dimupt = Χειροκίνητη τοποθέτηση κειμένου (DIMUPT) + .plot = Εκτύπωση + .plot-style = Στυλ εκτύπωσης + .plot-style-loaded-color-entries = Το στυλ εκτύπωσης '__ocs_fmt_0__' φορτώθηκε (__ocs_fmt_1__ καταχωρίσεις χρώματος). + .plot-style-table-cleared = Ο πίνακας στυλ εκτύπωσης εκκαθαρίστηκε. + .plot-style-table-saved-to = Ο πίνακας στυλ εκτύπωσης αποθηκεύτηκε στο "__ocs_fmt_0__". + .plot-window-x0-2-y0-2-to-x1-2-y1-2 = Παράθυρο εκτύπωσης: __ocs_fmt_0__,__ocs_fmt_1__ έως __ocs_fmt_2__,__ocs_fmt_3__ + .plot-window-x1-2-y1-2-to-x2-2-y2-2 = Παράθυρο εκτύπωσης: __ocs_fmt_0__,__ocs_fmt_1__ έως __ocs_fmt_2__,__ocs_fmt_3__ + .plugin-id-failed-to-load-e = Το πρόσθετο '__ocs_fmt_0__' απέτυχε να φορτωθεί: __ocs_fmt_1__ + .plugin-manager = Διαχείριση προσθέτων + .point = Σημείο + .point-cloud = Νέφος σημείων + .polyline = Πολυγραμμή + .portrait = Κατακόρυφος + .position = Θέση + .position-x = Θέση X + .position-y = Θέση Y + .position-z = Θέση Z + .precision = Ακρίβεια + .preset = Προρύθμιση + .previous = Προηγούμενο + .primary = Κύριες + .primary-units = Κύριες μονάδες + .print = Εκτύπωση + .print-failed-e = Η εκτύπωση απέτυχε: __ocs_fmt_0__ + .prompt = Προτροπή + .properties = Ιδιότητες + .properties-matched-to-object-s = Οι ιδιότητες αντιστοιχίστηκαν σε __ocs_fmt_0__ αντικείμενο(α). + .qselect-object-s-selected = QSELECT: επιλέχθηκαν __ocs_fmt_0__ αντικείμενο(α). + .quadrant = Τεταρτημόριο + .quality = Ποιότητα + .revolve-could-not-revolve-profile = REVOLVE: δεν ήταν δυνατή η περιστροφή του προφίλ. + .revolve-entity-not-found = REVOLVE: η οντότητα δεν βρέθηκε. + .revolve-solid-created-0 = REVOLVE: το στερεό δημιουργήθηκε (__ocs_fmt_0__°). + .radians = Ακτίνια + .radius = Ακτίνα + .ray = Ημιευθεία + .read-only-session-read-only-saving-is-disabled = Συνεδρία μόνο για ανάγνωση (--read-only): η αποθήκευση είναι απενεργοποιημένη. + .realistic = Ρεαλιστική + .recent-documents = Πρόσφατα έγγραφα + .recent-files = Πρόσφατα αρχεία + .recent-file-no-longer-exists = Το πρόσφατο αρχείο δεν υπάρχει πλέον: __ocs_fmt_0__ + .red = Κόκκινο + .redo-last-label = Επανάληψη: __ocs_fmt_0__ + .reference = Αναφορά + .reference-point = Σημείο αναφοράς + .remove-leader = Αφαίρεση επεξήγησης + .rename = Μετονομασία + .renamed-old-new = Μετονομάστηκε '__ocs_fmt_0__' → '__ocs_fmt_1__'. + .replace = Αντικατάσταση + .replacement-text = Κείμενο αντικατάστασης + .report = Αναφορά + .requires-0-or-1-or-multiple-or-single = Απαιτείται 0 Ή 1 Ή MULTIPLE Ή SINGLE. + .requires-single-or-multiple = Απαιτείται Single ή Multiple. + .restore = Επαναφορά + .retry = Επανάληψη + .reverse = Αντιστροφή + .right = Δεξιά + .right-attachment = Σύνδεση δεξιά: + .rotate = Περιστροφή + .rotation = Περιστροφή + .round-off-dimaltrnd = Στρογγυλοποίηση (DIMALTRND) + .round-off-dimrnd = Στρογγυλοποίηση (DIMRND) + .section-could-not-build-the-cutting-plane = SECTION: δεν ήταν δυνατή η δημιουργία του επιπέδου τομής. + .section-could-not-determine-the-solid-s-extent = SECTION: δεν ήταν δυνατός ο προσδιορισμός της έκτασης του στερεού. + .section-created-section-line-s-at-value = SECTION: δημιουργήθηκαν __ocs_fmt_0__ γραμμή(ές) τομής στο __ocs_fmt_1__=__ocs_fmt_2__. + .section-select-exactly-one-solid-created-this = SECTION: επιλέξτε ακριβώς ένα στερεό που δημιουργήθηκε σε αυτή τη συνεδρία. + .section-solid-modelling-is-unavailable-in-this = SECTION: η μοντελοποίηση στερεών δεν είναι διαθέσιμη σε αυτή την έκδοση. + .section-the-plane-does-not-cross-the-solid = SECTION: το επίπεδο δεν τέμνει το στερεό. + .slice-failed-the-plane-may-not-cross-the-solid = Το SLICE απέτυχε — το επίπεδο ενδέχεται να μην τέμνει το στερεό. + .slice-could-not-determine-the-solid-s-extent = SLICE: δεν ήταν δυνατός ο προσδιορισμός της έκτασης του στερεού. + .slice-cut-at-ax-value-kept-the-half = SLICE: τομή στο __ocs_fmt_0__=__ocs_fmt_1__, διατηρήθηκε το __ocs_fmt_2__ ήμισυ. + .slice-select-exactly-one-solid-created-this-se = SLICE: επιλέξτε ακριβώς ένα στερεό που δημιουργήθηκε σε αυτή τη συνεδρία. + .slice-the-plane-does-not-cross-the-solid-on-th = SLICE: το επίπεδο δεν τέμνει το στερεό στην πλευρά που διατηρείται. + .splinefit-fit-a-spline-through-n-points = SPLINEFIT: προσαρμογή spline μέσα από __ocs_fmt_0__ σημεία. + .splinefit-need-at-least-3-points = SPLINEFIT: απαιτούνται τουλάχιστον 3 σημεία. + .splinefit-select-a-polyline-to-fit-a-spline-th = SPLINEFIT: επιλέξτε μια πολυγραμμή για προσαρμογή spline. + .stepout-exported-to = STEPOUT: εξήχθη στο "__ocs_fmt_0__" + .stepout-no-3d-mesh-data-in-this-drawing = STEPOUT: δεν υπάρχουν δεδομένα πλέγματος 3D σε αυτό το σχέδιο. + .stepout-error = STEPOUT: __ocs_fmt_0__ + .stlout-exported-to = STLOUT: εξήχθη στο "__ocs_fmt_0__" + .stlout-no-3d-mesh-data-in-this-drawing = STLOUT: δεν υπάρχουν δεδομένα πλέγματος 3D σε αυτό το σχέδιο. + .stlout-error = STLOUT: __ocs_fmt_0__ + .stretch-nothing-crosses-the-window = STRETCH: τίποτα δεν τέμνει το παράθυρο. + .stretch-count-entity-ies-stretched = STRETCH: __ocs_fmt_0__ οντότητα(ες) επεκτάθηκαν. + .sweep-could-not-sweep-profile-along-path-use-a = SWEEP: δεν ήταν δυνατή η σάρωση του προφίλ κατά μήκος της διαδρομής. Χρησιμοποιήστε κλειστό προφίλ 2D και διαδρομή Line ή Polyline. + .sweep-solid-created = SWEEP: το στερεό δημιουργήθηκε. + .save = Αποθήκευση + .save-as = Αποθήκευση ως + .save-drawing-as = Αποθήκευση σχεδίου ως + .save-already-running-for-this-drawing = Η αποθήκευση εκτελείται ήδη για αυτό το σχέδιο. + .save-anyway = Αποθήκευση ούτως ή άλλως + .save-error-e = Σφάλμα αποθήκευσης: __ocs_fmt_0__ + .save-in-source-version = Αποθήκευση στην αρχική έκδοση + .save-the-drawing-before-copying-its-file-path = Αποθηκεύστε το σχέδιο πριν αντιγράψετε τη διαδρομή του αρχείου του. + .save-the-drawing-before-opening-its-file-locat = Αποθηκεύστε το σχέδιο πριν ανοίξετε τη θέση του αρχείου του. + .saved-download-but-recent-copy-could-not-be-st = Η λήψη αποθηκεύτηκε, αλλά δεν ήταν δυνατή η αποθήκευση του πρόσφατου αντιγράφου: __ocs_fmt_0__ + .scale = Κλίμακα + .scene-cleared = Η σκηνή εκκαθαρίστηκε. + .scene-cleared-standard-linetypes-loaded = Η σκηνή εκκαθαρίστηκε. Φορτώθηκαν οι τυπικοί τύποι γραμμών. + .scientific = Επιστημονικές + .search-layers = Αναζήτηση επιπέδων… + .second-seg-angle = Γωνία 2ου τμήματος: + .select-all = Επιλογή όλων + .select-similar-added = Επιλογή παρόμοιων: προστέθηκαν __ocs_fmt_0__. + .select-a-tangent-object = Επιλέξτε ένα εφαπτόμενο αντικείμενο. + .select-one-object-first-then-run-objectscale = Επιλέξτε πρώτα ένα αντικείμενο και μετά εκτελέστε OBJECTSCALE. + .send-feedback = Αποστολή σχολίων + .sent-to-printer-printer = Στάλθηκε στον εκτυπωτή: __ocs_fmt_0__ + .set-current = Ορισμός ως τρέχον + .shade-plot = Σκίαση εκτύπωσης + .shadow-flags = Σημαίες σκιάς + .single = Μονό + .size = Μέγεθος + .snap-override-label-next-pick-only = Παράκαμψη έλξης: __ocs_fmt_0__ (μόνο για την επόμενη επιλογή). + .solid-created = Το στερεό δημιουργήθηκε. + .source-object-not-found = Το αντικείμενο προέλευσης δεν βρέθηκε. + .spacing = Απόσταση + .spacing-dimdli = Απόσταση (DIMDLI) + .sphere = Σφαίρα + .spline = Spline + .sponsors = Χορηγοί + .standard = Τυπικό + .start = Έναρξη + .start-angle = Αρχική γωνία + .status = Κατάσταση + .stretch = Επιμήκυνση + .style-name-created = Το στυλ '__ocs_fmt_0__' δημιουργήθηκε. + .style-name-deleted = Το στυλ '__ocs_fmt_0__' διαγράφηκε. + .style-new-already-exists = Το στυλ '__ocs_fmt_0__' υπάρχει ήδη. + .success = Επιτυχία + .suffix-dimapost = Κατάληξη (DIMAPOST) + .suffix-dimpost = Κατάληξη (DIMPOST) + .support-on-patreon = Υποστήριξη στο Patreon + .supporters = Υποστηρικτές + .suppress-0-ft-0-in = Απόκρυψη 0 ft και 0 in + .suppress-leading = Απόκρυψη αρχικών + .suppress-leading-trailing = Απόκρυψη αρχικών και τελικών + .suppress-leading-zeros = Απόκρυψη αρχικών μηδενικών + .suppress-none = Καμία απόκρυψη + .suppress-outside-arrows-dimsoxd = Απόκρυψη εξωτερικών βελών (DIMSOXD) + .suppress-trailing = Απόκρυψη τελικών + .suppress-trailing-zeros = Απόκρυψη τελικών μηδενικών + .switched-to-layout-name = Μετάβαση στη διάταξη '__ocs_fmt_0__'. + .textedit-selected-entity-is-not-text = TEXTEDIT: η επιλεγμένη οντότητα δεν είναι κείμενο. + .texteditmode-set-to-display-val = Το TEXTEDITMODE ορίστηκε σε __ocs_fmt_0__ + .table = Πίνακας + .tag = Ετικέτα + .tangent = Εφαπτομένη + .text = Κείμενο + .text-alignment = Στοίχιση κειμένου: + .text-always-left = Κείμενο πάντα αριστερά + .text-angle = Γωνία κειμένου: + .text-color-sentence-case = Χρώμα κειμένου + .text-color-aci = Χρώμα κειμένου (ACI): + .text-color-aci-dimclrt = Χρώμα κειμένου ACI (DIMCLRT) + .text-fill-mode-dimtfill = Λειτουργία γεμίσματος κειμένου (DIMTFILL) + .text-frame = Πλαίσιο κειμένου + .text-gap-dimgap = Κενό κειμένου (DIMGAP) + .text-height-sentence-case = Ύψος κειμένου + .text-height-label-sentence-case = Ύψος κειμένου: + .text-movement = Μετακίνηση κειμένου + .text-movement-dimtmove = Μετακίνηση κειμένου (DIMTMOVE) + .text-out-first = Κείμενο πρώτα εκτός + .text-style = Στυλ κειμένου + .text-to-find = Κείμενο προς εύρεση + .the-selected-object-does-not-support-annotatio = Το επιλεγμένο αντικείμενο δεν υποστηρίζει κλίμακες επισημείωσης. + .tick-size-dimtsz = Μέγεθος υποδιαίρεσης (DIMTSZ) + .title = Τίτλος + .title-row = Γραμμή τίτλου: + .title-row-suppressed = Η γραμμή τίτλου αποκρύπτεται + .toggle-dynamic-input = Εναλλαγή δυναμικής εισαγωγής + .toggle-object-snap = Εναλλαγή έλξης αντικειμένων + .toggle-object-snap-tracking = Εναλλαγή ιχνηλάτησης έλξης αντικειμένων + .toggle-ortho = Εναλλαγή ορθογωνικότητας + .toggle-polar-tracking = Εναλλαγή πολικής ιχνηλάτησης + .tol-decimals-dimalttd = Δεκαδικά ανοχής (DIMALTTD) + .tol-zero-supp-dimalttz = Απόκρυψη μηδενικών ανοχής (DIMALTTZ) + .tol-decimals-dimtdec = Δεκαδικά ανοχής (DIMTDEC) + .tol-vert-just-dimtolj = Κατακόρυφη στοίχιση ανοχής (DIMTOLJ) + .tol-zero-supp-dimtzin = Απόκρυψη μηδενικών ανοχής (DIMTZIN) + .tolerance = Ανοχή + .tolerance-precision = Ακρίβεια ανοχής + .tolerances = Ανοχές + .tool-palettes = + Παλέτες + εργαλείων + .top = Πάνω + .top-center-title-case = Πάνω κέντρο + .top-left-title-case = Πάνω αριστερά + .top-right-title-case = Πάνω δεξιά + .top-attachment = Σύνδεση πάνω: + .top-center-sentence-case = Πάνω κέντρο + .top-left-sentence-case = Πάνω αριστερά + .top-right-sentence-case = Πάνω δεξιά + .top-to-bottom = Από πάνω προς τα κάτω + .topcenter = Πάνω κέντρο + .topleft = Πάνω αριστερά + .topright = Πάνω δεξιά + .torus = Τόρος + .transparency = Διαφάνεια + .truetype-system = TrueType (συστήματος) + .ttr = Ttr + .tutorials = Οδηγοί + .type = Τύπος + .ucs-world = UCS: Παγκόσμιο + .ucs = UCS: __ocs_fmt_0__ + .unable-to-change-ui-language-error = Αδυναμία αλλαγής γλώσσας περιβάλλοντος: __ocs_fmt_0__ + .undo = Αναίρεση + .undo-last-label = Αναίρεση: __ocs_fmt_0__ + .uniform-scale = Ομοιόμορφη κλίμακα + .unit = Μονάδα + .unit-format-dimaltu = Μορφή μονάδας (DIMALTU) + .unit-format-dimunit = Μορφή μονάδας (DIMUNIT) + .unitless = Χωρίς μονάδες + .unknown = Άγνωστο + .unsaved-changes = Μη αποθηκευμένες αλλαγές + .unsupported-file-type = Μη υποστηριζόμενος τύπος αρχείου: __ocs_fmt_0__ + .up = Πάνω + .update-available = Διαθέσιμη ενημέρωση + .upside-down = Ανάποδα + .v-margin = Κατακ. περιθώριο: + .vplayer-frozen-count-layer-s-frozen-in-viewpor = VPLAYER: __ocs_fmt_0__ επίπεδο(α) πάγωσαν στη θύρα προβολής. + .vplayer-thawed-count-layer-s-thawed-in-viewpor = VPLAYER: __ocs_fmt_0__ επίπεδο(α) ξεπάγωσαν στη θύρα προβολής. + .value = Τιμή + .version = Έκδοση + .vertical = Κατακόρυφα + .vertical-pos-dimtad = Κατακόρυφη θέση (DIMTAD) + .vertical-pos-dimtvp = Κατακόρυφη θέση (DIMTVP) + .videos = Βίντεο + .videos-load-from-the-internet = Τα βίντεο φορτώνονται από το διαδίκτυο. + .view = Προβολή + .view-home = Προβολή: Αρχική + .view-value = Προβολή: __ocs_fmt_0__ + .viewport = Θύρα προβολής + .viewport-visual-style-label = Οπτικό στυλ θύρας προβολής: __ocs_fmt_0__ + .visual-style = Οπτικό στυλ + .visual-style-label = Οπτικό στυλ: __ocs_fmt_0__ + .wblock-saved-block-name = WBLOCK Αποθηκεύτηκε "__ocs_fmt_0__" → "__ocs_fmt_1__" + .wblock-save-failed-error = Η αποθήκευση WBLOCK απέτυχε: __ocs_fmt_0__ + .web = Ιστός + .wedge = Σφήνα + .weight = Πάχος + .welcome = Καλώς ορίσατε + .white = Λευκό + .width = Πλάτος + .width-factor-title-case = Συντελεστής πλάτους + .width-factor-label-title-case = Συντελεστής πλάτους: + .width-factor-sentence-case = Συντελεστής πλάτους + .window = Παράθυρο + .wipeout = Απόκρυψη περιοχής + .wireframe = Συρμάτινο πλέγμα + .with-text = Με κείμενο + .world = Παγκόσμιο + .xattach-e = XATTACH: __ocs_fmt_0__ + .xline = XLine + .xref-not-found = XREF Δεν βρέθηκε: "__ocs_fmt_0__" (__ocs_fmt_1__) + .xref-unloaded-skipped = XREF Αποφορτωμένο (παραλείφθηκε): "__ocs_fmt_0__" + .yards = Γιάρδες + .yellow = Κίτρινο + .yes = Ναι + .zero-suppress-dimaltz = Απόκρυψη μηδενικών (DIMALTZ) + .zero-suppress-dimzin = Απόκρυψη μηδενικών (DIMZIN) + .zoom-extents = Ζουμ στα όρια + .zoom-in = Μεγέθυνση + .zoom-out = Σμίκρυνση + .zoom-window = Ζουμ παραθύρου + .command-lowercase = εντολή + .e-g-arial = π.χ. Arial + .linetype-lowercase = τύπος γραμμής + .lineweight-lowercase = πάχος γραμμής + .object-lowercase = αντικείμενο + .options-lowercase = επιλογές + .units = μονάδες + .count-object-s-added-to-selection = __ocs_fmt_0__ αντικείμενο(α) προστέθηκαν στην επιλογή. + .count-object-s-pasted = __ocs_fmt_0__ αντικείμενο(α) επικολλήθηκαν. + .label-count-noun-created = __ocs_fmt_0__: δημιουργήθηκαν __ocs_fmt_1__ __ocs_fmt_2__. + .acquired = __ocs_fmt_0__ ελήφθη. + .alias-es-applied = __ocs_fmt_0__ ψευδώνυμο(α) εφαρμόστηκαν. + .group-s-dissolved = __ocs_fmt_0__ ομάδα(ες) διαλύθηκαν. + .layer-s-turned = __ocs_fmt_0__ επίπεδο(α) τέθηκαν σε __ocs_fmt_1__ + .layer-s = __ocs_fmt_0__ επίπεδο(α) __ocs_fmt_1__ + .mod-shortcuts = ── Συντομεύσεις __ocs_arg_MOD__ ────────────────────────────────────── + .custom-overrides-shortcuts-set = ── Προσαρμοσμένες παρακάμψεις (SHORTCUTS SET) ────────────────── + .function-keys = ── Πλήκτρα λειτουργιών ────────────────────────────────────── + .other-keys = ── Άλλα πλήκτρα ────────────────────────────────────────── + .prefix = Πρόθεμα + .suffix = Κατάληξη + +errors = + .save-warning = Προειδοποίηση αποθήκευσης + .unable-to-save-drawing = Αδυναμία αποθήκευσης σχεδίου + .warning = Προειδοποίηση + +command = + .name-select-objects-then-press-enter = __ocs_arg_name__ επιλέξτε αντικείμενα και πατήστε Enter: + .name-which-register-1-5 = __ocs_arg_name__ ποιος καταχωρητής; [1-5]: + .name-slot-new-value = __ocs_arg_name____ocs_arg_slot__ νέα τιμή: + .cancel = *Άκυρο* + .add-alias = + Προσθήκη ψευδωνύμου + .alias-title-case = Ψευδώνυμο + .cannot-add-a-vertex-here = Δεν είναι δυνατή η προσθήκη κορυφής εδώ. + .cannot-break-at-this-vertex = Δεν είναι δυνατή η διακοπή σε αυτή την κορυφή. + .cannot-place-the-new-vertex = Δεν είναι δυνατή η τοποθέτηση της νέας κορυφής. + .command = Εντολή + .command-aliases = Ψευδώνυμα εντολών + .key = Πλήκτρο + .keyboard-shortcuts = Συντομεύσεις πληκτρολογίου + .layer-0-and-the-current-layer-can-t-be-deleted = Το επίπεδο "0" και το τρέχον επίπεδο δεν μπορούν να διαγραφούν — παραλείφθηκαν. + .no-drawing-open-use-new-or-open-to-start-a-dra = Δεν υπάρχει ανοικτό σχέδιο. Χρησιμοποιήστε NEW ή OPEN για να ξεκινήσετε ένα σχέδιο. + .object-is-on-locked-layer-layer-unlock-the-lay = Το αντικείμενο βρίσκεται στο κλειδωμένο επίπεδο "__ocs_fmt_0__" — ξεκλειδώστε το επίπεδο για να επεξεργαστείτε τα χαρακτηριστικά του. + .pan-ended = Το PAN τερματίστηκε. + .polyline-broken-at-vertex = Η πολυγραμμή διακόπηκε στην κορυφή. + .rename-select-the-object-type-to-rename = RENAME Επιλέξτε τον τύπο αντικειμένου προς μετονομασία: + .rename-type-enter-the-current-name = RENAME __ocs_arg_type__ Δώστε το τρέχον όνομα: + .rename-type-rename-old-to = RENAME __ocs_arg_type__ Μετονομασία του "__ocs_arg_old__" σε: + .specify-new-vertex-location = Ορίστε νέα θέση κορυφής: + .type-shortcuts-set-key-cmd-to-add-custom-short = Πληκτρολογήστε SHORTCUTS SET <πλήκτρο> <εντολή> για να προσθέσετε προσαρμοσμένες συντομεύσεις. + .type-an-alias-and-the-command-it-runs-e-g-l-li = Πληκτρολογήστε ένα ψευδώνυμο και την εντολή που εκτελεί (π.χ. L → LINE). Η Εφαρμογή το αποθηκεύει στο ocad.pgp· το κλείσιμο απορρίπτει τις μη εφαρμοσμένες αλλαγές. + .unknown-command-cmd = Άγνωστη εντολή: __ocs_fmt_0__ + .alias-lowercase = ψευδώνυμο + .label = __ocs_fmt_0__: + .expected-a-number-got-raw = __ocs_fmt_0__: αναμενόταν αριθμός, ελήφθη "__ocs_fmt_1__" + .tcount-select-text-objects-then-press-enter = TCOUNT επιλέξτε αντικείμενα κειμένου και πατήστε Enter: + .tcount-starting-number-start = TCOUNT αρχικός αριθμός <__ocs_fmt_0__>: + .tcount-increment-increment = TCOUNT βήμα <__ocs_fmt_0__>: + .tcount-placement-overwrite-prefix-suffix-overw = TCOUNT τοποθέτηση [Αντικατάσταση/Πρόθεμα/Κατάληξη] <Αντικατάσταση>: + +file = + .parse-ms-purge-ms-caches-ms-xref-ms-total-ms = ανάλυση __ocs_fmt_0__ms · εκκαθάριση __ocs_fmt_1__ms · κρυφές μνήμες __ocs_fmt_2__ms · xref __ocs_fmt_3__ms · σύνολο __ocs_fmt_4__ms + .archive-save-the-drawing-first-it-has-no-file = ARCHIVE: αποθηκεύστε πρώτα το σχέδιο (δεν έχει ακόμη διαδρομή αρχείου). + .autosaved-1-drawing = Αυτόματη αποθήκευση 1 σχεδίου + .background-colour-default-black-darkgray-gray = BACKGROUND χρώμα [Προεπιλογή/Μαύρο/Σκούρο γκρι/Γκρι/Ανοιχτό γκρι/Λευκό] ή R G B (0–255): + .background-reset-to-default = Το φόντο επαναφέρθηκε στην προεπιλογή. + .background-rgb = Φόντο: rgb(__ocs_fmt_0__, __ocs_fmt_1__, __ocs_fmt_2__) + .created-new-ctb-table-aci-aci-updated = Δημιουργήθηκε νέος πίνακας CTB, το ACI __ocs_fmt_0__ ενημερώθηκε. + .default-save-format = Προεπιλεγμένη μορφή αποθήκευσης: + .do-you-want-to-save-changes-to-name = Θέλετε να αποθηκεύσετε τις αλλαγές στο "__ocs_arg_name__"; + .drawing-changed-on-disk = Το σχέδιο άλλαξε στον δίσκο + .drawing-units-insunits-click-to-change = + Μονάδες σχεδίου (INSUNITS) + Κάντε κλικ για αλλαγή + .drawing-changed-on-disk-while-it-was-opening-s = Το σχέδιο άλλαξε στον δίσκο ενώ άνοιγε· η αποθήκευση θα απαιτήσει επίλυση διένεξης. + .edit-lease-active-warning-external-change-chec = Ενεργή μίσθωση επεξεργασίας· __ocs_fmt_0__. Οι έλεγχοι εξωτερικών αλλαγών παραμένουν ενεργοί. + .files-you-open-will-show-up-here = Τα αρχεία που ανοίγετε θα εμφανίζονται εδώ. + .new-drawing = Νέο σχέδιο + .no-plot-style-table-loaded-load-or-create-one = Δεν έχει φορτωθεί πίνακας στυλ εκτύπωσης. Φορτώστε ή δημιουργήστε πρώτα έναν. + .nothing-to-plot-model-space-contains-no-printa = Τίποτα για εκτύπωση: ο χώρος μοντέλου δεν περιέχει εκτυπώσιμη γεωμετρία. + .oops-nothing-to-restore = OOPS: δεν υπάρχει τίποτα για επαναφορά. + .oops-restored-n-object-s = OOPS: επαναφέρθηκαν __ocs_fmt_0__ αντικείμενο(α). + .open-cad-studio-ready = Το Open CAD Studio είναι έτοιμο. + .open-discussions-on-github = Άνοιγμα συζητήσεων στο GitHub + .open-file-title-case = Άνοιγμα αρχείου + .open-file-picker-title-case = Άνοιγμα αρχείου… + .open-and-save = Άνοιγμα και αποθήκευση + .open-playlist-on-youtube = Άνοιγμα λίστας αναπαραγωγής στο YouTube + .opened-name-entity-count-entities = Άνοιξε το "__ocs_fmt_0__" — __ocs_fmt_1__ οντότητες + .opened-printer-properties = Άνοιξαν οι ιδιότητες εκτυπωτή. + .opened-read-only-against-other-editors-error = Άνοιξε μόνο για ανάγνωση λόγω άλλων προγραμμάτων επεξεργασίας: __ocs_fmt_0__ + .page-setup-applied-to-the-layout = Η διαμόρφωση σελίδας εφαρμόστηκε στη διάταξη. + .path-type = Τύπος διαδρομής: + .plot-area-is-empty-pick-a-larger-window = Η περιοχή εκτύπωσης είναι κενή. Επιλέξτε μεγαλύτερο παράθυρο. + .plot-style-aci-aci-updated = Το στυλ εκτύπωσης ACI __ocs_fmt_0__ ενημερώθηκε. + .plot-style-table-is-not-loaded = Ο πίνακας στυλ εκτύπωσης '__ocs_fmt_0__' δεν έχει φορτωθεί. + .quick-print-works-in-model-space = Η γρήγορη εκτύπωση λειτουργεί στον χώρο μοντέλου. + .reload-failed-error = Η επαναφόρτωση απέτυχε: __ocs_fmt_0__ + .saveall-save-each-tab-individually-in-the-web = SAVEALL: στην έκδοση ιστού αποθηκεύστε κάθε καρτέλα ξεχωριστά. + .saveall-saved-saved-drawing-s = SAVEALL: αποθηκεύτηκαν __ocs_fmt_0__ σχέδιο(α)__ocs_fmt_1__. + .saveall-already-has-a-save-running = SAVEALL: για το __ocs_fmt_0__ εκτελείται ήδη αποθήκευση + .saveall-failed-e = SAVEALL: το __ocs_fmt_0__ απέτυχε: __ocs_fmt_1__ + .script-path-to-the-scr-file = SCRIPT διαδρομή προς το αρχείο .scr: + .script-cannot-read-p-e = SCRIPT: δεν είναι δυνατή η ανάγνωση του __ocs_fmt_0__: __ocs_fmt_1__ + .script-running-command-s-from-p = SCRIPT: εκτέλεση __ocs_fmt_0__ εντολής(ών) από __ocs_fmt_1__. + .save-failed-error = Η αποθήκευση απέτυχε: __ocs_fmt_0__ + .save-failed-e = Η αποθήκευση απέτυχε: __ocs_fmt_0__ + .save-stopped-file-name-changed-outside-open-ca = Η αποθήκευση σταμάτησε: το "__ocs_fmt_0__" άλλαξε εκτός του Open CAD Studio. + .saved-but-the-refreshed-drawing-is-locked-by-a = Αποθηκεύτηκε, αλλά το ανανεωμένο σχέδιο είναι κλειδωμένο από άλλο πρόγραμμα επεξεργασίας: __ocs_fmt_0__ + .saved-filename = Αποθηκεύτηκε: __ocs_fmt_0__ + .saved = Αποθηκεύτηκε: __ocs_fmt_0__ + .selection-has-no-printable-area = Η επιλογή δεν έχει εκτυπώσιμη περιοχή. + .selection-has-no-printable-geometry = Η επιλογή δεν έχει εκτυπώσιμη γεωμετρία. + .sending-to-system-printer = Αποστολή στον εκτυπωτή του συστήματος… + .type-a-command-or-use-the-ribbon-open-obj-inse = Πληκτρολογήστε μια εντολή ή χρησιμοποιήστε την κορδέλα. Άνοιγμα OBJ: καρτέλα INSERT. + .unable-to-acquire-edit-lock-error = Αδυναμία απόκτησης κλειδώματος επεξεργασίας: __ocs_fmt_0__ + .unable-to-save-file-name-file-is-in-use-by-ano = Αδυναμία αποθήκευσης του "__ocs_fmt_0__": το αρχείο χρησιμοποιείται από άλλη εφαρμογή. + .unable-to-save-error = Αδυναμία αποθήκευσης του "__ocs_fmt_0__": __ocs_fmt_1__ + .usage-script-path-to-scr-file = Χρήση: SCRIPT <διαδρομή προς αρχείο .scr> + .usage-undo-number-of-steps = Χρήση: UNDO [αριθμός βημάτων] + .used-for-the-first-save-of-a-new-drawing-exist = Χρησιμοποιείται στην πρώτη αποθήκευση ενός νέου σχεδίου. Τα υπάρχοντα σχέδια διατηρούν τον τύπο και την έκδοση του αρχείου τους. + .visual-style-label = Οπτικό στυλ: __ocs_fmt_0__. + .warning-corrupt-entities-dropped-parser-junk-b = Προειδοποίηση: απορρίφθηκαν __ocs_fmt_0__ κατεστραμμένες οντότητες (άχρηστα δεδομένα αναλυτή — εσφαλμένα κάθετα διανύσματα / πλήθη) + .warning-corrupt-xref-entities-dropped = Προειδοποίηση: απορρίφθηκαν __ocs_fmt_0__ κατεστραμμένες οντότητες xref + .xref-loaded = XREF Φορτώθηκε το "__ocs_fmt_0__" + .cmd-cannot-create-folder-e = __ocs_fmt_0__: δεν είναι δυνατή η δημιουργία φακέλου (__ocs_fmt_1__). + .cmd-packaged-copied-file-s-into = __ocs_fmt_0__: συσκευάστηκαν __ocs_fmt_1__ αρχείο(α) στο __ocs_fmt_2__ + .error-external-change-checks-remain-active = __ocs_fmt_0__. Οι έλεγχοι εξωτερικών αλλαγών παραμένουν ενεργοί. + .warning-external-change-checks-remain-active = __ocs_fmt_0__. Οι έλεγχοι εξωτερικών αλλαγών παραμένουν ενεργοί. + .opening-a-drawing-by-path-is-not-available-in = Το άνοιγμα σχεδίου μέσω διαδρομής δεν είναι διαθέσιμο στο πρόγραμμα περιήγησης. + +selection = + .cmd-select-objects-count-selected-enter-to-app = __ocs_arg_cmd__ Επιλέξτε αντικείμενα (__ocs_arg_count__ επιλεγμένα, Enter για εφαρμογή): + .cmd-select-objects = __ocs_arg_cmd__ Επιλέξτε αντικείμενα: + .append-to-current-selection = Προσθήκη στην τρέχουσα επιλογή + .last = Τελευταίο + +inquiry = + .handle-x = Αναγνωριστικό __ocs_fmt_0__: "__ocs_fmt_1__" + .k-n = __ocs_fmt_0__: __ocs_fmt_1__ + .v = = __ocs_fmt_0__ + .addselected-creating-a-new-kind-is-not-support = ADDSELECTED: η δημιουργία νέου __ocs_fmt_0__ δεν υποστηρίζεται. + .addselected-selected-object-not-found = ADDSELECTED: το επιλεγμένο αντικείμενο δεν βρέθηκε. + .add-selected-drawing-a-new-kind-on-layer-layer = Προσθήκη επιλεγμένου: σχεδίαση νέου __ocs_fmt_0__ στο επίπεδο "__ocs_fmt_1__". + .angle-angle = Γωνία = __ocs_arg_angle__° + .angle-0-0000-degenerate-rays = Γωνία = 0.0000° (εκφυλισμένες ημιευθείες) + .area-area-perimeter-perimeter = Εμβαδόν = __ocs_arg_area__, Περίμετρος = __ocs_arg_perimeter__ + .bedit-block-edit-discarded = BEDIT: η επεξεργασία του μπλοκ "__ocs_fmt_0__" απορρίφθηκε. + .bedit-block-saved-all-references-updated = BEDIT: το μπλοκ "__ocs_fmt_0__" αποθηκεύτηκε. Όλες οι αναφορές ενημερώθηκαν. + .bedit-editing-block-use-save-block-or-discard = BEDIT: επεξεργασία του μπλοκ "__ocs_fmt_0__". Χρησιμοποιήστε Αποθήκευση μπλοκ ή Απόρριψη για να ολοκληρώσετε. + .bedit-block-not-found = BEDIT: το μπλοκ "__ocs_fmt_0__" δεν βρέθηκε. + .bedit-cannot-edit-an-external-reference-xref = BEDIT: δεν είναι δυνατή η επεξεργασία εξωτερικής αναφοράς (xref). + .bedit-finish-the-active-refedit-refclose-first = BEDIT: ολοκληρώστε πρώτα το ενεργό REFEDIT (REFCLOSE). + .bedit-selected-object-is-not-a-block-reference = BEDIT: το επιλεγμένο αντικείμενο δεν είναι αναφορά μπλοκ. + .bedit-discard-invalid-block-editor-state = BEDIT_DISCARD: μη έγκυρη κατάσταση επεξεργασίας μπλοκ. + .bedit-discard-no-block-editor-is-open = BEDIT_DISCARD: δεν υπάρχει ανοικτή επεξεργασία μπλοκ. + .bedit-save-invalid-block-editor-state = BEDIT_SAVE: μη έγκυρη κατάσταση επεξεργασίας μπλοκ. + .bedit-save-no-block-editor-is-open = BEDIT_SAVE: δεν υπάρχει ανοικτή επεξεργασία μπλοκ. + .cal-expression-e-g-2-3-4 = CAL παράσταση (π.χ. (2+3)*4): + .cal-e = CAL: __ocs_fmt_0__ + .count-tally-all-by-type-by-layer = COUNT καταμέτρηση [Όλα (ανά τύπο) / ανά Επίπεδο]: + .count-total-entity-ies-total = COUNT: __ocs_fmt_0__ οντότητα(ες) συνολικά. + .dblist-drawing-has-no-entities = DBLIST: το σχέδιο δεν έχει οντότητες. + .dblist-count-entit = DBLIST: __ocs_fmt_0__ αντικείμενα. + .dist-specify-first-point = DIST Ορίστε πρώτο σημείο: + .dist-specify-second-point = DIST Ορίστε δεύτερο σημείο: + .divide-enter-number-of-segments = DIVIDE Δώστε αριθμό τμημάτων: + .divide-select-object-to-divide = DIVIDE Επιλέξτε αντικείμενο προς διαίρεση: + .deselected = Η επιλογή καταργήθηκε. + .distance-dist-angle-in-xy-plane-angle-xy-delta = + Απόσταση = __ocs_arg_dist__, Γωνία στο επίπεδο XY = __ocs_arg_angle_xy__° + Δέλτα X = __ocs_arg_dx__, Δέλτα Y = __ocs_arg_dy__, Δέλτα Z = __ocs_arg_dz__ + .distance-dist-angle-in-xy-plane-angle-xy-angle = + Απόσταση = __ocs_arg_dist__, Γωνία στο επίπεδο XY = __ocs_arg_angle_xy__°, Γωνία από το επίπεδο XY = __ocs_arg_angle_z__° + Δέλτα X = __ocs_arg_dx__, Δέλτα Y = __ocs_arg_dy__, Δέλτα Z = __ocs_arg_dz__ + .find-replace-replaced-occurrence-s-of = FIND/REPLACE: αντικαταστάθηκαν __ocs_fmt_0__ εμφάνιση(εις) του "__ocs_fmt_1__" → "__ocs_fmt_2__". + .find-not-found = FIND: το "__ocs_fmt_0__" δεν βρέθηκε. + .find-specify-search-text = FIND: ορίστε κείμενο αναζήτησης. + .find-match-es-for = FIND: __ocs_fmt_0__ αντιστοιχία(ες) για "__ocs_fmt_1__". + .findall-text-to-find-add-replace-text-by-typin = FINDALL κείμενο προς εύρεση (προσθέστε REPLACE <κείμενο> πληκτρολογώντας): + .flatten-no-entities = FLATTEN: δεν υπάρχουν οντότητες. + .flatten-entity-ies-moved-to-z-0 = FLATTEN: __ocs_fmt_0__ οντότητα(ες) μετακινήθηκαν στο Z=0. + .id-specify-point = ID Ορίστε σημείο: + .list-no-entities-selected-select-entities-firs = LIST: δεν έχουν επιλεγεί οντότητες. Επιλέξτε πρώτα οντότητες. + .massprop-no-entities-selected-select-entities = MASSPROP: δεν έχουν επιλεγεί οντότητες. Επιλέξτε πρώτα οντότητες. + .measure-select-object-to-measure = MEASURE Επιλέξτε αντικείμενο προς μέτρηση: + .measure-specify-segment-length = MEASURE Ορίστε μήκος τμήματος: + .measuregeom-enter-an-option-distance-radius-an = MEASUREGEOM Δώστε επιλογή [Απόσταση/Ακτίνα/Γωνία/Εμβαδόν]: + .measuregeom-select-arc-or-circle = MEASUREGEOM Επιλέξτε τόξο ή κύκλο: + .measuregeom-specify-first-corner-point-enter-t = MEASUREGEOM Ορίστε πρώτο σημείο γωνίας (Enter για ακύρωση): + .measuregeom-specify-first-point = MEASUREGEOM Ορίστε πρώτο σημείο: + .measuregeom-specify-first-ray-point = MEASUREGEOM Ορίστε πρώτο σημείο ημιευθείας: + .measuregeom-specify-next-point-n-picked-enter = MEASUREGEOM Ορίστε επόμενο σημείο (__ocs_arg_n__ επιλεγμένα, Enter για υπολογισμό): + .measuregeom-specify-second-point = MEASUREGEOM Ορίστε δεύτερο σημείο: + .measuregeom-specify-second-ray-point = MEASUREGEOM Ορίστε δεύτερο σημείο ημιευθείας: + .measuregeom-specify-vertex-point = MEASUREGEOM Ορίστε σημείο κορυφής: + .measure-geometry = Μέτρηση γεωμετρίας + .qselect-no-matching-entities = QSELECT: δεν υπάρχουν οντότητες που να ταιριάζουν. + .qselect-entity-ies-selected = QSELECT: επιλέχθηκαν __ocs_fmt_0__ οντότητα(ες). + .refclose-block-saved-all-references-updated = REFCLOSE: το μπλοκ "__ocs_fmt_0__" αποθηκεύτηκε. Όλες οι αναφορές ενημερώθηκαν. + .refclose-changes-discarded = REFCLOSE: οι αλλαγές απορρίφθηκαν. + .refclose-no-refedit-session-active = REFCLOSE: δεν υπάρχει ενεργή συνεδρία REFEDIT. + .refedit-editing-block-run-refclose-to-save-ref = REFEDIT: επεξεργασία του μπλοκ "__ocs_fmt_0__". Εκτελέστε REFCLOSE για αποθήκευση, REFCLOSE_DISCARD για ακύρωση. + .refedit-a-session-is-already-active-use-refclo = REFEDIT: υπάρχει ήδη ενεργή συνεδρία. Χρησιμοποιήστε πρώτα REFCLOSE. + .refedit-block-not-found = REFEDIT: το μπλοκ "__ocs_fmt_0__" δεν βρέθηκε. + .refedit-block-is-empty = REFEDIT: το μπλοκ είναι κενό. + .refedit-selected-object-is-not-an-insert = REFEDIT: το επιλεγμένο αντικείμενο δεν είναι INSERT. + .radius-radius-diameter-diameter = Ακτίνα = __ocs_arg_radius__, Διάμετρος = __ocs_arg_diameter__ + .selectall-object-s-selected = SELECTALL: επιλέχθηκαν __ocs_fmt_0__ αντικείμενο(α). + .selhandles-no-entities-selected-select-entitie = SELHANDLES: δεν έχουν επιλεγεί οντότητες. Επιλέξτε πρώτα οντότητες. + .usage-cal-expression-e-g-cal-2-3-4 = Χρήση: CAL <παράσταση> π.χ. CAL (2+3)*4 + .usage-qselect-type-layer-color-linetype-value = Χρήση: QSELECT TYPE|LAYER|COLOR|LINETYPE <τιμή> + .x-x-y-y-z-z = X = __ocs_arg_x__, Y = __ocs_arg_y__, Z = __ocs_arg_z__ + .type-name-handle-x-layer-color-lt = __ocs_fmt_0__ Αναγν.:__ocs_fmt_1__ Επίπεδο:__ocs_fmt_2__ Χρώμα:__ocs_fmt_3__ ΤΓ:__ocs_fmt_4____ocs_fmt_5__ + .area-4-perimeter-4-centroid-4-4 = __ocs_fmt_0__ Εμβαδόν=__ocs_fmt_1__ Περίμετρος=__ocs_fmt_2__ Κέντρο βάρους=(__ocs_fmt_3__,__ocs_fmt_4__) + +draw = + .insert-x-no-attributes = Εισαγωγή __ocs_fmt_0__: χωρίς χαρακτηριστικά. + .tag-val = [__ocs_fmt_0__] = __ocs_fmt_1__ + .no-closed-boundary-found = ⚠ Δεν βρέθηκε κλειστό όριο. + .inverted = , αντεστραμμένο + .loaded-multiline-styles = Φορτωμένα στυλ πολλαπλών γραμμών: __ocs_fmt_0__ + .mline-current-settings = MLINE Τρέχουσες ρυθμίσεις: Στοίχιση = __ocs_fmt_0__, Κλίμακα = __ocs_fmt_1__, Στυλ = __ocs_fmt_2__ + Ορίστε σημείο έναρξης ή [Στοίχιση/Κλίμακα/ΣΤυλ]: + .mline-enter-justification = MLINE Δώστε τύπο στοίχισης [Πάνω/Μηδέν/Κάτω] <__ocs_fmt_0__>: + .mline-enter-scale-factor-default = MLINE Δώστε συντελεστή κλίμακας <__ocs_fmt_0__>: + .mline-enter-style-name = MLINE Δώστε όνομα στυλ ή [?] <__ocs_fmt_0__>: + .mline-specify-next-point-close-undo = MLINE Ορίστε επόμενο σημείο ή [Κλείσιμο/Αναίρεση]: + .mline-specify-next-point-undo = MLINE Ορίστε επόμενο σημείο ή [Αναίρεση]: + .multiline-style-was-not-found = Το στυλ πολλαπλών γραμμών "__ocs_arg_style__" δεν βρέθηκε. + .value-2-point = 2 σημείων + .value-2d-solid = Στερεό 2D + .value-3-point = 3 σημείων + .value-3d-polyline = Πολυγραμμή 3D + .value-3dmirror-mirror-plane-x-y-z = 3DMIRROR επίπεδο καθρεπτισμού [X / Y / Z]: + .value-3dpoly-specify-next-point-close-undo = 3DPOLY Ορίστε επόμενο σημείο [Κλείσιμο/Αναίρεση]: + .value-3dpoly-specify-next-point-undo = 3DPOLY Ορίστε επόμενο σημείο [Αναίρεση]: + .value-3dpoly-specify-start-point-of-polyline = 3DPOLY Ορίστε σημείο έναρξης της πολυγραμμής: + .value-3drotate-angle-in-degrees = 3DROTATE γωνία σε μοίρες: + .value-3drotate-rotation-axis-x-y-z = 3DROTATE άξονας περιστροφής [X / Y / Z]: + .arc-specify-center = ARC Ορίστε κέντρο: + .arc-specify-end-point-c-cx-cy-r-r = ARC Ορίστε τελικό σημείο [κ=(__ocs_arg_cx__,__ocs_arg_cy__) r=__ocs_arg_r__]: + .arc-specify-start-point = ARC Ορίστε σημείο έναρξης: + .arc-3p-specify-end-point = ARC 3P Ορίστε τελικό σημείο: + .arc-3p-specify-second-point-on-arc = ARC 3P Ορίστε δεύτερο σημείο στο τόξο: + .arc-3p-specify-start-point = ARC 3P Ορίστε σημείο έναρξης: + .arc-csa-click-end-direction-or-type-arc-span-i = ARC CSA Κάντε κλικ στην τελική κατεύθυνση ή πληκτρολογήστε το άνοιγμα του τόξου σε μοίρες [αρχή=__ocs_arg_sa__]: + .arc-csa-specify-center = ARC CSA Ορίστε κέντρο: + .arc-csa-specify-start-point = ARC CSA Ορίστε σημείο έναρξης: + .arc-csl-click-chord-end-or-type-chord-length-r = ARC CSL Κάντε κλικ στο άκρο της χορδής ή πληκτρολογήστε το μήκος χορδής [r=__ocs_arg_r__]: + .arc-csl-specify-center = ARC CSL Ορίστε κέντρο: + .arc-csl-specify-start-point = ARC CSL Ορίστε σημείο έναρξης: + .arc-continue-no-previous-line-or-arc-to-contin = ARC Continue Δεν υπάρχει προηγούμενη γραμμή ή τόξο για συνέχεια. + .arc-continue-specify-end-point-ctrl-flip-direc = ARC Continue Ορίστε τελικό σημείο [Ctrl = αντιστροφή κατεύθυνσης]: + .arc-sca-click-end-direction-or-type-arc-span-i = ARC SCA Κάντε κλικ στην τελική κατεύθυνση ή πληκτρολογήστε το άνοιγμα του τόξου σε μοίρες [αρχή=__ocs_arg_sa__]: + .arc-sca-specify-center = ARC SCA Ορίστε κέντρο: + .arc-sca-specify-start-point = ARC SCA Ορίστε σημείο έναρξης: + .arc-sce-specify-center = ARC SCE Ορίστε κέντρο: + .arc-sce-specify-end-point-r-r = ARC SCE Ορίστε τελικό σημείο [r=__ocs_arg_r__]: + .arc-sce-specify-start-point = ARC SCE Ορίστε σημείο έναρξης: + .arc-scl-click-chord-end-or-type-chord-length-r = ARC SCL Κάντε κλικ στο άκρο της χορδής ή πληκτρολογήστε το μήκος χορδής [r=__ocs_arg_r__]: + .arc-scl-specify-center = ARC SCL Ορίστε κέντρο: + .arc-scl-specify-start-point = ARC SCL Ορίστε σημείο έναρξης: + .arc-sea-specify-angle-move-cursor-perpendicula = ARC SEA Ορίστε γωνία (μετακινήστε τον δείκτη κάθετα στη χορδή): + .arc-sea-specify-end-point = ARC SEA Ορίστε τελικό σημείο: + .arc-sea-specify-start-point = ARC SEA Ορίστε σημείο έναρξης: + .arc-sed-specify-end-point = ARC SED Ορίστε τελικό σημείο: + .arc-sed-specify-start-point = ARC SED Ορίστε σημείο έναρξης: + .arc-sed-specify-tangent-direction-at-start = ARC SED Ορίστε κατεύθυνση εφαπτομένης στην αρχή: + .arc-ser-click-radius-point-or-type-radius-valu = ARC SER Κάντε κλικ σε σημείο ακτίνας ή πληκτρολογήστε τιμή ακτίνας: + .arc-ser-specify-end-point = ARC SER Ορίστε τελικό σημείο: + .arc-ser-specify-start-point = ARC SER Ορίστε σημείο έναρξης: + .area-specify-first-corner-point-enter-to-cance = AREA Ορίστε πρώτο σημείο γωνίας (Enter για ακύρωση): + .area-specify-next-point-n-picked-enter-to-calc = AREA Ορίστε επόμενο σημείο (__ocs_arg_n__ επιλεγμένα, Enter για υπολογισμό): + .attdef-enter-attribute-tag-no-spaces = ATTDEF Δώστε ετικέτα χαρακτηριστικού (χωρίς κενά): + .attdef-enter-default-value-for-tag-enter-blank = ATTDEF Δώστε προεπιλεγμένη τιμή για '__ocs_arg_tag__' (Enter=κενό): + .attdef-enter-prompt-for-tag-enter-use-tag = ATTDEF Δώστε προτροπή για '__ocs_arg_tag__' (Enter=χρήση ετικέτας): + .attdef-specify-insertion-point-for-tag = ATTDEF Ορίστε σημείο εισαγωγής για '__ocs_arg_tag__': + .attdisp-attribute-display-on-off-normal = ATTDISP εμφάνιση χαρακτηριστικών [Ενεργό / Ανενεργό / Κανονικό]: + .attdisp-sub-count-attribute-definition-s-updat = ATTDISP __ocs_fmt_0__: ενημερώθηκαν __ocs_fmt_1__ ορισμός(οί) χαρακτηριστικών. + .attedit-no-insert-entities-in-selection = ATTEDIT: δεν υπάρχουν οντότητες Insert στην επιλογή. + .attedit-select-an-insert-entity-first = ATTEDIT: επιλέξτε πρώτα μια οντότητα Insert. + .attedit-tag-tag-up-not-found-in-selection = ATTEDIT: η ετικέτα '__ocs_fmt_0__' δεν βρέθηκε στην επιλογή. + .attedit-updated-changed-attribute-s-tag-up-new = ATTEDIT: ενημερώθηκαν __ocs_fmt_0__ χαρακτηριστικό(ά) [__ocs_fmt_1__] = __ocs_fmt_2__. + .arc-length-symbol-dimarcsym = Σύμβολο μήκους τόξου (DIMARCSYM) + .axis = Άξονας + .axis-end = Άξονας, τέλος + .boundary-pick-internal-point-miss = BOUNDARY Επιλέξτε εσωτερικό σημείο:__ocs_arg_miss__ + .boundary = Όριο + .centerline-select-first-line = CENTERLINE Επιλέξτε πρώτη γραμμή: + .centerline-select-second-line = CENTERLINE Επιλέξτε δεύτερη γραμμή: + .circle-specify-center-point = CIRCLE Ορίστε σημείο κέντρου: + .circle-specify-radius-or-type-value-r-center-c = CIRCLE Ορίστε ακτίνα ή πληκτρολογήστε τιμή <__ocs_arg_r__> [κέντρο (__ocs_arg_cx__,__ocs_arg_cy__)]: + .circle-2p-specify-first-end-of-diameter = CIRCLE 2P Ορίστε πρώτο άκρο της διαμέτρου: + .circle-2p-specify-second-end-of-diameter = CIRCLE 2P Ορίστε δεύτερο άκρο της διαμέτρου: + .circle-3p-specify-first-point = CIRCLE 3P Ορίστε πρώτο σημείο: + .circle-3p-specify-second-point = CIRCLE 3P Ορίστε δεύτερο σημείο: + .circle-3p-specify-third-point = CIRCLE 3P Ορίστε τρίτο σημείο: + .circle-cd-specify-center-point = CIRCLE CD Ορίστε σημείο κέντρου: + .circle-cd-specify-diameter-or-type-value-4-cen = CIRCLE CD Ορίστε διάμετρο ή πληκτρολογήστε τιμή <__ocs_fmt_0__> [κέντρο (__ocs_fmt_1__,__ocs_fmt_2__)]: + .circle-ttr-select-first-tangent-object = CIRCLE TTR Επιλέξτε πρώτο εφαπτόμενο αντικείμενο: + .circle-ttr-select-second-tangent-object = CIRCLE TTR Επιλέξτε δεύτερο εφαπτόμενο αντικείμενο: + .circle-ttr-specify-radius = CIRCLE TTR Ορίστε ακτίνα: + .circle-ttt-select-first-tangent-object = CIRCLE TTT Επιλέξτε πρώτο εφαπτόμενο αντικείμενο: + .circle-ttt-select-second-tangent-object = CIRCLE TTT Επιλέξτε δεύτερο εφαπτόμενο αντικείμενο: + .circle-ttt-select-third-tangent-object = CIRCLE TTT Επιλέξτε τρίτο εφαπτόμενο αντικείμενο: + .copy-specify-base-point-count-objects = COPY Ορίστε σημείο βάσης [__ocs_arg_count__ αντικείμενα]: + .center-line = Κεντρική γραμμή + .center-mark = Σημάδι κέντρου + .center-axes = Κέντρο, άξονες + .center-diameter = Κέντρο, διάμετρος + .center-radius = Κέντρο, ακτίνα + .center-start-angle = Κέντρο, αρχή, γωνία + .center-start-end = Κέντρο, αρχή, τέλος + .center-start-length = Κέντρο, αρχή, μήκος + .circumscribed = Περιγεγραμμένο + .current-settings-edit-mode = Τρέχουσες ρυθμίσεις: Λειτουργία επεξεργασίας = __ocs_fmt_0__ + .ddedit-selected-entity-is-not-text = DDEDIT: η επιλεγμένη οντότητα δεν είναι κείμενο. + .dimcenter-select-arc-or-circle = DIMCENTER Επιλέξτε τόξο ή κύκλο: + .donut-specify-center-of-donut-enter-to-exit = DONUT Ορίστε κέντρο του δακτυλίου (Enter για έξοδο): + .donut-specify-inside-diameter-0 = DONUT Ορίστε εσωτερική διάμετρο <0>: + .donut-specify-outside-diameter = DONUT Ορίστε εξωτερική διάμετρο: + .donut-specify-second-point-for-inside-diameter = DONUT Ορίστε δεύτερο σημείο για την εσωτερική διάμετρο: + .donut-specify-second-point-for-outside-diameter = DONUT Ορίστε δεύτερο σημείο για την εξωτερική διάμετρο: + .draw-manually = Χειροκίνητη σχεδίαση + .ellipse-specify-center = ELLIPSE Ορίστε κέντρο: + .ellipse-specify-major-axis-endpoint = ELLIPSE Ορίστε άκρο του μεγάλου άξονα: + .ellipse-specify-minor-axis-point-or-type-half = ELLIPSE Ορίστε σημείο μικρού άξονα ή πληκτρολογήστε το ημιμήκος [μεγ. r=__ocs_fmt_0__]: + .ellipse-axis-specify-first-endpoint-of-major-a = ELLIPSE (Άξονας) Ορίστε πρώτο άκρο του μεγάλου άξονα: + .ellipse-axis-specify-minor-axis-point-or-type = ELLIPSE (Άξονας) Ορίστε σημείο μικρού άξονα ή πληκτρολογήστε το ημιμήκος [μεγ. r=__ocs_fmt_0__]: + .ellipse-axis-specify-second-endpoint-of-major = ELLIPSE (Άξονας) Ορίστε δεύτερο άκρο του μεγάλου άξονα: + .ellipse-arc-specify-center = ELLIPSE ARC Ορίστε κέντρο: + .ellipse-arc-specify-end-angle-point-or-type-de = ELLIPSE ARC Ορίστε σημείο τελικής γωνίας ή πληκτρολογήστε μοίρες [αρχή=__ocs_arg_sa__]: + .ellipse-arc-specify-major-axis-endpoint = ELLIPSE ARC Ορίστε άκρο του μεγάλου άξονα: + .ellipse-arc-specify-minor-axis-point-or-type-h = ELLIPSE ARC Ορίστε σημείο μικρού άξονα ή πληκτρολογήστε το ημιμήκος [μεγ. r=__ocs_arg_r__]: + .ellipse-arc-specify-start-angle-point-or-type = ELLIPSE ARC Ορίστε σημείο αρχικής γωνίας ή πληκτρολογήστε μοίρες: + .ellipse-arc = Ελλειπτικό τόξο + .ext-line-color-aci-dimclre = Χρώμα γραμμής προέκτασης ACI (DIMCLRE) + .ext-line-weight-dimlwe = Πάχος γραμμής προέκτασης (DIMLWE) + .gradient-boundary-point-1 = GRADIENT Σημείο ορίου 1: + .gradient-point-n = GRADIENT Σημείο __ocs_arg_n__: + .gradient-kind-invert-pick-internal-point-miss = GRADIENT (__ocs_arg_kind____ocs_arg_invert__) Επιλέξτε εσωτερικό σημείο:__ocs_arg_miss__ + .gradient = Διαβάθμιση + .hatch-boundary-point-1 = HATCH Σημείο ορίου 1: + .hatch-pick-internal-point-miss = HATCH Επιλέξτε εσωτερικό σημείο:__ocs_arg_miss__ + .hatch-point-n = HATCH Σημείο __ocs_arg_n__: + .hatchedit-pattern-name-scale-scale-angle-angle = HATCHEDIT Μοτίβο:__ocs_arg_name__ Κλίμακα:__ocs_arg_scale__ Γωνία:__ocs_arg_angle__ [P <μοτίβο> / S <κλίμακα> / A <γωνία> | Enter για εφαρμογή]: + .hatchedit-select-hatch = HATCHEDIT Επιλέξτε διαγράμμιση: + .hatchedit-selected-entity-is-not-a-hatch = HATCHEDIT: η επιλεγμένη οντότητα δεν είναι διαγράμμιση. + .helix-enter-number-of-turns-3 = HELIX Δώστε αριθμό στροφών <3>: + .helix-specify-base-radius = HELIX Ορίστε ακτίνα βάσης: + .helix-specify-centre-point-of-base = HELIX Ορίστε σημείο κέντρου της βάσης: + .helix-specify-helix-height = HELIX Ορίστε ύψος έλικας: + .helix-specify-top-radius-same-as-base = HELIX Ορίστε ακτίνα κορυφής <ίδια με τη βάση>: + .image-specify-insertion-point-name = IMAGE Ορίστε σημείο εισαγωγής (__ocs_arg_name__): + .image-specify-width-drag-right = IMAGE Ορίστε πλάτος (σύρετε δεξιά): + .invert-off = Αντιστροφή: ανενεργή + .invert-on = Αντιστροφή: ενεργή + .line-specify-first-point = LINE Ορίστε πρώτο σημείο: + .line-specify-next-point-close-undo = LINE Ορίστε επόμενο σημείο [Κλείσιμο/Αναίρεση]: + .line-specify-next-point-undo = LINE Ορίστε επόμενο σημείο [Αναίρεση]: + .line-color-aci = Χρώμα γραμμής (ACI): + .line-type = Τύπος γραμμής: + .line-weight = Πάχος γραμμής: + .linear-factor-dimlfac = Γραμμικός συντελεστής (DIMLFAC) + .literal-spaces-space-stays-in-the-line-instead = Κυριολεκτικά κενά: το Space παραμένει στη γραμμή αντί να εκτελεί την εντολή (ίδιο με το να πληκτρολογήσετε '>' στην αρχή). Παραμένει ενεργό μέχρι να απενεργοποιηθεί. + .mline-enter-scale-factor = MLINE Δώστε συντελεστή κλίμακας: + .mline-specify-next-point-count-pts-enter-to-fi = MLINE Ορίστε επόμενο σημείο (__ocs_arg_count__ σημ., Enter για τερματισμό, C για κλείσιμο, S για ορισμό κλίμακας): + .mline-specify-start-point-scale-scale = MLINE Ορίστε σημείο έναρξης (κλίμακα=__ocs_arg_scale__): + .pline-specify-start-point = PLINE Ορίστε σημείο έναρξης: + .pline-mode-next-pt-count-pts = PLINE [__ocs_arg_mode__] Επόμενο σημ. [__ocs_arg_count__σημ.]: + .point-specify-point = POINT Ορίστε σημείο: + .polygon-enter-number-of-sides = POLYGON Δώστε αριθμό πλευρών <__ocs_fmt_0__>: + .polygon-specify-center-sides = POLYGON Ορίστε κέντρο [__ocs_fmt_0__ πλευρές]: + .polygon-specify-vertex-on-circle-sides-inscrib = POLYGON Ορίστε κορυφή στον κύκλο [__ocs_fmt_0__ πλευρές, εγγεγραμμένο]: + .polygon-c-enter-number-of-sides = POLYGON C Δώστε αριθμό πλευρών <__ocs_fmt_0__>: + .polygon-c-specify-center-sides = POLYGON C Ορίστε κέντρο [__ocs_fmt_0__ πλευρές]: + .polygon-c-specify-edge-midpoint-radius-sides-c = POLYGON C Ορίστε ακτίνα μέσου ακμής [__ocs_fmt_0__ πλευρές, περιγεγραμμένο]: + .polygon-e-enter-number-of-sides-n = POLYGON E Δώστε αριθμό πλευρών <__ocs_arg_n__>: + .polygon-e-specify-first-endpoint-of-edge-n-sid = POLYGON E Ορίστε πρώτο άκρο της ακμής [__ocs_arg_n__ πλευρές]: + .polygon-e-specify-second-endpoint-of-edge-n-si = POLYGON E Ορίστε δεύτερο άκρο της ακμής [__ocs_arg_n__ πλευρές]: + .polysolid-wall-height = POLYSOLID ύψος τοίχου: + .polysolid-wall-width = POLYSOLID πλάτος τοίχου: + .pyramid-base-radius = PYRAMID ακτίνα βάσης: + .pyramid-height-add-sides-by-typing-a-3rd-numbe = PYRAMID ύψος (προσθέστε πλευρές πληκτρολογώντας 3ο αριθμό): + .polygon-circumscribed = Πολύγωνο - περιγεγραμμένο + .polygon-edge = Πολύγωνο - ακμή + .polygon-inscribed = Πολύγωνο - εγγεγραμμένο + .ray-specify-start-point = RAY Ορίστε σημείο έναρξης: + .ray-specify-through-point = RAY Ορίστε σημείο διέλευσης: + .rect-specify-first-corner = RECT Ορίστε πρώτη γωνία: + .rect-specify-opposite-corner = RECT Ορίστε απέναντι γωνία: + .rect-calculate-dimensions-based-on-length-width = RECT Υπολογισμός διαστάσεων βάσει [Μήκους / Πλάτους] <Μήκος>: + .rect-specify-elevation = RECT Ορίστε υψόμετρο <__ocs_fmt_0__>: + .rect-specify-fillet-radius = RECT Ορίστε ακτίνα στρογγυλέματος <__ocs_fmt_0__>: + .rect-specify-first-chamfer-distance = RECT Ορίστε πρώτη απόσταση λοξότμησης <__ocs_fmt_0__>: + .rect-specify-orientation-from-the-first-corner = RECT Ορίστε προσανατολισμό από την πρώτη γωνία: + .rect-specify-rectangle-area = RECT Ορίστε εμβαδόν ορθογωνίου: + .rect-specify-rectangle-length = RECT Ορίστε μήκος ορθογωνίου: + .rect-specify-rectangle-width = RECT Ορίστε πλάτος ορθογωνίου: + .rect-specify-rotation-angle = RECT Ορίστε γωνία περιστροφής <__ocs_fmt_0__>: + .rect-specify-second-chamfer-distance = RECT Ορίστε δεύτερη απόσταση λοξότμησης <__ocs_fmt_0__>: + .rect-specify-thickness = RECT Ορίστε πάχος <__ocs_fmt_0__>: + .rect-specify-width = RECT Ορίστε πλάτος <__ocs_fmt_0__>: + .rect-cen-specify-center-point = RECT CEN Ορίστε σημείο κέντρου: + .rect-cen-specify-corner-point = RECT CEN Ορίστε σημείο γωνίας: + .rect-rot-specify-adjacent-corner-defines-edge = RECT ROT Ορίστε γειτονική γωνία (καθορίζει την κατεύθυνση της ακμής): + .rect-rot-specify-first-corner = RECT ROT Ορίστε πρώτη γωνία: + .rect-rot-specify-height-perpendicular-pick = RECT ROT Ορίστε ύψος (κάθετη επιλογή): + .region-created-count-region-s = REGION: δημιουργήθηκαν __ocs_fmt_0__ περιοχή(ές). + .region-select-closed-polylines-or-circles = REGION: επιλέξτε κλειστές πολυγραμμές ή κύκλους. + .revcloud-specify-next-point-count-pts-enter-to = REVCLOUD Ορίστε επόμενο σημείο (__ocs_arg_count__ σημ., Enter για κλείσιμο): + .revcloud-specify-start-point-arc-length-arc-le = REVCLOUD Ορίστε σημείο έναρξης (μήκος τόξου = __ocs_arg_arc_length__): + .revcloud-first-corner = REVCLOUD Πρώτη γωνία (__ocs_arg_style__, μήκος τόξου __ocs_arg_length__): __ocs_arg_message__ + .revcloud-opposite-corner = REVCLOUD Απέναντι γωνία: __ocs_arg_message__ + .revcloud-polygonal-start-point = REVCLOUD Πολυγωνικό σημείο έναρξης (__ocs_arg_style__, μήκος τόξου __ocs_arg_length__): __ocs_arg_message__ + .revcloud-next-polygonal-point = REVCLOUD Επόμενο πολυγωνικό σημείο (__ocs_arg_count__ σημεία, Enter για κλείσιμο): __ocs_arg_message__ + .revcloud-freehand-first-point = REVCLOUD Πρώτο σημείο ελεύθερης σχεδίασης (__ocs_arg_style__, μήκος τόξου __ocs_arg_length__): __ocs_arg_message__ + .revcloud-guide-cursor = REVCLOUD Οδηγήστε τον δείκτη και μετά κάντε κλικ ή πατήστε Enter για κλείσιμο: __ocs_arg_message__ + .revcloud-approximate-arc-chord-length = REVCLOUD Κατά προσέγγιση μήκος χορδής τόξου <__ocs_arg_length__>: + .revcloud-style = REVCLOUD Στυλ [Κανονικό/Καλλιγραφικό] <__ocs_arg_style__>: + .revcloud-select-closed-curve = REVCLOUD Επιλέξτε κλειστό κύκλο, έλλειψη, πολυγραμμή ή spline: __ocs_arg_message__ + .revcloud-reverse-arc-direction = REVCLOUD Αντιστροφή κατεύθυνσης τόξου [Ναι/Όχι] <Όχι>: + .revcloud-select-revision-cloud = REVCLOUD Επιλέξτε κλειστή πολυγραμμή νέφους αναθεώρησης κοντά στην αρχή της αντικατάστασης: __ocs_arg_message__ + .revcloud-replacement-point = REVCLOUD Σημείο αντικατάστασης __ocs_arg_count__· τερματίστε σε άλλη κορυφή του νέφους: + .revcloud-pick-side = REVCLOUD Επιλέξτε την πλευρά του αρχικού νέφους που θα διαγραφεί: + .revcloud-path-cannot-form = Η επιλεγμένη διαδρομή δεν μπορεί να σχηματίσει νέφος αναθεώρησης. + .revcloud-select-closed-revision-cloud = Επιλέξτε κλειστή πολυγραμμή νέφους αναθεώρησης. + .revcloud-polyline-not-planar = Η επιλεγμένη πολυγραμμή δεν είναι επίπεδη. + .revcloud-corners-non-zero-area = Οι δύο γωνίες πρέπει να ορίζουν μη μηδενικό εμβαδόν. + .revcloud-arc-length-positive = Το μήκος τόξου πρέπει να είναι μεγαλύτερο του μηδενός. + .revcloud-enter-valid-arc-length = Δώστε έγκυρο μήκος τόξου. + .revcloud-select-supported-closed-curve = Επιλέξτε μια υποστηριζόμενη κλειστή καμπύλη. + .revcloud-select-closed-entity = Επιλέξτε κλειστό κύκλο, έλλειψη, πολυγραμμή ή spline. + .calligraphy = Καλλιγραφικό + .first-point = Πρώτο σημείο + .freehand = Ελεύθερη σχεδίαση + .rectangular = Ορθογωνικό + .rectangle-center = Ορθογώνιο - κέντρο + .rectangle-rotated = Ορθογώνιο - περιστραμμένο + .rectangle-two-corners = Ορθογώνιο - δύο γωνίες + .rev-cloud = Νέφος αναθεώρησης + .section-cutting-plane-axis-x-y-z = SECTION άξονας επιπέδου τομής [X / Y / Z]: + .section-offset-along-x = SECTION μετατόπιση κατά X: + .section-offset-along-y = SECTION μετατόπιση κατά Y: + .section-offset-along-z = SECTION μετατόπιση κατά Z: + .sketch-pen-down-move-to-sketch-click-to-lift-e = SKETCH Πένα κάτω — μετακινηθείτε για σχεδίαση, κλικ για ανύψωση, Enter για καταγραφή: + .sketch-pen-up-click-to-lower-the-pen-enter-to = SKETCH Πένα πάνω — κλικ για κατέβασμα της πένας, Enter για καταγραφή: + .sketch-pen = Πένα + .sketch-increment = Βήμα + .sketch-record = Καταγραφή + .sketch-stop-erasing = Διακοπή σβησίματος + .sketch-connect = Σύνδεση + .sketch-exit = Έξοδος + .sketch-quit = Τερματισμός + .sketch-object-type = SKETCH Τύπος αντικειμένου [Γραμμή/Πολυγραμμή/Spline]: + .sketch-record-increment = SKETCH Βήμα καταγραφής <__ocs_arg_value__>: + .sketch-spline-fit-tolerance = SKETCH Ανοχή προσαρμογής spline <__ocs_arg_value__>: + .sketch-erase-move-backward = SKETCH Σβήσιμο — κινηθείτε αντίστροφα πάνω από το προσωρινό σκαρίφημα: + .sketch-pen-down-move = SKETCH (__ocs_arg_type__, βήμα __ocs_arg_increment__) Πένα κάτω — μετακινηθείτε για σχεδίαση: + .sketch-pen-up-click = SKETCH (__ocs_arg_type__, βήμα __ocs_arg_increment__) Πένα πάνω — κλικ για κατέβασμα της πένας: + .slice-cutting-plane-axis-x-y-z-add-top-bottom = SLICE άξονας επιπέδου τομής [X / Y / Z] (προσθέστε TOP/BOTTOM πληκτρολογώντας): + .slice-offset-along-x = SLICE μετατόπιση κατά X: + .slice-offset-along-y = SLICE μετατόπιση κατά Y: + .slice-offset-along-z = SLICE μετατόπιση κατά Z: + .solid-specify-first-point = SOLID Ορίστε πρώτο σημείο: + .solid-specify-fourth-point = SOLID Ορίστε τέταρτο σημείο: + .solid-specify-second-point = SOLID Ορίστε δεύτερο σημείο: + .solid-specify-third-point = SOLID Ορίστε τρίτο σημείο: + .spline-specify-first-control-point = SPLINE Ορίστε πρώτο σημείο ελέγχου: + .spline-specify-first-point = SPLINE Ορίστε πρώτο σημείο: + .spline-specify-next-point-n-pts = SPLINE Ορίστε επόμενο σημείο [__ocs_arg_n__ σημ.]: + .sketch = Σκαρίφημα + .start-center-angle = Αρχή, κέντρο, γωνία + .start-center-end = Αρχή, κέντρο, τέλος + .start-center-length = Αρχή, κέντρο, μήκος + .start-end-angle = Αρχή, τέλος, γωνία + .start-end-direction = Αρχή, τέλος, κατεύθυνση + .start-end-radius = Αρχή, τέλος, ακτίνα + .suppress-1st-line-dimsd1 = Απόκρυψη 1ης γραμμής (DIMSD1) + .suppress-1st-line-dimse1 = Απόκρυψη 1ης γραμμής (DIMSE1) + .suppress-2nd-line-dimsd2 = Απόκρυψη 2ης γραμμής (DIMSD2) + .suppress-2nd-line-dimse2 = Απόκρυψη 2ης γραμμής (DIMSE2) + .trace-specify-next-point-undo = TRACE Ορίστε επόμενο σημείο [Αναίρεση]: + .trace-specify-start-point = TRACE Ορίστε σημείο έναρξης: + .trace-specify-trace-width-w = TRACE Ορίστε πλάτος ίχνους <__ocs_arg_w__>: + .tan-tan-radius = Εφαπ., εφαπ., ακτίνα + .tan-tan-tan = Εφαπ., εφαπ., εφαπ. + .trace = Ίχνος + .ttt = Ttt + .usage-attdisp-on-off-normal = Χρήση: ATTDISP ON | OFF | NORMAL + .usage-polysolid-width-height-select-a-polyline = Χρήση: POLYSOLID <πλάτος> <ύψος> (επιλέξτε πρώτα μια πολυγραμμή) + .usage-pyramid-radius-height-sides-default-4-si = Χρήση: PYRAMID <ακτίνα> <ύψος> [πλευρές] (προεπιλογή 4 πλευρές) + .wipeout-specify-first-point-or-polyline = WIPEOUT Ορίστε πρώτο σημείο ή [Πλαίσια/Πολυγραμμή] <Πολυγραμμή>: + .wipeout-specify-next-point-or-undo-close-n-poi = WIPEOUT Ορίστε επόμενο σημείο ή [Αναίρεση/Κλείσιμο] (__ocs_arg_n__ σημεία): + .wipeout-polyline-select-a-closed-planar-polyli = WIPEOUT Polyline Επιλέξτε κλειστή επίπεδη πολυγραμμή: + .wipeout-rectangular-specify-first-corner = WIPEOUT Rectangular Ορίστε πρώτη γωνία: + .wipeout-rectangular-specify-opposite-corner = WIPEOUT Rectangular Ορίστε απέναντι γωνία: + .wipeout-frames-enter-frame-mode = WIPEOUT Frames Δώστε λειτουργία πλαισίου [Ανενεργό/Ενεργό/ΕμφάνισηΧωρίςΕκτύπωση] <__ocs_arg_mode__>: + .wipeout-polyline-erase-source = WIPEOUT Polyline Διαγραφή αρχικής πολυγραμμής; [Ναι/Όχι] <Όχι>: + .wipeout-polyline-invalid = WIPEOUT Polyline: επιλέξτε ευθύγραμμη, κλειστή, επίπεδη πολυγραμμή 2D με τουλάχιστον 3 μη τεμνόμενες κορυφές. + .setvar-frame-range = SETVAR: το __ocs_fmt_0__ απαιτεί 0, 1 ή 2. + .frames = Πλαίσια + .display-but-not-plot = Εμφάνιση χωρίς εκτύπωση + .frames-on-not-plotted = Πλαίσια ενεργά, χωρίς εκτύπωση + .image-adjust = Ρύθμιση εικόνας + .x-ray = Ακτινογραφία + .xline-specify-a-point = XLINE Ορίστε σημείο: + .xline-specify-through-point = XLINE Ορίστε σημείο διέλευσης: + .n-object-s-erased = __ocs_fmt_0__ αντικείμενο(α) διαγράφηκαν. + +modify = + .count-objects = (__ocs_arg_count__ αντικείμενα) + .edge-extend-indented-title-case = [Ακμή: Επέκταση] + .add-vertex = Προσθήκη κορυφής + .closed-cross = Κλειστός σταυρός + .closed-tee = Κλειστό ταυ + .corner-joint = Γωνιακή ένωση + .cut-all = Αποκοπή όλων + .cut-single = Αποκοπή ενός + .delete-vertex = Διαγραφή κορυφής + .merged-cross = Συγχωνευμένος σταυρός + .merged-tee = Συγχωνευμένο ταυ + .mledit-choose-an-edit-tool = MLEDIT Επιλέξτε εργαλείο επεξεργασίας: + .mledit-select-first-multiline = MLEDIT Επιλέξτε πρώτη πολλαπλή γραμμή: + .mledit-select-second-multiline = MLEDIT Επιλέξτε δεύτερη πολλαπλή γραμμή: + .mledit-specify-end-of-weld-range = MLEDIT Ορίστε το τέλος του εύρους συγκόλλησης: + .mledit-specify-second-cut-point = MLEDIT Ορίστε το δεύτερο σημείο αποκοπής: + .open-cross = Ανοικτός σταυρός + .open-tee = Ανοικτό ταυ + .remove-vertex = Αφαίρεση κορυφής + .weld-all = Συγκόλληση όλων + .align-scale-objects-based-on-alignment-points = ALIGN Κλιμάκωση αντικειμένων βάσει των σημείων στοίχισης; [Y/N]: + .align-select-objects-count-selected-enter-when = ALIGN Επιλέξτε αντικείμενα (__ocs_arg_count__ επιλεγμένα, Enter όταν τελειώσετε): + .align-specify-1st-destination-point = ALIGN Ορίστε 1ο σημείο προορισμού: + .align-specify-1st-source-point = ALIGN Ορίστε 1ο σημείο προέλευσης: + .align-specify-2nd-destination-point = ALIGN Ορίστε 2ο σημείο προορισμού: + .align-specify-2nd-source-point-enter-translate = ALIGN Ορίστε 2ο σημείο προέλευσης (Enter = μόνο μετατόπιση): + .array3d-column-spacing-rows-cols-levels-row-rs = ARRAY3D Απόσταση στηλών [__ocs_arg_rows__×__ocs_arg_cols__×__ocs_arg_levels__, γρ=__ocs_arg_rs__]: + .array3d-enter-column-count-rows-rows = ARRAY3D Δώστε πλήθος στηλών [__ocs_arg_rows__ γραμμές]: + .array3d-enter-level-count-rows-cols = ARRAY3D Δώστε πλήθος επιπέδων [__ocs_arg_rows__×__ocs_arg_cols__]: + .array3d-enter-row-count = ARRAY3D Δώστε πλήθος γραμμών: + .array3d-level-spacing-rows-cols-levels-r-rs-c = ARRAY3D Απόσταση επιπέδων [__ocs_arg_rows__×__ocs_arg_cols__×__ocs_arg_levels__, γρ=__ocs_arg_rs__ στ=__ocs_arg_cs__]: + .array3d-row-spacing-rows-cols-levels = ARRAY3D Απόσταση γραμμών [__ocs_arg_rows__×__ocs_arg_cols__×__ocs_arg_levels__]: + .arraypath-enter-item-count = ARRAYPATH Δώστε πλήθος στοιχείων <__ocs_fmt_0__>: + .arraypath-select-path-entity-objects = ARRAYPATH Επιλέξτε οντότητα διαδρομής [__ocs_fmt_0__ αντικείμενα]: + .arraypolar-enter-item-count = ARRAYPOLAR Δώστε πλήθος στοιχείων <__ocs_fmt_0__>: + .arraypolar-enter-total-angle-in-degrees-0-coun = ARRAYPOLAR Δώστε συνολική γωνία σε μοίρες <__ocs_fmt_0__> [__ocs_fmt_1__ στοιχεία]: + .arraypolar-specify-center-point-objects = ARRAYPOLAR Ορίστε σημείο κέντρου [__ocs_fmt_0__ αντικείμενα]: + .arrayrect-column-spacing-0-rows-cols-row-row-s = ARRAYRECT Απόσταση στηλών <__ocs_fmt_0__> [__ocs_fmt_1__×__ocs_fmt_2__, γρ=__ocs_fmt_3__]: + .arrayrect-enter-column-count-rows-rows = ARRAYRECT Δώστε πλήθος στηλών <__ocs_fmt_0__> [__ocs_fmt_1__ γραμμές]: + .arrayrect-enter-row-count = ARRAYRECT Δώστε πλήθος γραμμών <__ocs_fmt_0__>: + .arrayrect-row-spacing-0-rows-cols = ARRAYRECT Απόσταση γραμμών <__ocs_fmt_0__> [__ocs_fmt_1__×__ocs_fmt_2__]: + .attedit-select-block-with-attributes = ATTEDIT Επιλέξτε μπλοκ με χαρακτηριστικά: + .annotation-object-scale = Κλίμακα αντικειμένου επισημείωσης + .bedit-select-block-reference-to-edit = BEDIT Επιλέξτε αναφορά μπλοκ προς επεξεργασία: + .blend-enter-continuity-tangent-curvature-c = BLEND Δώστε συνέχεια [Εφαπτομενική/Καμπυλότητα] <__ocs_arg_c__>: + .blend-select-first-open-curve-continuity-c = BLEND Επιλέξτε πρώτη ανοικτή καμπύλη [Συνέχεια=__ocs_arg_c__]: + .blend-select-second-open-curve-continuity-c = BLEND Επιλέξτε δεύτερη ανοικτή καμπύλη [Συνέχεια=__ocs_arg_c__]: + .break-select-object = BREAK Επιλέξτε αντικείμενο: + .break-specify-first-break-point = BREAK Ορίστε πρώτο σημείο διακοπής: + .break-specify-second-break-point = BREAK Ορίστε δεύτερο σημείο διακοπής: + .breakatpoint-select-object = BREAKATPOINT Επιλέξτε αντικείμενο: + .breakatpoint-specify-break-point = BREAKATPOINT Ορίστε σημείο διακοπής: + .block-scale-x = Κλίμακα μπλοκ X: + .block-scale-y = Κλίμακα μπλοκ Y: + .block-scale-z = Κλίμακα μπλοκ Z: + .boundary-edges = Ακμές ορίου + .break-gap-size = Μέγεθος κενού διακοπής: + .chamfer-enter-first-chamfer-distance-d1 = CHAMFER Δώστε πρώτη απόσταση λοξότμησης <__ocs_arg_d1__>: + .chamfer-enter-second-chamfer-distance-d2 = CHAMFER Δώστε δεύτερη απόσταση λοξότμησης <__ocs_arg_d2__>: + .chamfer-select-first-line-d1-d1-d2-d2 = CHAMFER Επιλέξτε πρώτη γραμμή [D1=__ocs_arg_d1__ D2=__ocs_arg_d2__]: + .chamfer-select-second-line-d1-d1-d2-d2 = CHAMFER Επιλέξτε δεύτερη γραμμή [D1=__ocs_arg_d1__ D2=__ocs_arg_d2__]: + .chamfer-select-the-adjacent-polyline-segment-d = CHAMFER Επιλέξτε το γειτονικό τμήμα της πολυγραμμής [D1=__ocs_arg_d1__ D2=__ocs_arg_d2__]: + .copy-enter-number-of-items-to-array = COPY Δώστε πλήθος στοιχείων διάταξης: + .copy-specify-second-point-for-n-item-array-bas = COPY Ορίστε δεύτερο σημείο για διάταξη __ocs_arg_n__ στοιχείων [βάση __ocs_arg_bx__,__ocs_arg_by__]: + .continuity = Συνέχεια + .curvature = Καμπυλότητα + .cutting-edges = Ακμές κοπής + .decurve = Αφαίρεση καμπυλότητας + .discard-block-edit = Απόρριψη επεξεργασίας μπλοκ + .explode-select-objects-to-explode = EXPLODE Επιλέξτε αντικείμενα προς διάσπαση: + .extend-select-boundary-edges-picked-enter-done = EXTEND Επιλέξτε ακμές ορίου [__ocs_fmt_0__ επιλεγμένες, Enter = τέλος]: + .extend-enter-done = EXTEND [Enter = τέλος]: + .extend-edge-click-near-end-of-object-to-extend = EXTEND__ocs_fmt_0__ Κάντε κλικ κοντά στο άκρο του αντικειμένου προς επέκταση (Shift+κλικ για αποκοπή): + .extend-edge-crossing-first-corner = EXTEND__ocs_fmt_0__ Τέμνουσα: πρώτη γωνία: + .extend-edge-crossing-opposite-corner = EXTEND__ocs_fmt_0__ Τέμνουσα: απέναντι γωνία: + .extend-edge-fence-pick-points-placed-enter-ext = EXTEND__ocs_fmt_0__ Διαδρομή: επιλέξτε σημεία [__ocs_fmt_1__ τοποθετημένα, Enter = επέκταση των τεμνόμενων]: + .extrim-click-the-side-to-trim-away = EXTRIM Κάντε κλικ στην πλευρά που θα αποκοπεί: + .extrim-select-cutting-boundary = EXTRIM Επιλέξτε όριο κοπής: + .edge-extend-title-case = Ακμή: Επέκταση + .erase = Διαγραφή + .explode = Διάσπαση + .extend = Επέκταση + .fillet-enter-fillet-radius-4 = FILLET Δώστε ακτίνα στρογγυλέματος <__ocs_fmt_0__>: + .fillet-select-first-object-line-arc-lwpolyline = FILLET Επιλέξτε πρώτο αντικείμενο (Line/Arc/LwPolyline) [R=__ocs_fmt_0__]: + .fillet-select-second-object-line-arc-lwpolylin = FILLET Επιλέξτε δεύτερο αντικείμενο (Line/Arc/LwPolyline) [R=__ocs_fmt_0__]: + .join-select-objects-to-join-count-selected-ent = JOIN Επιλέξτε αντικείμενα προς ένωση (__ocs_arg_count__ επιλεγμένα, Enter για εφαρμογή): + .lengthen-enter-option-de-delta-to-total-p-pct = LENGTHEN Δώστε επιλογή [DE <δέλτα> / TO <σύνολο> / P <ποσοστό>]: + .lengthen-select-object = LENGTHEN Επιλέξτε αντικείμενο: + .mirror-erase-source-objects-yes-no-no = MIRROR Διαγραφή αρχικών αντικειμένων; [Ναι/Όχι] <Όχι>: + .mirror-specify-first-mirror-line-point-count-o = MIRROR Ορίστε πρώτο σημείο του άξονα καθρεπτισμού [__ocs_arg_count__ αντικείμενα]: + .mirror-specify-second-point-p1-px-py = MIRROR Ορίστε δεύτερο σημείο [σ1=__ocs_arg_px__,__ocs_arg_py__]: + .move-specify-base-point-count-objects = MOVE Ορίστε σημείο βάσης [__ocs_arg_count__ αντικείμενα]: + .move-specify-destination-base-bx-by = MOVE Ορίστε προορισμό [βάση __ocs_arg_bx__,__ocs_arg_by__]: + .mirror = Καθρεπτισμός + .move-freely = Ελεύθερη μετακίνηση + .move-text-arrows-out = Μετακίνηση κειμένου και βελών εκτός + .offset-select-object-to-offset-enter-to-finish = OFFSET Επιλέξτε αντικείμενο προς μετατόπιση (Enter για τερματισμό): + .offset-specify-offset-distance-or-through-d = OFFSET Ορίστε απόσταση μετατόπισης ή [Διέλευση] <__ocs_arg_d__>: + .offset-n-click-side-or-multiple-distance-d = OFFSET__ocs_arg_n__ Κάντε κλικ σε πλευρά ή [Πολλαπλά] [απόσταση __ocs_arg_d__]: + .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Κάντε κλικ σε σημείο διέλευσης ή [Πολλαπλά]: + .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Πολλαπλά Κάντε κλικ στην επόμενη πλευρά [απόσταση __ocs_arg_d__]: + .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Πολλαπλά Κάντε κλικ στο επόμενο σημείο διέλευσης: + .offset-dimexo = Μετατόπιση (DIMEXO) + .overall-scale-dimscale = Συνολική κλίμακα (DIMSCALE) + .pedit-enter-option = PEDIT Δώστε επιλογή: + .pedit-object-is-not-a-polyline-turn-it-into-on = PEDIT Το αντικείμενο δεν είναι πολυγραμμή. Να μετατραπεί σε πολυγραμμή; [Ναι/Όχι] : + .pedit-select-polyline-or-a-line-arc-to-convert = PEDIT Επιλέξτε πολυγραμμή (ή γραμμή/τόξο προς μετατροπή): + .pedit-specify-new-width = PEDIT Ορίστε νέο πλάτος: + .pedit-join-select-objects-to-join-count-picked = PEDIT Join Επιλέξτε αντικείμενα προς ένωση (__ocs_arg_count__ επιλεγμένα), Enter για συγχώνευση: + .path-array = Διάταξη κατά διαδρομή + .polar-array = Πολική διάταξη + .refclose-save-discard-save = REFCLOSE [Αποθήκευση/Απόρριψη] <Αποθήκευση>: + .refedit-select-block-reference-to-edit = REFEDIT Επιλέξτε αναφορά μπλοκ προς επεξεργασία: + .reverse-select-line-polyline-or-spline-to-reve = REVERSE Επιλέξτε γραμμή, πολυγραμμή ή spline προς αντιστροφή: + .rotate-specify-first-reference-point-or-type-r = ROTATE Ορίστε πρώτο σημείο αναφοράς ή πληκτρολογήστε γωνία αναφοράς: + .rotate-specify-new-absolute-angle-ref-a = ROTATE Ορίστε νέα απόλυτη γωνία [αναφ=__ocs_arg_a__]: + .rotate-specify-rotation-angle-a = ROTATE Ορίστε γωνία περιστροφής <__ocs_arg_a__>: + .rotate-specify-rotation-center-count-objects = ROTATE Ορίστε κέντρο περιστροφής [__ocs_arg_count__ αντικείμενα]: + .rotate-specify-second-reference-point = ROTATE Ορίστε δεύτερο σημείο αναφοράς: + .rectangular-array = Ορθογωνική διάταξη + .scale-specify-base-point-count-objects = SCALE Ορίστε σημείο βάσης [__ocs_arg_count__ αντικείμενα]: + .scale-specify-first-reference-point-or-type-re = SCALE Ορίστε πρώτο σημείο αναφοράς ή πληκτρολογήστε μήκος αναφοράς: + .scale-specify-new-length-from-base-or-type-a-l = SCALE Ορίστε νέο μήκος από τη βάση ή πληκτρολογήστε μήκος [αναφ=__ocs_arg_d__]: + .scale-specify-scale-factor-f = SCALE Ορίστε συντελεστή κλίμακας <__ocs_arg_f__>: + .scale-specify-second-reference-point = SCALE Ορίστε δεύτερο σημείο αναφοράς: + .splinedit-select-spline = SPLINEDIT Επιλέξτε spline: + .splinedit-close-open-reverse-exit = SPLINEDIT [CLOSE/OPEN/REVERSE/EXIT]: + .stretch-specify-base-point = STRETCH Ορίστε σημείο βάσης: + .stretch-specify-first-corner-of-crossing-window-count-objects = STRETCH Ορίστε πρώτη γωνία του τέμνοντος παραθύρου [__ocs_arg_count__ αντικείμενα]: + .stretch-specify-first-corner-of-crossing-window = STRETCH Ορίστε πρώτη γωνία του τέμνοντος παραθύρου: + .stretch-specify-new-point-base-bx-bz = STRETCH Ορίστε νέο σημείο [βάση __ocs_arg_bx__,__ocs_arg_bz__]: + .stretch-specify-opposite-corner = STRETCH Ορίστε απέναντι γωνία: + .save-block = Αποθήκευση μπλοκ + .save-block-edit = Αποθήκευση επεξεργασίας μπλοκ + .scale-manager = Διαχείριση κλιμάκων + .scale-factor = Συντελεστής κλίμακας: + .scale-units = Κλίμακα/Μονάδες + .spline-edit = Επεξεργασία spline + .torient-new-absolute-rotation-most-readable = TORIENT Νέα απόλυτη περιστροφή <Βέλτιστη αναγνωσιμότητα>: + .torient-specify-second-point = TORIENT Ορίστε δεύτερο σημείο: + .trim-erase-click-objects-to-delete-enter-done = TRIM Διαγραφή: κάντε κλικ στα αντικείμενα προς διαγραφή [Enter = τέλος]: + .trim-select-cutting-edges-picked-enter-done = TRIM Επιλέξτε ακμές κοπής [__ocs_fmt_0__ επιλεγμένες, Enter = τέλος]: + .trim-edge-click-segment-to-remove-shift-click = TRIM__ocs_fmt_0__ Κάντε κλικ στο τμήμα προς αφαίρεση (Shift+κλικ για επέκταση): + .trim-edge-crossing-first-corner = TRIM__ocs_fmt_0__ Τέμνουσα: πρώτη γωνία: + .trim-edge-crossing-opposite-corner = TRIM__ocs_fmt_0__ Τέμνουσα: απέναντι γωνία: + .trim-edge-fence-pick-points-placed-enter-trim = TRIM__ocs_fmt_0__ Διαδρομή: επιλέξτε σημεία [__ocs_fmt_1__ τοποθετημένα, Enter = αποκοπή των τεμνόμενων]: + .through = Διέλευση + .tol-scale-dimtfac = Κλίμακα ανοχής (DIMTFAC) + .trim = Αποκοπή + .exit = Έξοδος + +groups = + .group-enter-group-name-name = GROUP Δώστε όνομα ομάδας [__ocs_arg_name__]: + .ungroup-select-grouped-objects = UNGROUP Επιλέξτε ομαδοποιημένα αντικείμενα: + .ungroup = Κατάργηση ομαδοποίησης + +layers = + .n-layers = __ocs_arg_n__ επίπεδα + .n-saved-layers = __ocs_arg_n__ αποθηκευμένα επίπεδα + .active-ucs-named = Ενεργό UCS: __ocs_fmt_0__ | Ονομασμένα: __ocs_fmt_1__ + .active-ucs-no-named-ucss-defined = Ενεργό UCS: __ocs_fmt_0__ | Δεν έχουν οριστεί ονομασμένα UCS. + .all-layers-thawed = Όλα τα επίπεδα ξεπάγωσαν. + .all-layers-turned-on = Όλα τα επίπεδα ενεργοποιήθηκαν. + .changes-affect-the-saved-state-only-the-drawin = Οι αλλαγές επηρεάζουν μόνο την αποθηκευμένη κατάσταση· το σχέδιο παραμένει αμετάβλητο μέχρι την Επαναφορά. + .choose-new-to-capture-the-current-layer-settin = Επιλέξτε Νέο για να καταγράψετε τις τρέχουσες ρυθμίσεις επιπέδων. + .current-mleader-style = Τρέχον στυλ MLeader: __ocs_fmt_0__ + .current-layer = Τρέχον επίπεδο + .current-layer-set-to-layer = Το τρέχον επίπεδο ορίστηκε σε "__ocs_fmt_0__". + .current-ucs = Τρέχον ucs + .dimstyle-style-name-prop-val-3 = DIMSTYLE: '__ocs_fmt_0__'.__ocs_fmt_1__ = __ocs_fmt_2__ + .dimstyle-already-exists = DIMSTYLE: το '__ocs_fmt_0__' υπάρχει ήδη. + .dimstyle-created = DIMSTYLE: το '__ocs_fmt_0__' δημιουργήθηκε. + .dimstyle-not-found = DIMSTYLE: το '__ocs_fmt_0__' δεν βρέθηκε. + .dimstyle-unknown-property-try-dimtxt-dimasz-di = DIMSTYLE: άγνωστη ιδιότητα '__ocs_fmt_0__'. Δοκιμάστε: dimtxt dimasz dimdli dimexo dimexe dimgap dimscale dimlfac dimdle dimcen dimtsz + .delete-layer = Διαγραφή επιπέδου + .dimstyles = Στυλ διαστάσεων: __ocs_fmt_0__ + .edit = Επεξεργασία + .edit-layer-state = Επεξεργασία κατάστασης επιπέδων + .freeze = Πάγωμα + .hideobjects-select-the-objects-to-hide-first = HIDEOBJECTS: επιλέξτε πρώτα τα αντικείμενα προς απόκρυψη. + .hid-n-object-s-unisolateobjects-to-restore = Αποκρύφτηκαν __ocs_fmt_0__ αντικείμενο(α). UNISOLATEOBJECTS για επαναφορά. + .isolateobjects-select-the-objects-to-isolate-f = ISOLATEOBJECTS: επιλέξτε πρώτα τα αντικείμενα προς απομόνωση. + .isolate-layer = Απομόνωση επιπέδου + .isolated-n-object-s-unisolateobjects-to-restor = Απομονώθηκαν __ocs_fmt_0__ αντικείμενο(α). UNISOLATEOBJECTS για επαναφορά. + .isolation-ended-all-objects-shown = Η απομόνωση τερματίστηκε — εμφανίζονται όλα τα αντικείμενα. + .laydel-layer-to-delete = LAYDEL επίπεδο προς διαγραφή: + .laydel-deleted-layer-layer-and-n-object-s = LAYDEL: διαγράφηκε το επίπεδο "__ocs_fmt_0__" και __ocs_fmt_1__ αντικείμενο(α). + .laydel-layer-0-cannot-be-deleted = LAYDEL: το επίπεδο "0" δεν μπορεί να διαγραφεί. + .laydel-no-layer-named-name = LAYDEL: δεν υπάρχει επίπεδο με όνομα "__ocs_fmt_0__". + .layer-already-exists = LAYER: το '__ocs_fmt_0__' υπάρχει ήδη. + .layer-color-set-to-aci = LAYER: το χρώμα του '__ocs_fmt_0__' ορίστηκε σε ACI __ocs_fmt_1__. + .layer-created = LAYER: το '__ocs_fmt_0__' δημιουργήθηκε. + .layer-not-found = LAYER: το '__ocs_fmt_0__' δεν βρέθηκε. + .layer-current-layer-set-to = LAYER: το τρέχον επίπεδο ορίστηκε σε '__ocs_fmt_0__'. + .layer-layers-frozen = LAYER: τα επίπεδα πάγωσαν. + .layer-layers-locked = LAYER: τα επίπεδα κλειδώθηκαν. + .layer-layers-thawed = LAYER: τα επίπεδα ξεπάγωσαν. + .layer-layers-turned-off = LAYER: τα επίπεδα απενεργοποιήθηκαν. + .layer-layers-turned-on = LAYER: τα επίπεδα ενεργοποιήθηκαν. + .layer-layers-unlocked = LAYER: τα επίπεδα ξεκλειδώθηκαν. + .layerstate-deleted-arg = LAYERSTATE: διαγράφηκε το "__ocs_fmt_0__". + .layerstate-no-saved-state-named-arg = LAYERSTATE: δεν υπάρχει αποθηκευμένη κατάσταση με όνομα "__ocs_fmt_0__". + .layerstate-restored-arg-n-layer-s = LAYERSTATE: επαναφέρθηκε το "__ocs_fmt_0__" (__ocs_fmt_1__ επίπεδο/α). + .layerstate-saved-arg = LAYERSTATE: αποθηκεύτηκε το "__ocs_fmt_0__". + .layiso-isolated-layer-s = LAYISO: απομονώθηκαν __ocs_fmt_0__ επίπεδο(α). + .layiso-select-entities-on-the-layers-to-isolat = LAYISO: επιλέξτε πρώτα οντότητες στα επίπεδα προς απομόνωση. + .laymatch-select-objects-to-change-layer = LAYMATCH Επιλέξτε αντικείμενα για αλλαγή επιπέδου: + .laymatch-select-source-object-to-match-layer-f = LAYMATCH Επιλέξτε αντικείμενο προέλευσης από το οποίο θα ληφθεί το επίπεδο: + .laymrg-source-layer-merged-away = LAYMRG επίπεδο προέλευσης (θα συγχωνευθεί): + .laymrg-target-layer-kept = LAYMRG επίπεδο προορισμού (διατηρείται): + .laymrg-layer-0-cannot-be-merged-away = LAYMRG: το επίπεδο "0" δεν μπορεί να συγχωνευθεί. + .laymrg-merged-src-into-dst-moved-object-s = LAYMRG: το "__ocs_fmt_0__" συγχωνεύτηκε στο "__ocs_fmt_1__" (__ocs_fmt_2__ αντικείμενο(α)). + .laymrg-source-and-target-are-the-same-layer = LAYMRG: η προέλευση και ο προορισμός είναι το ίδιο επίπεδο. + .laymrg-source-and-target-layers-must-both-exis = LAYMRG: τα επίπεδα προέλευσης και προορισμού πρέπει να υπάρχουν και τα δύο. + .layuniso-all-layers-restored = LAYUNISO: όλα τα επίπεδα επαναφέρθηκαν. + .layer-freeze = Πάγωμα επιπέδου + .layer-lock = Κλείδωμα επιπέδου + .layer-manager = Διαχείριση επιπέδων + .layer-off = Απενεργοποίηση επιπέδου + .layer-state-manager = Διαχείριση καταστάσεων επιπέδων + .layer-unlock = Ξεκλείδωμα επιπέδου + .layer-state-name = Όνομα κατάστασης επιπέδων + .layer-states-are-stored-inside-the-drawing-and = Οι καταστάσεις επιπέδων αποθηκεύονται μέσα στο σχέδιο και παραμένουν διαθέσιμες μετά το επόμενο άνοιγμά του. + .layer-s-frozen = Το/τα επίπεδο(α) πάγωσαν. + .layer-s-locked = Το/τα επίπεδο(α) κλειδώθηκαν. + .layer-s-turned-off = Το/τα επίπεδο(α) απενεργοποιήθηκαν. + .layer-s-unlocked = Το/τα επίπεδο(α) ξεκλειδώθηκαν. + .layers = Επίπεδα: __ocs_fmt_0__ + .lock = Κλείδωμα + .mleaderstyle-style-name-prop-val-3 = MLEADERSTYLE: '__ocs_fmt_0__'.__ocs_fmt_1__ = __ocs_fmt_2__ + .mleaderstyle-already-exists = MLEADERSTYLE: το '__ocs_fmt_0__' υπάρχει ήδη. + .mleaderstyle-created = MLEADERSTYLE: το '__ocs_fmt_0__' δημιουργήθηκε. + .mleaderstyle-not-found = MLEADERSTYLE: το '__ocs_fmt_0__' δεν βρέθηκε. + .mleaderstyle-current-style-set-to-name = MLEADERSTYLE: το τρέχον στυλ ορίστηκε σε '__ocs_fmt_0__'. + .mleaderstyle-unknown-property-try-text-height = MLEADERSTYLE: άγνωστη ιδιότητα '__ocs_fmt_0__'. Δοκιμάστε: text_height arrowhead_size landing_distance landing_gap + .mlstyle-already-exists = MLSTYLE: το '__ocs_fmt_0__' υπάρχει ήδη. + .mlstyle-created = MLSTYLE: το '__ocs_fmt_0__' δημιουργήθηκε. + .mlstyle-deleted = MLSTYLE: το '__ocs_fmt_0__' διαγράφηκε. + .mlstyle-not-found = MLSTYLE: το '__ocs_fmt_0__' δεν βρέθηκε. + .mlstyle-current-style-set-to = MLSTYLE: το τρέχον στυλ ορίστηκε σε '__ocs_fmt_0__'. + .mleader-styles-none-active-current = Στυλ MLeader: (κανένα) ενεργό: __ocs_fmt_0__ + .mleader-styles-active-current = Στυλ MLeader: __ocs_fmt_0__ ενεργό: __ocs_fmt_1__ + .mlinestyles = + Στυλ MLine: + __ocs_fmt_0__ + .make-current = Ορισμός ως τρέχον + .match-layer = Αντιστοίχιση επιπέδου + .named-views = Ονομασμένες προβολές: __ocs_fmt_0__ + .new-vp = Νέα ΘΠ + .new-vp-freeze = Πάγωμα νέας ΘΠ + .new-layer-state = Νέα κατάσταση επιπέδων + .no-dim-styles-defined = Δεν έχουν οριστεί στυλ διαστάσεων. + .no-hidden-objects = Δεν υπάρχουν κρυφά αντικείμενα. + .no-layer-states-in-this-drawing = Δεν υπάρχουν καταστάσεις επιπέδων σε αυτό το σχέδιο + .no-matching-layer-states = Δεν υπάρχουν καταστάσεις επιπέδων που να ταιριάζουν + .no-multiline-styles = Δεν υπάρχουν στυλ πολλαπλών γραμμών. + .no-named-views-saved = Δεν έχουν αποθηκευτεί ονομασμένες προβολές. + .no-table-styles = Δεν υπάρχουν στυλ πινάκων. + .no-text-styles-defined = Δεν έχουν οριστεί στυλ κειμένου. + .not-set = Δεν έχει οριστεί + .on-off-spaced-separator-title-case = Ενεργό / Ανενεργό + .on-off-title-case = Ενεργό/Ανενεργό + .optional-description = Προαιρετική περιγραφή + .plan-current-ucs-ucs-world-current = PLAN [Τρέχον ucs / Ucs / Παγκόσμιο] <Τρέχον>: + .plan-ucs-ucs-name = PLAN UCS όνομα ucs: + .plan-current-ucs-plan-view = PLAN: κάτοψη του τρέχοντος UCS. + .plan-plan-view-of-ucs = PLAN: κάτοψη του UCS '__ocs_fmt_0__'. + .plan-world-plan-view = PLAN: παγκόσμια κάτοψη. + .properties-restored-by-this-state = Ιδιότητες που επαναφέρονται από αυτή την κατάσταση + .restored-properties = Επαναφερόμενες ιδιότητες + .save-changes = Αποθήκευση αλλαγών + .save-new-state = Αποθήκευση νέας κατάστασης + .save-captures-the-current-settings-of-every-la = Η αποθήκευση καταγράφει τις τρέχουσες ρυθμίσεις κάθε επιπέδου στο σχέδιο. + .saved-layer-states = Αποθηκευμένες καταστάσεις επιπέδων: __ocs_fmt_0__ + .saved-layer-values = Αποθηκευμένες τιμές επιπέδων + .saved-state-details = Λεπτομέρειες αποθηκευμένης κατάστασης + .search-layer-states = Αναζήτηση καταστάσεων επιπέδων… + .search = Αναζήτηση… + .tablestyle-already-exists = TABLESTYLE: το '__ocs_fmt_0__' υπάρχει ήδη. + .tablestyle-created = TABLESTYLE: το '__ocs_fmt_0__' δημιουργήθηκε. + .tablestyles = + Στυλ πινάκων: + __ocs_fmt_0__ + .text-styles = Στυλ κειμένου: __ocs_fmt_0__ + .thaw-all-layers = Ξεπάγωμα όλων των επιπέδων + .turn-all-layers-on = Ενεργοποίηση όλων των επιπέδων + .ucs-name-not-found = Το UCS '__ocs_fmt_0__' δεν βρέθηκε. + .ucs-activated = Το UCS '__ocs_fmt_0__' ενεργοποιήθηκε. + .ucs-deleted = Το UCS '__ocs_fmt_0__' διαγράφηκε. + .ucs-not-found = Το UCS '__ocs_fmt_0__' δεν βρέθηκε. + .ucs-not-found-usage-ucs-list-save-name-delete = Το UCS '__ocs_fmt_0__' δεν βρέθηκε. Χρήση: UCS LIST | SAVE <όνομα> | DELETE <όνομα> | W | ORIGIN x,y,z | X/Y/Z <γωνία> + .ucs-saved = Το UCS '__ocs_fmt_0__' αποθηκεύτηκε. + .ucs-origin-set-to-4-4-4 = Η αρχή του UCS ορίστηκε στο (__ocs_fmt_0__, __ocs_fmt_1__, __ocs_fmt_2__). + .ucs-reset-to-world-coordinate-system = Το UCS επαναφέρθηκε στο Παγκόσμιο Σύστημα Συντεταγμένων. + .ucs-rotated-2-around-x = Το UCS περιστράφηκε __ocs_fmt_0__° γύρω από τον X. + .ucs-rotated-2-around-y = Το UCS περιστράφηκε __ocs_fmt_0__° γύρω από τον Y. + .ucs-rotated-2-around-z = Το UCS περιστράφηκε __ocs_fmt_0__° γύρω από τον Z. + .ucs = Ucs + .unisolate-layers = Κατάργηση απομόνωσης επιπέδων + .update-from-drawing = Ενημέρωση από το σχέδιο + .usage-dimstyle-new-name = Χρήση: DIMSTYLE NEW <όνομα> + .usage-dimstyle-set-name-property-value = Χρήση: DIMSTYLE SET <όνομα> <ιδιότητα> <τιμή> + .usage-laydel-layer-name = Χρήση: LAYDEL <όνομα επιπέδου> + .usage-layer-color-name-aci-index = Χρήση: LAYER COLOR <όνομα> <δείκτης_aci> + .usage-layer-list-new-name-on-off-freeze-thaw-l = Χρήση: LAYER LIST | NEW <όνομα> | ON/OFF/FREEZE/THAW/LOCK/UNLOCK <όνομα> | COLOR <όνομα> | SET <όνομα> + .usage-layer-new-name = Χρήση: LAYER NEW <όνομα> + .usage-layerstate-delete-name = Χρήση: LAYERSTATE DELETE <όνομα> + .usage-layerstate-restore-name = Χρήση: LAYERSTATE RESTORE <όνομα> + .usage-layerstate-save-name = Χρήση: LAYERSTATE SAVE <όνομα> + .usage-layerstate-save-restore-delete-name-list = Χρήση: LAYERSTATE SAVE|RESTORE|DELETE <όνομα> | ? (λίστα) + .usage-laymrg-source-layer-target-layer = Χρήση: LAYMRG <επίπεδο προέλευσης> <επίπεδο προορισμού> + .usage-mleaderstyle-list-new-name-set-name-prop = Χρήση: MLEADERSTYLE LIST | NEW <όνομα> | SET <όνομα> <ιδιότητα> <τιμή> | CURRENT [<όνομα>] + .usage-mleaderstyle-new-name = Χρήση: MLEADERSTYLE NEW <όνομα> + .usage-mleaderstyle-set-name-property-value = Χρήση: MLEADERSTYLE SET <όνομα> <ιδιότητα> <τιμή> + .usage-mlstyle-new-name = Χρήση: MLSTYLE NEW <όνομα> + .usage-mlstyle-set-name = Χρήση: MLSTYLE SET <όνομα> + .usage-mlstyle-list-new-name-set-name-del-name = Χρήση: MLSTYLE [LIST|NEW <όνομα>|SET <όνομα>|DEL <όνομα>] + .usage-plan-ucs-name = Χρήση: PLAN UCS <όνομα> + .usage-plan-current-ucs-name-world = Χρήση: PLAN [CURRENT / UCS <όνομα> / WORLD] + .usage-tablestyle-new-name = Χρήση: TABLESTYLE NEW <όνομα> + .usage-tablestyle-list-new-name = Χρήση: TABLESTYLE [LIST|NEW <όνομα>] + .usage-ucs-delete-name = Χρήση: UCS DELETE <όνομα> + .usage-ucs-origin-x-y-z = Χρήση: UCS ORIGIN x,y,z + .usage-ucs-save-name = Χρήση: UCS SAVE <όνομα> + .usage-ucs-x-angle-degrees = Χρήση: UCS X <γωνία_σε_μοίρες> + .usage-ucs-y-angle-degrees = Χρήση: UCS Y <γωνία_σε_μοίρες> + .usage-ucs-z-angle-degrees = Χρήση: UCS Z <γωνία_σε_μοίρες> + .usage-view-delete-name = Χρήση: VIEW DELETE <όνομα> + .usage-view-list-view-save-name-view-restore-na = Χρήση: VIEW LIST | VIEW SAVE <όνομα> | VIEW RESTORE <όνομα> | VIEW DELETE <όνομα> + .usage-view-restore-name = Χρήση: VIEW RESTORE <όνομα> + .usage-view-save-name = Χρήση: VIEW SAVE <όνομα> + .usage-prefix-font-style-font-file = Χρήση: __ocs_fmt_0__ FONT <στυλ> <αρχείο_γραμματοσειράς> + .usage-prefix-list-new-name-font-style-file-wid = Χρήση: __ocs_fmt_0__ LIST | NEW <όνομα> | FONT <στυλ> <αρχείο> | WIDTH <στυλ> <συντελεστής> | OBLIQUE <στυλ> <γωνία> + .usage-prefix-new-name = Χρήση: __ocs_fmt_0__ NEW <όνομα> + .usage-prefix-oblique-style-angle-degrees = Χρήση: __ocs_fmt_0__ OBLIQUE <στυλ> <γωνία_σε_μοίρες> + .usage-prefix-width-style-factor = Χρήση: __ocs_fmt_0__ WIDTH <στυλ> <συντελεστής> + .view-list-save-restore-delete = VIEW [Λίστα / Αποθήκευση / Επαναφορά / Διαγραφή]: + .view-delete-view-name = VIEW DELETE όνομα προβολής: + .view-restore-view-name = VIEW RESTORE όνομα προβολής: + .view-save-new-view-name = VIEW SAVE νέο όνομα προβολής: + .view-deleted = Η προβολή '__ocs_fmt_0__' διαγράφηκε. + .view-not-found = Η προβολή '__ocs_fmt_0__' δεν βρέθηκε. + .view-restored = Η προβολή '__ocs_fmt_0__' επαναφέρθηκε. + .view-saved = Η προβολή '__ocs_fmt_0__' αποθηκεύτηκε. + .prefix-style-name-font-set-to-font = __ocs_fmt_0__: η γραμματοσειρά του '__ocs_fmt_1__' ορίστηκε σε '__ocs_fmt_2__'. + .prefix-style-name-oblique-angle-set-to-deg-1 = __ocs_fmt_0__: η γωνία λοξότητας του '__ocs_fmt_1__' ορίστηκε σε __ocs_fmt_2__°. + .prefix-style-name-width-factor-set-to-factor-3 = __ocs_fmt_0__: ο συντελεστής πλάτους του '__ocs_fmt_1__' ορίστηκε σε __ocs_fmt_2__. + .prefix-active-style-set-to-name = __ocs_fmt_0__: το ενεργό στυλ ορίστηκε σε '__ocs_fmt_1__'. + .prefix-style-name-already-exists = __ocs_fmt_0__: το στυλ '__ocs_fmt_1__' υπάρχει ήδη. + .prefix-style-name-created = __ocs_fmt_0__: το στυλ '__ocs_fmt_1__' δημιουργήθηκε. + .prefix-style-name-not-found = __ocs_fmt_0__: το στυλ '__ocs_fmt_1__' δεν βρέθηκε. + .prefix-style-style-name-not-found = __ocs_fmt_0__: το στυλ '__ocs_fmt_1__' δεν βρέθηκε. + +annotate = + .prefix-textedit-enter-text-edit-mode-single-mu = __ocs_arg_prefix__TEXTEDIT Δώστε λειτουργία επεξεργασίας κειμένου [Μεμονωμένη/Πολλαπλή] <__ocs_arg_mode__>: + .prefix-texteditmode-enter-new-value-for-texted = __ocs_arg_prefix__TEXTEDITMODE Δώστε νέα τιμή για το TEXTEDITMODE <__ocs_arg_v__>: + .arctext-text-to-place-along-the-arc = ARCTEXT κείμενο για τοποθέτηση κατά μήκος του τόξου: + .arctext-no-printable-text = ARCTEXT: δεν υπάρχει εκτυπώσιμο κείμενο. + .arctext-placed-n-character-s-along-the-arc = ARCTEXT: τοποθετήθηκαν __ocs_fmt_0__ χαρακτήρας(ες) κατά μήκος του τόξου. + .arctext-select-an-arc-first = ARCTEXT: επιλέξτε πρώτα ένα τόξο. + .add-scale = Προσθήκη κλίμακας + .align-leaders = Στοίχιση επεξηγήσεων + .angular = Γωνιακή + .annotate = Επισημείωση + .annotation-scaling = Κλιμάκωση επισημειώσεων + .collect-leaders = Συγκέντρωση επεξηγήσεων + .ddedit-select-text-entity = DDEDIT Επιλέξτε οντότητα κειμένου: + .dimaligned-enter-dimension-text-blank-measured = DIMALIGNED Δώστε κείμενο διάστασης (κενό = μετρημένη τιμή): + .dimaligned-enter-formatted-dimension-text-blank-measured = DIMALIGNED Δώστε μορφοποιημένο κείμενο διάστασης (κενό = μετρημένη τιμή): + .dimaligned-select-object-to-dimension = DIMALIGNED Επιλέξτε αντικείμενο προς διαστασιολόγηση: + .dimaligned-specify-dimension-line-location-tex = DIMALIGNED Ορίστε θέση γραμμής διάστασης [Mtext/Κείμενο/Γωνία]: + .dimaligned-specify-first-extension-line-origin = DIMALIGNED Ορίστε αρχή της πρώτης γραμμής προέκτασης ή πατήστε Enter για επιλογή αντικειμένου: + .dimaligned-specify-second-extension-line-origi = DIMALIGNED Ορίστε αρχή της δεύτερης γραμμής προέκτασης: + .dimaligned-specify-text-angle-degrees = DIMALIGNED Ορίστε γωνία κειμένου (μοίρες): + .dimangular-enter-dimension-text-blank-measured = DIMANGULAR Δώστε κείμενο διάστασης (κενό = μετρημένη τιμή): + .dimangular-enter-formatted-dimension-text-blank-measured = DIMANGULAR Δώστε μορφοποιημένο κείμενο διάστασης (κενό = μετρημένη τιμή): + .dimangular-select-arc-circle-line-or-specify-angle-vertex = DIMANGULAR Επιλέξτε τόξο, κύκλο, γραμμή ή ορίστε κορυφή γωνίας: + .dimangular-select-second-line = DIMANGULAR Επιλέξτε δεύτερη γραμμή: + .dimangular-specify-angle-vertex = DIMANGULAR Ορίστε κορυφή γωνίας: + .dimangular-specify-dimension-arc-location-options = DIMANGULAR Ορίστε θέση τόξου διάστασης [Mtext/Κείμενο/Γωνία/Τεταρτημόριο]: + .dimangular-specify-dimension-arc-location = DIMANGULAR Ορίστε θέση τόξου διάστασης: + .dimangular-specify-first-extension-line-point = DIMANGULAR Ορίστε σημείο της πρώτης γραμμής προέκτασης: + .dimangular-specify-quadrant = DIMANGULAR Ορίστε τεταρτημόριο: + .dimangular-specify-second-extension-line-point = DIMANGULAR Ορίστε σημείο της δεύτερης γραμμής προέκτασης: + .dimangular-specify-second-point-for-text-angle = DIMANGULAR Ορίστε δεύτερο σημείο για τη γωνία κειμένου: + .dimangular-specify-text-angle-or-first-point = DIMANGULAR Ορίστε γωνία κειμένου ή πρώτο σημείο: + .dimbaseline-no-base-dimension-found-place-a-di = DIMBASELINE Δεν βρέθηκε βασική διάσταση. Τοποθετήστε πρώτα μια διάσταση. + .dimbaseline-specify-a-second-extension-line-or = DIMBASELINE Ορίστε αρχή δεύτερης γραμμής προέκτασης (Enter για έξοδο): + .dimbreak-select-dimension-to-break = DIMBREAK Επιλέξτε διάσταση προς διακοπή: + .dimbreak-select-object-to-break-at-or-enter-fo = DIMBREAK Επιλέξτε αντικείμενο στο οποίο θα γίνει η διακοπή ή Enter για Αυτόματο: + .dimcontinue-no-base-dimension-found-place-a-di = DIMCONTINUE Δεν βρέθηκε βασική διάσταση. Τοποθετήστε πρώτα μια διάσταση. + .dimcontinue-specify-a-second-extension-line-or = DIMCONTINUE Ορίστε αρχή δεύτερης γραμμής προέκτασης (Enter για έξοδο): + .dimdiameter-enter-dimension-text-blank-measure = DIMDIAMETER Δώστε κείμενο διάστασης (κενό = μετρημένη τιμή): + .dimdiameter-select-arc-circle-or-polyline-arc = DIMDIAMETER Επιλέξτε τόξο, κύκλο ή τόξο πολυγραμμής: + .dimdiameter-specify-dimension-line-location-text = DIMDIAMETER Ορίστε θέση γραμμής διάστασης [Mtext/Κείμενο/Γωνία]: + .dimdiameter-specify-point-on-circle = DIMDIAMETER Ορίστε σημείο στον κύκλο: + .dimdiameter-specify-text-angle-degrees = DIMDIAMETER Ορίστε γωνία κειμένου (μοίρες): + .dimedit-enter-text-override-blank-reset-to-mea = DIMEDIT Δώστε παράκαμψη κειμένου (κενό = επαναφορά στη μετρημένη τιμή): + .dimedit-select-dimension = DIMEDIT Επιλέξτε διάσταση: + .dimjogged-created-a-jogged-radius-dimension = DIMJOGGED: δημιουργήθηκε διάσταση τεθλασμένης ακτίνας. + .dimjogged-invalid-radius = DIMJOGGED: μη έγκυρη ακτίνα. + .dimjogged-select-an-arc-or-circle-first = DIMJOGGED: επιλέξτε πρώτα ένα τόξο ή κύκλο. + .dimjogged-enter-dimension-text-blank-measured = DIMJOGGED Δώστε κείμενο διάστασης (κενό = μετρημένη τιμή): + .dimjogged-select-arc-circle-or-polyline-arc = DIMJOGGED Επιλέξτε τόξο, κύκλο ή τόξο πολυγραμμής: + .dimjogged-specify-center-location-override = DIMJOGGED Ορίστε παράκαμψη θέσης κέντρου: + .dimjogged-specify-dimension-line-location-text = DIMJOGGED Ορίστε θέση γραμμής διάστασης [Mtext/Κείμενο/Γωνία]: + .dimjogged-specify-jog-location = DIMJOGGED Ορίστε θέση τεθλασμένης: + .dimjogged-specify-text-angle-degrees = DIMJOGGED Ορίστε γωνία κειμένου (μοίρες): + .dimjogline-select-linear-or-aligned-dimension = DIMJOGLINE Επιλέξτε γραμμική ή στοιχισμένη διάσταση: + .dimjogline-specify-jog-location = DIMJOGLINE Ορίστε θέση τεθλασμένης: + .dimlinear-enter-dimension-text-blank-measured = DIMLINEAR Δώστε κείμενο διάστασης (κενό = μετρημένη τιμή): + .dimlinear-specify-dimension-line-location-text = DIMLINEAR Ορίστε θέση γραμμής διάστασης [Κείμενο/Γωνία]: + .dimlinear-specify-first-extension-line-origin = DIMLINEAR Ορίστε αρχή της πρώτης γραμμής προέκτασης: + .dimlinear-specify-second-extension-line-origin = DIMLINEAR Ορίστε αρχή της δεύτερης γραμμής προέκτασης [Κείμενο/Γωνία]: + .dimlinear-specify-text-angle-degrees = DIMLINEAR Ορίστε γωνία κειμένου (μοίρες): + .dimordinate-specify-feature-location = DIMORDINATE Ορίστε θέση χαρακτηριστικού: + .dimordinate-enter-dimension-text-blank-measured = DIMORDINATE Δώστε κείμενο διάστασης (κενό = μετρημένη τιμή): + .dimordinate-specify-leader-endpoint = DIMORDINATE Ορίστε άκρο επεξήγησης [Xdatum/Ydatum/Mtext/Κείμενο/Γωνία]: + .dimordinate-specify-text-angle-degrees = DIMORDINATE Ορίστε γωνία κειμένου (μοίρες): + .dimradius-enter-dimension-text-blank-measured = DIMRADIUS Δώστε κείμενο διάστασης (κενό = μετρημένη τιμή): + .dimradius-select-arc-circle-or-polyline-arc = DIMRADIUS Επιλέξτε τόξο, κύκλο ή τόξο πολυγραμμής: + .dimradius-specify-dimension-line-location-text = DIMRADIUS Ορίστε θέση γραμμής διάστασης [Mtext/Κείμενο/Γωνία]: + .dimradius-specify-radius-point = DIMRADIUS Ορίστε σημείο ακτίνας: + .dimradius-specify-text-angle-degrees = DIMRADIUS Ορίστε γωνία κειμένου (μοίρες): + .dimspace-enter-value-0-auto = DIMSPACE Δώστε τιμή (0 = αυτόματο): + .dimspace-select-base-dimension = DIMSPACE Επιλέξτε βασική διάσταση: + .dimspace-select-dimension-to-space-count-selec = DIMSPACE Επιλέξτε διάσταση προς διάταξη (__ocs_arg_count__ επιλεγμένες, Enter όταν τελειώσετε): + .dimtedit-select-dimension = DIMTEDIT Επιλέξτε διάσταση: + .dimtedit-specify-new-location-for-dimension-te = DIMTEDIT Ορίστε νέα θέση για το κείμενο της διάστασης: + .dim-break = Διακοπή διάστασης + .dim-edit = Επεξεργασία διάστασης + .dim-space = Διάταξη διαστάσεων + .dim-text-edit = Επεξεργασία κειμένου διάστασης + .explode-no-explodable-objects-selected = EXPLODE: δεν έχουν επιλεγεί αντικείμενα που μπορούν να διασπαστούν. + .edit-text = Επεξεργασία κειμένου + .extents-all = Όρια όλων + .extract-data = + Εξαγωγή + δεδομένων + .find = Εύρεση + .in = Μέσα + .justifytext-left-center-right-middle-aligned-f = JUSTIFYTEXT [Αριστερά / Κέντρο / Δεξιά / Μέση / Στοιχισμένο / Προσαρμογή]: + .justifytext-select-text-objects-first = JUSTIFYTEXT: επιλέξτε πρώτα αντικείμενα κειμένου. + .justifytext-unknown-justification-option = JUSTIFYTEXT: άγνωστη επιλογή στοίχισης. + .justifytext-updated-n-text-object-s = JUSTIFYTEXT: ενημερώθηκαν __ocs_fmt_0__ αντικείμενο(α) κειμένου. + .jog-line = Γραμμή τεθλασμένης + .leader-specify-arrowhead-point = LEADER Ορίστε σημείο άκρου βέλους: + .leader-specify-next-point-count-pts-enter-to-p = LEADER Ορίστε επόμενο σημείο [__ocs_arg_count__ σημ. — Enter για τοποθέτηση κειμένου]: + .link-data = + Σύνδεση + δεδομένων + .lower = Πεζά + .mleader-specify-arrowhead-point = MLEADER Ορίστε σημείο άκρου βέλους: + .mleader-specify-landing-point = MLEADER Ορίστε σημείο προσγείωσης: + .mleader-specify-next-point-count-pts-enter-to = MLEADER Ορίστε επόμενο σημείο [__ocs_arg_count__ σημ. — Enter για τοποθέτηση κειμένου]: + .mleaderadd-select-a-multileader = MLEADERADD Επιλέξτε πολλαπλή επεξήγηση: + .mleaderadd-specify-arrowhead-location = MLEADERADD Ορίστε θέση άκρου βέλους: + .mleaderadd-specify-next-leader-point-count-pts = MLEADERADD Ορίστε επόμενο σημείο επεξήγησης (__ocs_arg_count__ σημ., Enter για τερματισμό): + .mleaderalign-select-multileaders-to-align-ente = MLEADERALIGN Επιλέξτε πολλαπλές επεξηγήσεις προς στοίχιση (Enter όταν τελειώσετε): + .mleaderalign-specify-direction-pick-start-poin = MLEADERALIGN Ορίστε κατεύθυνση — επιλέξτε σημείο έναρξης: + .mleaderalign-specify-end-point-of-alignment-di = MLEADERALIGN Ορίστε τελικό σημείο της κατεύθυνσης στοίχισης: + .mleadercollect-select-multileaders-to-collect = MLEADERCOLLECT Επιλέξτε πολλαπλές επεξηγήσεις προς συγκέντρωση (Enter όταν τελειώσετε): + .mleadercollect-specify-collected-multileader-l = MLEADERCOLLECT Ορίστε θέση της συγκεντρωμένης πολλαπλής επεξήγησης: + .mleaderremove-click-near-the-leader-line-to-re = MLEADERREMOVE Κάντε κλικ κοντά στη γραμμή επεξήγησης προς αφαίρεση: + .mleaderremove-select-a-multileader = MLEADERREMOVE Επιλέξτε πολλαπλή επεξήγηση: + .mleader = MLeader + .mtext-specify-insertion-point = MTEXT Ορίστε σημείο εισαγωγής: + .markup = Σχολιασμός + .multileader = Πολλαπλή επεξήγηση + .multileader-draw-order = Σειρά σχεδίασης πολλαπλής επεξήγησης: + .multiline-text = + Κείμενο + πολλών γραμμών + .ordinate = Τεταγμένη + .out = Έξω + .qdim-select-geometry-to-dimension-enter-when-d = QDIM Επιλέξτε γεωμετρία προς διαστασιολόγηση (Enter όταν τελειώσετε): + .qdim-specify-dimension-line-position = QDIM Ορίστε θέση γραμμής διάστασης: + .qdim-made-dimensions-created = QDIM δημιουργήθηκαν __ocs_fmt_0__ διαστάσεις. + .qdim-endpoints-collapse-to-a-single-position = QDIM: τα τελικά σημεία συμπίπτουν σε μία θέση. + .qdim-no-dimensionable-endpoints-in-the-selecti = QDIM: δεν υπάρχουν διαστασιολογήσιμα τελικά σημεία στην επιλογή. + .quick-dim = Γρήγορη διάσταση + .requires-0-or-1-or-multiple-or-single = Απαιτείται 0 Ή 1 Ή MULTIPLE Ή SINGLE. + .requires-single-or-multiple = Απαιτείται Single ή Multiple. + .scale-edit = Επεξεργασία κλίμακας + .scale-list = Λίστα κλιμάκων + .sentence = Πρόταση + .sync-scales = Συγχρονισμός κλιμάκων + .table-cell-enter-text-row-column-current = TABLE CELL Δώστε κείμενο για [__ocs_arg_row__,__ocs_arg_column__] <__ocs_arg_current__>: + .table-enter-column-width-width = TABLE Δώστε πλάτος στήλης [__ocs_arg_width__]: + .table-enter-number-of-columns-cols = TABLE Δώστε αριθμό στηλών [__ocs_arg_cols__]: + .table-enter-number-of-data-rows-rows-cols = TABLE Δώστε αριθμό γραμμών δεδομένων [__ocs_arg_rows__] (__ocs_arg_cols__ στήλες): + .table-enter-number-of-rows-incl-header-rows-co = TABLE Δώστε αριθμό γραμμών (μαζί με την κεφαλίδα) [__ocs_arg_rows__] (__ocs_arg_cols__ στήλες): + .table-enter-row-height-height = TABLE Δώστε ύψος γραμμής [__ocs_arg_height__]: + .table-insertion-behavior-point-window-mode = TABLE Συμπεριφορά εισαγωγής [Σημείο/Παράθυρο] <__ocs_arg_mode__>: + .table-specify-insertion-point-cols-rows = TABLE Ορίστε σημείο εισαγωγής [__ocs_arg_cols__×__ocs_arg_rows__]: + .tcase-upper-lower-sentence-title = TCASE [Κεφαλαία / Πεζά / Πρόταση / Τίτλος]: + .tcase-select-text-objects-first = TCASE: επιλέξτε πρώτα αντικείμενα κειμένου. + .tcase-updated-n-text-object-s = TCASE: ενημερώθηκαν __ocs_fmt_0__ αντικείμενο(α) κειμένου. + .tcount-starting-number-enter-for-1 = TCOUNT αρχικός αριθμός (Enter για 1): + .tcount-numbered-text-object-s-from-start = TCOUNT: αριθμήθηκαν __ocs_fmt_0__ αντικείμενο(α) κειμένου από __ocs_fmt_1__. + .tcount-select-single-line-text-first = TCOUNT: επιλέξτε πρώτα κείμενο μίας γραμμής. + .text-specify-insertion-point = TEXT Ορίστε σημείο εισαγωγής: + .textedit-select-an-annotation-object-or-undo-mode-exit = TEXTEDIT Επιλέξτε αντικείμενο επισημείωσης ή [Λειτουργία αναίρεσης] <έξοδος>: + .textedit-select-an-annotation-object-or-undo-mode = TEXTEDIT Επιλέξτε αντικείμενο επισημείωσης ή [Λειτουργία αναίρεσης]: + .textfit-target-width = TEXTFIT επιθυμητό πλάτος: + .textfit-fitted-n-text-object-s-to-width-target = TEXTFIT: προσαρμόστηκαν __ocs_fmt_0__ αντικείμενο(α) κειμένου σε πλάτος __ocs_fmt_1__. + .textfit-select-single-line-text-first = TEXTFIT: επιλέξτε πρώτα κείμενο μίας γραμμής. + .textmask-press-enter-to-mask-the-selected-text = TEXTMASK πατήστε Enter για απόκρυψη του επιλεγμένου κειμένου: + .textmask-masked-n-text-object-s = TEXTMASK: εφαρμόστηκε μάσκα σε __ocs_fmt_0__ αντικείμενο(α) κειμένου. + .textmask-select-text-objects-first = TEXTMASK: επιλέξτε πρώτα αντικείμενα κειμένου. + .tolerance-enter-tolerance-text = TOLERANCE Δώστε κείμενο ανοχής: + .tolerance-specify-insertion-point-text = TOLERANCE Ορίστε σημείο εισαγωγής [__ocs_arg_text__]: + .tables = Πίνακες + .upper = Κεφαλαία + .usage-tcase-upper-lower-sentence-title = Χρήση: TCASE + .zoom-scale-factor-e-g-2-or-0-5 = ZOOM συντελεστής κλίμακας (π.χ. 2 ή 0.5): + .zoom-all = Ζουμ όλων + .zoom-extents-all-viewports = Ζουμ στα όρια — όλες οι θύρες προβολής + .zoom-scale-factor-3 = Κλίμακα ζουμ ×__ocs_fmt_0__ + .exploded-object-s-exploded = __ocs_fmt_0__ αντικείμενο(α) διασπάστηκαν. + .tcount-placement-must-be-overwrite-prefix-or-s = TCOUNT: η τοποθέτηση πρέπει να είναι Overwrite, Prefix ή Suffix. + .tcount-numbered-n-text-object-s-from-start-by = TCOUNT: αριθμήθηκαν __ocs_fmt_0__ αντικείμενο(α) κειμένου από __ocs_fmt_1__ με βήμα __ocs_fmt_2__ (__ocs_fmt_3__). + +insert = + .point-clouds = + Νέφη + σημείων + .attsync-block-name-to-sync = ATTSYNC όνομα μπλοκ προς συγχρονισμό: + .attsync-no-block-named-arg = ATTSYNC: δεν υπάρχει μπλοκ με όνομα "__ocs_fmt_0__". + .attsync-synchronised-synced-insert-s-of-block = ATTSYNC: συγχρονίστηκαν __ocs_fmt_0__ εισαγωγή(ές) του "__ocs_fmt_1__" με __ocs_fmt_2__ ορισμό(ούς) χαρακτηριστικών. + .adjust = Ρύθμιση + .array-insert = Εισαγωγή διάταξης + .attach = Επισύναψη + .attach-xref = Επισύναψη XREF + .attribute-editor = Επεξεργασία χαρακτηριστικών + .base-specify-base-point = BASE Ορίστε σημείο βάσης: + .block-enter-block-name-count-objects-selected = BLOCK Δώστε όνομα μπλοκ [__ocs_arg_count__ αντικείμενα επιλεγμένα]: + .block-specify-base-point-for-name-count-object = BLOCK Ορίστε σημείο βάσης για το "__ocs_arg_name__" [__ocs_arg_count__ αντικείμενα]: + .base-point-set-for-space = Το σημείο βάσης (__ocs_fmt_0__, __ocs_fmt_1__, __ocs_fmt_2__) ορίστηκε για __ocs_fmt_3__. + .block-name-has-no-entities = Το μπλοκ "__ocs_arg_name__" δεν έχει οντότητες. + .block-name-not-found = Το μπλοκ "__ocs_arg_name__" δεν βρέθηκε. + .block-name-produced-no-exportable-entities = Το μπλοκ "__ocs_arg_name__" δεν παρήγαγε εξαγώγιμες οντότητες. + .block-color-aci = Χρώμα μπλοκ (ACI): + .block-connection = Σύνδεση μπλοκ: + .block-rotation = Περιστροφή μπλοκ: + .block = Μπλοκ: + .blocks-insert-with-insert-name = Μπλοκ (__ocs_fmt_0__) — εισαγωγή με INSERT <όνομα>: __ocs_fmt_1__ + .blocks = Μπλοκ (__ocs_fmt_0__): __ocs_fmt_1__ + .content-browser = + Περιήγηση + περιεχομένου + .copied-selected-text-to-clipboard = Το επιλεγμένο κείμενο αντιγράφηκε στο πρόχειρο. + .create-block = Δημιουργία μπλοκ + .define-attributes = + Ορισμός + χαρακτηριστικών + .design-center = + Κέντρο + σχεδίασης + .extrude-height = EXTRUDE Ύψος: + .extrude-select-closed-profile-circle-lwpolylin = EXTRUDE Επιλέξτε κλειστό προφίλ (Circle, LwPolyline…): + .edit-attribute = + Επεξεργασία + χαρακτηριστικού + .edit-block = Επεξεργασία μπλοκ + .frames-print = Πλαίσια και εκτύπωση + .frames-off = Πλαίσια ανενεργά + .frames-on = Πλαίσια ενεργά + .insert-prompt-hint = INSERT __ocs_arg_prompt____ocs_arg_hint__: + .insert-enter-block-name-hint = INSERT Δώστε όνομα μπλοκ:__ocs_arg_hint__ + .insert-filling-attributes = INSERT Συμπλήρωση χαρακτηριστικών... + .insert-specify-insertion-point-for-name-scale = INSERT Ορίστε σημείο εισαγωγής για το "__ocs_arg_name__" [Κλίμακα/Περιστροφή]: + .insert-specify-rotation-angle-0 = INSERT Ορίστε γωνία περιστροφής <0>: + .insert-specify-scale-factor-1 = INSERT Ορίστε συντελεστή κλίμακας <1>: + .loft-select-first-cross-section = LOFT Επιλέξτε πρώτη διατομή: + .loft-select-next-cross-section-count-selected = LOFT Επιλέξτε επόμενη διατομή (__ocs_arg_count__ επιλεγμένες, Enter για τερματισμό): + .land-xml = + Land + XML + .layers = Επίπεδα (__ocs_fmt_0__): __ocs_fmt_1__ + .minsert-enter-block-name-hint = MINSERT Δώστε όνομα μπλοκ:__ocs_arg_hint__ + .minsert-enter-column-spacing-val = MINSERT Δώστε απόσταση στηλών <__ocs_arg_val__>: + .minsert-enter-number-of-columns-cols = MINSERT Δώστε αριθμό στηλών <__ocs_arg_cols__>: + .minsert-enter-number-of-rows-rows = MINSERT Δώστε αριθμό γραμμών <__ocs_arg_rows__>: + .minsert-enter-row-spacing-val = MINSERT Δώστε απόσταση γραμμών <__ocs_arg_val__>: + .minsert-specify-insertion-point-for-name = MINSERT Ορίστε σημείο εισαγωγής για το "__ocs_arg_name__": + .multi-view-block = + Μπλοκ + πολλαπλών όψεων + .ncopy-copied-n-nested-object-s-into-model-spac = NCOPY: αντιγράφηκαν __ocs_fmt_0__ ένθετο(α) αντικείμενο(α) στον χώρο μοντέλου (τα μπλοκ διατηρήθηκαν). + .ncopy-select-a-block-reference-first = NCOPY: επιλέξτε πρώτα μια αναφορά μπλοκ. + .no-entities-selected-for-wblock = Δεν έχουν επιλεγεί οντότητες για το WBLOCK. + .no-user-defined-blocks-found-in-this-drawing = Δεν βρέθηκαν μπλοκ ορισμένα από τον χρήστη σε αυτό το σχέδιο. + .none-of-the-selected-entities-could-be-exporte = Καμία από τις επιλεγμένες οντότητες δεν μπόρεσε να εξαχθεί. + .pasteblock-clipboard-is-empty = PASTEBLOCK: το πρόχειρο είναι κενό. + .pasteblock-e = PASTEBLOCK: __ocs_fmt_0__ + .pasteorig-clipboard-is-empty = PASTEORIG: το πρόχειρο είναι κενό. + .pasteorig-object-s-pasted-at-original-coordina = PASTEORIG: __ocs_fmt_0__ αντικείμενο(α) επικολλήθηκαν στις αρχικές συντεταγμένες. + .revolve-angle-of-revolution-360 = REVOLVE Γωνία περιστροφής <360>: + .revolve-axis-end-point = REVOLVE Τελικό σημείο άξονα: + .revolve-axis-start-point = REVOLVE Αρχικό σημείο άξονα: + .revolve-select-profile = REVOLVE Επιλέξτε προφίλ: + .sweep-select-path-line-arc-lwpolyline = SWEEP Επιλέξτε διαδρομή (Line, Arc, LwPolyline): + .sweep-select-profile-to-sweep = SWEEP Επιλέξτε προφίλ προς σάρωση: + .set-base-point = + Ορισμός + σημείου βάσης + .snap-to-underlays = + Έλξη σε + υπόβαθρα + .synchronize = Συγχρονισμός + .underlay-layers = + Επίπεδα + υποβάθρου + .usage-attsync-block-name-blocks = Χρήση: ATTSYNC <όνομα μπλοκ>. Μπλοκ: __ocs_fmt_0__ + .usage-base-x-y-z = Χρήση: BASE [z] + .write-block = Εγγραφή μπλοκ + .xattach-specify-insertion-point-for-name = XATTACH Ορίστε σημείο εισαγωγής για το "__ocs_arg_name__": + .xopen-select-an-external-reference-xref-to-ope = XOPEN: επιλέξτε μια εξωτερική αναφορά (xref) για άνοιγμα. + .xref-external-references = XREF Εξωτερικές αναφορές: + .xref-no-external-references-in-this-drawing = XREF Δεν υπάρχουν εξωτερικές αναφορές σε αυτό το σχέδιο. + .xref-reloaded = XREF Επαναφορτώθηκε το "__ocs_fmt_0__" + .xref-save-the-drawing-first-to-resolve-relativ = XREF Αποθηκεύστε πρώτα το σχέδιο για να επιλυθούν οι σχετικές διαδρομές XREF. + .object-s-copied-to-clipboard-base-3-3 = __ocs_fmt_0__ αντικείμενο(α) αντιγράφηκαν στο πρόχειρο (βάση __ocs_fmt_1__,__ocs_fmt_2__). + .object-s-copied-to-clipboard = __ocs_fmt_0__ αντικείμενο(α) αντιγράφηκαν στο πρόχειρο. + .object-s-cut-to-clipboard = __ocs_fmt_0__ αντικείμενο(α) αποκόπηκαν στο πρόχειρο. + +model = + .create = Δημιουργία + .boolean = Δυαδική πράξη + .pyramid = Πυραμίδα + .polysolid = Πολυστερεό + .extrude = Εξώθηση + .revolve = Περιστροφή + .loft = Διαμόρφωση + .sweep = Σάρωση + .presspull = Ώθηση/Έλξη + .n-specify-center-point = __ocs_arg_n__ Ορίστε σημείο κέντρου: + .n-specify-first-corner = __ocs_arg_n__ Ορίστε πρώτη γωνία: + .n-specify-height-enter-for-default = __ocs_arg_n__ Ορίστε ύψος : + .n-specify-opposite-corner = __ocs_arg_n__ Ορίστε απέναντι γωνία: + .n-specify-radius = __ocs_arg_n__ Ορίστε ακτίνα: + .n-specify-tube-radius = __ocs_arg_n__ Ορίστε ακτίνα σωλήνα: + .angles = Γωνίες + .axis-point = Σημείο άξονα + .axis-vector = Διάνυσμα άξονα + .cv-hull = Περίβλημα CV + .class-entity = Κλάση / Οντότητα + .curved = Καμπύλο + .cylindrical = Κυλινδρικό + .inverted-curved = Ανεστραμμένο καμπύλο + .inverted-cylindrical = Ανεστραμμένο κυλινδρικό + .inverted-hemispherical = Ανεστραμμένο ημισφαιρικό + .inverted-spherical = Ανεστραμμένο σφαιρικό + .data-size = Μέγεθος δεδομένων + .database-curves = Καμπύλες βάσης δεδομένων + .design = Σχεδιασμός + .draft-distances = Αποστάσεις κλίσης + .embedded-curves = Ενσωματωμένες καμπύλες + .entity-transform = Μετασχηματισμός οντότητας + .extra-modeler-data = Πρόσθετα δεδομένα μοντελοποιητή + .hemispherical = Ημισφαιρικό + .history = Ιστορικό + .intersect = Τομή + .isoline-list = Λίστα ισογραμμών + .isolines = Ισογραμμές + .kind = Είδος + .loft-flags = Σημαίες διαμόρφωσης + .loft-transform = Μετασχηματισμός διαμόρφωσης + .material-bindings = Συνδέσεις υλικών + .modeler-display-data = Δεδομένα εμφάνισης μοντελοποιητή + .modeler-format = Μορφή μοντελοποιητή + .modeler-geometry = Γεωμετρία μοντελοποιητή + .nurb-version = Έκδοση NURB + .path-entity-transform = Μετασχηματισμός οντότητας διαδρομής + .path-transform = Μετασχηματισμός διαδρομής + .perimeter = Περίμετρος + .revision = Αναθεώρηση + .revolve-entity = Οντότητα περιστροφής + .revolve-flags = Σημαίες περιστροφής + .spherical = Σφαιρικό + .subtract = Αφαίρεση + .surface-construction = Κατασκευή επιφάνειας + .sweep-path = Σάρωση / Διαδρομή + .sweep-entity = Οντότητα σάρωσης + .sweep-entity-transform = Μετασχηματισμός οντότητας σάρωσης + .sweep-options = Επιλογές σάρωσης + .sweep-transform = Μετασχηματισμός σάρωσης + .sweep-vector = Διάνυσμα σάρωσης + .u-isolines = Ισογραμμές U + .u-vector-1 = Διάνυσμα U 1 + .u-vector-2 = Διάνυσμα U 2 + .uid = UID + .union = Ένωση + .v-isolines = Ισογραμμές V + .v-vector-1 = Διάνυσμα V 1 + .v-vector-2 = Διάνυσμα V 2 + .view-silhouettes = Περιγράμματα όψης + .wireframe-cache = Κρυφή μνήμη συρμάτινου πλέγματος + .wires = Σύρματα + +layout = + .active = Ενεργή + .inactive = Ανενεργή + .insert-view = Εισαγωγή προβολής + .layouts = Διατάξεις + .mview-specify-corner-of-viewport-or-polygonal = MVIEW Ορίστε γωνία της θύρας προβολής ή [Πολυγωνική/Αντικείμενο/Προσαρμογή/Εισαγωγή προβολής]: + .mview-specify-opposite-corner = MVIEW Ορίστε απέναντι γωνία: + .mview-insert-view-choose-a-named-view-or-new = MVIEW Insert view Επιλέξτε ονομασμένη προβολή ή [Νέα]: + .mview-insert-view-no-named-views-choose-new = MVIEW Insert view Δεν υπάρχουν ονομασμένες προβολές· επιλέξτε [Νέα]: + .mview-insert-view-specify-placement-point = MVIEW Insert view Ορίστε σημείο τοποθέτησης: + .mview-new-view-specify-first-model-space-corne = MVIEW New view Ορίστε πρώτη γωνία στον χώρο μοντέλου: + .mview-new-view-specify-opposite-model-space-co = MVIEW New view Ορίστε απέναντι γωνία στον χώρο μοντέλου: + .mview-object-select-a-circle-full-ellipse-or-c = MVIEW Object Επιλέξτε κύκλο, πλήρη έλλειψη ή κλειστή πολυγραμμή: + .mview-polygonal-specify-start-point = MVIEW Polygonal Ορίστε σημείο έναρξης: + .mview-polygonal-mode-specify-next-point-or-arc = MVIEW Polygonal [__ocs_arg_mode__] Ορίστε επόμενο σημείο ή [Τόξο/Γραμμή/Κλείσιμο/Αναίρεση] (__ocs_arg_count__ σημεία): + .model-space = Χώρος μοντέλου + .move-left = Μετακίνηση αριστερά + .move-right = Μετακίνηση δεξιά + .new-layout = Νέα διάταξη + .new-name = Νέο όνομα… + .paper-space-layout = Διάταξη χώρου χαρτιού + .polygonal = Πολυγωνική + .status = Κατάσταση: + .vplayer-f-layer-freeze-t-layer-thaw-enter-exit = VPLAYER F <επίπεδο> = Πάγωμα | T <επίπεδο> = Ξεπάγωμα | Enter = Έξοδος + +view = + .message = __ocs_fmt_0__ + .code-page = Κωδικοσελίδα: __ocs_fmt_0__ + .created-julian-6 = Δημιουργία (Julian): __ocs_fmt_0__ + .fingerprint-guid = GUID αποτυπώματος: __ocs_fmt_0__ + .hyperlink-base = Βάση υπερσυνδέσμου: __ocs_fmt_0__ + .last-saved-by = Τελ. αποθήκευση από: __ocs_fmt_0__ + .measurement = Μέτρηση: __ocs_fmt_0__ (__ocs_fmt_1__) + .menu-name = Όνομα μενού: __ocs_fmt_0__ + .project-name = Όνομα έργου: __ocs_fmt_0__ + .proxy-graphics = Γραφικά proxy: __ocs_fmt_0__ + .required-versions-018x = Απαιτούμ. εκδόσεις: __ocs_fmt_0__ + .stylesheet = Φύλλο στυλ: __ocs_fmt_0__ + .total-edit-time-4 = Συνολ. χρόνος επεξ.: __ocs_fmt_0__ + .tree-depth = Βάθος δέντρου: __ocs_fmt_0__ + .updated-julian-6 = Ενημέρωση (Julian): __ocs_fmt_0__ + .user-elapsed-4 = Χρόνος χρήστη: __ocs_fmt_0__ + .user-timer = Χρονόμετρο χρήστη: __ocs_fmt_0__ + .user-vars-int = Μετ. χρήστη (int): __ocs_fmt_0__ __ocs_fmt_1__ __ocs_fmt_2__ __ocs_fmt_3__ __ocs_fmt_4__ + .user-vars-real-6-6-6-6-6 = Μετ. χρήστη (real): __ocs_fmt_0__ __ocs_fmt_1__ __ocs_fmt_2__ __ocs_fmt_3__ __ocs_fmt_4__ + .vp-id-w-1-h-1-1-1-scale-scale-4-state = ΘΠ #__ocs_fmt_0__: __ocs_fmt_1__×__ocs_fmt_2__ @ (__ocs_fmt_3__,__ocs_fmt_4__) κλίμακα=__ocs_fmt_5__ [__ocs_fmt_6__] + .version-guid = GUID έκδοσης: __ocs_fmt_0__ + .x-value-s = __ocs_fmt_0__ [__ocs_fmt_1__]: __ocs_fmt_2__ τιμή(ές) + .x-no-xdata = __ocs_fmt_0__: χωρίς xdata. + .value-3d-orbit = Τροχιά 3D + .value-3d-orbit-drag-with-right-mouse-button = Τροχιά 3D: σύρετε με το δεξί πλήκτρο του ποντικιού. + .adjust-brightness-contrast-fade = ADJUST [Φωτεινότητα / Αντίθεση / Ξεθώριασμα]: + .adjust-brightness-0-100 = ADJUST φωτεινότητα 0-100: + .adjust-contrast-0-100 = ADJUST αντίθεση 0-100: + .adjust-fade-0-100 = ADJUST ξεθώριασμα 0-100: + .adjust-select-raster-image-s-first = ADJUST: επιλέξτε πρώτα εικόνα(ες) ράστερ. + .adjust-value-must-be-0-100 = ADJUST: η τιμή πρέπει να είναι 0-100. + .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ σε __ocs_fmt_2__ εικόνα(ες). + .annoallvisible-new-value-0-1 = ANNOALLVISIBLE νέα τιμή [0/1]: + .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: δώστε 0 ή 1. + .annoautoscale-new-value-4-4 = ANNOAUTOSCALE νέα τιμή [-4..4]: + .annoscale-new-annotation-scale-e-g-1-50-2-1-or = ANNOSCALE νέα κλίμακα επισημείωσης (π.χ. 1:50, 2:1 ή συντελεστής): + .annoupdate-select-annotation-objects-first = ANNOUPDATE: επιλέξτε πρώτα αντικείμενα επισημείωσης. + .annoupdate-updated-updated-object-s = ANNOUPDATE: ενημερώθηκαν __ocs_fmt_0__ αντικείμενο(α). + .added-annotation-scale-arg = Προστέθηκε η κλίμακα επισημείωσης __ocs_fmt_0__. + .annotation-scale-arg = Κλίμακα επισημείωσης: __ocs_fmt_0__ + .annotation-scales = Κλίμακες επισημείωσης: __ocs_fmt_0__ + .colorscheme-unknown-theme-type-colorscheme-lis = COLORSCHEME: άγνωστο θέμα '__ocs_fmt_0__'. Πληκτρολογήστε COLORSCHEME LIST για τις επιλογές. + .cuiexport-file-to-save-shortcuts-to = CUIEXPORT αρχείο αποθήκευσης των συντομεύσεων: + .cuiexport-cannot-write-path-e = CUIEXPORT: δεν είναι δυνατή η εγγραφή του "__ocs_fmt_0__": __ocs_fmt_1__ + .cuiexport-wrote-count-shortcut-s-to-path = CUIEXPORT: γράφτηκαν __ocs_fmt_0__ συντόμευση(εις) στο "__ocs_fmt_1__". + .cuiimport-shortcuts-file-to-load = CUIIMPORT αρχείο συντομεύσεων προς φόρτωση: + .cuiimport-cannot-read-path-e = CUIIMPORT: δεν είναι δυνατή η ανάγνωση του "__ocs_fmt_0__": __ocs_fmt_1__ + .cuiimport-loaded-n-shortcut-s-from-path = CUIIMPORT: φορτώθηκαν __ocs_fmt_0__ συντόμευση(εις) από το "__ocs_fmt_1__". + .cannot-delete-the-current-annotation-scale-arg = Δεν είναι δυνατή η διαγραφή της τρέχουσας κλίμακας επισημείωσης (__ocs_fmt_0__). + .cascade = Διαδοχική διάταξη + .color-scheme-set-to-name = Ο συνδυασμός χρωμάτων ορίστηκε σε '__ocs_fmt_0__'. + .current-annotation-scale-name = Τρέχουσα κλίμακα επισημείωσης: __ocs_fmt_0__ + .datalink-path-to-the-csv-file = DATALINK διαδρομή προς το αρχείο .csv: + .datalink-specify-insertion-point = DATALINK Ορίστε σημείο εισαγωγής: + .datalink-cannot-read-path-e = DATALINK: δεν είναι δυνατή η ανάγνωση του "__ocs_fmt_0__": __ocs_fmt_1__ + .datalink-imported-nrows-ncols-cells-into-a-tab = DATALINK: εισήχθησαν __ocs_fmt_0__×__ocs_fmt_1__ κελιά σε πίνακα στην αρχή των αξόνων. + .datalink-the-csv-file-is-empty = DATALINK: το αρχείο CSV είναι κενό. + .draworder-select-reference-object-move-selection-above = DRAWORDER Επιλέξτε αντικείμενο αναφοράς (μετακίνηση επιλογής επάνω): + .draworder-select-reference-object-move-selection-under = DRAWORDER Επιλέξτε αντικείμενο αναφοράς (μετακίνηση επιλογής κάτω): + .draworder-front-back-above-under-handle-by-typ = DRAWORDER [Μπροστά / Πίσω] (Επάνω/Κάτω <αναγνωριστικό> πληκτρολογώντας): + .draworder-moved-entities-to = DRAWORDER: μετακινήθηκαν __ocs_fmt_0__ οντότητες σε __ocs_fmt_1__. + .draworder-moved-entities-x = DRAWORDER: μετακινήθηκαν __ocs_fmt_0__ οντότητες __ocs_fmt_1__ __ocs_fmt_2__. + .drawing-limits-4-4-to-4-4 = Όρια σχεδίου: __ocs_fmt_0__,__ocs_fmt_1__ έως __ocs_fmt_2__,__ocs_fmt_3__. + .drawing = Σχέδιο: __ocs_fmt_0__ + .file-tabs = + Καρτέλες + αρχείων + .hyperlink-url-to-attach = HYPERLINK URL προς επισύναψη: + .hyperlink-attached-to-n-object-s = HYPERLINK: επισυνάφθηκε σε __ocs_fmt_0__ αντικείμενο(α). + .hyperlink-select-objects-first = HYPERLINK: επιλέξτε πρώτα αντικείμενα. + .interface = Περιβάλλον + .iso = Iso + .landxmlimport-path-to-the-xml-file = LANDXMLIMPORT διαδρομή προς το αρχείο .xml: + .landxmlimport-cannot-read-path-e = LANDXMLIMPORT: δεν είναι δυνατή η ανάγνωση του "__ocs_fmt_0__": __ocs_fmt_1__ + .landxmlimport-imported-survey-point-s-use-zoom = LANDXMLIMPORT: εισήχθησαν __ocs_fmt_0__ τοπογραφικό(ά) σημείο(α). Χρησιμοποιήστε ZOOM EXTENTS για προβολή. + .landxmlimport-no-cgpoint-survey-points-found = LANDXMLIMPORT: δεν βρέθηκαν τοπογραφικά σημεία . + .limits-specify-first-corner-or-on-off-v = LIMITS Ορίστε πρώτη γωνία ή [Ενεργό / Ανενεργό] <__ocs_arg_v__>: + .limits-specify-opposite-corner-v = LIMITS Ορίστε απέναντι γωνία <__ocs_arg_v__>: + .limits-corners-must-define-a-non-zero-area = LIMITS: οι γωνίες πρέπει να ορίζουν μη μηδενικό εμβαδόν. + .limits-four-finite-numeric-coordinates-require = LIMITS: απαιτούνται τέσσερις πεπερασμένες αριθμητικές συντεταγμένες. + .limits-four-numeric-coordinates-required = LIMITS: απαιτούνται τέσσερις αριθμητικές συντεταγμένες. + .layout-tabs = + Καρτέλες + διατάξεων + .mview-switch-to-a-paper-space-layout-first = MVIEW: μεταβείτε πρώτα σε διάταξη χώρου χαρτιού. + .model-viewports = Θύρες προβολής μοντέλου + .mono = Μονόχρωμο + .named = Ονομασμένο + .navigate = Πλοήγηση + .no-annotation-scale-named-arg = Δεν υπάρχει κλίμακα επισημείωσης με όνομα __ocs_fmt_0__. + .no-annotation-scales-defined = Δεν έχουν οριστεί κλίμακες επισημείωσης. + .no-viewports-use-mview-to-create-one-or-vports = Δεν υπάρχουν θύρες προβολής. Χρησιμοποιήστε MVIEW για να δημιουργήσετε μία ή VPORTS 2H / 2V / 4 / SINGLE. + .noorigin = ΧωρίςΑρχή + .objectscale-added-the-active-scale-to-n-object = OBJECTSCALE: η ενεργή κλίμακα προστέθηκε σε __ocs_fmt_0__ αντικείμενο(α). + .objectscale-select-objects-first = OBJECTSCALE: επιλέξτε πρώτα αντικείμενα. + .objectscale-the-active-annotation-scale-is-una = OBJECTSCALE: η ενεργή κλίμακα επισημείωσης δεν είναι διαθέσιμη. + .opening-ocs-discussions-for-help-and-questions = Άνοιγμα των συζητήσεων OCS για βοήθεια και ερωτήσεις... + .opening-ocs-web = Άνοιγμα του OCS Web... + .opening-patreon-page = Άνοιγμα της σελίδας Patreon... + .opening-feedback-page = Άνοιγμα της σελίδας σχολίων... + .opening-release-notes = Άνοιγμα των σημειώσεων έκδοσης... + .pan-drag-with-the-left-mouse-button-press-esc = PAN: σύρετε με το αριστερό πλήκτρο του ποντικιού. Πατήστε Esc για έξοδο. + .plotwindow-specify-first-corner-of-plot-window = PLOTWINDOW Ορίστε πρώτη γωνία του παραθύρου εκτύπωσης: + .plotwindow-specify-opposite-corner = PLOTWINDOW Ορίστε απέναντι γωνία: + .palettes = Παλέτες + .pan = Μετατόπιση + .persp = Προοπτ. + .projection = Προβολή + .quickprint-count-selected-enter-to-plot-or-kee = QUICKPRINT __ocs_arg_count__ επιλεγμένα — Enter για εκτύπωση ή συνεχίστε την επιλογή: + .quickprint-select-objects-to-quick-print = QUICKPRINT Επιλέξτε αντικείμενα για γρήγορη εκτύπωση: + .removed-annotation-scale-arg = Αφαιρέθηκε η κλίμακα επισημείωσης __ocs_fmt_0__. + .scalelistedit-add-delete = SCALELISTEDIT [Προσθήκη / Διαγραφή]: + .scalelistedit-add-new-scale-ratio-e-g-1-50 = SCALELISTEDIT ADD νέος λόγος κλίμακας (π.χ. 1:50): + .scalelistedit-add-use-a-ratio-like-1-50 = SCALELISTEDIT ADD: χρησιμοποιήστε λόγο της μορφής 1:50. + .scalelistedit-delete-scale-ratio-to-remove = SCALELISTEDIT DELETE λόγος κλίμακας προς αφαίρεση: + .sheetset-sheet-set-manager-not-yet-implemented = SHEETSET: η Διαχείριση συνόλων φύλλων δεν έχει υλοποιηθεί ακόμη. + .syncpviewports-master-is-not-a-viewport = SYNCPVIEWPORTS: η κύρια δεν είναι θύρα προβολής. + .syncpviewports-synced-n-viewport-s-to-the-mast = SYNCPVIEWPORTS: συγχρονίστηκαν __ocs_fmt_0__ θύρα(ες) προβολής με την κύρια. + .scale-arg-already-exists = Η κλίμακα __ocs_fmt_0__ υπάρχει ήδη. + .shaded = Σκιασμένο + .sheet-set-manager = + Διαχείριση + συνόλων φύλλων + .shortcut-key-not-found = Η συντόμευση '__ocs_fmt_0__' δεν βρέθηκε. + .shortcut-key-removed = Η συντόμευση '__ocs_fmt_0__' αφαιρέθηκε. + .shortcut-set-key-cmd-str = Η συντόμευση ορίστηκε: __ocs_fmt_0__ → __ocs_fmt_1__ + .table-cell-select-a-table-entity-first-or-row = TABLE CELL: επιλέξτε πρώτα μια οντότητα Table ή η γραμμή/στήλη είναι εκτός ορίων. + .table-cell-set-row-col-text = TABLE CELL: ορίστηκε [__ocs_fmt_0__,__ocs_fmt_1__] = "__ocs_fmt_2__". + .table-block-definition-not-found = TABLE: ο ορισμός του μπλοκ δεν βρέθηκε. + .table-edit-applied = TABLE: η επεξεργασία εφαρμόστηκε. + .table-field-handle-not-found = TABLE: το αναγνωριστικό πεδίου δεν βρέθηκε. + .table-row-column-out-of-range-or-cell-locked = TABLE: η γραμμή/στήλη είναι εκτός ορίων ή το κελί είναι κλειδωμένο. + .table-select-a-table-first = TABLE: επιλέξτε πρώτα έναν πίνακα. + .toolpalettes-tool-palettes-not-yet-implemented = TOOLPALETTES: οι παλέτες εργαλείων δεν έχουν υλοποιηθεί ακόμη. + .tile-horiz = + Παράθεση + οριζ. + .tile-vert = + Παράθεση + κατακ. + .ucs-icon = + Εικονίδιο + UCS + .ucs-name-of-ucs-to-delete = UCS όνομα του UCS προς διαγραφή: + .ucs-name-to-save-current-ucs-as = UCS όνομα για την αποθήκευση του τρέχοντος UCS: + .ucs-new-origin-point = UCS νέο σημείο αρχής: + .ucs-option-world-z-x-y-origin-save-delete-or-n = UCS επιλογή [Παγκόσμιο/Z/X/Y/Αρχή/Αποθήκευση/Διαγραφή] ή όνομα: + .ucs-rotation-angle-about-x-degrees = UCS γωνία περιστροφής γύρω από τον X (μοίρες): + .ucs-rotation-angle-about-y-degrees = UCS γωνία περιστροφής γύρω από τον Y (μοίρες): + .ucs-rotation-angle-about-z-degrees = UCS γωνία περιστροφής γύρω από τον Z (μοίρες): + .ucs-value = UCS τιμή: + .ucsicon-on-off-noorigin-origin = UCSICON [Ενεργό / Ανενεργό / ΧωρίςΑρχή / Αρχή]: + .ucsicon-state = UCSICON __ocs_fmt_0__ + .ucsicon-sub-updated-count-viewport-s-model-spa = UCSICON __ocs_fmt_0__: ενημερώθηκαν __ocs_fmt_1__ θύρα(ες) προβολής + ο χώρος μοντέλου. + .underlay-fade-contrast-on-off-mono-clip = UNDERLAY [Ξεθώριασμα / Αντίθεση / Ενεργό / Ανενεργό / Μονόχρωμο / Αποκοπή]: + .underlay-contrast-0-100 = UNDERLAY αντίθεση 0-100: + .underlay-fade-0-100 = UNDERLAY ξεθώριασμα 0-100: + .underlay-clip-on-off = UNDERLAY CLIP [Ενεργό / Ανενεργό]: + .underlay-mono-on-off = UNDERLAY MONO [Ενεργό / Ανενεργό]: + .underlay-select-underlay-entities-first = UNDERLAY: επιλέξτε πρώτα οντότητες υποβάθρου. + .useri-n-val = USERI__ocs_fmt_0__ = __ocs_fmt_1__ + .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ + .underlay-x-fade-contrast-on-clip-mono = Υπόβαθρο __ocs_fmt_0__: ξεθώριασμα=__ocs_fmt_1__, αντίθεση=__ocs_fmt_2__, ενεργό=__ocs_fmt_3__, αποκοπή=__ocs_fmt_4__, μονόχρωμο=__ocs_fmt_5__ + .updated-changed-underlay-s = Ενημερώθηκαν __ocs_fmt_0__ υπόβαθρο(α). + .usage-adjust-brightness-contrast-fade-0-100 = Χρήση: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> + .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Χρήση: ANNOSCALE <λόγος> π.χ. 1:50, 2:1 ή συντελεστής + .usage-draworder-f-front-b-back-a-above-handle = Χρήση: DRAWORDER F|FRONT | B|BACK | A|ABOVE <αναγνωριστικό> | U|UNDER <αναγνωριστικό> + .usage-hyperlink-url-select-objects-first = Χρήση: HYPERLINK (επιλέξτε πρώτα αντικείμενα) + .usage-plotstyle-load-clear-status = Χρήση: PLOTSTYLE [LOAD | CLEAR | STATUS] + .usage-scalelistedit-delete-name = Χρήση: SCALELISTEDIT DELETE <όνομα> + .usage-scalelistedit-add-1-50-delete-1-50 = Χρήση: SCALELISTEDIT [ADD 1:50 | DELETE 1:50] + .usage-shortcuts-clear-key = Χρήση: SHORTCUTS CLEAR <πλήκτρο> + .usage-shortcuts-list-set-key-cmd-clear-key = Χρήση: SHORTCUTS LIST | SET <πλήκτρο> <εντολή> | CLEAR <πλήκτρο> + .usage-shortcuts-set-key-command-e-g-shortcuts = Χρήση: SHORTCUTS SET <πλήκτρο> <εντολή> π.χ. SHORTCUTS SET CTRL+D DIST + .usage-table-cell-row-col-text = Χρήση: TABLE CELL <γραμμή> <στήλη> <κείμενο> + .usage-table-edit-actions = Χρήση: TABLE CELL | INSERTROW | DELETEROW | INSERTCOL | DELETECOL | MERGE | UNMERGE | ROWHEIGHT | COLWIDTH | LOCK | BLOCK | FORMULA | FIELD + .usage-ucsicon-on-off-noorigin-origin = Χρήση: UCSICON ON | OFF | NOORIGIN | ORIGIN + .usage-underlay-fade-n-contrast-n-on-off-clip-o = Χρήση: UNDERLAY [FADE |CONTRAST |ON|OFF|CLIP ON|OFF|MONO ON|OFF] + .usage-useri-1-5-int-userr-1-5-real = Χρήση: USERI <1-5> <ακέραιος> | USERR <1-5> <πραγματικός> + .usage-useri-1-5-integer = Χρήση: USERI <1-5> <ακέραιος> + .usage-userr-1-5-real = Χρήση: USERR <1-5> <πραγματικός> + .usage-xdata-list-set-app-value-clear-app = Χρήση: XDATA LIST | SET <εφαρμογή> <τιμή> | CLEAR [εφαρμογή] + .vplayer-enter-a-viewport-first-double-click-or = VPLAYER: εισέλθετε πρώτα σε μια θύρα προβολής (διπλό κλικ ή MS). + .vplayer-frozen-layers = VPLAYER: παγωμένα επίπεδα: __ocs_fmt_0__ + .vplayer-no-frozen-layers-in-active-viewport = VPLAYER: δεν υπάρχουν παγωμένα επίπεδα στην ενεργή θύρα προβολής. + .vplayer-switch-to-a-paper-space-layout-first = VPLAYER: μεταβείτε πρώτα σε διάταξη χώρου χαρτιού. + .vports-configuration-single-2h-2v-4 = VPORTS Διαμόρφωση [SIngle/2H/2V/4]: + .vports-created-viewport-s = VPORTS: δημιουργήθηκαν __ocs_fmt_0__ θύρα(ες) προβολής [__ocs_fmt_1__]. + .vports-use-single-2h-2v-4 = VPORTS: χρησιμοποιήστε SINGLE | 2H | 2V | 4. + .vports-e = VPORTS: __ocs_fmt_0__ + .vports-n-viewport-s = VPORTS: __ocs_fmt_0__ θύρα(ες) προβολής. + .view-cube = + Κύβος + προβολής + .viewcube-back = ΠΙΣΩ + .viewcube-bottom = ΚΑΤΩ + .viewcube-front = ΕΜΠΡΟΣ + .viewcube-left = ΑΡΙΣΤΕΡΑ + .viewcube-right = ΔΕΞΙΑ + .viewcube-top = ΠΑΝΩ + .viewport-configuration = + Διαμόρφωση + θυρών προβολής + .viewport-tools = Εργαλεία θυρών προβολής + .visual-style = + Οπτικό + στυλ + .xdata-list-clear-set-app-value-by-typing = XDATA [Λίστα / Εκκαθάριση] (SET <εφαρμογή> <τιμή> πληκτρολογώντας): + .xdata-cleared = XDATA: εκκαθαρίστηκε. + .xdata-select-entities-first = XDATA: επιλέξτε πρώτα οντότητες. + .xdata-set-app-val-on-entity-entities = XDATA: ορίστηκε [__ocs_fmt_0__] = "__ocs_fmt_1__" σε __ocs_fmt_2__ οντότητα/οντότητες. + .zoom-window-extents-extents-all-all-in-out-sca = ZOOM [Παράθυρο / Όρια / Όρια όλων / Όλα / Μεγέθυνση / Σμίκρυνση / Κλίμακα]: + .zoom-window-specify-first-corner = ZOOM WINDOW Ορίστε πρώτη γωνία: + .zoom-window-specify-opposite-corner = ZOOM WINDOW Ορίστε απέναντι γωνία: + .zoom-extents = + Ζουμ + στα όρια + .cmd-no-hatch-objects = __ocs_fmt_0__: δεν υπάρχουν αντικείμενα διαγράμμισης. + .cmd-no-text-or-dimension-objects = __ocs_fmt_0__: δεν υπάρχουν αντικείμενα κειμένου ή διαστάσεων. + .cmd-not-yet-implemented = __ocs_fmt_0__: δεν έχει υλοποιηθεί ακόμη. + .viewport-s-in-layout = __ocs_fmt_0__ θύρα(ες) προβολής στη διάταξη "__ocs_fmt_1__": + +properties = + .count-objects-selected = __ocs_arg_count__ αντικείμενα επιλεγμένα + .scope-visual-style = Οπτικό στυλ __ocs_arg_scope__ + .value-3d-face = Έδρα 3D + .value-3d-solid = Στερεό 3D + .value-3d-visualization = Οπτικοποίηση 3D + .value-3dface = 3DFace + .ac-version = Έκδοση AC + .action = Ενέργεια + .active-viewport = Ενεργή θύρα προβολής + .adjust-colors-for-background = Προσαρμογή χρωμάτων για το φόντο + .advanced = Για προχωρημένους + .alt-enabled = Εναλλ. ενεργές + .alt-format = Εναλλ. μορφή + .alt-precision = Εναλλ. ακρίβεια + .alt-prefix-suffix = Εναλλ. πρόθεμα/κατάληξη + .alt-roundoff = Εναλλ. στρογγυλοποίηση + .alt-scale-factor = Εναλλ. συντελεστής κλίμακας + .alt-suppress-leading-zeros = Εναλλ. απόκρυψη αρχικών μηδενικών + .alt-suppress-trailing-zeros = Εναλλ. απόκρυψη τελικών μηδενικών + .ambient = Περιβάλλον φως + .angle-format = Μορφή γωνίας + .angle-precision = Ακρίβεια γωνίας + .annotation-scale = Κλίμακα επισημείωσης + .annotative-scale = Κλίμακα επισημειωματικού + .arc-end-deg = Τέλος τόξου (μοίρες) + .arc-start-deg = Αρχή τόξου (μοίρες) + .arc-x = Τόξο X + .arc-y = Τόξο Y + .arc-z = Τόξο Z + .arc-length = Μήκος τόξου + .arc-aligned-text = Κείμενο κατά μήκος τόξου + .arrow = Βέλος + .associative = Συσχετισμένο + .at-least = Τουλάχιστον + .attachment-type = Τύπος σύνδεσης + .attachment = Σύνδεση + .arrowhead-size = Μέγεθος άκρου βέλους + .attenuation = Εξασθένηση + .attribute-definition = Ορισμός χαρακτηριστικού + .attributedefinition = AttributeDefinition + .back-line = Πίσω γραμμή + .background = Φόντο + .background-mask = Μάσκα φόντου + .background-transparency = Διαφάνεια φόντου + .base-x = Βάση X + .base-y = Βάση Y + .base-z = Βάση Z + .base-point-x = Σημείο βάσης X + .base-point-y = Σημείο βάσης Y + .base-point-z = Σημείο βάσης Z + .base-radius = Ακτίνα βάσης + .big-font = Μεγάλη γραμματοσειρά + .blend-creases = Ανάμειξη πτυχώσεων + .block-end = Τέλος μπλοκ + .block-reference = Αναφορά μπλοκ + .block-contents = Περιεχόμενα μπλοκ + .block-scale = Κλίμακα μπλοκ + .blockend = BlockEnd + .body = Σώμα + .bold = Έντονα + .book = Βιβλίο + .bottom-height = Ύψος βάσης + .boundary-width = Πλάτος ορίου + .break-heights = Ύψη διακοπής + .bump-map = Χάρτης ανάγλυφου + .by-style = Ανά στυλ + .c-class = Κλάση C++ + .camera = Κάμερα + .cast-shadows = Ρίψη σκιών + .center-x = Κέντρο X + .center-y = Κέντρο Y + .center-z = Κέντρο Z + .centroid = Κέντρο βάρους + .character-set = Σύνολο χαρακτήρων + .character-spacing = Απόσταση χαρακτήρων + .chord-x = Χορδή X + .chord-y = Χορδή Y + .chord-z = Χορδή Z + .chord = Χορδή + .circumference = Περιφέρεια + .class = Κλάση + .class-id = Αναγνωριστικό κλάσης + .classification-scheme = Σχήμα ταξινόμησης + .clip-inverted = Αντεστραμμένη αποκοπή + .clipping = Αποκοπή + .clippings = Αποκοπές + .closed = Κλειστό + .color-1 = Χρώμα 1 + .color-2 = Χρώμα 2 + .color-book = Βιβλίο χρωμάτων + .color-name = Όνομα χρώματος + .color-temperature = Θερμοκρασία χρώματος + .column-count = Πλήθος στηλών + .column-gutter = Διάκενο στηλών + .column-width = Πλάτος στήλης + .columns = Στήλες + .constant = Σταθερό + .constantmultiline = ConstantMultiLine + .constrain = Περιορισμός + .contents = Περιεχόμενα + .control-point = Σημείο ελέγχου + .control-point-count = Πλήθος σημείων ελέγχου + .control-point-x = Σημείο ελέγχου X + .control-point-y = Σημείο ελέγχου Y + .control-point-z = Σημείο ελέγχου Z + .control-point-x-sentence-case = Σημείο ελέγχου X + .control-point-y-sentence-case = Σημείο ελέγχου Y + .control-point-z-sentence-case = Σημείο ελέγχου Z + .control-vertices = Κορυφές ελέγχου + .coordination-model = Μοντέλο συντονισμού + .creased-edges = Πτυχωμένες ακμές + .croppings = Περικοπές + .cumulative-area = Αθροιστικό εμβαδόν + .current-color-scheme = Τρέχων συνδυασμός χρωμάτων + .current-vertex-title-case = Τρέχουσα κορυφή + .current-vertex-sentence-case = Τρέχουσα κορυφή + .current-control-point = Τρέχον σημείο ελέγχου + .current-fit-point = Τρέχον σημείο προσαρμογής + .cv-frame = Πλαίσιο CV + .cutting-line = Γραμμή τομής + .dwg-payload = Ωφέλιμο φορτίο DWG + .dwg-version = Έκδοση DWG + .dxf-codes = Κωδικοί DXF + .dxf-name = Όνομα DXF + .dxf-subclass = Υποκλάση DXF + .dark-gray = Σκούρο γκρι + .data-points = Σημεία δεδομένων + .decoded-data = Αποκωδικοποιημένα δεδομένα + .defined-height = Ορισμένο ύψος + .defined-width = Ορισμένο πλάτος + .definition = Ορισμός + .definition-x = Ορισμός X + .definition-y = Ορισμός Y + .definition-z = Ορισμός Z + .degree = Βαθμός + .delta-x = Δέλτα X + .delta-y = Δέλτα Y + .delta-z = Δέλτα Z + .diffuse = Διάχυτο + .diffuse-map = Χάρτης διάχυσης + .dim-line-1 = Γραμμή διάστασης 1 + .dim-line-2 = Γραμμή διάστασης 2 + .dim-line-color = Χρώμα γραμμής διάστασης + .dim-line-ext = Προέκταση γραμμής διάστασης + .dim-line-forced = Εξαναγκασμένη γραμμή διάστασης + .dim-line-inside = Γραμμή διάστασης εντός + .dim-line-lineweight = Πάχος γραμμής διάστασης + .dim-prefix-suffix = Πρόθεμα/κατάληξη διάστασης + .dim-roundoff = Στρογγυλοποίηση διάστασης + .dim-scale-linear = Γραμμική κλίμακα διάστασης + .dim-scale-overall = Συνολική κλίμακα διάστασης + .dim-units = Μονάδες διάστασης + .dimension-style = Στυλ διάστασης + .direction = Κατεύθυνση + .direction-x = Κατεύθυνση X + .direction-y = Κατεύθυνση Y + .direction-z = Κατεύθυνση Z + .direction-vector-x = Διάνυσμα κατεύθυνσης X + .direction-vector-y = Διάνυσμα κατεύθυνσης Y + .direction-vector-z = Διάνυσμα κατεύθυνσης Z + .drawing-view = Όψη σχεδίου + .dynamic-block-entity = Οντότητα δυναμικού μπλοκ + .edge-1 = Ακμή 1 + .edge-2 = Ακμή 2 + .edge-3 = Ακμή 3 + .edge-4 = Ακμή 4 + .edges = Ακμές + .elevation = Υψόμετρο + .elevation-gradient = Διαβάθμιση υψομέτρου + .elevation-max = Μέγιστο υψόμετρο + .elevation-min = Ελάχιστο υψόμετρο + .embedded-mtext = Ενσωματωμένο MText + .enabled = Ενεργοποιημένο + .end-angle = Τελική γωνία + .end-limit = Τελικό όριο + .end-tangent-x = Τελική εφαπτομένη X + .end-tangent-y = Τελική εφαπτομένη Y + .end-tangent-z = Τελική εφαπτομένη Z + .end-tangent-vector-x = Διάνυσμα τελικής εφαπτομένης X + .end-tangent-vector-y = Διάνυσμα τελικής εφαπτομένης Y + .end-tangent-vector-z = Διάνυσμα τελικής εφαπτομένης Z + .end-x = Τέλος X + .end-y = Τέλος Y + .end-z = Τέλος Z + .end-parameter = Τελική παράμετρος + .end-segment-width = Πλάτος τελικού τμήματος + .exactly = Ακριβώς + .ext-rotation-deg = Περιστροφή προέκτασης (μοίρες) + .ext-line-1 = Γραμμή προέκτασης 1 + .ext-line-2 = Γραμμή προέκτασης 2 + .ext-line-color = Χρώμα γραμμής προέκτασης + .ext-line-ext = Προέκταση γραμμής προέκτασης + .ext-line-fixed = Σταθερή γραμμή προέκτασης + .ext-line-fixed-length = Σταθερό μήκος γραμμής προέκτασης + .ext-line-lineweight = Πάχος γραμμής προέκτασης + .ext-line-offset = Μετατόπιση γραμμής προέκτασης + .extended-entity = Εκτεταμένη οντότητα + .extended-data = Εκτεταμένα δεδομένα + .extended-lighting = Εκτεταμένος φωτισμός + .extents-max = Μέγιστα όρια + .extents-min = Ελάχιστα όρια + .external-reference = Εξωτερική αναφορά + .face = Έδρα + .face-count = Πλήθος εδρών + .falloff-angle = Γωνία απόσβεσης + .feature-x = Χαρακτηριστικό X + .feature-y = Χαρακτηριστικό Y + .feature-z = Χαρακτηριστικό Z + .field-contents = Περιεχόμενα πεδίου + .fill = Γέμισμα + .first-x = Πρώτο X + .first-y = Πρώτο Y + .first-z = Πρώτο Z + .fit-point = Σημείο προσαρμογής + .fit-point-count = Πλήθος σημείων προσαρμογής + .fit-point-x = Σημείο προσαρμογής X + .fit-point-y = Σημείο προσαρμογής Y + .fit-point-z = Σημείο προσαρμογής Z + .fit-tolerance = Ανοχή προσαρμογής + .fit-point-x-sentence-case = Σημείο προσαρμογής X + .fit-point-y-sentence-case = Σημείο προσαρμογής Y + .fit-point-z-sentence-case = Σημείο προσαρμογής Z + .fit-tolerance-sentence-case = Ανοχή προσαρμογής + .fit-smooth-title-case = Προσαρμογή/Εξομάλυνση + .fit-smooth-sentence-case = Προσαρμογή/εξομάλυνση + .fixed-elevation-range = Σταθερό εύρος υψομέτρου + .flag = Σημαία + .flags = Σημαίες + .font = Γραμματοσειρά + .frame-text = Πλαίσιο κειμένου + .from-dxf = Από DXF + .frozen-layers = Παγωμένα επίπεδα + .geographic-position-marker = Δείκτης γεωγραφικής θέσης + .global-width = Καθολικό πλάτος + .gloss = Γυαλάδα + .gradient-type = Τύπος διαβάθμισης + .graphics = Γραφικά + .has-leader = Έχει επεξήγηση + .high-threshold = Άνω κατώφλι + .horizontal-dir-deg = Οριζόντια κατεύθυνση (μοίρες) + .horizontal-landing = Οριζόντια προσγείωση + .hotspot-angle = Γωνία εστίασης + .iso-pen-width = Πλάτος πένας ISO + .identifier = Αναγνωριστικό + .ignore = Παράβλεψη + .illuminance-distance = Απόσταση φωτισμού + .indicator-alpha = Άλφα δείκτη + .indicator-color = Χρώμα δείκτη + .insert-x = Εισαγωγή X + .insert-y = Εισαγωγή Y + .insert-z = Εισαγωγή Z + .intensity = Ένταση + .intensity-color-scheme = Συνδυασμός χρωμάτων έντασης + .intensity-gradient = Διαβάθμιση έντασης + .intensity-range = Εύρος έντασης + .intensity-scheme = Σχήμα έντασης + .internal = Εσωτερικό + .inverse-linear = Αντιστρόφως γραμμική + .inverse-square = Αντιστρόφως τετραγωνική + .invert = Αντιστροφή + .island-detection-style = Στυλ ανίχνευσης νησίδων + .italic = Πλάγια + .jog-angle = Γωνία τεθλασμένης + .jog-x = Τεθλασμένη X + .jog-y = Τεθλασμένη Y + .jog-z = Τεθλασμένη Z + .justify = Στοίχιση + .knot-parameterization = Παραμετροποίηση κόμβων + .knot-parameterization-sentence-case = Παραμετροποίηση κόμβων + .lamp-preset = Προρύθμιση λαμπτήρα + .landing-gap = Κενό προσγείωσης + .layout-print-configuration = Διαμόρφωση εκτύπωσης διάταξης + .leader-1-x = Επεξήγηση 1 X + .leader-1-y = Επεξήγηση 1 Y + .leader-1-z = Επεξήγηση 1 Z + .leader-2-x = Επεξήγηση 2 X + .leader-2-y = Επεξήγηση 2 Y + .leader-2-z = Επεξήγηση 2 Z + .leader-length = Μήκος επεξήγησης + .leader-x = Επεξήγηση X + .leader-y = Επεξήγηση Y + .leader-z = Επεξήγηση Z + .leader-color = Χρώμα επεξήγησης + .leader-extension = Προέκταση επεξήγησης + .leader-linetype = Τύπος γραμμής επεξήγησης + .leader-lineweight = Πάχος γραμμής επεξήγησης + .leader-type = Τύπος επεξήγησης + .left-attachment = Σύνδεση αριστερά + .left-offset = Μετατόπιση αριστερά + .left-to-right = Από αριστερά προς δεξιά + .legacy-entity = Παλαιά οντότητα + .less = Λιγότερο + .level-of-smoothness = Βαθμός εξομάλυνσης + .light-gray = Ανοιχτό γκρι + .line-spacing = Διάστιχο + .line-space-distance = Απόσταση διάστιχου + .line-space-factor = Συντελεστής διάστιχου + .line-space-style = Στυλ διάστιχου + .line-with-arrow = Γραμμή με βέλος + .line-without-arrow = Γραμμή χωρίς βέλος + .lines-arrows = Γραμμές και βέλη + .linetype-generation = Παραγωγή τύπου γραμμής + .linked-cells = Συνδεδεμένα κελιά + .lock-position = Κλείδωμα θέσης + .locked = Κλειδωμένο + .low-threshold = Κάτω κατώφλι + .luminance = Φωτεινότητα + .lwpolyline = LwPolyline + .m-closed = Κλειστό M + .m-density = Πυκνότητα M + .m-vertex-count = Πλήθος κορυφών M + .matchprop-select-destination-objects-enter-to = MATCHPROP Επιλέξτε αντικείμενα προορισμού (Enter για τερματισμό): + .matchprop-select-source-object = MATCHPROP Επιλέξτε αντικείμενο προέλευσης: + .mline = MLine + .major-axis-vector-x = Διάνυσμα μεγάλου άξονα X + .major-axis-vector-y = Διάνυσμα μεγάλου άξονα Y + .major-axis-vector-z = Διάνυσμα μεγάλου άξονα Z + .major-radius = Μεγάλη ακτίνα + .manual-heights = Χειροκίνητα ύψη + .manual-positions = Χειροκίνητες θέσεις + .map-size = Μέγεθος χάρτη + .mass-properties = Ιδιότητες μάζας + .match = Αντιστοίχιση + .material = Υλικό + .material-details = Λεπτομέρειες υλικού + .maximum-intensity = Μέγιστη ένταση + .measurement = Μέτρηση + .merged-ranges = Συγχωνευμένα εύρη + .mesh = Πλέγμα + .minimum-intensity = Ελάχιστη ένταση + .minor-axis-vector-x = Διάνυσμα μικρού άξονα X + .minor-axis-vector-y = Διάνυσμα μικρού άξονα Y + .minor-axis-vector-z = Διάνυσμα μικρού άξονα Z + .minor-radius = Μικρή ακτίνα + .misc = Διάφορα + .mode = Λειτουργία + .monochrome = Μονόχρωμο + .more-colors = Περισσότερα χρώματα… + .multileader = MultiLeader + .multiline = MultiLine + .multileader-style = Στυλ πολλαπλής επεξήγησης + .multiple-lines = Πολλαπλές γραμμές + .n-closed = Κλειστό N + .n-density = Πυκνότητα N + .n-vertex-count = Πλήθος κορυφών N + .named-view = Ονομασμένη προβολή + .no-annotation = Χωρίς επισημείωση + .no-columns = Χωρίς στήλες + .no-matching-patterns = Δεν υπάρχουν μοτίβα που να ταιριάζουν + .no-selection = Καμία επιλογή + .normal-map = Χάρτης καθέτων + .normal-x = Κάθετο X + .normal-y = Κάθετο Y + .normal-z = Κάθετο Z + .notes = Σημειώσεις + .number = Αριθμός + .number-of-edges = Πλήθος ακμών + .number-of-faces = Πλήθος εδρών + .number-of-grips = Πλήθος λαβών + .number-of-vertices = Πλήθος κορυφών + .number-of-turns = Πλήθος στροφών + .number-of-control-points = Πλήθος σημείων ελέγχου + .number-of-fit-points = Πλήθος σημείων προσαρμογής + .ole-frame = Πλαίσιο OLE + .object-references = Αναφορές αντικειμένων + .obliquing = Λόξευση + .offset-from-arc = Μετατόπιση από το τόξο + .ole2frame = Ole2Frame + .one-color = Ένα χρώμα + .opacity = Αδιαφάνεια + .opacity-map = Χάρτης αδιαφάνειας + .ordinate-type = Τύπος τεταγμένης + .origin-x = Αρχή X + .origin-y = Αρχή Y + .origin-z = Αρχή Z + .out-of-range-behavior = Συμπεριφορά εκτός εύρους + .outer = Εξωτερικό + .override-center-x = Παράκαμψη κέντρου X + .override-center-y = Παράκαμψη κέντρου Y + .override-center-z = Παράκαμψη κέντρου Z + .override-option = Επιλογή παράκαμψης + .partial = Μερικό + .pattern = Μοτίβο + .pattern-name = Όνομα μοτίβου + .payload = Ωφέλιμο φορτίο + .physical-intensity = Φυσική ένταση + .physical-method = Φυσική μέθοδος + .pitch-and-family = Βήμα και οικογένεια + .planar = Επίπεδο + .plot-glyph = Σύμβολο εκτύπωσης + .plot-style-table = Πίνακας στυλ εκτύπωσης + .plot-table-attached-to = Ο πίνακας εκτύπωσης επισυνάφθηκε σε + .plot-table-type = Τύπος πίνακα εκτύπωσης + .color-dependent-plot-styles = Στυλ εκτύπωσης εξαρτώμενα από το χρώμα + .named-plot-styles = Ονομασμένα στυλ εκτύπωσης + .plot-style-is-locked-to-color-in-color-dependent = Το στυλ εκτύπωσης είναι κλειδωμένο στο χρώμα σε λειτουργία εξαρτώμενη από το χρώμα (CTB) + .point-1-x = Σημείο 1 X + .point-1-y = Σημείο 1 Y + .point-1-z = Σημείο 1 Z + .point-2-x = Σημείο 2 X + .point-2-y = Σημείο 2 Y + .point-2-z = Σημείο 2 Z + .point-3-x = Σημείο 3 X + .point-3-y = Σημείο 3 Y + .point-3-z = Σημείο 3 Z + .point-4-x = Σημείο 4 X + .point-4-y = Σημείο 4 Y + .point-4-z = Σημείο 4 Z + .point-cloud-display = Εμφάνιση νέφους σημείων + .point-cloud-ex = Νέφος σημείων Ex + .point-cloud-ex-display = Εμφάνιση νέφους σημείων Ex + .point-count = Πλήθος σημείων + .point-x = Σημείο X + .point-y = Σημείο Y + .point-z = Σημείο Z + .polyfacemesh = PolyfaceMesh + .polygonmesh = Πολυγωνικό πλέγμα + .polyline2d = Polyline2D + .polyline3d = Πολυγραμμή 3D + .predefined = Προκαθορισμένο + .property-bag = Σύνολο ιδιοτήτων + .proxy-entity = Οντότητα proxy + .proxy-id = Αναγνωριστικό proxy + .radius-ratio = Λόγος ακτίνων + .raster-image = Εικόνα ράστερ + .rasterimage = RasterImage + .reactor = Αντιδραστήρας + .records = Εγγραφές + .reflection-map = Χάρτης ανάκλασης + .reflectivity = Ανακλαστικότητα + .refraction = Διάθλαση + .refraction-map = Χάρτης διάθλασης + .region = Περιοχή + .registered-class-entity = Οντότητα καταχωρισμένης κλάσης + .remote-text = Απομακρυσμένο κείμενο + .render-flags = Σημαίες απόδοσης + .repeat-bottom-labels = Επανάληψη κάτω ετικετών + .repeat-top-labels = Επανάληψη πάνω ετικετών + .right-attachment = Σύνδεση δεξιά + .right-offset = Μετατόπιση δεξιά + .rows = Γραμμές + .shx = SHX + .saved-file = Αποθηκευμένο αρχείο + .scale-object = Κλίμακα αντικειμένου + .scale-x = Κλίμακα X + .scale-y = Κλίμακα Y + .scale-z = Κλίμακα Z + .search-patterns = Αναζήτηση μοτίβων… + .second-x = Δεύτερο X + .second-y = Δεύτερο Y + .second-z = Δεύτερο Z + .section-object = Αντικείμενο τομής + .section-points = Σημεία τομής + .section-symbol = Σύμβολο τομής + .section-vertices = Κορυφές τομής + .sectionsymbol = SectionSymbol + .segments = Τμήματα + .select-an-object-to-view-properties = Επιλέξτε ένα αντικείμενο για να δείτε τις ιδιότητες + .self-illumination = Αυτοφωτισμός + .seqend = Seqend + .settings = Ρυθμίσεις + .shadows = Σκιές + .shape = Σχήμα + .show = Εμφάνιση + .show-clipping = Εμφάνιση αποκοπής + .show-cropping = Εμφάνιση περικοπής + .show-intensity = Εμφάνιση έντασης + .show-clipped = Εμφάνιση αποκομμένου + .show-image = Εμφάνιση εικόνας + .show-underlay = Εμφάνιση υποβάθρου + .singleline = SingleLine + .softness = Απαλότητα + .solid = Στερεό + .solid3d = Solid3D + .source-files = Αρχεία προέλευσης + .source-block = Μπλοκ προέλευσης + .specular = Κατοπτρικό + .specular-map = Χάρτης κατοπτρικότητας + .spline-with-arrow = Spline με βέλος + .spline-without-arrow = Spline χωρίς βέλος + .start-angle = Αρχική γωνία + .start-limit = Αρχικό όριο + .start-tangent-x = Αρχική εφαπτομένη X + .start-tangent-y = Αρχική εφαπτομένη Y + .start-tangent-z = Αρχική εφαπτομένη Z + .start-tangent-vector-x = Διάνυσμα αρχικής εφαπτομένης X + .start-tangent-vector-y = Διάνυσμα αρχικής εφαπτομένης Y + .start-tangent-vector-z = Διάνυσμα αρχικής εφαπτομένης Z + .hide = Απόκρυψη + .periodic = Περιοδικό + .square-root = Τετραγωνική ρίζα + .uniform = Ομοιόμορφο + .start-x = Αρχή X + .start-y = Αρχή Y + .start-z = Αρχή Z + .start-parameter = Αρχική παράμετρος + .start-segment-width = Πλάτος αρχικού τμήματος + .state = Κατάσταση + .static = Στατικό + .storage-size = Μέγεθος αποθήκευσης + .stored-point-counts = Αποθηκευμένα πλήθη σημείων + .style = Στυλ + .style-handle = Αναγνωριστικό στυλ + .style-name = Όνομα στυλ + .style-justification = Στοίχιση στυλ + .style-scale = Κλίμακα στυλ + .stylization-type = Τύπος στυλιζαρίσματος + .surface = Επιφάνεια + .surface-area = Εμβαδόν επιφάνειας + .symbol-scale = Κλίμακα συμβόλου + .table-breaks = Διακοπές πίνακα + .table-height = Ύψος πίνακα + .table-style = Στυλ πίνακα + .table-width = Πλάτος πίνακα + .target-x = Στόχος X + .target-y = Στόχος Y + .target-z = Στόχος Z + .tessellation = Τριγωνοποίηση + .text-alignment = Στοίχιση κειμένου + .text-color = Χρώμα κειμένου + .text-direction = Κατεύθυνση κειμένου + .text-payload = Ωφέλιμο φορτίο κειμένου + .text-position = Θέση κειμένου + .text-rotation-deg = Περιστροφή κειμένου (μοίρες) + .text-size = Μέγεθος κειμένου + .text-visible = Κείμενο ορατό + .text-x = Κείμενο X + .text-y = Κείμενο Y + .text-z = Κείμενο Z + .text-alignment-x = Στοίχιση κειμένου X + .text-alignment-y = Στοίχιση κειμένου Y + .text-alignment-z = Στοίχιση κειμένου Z + .text-inside = Κείμενο εντός + .text-inside-align = Στοίχιση κειμένου εντός + .text-offset = Μετατόπιση κειμένου + .text-outside-align = Στοίχιση κειμένου εκτός + .text-pos-hor = Οριζόντια θέση κειμένου + .text-pos-vert = Κατακόρυφη θέση κειμένου + .thickness = Πάχος + .tolerance-display = Εμφάνιση ανοχής + .tolerance-limit-lower = Κάτω όριο ανοχής + .tolerance-limit-upper = Άνω όριο ανοχής + .tolerance-pos-vert = Κατακόρυφη θέση ανοχής + .tolerance-suppress-leading-zeros = Απόκρυψη αρχικών μηδενικών ανοχής + .tolerance-suppress-trailing-zeros = Απόκρυψη τελικών μηδενικών ανοχής + .tolerance-text-height = Ύψος κειμένου ανοχής + .top-height = Ύψος κορυφής + .top-radius = Ακτίνα κορυφής + .total-angle = Συνολική γωνία + .transform = Μετασχηματισμός + .translucence = Ημιδιαφάνεια + .triangles = Τρίγωνα + .turn-height = Ύψος στροφής + .turn-slope = Κλίση στροφής + .turns = Στροφές + .twist = Συστροφή + .two-color = Δύο χρώματα + .ucs-name = Όνομα UCS + .ucs-origin = Αρχή UCS + .ucs-x = UCS X + .ucs-y = UCS Y + .ucs-z = UCS Z + .ucs-icon-on = Εικονίδιο UCS ενεργό + .ucs-icon-at-origin = Εικονίδιο UCS στην αρχή + .ucs-per-viewport = UCS ανά θύρα προβολής + .underlay = Υπόβαθρο + .underlay-adjust = Ρύθμιση υποβάθρου + .underlay-layers = Επίπεδα υποβάθρου + .underlay-name = Όνομα υποβάθρου + .underlay-path = Διαδρομή υποβάθρου + .underlined = Υπογραμμισμένο + .unit-factor = Συντελεστής μονάδας + .units = Μονάδες + .unknown-flags = Άγνωστες σημαίες + .use-limits = Χρήση ορίων + .user-defined = Ορισμένο από τον χρήστη + .user-text = Κείμενο χρήστη + .v-align = Κατακ. στοίχιση + .verify = Επαλήθευση + .vertex = Κορυφή + .vertex-1-x = Κορυφή 1 X + .vertex-1-y = Κορυφή 1 Y + .vertex-1-z = Κορυφή 1 Z + .vertex-2-x = Κορυφή 2 X + .vertex-2-y = Κορυφή 2 Y + .vertex-2-z = Κορυφή 2 Z + .vertex-3-x = Κορυφή 3 X + .vertex-3-y = Κορυφή 3 Y + .vertex-3-z = Κορυφή 3 Z + .vertex-4-x = Κορυφή 4 X + .vertex-4-y = Κορυφή 4 Y + .vertex-4-z = Κορυφή 4 Z + .vertex-x = Κορυφή X + .vertex-y = Κορυφή Y + .vertex-z = Κορυφή Z + .vertex-count = Πλήθος κορυφών + .vertical-direction = Κατακόρυφη κατεύθυνση + .vertices = Κορυφές + .view-border = Περίγραμμα προβολής + .view-representation = Αναπαράσταση προβολής + .view-symbol-flags = Σημαίες συμβόλου προβολής + .view-symbol-version = Έκδοση συμβόλου προβολής + .viewborder = ViewBorder + .viewport-could-not-be-added-e = Δεν ήταν δυνατή η προσθήκη θύρας προβολής: __ocs_fmt_0__ + .visual-style = Οπτικό στυλ + .volume = Όγκος + .watertight = Στεγανό + .web-file = Αρχείο web + .with-block = Με μπλοκ + .with-tolerance = Με ανοχή + .wizard-flag = Σημαία οδηγού + .x-scale = Κλίμακα X + .zero = Μηδέν + +styles = + .blocks = Μπλοκ: __ocs_fmt_0__ + .color-cur-color = Χρώμα: __ocs_arg_cur_color__ + .layers-value = Επίπεδα: __ocs_fmt_0__ + .linetypes-value-indented-title-case = Τύποι γραμμών: __ocs_fmt_0__ + .lineweight-cur-lw = Πάχος γραμμής: __ocs_arg_cur_lw__ + .screening-cur-scr = Απόχρωση: __ocs_arg_cur_scr__ + .text-style-indented-label-sentence-case = Στυλ κειμένου: + .text-styles = Στυλ κειμένου: __ocs_fmt_0__ + .no-table-loaded = (δεν έχει φορτωθεί πίνακας) + .value-0-variable = 0 = μεταβλητό + .aci-color-index = Δείκτης χρώματος ACI + .aci = ACI: + .audit-no-issues-found = AUDIT: δεν βρέθηκαν προβλήματα. + .audit-reference-s-to-undefined-block-s = AUDIT: αναφορά(ές) σε μη ορισμένα μπλοκ: __ocs_fmt_0__ + .audit-reference-s-to-undefined-layer-s = AUDIT: αναφορά(ές) σε μη ορισμένα επίπεδα: __ocs_fmt_0__ + .audit-report-only-no-automatic-repair-performe = AUDIT: μόνο αναφορά — δεν έγινε αυτόματη επιδιόρθωση. + .audit-scanned-total-object-s = AUDIT: σαρώθηκαν __ocs_fmt_0__ αντικείμενο(α). + .above-text = Πάνω από το κείμενο + .active-dim-style-set-to-name-arg = Το ενεργό στυλ διαστάσεων ορίστηκε σε "__ocs_fmt_0__" + .add-leader = Προσθήκη επεξήγησης + .apply-to-aci = Εφαρμογή σε ACI + .arrow-size-dimasz = Μέγεθος βέλους (DIMASZ) + .arrowhead-dimblk = Άκρο βέλους (DIMBLK) + .arrowhead-block = Μπλοκ άκρου βέλους: + .arrowhead-size = Μέγεθος άκρου βέλους: + .arrows = Βέλη + .arrows-out-first = Βέλη πρώτα εκτός + .at-first-ext = Στην πρώτη προέκταση + .at-second-ext = Στη δεύτερη προέκταση + .basepoint = Σημείο βάσης + .before-text = Πριν από το κείμενο + .best-fit = Βέλτιστη προσαρμογή + .big-font = Μεγάλη γραμματοσειρά: + .blockextents = Όρια μπλοκ + .bottomline = Κάτω γραμμή + .bottomofbottomline = Κάτω μέρος της κάτω γραμμής + .bottomoftoplineunderlineall = Κάτω μέρος της πάνω γραμμής, υπογράμμιση όλων + .bottomoftoplineunderlinebottomline = Κάτω μέρος της πάνω γραμμής, υπογράμμιση κάτω γραμμής + .bottomoftoplineunderlinetopline = Κάτω μέρος της πάνω γραμμής, υπογράμμιση πάνω γραμμής + .by-annotation-scale = Ανά κλίμακα επισημείωσης + .cdimsty-new-current-dimension-style-name = CDIMSTY νέο όνομα τρέχοντος στυλ διαστάσεων: + .cdimsty-cur = CDIMSTY = "__ocs_fmt_0__" + .cdimsty-dim-style-not-found = CDIMSTY: το στυλ διαστάσεων '__ocs_fmt_0__' δεν βρέθηκε. + .celtscale-new-current-object-line-type-scale = CELTSCALE νέα κλίμακα τύπου γραμμής τρέχοντος αντικειμένου: + .celtscale-v-4 = CELTSCALE = __ocs_fmt_0__ + .celtscale-set-to-v-4 = Το CELTSCALE ορίστηκε σε __ocs_fmt_0__ + .celtscale-value-must-be-positive = CELTSCALE: η τιμή πρέπει να είναι θετική. + .chprop-new-colour-name-1-255-bylayer = CHPROP νέο χρώμα (όνομα / 1-255 / ByLayer): + .chprop-new-layer-name = CHPROP νέο όνομα επιπέδου: + .chprop-new-linetype-name = CHPROP νέο όνομα τύπου γραμμής: + .chprop-new-linetype-scale = CHPROP νέα κλίμακα τύπου γραμμής: + .chprop-property-layer-color-linetype-ltscale-t = CHPROP ιδιότητα [Επίπεδο / Χρώμα / Τύπος γραμμής / Κλίμακα ΤΓ / Διαφάνεια]: + .chprop-transparency-0-90 = CHPROP διαφάνεια 0-90: + .chprop-invalid-value-for = CHPROP: μη έγκυρη τιμή '__ocs_fmt_0__' για __ocs_fmt_1__. + .chprop-no-entities-selected = CHPROP: δεν έχουν επιλεγεί οντότητες. + .chprop-unknown-property-use-layer-color-linety = CHPROP: άγνωστη ιδιότητα '__ocs_fmt_0__'. Χρησιμοποιήστε: LAYER COLOR LINETYPE LTSCALE TRANSPARENCY + .chprop-entity-entities-updated = CHPROP: ενημερώθηκαν __ocs_fmt_0__ οντότητα/οντότητες. + .clayer-new-current-layer-name = CLAYER νέο όνομα τρέχοντος επιπέδου: + .clayer-cur = CLAYER = "__ocs_fmt_0__" + .clayer-set-to-name-arg = Το CLAYER ορίστηκε σε "__ocs_fmt_0__" + .clayer-layer-not-found = CLAYER: το επίπεδο '__ocs_fmt_0__' δεν βρέθηκε. + .color-new-object-colour-bylayer-byblock-1-255 = COLOR νέο χρώμα αντικειμένου [ByLayer / ByBlock / 1-255 / κόκκινο / κίτρινο / πράσινο / κυανό / μπλε / ματζέντα / λευκό]: + .centeroftext = Κέντρο του κειμένου + .centeroftextoverline = Κέντρο του κειμένου με επιγράμμιση + .clear-table = Εκκαθάριση πίνακα + .click-a-scale-to-add-or-remove-the-object-s-re = Κάντε κλικ σε μια κλίμακα για να προσθέσετε ή να αφαιρέσετε την αντίστοιχη αναπαράσταση του αντικειμένου. + .color-override-rrggbb = Παράκαμψη χρώματος (#RRGGBB): + .contentfirst = Περιεχόμενο πρώτα + .current-linetype-set-to-nm = Ο τρέχων τύπος γραμμής ορίστηκε σε __ocs_fmt_0__. + .current-multileader-style = Τρέχον στυλ πολλαπλής επεξήγησης: __ocs_fmt_0__ + .current-object-colour = Τρέχον χρώμα αντικειμένου: __ocs_fmt_0__ + .current-values = Τρέχουσες τιμές: + .decimal-degrees = Δεκαδικές μοίρες + .diagonal = Διαγώνια + .dim-line-between-ext-dimtofl = Γραμμή διάστασης μεταξύ προεκτάσεων (DIMTOFL) + .dim-line-color-aci-dimclrd = Χρώμα γραμμής διάστασης ACI (DIMCLRD) + .dim-line-linetype-dimltype = Τύπος γραμμής διάστασης (DIMLTYPE) + .dim-line-weight-dimlwd = Πάχος γραμμής διάστασης (DIMLWD) + .dimstyle-updated = Το στυλ διαστάσεων '__ocs_fmt_0__' ενημερώθηκε. + .dimension-line = Γραμμή διάστασης + .dimension-style-manager = Διαχείριση στυλ διαστάσεων + .double-click-a-scale-to-rename-it-edit-its-pap = Κάντε διπλό κλικ σε μια κλίμακα για να τη μετονομάσετε· επεξεργαστείτε εδώ τον λόγο χαρτί : σχέδιο. Τα Νέο / Αντιγραφή προσθέτουν κλίμακα. Οι αλλαγές διατηρούνται μόνο αν πατήσετε Εφαρμογή πριν από το κλείσιμο. + .down = Κάτω + .drawing-background = Φόντο σχεδίου + .drawing-units = Μονάδες σχεδίου + .edge-style = Στυλ ακμών + .enable-block-rotation = Ενεργοποίηση περιστροφής μπλοκ + .enable-block-scale = Ενεργοποίηση κλίμακας μπλοκ + .enable-dogleg = Ενεργοποίηση τεθλασμένου τμήματος + .enable-landing = Ενεργοποίηση προσγείωσης + .enter-new-value-for-name-current = Δώστε νέα τιμή για __ocs_fmt_0__ <__ocs_fmt_1__>: + .ext-line-1-linetype-dimltex1 = Τύπος γραμμής προέκτασης 1 (DIMLTEX1) + .ext-line-2-linetype-dimltex2 = Τύπος γραμμής προέκτασης 2 (DIMLTEX2) + .extension-line = Γραμμή προέκτασης + .fileassoc-register-as-a-dwg-dxf-handler-1-0 = FILEASSOC καταχώριση ως χειριστής .dwg/.dxf; [1 / 0]: + .fileassoc-v = FILEASSOC = __ocs_fmt_0__ + .fileassoc-set-to-0-unregistered-as-a-file-hand = Το FILEASSOC ορίστηκε σε 0 — καταργήθηκε η καταχώριση ως χειριστής αρχείων + .fileassoc-registration-failed-e = FILEASSOC: η καταχώριση απέτυχε: __ocs_fmt_0__ + .fileassoc-unregister-failed-e = FILEASSOC: η κατάργηση καταχώρισης απέτυχε: __ocs_fmt_0__ + .findnonpurgeable-named-objects-in-use-not-purg = FINDNONPURGEABLE: ονομασμένα αντικείμενα σε χρήση (δεν εκκαθαρίζονται): + .face-style = Στυλ εδρών + .font-file-title-case = Αρχείο γραμματοσειράς + .gradians = Βαθμοί (gon) + .isavebak-write-a-bak-on-save-1-0 = ISAVEBAK δημιουργία αρχείου .bak κατά την αποθήκευση; [1 / 0]: + .isavebak-v = ISAVEBAK = __ocs_fmt_0__ + .isavebak-set-to-0 = Το ISAVEBAK ορίστηκε σε 0 + .isavebak-set-to-1 = Το ISAVEBAK ορίστηκε σε 1 + .keep-with-dim-line = Διατήρηση με τη γραμμή διάστασης + .layers = ΕΠίπεδα + .linetype-list-set = LINETYPE [Λίστα / Ορισμός]: + .linetype-set-linetype-name-bylayer-byblock = LINETYPE SET όνομα τύπου γραμμής (ByLayer / ByBlock / …): + .linetype-name-is-not-loaded-use-linetype-list = LINETYPE: το "__ocs_fmt_0__" δεν έχει φορτωθεί. Χρησιμοποιήστε LINETYPE LIST για να δείτε τους διαθέσιμους τύπους γραμμών. + .ltscale-new-global-line-type-scale = LTSCALE νέα καθολική κλίμακα τύπου γραμμής: + .ltscale-v-4 = LTSCALE = __ocs_fmt_0__ + .ltscale-set-to-v-4 = Το LTSCALE ορίστηκε σε __ocs_fmt_0__ + .ltscale-value-must-be-positive = LTSCALE: η τιμή πρέπει να είναι θετική. + .lwdisplay-show-lineweights-on-off = LWDISPLAY εμφάνιση παχών γραμμών; [ON / OFF]: + .lwdisplay-value-assignment-uppercase = LWDISPLAY = __ocs_fmt_0__ + .lwdisplay-value-uppercase = LWDISPLAY __ocs_fmt_0__ + .leader-arrowhead-dimldrblk = Άκρο βέλους επεξήγησης (DIMLDRBLK) + .leader-draw-order = Σειρά σχεδίασης επεξήγησης: + .leaderfirst = Επεξήγηση πρώτα + .leaderheadfirst = Κεφαλή επεξήγησης πρώτα + .leadertailfirst = Ουρά επεξήγησης πρώτα + .leading = Αρχικά + .linetypes = ΤΓραμμών + .linetypes-value-title-case = Τύποι γραμμών: __ocs_fmt_0__ + .lineweight-index-0-24-255-obj = Δείκτης πάχους γραμμής (0-24, 255=αντικ.): + .load-ctb-stb = Φόρτωση CTB/STB + .ltscale = ΚλίμακαΤΓ + .max-leader-points = Μέγ. σημεία επεξήγησης: + .middlecenter = Μέση κέντρο + .middleofbottomline = Μέση της κάτω γραμμής + .middleoftext = Μέση του κειμένου + .middleoftopline = Μέση της πάνω γραμμής + .minus-tolerance-dimtm = Αρνητική ανοχή (DIMTM) + .multileader-style-manager = Διαχείριση στυλ πολλαπλών επεξηγήσεων + .multiline-style-manager = Διαχείριση στυλ πολλαπλών γραμμών + .no-linetypes-defined = Δεν έχουν οριστεί τύποι γραμμών. + .not-stacked = Χωρίς στοίβαξη + .overkill-deleted-n-duplicate-object-s = OVERKILL: διαγράφηκαν __ocs_fmt_0__ διπλότυπο(α) αντικείμενο(α). + .overkill-no-duplicate-objects-found = OVERKILL: δεν βρέθηκαν διπλότυπα αντικείμενα. + .object-colour-set-to = Το χρώμα του αντικειμένου ορίστηκε σε __ocs_fmt_0__. + .object-object-label = Αντικείμενο: __ocs_arg_object_label__ + .optimized = Βελτιστοποιημένο + .over-first-ext = Πάνω από την πρώτη προέκταση + .over-second-ext = Πάνω από τη δεύτερη προέκταση + .pdmode-new-value-0-dot-1-none-2-3-x-4-tick-32 = PDMODE νέα τιμή [0=τελεία 1=κανένα 2=+ 3=x 4=υποδιαίρεση· +32 κύκλος +64 τετράγωνο]: + .pdmode-v = PDMODE = __ocs_fmt_0__ + .pdmode-set-to-v = Το PDMODE ορίστηκε σε __ocs_fmt_0__ + .pdsize-new-point-size-0-5-of-viewport-0-absolu = PDSIZE νέο μέγεθος σημείου (0 = 5% της θύρας προβολής, >0 = απόλυτο, <0 = ποσοστό θύρας προβολής): + .pdsize-v-4 = PDSIZE = __ocs_fmt_0__ + .pdsize-set-to-v-4 = Το PDSIZE ορίστηκε σε __ocs_fmt_0__ + .pickadd = PICKADD = __ocs_fmt_0__ (__ocs_fmt_1__) + .pickdrag = PICKDRAG = __ocs_fmt_0__ (__ocs_fmt_1__) + .purge-all-blocks-layers-linetypes-styles = PURGE [Όλα / Μπλοκ / ΕΠίπεδα / ΤΓραμμών / ΣΤυλ]: + .purge-nothing-to-purge = PURGE: δεν υπάρχει τίποτα για εκκαθάριση. + .purge-unknown-option-sub-use-all-blocks-layers = PURGE: άγνωστη επιλογή "__ocs_fmt_0__" — χρησιμοποιήστε ALL, Blocks, LAyers, LineTypes ή STyles. + .purge-item-s-removed = PURGE: αφαιρέθηκαν __ocs_fmt_0__ στοιχείο(α) — __ocs_fmt_1__. + .paper-units = Μονάδες χαρτιού + .paralleltolastleaderline = Παράλληλα προς την τελευταία γραμμή επεξήγησης + .plot-style-editor = Επεξεργασία στυλ εκτύπωσης + .plus-tolerance-dimtp = Θετική ανοχή (DIMTP) + .point-size = Μέγεθος σημείου: + .point-style = Στυλ σημείου + .rename = RENAME: '__ocs_fmt_0__' → '__ocs_fmt_1__'. + .rename-could-not-rename-in-not-found-or-protec = RENAME: δεν ήταν δυνατή η μετονομασία του '__ocs_fmt_0__' σε __ocs_fmt_1__ — δεν βρέθηκε ή είναι προστατευμένο, ή το '__ocs_fmt_2__' είναι μη έγκυρο ή χρησιμοποιείται. + .rename-could-not-rename-block-missing-anonymou = RENAME: δεν ήταν δυνατή η μετονομασία του μπλοκ '__ocs_fmt_0__' — λείπει/είναι ανώνυμο/είναι xref, ή το '__ocs_fmt_1__' είναι μη έγκυρο ή χρησιμοποιείται. + .rename-unknown-type-use-layer-block-style-dims = RENAME: άγνωστος τύπος '__ocs_fmt_0__'. Χρησιμοποιήστε LAYER BLOCK STYLE DIMSTYLE LINETYPE UCS VIEW + .requires-0-or-1-or-multiple-or-single = Απαιτείται 0 Ή 1 Ή MULTIPLE Ή SINGLE + .requires-0-or-1 = Απαιτείται 0 ή 1 + .requires-a-non-negative-number-of-minutes-0-of = Απαιτείται μη αρνητικός αριθμός λεπτών (0 = ανενεργό) + .savetime-autosave-interval-in-minutes-0-off = SAVETIME διάστημα αυτόματης αποθήκευσης σε λεπτά (0 = ανενεργό): + .savetime = SAVETIME = __ocs_fmt_0__ + .scaletext-scale-factor-or-h-height-for-an-abso = SCALETEXT συντελεστής κλίμακας (ή 'H <ύψος>' για απόλυτο ύψος): + .scaletext-no-text-mtext-in-selection = SCALETEXT: δεν υπάρχει Text/MText στην επιλογή. + .scaletext-scaled-count-text-entity-ies = SCALETEXT: κλιμακώθηκαν __ocs_fmt_0__ οντότητα(ες) κειμένου. + .scaletext-select-text-mtext-entities-first = SCALETEXT: επιλέξτε πρώτα οντότητες Text/MText. + .scaletext-value-must-be-positive = SCALETEXT: η τιμή πρέπει να είναι θετική. + .setbylayer-reset-changed-entity-entities-to-by = SETBYLAYER: __ocs_fmt_0__ οντότητα/οντότητες επαναφέρθηκαν σε ByLayer. + .setbylayer-select-entities-first = SETBYLAYER: επιλέξτε πρώτα οντότητες. + .setvar-new-value-blank-to-read = SETVAR νέα τιμή (κενό για ανάγνωση): + .setvar-variable-name = SETVAR όνομα μεταβλητής: + .styles-mixed-case = ΣΤυλ + .save-as = Αποθήκευση ως… + .scales = Κλίμακες + .screening-0-100 = Απόχρωση (0-100): + .select-a-style-to-view-details = Επιλέξτε ένα στυλ για να δείτε λεπτομέρειες. + .separate-arrow-blocks-dimsah = Ξεχωριστά μπλοκ βελών (DIMSAH) + .set = Ορισμός + .set-size-relative-to-screen = Ορισμός μεγέθους σε σχέση με την οθόνη + .set-size-in-absolute-units = Ορισμός μεγέθους σε απόλυτες μονάδες + .straightlinesegments = Ευθύγραμμα τμήματα + .style-dimtxsty = Στυλ (DIMTXSTY) + .styles-title-case = Στυλ + .texteditmode-v = TEXTEDITMODE = __ocs_fmt_0__ + .texteditmode-set-to-n = Το TEXTEDITMODE ορίστηκε σε __ocs_fmt_0__ + .table-style-manager = Διαχείριση στυλ πινάκων + .text-style-manager = Διαχείριση στυλ κειμένου + .text-style-label-sentence-case = Στυλ κειμένου: + .topoftopline = Πάνω μέρος της πάνω γραμμής + .trailing = Τελικά + .truetype-font-label-mixed-case = Γραμματοσειρά TrueType: + .truetype-font-picker-mixed-case = Γραμματοσειρά TrueType… + .usage-celtscale-value = Χρήση: CELTSCALE [τιμή] + .usage-linetype-list-set-name = Χρήση: LINETYPE LIST | SET <όνομα> + .usage-linetype-set-name-bylayer-byblock = Χρήση: LINETYPE SET <όνομα | ByLayer | ByBlock> + .usage-ltscale-value = Χρήση: LTSCALE [τιμή] + .usage-lwdisplay-on-off = Χρήση: LWDISPLAY [ON|OFF] + .usage-rename-type-old-new-types-layer-block-st = Χρήση: RENAME <τύπος> <παλιό> <νέο> (τύποι: LAYER BLOCK STYLE DIMSTYLE LINETYPE UCS VIEW) + .usage-scaletext-factor-or-scaletext-h-height = Χρήση: SCALETEXT <συντελεστής> ή SCALETEXT H <ύψος> + .vscurrent-visual-style-shaded-wireframe-hidden = VSCURRENT οπτικό στυλ [Σκιασμένο / Συρμάτινο / Κρυφές γραμμές / Ρεαλιστικό / Εννοιολογικό / Ακτινογραφία]: + .windows-desktop = Επιφάνεια εργασίας των Windows + .big-font-file = αρχείο μεγάλης γραμματοσειράς… + .font-file-picker-lowercase = αρχείο γραμματοσειράς… + .v = __ocs_fmt_0__ = __ocs_fmt_1__ + .expected-0-or-1 = __ocs_fmt_0__: αναμενόταν 0 ή 1. + +plot = + .no-page-setups = (δεν υπάρχουν διαμορφώσεις σελίδας) + .none = <καμία> + .previous = <προηγούμενη> + .center-the-plot = Κεντράρισμα της εκτύπωσης + .copies = Αντίτυπα + .export-pdf = Εξαγωγή PDF + .fit-to-paper = Προσαρμογή στο χαρτί + .layout-plots-the-current-sheet-using-the-selec = Η επιλογή Διάταξη εκτυπώνει το τρέχον φύλλο με το επιλεγμένο μέγεθος χαρτιού. + .merge-overlapping-lines = Συγχώνευση επικαλυπτόμενων γραμμών + .object-lineweights = Πάχη γραμμών αντικειμένων + .orientation = Προσανατολισμός + .page-setup-w-1-h-1-mm-area-plot-area-center-ce = Διαμόρφωση σελίδας: __ocs_fmt_0__×__ocs_fmt_1__ mm περιοχή=__ocs_fmt_2__ κεντράρισμα=__ocs_fmt_3__ περιστρ=__ocs_fmt_4__° + .page-setups = Διαμορφώσεις σελίδας + .paper-text-height = Ύψος κειμένου στο χαρτί: + .paper-space-last = Χώρος χαρτιού τελευταίος + .pick = Επιλογή… + .plot-area = Περιοχή εκτύπωσης + .plot-in-background = Εκτύπωση στο παρασκήνιο + .plot-offset = Μετατόπιση εκτύπωσης + .plot-options = Επιλογές εκτύπωσης + .plot-scale = Κλίμακα εκτύπωσης + .plot-stamp = Σφραγίδα εκτύπωσης + .plot-style-table-pen-assignments = Πίνακας στυλ εκτύπωσης (αντιστοιχίσεις πενών) + .plot-transparency = Εκτύπωση διαφάνειας + .plot-upside-down = Εκτύπωση ανάποδα + .preview = Προεπισκόπηση + .printer-plotter = Εκτυπωτής / σχεδιογράφος + .properties = Ιδιότητες… + .save-to-pdf-file = Αποθήκευση σε αρχείο PDF… + .save = Αποθήκευση… + .scale-lineweights = Κλιμάκωση παχών γραμμών + .set-current = Ορισμός ως τρέχον + .shaded-viewport-options = Επιλογές σκιασμένης θύρας προβολής + .system-default-printer = Προεπιλεγμένος εκτυπωτής συστήματος + .what-to-plot = Τι θα εκτυπωθεί + .x-mm = X (mm) + .y-mm = Y (mm) + +manage = + .about = Σχετικά + .application = Εφαρμογή + .audit = Έλεγχος + .cleanup = Εκκαθάριση + .customization = Προσαρμογή + .edit-aliases = Επεξεργασία ψευδωνύμων + .export = Εξαγωγή + .find-non-purgeable-items = + Εύρεση μη + εκκαθαρίσιμων στοιχείων + .load-partial-cui = Φόρτωση μερικού CUI + .overkill = Overkill + .purge = Εκκαθάριση + .user-interface = + Περιβάλλον + χρήστη + +plugins = + .api-incompatible = Μη συμβατό API + .add-from-github = Προσθήκη από το GitHub + .add-repository = Προσθήκη αποθετηρίου + .added-from-github = Προστέθηκε από το GitHub + .available-plugins = Διαθέσιμα πρόσθετα + .browse-install-and-manage-add-ons-select-one-t = Περιηγηθείτε, εγκαταστήστε και διαχειριστείτε πρόσθετα. Επιλέξτε ένα για να δείτε το README του. + .check-your-internet-or-proxy-connection-then-r = Ελέγξτε τη σύνδεσή σας στο διαδίκτυο ή τον διακομιστή μεσολάβησης και δοκιμάστε ξανά. Τα αποθετήρια που προστέθηκαν χειροκίνητα παραμένουν διαθέσιμα. + .commands-cmds = Εντολές: __ocs_arg_cmds__ + .connecting-securely-using-your-system-certific = Ασφαλής σύνδεση με βάση τις ρυθμίσεις πιστοποιητικών του συστήματός σας. + .copy-details = Αντιγραφή λεπτομερειών + .disable = Απενεργοποίηση + .disabled = Απενεργοποιημένο + .download-desktop-app = Λήψη της εφαρμογής για υπολογιστή + .enable = Ενεργοποίηση + .fetching-the-default-branch-from-github = Ανάκτηση του προεπιλεγμένου κλάδου από το GitHub. + .github-url-or-owner-repository = URL GitHub ή κάτοχος/αποθετήριο + .hide-details = Απόκρυψη λεπτομερειών + .incompatible = Μη συμβατό + .install = Εγκατάσταση + .load-failed = Η φόρτωση απέτυχε + .load-failed-error = Η φόρτωση απέτυχε: __ocs_arg_error__ + .loading-readme = Φόρτωση README… + .loading-plugin-catalog = Φόρτωση καταλόγου προσθέτων… + .no-additional-plugins-are-available = Δεν υπάρχουν διαθέσιμα επιπλέον πρόσθετα. + .no-available-plugins-match-your-search = Κανένα διαθέσιμο πρόσθετο δεν ταιριάζει με την αναζήτησή σας. + .no-installed-plugins-match-your-search = Κανένα εγκατεστημένο πρόσθετο δεν ταιριάζει με την αναζήτησή σας. + .no-library = Χωρίς βιβλιοθήκη + .no-plugins-installed-yet = Δεν έχουν εγκατασταθεί ακόμη πρόσθετα. + .open-cad-studio-could-not-trust-the-certificat = Το Open CAD Studio δεν μπόρεσε να εμπιστευτεί το πιστοποιητικό που παρουσίασε το μητρώο προσθέτων. Ελέγξτε τις ρυθμίσεις πιστοποιητικών και διακομιστή μεσολάβησης του συστήματός σας και δοκιμάστε ξανά. + .open-cad-studio-plugins-are-native-packages-an = Τα πρόσθετα του Open CAD Studio είναι εγγενή πακέτα και δεν μπορούν να εκτελεστούν μέσα σε πρόγραμμα περιήγησης. Κατεβάστε την εφαρμογή για υπολογιστή για να περιηγηθείτε, να εγκαταστήσετε και να χρησιμοποιήσετε πρόσθετα. + .paste-a-public-repository-url-compatible-relea = Επικολλήστε ένα δημόσιο URL αποθετηρίου. Οι συμβατές εκδόσεις και το README εντοπίζονται αυτόματα. + .plugin-api-plugin-is-incompatible-with-this-bu = Το API προσθέτου __ocs_arg_plugin__ δεν είναι συμβατό με το ABI κορδέλας του API __ocs_arg_build__ αυτής της έκδοσης. Ενημερώστε ή επαναμεταγλωττίστε το πρόσθετο. + .plugin-details = Λεπτομέρειες προσθέτου + .plugin-registry-request-timed-out = Λήξη χρόνου αιτήματος προς το μητρώο προσθέτων + .plugins = Πρόσθετα + .plugins-are-available-in-the-desktop-app = Τα πρόσθετα είναι διαθέσιμα στην εφαρμογή για υπολογιστή + .readme-could-not-be-loaded = Δεν ήταν δυνατή η φόρτωση του README + .restart-to-load = Επανεκκίνηση για φόρτωση + .search-plugins = Αναζήτηση προσθέτων… + .select-a-plugin-to-read-its-github-readme = Επιλέξτε ένα πρόσθετο για να διαβάσετε το README του στο GitHub. + .select-the-plugin-again-to-load-its-readme = Επιλέξτε ξανά το πρόσθετο για να φορτωθεί το README του. + .show-details = Εμφάνιση λεπτομερειών + .unable-to-load-the-plugin-registry = Αδυναμία φόρτωσης του μητρώου προσθέτων + .unable-to-verify-the-server-certificate = Αδυναμία επαλήθευσης του πιστοποιητικού του διακομιστή + .unavailable = Μη διαθέσιμο + .uninstall = Απεγκατάσταση + .update-to-tag = Ενημέρωση σε __ocs_arg_tag__ + .view-on-github = Προβολή στο GitHub + .no-releases = καμία έκδοση + +ui = + .count-steps-available = __ocs_arg_count__ διαθέσιμα βήματα + .label-history = Ιστορικό: __ocs_arg_label__ + .n-vp = __ocs_arg_n__ ΘΠ + .a-newer-open-cad-studio-version-is-published-o = Μια νεότερη έκδοση του Open CAD Studio έχει δημοσιευτεί στο GitHub. + .annotation-viewport-scale-click-to-change = + Κλίμακα επισημείωσης / θύρας προβολής + Κάντε κλικ για αλλαγή + .annotation-scale = Κλίμακα επισημείωσης + .automatically-add-scales = Αυτόματη προσθήκη κλιμάκων + .backwards = Αντίστροφα + .block-block = Μπλοκ: __ocs_arg_block__ + .bring-above-object = Μεταφορά πάνω από το αντικείμενο + .bring-to-front = Μεταφορά εμπρός + .building-scene-caches = Δημιουργία κρυφών μνημών σκηνής… + .cad-application-for-architecture-engineering = Εφαρμογή CAD για αρχιτεκτονική και μηχανική + .clean-screen = Καθαρή οθόνη + .clean-screen-hide-ribbon-and-panels = + Καθαρή οθόνη + Απόκρυψη κορδέλας και πλαισίων + .collapsed = Συμπτυγμένο + .color = Χρώμα __ocs_fmt_0__ + .compact = Συμπαγές + .copy-info = Αντιγραφή πληροφοριών + .cursor-coordinates-coords-click-to-cycle-stati = + Συντεταγμένες δείκτη ($COORDS) + Κάντε κλικ για εναλλαγή: στατικές / ζωντανές / πολικές + .customization-show-or-hide-status-bar-items = + Προσαρμογή + Εμφάνιση ή απόκρυψη στοιχείων της γραμμής κατάστασης + .custom = Προσαρμοσμένο… + .draw-order = Σειρά σχεδίασης + .dynamic-input = Δυναμική εισαγωγή + .dynamic-input-f12 = + Δυναμική εισαγωγή + F12 + .end-isolation = Τερματισμός απομόνωσης + .end-object-isolation = Τερματισμός απομόνωσης αντικειμένων + .find-next = Εύρεση επόμενου + .find = Εύρεση: + .hide-objects = Απόκρυψη αντικειμένων + .invert-selection = Αντιστροφή επιλογής + .isolate-objects = Απομόνωση αντικειμένων + .isolate-objects-click-for-isolate-hide-end = + Απομόνωση αντικειμένων + Κάντε κλικ για Απομόνωση / Απόκρυψη / Τερματισμό + .justification = Στοίχιση + .later = Αργότερα + .latest = Τελευταία + .layer-state-manager = Διαχείριση καταστάσεων επιπέδων… + .loading-references = Φόρτωση αναφορών… + .manage-menu-period-title-case = Διαχείριση... + .manage-picker-title-case = Διαχείριση… + .model-and-layout-list = Λίστα μοντέλου και διατάξεων + .model-paper-space = Χώρος μοντέλου/χαρτιού + .more = Περισσότερα… + .new-release-available = Διαθέσιμη νέα έκδοση + .no-objects = Κανένα αντικείμενο + .no-release-notes-provided = Δεν παρέχονται σημειώσεις έκδοσης. + .object-snap = Έλξη αντικειμένων + .object-snap-tracking = Ιχνηλάτηση έλξης αντικειμένων + .object-snap-tracking-f11 = + Ιχνηλάτηση έλξης αντικειμένων + F11 + .object-snap-list-click-to-choose-snap-types = + Λίστα έλξης αντικειμένων + Κάντε κλικ για να επιλέξετε τύπους έλξης + .object-snap-toggle-on-off-f3 = + Έλξη αντικειμένων: ενεργοποίηση/απενεργοποίηση + F3 + .object-type = Τύπος αντικειμένου: + .open-release-page = Άνοιγμα σελίδας έκδοσης + .opening-file = Άνοιγμα αρχείου + .operator = Τελεστής: + .ortho-mode = Λειτουργία ορθογωνικότητας + .orthogonal-mode-f8 = + Λειτουργία ορθογωνικότητας + F8 + .paper = ΧΑΡΤΙ + .paper-double-click-viewport-to-enter-mspace-mo = + ΧΑΡΤΙ: διπλό κλικ στη θύρα προβολής για μετάβαση σε MSPACE + ΜΟΝΤΕΛΟ: κλικ για μετάβαση στον χώρο μοντέλου + .platform = Πλατφόρμα + .polar-tracking = Πολική ιχνηλάτηση + .polar-tracking-angle-f10-left-click-on-off-rig = + Πολική ιχνηλάτηση (__ocs_arg_angle__) + F10 — αριστερό κλικ για ενεργοποίηση/απενεργοποίηση + Δεξί κλικ για εναλλαγή · ▾ για επιλογή γωνίας + .polar-angle-click-to-choose = + Πολική γωνία + Κάντε κλικ για επιλογή + .property = Ιδιότητα: + .quick-properties = Γρήγορες ιδιότητες + .quick-properties-floating-panel-on-selection = + Γρήγορες ιδιότητες + Αιωρούμενο πλαίσιο κατά την επιλογή + .quick-select-title-case = Γρήγορη επιλογή + .quick-select-menu-period-title-case = Γρήγορη επιλογή... + .reading-file = Ανάγνωση αρχείου… + .redo = Επανάληψη + .repeat-last = Επανάληψη __ocs_arg_last__ + .replace-all = Αντικατάσταση όλων + .replace-with = Αντικατάσταση με: + .searches-text-mtext-attribute-definitions-and = Αναζητά σε Text, MText, ορισμούς χαρακτηριστικών και τιμές χαρακτηριστικών μπλοκ. + .select-similar = Επιλογή παρόμοιων + .selection-cycling = Εναλλαγή επιλογής + .selection-cycling-repeat-click-to-step-through = + Εναλλαγή επιλογής + Επαναλαμβανόμενα κλικ για μετάβαση μεταξύ επικαλυπτόμενων αντικειμένων + .selection-filtering = Φιλτράρισμα επιλογής + .selection-filtering-limit-which-object-types-c = + Φιλτράρισμα επιλογής + Περιορισμός των τύπων αντικειμένων που μπορούν να επιλεγούν + .send-under-object = Αποστολή κάτω από το αντικείμενο + .send-to-back = Αποστολή πίσω + .show-annotation-objects = Εμφάνιση αντικειμένων επισημείωσης + .show-lineweight = Εμφάνιση πάχους γραμμής + .show-lineweight-lwdisplay = + Εμφάνιση πάχους γραμμής + LWDISPLAY + .show-transparency = Εμφάνιση διαφάνειας + .show-transparency-force-opaque-when-off = + Εμφάνιση διαφάνειας + Εξαναγκασμός αδιαφάνειας όταν είναι ανενεργή + .text-editor = Επεξεργασία κειμένου + .text-options = Επιλογές κειμένου + .text-style = Στυλ κειμένου + .this-block-has-no-attributes = Αυτό το μπλοκ δεν έχει χαρακτηριστικά. + .toggle-grid = Εναλλαγή πλέγματος + .toggle-grid-snap = Εναλλαγή έλξης πλέγματος + .value = Τιμή: + .viewport-annotation-scale-sync = Συγχρονισμός κλίμακας θύρας προβολής / επισημείωσης + .viewport-count = Πλήθος θυρών προβολής + .viewport-count-in-active-layout = Πλήθος θυρών προβολής στην ενεργή διάταξη + .what-s-new = Τι νέο υπάρχει + .width-value = Πλάτος: __ocs_arg_value__ + .working = Εκτέλεση… + +dimstyle = + .keep-text-between-extension-lines = Το κείμενο να παραμένει πάντα μεταξύ των γραμμών προέκτασης + .angular-dimensions = Γωνιακές διαστάσεις + .arc-length-symbol = Σύμβολο μήκους τόξου + .arrowheads = Άκρα βελών + .available-style = Διαθέσιμο στυλ + .baseline-spacing = Απόσταση γραμμών βάσης + .basic = Βασικό + .both-arrowheads = Και τα δύο άκρα βελών + .center-mark = Σημάδι κέντρου + .center-mark-size = Μέγεθος σημαδιού κέντρου + .center-marks = Σημάδια κέντρου + .centerlines = Κεντρικές γραμμές + .compare-with = Σύγκριση με + .current-style = Τρέχον στυλ + .deviation = Απόκλιση + .different-sections = Διαφορετικές ενότητες + .dimension-line-color = Χρώμα γραμμής διάστασης + .dimension-linetype = Τύπος γραμμής διάστασης + .dimension-lineweight = Πάχος γραμμής διάστασης + .display-alternate-units = Εμφάνιση εναλλακτικών μονάδων + .draw-dimension-line-between-extension-lines = Σχεδίαση γραμμής διάστασης μεταξύ των γραμμών προέκτασης + .extend-beyond-dimension-line = Προέκταση πέρα από τη γραμμή διάστασης + .extend-beyond-ticks = Προέκταση πέρα από τις υποδιαιρέσεις + .extension-line-color = Χρώμα γραμμής προέκτασης + .extension-lineweight = Πάχος γραμμής προέκτασης + .feet-and-inches = Πόδια και ίντσες + .fine-tuning = Λεπτομερής ρύθμιση + .first-arrowhead = Πρώτο άκρο βέλους + .first-extension-linetype = Τύπος πρώτης γραμμής προέκτασης + .fit-options = Επιλογές προσαρμογής + .fixed-length = Σταθερό μήκος + .fraction-format = Μορφή κλάσματος + .height-scale = Κλίμακα ύψους + .horizontal-placement = Οριζόντια τοποθέτηση + .keep-text-horizontal-inside = Διατήρηση οριζόντιου κειμένου όταν είναι εντός + .keep-text-horizontal-outside = Διατήρηση οριζόντιου κειμένου όταν είναι εκτός + .leader-arrowhead = Άκρο βέλους επεξήγησης + .limits = Όρια + .linear-dimensions = Γραμμικές διαστάσεις + .lower-value = Κάτω τιμή + .measurement-scale = Κλίμακα μέτρησης + .measurement-template = Πρότυπο μέτρησης + .method = Μέθοδος + .multiplier = Πολλαπλασιαστής + .no-differences = Καμία διαφορά + .not-applicable = Δεν ισχύει + .offset-from-measured-point = Μετατόπιση από το μετρημένο σημείο + .place-text-manually = Χειροκίνητη τοποθέτηση κειμένου κατά τη δημιουργία διαστάσεων + .radius-jog-angle = Γωνία τεθλασμένης ακτίνας (°) + .read-left-to-right = Ανάγνωση από αριστερά προς δεξιά + .referenced-read-only = Στυλ με αναφορά · Μόνο για ανάγνωση + .round-off = Στρογγυλοποίηση + .second-arrowhead = Δεύτερο άκρο βέλους + .second-extension-linetype = Τύπος δεύτερης γραμμής προέκτασης + .show-zero-feet-and-inches = Εμφάνιση μηδενικών ποδιών και μηδενικών ιντσών + .show-zero-feet-suppress-zero-inches = Εμφάνιση μηδενικών ποδιών· απόκρυψη μηδενικών ιντσών + .suppress-arrows-when-no-fit = Απόκρυψη βελών όταν δεν χωρούν + .suppress-first-dimension-line = Απόκρυψη πρώτης γραμμής διάστασης + .suppress-first-extension-line = Απόκρυψη πρώτης γραμμής προέκτασης + .suppress-second-dimension-line = Απόκρυψη δεύτερης γραμμής διάστασης + .suppress-second-extension-line = Απόκρυψη δεύτερης γραμμής προέκτασης + .suppress-zero-feet-and-inches = Απόκρυψη μηδενικών ποδιών και μηδενικών ιντσών + .suppress-zero-feet-show-zero-inches = Απόκρυψη μηδενικών ποδιών· εμφάνιση μηδενικών ιντσών + .symbols-and-arrows = Σύμβολα και βέλη + .symmetrical = Συμμετρική + .text-background = Φόντο κειμένου + .text-gap = Κενό κειμένου + .fixed-text-height-note = Το επιλεγμένο στυλ κειμένου καθορίζει σταθερό ύψος __ocs_arg_height__. + .tick-size = Μέγεθος υποδιαίρεσης + .tolerance-zero-suppression = Απόκρυψη μηδενικών ανοχής + .unit-format = Μορφή μονάδας + .upper-value = Άνω τιμή + .measurement-template-help = Χρησιμοποιήστε το <> ως τη μετρημένη τιμή· το κείμενο πριν και μετά από αυτό γίνεται πρόθεμα και κατάληξη. + .use-different-arrowheads = Χρήση διαφορετικών πρώτου και δεύτερου άκρου βέλους + .use-fixed-length-extension-lines = Χρήση γραμμών προέκτασης σταθερού μήκους + .used-in-drawing = Χρησιμοποιείται στο σχέδιο + .vertical-offset = Κατακόρυφη μετατόπιση + .vertical-placement = Κατακόρυφη τοποθέτηση + .vertical-position = Κατακόρυφη θέση + .when-space-is-limited = Όταν ο χώρος είναι περιορισμένος + .when-text-is-moved = Όταν το κείμενο μετακινείται + .zero-suppression = Απόκρυψη μηδενικών + .add-a-leader = Προσθήκη επεξήγησης + .automatic = Αυτόματο + .by-block = Ανά μπλοκ + .comma = Κόμμα + .degrees-minutes-seconds = Μοίρες, λεπτά, δεύτερα + .keep-dimension-line-with-text = Διατήρηση της γραμμής διάστασης με το κείμενο + .leading-and-trailing = Αρχικά και τελικά + .move-arrows-outside-first = Μετακίνηση των βελών εκτός πρώτα + .move-text-and-arrows-outside = Μετακίνηση κειμένου και βελών εκτός + .move-text-freely = Ελεύθερη μετακίνηση κειμένου + .move-text-outside-first = Μετακίνηση του κειμένου εκτός πρώτα + .period = Τελεία + .space = Κενό + .surveyors-units = Τοπογραφικές μονάδες + +style-manager = + .alignment-spacing = Απόσταση στοίχισης + .always-left-align = Πάντα αριστερή στοίχιση + .attachment-direction = Κατεύθυνση σύνδεσης + .background-fill-enabled = Γέμισμα φόντου ενεργό + .big-font = Μεγάλη γραμματοσειρά + .block-scale-x = Κλίμακα μπλοκ X + .block-scale-y = Κλίμακα μπλοκ Y + .block-scale-z = Κλίμακα μπλοκ Z + .borders = Περιγράμματα + .bottom-attachment = Σύνδεση κάτω + .break-gap-size = Μέγεθος κενού διακοπής + .caps-and-fill = Άκρα και γέμισμα + .content-type = Τύπος περιεχομένου + .data-row = Γραμμή δεδομένων + .data-type = Τύπος δεδομένων + .default-text = Προεπιλεγμένο κείμενο + .different = Διαφορετικό + .display-joints = Εμφάνιση αρμών + .drawing-height = Ύψος σχεδίου + .drawing-scale = Κλίμακα σχεδίου + .effects = Εφέ + .elements = Στοιχεία + .end-caps = Τελικά άκρα + .fill-and-joints = Γέμισμα και αρμοί + .fill-enabled = Γέμισμα ενεργό + .first-segment-angle = Γωνία πρώτου τμήματος + .fixed-height = Σταθερό ύψος + .flow-direction = Κατεύθυνση ροής + .font-file = Αρχείο γραμματοσειράς + .fonts = Γραμματοσειρές + .format-string = Συμβολοσειρά μορφής + .header = Κεφαλίδα + .header-row = Γραμμή κεφαλίδας + .horizontal-margin = Οριζόντιο περιθώριο + .inner-arcs = Εσωτερικά τόξα + .inside-horizontal = Εσωτερικά οριζόντια + .inside-vertical = Εσωτερικά κατακόρυφα + .leader-draw-order = Σειρά σχεδίασης επεξήγησης + .leader-note = Σημείωση επεξήγησης + .left-attachment = Σύνδεση αριστερά + .line-color = Χρώμα γραμμής + .line-type = Τύπος γραμμής + .line-weight = Πάχος γραμμής + .maximum-leader-points = Μέγιστα σημεία επεξήγησης + .multileader-draw-order = Σειρά σχεδίασης πολλαπλής επεξήγησης + .no-preview = Χωρίς προεπισκόπηση + .oblique-angle = Γωνία λοξότητας + .outer-arc = Εξωτερικό τόξο + .paper-height = Ύψος χαρτιού + .paper-text-height = Ύψος κειμένου στο χαρτί + .path-type = Τύπος διαδρομής + .right-attachment = Σύνδεση δεξιά + .scale-factor = Συντελεστής κλίμακας + .second-segment-angle = Γωνία δεύτερου τμήματος + .size-and-effects = Μέγεθος και εφέ + .start-caps = Αρχικά άκρα + .stroke-fonts = Γραμματοσειρές γραμμής + .suppress-header-row = Απόκρυψη γραμμής κεφαλίδας + .suppress-title-row = Απόκρυψη γραμμής τίτλου + .system-font = Γραμματοσειρά συστήματος + .system-fonts = Γραμματοσειρές συστήματος + .text-alignment = Στοίχιση κειμένου + .text-angle = Γωνία κειμένου + .title-row = Γραμμή τίτλου + .top-attachment = Σύνδεση πάνω + .unit-type = Τύπος μονάδας + .vertical-margin = Κατακόρυφο περιθώριο + .font-family-placeholder = οικογένεια γραμματοσειρών… + .bottom-to-top = Από κάτω προς τα πάνω + .arrowhead-first = Άκρο βέλους πρώτα + .content-first = Περιεχόμενο πρώτα + .leader-first = Επεξήγηση πρώτα + .straight = Ευθύγραμμη + .parallel-last-segment = Παράλληλα προς το τελευταίο τμήμα + .top-of-top-line = Πάνω μέρος της πάνω γραμμής + .middle-of-top-line = Μέση της πάνω γραμμής + .middle-of-text = Μέση του κειμένου + .middle-of-bottom-line = Μέση της κάτω γραμμής + .bottom-of-bottom-line = Κάτω μέρος της κάτω γραμμής + .bottom-line = Κάτω γραμμή + .underline-bottom-line = Υπογράμμιση κάτω γραμμής + .underline-top-line = Υπογράμμιση πάνω γραμμής + .underline-all-text = Υπογράμμιση όλου του κειμένου + .center-of-text = Κέντρο του κειμένου + .center-of-text-overline = Κέντρο του κειμένου με επιγράμμιση + .block-extents = Όρια μπλοκ + .base-point = Σημείο βάσης diff --git a/locales/en-US/opencadstudio.ftl b/locales/en-US/opencadstudio.ftl index 1f1207e22..d812808aa 100644 --- a/locales/en-US/opencadstudio.ftl +++ b/locales/en-US/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Close diff --git a/locales/es-ES/opencadstudio.ftl b/locales/es-ES/opencadstudio.ftl index 70f76226a..5ca5c20b7 100644 --- a/locales/es-ES/opencadstudio.ftl +++ b/locales/es-ES/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Cerrar diff --git a/locales/fi-FI/opencadstudio.ftl b/locales/fi-FI/opencadstudio.ftl index 0ad037e69..b4a1d3d85 100644 --- a/locales/fi-FI/opencadstudio.ftl +++ b/locales/fi-FI/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Sulje diff --git a/locales/fr-FR/opencadstudio.ftl b/locales/fr-FR/opencadstudio.ftl index f19223ccd..03e720fe6 100644 --- a/locales/fr-FR/opencadstudio.ftl +++ b/locales/fr-FR/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Fermer diff --git a/locales/hi-IN/opencadstudio.ftl b/locales/hi-IN/opencadstudio.ftl index dda9941b0..9db75625e 100644 --- a/locales/hi-IN/opencadstudio.ftl +++ b/locales/hi-IN/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = बंद करें diff --git a/locales/hu-HU/opencadstudio.ftl b/locales/hu-HU/opencadstudio.ftl index 4da10cd4c..0e2379ca5 100644 --- a/locales/hu-HU/opencadstudio.ftl +++ b/locales/hu-HU/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Bezárás diff --git a/locales/it-IT/opencadstudio.ftl b/locales/it-IT/opencadstudio.ftl index f4d5c3da8..851de9c31 100644 --- a/locales/it-IT/opencadstudio.ftl +++ b/locales/it-IT/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Chiudi diff --git a/locales/ja-JP/opencadstudio.ftl b/locales/ja-JP/opencadstudio.ftl index d1aefb13e..9845cef2f 100644 --- a/locales/ja-JP/opencadstudio.ftl +++ b/locales/ja-JP/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = 閉じる diff --git a/locales/ko-KR/opencadstudio.ftl b/locales/ko-KR/opencadstudio.ftl index 36097d154..56198eba5 100644 --- a/locales/ko-KR/opencadstudio.ftl +++ b/locales/ko-KR/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = 닫기 diff --git a/locales/nl-NL/opencadstudio.ftl b/locales/nl-NL/opencadstudio.ftl index 8344d0d9c..202b285ba 100644 --- a/locales/nl-NL/opencadstudio.ftl +++ b/locales/nl-NL/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Sluiten diff --git a/locales/pl-PL/opencadstudio.ftl b/locales/pl-PL/opencadstudio.ftl index b1374b8f7..240a75776 100644 --- a/locales/pl-PL/opencadstudio.ftl +++ b/locales/pl-PL/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Zamknij diff --git a/locales/pt-BR/opencadstudio.ftl b/locales/pt-BR/opencadstudio.ftl index 406731e2a..58b985bdc 100644 --- a/locales/pt-BR/opencadstudio.ftl +++ b/locales/pt-BR/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Fechar diff --git a/locales/ru-RU/opencadstudio.ftl b/locales/ru-RU/opencadstudio.ftl index 779113fad..84eebc875 100644 --- a/locales/ru-RU/opencadstudio.ftl +++ b/locales/ru-RU/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Замкнуть diff --git a/locales/tr-TR/opencadstudio.ftl b/locales/tr-TR/opencadstudio.ftl index 8ba49644c..11b14c6a0 100644 --- a/locales/tr-TR/opencadstudio.ftl +++ b/locales/tr-TR/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = Kapat diff --git a/locales/zh-CN/opencadstudio.ftl b/locales/zh-CN/opencadstudio.ftl index d93c789ba..a0f5ce848 100644 --- a/locales/zh-CN/opencadstudio.ftl +++ b/locales/zh-CN/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = 关闭 diff --git a/locales/zh-TW/opencadstudio.ftl b/locales/zh-TW/opencadstudio.ftl index 89f6ab211..248208283 100644 --- a/locales/zh-TW/opencadstudio.ftl +++ b/locales/zh-TW/opencadstudio.ftl @@ -20,6 +20,7 @@ language = .polish = Polski .chinese-traditional = 繁體中文 .bulgarian = Български + .greek = Ελληνικά action = .close = 關閉 diff --git a/src/i18n.rs b/src/i18n.rs index 3d76e9216..6748f8995 100644 --- a/src/i18n.rs +++ b/src/i18n.rs @@ -65,10 +65,12 @@ pub enum Language { PlPl, #[serde(rename = "zh-TW")] ZhTw, + #[serde(rename = "el-GR")] + ElGr, } impl Language { - pub const ALL: [Language; 21] = [ + pub const ALL: [Language; 22] = [ Language::System, Language::EnUs, Language::BgBg, @@ -78,6 +80,7 @@ impl Language { Language::FrFr, Language::FiFi, Language::DeDe, + Language::ElGr, Language::HuHu, Language::ItIt, Language::JaJp, @@ -115,6 +118,7 @@ impl Language { Language::HuHu => vec!["hu-HU".parse().expect("valid locale")], Language::PlPl => vec!["pl-PL".parse().expect("valid locale")], Language::ZhTw => vec!["zh-TW".parse().expect("valid locale")], + Language::ElGr => vec!["el-GR".parse().expect("valid locale")], } } @@ -141,6 +145,7 @@ impl Language { Language::HuHu => crate::tr!("language", "hungarian"), Language::PlPl => crate::tr!("language", "polish"), Language::ZhTw => crate::tr!("language", "chinese-traditional"), + Language::ElGr => crate::tr!("language", "greek"), } } } diff --git a/src/scene/view/render.rs b/src/scene/view/render.rs index b52238d7c..8feda949b 100644 --- a/src/scene/view/render.rs +++ b/src/scene/view/render.rs @@ -920,22 +920,40 @@ impl shader::Primitive for Primitive { let built = match cached { Some(entry) => entry, None => { + // Free the superseded content BEFORE allocating its + // replacement. Every geometry edit mints a new content + // id, so a miss here means this slot's current buffers + // are already dead weight — and on a large drawing one + // set is most of the card (measured: 1.3 GB of a 2 GB + // GT 1030). Holding the old set while the new one is + // allocated is what exhausts VRAM after the first edit. + // + // Dropping this slot's handles first is what makes the + // retain below able to see the old entry as garbage; a + // pane still drawing that content keeps its own clone, + // so shared geometry is never pulled out from under it. + inner.gpu_wires = std::sync::Arc::new(Vec::new()); + inner.gpu_block_wires = std::sync::Arc::new(Vec::new()); + // Entries no slot still holds: only the cache references + // them. An entry drawn by any pane keeps a strong count + // ≥ 2, so this never drops live geometry. + let held_before = pipeline.wire_buffer_cache.len(); + pipeline.wire_buffer_cache.retain(|_, (w, b, _)| { + std::sync::Arc::strong_count(w) > 1 + || std::sync::Arc::strong_count(b) > 1 + }); + if _perf { + crate::perf_record!( + "[perf] wire-cache evicted={} held={}", + held_before - pipeline.wire_buffer_cache.len(), + pipeline.wire_buffer_cache.len(), + ); + } let entry = inner.build_wire_buffers(device, queue, &vp_wires[..], &draw_depths); pipeline .wire_buffer_cache .insert(vp.wire_content_id, entry.clone()); - // Evict entries no slot still holds (only the cache - // references them). An entry drawn by any pane keeps a - // strong count ≥ 2, so this never drops live geometry. - if pipeline.wire_buffer_cache.len() > 16 { - pipeline - .wire_buffer_cache - .retain(|_, (w, b, _)| { - std::sync::Arc::strong_count(w) > 1 - || std::sync::Arc::strong_count(b) > 1 - }); - } entry } }; From 6747d7125ed6bc28099572ab529155af03ae06c2 Mon Sep 17 00:00:00 2001 From: Panos <25664832+mechpanos@users.noreply.github.com> Date: Fri, 4 Sep 2026 10:13:16 +0300 Subject: [PATCH 5/5] fix: no GPU allocation path maps, however small the buffer The previous commit converted the allocations that scale with the drawing and deliberately left the small fixed-size ones -- uniforms, the viewcube's static geometry, per-image and per-wipeout quads -- reasoning that an allocation failure was not a realistic outcome for a few dozen bytes. That reasoning was wrong, and the log says so precisely. On the reproducer the vertex buffers degraded exactly as intended: [gpu] uncaptured ... Out of Memory [gpu] uncaptured ... In Queue::write_buffer Buffer with 'block_wire.vertices' label is invalid ... errors #4 #8 #16 #32 #64 #128, session kept alive and then the process died here: thread 'main' panicked at wgpu_core.rs:2253: Error in Buffer::get_mapped_range: Validation Error Caused by: Buffer with 'block_wire.const' label is invalid 'block_wire.const' is a single uniform struct. Once the device is out of memory every allocation fails, including a 32-byte one, and create_buffer_init maps it and panics. Size was never the relevant property -- whether the path maps is. So every remaining allocation goes through gpu_upload too: block-wire const, the viewcube's seven buffers, the blit and clip-boundary buffers, image instances/params/vertices, mesh material params and surface and the empty index stub, the texture-hatch uniform, and all five wipeout buffers. `grep -r create_buffer_init src` now finds only a comment, and no mapped_at_creation:true remains outside gpu_upload's own docs. `queue` is threaded through the last holdouts: upload_wipeouts, upload_clip_boundary, MeshBatchStubs::new and create_material_bind_group_from_resources. Co-Authored-By: Claude Opus 5 --- src/scene/pipeline/hatch_gpu/texture.rs | 13 ++-- src/scene/pipeline/image_gpu.rs | 38 +++++------ src/scene/pipeline/mesh_gpu.rs | 45 +++++++------ src/scene/pipeline/mod.rs | 37 ++++++----- src/scene/pipeline/viewcube.rs | 85 ++++++++++++++----------- src/scene/pipeline/wipeout_gpu.rs | 71 +++++++++++++-------- src/scene/pipeline/wire_gpu.rs | 18 ++++-- src/scene/view/render.rs | 3 +- 8 files changed, 181 insertions(+), 129 deletions(-) diff --git a/src/scene/pipeline/hatch_gpu/texture.rs b/src/scene/pipeline/hatch_gpu/texture.rs index 7ad49c703..16846e7be 100644 --- a/src/scene/pipeline/hatch_gpu/texture.rs +++ b/src/scene/pipeline/hatch_gpu/texture.rs @@ -3,7 +3,6 @@ use crate::scene::model::hatch_model::{HatchModel, HatchPattern}; use iced::wgpu; -use iced::wgpu::util::DeviceExt; /// Width (in texels) of the RGBA32F data texture. Height grows to fit; a hatch /// with N total texels uses ceil(N / WIDTH) rows. @@ -377,11 +376,13 @@ impl TextureHatch { dash_off, tex_width: width, }; - let _uniform_buf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.texture.uniform"), - contents: bytemuck::bytes_of(&uniform_data), - usage: wgpu::BufferUsages::UNIFORM, - }); + let _uniform_buf = crate::scene::pipeline::gpu_upload::upload_buffer( + device, + queue, + "hatch.texture.uniform", + std::slice::from_ref(&uniform_data), + wgpu::BufferUsages::UNIFORM, + ); let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { label: Some("hatch.texture.bind_group1"), diff --git a/src/scene/pipeline/image_gpu.rs b/src/scene/pipeline/image_gpu.rs index 5a239e4ca..284a207f1 100644 --- a/src/scene/pipeline/image_gpu.rs +++ b/src/scene/pipeline/image_gpu.rs @@ -7,7 +7,6 @@ use crate::scene::model::image_model::ImageModel; use iced::wgpu; -use iced::wgpu::util::DeviceExt; use std::sync::Arc; // ── Vertex ──────────────────────────────────────────────────────────────── @@ -179,24 +178,24 @@ impl ImageGpu { } }) .collect(); - let instance_buffer = Arc::new(device.create_buffer_init( - &wgpu::util::BufferInitDescriptor { - label: Some("image.instances"), - contents: bytemuck::cast_slice(&instances), - usage: wgpu::BufferUsages::VERTEX, - }, + let instance_buffer = Arc::new(super::gpu_upload::upload_buffer( + device, + queue, + "image.instances", + &instances, + wgpu::BufferUsages::VERTEX, )); let params = ImageParams { opacity: model.opacity.clamp(0.0, 1.0), draw_depth: 0.0, _pad: [0.0; 2], }; - let params_buf = Arc::new(device.create_buffer_init( - &wgpu::util::BufferInitDescriptor { - label: Some("image.params"), - contents: bytemuck::bytes_of(¶ms), - usage: wgpu::BufferUsages::UNIFORM, - }, + let params_buf = Arc::new(super::gpu_upload::upload_buffer( + device, + queue, + "image.params", + std::slice::from_ref(¶ms), + wgpu::BufferUsages::UNIFORM, )); let mut output = Vec::with_capacity(x_tiles.len() * y_tiles.len()); @@ -264,12 +263,13 @@ impl ImageGpu { }, ], }); - let vertex_buffer = - device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("image.vbuf"), - contents: bytemuck::cast_slice(&verts), - usage: wgpu::BufferUsages::VERTEX, - }); + let vertex_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "image.vbuf", + &verts, + wgpu::BufferUsages::VERTEX, + ); output.push(Self { vertex_buffer, instance_buffer: Arc::clone(&instance_buffer), diff --git a/src/scene/pipeline/mesh_gpu.rs b/src/scene/pipeline/mesh_gpu.rs index 36bfa856c..3a4f84250 100644 --- a/src/scene/pipeline/mesh_gpu.rs +++ b/src/scene/pipeline/mesh_gpu.rs @@ -2,7 +2,6 @@ use crate::scene::model::mesh_model::{MeshLodSet, MeshModel}; use iced::wgpu; -use iced::wgpu::util::DeviceExt; // ── Vertex layout ───────────────────────────────────────────────────────── @@ -377,13 +376,15 @@ struct MeshBatchStubs { } impl MeshBatchStubs { - fn new(device: &wgpu::Device) -> Self { + fn new(device: &wgpu::Device, queue: &wgpu::Queue) -> Self { Self { - index: device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("mesh.batch.empty_ibuf"), - contents: bytemuck::cast_slice(&[0u32]), - usage: wgpu::BufferUsages::INDEX, - }), + index: super::gpu_upload::upload_buffer( + device, + queue, + "mesh.batch.empty_ibuf", + &[0u32], + wgpu::BufferUsages::INDEX, + ), vertex: device.create_buffer(&wgpu::BufferDescriptor { label: Some("mesh.batch.empty_vbuf"), size: std::mem::size_of::() as u64, @@ -784,11 +785,13 @@ pub fn create_material_resources( [material.color_bleed_scale, 0.0, 0.0, 0.0] }), }; - let params_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("mesh.material.params"), - contents: bytemuck::bytes_of(¶ms), - usage: wgpu::BufferUsages::UNIFORM, - }); + let params_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "mesh.material.params", + std::slice::from_ref(¶ms), + wgpu::BufferUsages::UNIFORM, + ); MeshMaterialResources { diffuse_view, specular_view, @@ -810,6 +813,7 @@ pub fn create_material_resources( pub fn create_material_bind_group_from_resources( device: &wgpu::Device, + queue: &wgpu::Queue, layout: &wgpu::BindGroupLayout, resources: &MeshMaterialResources, material: Option<&crate::scene::model::material_model::MeshMaterial>, @@ -825,11 +829,13 @@ pub fn create_material_bind_group_from_resources( advanced, flags, }; - let surface_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("mesh.material.surface"), - contents: bytemuck::bytes_of(&surface), - usage: wgpu::BufferUsages::UNIFORM, - }); + let surface_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "mesh.material.surface", + std::slice::from_ref(&surface), + wgpu::BufferUsages::UNIFORM, + ); device.create_bind_group(&wgpu::BindGroupDescriptor { label: Some("mesh.material.bind_group"), layout, @@ -912,6 +918,7 @@ pub fn create_material_bind_group( let color = material.map_or([0.8, 0.8, 0.8, 1.0], |material| material.diffuse); create_material_bind_group_from_resources( device, + queue, layout, &resources, material, @@ -936,6 +943,7 @@ pub fn upload_chunk_material_bind_groups( let resources = create_material_resources(device, queue, Some(material)); chunk.material_bind_group = Some(create_material_bind_group_from_resources( device, + queue, layout, &resources, chunk.material.as_ref(), @@ -950,6 +958,7 @@ pub fn upload_chunk_material_bind_groups( }; chunk.material_bind_group = Some(create_material_bind_group_from_resources( device, + queue, layout, resources, chunk.material.as_ref(), @@ -1586,7 +1595,7 @@ pub fn build_mesh_batch_filtered( // vertices). Bound chunks by the largest buffer produced for wire meshes. let max_tris = (budget / (6 * std::mem::size_of::())).max(1); - let stubs = MeshBatchStubs::new(device); + let stubs = MeshBatchStubs::new(device, queue); let mut chunks = Vec::new(); let mut verts: Vec = Vec::new(); diff --git a/src/scene/pipeline/mod.rs b/src/scene/pipeline/mod.rs index a27331615..b3ade3daf 100644 --- a/src/scene/pipeline/mod.rs +++ b/src/scene/pipeline/mod.rs @@ -16,7 +16,6 @@ pub mod wire_arena; pub mod wire_gpu; use iced::wgpu; -use iced::wgpu::util::DeviceExt; use iced::{Rectangle, Size}; pub use face3d_gpu::Face3DGpu; @@ -2122,11 +2121,13 @@ impl Pipeline { // UV crop uniform: [uv_offset_x, uv_offset_y, uv_scale_x, uv_scale_y] // padded to 16 bytes (std140 vec2 alignment). Defaulted to the // identity crop (offset 0, scale 1) for the common on-canvas case. - let blit_uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("blit.uniform_buffer"), - contents: bytemuck::cast_slice(&[0.0f32, 0.0, 1.0, 1.0]), - usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, - }); + let blit_uniform_buffer = gpu_upload::upload_buffer( + device, + queue, + "blit.uniform_buffer", + &[0.0f32, 0.0, 1.0, 1.0], + wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, + ); let blit_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { label: Some("blit.pipeline_layout"), @@ -2969,8 +2970,7 @@ impl Pipeline { /// so the mask pipeline stamps it straight into the stencil with `Invert` /// (even-odd fill → interior marked, any convexity). Empty input clears the /// boundary so the viewport renders unclipped (its render rectangle clips). - pub fn upload_clip_boundary(&mut self, device: &wgpu::Device, boundary_ndc: &[[f32; 2]]) { - use wgpu::util::DeviceExt; + pub fn upload_clip_boundary(&mut self, device: &wgpu::Device, queue: &wgpu::Queue, boundary_ndc: &[[f32; 2]]) { if boundary_ndc.len() < 3 { self.clip_boundary = None; return; @@ -2986,11 +2986,13 @@ impl Pipeline { self.clip_boundary = None; return; } - let vbuf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("clip_boundary.vbuf"), - contents: bytemuck::cast_slice(&verts), - usage: wgpu::BufferUsages::VERTEX, - }); + let vbuf = gpu_upload::upload_buffer( + device, + queue, + "clip_boundary.vbuf", + &verts, + wgpu::BufferUsages::VERTEX, + ); self.clip_boundary = Some((vbuf, (verts.len() / 2) as u32)); } @@ -3378,13 +3380,18 @@ impl Pipeline { self.hatch_gpu.upload_preview(device, queue, hatches); } - pub fn upload_wipeouts(&mut self, device: &wgpu::Device, wipeouts: &[HatchModel]) { + pub fn upload_wipeouts( + &mut self, + device: &wgpu::Device, + queue: &wgpu::Queue, + wipeouts: &[HatchModel], + ) { let renderable: Vec = wipeouts .iter() .filter(|h| h.boundary.len() >= 3) .cloned() .collect(); - self.gpu_wipeouts = WipeoutGpu::from_models(device, &renderable, &self.wipeout_bgl1); + self.gpu_wipeouts = WipeoutGpu::from_models(device, queue, &renderable, &self.wipeout_bgl1); } pub fn upload_images( diff --git a/src/scene/pipeline/viewcube.rs b/src/scene/pipeline/viewcube.rs index e6cbbb64c..782f10a1e 100644 --- a/src/scene/pipeline/viewcube.rs +++ b/src/scene/pipeline/viewcube.rs @@ -1078,43 +1078,54 @@ pub struct ViewCubePipeline { impl ViewCubePipeline { pub fn new(device: &wgpu::Device, queue: &wgpu::Queue, format: wgpu::TextureFormat) -> Self { - use wgpu::util::DeviceExt; let (verts, idxs) = build_geometry(); let line_verts = surface_edge_lines(&verts, &idxs); let (ring_verts, ring_idxs) = build_ring_geometry(); let ring_line_verts = surface_edge_lines(&ring_verts, &ring_idxs); let cube_px = VIEWCUBE_PX; - let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("vc.vb"), - contents: bytemuck::cast_slice(&verts), - usage: wgpu::BufferUsages::VERTEX, - }); - let index_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("vc.ib"), - contents: bytemuck::cast_slice(&idxs), - usage: wgpu::BufferUsages::INDEX, - }); - let line_vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("vc.line_vb"), - contents: bytemuck::cast_slice(&line_verts), - usage: wgpu::BufferUsages::VERTEX, - }); - let ring_vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("vc.ring_vb"), - contents: bytemuck::cast_slice(&ring_verts), - usage: wgpu::BufferUsages::VERTEX, - }); - let ring_index_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("vc.ring_ib"), - contents: bytemuck::cast_slice(&ring_idxs), - usage: wgpu::BufferUsages::INDEX, - }); + let vertex_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "vc.vb", + &verts, + wgpu::BufferUsages::VERTEX, + ); + let index_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "vc.ib", + &idxs, + wgpu::BufferUsages::INDEX, + ); + let line_vertex_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "vc.line_vb", + &line_verts, + wgpu::BufferUsages::VERTEX, + ); + let ring_vertex_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "vc.ring_vb", + &ring_verts, + wgpu::BufferUsages::VERTEX, + ); + let ring_index_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "vc.ring_ib", + &ring_idxs, + wgpu::BufferUsages::INDEX, + ); let ring_line_vertex_buffer = - device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("vc.ring_line_vb"), - contents: bytemuck::cast_slice(&ring_line_verts), - usage: wgpu::BufferUsages::VERTEX, - }); + super::gpu_upload::upload_buffer( + device, + queue, + "vc.ring_line_vb", + &ring_line_verts, + wgpu::BufferUsages::VERTEX, + ); let uniform_buffer = device.create_buffer(&wgpu::BufferDescriptor { label: Some("vc.ub"), size: std::mem::size_of::() as u64, @@ -1291,11 +1302,13 @@ impl ViewCubePipeline { ], }); let composite_uniform_buffer = - device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("vc.composite_uniform"), - contents: bytemuck::cast_slice(&[1.0f32, 1.0, 0.0, 0.0]), - usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, - }); + super::gpu_upload::upload_buffer( + device, + queue, + "vc.composite_uniform", + &[1.0f32, 1.0, 0.0, 0.0], + wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, + ); let composite_sampler = device.create_sampler(&wgpu::SamplerDescriptor { label: Some("vc.composite_sampler"), mag_filter: wgpu::FilterMode::Nearest, diff --git a/src/scene/pipeline/wipeout_gpu.rs b/src/scene/pipeline/wipeout_gpu.rs index 02b15f221..73105d784 100644 --- a/src/scene/pipeline/wipeout_gpu.rs +++ b/src/scene/pipeline/wipeout_gpu.rs @@ -17,7 +17,6 @@ use crate::scene::model::hatch_model::{ FillPlane, HatchModel, HatchPattern, PatFamily, MAX_HATCH_BOUNDARY_VERTS, }; use iced::wgpu; -use iced::wgpu::util::DeviceExt; // ── Constants ────────────────────────────────────────────────────────────── @@ -157,6 +156,7 @@ pub struct WipeoutGpu { impl WipeoutGpu { pub fn from_models( device: &wgpu::Device, + queue: &wgpu::Queue, models: &[HatchModel], bgl1: &wgpu::BindGroupLayout, ) -> Vec { @@ -176,11 +176,16 @@ impl WipeoutGpu { } groups .into_iter() - .map(|group| Self::new(device, &group, bgl1)) + .map(|group| Self::new(device, queue, &group, bgl1)) .collect() } - fn new(device: &wgpu::Device, models: &[&HatchModel], bgl1: &wgpu::BindGroupLayout) -> Self { + fn new( + device: &wgpu::Device, + queue: &wgpu::Queue, + models: &[&HatchModel], + bgl1: &wgpu::BindGroupLayout, + ) -> Self { let model = models[0]; // ── Decode pattern mode ────────────────────────────────────────── let (mode, color2, grad_cos, grad_sin) = match &model.pattern { @@ -264,11 +269,13 @@ impl WipeoutGpu { _pad: 0.0, }, ]; - let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.vbuf"), - contents: bytemuck::cast_slice(&quad), - usage: wgpu::BufferUsages::VERTEX, - }); + let vertex_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "hatch.vbuf", + &quad, + wgpu::BufferUsages::VERTEX, + ); // ── Gradient: projection range (in snapped-local space) ────────── let (grad_min, grad_range) = if mode == 2 { @@ -354,21 +361,27 @@ impl WipeoutGpu { let family_batch = build_family_batch(&model.pattern); // ── GPU buffers ─────────────────────────────────────────────────── - let _uniform_buf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.uniforms"), - contents: bytemuck::bytes_of(&uniform_data), - usage: wgpu::BufferUsages::UNIFORM, - }); - let _boundary_buf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.boundary"), - contents: bytemuck::bytes_of(&boundary_data), - usage: wgpu::BufferUsages::UNIFORM, - }); - let _family_buf = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("hatch.families"), - contents: bytemuck::bytes_of(&family_batch), - usage: wgpu::BufferUsages::UNIFORM, - }); + let _uniform_buf = super::gpu_upload::upload_buffer( + device, + queue, + "hatch.uniforms", + std::slice::from_ref(&uniform_data), + wgpu::BufferUsages::UNIFORM, + ); + let _boundary_buf = super::gpu_upload::upload_buffer( + device, + queue, + "hatch.boundary", + std::slice::from_ref(&boundary_data), + wgpu::BufferUsages::UNIFORM, + ); + let _family_buf = super::gpu_upload::upload_buffer( + device, + queue, + "hatch.families", + std::slice::from_ref(&family_batch), + wgpu::BufferUsages::UNIFORM, + ); let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { label: Some("hatch.bind_group1"), @@ -419,11 +432,13 @@ impl WipeoutGpu { } }) .collect(); - let instance_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("wipeout.instances"), - contents: bytemuck::cast_slice(&placements), - usage: wgpu::BufferUsages::VERTEX, - }); + let instance_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "wipeout.instances", + &placements, + wgpu::BufferUsages::VERTEX, + ); let mut world_bounds = [ f32::INFINITY, f32::INFINITY, diff --git a/src/scene/pipeline/wire_gpu.rs b/src/scene/pipeline/wire_gpu.rs index a23eb6faf..215854b77 100644 --- a/src/scene/pipeline/wire_gpu.rs +++ b/src/scene/pipeline/wire_gpu.rs @@ -676,7 +676,6 @@ impl BlockWireGpu { color_override: Option<[f32; 4]>, const_bgl: &wgpu::BindGroupLayout, ) -> Vec { - use wgpu::util::DeviceExt; let mut slots: rustc_hash::FxHashMap<(u64, bool), usize> = rustc_hash::FxHashMap::default(); @@ -751,11 +750,18 @@ impl BlockWireGpu { ) }) .collect(); - let const_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("block_wire.const"), - contents: bytemuck::bytes_of(&constant), - usage: wgpu::BufferUsages::UNIFORM, - }); + // Tiny, but size is irrelevant here: once the device is out of + // memory every allocation fails, including a one-struct uniform, + // and create_buffer_init would map the invalid buffer and panic. + // This is the allocation that killed the process after the vertex + // buffers had already degraded gracefully. + let const_buffer = super::gpu_upload::upload_buffer( + device, + queue, + "block_wire.const", + std::slice::from_ref(&constant), + wgpu::BufferUsages::UNIFORM, + ); let const_bind_group = std::sync::Arc::new(device.create_bind_group( &wgpu::BindGroupDescriptor { label: Some("block_wire.const.bg"), diff --git a/src/scene/view/render.rs b/src/scene/view/render.rs index 8feda949b..3326543f4 100644 --- a/src/scene/view/render.rs +++ b/src/scene/view/render.rs @@ -546,6 +546,7 @@ impl shader::Primitive for Primitive { if wipeout_changed || fill_changed { inner.upload_wipeouts( device, + queue, if fill_mode { &vp.wipeout_hatches[..] } else { @@ -1117,7 +1118,7 @@ impl shader::Primitive for Primitive { ); inner.silhouette_key = silhouette_key; } - inner.upload_clip_boundary(device, &vp.clip_boundary_ndc); + inner.upload_clip_boundary(device, queue, &vp.clip_boundary_ndc); let hatch_lod_key = ( Arc::as_ptr(&vp.hatches) as usize, vp.camera_generation,