diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..71b98e54d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +# Line endings: always LF, never CRLF, on every platform and clone. +* text=auto eol=lf + +# Binary files must never be line-ending normalized. +*.png binary +*.ttf binary diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index b2402643b..83c9ae7d6 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -50,10 +50,8 @@ jobs: with: tool: wasm-bindgen@${{ steps.wasm-bindgen-version.outputs.version }} - # `--public-url` matches the project page sub-path: - # https://.github.io/OpenCADStudio/. - name: Build web bundle - run: trunk build --release --public-url /OpenCADStudio/ + run: trunk build --release --public-url / # GitHub Pages runs Jekyll, which ignores files; opt out so the # wasm-bindgen output is served verbatim. @@ -177,10 +175,8 @@ jobs: print(f"supporters: {len(supporters)}") PY - # Publish an OpenCADStudio-branded star-history chart for the README. - # The timestamp media type returns when each current stargazer starred - # the repository; the script follows every API page and emits both themes. - - name: Generate star history charts + # Publish one themed growth chart for stars and release downloads. + - name: Generate project growth charts env: GITHUB_TOKEN: ${{ secrets.OCS_GITHUB_TOKEN }} run: python3 scripts/generate-star-history.py --output-dir dist diff --git a/Cargo.lock b/Cargo.lock index 736d70c4f..af9d6d761 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -85,7 +85,7 @@ dependencies = [ [[package]] name = "acadrust" version = "0.4.1" -source = "git+https://github.com/HakanSeven12/cadcodec.git?rev=4736846#473684644e8bbacd1310a7eccdb4b3180d7013db" +source = "git+https://github.com/HakanSeven12/cadcodec.git?rev=c28b2cd#c28b2cd25851ca0ee555b7cfac673927456ae04e" dependencies = [ "ahash 0.8.12", "anyhow", @@ -891,7 +891,7 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cadkernel" version = "0.1.0" -source = "git+https://github.com/HakanSeven12/cadkernel.git?rev=1b84d6c#1b84d6c926d8053690a9975ccad6814800790008" +source = "git+https://github.com/HakanSeven12/cadkernel.git?rev=617bdec#617bdecabe97c0140ffdecef3d2af2e2b5e612b1" dependencies = [ "acadrust", "cavalier_contours", @@ -925,6 +925,18 @@ dependencies = [ "wayland-client", ] +[[package]] +name = "cargo-lock" +version = "11.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50524592e6bfbb1bf6f94e8184a786f637faeaf1cf37bbe65502b9a2c5c48939" +dependencies = [ + "semver", + "serde", + "toml 1.1.3+spec-1.1.0", + "url", +] + [[package]] name = "cavalier_contours" version = "0.7.0" @@ -1564,6 +1576,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "erased-discriminant" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1a6df962265a53221f29081896c412ef325c17fa7d638cd9578febe53d3c82c" +dependencies = [ + "typeid", +] + [[package]] name = "errno" version = "0.3.14" @@ -1835,6 +1856,15 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + [[package]] name = "funty" version = "2.0.0" @@ -2510,6 +2540,109 @@ dependencies = [ "winit", ] +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "image" version = "0.25.10" @@ -2928,6 +3061,12 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + [[package]] name = "litrs" version = "1.0.0" @@ -3760,16 +3899,19 @@ dependencies = [ [[package]] name = "ocs_plugin_api" -version = "0.1.0" +version = "0.2.0" dependencies = [ "acadrust", "bincode", + "cargo-lock", "getrandom 0.2.17", "interprocess", "libloading", "memmap2", "rkyv", "serde", + "serde-reflection", + "serde_json", "thiserror 1.0.69", ] @@ -4086,6 +4228,15 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -4938,6 +5089,10 @@ name = "semver" version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] [[package]] name = "serde" @@ -4949,6 +5104,20 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-reflection" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af0fdf9c543af37502581e3d6cf4e6cd1628d6616d6a1f8f4ca88aae3a405f5c" +dependencies = [ + "erased-discriminant", + "once_cell", + "serde", + "serde_json", + "thiserror 1.0.69", + "typeid", +] + [[package]] name = "serde_core" version = "1.0.228" @@ -5359,6 +5528,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "sys-locale" version = "0.3.2" @@ -5665,6 +5845,12 @@ dependencies = [ "rustc-hash 2.1.3", ] +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + [[package]] name = "typenum" version = "1.20.1" @@ -5818,6 +6004,18 @@ dependencies = [ "log", ] +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + [[package]] name = "usvg" version = "0.45.1" @@ -5846,6 +6044,12 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8c0a043c9540bae7c578c88f91dda8bd82e59ae27c21baca69c8b191aaf5a6e" +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -6759,6 +6963,12 @@ dependencies = [ "wayland-protocols-wlr", ] +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + [[package]] name = "wyz" version = "0.5.1" @@ -6849,6 +7059,29 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + [[package]] name = "zbus" version = "5.17.0" @@ -6941,6 +7174,21 @@ name = "zerofrom" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] [[package]] name = "zeroize" @@ -6948,6 +7196,17 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + [[package]] name = "zerovec" version = "0.11.6" @@ -6955,7 +7214,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "serde", + "yoke", "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47402523226a02bfe5230160dc3ccc089aa6f6f19e7fcbb4e6f824bbb1b4aa62" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 70e3a17ad..d5d79e167 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,8 +31,8 @@ glam = { version = "0.33", features = ["bytemuck"] } rfd = "0.17" clap = { version = "4", features = ["derive"] } env_logger = "0.11" -acadrust = { git = "https://github.com/HakanSeven12/cadcodec.git", rev = "4736846", features = ["serde"] } -cadkernel = { git = "https://github.com/HakanSeven12/cadkernel.git", rev = "1b84d6c", features = ["acis", "offset"] } +acadrust = { git = "https://github.com/HakanSeven12/cadcodec.git", rev = "c28b2cd", features = ["serde"] } +cadkernel = { git = "https://github.com/HakanSeven12/cadkernel.git", rev = "617bdec", features = ["acis", "offset"] } acadifc = { git = "https://github.com/OpenAEC-Foundation/acadifc.git", rev = "47b5603", optional = true } dwg-thumbnailer = { path = "crates/dwg-thumbnailer" } flate2 = "1" @@ -64,7 +64,6 @@ ashpd = { version = "0.13.13", default-features = false, features = ["async-io", [patch.crates-io] iced_core = { git = "https://github.com/iced-rs/iced.git", rev = "23604ff22ab0aad9e00b9327cb7b8546ed84db39" } iced_widget = { git = "https://github.com/iced-rs/iced.git", rev = "23604ff22ab0aad9e00b9327cb7b8546ed84db39" } -acadrust = { git = "https://github.com/HakanSeven12/cadcodec.git", rev = "4736846" } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] ocs_plugin_api = { path = "crates/ocs_plugin_api", features = ["host"] } diff --git a/README.ar.md b/README.ar.md new file mode 100644 index 000000000..965423c8f --- /dev/null +++ b/README.ar.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

شعار Open CAD Studio

+

Open CAD Studio

+

تطبيق مفتوح المصدر للرسم ثنائي الأبعاد والنمذجة ثلاثية الأبعاد على سطح المكتب والويب، مبني بلغة Rust.

+ +

+ أحدث إصدار + تنزيلات الإصدارات + نجوم GitHub + ترخيص GPL-3.0 +

+ +

+ تشغيل تطبيق الويب · + تنزيل تطبيق سطح المكتب · + الانضمام إلى النقاش +

+ +

مساحة عمل Open CAD Studio

+ +## نظرة عامة + +Open CAD Studio تطبيق متعدد المنصات للرسم التقني والعمل على التخطيطات ونمذجة المجسمات. يقرأ رسومات DWG وDXF ويكتبها مباشرة، ويشترك إصدار سطح المكتب وإصدار المتصفح في نواة التحرير نفسها. + +المشروع قيد التطوير النشط. احتفظ بنسخ احتياطية من رسومات الإنتاج المهمة، وأبلغ عن المشكلات القابلة لإعادة الإنتاج عبر [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## أبرز الميزات + +- **سير عمل أصلي للرسومات** — فتح ملفات DWG وDXF وتحريرها واستعادتها وحفظها من دون خدمة تحويل. +- **رسم ثنائي الأبعاد دقيق** — خطوط وخطوط متعددة ومنحنيات ومنحنيات spline وتهشير والتقاط الكائنات والتتبع والطبقات والكتل والمراجع الخارجية. +- **أدوات التوثيق** — نصوص وأبعاد وخطوط إشارة وتفاوتات وجداول ومساحة النموذج ومساحة الورق وإطارات العرض وأنماط الطباعة. +- **نمذجة ثلاثية الأبعاد مدعومة بنواة هندسية** — مجسمات أولية وبثق ودوران ومسح وloft وعمليات منطقية وتجزئة كيانات ACIS. +- **تصيير عبر GPU** — إطارات عرض ثنائية وثلاثية الأبعاد مسرّعة بواسطة `wgpu` مع كاميرات متعامدة ومنظورية. +- **سير عمل قابل للتوسعة** — إضافات أصلية ونصوص أوامر وتحويل من دون واجهة وواجهة JSON للأتمتة تعتمد على الأسطر. + +

نموذج ثلاثي الأبعاد في Open CAD Studio

+ +## سير عمل الملفات + +| التنسيق أو سير العمل | الدعم | +| --- | --- | +| DWG | قراءة وكتابة؛ اختيار إصدارات الحفظ من R14 إلى 2018 | +| DXF | قراءة وكتابة؛ اختيار إصدارات الحفظ من R14 إلى 2018 | +| BAK / SV$ | فتح النسخ الاحتياطية وملفات الحفظ التلقائي للرسومات | +| OBJ | استيراد الشبكات متعددة الأضلاع | +| LandXML | استيراد نقاط المسح `CgPoint` | +| STL | تصدير بيانات الشبكات ثلاثية الأبعاد | +| STEP AP203 | تصدير بيانات الشبكات ثلاثية الأبعاد | +| PDF | طباعة التخطيطات والعناصر الهندسية المحددة في إصدار سطح المكتب | +| CSV | استخراج بيانات خصائص الكيانات | +| CTB / STB | تحميل جداول أنماط الطباعة وتحريرها | + +## سطح المكتب أم الويب + +استخدم [تطبيق الويب](https://www.opencadstudio.com) للوصول الفوري من دون تثبيت. تُختار الرسومات من خلال المتصفح وتُحفظ كتنزيلات محلية. + +استخدم تطبيق سطح المكتب لارتباطات الملفات الأصلية والصور المصغرة في مدير الملفات وطباعة النظام وإخراج PDF والإضافات الخارجية ونصوص الأوامر والأتمتة من دون واجهة. تتوفر إصدارات لنظام Windows وLinux وmacOS بمعالجات Apple Silicon. + +## التثبيت + +نزّل جميع الحزم الحالية من [أحدث إصدار](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +اختر إحدى حزم x86-64 الموقّعة: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — برنامج التثبيت الموصى به، ويتضمن اختصارات قائمة ابدأ وارتباطات ملفات DWG/DXF وصوراً مصغرة للرسومات. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — تطبيق مستقل لا يحتاج إلى تثبيت. + +### Linux + +نزّل AppImage لمعمارية x86-64 واجعله قابلاً للتنفيذ ثم شغّله: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +تدعم حزمة macOS المنشورة أجهزة Apple Silicon: + +1. نزّل `OpenCADStudio-*-macos-arm64.dmg`. +2. افتح الصورة واسحب `OpenCADStudio.app` إلى **Applications**. +3. إذا منع Gatekeeper التشغيل الأول، فاسمح بالتطبيق من **System Settings → Privacy & Security**. + +التطبيق موقّع بتوقيع ad hoc، لكنه غير موثّق حالياً لدى Apple. + +## اللغات + +يمكن لـ Open CAD Studio اتباع لغة النظام أو استخدام إحدى لغات الواجهة التسع عشرة التالية: + +> العربية · البرتغالية البرازيلية · التشيكية · الهولندية · الإنجليزية · الفنلندية · الفرنسية · الألمانية · الهندية · المجرية · الإيطالية · اليابانية · الكورية · البولندية · الروسية · الصينية المبسطة · الإسبانية · الصينية التقليدية · التركية + +غيّر اللغة من إعدادات التطبيق. عند اختيار **النظام**، يستخدم إصدار المتصفح أيضاً الإعدادات المحلية المفضلة للمتصفح. + +## البناء من المصدر + +### سطح المكتب + +المتطلبات: + +- Git +- سلسلة أدوات Rust المستقرة الحالية +- مكتبات تطوير الرسوم والخطوط الخاصة بالمنصة + +ثبّت الاعتماديات الأصلية على Ubuntu أو Debian: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +ثم ابنِ التطبيق: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +يُكتب الملف التنفيذي الناتج في `target/release/OpenCADStudio` (`OpenCADStudio.exe` على Windows). + +### الويب + +ثبّت هدف WebAssembly وأدوات البناء مرة واحدة: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +شغّل خادم التطوير: + +```bash +trunk serve +``` + +## الأتمتة + +يدعم الملف التنفيذي لسطح المكتب التحويل لمرة واحدة وخادماً دائماً من دون واجهة: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +يتبادل الخادم كائن JSON واحداً في كل سطر عبر الإدخال/الإخراج القياسي أو مقبس TCP محلي. راجع [دليل الأتمتة](docs/automation/README.md) و[عميل Python](docs/automation/ocs.py) المرفق. + +## الإضافات + +تعمل إضافات سطح المكتب في عمليات منفصلة وتتواصل مع المضيف عبر واجهة إضافات ذات إصدارات. لا يحمّل إصدار المتصفح الإضافات الأصلية. + +- [بنية الإضافات](docs/plugin-architecture.md) +- [قالب الإضافة](docs/plugin-template/README.md) +- [سجل الإضافات](plugins/README.md) + +## وثائق المشروع + +- [واجهة الأتمتة](docs/automation/README.md) +- [بنية الإضافات](docs/plugin-architecture.md) +- [مسار التجزئة](docs/tessellation.md) +- [سياسة الأمان](SECURITY.md) + +## المساهمة + +نرحب بتقارير الأخطاء وطلبات السحب المركزة والترجمات وتحسينات الوثائق والمساهمات في الإضافات. + +- ابحث في [المشكلات](https://github.com/HakanSeven12/OpenCADStudio/issues) الحالية قبل فتح تقرير جديد. +- استخدم [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) للأسئلة والأفكار. +- أبلغ عن الثغرات بشكل خاص وفق [سياسة الأمان](SECURITY.md). + +## نمو المشروع + + + + + + نجوم Open CAD Studio وتنزيلات الإصدارات + + + +## دعم المشروع + +إذا ساعدك Open CAD Studio في عملك، فادعم استمرار التطوير عبر [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) أو [Patreon](https://www.patreon.com/HakanSeven12). + +## الترخيص + +يُوزّع Open CAD Studio بموجب [رخصة جنو العمومية الإصدار 3.0](LICENSE). diff --git a/README.cs.md b/README.cs.md new file mode 100644 index 000000000..2b4cf6f59 --- /dev/null +++ b/README.cs.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Logo Open CAD Studio

+

Open CAD Studio

+

Open-source 2D kreslení a 3D modelování pro počítač i web, vytvořené v Rustu.

+ +

+ Nejnovější verze + Stažení + Hvězdy GitHub + Licence GPL-3.0 +

+ +

+ Spustit webovou aplikaci · + Stáhnout desktopovou aplikaci · + Zapojit se do diskuse +

+ +

Pracovní plocha Open CAD Studio

+ +## Přehled + +Open CAD Studio je multiplatformní aplikace pro technické kreslení, práci s rozvržením a modelování těles. Nativně čte a zapisuje výkresy DWG a DXF; desktopová a prohlížečová verze používají společné editační jádro. + +Projekt je aktivně vyvíjen. Důležité produkční výkresy zálohujte a reprodukovatelné problémy hlaste přes [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## Hlavní funkce + +- **Nativní práce s výkresy** — otevírání, úpravy, obnova a ukládání DWG a DXF bez konverzní služby. +- **Přesné 2D kreslení** — úsečky, křivky, spline, šrafy, uchopení objektů, trasování, hladiny, bloky a externí reference. +- **Dokumentační nástroje** — text, kóty, odkazové čáry, tolerance, tabulky, modelový prostor, výkresový prostor, výřezy a styly vykreslování. +- **3D modelování s geometrickým jádrem** — základní tělesa, vysunutí, rotace, tažení, loft, booleovské operace a teselace entit ACIS. +- **Vykreslování přes GPU** — akcelerované 2D a 3D pohledy pomocí `wgpu`, s ortografickou a perspektivní kamerou. +- **Rozšiřitelné postupy** — nativní pluginy, příkazové skripty, bezobslužná konverze a řádkové JSON automatizační API. + +

3D model v Open CAD Studio

+ +## Práce se soubory + +| Formát nebo postup | Podpora | +| --- | --- | +| DWG | Čtení a zápis; cílové verze ukládání R14 až 2018 | +| DXF | Čtení a zápis; cílové verze ukládání R14 až 2018 | +| BAK / SV$ | Otevírání záloh a automaticky uložených výkresů | +| OBJ | Import polygonových sítí | +| LandXML | Import zaměřených bodů `CgPoint` | +| STL | Export dat 3D sítí | +| STEP AP203 | Export dat 3D sítí | +| PDF | Vykreslení rozvržení a vybrané geometrie na počítači | +| CSV | Extrakce vlastností entit | +| CTB / STB | Načtení a úpravy tabulek stylů vykreslování | + +## Počítač nebo web + +Pro okamžitý přístup bez instalace použijte [webovou aplikaci](https://www.opencadstudio.com). Výkresy se vybírají v prohlížeči a ukládají jako místní soubory ke stažení. + +Desktopovou aplikaci použijte pro nativní asociace souborů, náhledy ve správci souborů, systémový tisk, výstup PDF, externí pluginy, příkazové skripty a bezobslužnou automatizaci. Vydání jsou dostupná pro Windows, Linux a macOS s Apple Silicon. + +## Instalace + +Všechny aktuální balíčky stáhnete z [nejnovějšího vydání](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +Vyberte jeden z podepsaných balíčků x86-64: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — doporučený instalátor se zástupci v nabídce Start, asociacemi DWG/DXF a náhledy výkresů. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — samostatná aplikace bez instalace. + +### Linux + +Stáhněte x86-64 AppImage, nastavte jej jako spustitelný a spusťte: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +Publikovaný balíček pro macOS podporuje Apple Silicon: + +1. Stáhněte `OpenCADStudio-*-macos-arm64.dmg`. +2. Otevřete obraz a přetáhněte `OpenCADStudio.app` do **Applications**. +3. Pokud Gatekeeper první spuštění zablokuje, povolte aplikaci v **System Settings → Privacy & Security**. + +Aplikace je podepsána ad hoc, ale v současnosti není notářsky ověřena společností Apple. + +## Jazyky + +Open CAD Studio může používat jazyk systému nebo jeden z těchto 19 jazyků rozhraní: + +> Arabština · Brazilská portugalština · Čeština · Nizozemština · Angličtina · Finština · Francouzština · Němčina · Hindština · Maďarština · Italština · Japonština · Korejština · Polština · Ruština · Zjednodušená čínština · Španělština · Tradiční čínština · Turečtina + +Jazyk změníte v nastavení aplikace. Pokud je vybrána možnost **Systém**, webová verze používá také preferované národní prostředí prohlížeče. + +## Sestavení ze zdrojového kódu + +### Desktop + +Požadavky: + +- Git +- Aktuální stabilní nástroje Rust +- Vývojové knihovny grafiky a písem dané platformy + +Na Ubuntu nebo Debianu nainstalujte nativní závislosti: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Poté sestavte: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +Výsledný program bude v `target/release/OpenCADStudio` (ve Windows `OpenCADStudio.exe`). + +### Web + +Jednorázově nainstalujte cíl WebAssembly a nástroje pro sestavení: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Spusťte vývojový server: + +```bash +trunk serve +``` + +## Automatizace + +Desktopový program podporuje jednorázovou konverzi a trvalý bezobslužný server: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +Server předává jeden objekt JSON na řádek přes standardní vstup/výstup nebo místní TCP socket. Viz [průvodce automatizací](docs/automation/README.md) a přiložený [klient Python](docs/automation/ocs.py). + +## Pluginy + +Desktopové pluginy běží v oddělených procesech a komunikují s hostitelem přes verzované API pluginů. Prohlížečová verze nativní pluginy nenačítá. + +- [Architektura pluginů](docs/plugin-architecture.md) +- [Šablona pluginu](docs/plugin-template/README.md) +- [Registr pluginů](plugins/README.md) + +## Dokumentace projektu + +- [Automatizační API](docs/automation/README.md) +- [Architektura pluginů](docs/plugin-architecture.md) +- [Proces teselace](docs/tessellation.md) +- [Bezpečnostní zásady](SECURITY.md) + +## Přispívání + +Vítáme hlášení chyb, cílené pull requesty, překlady, vylepšení dokumentace i příspěvky k pluginům. + +- Před otevřením nového hlášení prohledejte existující [issues](https://github.com/HakanSeven12/OpenCADStudio/issues). +- Pro otázky a nápady použijte [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions). +- Zranitelnosti hlaste soukromě podle [bezpečnostních zásad](SECURITY.md). + +## Růst projektu + + + + + + Hvězdy a stažení Open CAD Studio + + + +## Podpořte projekt + +Pokud vám Open CAD Studio pomáhá, podpořte další vývoj přes [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) nebo [Patreon](https://www.patreon.com/HakanSeven12). + +## Licence + +Open CAD Studio je šířeno pod [GNU General Public License v3.0](LICENSE). diff --git a/README.de.md b/README.de.md new file mode 100644 index 000000000..cc8572465 --- /dev/null +++ b/README.de.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Open-CAD-Studio-Logo

+

Open CAD Studio

+

Quelloffenes 2D-Zeichnen und 3D-Modellieren für Desktop und Web, entwickelt mit Rust.

+ +

+ Neueste Version + Downloads + GitHub-Sterne + GPL-3.0-Lizenz +

+ +

+ Web-App starten · + Desktop-App herunterladen · + An Diskussionen teilnehmen +

+ +

Arbeitsbereich von Open CAD Studio

+ +## Überblick + +Open CAD Studio ist eine plattformübergreifende Anwendung für technische Zeichnungen, Layoutarbeit und Volumenmodellierung. DWG- und DXF-Zeichnungen werden nativ gelesen und geschrieben; Desktop- und Browserversion nutzen denselben Bearbeitungskern. + +Das Projekt wird aktiv entwickelt. Bewahre Sicherungskopien wichtiger Produktionszeichnungen auf und melde reproduzierbare Probleme über [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## Höhepunkte + +- **Nativer Zeichnungsablauf** — DWG- und DXF-Dateien ohne Konvertierungsdienst öffnen, bearbeiten, wiederherstellen und speichern. +- **Präzises 2D-Zeichnen** — Linien, Polylinien, Kurven, Splines, Schraffuren, Objektfang, Spurverfolgung, Layer, Blöcke und externe Referenzen. +- **Dokumentationswerkzeuge** — Text, Bemaßungen, Führungslinien, Toleranzen, Tabellen, Modellbereich, Papierbereich, Ansichtsfenster und Plotstile. +- **Kernel-gestützte 3D-Modellierung** — Volumenprimitive, Extrusion, Rotation, Sweep, Loft, boolesche Operationen und Tessellierung von ACIS-Elementen. +- **GPU-Darstellung** — beschleunigte 2D- und 3D-Ansichten über `wgpu` mit orthografischen und perspektivischen Kameras. +- **Erweiterbare Abläufe** — native Plugins, Befehlsskripte, Konvertierung ohne Oberfläche und zeilenbasierte JSON-Automatisierungs-API. + +

3D-Modell in Open CAD Studio

+ +## Dateiabläufe + +| Format oder Ablauf | Unterstützung | +| --- | --- | +| DWG | Lesen und Schreiben; versionierte Speicherziele von R14 bis 2018 | +| DXF | Lesen und Schreiben; versionierte Speicherziele von R14 bis 2018 | +| BAK / SV$ | Zeichnungssicherungen und automatisch gespeicherte Dateien öffnen | +| OBJ | Polygonnetze importieren | +| LandXML | `CgPoint`-Vermessungspunkte importieren | +| STL | 3D-Netzdaten exportieren | +| STEP AP203 | 3D-Netzdaten exportieren | +| PDF | Layouts und ausgewählte Geometrie auf dem Desktop plotten | +| CSV | Eigenschaftsdaten von Elementen extrahieren | +| CTB / STB | Plotstiltabellen laden und bearbeiten | + +## Desktop oder Web + +Nutze die [Web-App](https://www.opencadstudio.com) für sofortigen Zugriff ohne Installation. Zeichnungen werden im Browser ausgewählt und als lokale Downloads gespeichert. + +Nutze die Desktop-Anwendung für native Dateizuordnungen, Vorschaubilder im Dateimanager, Systemdruck, PDF-Ausgabe, externe Plugins, Befehlsskripte und Automatisierung ohne Oberfläche. Veröffentlichungen sind für Windows, Linux und Apple-Silicon-macOS verfügbar. + +## Installation + +Lade alle aktuellen Pakete von der [neuesten Version](https://github.com/HakanSeven12/OpenCADStudio/releases/latest) herunter. + +### Windows + +Wähle eines dieser signierten x86-64-Pakete: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — empfohlener Installer mit Startmenü-Verknüpfungen, DWG/DXF-Dateizuordnungen und Zeichnungsvorschauen. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — eigenständige Anwendung ohne Installation. + +### Linux + +Lade das x86-64-AppImage herunter, mache es ausführbar und starte es: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +Das veröffentlichte macOS-Paket unterstützt Apple Silicon: + +1. `OpenCADStudio-*-macos-arm64.dmg` herunterladen. +2. Image öffnen und `OpenCADStudio.app` nach **Applications** ziehen. +3. Falls Gatekeeper den ersten Start blockiert, die App unter **System Settings → Privacy & Security** freigeben. + +Die Anwendung ist ad hoc signiert, wird derzeit aber nicht von Apple notarisiert. + +## Sprachen + +Open CAD Studio kann der Systemsprache folgen oder eine dieser 19 Oberflächensprachen verwenden: + +> Arabisch · Brasilianisches Portugiesisch · Tschechisch · Niederländisch · Englisch · Finnisch · Französisch · Deutsch · Hindi · Ungarisch · Italienisch · Japanisch · Koreanisch · Polnisch · Russisch · Vereinfachtes Chinesisch · Spanisch · Traditionelles Chinesisch · Türkisch + +Die Sprache lässt sich in den Anwendungseinstellungen ändern. Die Browserversion verwendet bei Auswahl von **System** ebenfalls das bevorzugte Gebietsschema des Browsers. + +## Aus dem Quellcode erstellen + +### Desktop + +Voraussetzungen: + +- Git +- Aktuelle stabile Rust-Toolchain +- Plattformspezifische Entwicklungsbibliotheken für Grafik und Schriften + +Unter Ubuntu oder Debian die nativen Abhängigkeiten installieren: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Danach erstellen: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +Die erzeugte Binärdatei liegt unter `target/release/OpenCADStudio` (unter Windows `OpenCADStudio.exe`). + +### Web + +WebAssembly-Ziel und Build-Werkzeuge einmalig installieren: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Entwicklungsserver starten: + +```bash +trunk serve +``` + +## Automatisierung + +Die Desktop-Binärdatei unterstützt einmalige Konvertierung und einen dauerhaften Server ohne Oberfläche: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +Der Server tauscht über Standardein-/ausgabe oder einen lokalen TCP-Socket je Zeile ein JSON-Objekt aus. Siehe [Automatisierungsanleitung](docs/automation/README.md) und den enthaltenen [Python-Client](docs/automation/ocs.py). + +## Plugins + +Desktop-Plugins laufen in getrennten Prozessen und kommunizieren über die versionierte Plugin-API mit dem Host. Die Browserversion lädt keine nativen Plugins. + +- [Plugin-Architektur](docs/plugin-architecture.md) +- [Plugin-Vorlage](docs/plugin-template/README.md) +- [Plugin-Verzeichnis](plugins/README.md) + +## Projektdokumentation + +- [Automatisierungs-API](docs/automation/README.md) +- [Plugin-Architektur](docs/plugin-architecture.md) +- [Tessellierungs-Pipeline](docs/tessellation.md) +- [Sicherheitsrichtlinie](SECURITY.md) + +## Mitwirken + +Fehlerberichte, fokussierte Pull Requests, Übersetzungen, Dokumentationsverbesserungen und Plugin-Beiträge sind willkommen. + +- Vor einem neuen Bericht bestehende [Issues](https://github.com/HakanSeven12/OpenCADStudio/issues) durchsuchen. +- [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) für Fragen und Ideen verwenden. +- Schwachstellen gemäß der [Sicherheitsrichtlinie](SECURITY.md) vertraulich melden. + +## Projektwachstum + + + + + + Sterne und Versionsdownloads von Open CAD Studio + + + +## Projekt unterstützen + +Wenn Open CAD Studio bei der Arbeit hilft, unterstütze die weitere Entwicklung über [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) oder [Patreon](https://www.patreon.com/HakanSeven12). + +## Lizenz + +Open CAD Studio wird unter der [GNU General Public License v3.0](LICENSE) bereitgestellt. diff --git a/README.es.md b/README.es.md new file mode 100644 index 000000000..ff1c99bc4 --- /dev/null +++ b/README.es.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Logotipo de Open CAD Studio

+

Open CAD Studio

+

Dibujo 2D y modelado 3D de código abierto para escritorio y web, desarrollado con Rust.

+ +

+ Última versión + Descargas + Estrellas en GitHub + Licencia GPL-3.0 +

+ +

+ Abrir la aplicación web · + Descargar la aplicación de escritorio · + Participar en la conversación +

+ +

Espacio de trabajo de Open CAD Studio

+ +## Descripción general + +Open CAD Studio es una aplicación multiplataforma para dibujo técnico, trabajo con presentaciones y modelado de sólidos. Lee y escribe dibujos DWG y DXF de forma nativa, con un núcleo de edición compartido entre las versiones de escritorio y navegador. + +El proyecto está en desarrollo activo. Conserva copias de seguridad de los dibujos de producción importantes e informa de problemas reproducibles mediante [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## Características destacadas + +- **Flujo de dibujo nativo** — abre, edita, recupera y guarda archivos DWG y DXF sin un servicio de conversión. +- **Dibujo 2D preciso** — líneas, polilíneas, curvas, splines, sombreados, referencias a objetos, rastreo, capas, bloques y referencias externas. +- **Herramientas de documentación** — texto, cotas, directrices, tolerancias, tablas, espacio modelo, espacio papel, ventanas gráficas y estilos de trazado. +- **Modelado 3D respaldado por kernel** — primitivas sólidas, extrusión, revolución, barrido, loft, operaciones booleanas y teselación de entidades ACIS. +- **Renderizado por GPU** — vistas 2D y 3D aceleradas mediante `wgpu`, con cámaras ortográfica y en perspectiva. +- **Flujos ampliables** — complementos nativos, scripts de comandos, conversión sin interfaz y una API de automatización JSON basada en líneas. + +

Modelo 3D en Open CAD Studio

+ +## Flujos de archivos + +| Formato o flujo | Compatibilidad | +| --- | --- | +| DWG | Lectura y escritura; destinos de guardado versionados de R14 a 2018 | +| DXF | Lectura y escritura; destinos de guardado versionados de R14 a 2018 | +| BAK / SV$ | Apertura de copias de seguridad y archivos de guardado automático | +| OBJ | Importación de mallas poligonales | +| LandXML | Importación de puntos topográficos `CgPoint` | +| STL | Exportación de datos de malla 3D | +| STEP AP203 | Exportación de datos de malla 3D | +| PDF | Trazado de presentaciones y geometría seleccionada en escritorio | +| CSV | Extracción de datos de propiedades de entidades | +| CTB / STB | Carga y edición de tablas de estilos de trazado | + +## Escritorio o web + +Usa la [aplicación web](https://www.opencadstudio.com) para acceder de inmediato sin instalar nada. Los dibujos se seleccionan mediante el navegador y se guardan como descargas locales. + +Usa la aplicación de escritorio para asociaciones de archivos nativas, miniaturas del gestor de archivos, impresión del sistema, salida PDF, complementos externos, scripts de comandos y automatización sin interfaz. Hay versiones para Windows, Linux y macOS con Apple Silicon. + +## Instalación + +Descarga todos los paquetes actuales desde la [última versión](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +Elige uno de estos paquetes x86-64 firmados: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — instalador recomendado con accesos directos del menú Inicio, asociaciones DWG/DXF y miniaturas de dibujos. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — aplicación independiente; no requiere instalación. + +### Linux + +Descarga la AppImage x86-64, hazla ejecutable e iníciala: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +El paquete publicado para macOS es compatible con Apple Silicon: + +1. Descarga `OpenCADStudio-*-macos-arm64.dmg`. +2. Abre la imagen y arrastra `OpenCADStudio.app` a **Applications**. +3. Si Gatekeeper bloquea el primer inicio, autoriza la aplicación en **System Settings → Privacy & Security**. + +La aplicación tiene firma ad hoc, pero actualmente no está notarizada por Apple. + +## Idiomas + +Open CAD Studio puede seguir el idioma del sistema o usar cualquiera de estos 19 idiomas de interfaz: + +> Árabe · Portugués de Brasil · Checo · Neerlandés · Inglés · Finés · Francés · Alemán · Hindi · Húngaro · Italiano · Japonés · Coreano · Polaco · Ruso · Chino simplificado · Español · Chino tradicional · Turco + +Cambia el idioma en los ajustes de la aplicación. La versión web también usa la configuración regional preferida del navegador cuando se selecciona **Sistema**. + +## Compilar desde el código fuente + +### Escritorio + +Requisitos: + +- Git +- Cadena de herramientas estable actual de Rust +- Bibliotecas de desarrollo de gráficos y fuentes de la plataforma + +En Ubuntu o Debian, instala las dependencias nativas: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Después compila: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +El binario resultante se escribe en `target/release/OpenCADStudio` (`OpenCADStudio.exe` en Windows). + +### Web + +Instala una vez el destino WebAssembly y las herramientas de compilación: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Inicia el servidor de desarrollo: + +```bash +trunk serve +``` + +## Automatización + +El binario de escritorio admite conversión puntual y un servidor persistente sin interfaz: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +El servidor intercambia un objeto JSON por línea mediante entrada/salida estándar o un socket TCP local. Consulta la [guía de automatización](docs/automation/README.md) y el [cliente Python](docs/automation/ocs.py) incluido. + +## Complementos + +Los complementos de escritorio se ejecutan en procesos separados y se comunican con el anfitrión mediante la API de complementos versionada. La versión del navegador no carga complementos nativos. + +- [Arquitectura de complementos](docs/plugin-architecture.md) +- [Plantilla de complemento](docs/plugin-template/README.md) +- [Registro de complementos](plugins/README.md) + +## Documentación del proyecto + +- [API de automatización](docs/automation/README.md) +- [Arquitectura de complementos](docs/plugin-architecture.md) +- [Canal de teselación](docs/tessellation.md) +- [Política de seguridad](SECURITY.md) + +## Contribuir + +Son bienvenidos los informes de errores, pull requests específicos, traducciones, mejoras de documentación y contribuciones de complementos. + +- Busca en los [issues](https://github.com/HakanSeven12/OpenCADStudio/issues) existentes antes de abrir un informe nuevo. +- Usa [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) para preguntas e ideas. +- Informa de vulnerabilidades de forma privada siguiendo la [política de seguridad](SECURITY.md). + +## Crecimiento del proyecto + + + + + + Estrellas y descargas de versiones de Open CAD Studio + + + +## Apoya el proyecto + +Si Open CAD Studio te ayuda en tu trabajo, apoya su desarrollo mediante [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) o [Patreon](https://www.patreon.com/HakanSeven12). + +## Licencia + +Open CAD Studio se distribuye bajo la [Licencia Pública General de GNU v3.0](LICENSE). diff --git a/README.fi.md b/README.fi.md new file mode 100644 index 000000000..42004e28d --- /dev/null +++ b/README.fi.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Open CAD Studion logo

+

Open CAD Studio

+

Avoimen lähdekoodin 2D-piirtäminen ja 3D-mallinnus työpöydälle ja verkkoon, toteutettu Rustilla.

+ +

+ Uusin julkaisu + Lataukset + GitHub-tähdet + GPL-3.0-lisenssi +

+ +

+ Käynnistä verkkosovellus · + Lataa työpöytäsovellus · + Osallistu keskusteluun +

+ +

Open CAD Studion työtila

+ +## Yleiskatsaus + +Open CAD Studio on monialustainen sovellus tekniseen piirtämiseen, asettelutyöhön ja solidimallinnukseen. Se lukee ja kirjoittaa DWG- ja DXF-piirustuksia suoraan, ja työpöytä- sekä selainversiot käyttävät samaa muokkausydintä. + +Projektia kehitetään aktiivisesti. Säilytä tärkeistä tuotantopiirustuksista varmuuskopiot ja ilmoita toistettavista ongelmista [GitHub Issuesissa](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## Kohokohdat + +- **Suora piirustusprosessi** — avaa, muokkaa, palauta ja tallenna DWG- ja DXF-tiedostoja ilman muunnospalvelua. +- **Tarkka 2D-piirtäminen** — viivat, murtoviivat, käyrät, splinit, viivoitukset, objektikohdistukset, seuranta, tasot, lohkot ja ulkoiset viitteet. +- **Dokumentointityökalut** — teksti, mitoitukset, johtoviivat, toleranssit, taulukot, mallitila, paperitila, näkymät ja tulostustyylit. +- **Geometriaytimeen perustuva 3D-mallinnus** — solidiprimitiivit, pursotus, pyöräytys, pyyhkäisy, loft, Boolen operaatiot ja ACIS-kohteiden tessellointi. +- **GPU-renderöinti** — `wgpu`:n kiihdyttämät 2D- ja 3D-näkymät sekä ortografiset ja perspektiivikamerat. +- **Laajennettavat työnkulut** — natiiviliitännäiset, komentoskriptit, käyttöliittymätön muunnos ja rivipohjainen JSON-automaatiorajapinta. + +

3D-malli Open CAD Studiossa

+ +## Tiedostotyönkulut + +| Muoto tai työnkulku | Tuki | +| --- | --- | +| DWG | Luku ja kirjoitus; versioidut tallennuskohteet R14–2018 | +| DXF | Luku ja kirjoitus; versioidut tallennuskohteet R14–2018 | +| BAK / SV$ | Piirustusvarmuuskopioiden ja automaattitallennusten avaaminen | +| OBJ | Monikulmioverkkojen tuonti | +| LandXML | `CgPoint`-mittauspisteiden tuonti | +| STL | 3D-verkkotietojen vienti | +| STEP AP203 | 3D-verkkotietojen vienti | +| PDF | Asettelujen ja valitun geometrian tulostus työpöytäversiossa | +| CSV | Kohteiden ominaisuustietojen poiminta | +| CTB / STB | Tulostustyylitaulukoiden lataus ja muokkaus | + +## Työpöytä vai verkko + +Käytä [verkkosovellusta](https://www.opencadstudio.com), kun haluat aloittaa heti ilman asennusta. Piirustukset valitaan selaimessa ja tallennetaan paikallisina latauksina. + +Käytä työpöytäsovellusta natiiveihin tiedostokytkentöihin, tiedostonhallinnan esikatseluihin, järjestelmätulostukseen, PDF-tulosteisiin, ulkoisiin liitännäisiin, komentoskripteihin ja käyttöliittymättömään automaatioon. Julkaisut ovat saatavilla Windowsille, Linuxille ja Apple Silicon macOS:lle. + +## Asennus + +Lataa kaikki nykyiset paketit [uusimmasta julkaisusta](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +Valitse allekirjoitettu x86-64-paketti: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — suositeltu asennusohjelma, joka sisältää Käynnistä-valikon pikakuvakkeet, DWG/DXF-tiedostokytkennät ja piirustusten esikatselut. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — itsenäinen sovellus, joka ei vaadi asennusta. + +### Linux + +Lataa x86-64 AppImage, tee siitä suoritettava ja käynnistä se: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +Julkaistu macOS-paketti tukee Apple Siliconia: + +1. Lataa `OpenCADStudio-*-macos-arm64.dmg`. +2. Avaa levykuva ja vedä `OpenCADStudio.app` kansioon **Applications**. +3. Jos Gatekeeper estää ensimmäisen käynnistyksen, hyväksy sovellus kohdassa **System Settings → Privacy & Security**. + +Sovellus on allekirjoitettu ad hoc -allekirjoituksella, mutta Apple ei ole tällä hetkellä notaroinut sitä. + +## Kielet + +Open CAD Studio voi seurata järjestelmän kieltä tai käyttää jotakin näistä 19 käyttöliittymäkielestä: + +> Arabia · Brasilianportugali · Tšekki · Hollanti · Englanti · Suomi · Ranska · Saksa · Hindi · Unkari · Italia · Japani · Korea · Puola · Venäjä · Yksinkertaistettu kiina · Espanja · Perinteinen kiina · Turkki + +Vaihda kieli sovelluksen asetuksissa. Selainversio käyttää myös selaimen ensisijaista kielialuetta, kun **Järjestelmä** on valittu. + +## Kääntäminen lähdekoodista + +### Työpöytä + +Vaatimukset: + +- Git +- Nykyinen vakaa Rust-työkaluketju +- Alustan grafiikka- ja fonttikehityskirjastot + +Asenna natiiviriippuvuudet Ubuntussa tai Debianissa: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Käännä sitten: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +Tuloksena syntyvä ohjelmatiedosto kirjoitetaan polkuun `target/release/OpenCADStudio` (Windowsissa `OpenCADStudio.exe`). + +### Web + +Asenna WebAssembly-kohde ja rakennustyökalut kerran: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Käynnistä kehityspalvelin: + +```bash +trunk serve +``` + +## Automaatio + +Työpöytäohjelma tukee kertaluonteista muunnosta ja pysyvää käyttöliittymätöntä palvelinta: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +Palvelin vaihtaa yhden JSON-objektin riviä kohti vakiotulon/-lähdön tai paikallisen TCP-pistokkeen kautta. Katso [automaatio-opas](docs/automation/README.md) ja mukana toimitettu [Python-asiakas](docs/automation/ocs.py). + +## Liitännäiset + +Työpöytäliitännäiset suoritetaan erillisissä prosesseissa ja ne viestivät isännän kanssa versioidun liitännäisrajapinnan kautta. Selainversio ei lataa natiiviliitännäisiä. + +- [Liitännäisarkkitehtuuri](docs/plugin-architecture.md) +- [Liitännäismalli](docs/plugin-template/README.md) +- [Liitännäisrekisteri](plugins/README.md) + +## Projektin dokumentaatio + +- [Automaatiorajapinta](docs/automation/README.md) +- [Liitännäisarkkitehtuuri](docs/plugin-architecture.md) +- [Tessellointiputki](docs/tessellation.md) +- [Tietoturvakäytäntö](SECURITY.md) + +## Osallistuminen + +Virheraportit, rajatut pull requestit, käännökset, dokumentaatioparannukset ja liitännäisosallistuminen ovat tervetulleita. + +- Etsi olemassa olevista [issueista](https://github.com/HakanSeven12/OpenCADStudio/issues) ennen uuden raportin avaamista. +- Käytä [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions)-osiota kysymyksiin ja ideoihin. +- Ilmoita haavoittuvuuksista yksityisesti [tietoturvakäytännön](SECURITY.md) mukaisesti. + +## Projektin kasvu + + + + + + Open CAD Studion tähdet ja julkaisulataukset + + + +## Tue projektia + +Jos Open CAD Studio auttaa työssäsi, tue jatkokehitystä [GitHub Sponsorsin](https://github.com/sponsors/HakanSeven12) tai [Patreonin](https://www.patreon.com/HakanSeven12) kautta. + +## Lisenssi + +Open CAD Studioa jaetaan [GNU General Public License v3.0](LICENSE) -lisenssillä. diff --git a/README.fr.md b/README.fr.md new file mode 100644 index 000000000..ab1b8a91c --- /dev/null +++ b/README.fr.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Logo Open CAD Studio

+

Open CAD Studio

+

Dessin 2D et modélisation 3D open source pour ordinateur et web, développés en Rust.

+ +

+ Dernière version + Téléchargements + Étoiles GitHub + Licence GPL-3.0 +

+ +

+ Lancer l’application web · + Télécharger l’application de bureau · + Participer aux discussions +

+ +

Espace de travail Open CAD Studio

+ +## Présentation + +Open CAD Studio est une application multiplateforme destinée au dessin technique, à la mise en page et à la modélisation de solides. Elle lit et écrit nativement les dessins DWG et DXF, avec un même cœur d’édition pour les versions bureau et navigateur. + +Le projet est en développement actif. Conservez des sauvegardes des dessins de production importants et signalez les problèmes reproductibles dans les [issues GitHub](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## Points forts + +- **Flux de dessin natif** — ouvrez, modifiez, récupérez et enregistrez les fichiers DWG et DXF sans service de conversion. +- **Dessin 2D précis** — lignes, polylignes, courbes, splines, hachures, accrochages aux objets, repérage, calques, blocs et références externes. +- **Outils de documentation** — texte, cotations, repères, tolérances, tableaux, espace objet, espace papier, fenêtres et styles de tracé. +- **Modélisation 3D avec noyau géométrique** — primitives solides, extrusion, révolution, balayage, lissage, opérations booléennes et tessellation d’entités ACIS. +- **Rendu GPU** — vues 2D et 3D accélérées par `wgpu`, avec caméras orthographique et perspective. +- **Flux extensibles** — plugins natifs, scripts de commandes, conversion sans interface et API d’automatisation JSON ligne par ligne. + +

Modèle 3D dans Open CAD Studio

+ +## Flux de fichiers + +| Format ou flux | Prise en charge | +| --- | --- | +| DWG | Lecture et écriture ; cibles d’enregistrement versionnées de R14 à 2018 | +| DXF | Lecture et écriture ; cibles d’enregistrement versionnées de R14 à 2018 | +| BAK / SV$ | Ouverture des sauvegardes et fichiers d’enregistrement automatique | +| OBJ | Importation de maillages polygonaux | +| LandXML | Importation de points topographiques `CgPoint` | +| STL | Exportation de données de maillage 3D | +| STEP AP203 | Exportation de données de maillage 3D | +| PDF | Tracé des présentations et de la géométrie sélectionnée sur ordinateur | +| CSV | Extraction des propriétés des entités | +| CTB / STB | Chargement et modification des tables de styles de tracé | + +## Bureau ou web + +Utilisez l’[application web](https://www.opencadstudio.com) pour un accès immédiat sans installation. Les dessins sont sélectionnés dans le navigateur et enregistrés sous forme de téléchargements locaux. + +Utilisez l’application de bureau pour les associations de fichiers natives, les miniatures du gestionnaire de fichiers, l’impression système, la sortie PDF, les plugins externes, les scripts de commandes et l’automatisation sans interface. Des versions sont proposées pour Windows, Linux et macOS Apple Silicon. + +## Installation + +Téléchargez tous les paquets actuels depuis la [dernière version](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +Choisissez l’un des paquets x86-64 signés : + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — programme d’installation recommandé avec raccourcis du menu Démarrer, associations DWG/DXF et miniatures des dessins. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — application autonome, sans installation. + +### Linux + +Téléchargez l’AppImage x86-64, rendez-la exécutable et lancez-la : + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +Le paquet macOS publié prend en charge Apple Silicon : + +1. Téléchargez `OpenCADStudio-*-macos-arm64.dmg`. +2. Ouvrez l’image et faites glisser `OpenCADStudio.app` vers **Applications**. +3. Si Gatekeeper bloque le premier lancement, autorisez l’application dans **System Settings → Privacy & Security**. + +L’application est signée de façon ad hoc, mais n’est actuellement pas notariée par Apple. + +## Langues + +Open CAD Studio peut suivre la langue du système ou utiliser l’une de ces 19 langues d’interface : + +> Arabe · Portugais du Brésil · Tchèque · Néerlandais · Anglais · Finnois · Français · Allemand · Hindi · Hongrois · Italien · Japonais · Coréen · Polonais · Russe · Chinois simplifié · Espagnol · Chinois traditionnel · Turc + +Changez la langue dans les paramètres de l’application. La version web utilise aussi la langue préférée du navigateur lorsque **Système** est sélectionné. + +## Compilation depuis les sources + +### Bureau + +Prérequis : + +- Git +- Chaîne d’outils Rust stable actuelle +- Bibliothèques de développement graphiques et de polices de la plateforme + +Sous Ubuntu ou Debian, installez les dépendances natives : + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Compilez ensuite : + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +Le binaire obtenu est écrit dans `target/release/OpenCADStudio` (`OpenCADStudio.exe` sous Windows). + +### Web + +Installez une fois la cible WebAssembly et les outils de compilation : + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Lancez le serveur de développement : + +```bash +trunk serve +``` + +## Automatisation + +Le binaire de bureau prend en charge la conversion ponctuelle et un serveur persistant sans interface : + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +Le serveur échange un objet JSON par ligne via l’entrée/sortie standard ou un socket TCP local. Consultez le [guide d’automatisation](docs/automation/README.md) et le [client Python](docs/automation/ocs.py) fourni. + +## Plugins + +Les plugins de bureau s’exécutent dans des processus séparés et communiquent avec l’hôte via l’API de plugins versionnée. La version navigateur ne charge pas de plugins natifs. + +- [Architecture des plugins](docs/plugin-architecture.md) +- [Modèle de plugin](docs/plugin-template/README.md) +- [Registre des plugins](plugins/README.md) + +## Documentation du projet + +- [API d’automatisation](docs/automation/README.md) +- [Architecture des plugins](docs/plugin-architecture.md) +- [Pipeline de tessellation](docs/tessellation.md) +- [Politique de sécurité](SECURITY.md) + +## Contribuer + +Les rapports de bogues, pull requests ciblées, traductions, améliorations de documentation et contributions de plugins sont les bienvenus. + +- Recherchez dans les [issues](https://github.com/HakanSeven12/OpenCADStudio/issues) existantes avant d’ouvrir un nouveau rapport. +- Utilisez les [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) pour les questions et les idées. +- Signalez les vulnérabilités en privé en suivant la [politique de sécurité](SECURITY.md). + +## Croissance du projet + + + + + + Étoiles et téléchargements d’Open CAD Studio + + + +## Soutenir le projet + +Si Open CAD Studio vous aide dans votre travail, soutenez son développement via [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) ou [Patreon](https://www.patreon.com/HakanSeven12). + +## Licence + +Open CAD Studio est distribué sous la [Licence publique générale GNU v3.0](LICENSE). diff --git a/README.hi.md b/README.hi.md new file mode 100644 index 000000000..b7e05b755 --- /dev/null +++ b/README.hi.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Open CAD Studio लोगो

+

Open CAD Studio

+

Rust से निर्मित, डेस्कटॉप और वेब के लिए मुक्त-स्रोत 2D ड्राफ्टिंग और 3D मॉडलिंग अनुप्रयोग।

+ +

+ नवीनतम रिलीज़ + रिलीज़ डाउनलोड + GitHub स्टार + GPL-3.0 लाइसेंस +

+ +

+ वेब ऐप खोलें · + डेस्कटॉप ऐप डाउनलोड करें · + चर्चा में शामिल हों +

+ +

Open CAD Studio कार्यक्षेत्र

+ +## परिचय + +Open CAD Studio तकनीकी ड्राइंग, लेआउट कार्य और सॉलिड मॉडलिंग के लिए एक क्रॉस-प्लेटफ़ॉर्म अनुप्रयोग है। यह DWG और DXF ड्राइंग को मूल रूप से पढ़ता और लिखता है, तथा डेस्कटॉप और ब्राउज़र संस्करण समान संपादन कोर साझा करते हैं। + +परियोजना सक्रिय विकास में है। महत्वपूर्ण उत्पादन ड्राइंग की बैकअप प्रतियाँ रखें और दोहराई जा सकने वाली समस्याएँ [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues) पर रिपोर्ट करें। + +## प्रमुख विशेषताएँ + +- **मूल ड्राइंग कार्यप्रवाह** — किसी रूपांतरण सेवा के बिना DWG और DXF फ़ाइलें खोलें, संपादित करें, पुनर्प्राप्त करें और सहेजें। +- **सटीक 2D ड्राफ्टिंग** — रेखाएँ, पॉलीलाइन, वक्र, स्प्लाइन, हैच, ऑब्जेक्ट स्नैप, ट्रैकिंग, लेयर, ब्लॉक और बाहरी संदर्भ। +- **दस्तावेज़ीकरण उपकरण** — टेक्स्ट, आयाम, लीडर, टॉलरेंस, टेबल, मॉडल स्पेस, पेपर स्पेस, व्यूपोर्ट और प्लॉट शैली। +- **ज्यामिति कर्नेल आधारित 3D मॉडलिंग** — सॉलिड प्रिमिटिव, एक्सट्रूज़न, रिवॉल्व, स्वीप, लॉफ्ट, बूलियन ऑपरेशन और ACIS एंटिटी टेसेलेशन। +- **GPU रेंडरिंग** — `wgpu` से तेज़ किए गए 2D और 3D व्यूपोर्ट, ऑर्थोग्राफ़िक और पर्सपेक्टिव कैमरा सहित। +- **विस्तार योग्य कार्यप्रवाह** — मूल प्लगइन, कमांड स्क्रिप्ट, हेडलेस रूपांतरण और पंक्ति-आधारित JSON स्वचालन API। + +

Open CAD Studio में 3D मॉडल

+ +## फ़ाइल कार्यप्रवाह + +| प्रारूप या कार्यप्रवाह | समर्थन | +| --- | --- | +| DWG | पढ़ना और लिखना; R14 से 2018 तक संस्करण चुनकर सहेजना | +| DXF | पढ़ना और लिखना; R14 से 2018 तक संस्करण चुनकर सहेजना | +| BAK / SV$ | ड्राइंग बैकअप और स्वतः-सहेजी गई फ़ाइलें खोलना | +| OBJ | पॉलीगॉन मेश आयात करना | +| LandXML | `CgPoint` सर्वेक्षण बिंदु आयात करना | +| STL | 3D मेश डेटा निर्यात करना | +| STEP AP203 | 3D मेश डेटा निर्यात करना | +| PDF | डेस्कटॉप पर लेआउट और चुनी हुई ज्यामिति प्लॉट करना | +| CSV | एंटिटी गुणों का डेटा निकालना | +| CTB / STB | प्लॉट शैली टेबल लोड और संपादित करना | + +## डेस्कटॉप या वेब + +बिना स्थापना तुरंत शुरू करने के लिए [वेब ऐप](https://www.opencadstudio.com) का उपयोग करें। ड्राइंग ब्राउज़र से चुनी जाती हैं और स्थानीय डाउनलोड के रूप में सहेजी जाती हैं। + +मूल फ़ाइल संबद्धता, फ़ाइल मैनेजर थंबनेल, सिस्टम प्रिंटिंग, PDF आउटपुट, बाहरी प्लगइन, कमांड स्क्रिप्ट और हेडलेस स्वचालन के लिए डेस्कटॉप अनुप्रयोग उपयोग करें। Windows, Linux और Apple Silicon macOS के लिए रिलीज़ उपलब्ध हैं। + +## स्थापना + +सभी मौजूदा पैकेज [नवीनतम रिलीज़](https://github.com/HakanSeven12/OpenCADStudio/releases/latest) से डाउनलोड करें। + +### Windows + +इन हस्ताक्षरित x86-64 पैकेजों में से एक चुनें: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — Start Menu शॉर्टकट, DWG/DXF फ़ाइल संबद्धता और ड्राइंग थंबनेल वाला अनुशंसित इंस्टॉलर। +- `OpenCADStudio-*-windows-x86_64-portable.exe` — स्वतंत्र अनुप्रयोग; स्थापना आवश्यक नहीं। + +### Linux + +x86-64 AppImage डाउनलोड करें, उसे निष्पादन योग्य बनाएँ और चलाएँ: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +प्रकाशित macOS पैकेज Apple Silicon का समर्थन करता है: + +1. `OpenCADStudio-*-macos-arm64.dmg` डाउनलोड करें। +2. इमेज खोलें और `OpenCADStudio.app` को **Applications** में खींचें। +3. यदि Gatekeeper पहली बार चलाने से रोके, तो **System Settings → Privacy & Security** में ऐप को अनुमति दें। + +अनुप्रयोग पर ad hoc हस्ताक्षर हैं, लेकिन वर्तमान में Apple ने इसे नोटराइज़ नहीं किया है। + +## भाषाएँ + +Open CAD Studio सिस्टम भाषा का अनुसरण कर सकता है या इन 19 इंटरफ़ेस भाषाओं में से किसी एक का उपयोग कर सकता है: + +> अरबी · ब्राज़ीलियाई पुर्तगाली · चेक · डच · अंग्रेज़ी · फ़िनिश · फ़्रेंच · जर्मन · हिन्दी · हंगेरियन · इतालवी · जापानी · कोरियाई · पोलिश · रूसी · सरलीकृत चीनी · स्पैनिश · पारंपरिक चीनी · तुर्की + +अनुप्रयोग सेटिंग में भाषा बदलें। **सिस्टम** चुने जाने पर ब्राउज़र संस्करण भी ब्राउज़र की पसंदीदा लोकेल का उपयोग करता है। + +## स्रोत से निर्माण + +### डेस्कटॉप + +आवश्यकताएँ: + +- Git +- वर्तमान स्थिर Rust टूलचेन +- प्लेटफ़ॉर्म की ग्राफ़िक्स और फ़ॉन्ट विकास लाइब्रेरी + +Ubuntu या Debian पर मूल निर्भरताएँ स्थापित करें: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +फिर निर्माण करें: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +तैयार बाइनरी `target/release/OpenCADStudio` में लिखी जाती है (Windows पर `OpenCADStudio.exe`)। + +### वेब + +WebAssembly लक्ष्य और निर्माण उपकरण एक बार स्थापित करें: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +डेवलपमेंट सर्वर शुरू करें: + +```bash +trunk serve +``` + +## स्वचालन + +डेस्कटॉप बाइनरी एक बार के रूपांतरण और लगातार चलने वाले हेडलेस सर्वर का समर्थन करती है: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +सर्वर मानक इनपुट/आउटपुट या स्थानीय TCP सॉकेट के माध्यम से प्रति पंक्ति एक JSON ऑब्जेक्ट का आदान-प्रदान करता है। [स्वचालन मार्गदर्शिका](docs/automation/README.md) और शामिल [Python क्लाइंट](docs/automation/ocs.py) देखें। + +## प्लगइन + +डेस्कटॉप प्लगइन अलग प्रक्रियाओं में चलते हैं और संस्करणित प्लगइन API के माध्यम से होस्ट से संवाद करते हैं। ब्राउज़र बिल्ड मूल प्लगइन लोड नहीं करता। + +- [प्लगइन संरचना](docs/plugin-architecture.md) +- [प्लगइन टेम्पलेट](docs/plugin-template/README.md) +- [प्लगइन रजिस्ट्री](plugins/README.md) + +## परियोजना दस्तावेज़ + +- [स्वचालन API](docs/automation/README.md) +- [प्लगइन संरचना](docs/plugin-architecture.md) +- [टेसेलेशन पाइपलाइन](docs/tessellation.md) +- [सुरक्षा नीति](SECURITY.md) + +## योगदान + +बग रिपोर्ट, केंद्रित pull request, अनुवाद, दस्तावेज़ सुधार और प्लगइन योगदान का स्वागत है। + +- नई रिपोर्ट खोलने से पहले मौजूदा [issues](https://github.com/HakanSeven12/OpenCADStudio/issues) खोजें। +- प्रश्नों और विचारों के लिए [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) उपयोग करें। +- [सुरक्षा नीति](SECURITY.md) के अनुसार कमजोरियों की निजी रूप से रिपोर्ट करें। + +## परियोजना की वृद्धि + + + + + + Open CAD Studio स्टार और रिलीज़ डाउनलोड + + + +## परियोजना का समर्थन करें + +यदि Open CAD Studio आपके काम में सहायक है, तो [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) या [Patreon](https://www.patreon.com/HakanSeven12) के माध्यम से इसके निरंतर विकास का समर्थन करें। + +## लाइसेंस + +Open CAD Studio को [GNU General Public License v3.0](LICENSE) के अंतर्गत वितरित किया जाता है। diff --git a/README.hu.md b/README.hu.md new file mode 100644 index 000000000..c182f53a9 --- /dev/null +++ b/README.hu.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Open CAD Studio logó

+

Open CAD Studio

+

Nyílt forráskódú 2D rajzolás és 3D modellezés asztali gépre és webre, Rust nyelven.

+ +

+ Legújabb kiadás + Letöltések + GitHub-csillagok + GPL-3.0 licenc +

+ +

+ Webalkalmazás indítása · + Asztali alkalmazás letöltése · + Csatlakozás a beszélgetéshez +

+ +

Open CAD Studio munkaterület

+ +## Áttekintés + +Az Open CAD Studio többplatformos alkalmazás műszaki rajzoláshoz, elrendezések készítéséhez és testmodellezéshez. Natívan olvas és ír DWG- és DXF-rajzokat; az asztali és böngészős változat közös szerkesztőmagot használ. + +A projekt aktív fejlesztés alatt áll. A fontos gyártási rajzokról tarts biztonsági másolatot, a reprodukálható hibákat pedig jelentsd a [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues) oldalon. + +## Főbb jellemzők + +- **Natív rajzi munkafolyamat** — DWG- és DXF-fájlok megnyitása, szerkesztése, helyreállítása és mentése átalakító szolgáltatás nélkül. +- **Pontos 2D rajzolás** — vonalak, vonalláncok, görbék, spline-ok, sraffozások, tárgyraszterek, követés, rétegek, blokkok és külső referenciák. +- **Dokumentációs eszközök** — szöveg, méretezés, mutatóvonalak, tűrések, táblázatok, modelltér, papírtér, nézetablakok és nyomtatási stílusok. +- **Kernelalapú 3D modellezés** — testprimitívek, kihúzás, forgatás, söprés, loft, logikai műveletek és ACIS-entitások tesszellációja. +- **GPU-megjelenítés** — `wgpu` által gyorsított 2D és 3D nézetek, ortografikus és perspektivikus kamerákkal. +- **Bővíthető munkafolyamatok** — natív bővítmények, parancsfájlok, felület nélküli konverzió és soralapú JSON automatizálási API. + +

3D modell az Open CAD Studióban

+ +## Fájlmunkafolyamatok + +| Formátum vagy munkafolyamat | Támogatás | +| --- | --- | +| DWG | Olvasás és írás; verziózott mentési célok R14-től 2018-ig | +| DXF | Olvasás és írás; verziózott mentési célok R14-től 2018-ig | +| BAK / SV$ | Rajzi biztonsági másolatok és automatikus mentések megnyitása | +| OBJ | Poligonhálók importálása | +| LandXML | `CgPoint` felmérési pontok importálása | +| STL | 3D hálóadatok exportálása | +| STEP AP203 | 3D hálóadatok exportálása | +| PDF | Elrendezések és kijelölt geometria nyomtatása asztali gépen | +| CSV | Entitástulajdonságok adatainak kinyerése | +| CTB / STB | Nyomtatásistílus-táblák betöltése és szerkesztése | + +## Asztali vagy webes változat + +Használd a [webalkalmazást](https://www.opencadstudio.com) azonnali, telepítés nélküli hozzáféréshez. A rajzok a böngészőben választhatók ki és helyi letöltésként menthetők. + +Az asztali alkalmazást válaszd natív fájltársításokhoz, fájlkezelői bélyegképekhez, rendszernyomtatáshoz, PDF-kimenethez, külső bővítményekhez, parancsfájlokhoz és felület nélküli automatizáláshoz. Windows, Linux és Apple Silicon macOS rendszerhez érhetők el kiadások. + +## Telepítés + +Minden aktuális csomag a [legújabb kiadásból](https://github.com/HakanSeven12/OpenCADStudio/releases/latest) tölthető le. + +### Windows + +Válassz az aláírt x86-64 csomagok közül: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — ajánlott telepítő Start menü-parancsikonokkal, DWG/DXF-fájltársításokkal és rajzi bélyegképekkel. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — önálló alkalmazás, telepítés nélkül. + +### Linux + +Töltsd le az x86-64 AppImage fájlt, tedd futtathatóvá, majd indítsd el: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +A kiadott macOS-csomag az Apple Silicon rendszereket támogatja: + +1. Töltsd le az `OpenCADStudio-*-macos-arm64.dmg` fájlt. +2. Nyisd meg a lemezképet, és húzd az `OpenCADStudio.app` alkalmazást az **Applications** mappába. +3. Ha a Gatekeeper blokkolja az első indítást, engedélyezd az alkalmazást a **System Settings → Privacy & Security** alatt. + +Az alkalmazás ad hoc aláírással rendelkezik, de az Apple jelenleg nem hitelesítette közjegyzői eljárással. + +## Nyelvek + +Az Open CAD Studio követheti a rendszer nyelvét, vagy használhatja az alábbi 19 felületi nyelv egyikét: + +> Arab · Brazil portugál · Cseh · Holland · Angol · Finn · Francia · Német · Hindi · Magyar · Olasz · Japán · Koreai · Lengyel · Orosz · Egyszerűsített kínai · Spanyol · Hagyományos kínai · Török + +A nyelv az alkalmazás beállításaiban módosítható. **Rendszer** választásakor a böngészős változat is a böngésző előnyben részesített területi beállítását használja. + +## Fordítás forráskódból + +### Asztali alkalmazás + +Követelmények: + +- Git +- Aktuális stabil Rust-eszközlánc +- A platform grafikai és betűkészlet-fejlesztő könyvtárai + +Ubuntu vagy Debian alatt telepítsd a natív függőségeket: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Ezután fordítsd le: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +A létrejövő bináris a `target/release/OpenCADStudio` helyre kerül (Windows alatt `OpenCADStudio.exe`). + +### Web + +Telepítsd egyszer a WebAssembly célt és a fordítóeszközöket: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Indítsd el a fejlesztői kiszolgálót: + +```bash +trunk serve +``` + +## Automatizálás + +Az asztali bináris egyszeri konverziót és tartós, felület nélküli kiszolgálót támogat: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +A kiszolgáló soronként egy JSON-objektumot cserél a szabványos bemeneten/kimeneten vagy helyi TCP-foglalaton. Lásd az [automatizálási útmutatót](docs/automation/README.md) és a mellékelt [Python-klienst](docs/automation/ocs.py). + +## Bővítmények + +Az asztali bővítmények külön folyamatokban futnak, és a verziózott bővítmény-API-n keresztül kommunikálnak a gazdával. A böngészős változat nem tölt be natív bővítményeket. + +- [Bővítményarchitektúra](docs/plugin-architecture.md) +- [Bővítménysablon](docs/plugin-template/README.md) +- [Bővítményjegyzék](plugins/README.md) + +## Projektdokumentáció + +- [Automatizálási API](docs/automation/README.md) +- [Bővítményarchitektúra](docs/plugin-architecture.md) +- [Tesszellációs folyamat](docs/tessellation.md) +- [Biztonsági szabályzat](SECURITY.md) + +## Közreműködés + +Hibajelentéseket, célzott pull requesteket, fordításokat, dokumentációfejlesztést és bővítmény-hozzájárulásokat egyaránt várunk. + +- Új jelentés előtt keress a meglévő [issue-k](https://github.com/HakanSeven12/OpenCADStudio/issues) között. +- Kérdésekhez és ötletekhez használd a [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) oldalt. +- A sérülékenységeket a [biztonsági szabályzat](SECURITY.md) szerint, bizalmasan jelentsd. + +## A projekt növekedése + + + + + + Open CAD Studio csillagok és kiadásletöltések + + + +## A projekt támogatása + +Ha az Open CAD Studio segíti a munkádat, támogasd a további fejlesztést a [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) vagy a [Patreon](https://www.patreon.com/HakanSeven12) oldalán. + +## Licenc + +Az Open CAD Studio a [GNU General Public License v3.0](LICENSE) alatt kerül terjesztésre. diff --git a/README.it.md b/README.it.md new file mode 100644 index 000000000..6523e6240 --- /dev/null +++ b/README.it.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Logo di Open CAD Studio

+

Open CAD Studio

+

Disegno 2D e modellazione 3D open source per desktop e web, sviluppati in Rust.

+ +

+ Ultima versione + Download + Stelle GitHub + Licenza GPL-3.0 +

+ +

+ Avvia l’app web · + Scarica l’app desktop · + Partecipa alla discussione +

+ +

Area di lavoro di Open CAD Studio

+ +## Panoramica + +Open CAD Studio è un’applicazione multipiattaforma per disegno tecnico, impaginazione e modellazione solida. Legge e scrive nativamente disegni DWG e DXF, usando lo stesso nucleo di modifica nelle versioni desktop e browser. + +Il progetto è in sviluppo attivo. Conserva copie di sicurezza dei disegni di produzione importanti e segnala i problemi riproducibili tramite [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## Funzionalità principali + +- **Flusso di disegno nativo** — apri, modifica, recupera e salva file DWG e DXF senza servizi di conversione. +- **Disegno 2D preciso** — linee, polilinee, curve, spline, tratteggi, snap a oggetto, tracciamento, layer, blocchi e riferimenti esterni. +- **Strumenti di documentazione** — testo, quote, direttrici, tolleranze, tabelle, spazio modello, spazio carta, finestre e stili di stampa. +- **Modellazione 3D basata su kernel** — primitive solide, estrusione, rivoluzione, sweep, loft, operazioni booleane e tassellazione di entità ACIS. +- **Rendering GPU** — viste 2D e 3D accelerate tramite `wgpu`, con telecamere ortografiche e prospettiche. +- **Flussi estensibili** — plugin nativi, script di comandi, conversione headless e API di automazione JSON basata su righe. + +

Modello 3D in Open CAD Studio

+ +## Flussi dei file + +| Formato o flusso | Supporto | +| --- | --- | +| DWG | Lettura e scrittura; destinazioni di salvataggio versionate da R14 a 2018 | +| DXF | Lettura e scrittura; destinazioni di salvataggio versionate da R14 a 2018 | +| BAK / SV$ | Apertura di backup e file di salvataggio automatico | +| OBJ | Importazione di mesh poligonali | +| LandXML | Importazione di punti di rilievo `CgPoint` | +| STL | Esportazione di dati mesh 3D | +| STEP AP203 | Esportazione di dati mesh 3D | +| PDF | Stampa di layout e geometria selezionata sul desktop | +| CSV | Estrazione dei dati delle proprietà delle entità | +| CTB / STB | Caricamento e modifica delle tabelle degli stili di stampa | + +## Desktop o web + +Usa l’[app web](https://www.opencadstudio.com) per l’accesso immediato senza installazione. I disegni vengono selezionati nel browser e salvati come download locali. + +Usa l’applicazione desktop per associazioni file native, anteprime nel gestore file, stampa di sistema, output PDF, plugin esterni, script di comandi e automazione headless. Sono disponibili build per Windows, Linux e macOS Apple Silicon. + +## Installazione + +Scarica tutti i pacchetti aggiornati dall’[ultima versione](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +Scegli uno di questi pacchetti x86-64 firmati: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — programma di installazione consigliato con collegamenti nel menu Start, associazioni DWG/DXF e anteprime dei disegni. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — applicazione autonoma, senza installazione. + +### Linux + +Scarica l’AppImage x86-64, rendila eseguibile e avviala: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +Il pacchetto macOS pubblicato supporta Apple Silicon: + +1. Scarica `OpenCADStudio-*-macos-arm64.dmg`. +2. Apri l’immagine e trascina `OpenCADStudio.app` in **Applications**. +3. Se Gatekeeper blocca il primo avvio, autorizza l’app da **System Settings → Privacy & Security**. + +L’applicazione è firmata ad hoc, ma attualmente non è autenticata da Apple. + +## Lingue + +Open CAD Studio può seguire la lingua di sistema o usare una di queste 19 lingue dell’interfaccia: + +> Arabo · Portoghese brasiliano · Ceco · Olandese · Inglese · Finlandese · Francese · Tedesco · Hindi · Ungherese · Italiano · Giapponese · Coreano · Polacco · Russo · Cinese semplificato · Spagnolo · Cinese tradizionale · Turco + +Cambia la lingua nelle impostazioni dell’applicazione. La versione browser usa anche la lingua preferita del browser quando è selezionato **Sistema**. + +## Compilazione dal sorgente + +### Desktop + +Requisiti: + +- Git +- Toolchain Rust stabile corrente +- Librerie di sviluppo grafiche e dei font della piattaforma + +Su Ubuntu o Debian installa le dipendenze native: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Poi compila: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +Il binario viene scritto in `target/release/OpenCADStudio` (`OpenCADStudio.exe` su Windows). + +### Web + +Installa una volta il target WebAssembly e gli strumenti di compilazione: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Avvia il server di sviluppo: + +```bash +trunk serve +``` + +## Automazione + +Il binario desktop supporta conversioni singole e un server headless persistente: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +Il server scambia un oggetto JSON per riga tramite ingresso/uscita standard o un socket TCP locale. Consulta la [guida all’automazione](docs/automation/README.md) e il [client Python](docs/automation/ocs.py) incluso. + +## Plugin + +I plugin desktop vengono eseguiti in processi separati e comunicano con l’host tramite l’API dei plugin versionata. La build per browser non carica plugin nativi. + +- [Architettura dei plugin](docs/plugin-architecture.md) +- [Modello di plugin](docs/plugin-template/README.md) +- [Registro dei plugin](plugins/README.md) + +## Documentazione del progetto + +- [API di automazione](docs/automation/README.md) +- [Architettura dei plugin](docs/plugin-architecture.md) +- [Pipeline di tassellazione](docs/tessellation.md) +- [Politica di sicurezza](SECURITY.md) + +## Contribuire + +Segnalazioni di bug, pull request mirate, traduzioni, miglioramenti alla documentazione e contributi ai plugin sono benvenuti. + +- Cerca nelle [issue](https://github.com/HakanSeven12/OpenCADStudio/issues) esistenti prima di aprire una nuova segnalazione. +- Usa [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) per domande e idee. +- Segnala le vulnerabilità privatamente seguendo la [politica di sicurezza](SECURITY.md). + +## Crescita del progetto + + + + + + Stelle e download delle versioni di Open CAD Studio + + + +## Sostieni il progetto + +Se Open CAD Studio ti aiuta nel lavoro, sostieni lo sviluppo tramite [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) o [Patreon](https://www.patreon.com/HakanSeven12). + +## Licenza + +Open CAD Studio è distribuito con la [GNU General Public License v3.0](LICENSE). diff --git a/README.ja.md b/README.ja.md new file mode 100644 index 000000000..e75b6a3e1 --- /dev/null +++ b/README.ja.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Open CAD Studio ロゴ

+

Open CAD Studio

+

Rust で開発された、デスクトップと Web 向けのオープンソース 2D 製図・3D モデリングアプリケーション。

+ +

+ 最新リリース + ダウンロード数 + GitHub スター + GPL-3.0 ライセンス +

+ +

+ Web アプリを起動 · + デスクトップアプリをダウンロード · + ディスカッションに参加 +

+ +

Open CAD Studio ワークスペース

+ +## 概要 + +Open CAD Studio は、技術製図、レイアウト作業、ソリッドモデリングのためのクロスプラットフォームアプリケーションです。DWG および DXF 図面をネイティブに読み書きし、デスクトップ版とブラウザ版で共通の編集コアを使用します。 + +本プロジェクトは活発に開発されています。重要な実務図面はバックアップを保存し、再現可能な問題は [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues) で報告してください。 + +## 主な特長 + +- **ネイティブ図面ワークフロー** — 変換サービスを使わず、DWG/DXF ファイルを開く、編集する、復旧する、保存することができます。 +- **高精度な 2D 製図** — 線分、ポリライン、曲線、スプライン、ハッチング、オブジェクトスナップ、トラッキング、レイヤー、ブロック、外部参照。 +- **ドキュメント作成ツール** — テキスト、寸法、引出線、公差、表、モデル空間、ペーパー空間、ビューポート、印刷スタイル。 +- **カーネルベースの 3D モデリング** — ソリッドプリミティブ、押し出し、回転、スイープ、ロフト、ブーリアン演算、ACIS エンティティのテッセレーション。 +- **GPU レンダリング** — `wgpu` による高速な 2D/3D ビューポートと、正投影・透視投影カメラ。 +- **拡張可能なワークフロー** — ネイティブプラグイン、コマンドスクリプト、ヘッドレス変換、行単位の JSON 自動化 API。 + +

Open CAD Studio の 3D モデル

+ +## ファイルワークフロー + +| 形式またはワークフロー | 対応内容 | +| --- | --- | +| DWG | 読み書き。R14 から 2018 までのバージョンを指定して保存 | +| DXF | 読み書き。R14 から 2018 までのバージョンを指定して保存 | +| BAK / SV$ | 図面バックアップと自動保存ファイルを開く | +| OBJ | ポリゴンメッシュをインポート | +| LandXML | `CgPoint` 測量点をインポート | +| STL | 3D メッシュデータをエクスポート | +| STEP AP203 | 3D メッシュデータをエクスポート | +| PDF | デスクトップ版でレイアウトと選択ジオメトリを出力 | +| CSV | エンティティのプロパティデータを抽出 | +| CTB / STB | 印刷スタイルテーブルを読み込み、編集 | + +## デスクトップ版と Web 版 + +インストールせずにすぐ使うには [Web アプリ](https://www.opencadstudio.com) を利用してください。図面はブラウザで選択し、ローカルダウンロードとして保存されます。 + +ネイティブなファイル関連付け、ファイルマネージャーのサムネイル、システム印刷、PDF 出力、外部プラグイン、コマンドスクリプト、ヘッドレス自動化にはデスクトップ版を使用してください。Windows、Linux、Apple Silicon macOS 向けのリリースがあります。 + +## インストール + +現在のすべてのパッケージは [最新リリース](https://github.com/HakanSeven12/OpenCADStudio/releases/latest) からダウンロードできます。 + +### Windows + +署名済み x86-64 パッケージのいずれかを選択します。 + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — スタートメニューのショートカット、DWG/DXF 関連付け、図面サムネイルを含む推奨インストーラー。 +- `OpenCADStudio-*-windows-x86_64-portable.exe` — インストール不要のスタンドアロンアプリケーション。 + +### Linux + +x86-64 AppImage をダウンロードし、実行可能にして起動します。 + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +公開されている macOS パッケージは Apple Silicon に対応しています。 + +1. `OpenCADStudio-*-macos-arm64.dmg` をダウンロードします。 +2. イメージを開き、`OpenCADStudio.app` を **Applications** にドラッグします。 +3. Gatekeeper が初回起動をブロックした場合は、**System Settings → Privacy & Security** でアプリを許可します。 + +アプリケーションは ad hoc 署名されていますが、現在 Apple の公証は受けていません。 + +## 言語 + +Open CAD Studio はシステム言語に従うか、次の 19 のインターフェース言語を使用できます。 + +> アラビア語 · ブラジルポルトガル語 · チェコ語 · オランダ語 · 英語 · フィンランド語 · フランス語 · ドイツ語 · ヒンディー語 · ハンガリー語 · イタリア語 · 日本語 · 韓国語 · ポーランド語 · ロシア語 · 簡体字中国語 · スペイン語 · 繁体字中国語 · トルコ語 + +言語はアプリケーション設定から変更できます。**システム** を選ぶと、ブラウザ版もブラウザの優先ロケールを使用します。 + +## ソースからビルド + +### デスクトップ + +必要なもの: + +- Git +- 現在の安定版 Rust ツールチェーン +- 各プラットフォームのグラフィックスおよびフォント開発ライブラリ + +Ubuntu または Debian では、ネイティブ依存関係をインストールします。 + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +続いてビルドします。 + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +生成されたバイナリは `target/release/OpenCADStudio` に保存されます(Windows では `OpenCADStudio.exe`)。 + +### Web + +WebAssembly ターゲットとビルドツールを一度インストールします。 + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +開発サーバーを起動します。 + +```bash +trunk serve +``` + +## 自動化 + +デスクトップバイナリは、1 回限りの変換と常駐ヘッドレスサーバーに対応しています。 + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +サーバーは標準入出力またはローカル TCP ソケットを通じ、1 行につき 1 個の JSON オブジェクトを交換します。[自動化ガイド](docs/automation/README.md) と付属の [Python クライアント](docs/automation/ocs.py) を参照してください。 + +## プラグイン + +デスクトッププラグインは別プロセスで動作し、バージョン管理されたプラグイン API を介してホストと通信します。ブラウザ版はネイティブプラグインを読み込みません。 + +- [プラグインアーキテクチャ](docs/plugin-architecture.md) +- [プラグインテンプレート](docs/plugin-template/README.md) +- [プラグインレジストリ](plugins/README.md) + +## プロジェクト文書 + +- [自動化 API](docs/automation/README.md) +- [プラグインアーキテクチャ](docs/plugin-architecture.md) +- [テッセレーションパイプライン](docs/tessellation.md) +- [セキュリティポリシー](SECURITY.md) + +## コントリビューション + +バグ報告、目的を絞った pull request、翻訳、文書の改善、プラグインへの貢献を歓迎します。 + +- 新しい報告を作成する前に既存の [issues](https://github.com/HakanSeven12/OpenCADStudio/issues) を検索してください。 +- 質問やアイデアには [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) を利用してください。 +- 脆弱性は [セキュリティポリシー](SECURITY.md) に従って非公開で報告してください。 + +## プロジェクトの成長 + + + + + + Open CAD Studio のスター数とリリースダウンロード数 + + + +## プロジェクトを支援 + +Open CAD Studio が作業に役立つ場合は、[GitHub Sponsors](https://github.com/sponsors/HakanSeven12) または [Patreon](https://www.patreon.com/HakanSeven12) で継続的な開発をご支援ください。 + +## ライセンス + +Open CAD Studio は [GNU General Public License v3.0](LICENSE) の下で配布されています。 diff --git a/README.ko.md b/README.ko.md new file mode 100644 index 000000000..9a80faecf --- /dev/null +++ b/README.ko.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Open CAD Studio 로고

+

Open CAD Studio

+

Rust로 개발한 데스크톱 및 웹용 오픈 소스 2D 제도·3D 모델링 애플리케이션입니다.

+ +

+ 최신 릴리스 + 릴리스 다운로드 + GitHub 스타 + GPL-3.0 라이선스 +

+ +

+ 웹 앱 실행 · + 데스크톱 앱 다운로드 · + 토론 참여 +

+ +

Open CAD Studio 작업 공간

+ +## 개요 + +Open CAD Studio는 기술 도면 작성, 배치 작업, 솔리드 모델링을 위한 크로스 플랫폼 애플리케이션입니다. DWG 및 DXF 도면을 기본 형식으로 읽고 쓰며 데스크톱 버전과 브라우저 버전이 같은 편집 코어를 공유합니다. + +이 프로젝트는 활발히 개발되고 있습니다. 중요한 실무 도면은 백업을 보관하고 재현 가능한 문제는 [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues)에 보고해 주세요. + +## 주요 기능 + +- **네이티브 도면 작업 흐름** — 변환 서비스 없이 DWG 및 DXF 파일을 열고, 편집하고, 복구하고, 저장합니다. +- **정밀한 2D 제도** — 선, 폴리라인, 곡선, 스플라인, 해치, 객체 스냅, 추적, 레이어, 블록, 외부 참조를 지원합니다. +- **문서화 도구** — 문자, 치수, 지시선, 공차, 표, 모델 공간, 도면 공간, 뷰포트, 플롯 스타일을 제공합니다. +- **커널 기반 3D 모델링** — 솔리드 기본 형상, 돌출, 회전, 스윕, 로프트, 불리언 연산, ACIS 엔티티 테셀레이션을 지원합니다. +- **GPU 렌더링** — `wgpu`로 가속된 2D 및 3D 뷰포트와 직교·원근 카메라를 제공합니다. +- **확장 가능한 작업 흐름** — 네이티브 플러그인, 명령 스크립트, 헤드리스 변환, 줄 단위 JSON 자동화 API를 지원합니다. + +

Open CAD Studio의 3D 모델

+ +## 파일 작업 흐름 + +| 형식 또는 작업 흐름 | 지원 내용 | +| --- | --- | +| DWG | 읽기 및 쓰기, R14부터 2018까지 버전을 지정해 저장 | +| DXF | 읽기 및 쓰기, R14부터 2018까지 버전을 지정해 저장 | +| BAK / SV$ | 도면 백업 및 자동 저장 파일 열기 | +| OBJ | 폴리곤 메시 가져오기 | +| LandXML | `CgPoint` 측량점 가져오기 | +| STL | 3D 메시 데이터 내보내기 | +| STEP AP203 | 3D 메시 데이터 내보내기 | +| PDF | 데스크톱에서 배치와 선택한 형상 플롯 | +| CSV | 엔티티 속성 데이터 추출 | +| CTB / STB | 플롯 스타일 테이블 불러오기 및 편집 | + +## 데스크톱 또는 웹 + +설치 없이 바로 사용하려면 [웹 앱](https://www.opencadstudio.com)을 이용하세요. 도면은 브라우저에서 선택하고 로컬 다운로드로 저장합니다. + +네이티브 파일 연결, 파일 관리자 미리보기, 시스템 인쇄, PDF 출력, 외부 플러그인, 명령 스크립트, 헤드리스 자동화에는 데스크톱 애플리케이션을 사용하세요. Windows, Linux, Apple Silicon macOS용 릴리스가 제공됩니다. + +## 설치 + +현재 제공되는 모든 패키지는 [최신 릴리스](https://github.com/HakanSeven12/OpenCADStudio/releases/latest)에서 다운로드할 수 있습니다. + +### Windows + +서명된 x86-64 패키지 중 하나를 선택하세요. + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — 시작 메뉴 바로 가기, DWG/DXF 파일 연결, 도면 미리보기가 포함된 권장 설치 프로그램입니다. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — 설치가 필요 없는 독립 실행형 애플리케이션입니다. + +### Linux + +x86-64 AppImage를 다운로드하고 실행 권한을 부여한 뒤 실행하세요. + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +배포되는 macOS 패키지는 Apple Silicon을 지원합니다. + +1. `OpenCADStudio-*-macos-arm64.dmg`를 다운로드합니다. +2. 이미지를 열고 `OpenCADStudio.app`을 **Applications**로 드래그합니다. +3. Gatekeeper가 첫 실행을 차단하면 **System Settings → Privacy & Security**에서 앱을 허용합니다. + +애플리케이션은 임시 서명되어 있지만 현재 Apple 공증을 받지 않았습니다. + +## 언어 + +Open CAD Studio는 시스템 언어를 따르거나 다음 19개 인터페이스 언어 중 하나를 사용할 수 있습니다. + +> 아랍어 · 브라질 포르투갈어 · 체코어 · 네덜란드어 · 영어 · 핀란드어 · 프랑스어 · 독일어 · 힌디어 · 헝가리어 · 이탈리아어 · 일본어 · 한국어 · 폴란드어 · 러시아어 · 중국어 간체 · 스페인어 · 중국어 번체 · 터키어 + +애플리케이션 설정에서 언어를 변경할 수 있습니다. **시스템**을 선택하면 브라우저 버전도 브라우저의 기본 로캘을 사용합니다. + +## 소스에서 빌드 + +### 데스크톱 + +요구 사항: + +- Git +- 최신 안정 Rust 툴체인 +- 플랫폼별 그래픽 및 글꼴 개발 라이브러리 + +Ubuntu 또는 Debian에서는 네이티브 종속성을 설치하세요. + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +그런 다음 빌드합니다. + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +생성된 바이너리는 `target/release/OpenCADStudio`에 저장됩니다(Windows에서는 `OpenCADStudio.exe`). + +### 웹 + +WebAssembly 대상과 빌드 도구를 한 번 설치하세요. + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +개발 서버를 시작합니다. + +```bash +trunk serve +``` + +## 자동화 + +데스크톱 바이너리는 일회성 변환과 지속형 헤드리스 서버를 지원합니다. + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +서버는 표준 입출력 또는 로컬 TCP 소켓을 통해 한 줄에 하나의 JSON 객체를 교환합니다. [자동화 안내서](docs/automation/README.md)와 포함된 [Python 클라이언트](docs/automation/ocs.py)를 참고하세요. + +## 플러그인 + +데스크톱 플러그인은 별도 프로세스에서 실행되며 버전이 지정된 플러그인 API를 통해 호스트와 통신합니다. 브라우저 빌드는 네이티브 플러그인을 불러오지 않습니다. + +- [플러그인 아키텍처](docs/plugin-architecture.md) +- [플러그인 템플릿](docs/plugin-template/README.md) +- [플러그인 레지스트리](plugins/README.md) + +## 프로젝트 문서 + +- [자동화 API](docs/automation/README.md) +- [플러그인 아키텍처](docs/plugin-architecture.md) +- [테셀레이션 파이프라인](docs/tessellation.md) +- [보안 정책](SECURITY.md) + +## 기여하기 + +버그 보고, 목적이 분명한 pull request, 번역, 문서 개선, 플러그인 기여를 환영합니다. + +- 새 보고서를 열기 전에 기존 [issues](https://github.com/HakanSeven12/OpenCADStudio/issues)를 검색하세요. +- 질문과 아이디어는 [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions)를 이용하세요. +- 취약점은 [보안 정책](SECURITY.md)에 따라 비공개로 보고하세요. + +## 프로젝트 성장 + + + + + + Open CAD Studio 스타 및 릴리스 다운로드 + + + +## 프로젝트 후원 + +Open CAD Studio가 업무에 도움이 된다면 [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) 또는 [Patreon](https://www.patreon.com/HakanSeven12)을 통해 지속적인 개발을 후원해 주세요. + +## 라이선스 + +Open CAD Studio는 [GNU General Public License v3.0](LICENSE)에 따라 배포됩니다. diff --git a/README.md b/README.md index ae71fb7c2..e3ca2d49c 100644 --- a/README.md +++ b/README.md @@ -1,171 +1,225 @@ -# Open CAD Studio +

+ English · + Português (Brasil) · + Čeština · + Nederlands · + Français · + Suomi · + Deutsch · + Magyar · + Italiano · + 日本語 · + 한국어 · + Polski · + Русский · + 简体中文 · + Español · + 繁體中文 · + Türkçe · + हिन्दी · + العربية +

-[![Release](https://img.shields.io/github/v/release/HakanSeven12/OpenCADStudio)](https://github.com/HakanSeven12/OpenCADStudio/releases/latest) -[![Downloads](https://img.shields.io/github/downloads/HakanSeven12/OpenCADStudio/total)](https://github.com/HakanSeven12/OpenCADStudio/releases) -[![Stars](https://img.shields.io/github/stars/HakanSeven12/OpenCADStudio)](https://github.com/HakanSeven12/OpenCADStudio/stargazers) -[![License](https://img.shields.io/github/license/HakanSeven12/OpenCADStudio)](LICENSE) +

+ Open CAD Studio logo +

-OCS is a CAD application for 2D drafting and 3D modeling, built with Rust. Reads and writes DWG and DXF files natively. Also has a web version now! +

Open CAD Studio

-## OCS Web try it in the browser: https://hakanseven12.github.io/OpenCADStudio/ +

+ Open-source 2D drafting and 3D modeling for desktop and web, built with Rust. +

-resim -resim2 +

+ Latest release + Release downloads + GitHub stars + GPL-3.0 license +

-## Features +

+ Launch the web app + · + Download the desktop app + · + Join the discussion +

-### File Formats -- **DWG** read/write (R13 through R2018) -- **DXF** read/write (R13 through R2018) -- **STL** export (`STLOUT` / `EXPORTSTL`) -- **STEP AP203** export (`STEPOUT`) -- **OBJ** import (`IMPORTOBJ`) -- **PDF** export (plot layouts to PDF) -- **WBLOCK** — write selected entities or a block to an external file -- **XREF** — attach, reload, and auto-resolve external references +

+ Open CAD Studio workspace +

-### 2D Drafting -| Command | Description | -|---------|-------------| -| `LINE`, `PLINE`, `RECTANG`, `POLYGON` | Basic geometry | -| `CIRCLE`, `ARC`, `ELLIPSE`, `SPLINE` | Curves | -| `HATCH`, `HATCHEDIT` | Hatch fills with pattern, scale, angle editing | -| `OFFSET`, `TRIM`, `EXTEND`, `FILLET` | Modify geometry (supports lines, arcs, ellipses, polylines, splines) | -| `BREAK`, `STRETCH`, `LENGTHEN` | Shape editing | -| `ARRAY`, `MIRROR`, `MOVE`, `COPY`, `ROTATE`, `SCALE` | Transformations | -| `EXPLODE` | Explode blocks, dimensions, polylines, mlines | -| `DDEDIT` | Double-click text editing | -| `MASSPROP` | Area, perimeter, centroid of selected entities | +## Overview -### 3D Modeling -| Command | Description | -|---------|-------------| -| `BOX`, `SPHERE`, `CYLINDER` | Solid primitives | -| `EXTRUDE`, `REVOLVE` | Profile-based solids | -| `LOFT` | Ruled-surface loft through cross-sections | -| `SWEEP` | Sweep a profile along a path | -| `ARRAY3D` | 3D array | -| ACIS tessellation | Renders `3DSOLID`, `REGION`, and `BODY` entities | +Open CAD Studio is a cross-platform application for technical drawing, layout work, and solid modeling. It reads and writes DWG and DXF drawings natively, with a shared editing core across the desktop and browser versions. -### Annotations & Dimensions -- **Dimensions**: Linear, Aligned, Angular, Radial, Diameter, Ordinate — with full `DIMSTYLE` support (`DIMASZ`, `DIMSCALE`, `DIMEXO`, `DIMEXE`, and more) -- **Text**: `MTEXT`, `TEXT`, `DTEXT` with font browser (`STYLE DIALOG`) -- **Leaders**: `MLEADER` with straight and spline path types; `MLEADERSTYLE` manager -- **Tolerances**: GD&T feature control frames -- **Tables**: `TABLE` entity render; `TABLESTYLE` manager -- **MLine**: `MLINE` entity with `MLSTYLE` manager and `EXPLODE` support +The project is under active development. Keep backups of important production drawings and report reproducible problems through [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues). -### Paper Space & Layouts -- Multi-tab layout system with model space and unlimited paper space tabs -- **Viewport projection**: Model content correctly projected into paper-space viewport rectangles -- **Camera persistence**: View position and zoom saved per layout; restored on file open and tab switch -- **Correct paper size**: Physical paper dimensions read from embedded PlotSettings (not drawing limits) -- Inline MSPACE overlay — enter a viewport with double-click; edit model entities in place -- `VPORTS` — preset viewport configurations (single, 2H, 2V, 4-way) -- `LAYOUTMANAGER` / `LAYOUTPANEL` — GUI layout manager -- `PLOTSTYLEPANEL` / `STYLESMANAGER` — plot style table editor (CTB/STB) -- `PRINT` — send layout to system printer +## Highlights -### Blocks & References -- `INSERT` with attribute prompting (`ATTREQ`) -- `ATTEDIT` — edit block attribute values interactively -- `REFEDIT` / `REFCLOSE` — in-place block reference editing -- `XREF` — attach, reload, and resolve external DWG/DXF references -- `DATAEXTRACTION` — export entity property data to CSV +- **Native drawing workflow** — open, edit, recover, and save DWG and DXF files without a conversion service. +- **Precise 2D drafting** — lines, polylines, curves, splines, hatches, object snaps, tracking, layers, blocks, and external references. +- **Documentation tools** — text, dimensions, leaders, tolerances, tables, model space, paper space, viewports, and plot styles. +- **Kernel-backed 3D modeling** — solid primitives, extrusion, revolution, sweep, loft, Boolean operations, and ACIS entity tessellation. +- **GPU rendering** — accelerated 2D and 3D viewports through `wgpu`, with orthographic and perspective cameras. +- **Extensible workflows** — native plugins, command scripts, headless conversion, and a line-based JSON automation API. -### Snapping & Precision -- Object snaps: Endpoint, Midpoint, Center, Node, Quadrant, Intersection, Perpendicular, Tangent, Nearest, Insertion, and more -- Ellipse arc endpoints, LWPolyline arc midpoints, Hatch boundary points -- **Object Snap Tracking** (`OTRACK` / `F11`) -- **Polar Tracking** with configurable angle increment -- **Dynamic Input** overlay (`DYNMODE` / `F12`) -- Grid snap with adaptive spacing -- Command history navigation (↑ / ↓) +

+ 3D model in Open CAD Studio +

-### Rendering -- GPU-accelerated via WebGPU (wgpu) -- 4× MSAA anti-aliasing -- Orthographic and perspective camera -- ViewCube with face/edge/corner snapping -- **Wide polylines**: LWPolyline and Polyline2D filled strokes -- **Raster images**: GPU-textured quad pipeline (`IMAGE` command) -- **Wipeout**: Solid fill masking -- **Complex linetypes**: Text and shape elements rendered in linetype patterns -- White/black entity colors adapt to background luminance -- Per-viewport background color (`BACKGROUND`) -- Visual style selector (Wireframe, Shaded, etc.) -- X-ray ghost pass for selected wires occluded by geometry +## File workflows -### UI -- Modular ribbon interface — Home, Insert, Annotate, View, Manage, Layout -- Command line with autocomplete and history -- Layer Manager with per-viewport freeze columns -- Properties panel -- `COLORSCHEME` — runtime theme switching -- `SHORTCUTS` — keyboard shortcuts panel -- `SPLINEDIT` — close, open, reverse spline control points -- UCS icon with 3D foreshortening and axis labels +| Format or workflow | Support | +| --- | --- | +| DWG | Read and write; versioned save targets from R14 through 2018 | +| DXF | Read and write; versioned save targets from R14 through 2018 | +| BAK / SV$ | Open drawing backups and autosave files | +| OBJ | Import polygon meshes | +| LandXML | Import `CgPoint` survey points | +| STL | Export 3D mesh data | +| STEP AP203 | Export 3D mesh data | +| PDF | Plot layouts and selected geometry on desktop | +| CSV | Extract entity property data | +| CTB / STB | Load and edit plot style tables | -## Installation +## Desktop or web -### Linux (AppImage) +Use the [web app](https://www.opencadstudio.com) for immediate access with no installation. Drawings are selected through the browser and saved as local downloads. -Download `OpenCADStudio-*-linux-x86_64.AppImage` from the [latest release](https://github.com/HakanSeven12/OpenCADStudio/releases/latest), then: +Use the desktop application for native file associations, file-manager thumbnails, system printing, PDF output, external plugins, command scripts, and headless automation. Release builds are available for Windows, Linux, and Apple Silicon macOS. + +## Install + +Download all current packages from the [latest release](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +Choose one of these signed x86-64 packages: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — recommended installer with Start Menu shortcuts, DWG/DXF file associations, and drawing thumbnails. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — standalone application; no installation required. + +### Linux + +Download the x86-64 AppImage, make it executable, and run it: ```bash chmod +x OpenCADStudio-*-linux-x86_64.AppImage ./OpenCADStudio-*-linux-x86_64.AppImage ``` -No installation required — runs directly on any modern Linux distribution. +### macOS -### Windows +The published macOS package supports Apple Silicon: -Download `OpenCADStudio-*-windows-x86_64.exe` from the [latest release](https://github.com/HakanSeven12/OpenCADStudio/releases/latest) and run it directly. Windows SmartScreen may show "Windows protected your PC" because the binary is not yet code-signed — click **More info → Run anyway**. +1. Download `OpenCADStudio-*-macos-arm64.dmg`. +2. Open the image and drag `OpenCADStudio.app` into **Applications**. +3. If Gatekeeper blocks the first launch, approve the app from **System Settings → Privacy & Security**. -### macOS (Apple Silicon) +The application is ad-hoc signed but is not currently notarized by Apple. -Apple Silicon (M-series) only; Intel macOS isn't built. The app is ad-hoc signed but **not Apple-notarised** (notarisation requires a paid Apple Developer ID), so macOS Gatekeeper guards the first launch. Pick whichever path is easiest: +## Languages -**Option A — Homebrew (recommended):** +Open CAD Studio can follow the system language or use any of these 19 interface languages: + +> Arabic · Brazilian Portuguese · Czech · Dutch · English · Finnish · French · German · Hindi · Hungarian · Italian · Japanese · Korean · Polish · Russian · Simplified Chinese · Spanish · Traditional Chinese · Turkish + +Change the language from the application settings. The browser version also uses the browser's preferred locale when **System** is selected. + +## Build from source + +### Desktop + +Requirements: + +- Git +- Current stable Rust toolchain +- Platform graphics and font development libraries + +On Ubuntu or Debian, install the native dependencies with: ```bash -brew install --cask --no-quarantine \ - https://raw.githubusercontent.com/HakanSeven12/OpenCADStudio/main/packaging/homebrew/open-cad-studio.rb +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev ``` -`--no-quarantine` lets Gatekeeper skip the unsigned-app prompt. See [`packaging/homebrew/`](packaging/homebrew/) for publishing this as a `brew tap`. - -**Option B — manual .dmg:** - -Download `OpenCADStudio-*-macos-arm64.dmg` from the [latest release](https://github.com/HakanSeven12/OpenCADStudio/releases/latest), open it, and drag `OpenCADStudio.app` to `/Applications`. If the first launch is blocked, clear the quarantine flag once: - -```bash -xattr -dr com.apple.quarantine /Applications/OpenCADStudio.app -``` - -On older macOS you can instead right-click `OpenCADStudio.app → Open` and confirm; on macOS Ventura and later, approve it via **System Settings → Privacy & Security → Open Anyway**. - -### Build from Source - -Requirements: Rust 1.75+ +Then build and run: ```bash git clone https://github.com/HakanSeven12/OpenCADStudio.git cd OpenCADStudio cargo build --release --bin OpenCADStudio -./target/release/OpenCADStudio ``` -## Star History + +The resulting binary is written to `target/release/OpenCADStudio` (`OpenCADStudio.exe` on Windows). + +### Web + +Install the WebAssembly target and build tools once: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Start the development server: + +```bash +trunk serve +``` + +## Automation + +The desktop binary supports one-shot conversion and a persistent headless server: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +The server exchanges one JSON object per line over standard input/output or a local TCP socket. See the [automation guide](docs/automation/README.md) and the included [Python client](docs/automation/ocs.py). + +## Plugins + +Desktop plugins run in separate processes and communicate with the host through the versioned plugin API. The browser build does not load native plugins. + +- [Plugin architecture](docs/plugin-architecture.md) +- [Plugin template](docs/plugin-template/README.md) +- [Plugin registry](plugins/README.md) + +## Project documentation + +- [Automation API](docs/automation/README.md) +- [Plugin architecture](docs/plugin-architecture.md) +- [Tessellation pipeline](docs/tessellation.md) +- [Security policy](SECURITY.md) + +## Contributing + +Bug reports, focused pull requests, translations, documentation improvements, and plugin contributions are welcome. + +- Search existing [issues](https://github.com/HakanSeven12/OpenCADStudio/issues) before opening a new report. +- Use [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) for questions and ideas. +- Report vulnerabilities privately by following the [security policy](SECURITY.md). + +## Project growth - - - - OpenCADStudio GitHub star history - + + + + Open CAD Studio stars and release downloads + +## Support the project + +If Open CAD Studio helps your work, support continued development through [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) or [Patreon](https://www.patreon.com/HakanSeven12). + ## License -GPL-3.0-only — see [LICENSE](LICENSE) +Open CAD Studio is distributed under the [GNU General Public License v3.0](LICENSE). diff --git a/README.nl.md b/README.nl.md new file mode 100644 index 000000000..3481c79ea --- /dev/null +++ b/README.nl.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Logo van Open CAD Studio

+

Open CAD Studio

+

Open-source 2D-tekenen en 3D-modelleren voor desktop en web, gebouwd met Rust.

+ +

+ Nieuwste versie + Downloads + GitHub-sterren + GPL-3.0-licentie +

+ +

+ Webapp starten · + Desktopapp downloaden · + Deelnemen aan discussies +

+ +

Werkruimte van Open CAD Studio

+ +## Overzicht + +Open CAD Studio is een platformonafhankelijke toepassing voor technisch tekenen, lay-outwerk en solid modeling. DWG- en DXF-tekeningen worden rechtstreeks gelezen en geschreven; de desktop- en browserversie delen dezelfde bewerkingskern. + +Het project wordt actief ontwikkeld. Bewaar reservekopieën van belangrijke productietekeningen en meld reproduceerbare problemen via [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## Hoogtepunten + +- **Native tekenworkflow** — DWG- en DXF-bestanden openen, bewerken, herstellen en opslaan zonder conversiedienst. +- **Nauwkeurig 2D-tekenen** — lijnen, polylijnen, krommen, splines, arceringen, object-snaps, tracking, lagen, blokken en externe referenties. +- **Documentatiegereedschap** — tekst, maatvoering, verwijslijnen, toleranties, tabellen, modelruimte, papierruimte, viewports en plotstijlen. +- **Kernelgestuurd 3D-modelleren** — solid-primitieven, extrusie, omwenteling, sweep, loft, Booleaanse bewerkingen en tessellatie van ACIS-entiteiten. +- **GPU-rendering** — versnelde 2D- en 3D-viewports via `wgpu`, met orthografische en perspectiefcamera's. +- **Uitbreidbare workflows** — native plug-ins, opdrachtscripts, headless conversie en een regelgebaseerde JSON-automatiserings-API. + +

3D-model in Open CAD Studio

+ +## Bestandsworkflows + +| Formaat of workflow | Ondersteuning | +| --- | --- | +| DWG | Lezen en schrijven; opslagdoelen van R14 tot en met 2018 | +| DXF | Lezen en schrijven; opslagdoelen van R14 tot en met 2018 | +| BAK / SV$ | Back-ups en automatisch opgeslagen tekeningen openen | +| OBJ | Polygonale meshes importeren | +| LandXML | `CgPoint`-meetpunten importeren | +| STL | 3D-meshgegevens exporteren | +| STEP AP203 | 3D-meshgegevens exporteren | +| PDF | Lay-outs en geselecteerde geometrie plotten op desktop | +| CSV | Eigenschapsgegevens van entiteiten extraheren | +| CTB / STB | Plotstijltabellen laden en bewerken | + +## Desktop of web + +Gebruik de [webapp](https://www.opencadstudio.com) voor directe toegang zonder installatie. Tekeningen worden via de browser geselecteerd en als lokale downloads opgeslagen. + +Gebruik de desktoptoepassing voor native bestandskoppelingen, miniaturen in bestandsbeheer, systeemafdrukken, PDF-uitvoer, externe plug-ins, opdrachtscripts en headless automatisering. Uitgaven zijn beschikbaar voor Windows, Linux en Apple Silicon macOS. + +## Installatie + +Download alle actuele pakketten van de [nieuwste uitgave](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +Kies een van deze ondertekende x86-64-pakketten: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — aanbevolen installatieprogramma met snelkoppelingen in het menu Start, DWG/DXF-bestandskoppelingen en tekenminiaturen. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — zelfstandige toepassing; geen installatie nodig. + +### Linux + +Download de x86-64 AppImage, maak deze uitvoerbaar en start hem: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +Het gepubliceerde macOS-pakket ondersteunt Apple Silicon: + +1. Download `OpenCADStudio-*-macos-arm64.dmg`. +2. Open de schijfkopie en sleep `OpenCADStudio.app` naar **Applications**. +3. Als Gatekeeper de eerste start blokkeert, keur de app dan goed via **System Settings → Privacy & Security**. + +De toepassing is ad hoc ondertekend, maar momenteel niet door Apple genotariseerd. + +## Talen + +Open CAD Studio kan de systeemtaal volgen of een van deze 19 interfacetalen gebruiken: + +> Arabisch · Braziliaans-Portugees · Tsjechisch · Nederlands · Engels · Fins · Frans · Duits · Hindi · Hongaars · Italiaans · Japans · Koreaans · Pools · Russisch · Vereenvoudigd Chinees · Spaans · Traditioneel Chinees · Turks + +Wijzig de taal in de toepassingsinstellingen. De browserversie gebruikt ook de voorkeurstaal van de browser wanneer **Systeem** is geselecteerd. + +## Bouwen vanuit de broncode + +### Desktop + +Vereisten: + +- Git +- Huidige stabiele Rust-toolchain +- Platformbibliotheken voor grafische en lettertypeontwikkeling + +Installeer op Ubuntu of Debian de native afhankelijkheden: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Bouw daarna: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +Het binaire bestand wordt geschreven naar `target/release/OpenCADStudio` (`OpenCADStudio.exe` op Windows). + +### Web + +Installeer eenmalig het WebAssembly-doel en de buildgereedschappen: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Start de ontwikkelserver: + +```bash +trunk serve +``` + +## Automatisering + +Het desktopprogramma ondersteunt eenmalige conversie en een permanente headless server: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +De server wisselt per regel één JSON-object uit via standaardinvoer/-uitvoer of een lokale TCP-socket. Bekijk de [automatiseringshandleiding](docs/automation/README.md) en de meegeleverde [Python-client](docs/automation/ocs.py). + +## Plug-ins + +Desktopplug-ins draaien in afzonderlijke processen en communiceren via de geversioneerde plug-in-API met de host. De browserbuild laadt geen native plug-ins. + +- [Plug-inarchitectuur](docs/plugin-architecture.md) +- [Plug-insjabloon](docs/plugin-template/README.md) +- [Plug-inregister](plugins/README.md) + +## Projectdocumentatie + +- [Automatiserings-API](docs/automation/README.md) +- [Plug-inarchitectuur](docs/plugin-architecture.md) +- [Tessellatiepijplijn](docs/tessellation.md) +- [Beveiligingsbeleid](SECURITY.md) + +## Bijdragen + +Bugmeldingen, gerichte pull requests, vertalingen, documentatieverbeteringen en plug-inbijdragen zijn welkom. + +- Doorzoek bestaande [issues](https://github.com/HakanSeven12/OpenCADStudio/issues) voordat je een nieuwe melding opent. +- Gebruik [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) voor vragen en ideeën. +- Meld kwetsbaarheden privé volgens het [beveiligingsbeleid](SECURITY.md). + +## Projectgroei + + + + + + Sterren en uitgavedownloads van Open CAD Studio + + + +## Steun het project + +Als Open CAD Studio je werk helpt, steun dan de verdere ontwikkeling via [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) of [Patreon](https://www.patreon.com/HakanSeven12). + +## Licentie + +Open CAD Studio wordt verspreid onder de [GNU General Public License v3.0](LICENSE). diff --git a/README.pl.md b/README.pl.md new file mode 100644 index 000000000..bd4ce6296 --- /dev/null +++ b/README.pl.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Logo Open CAD Studio

+

Open CAD Studio

+

Otwarte narzędzie do rysowania 2D i modelowania 3D na komputerze i w przeglądarce, napisane w Rust.

+ +

+ Najnowsze wydanie + Pobrania + Gwiazdki GitHub + Licencja GPL-3.0 +

+ +

+ Uruchom aplikację webową · + Pobierz aplikację komputerową · + Dołącz do dyskusji +

+ +

Obszar roboczy Open CAD Studio

+ +## Przegląd + +Open CAD Studio to wieloplatformowa aplikacja do rysunku technicznego, pracy z układami i modelowania brył. Natywnie odczytuje i zapisuje rysunki DWG i DXF, a wersje komputerowa i przeglądarkowa korzystają ze wspólnego rdzenia edycji. + +Projekt jest aktywnie rozwijany. Zachowuj kopie zapasowe ważnych rysunków produkcyjnych, a powtarzalne problemy zgłaszaj przez [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## Najważniejsze funkcje + +- **Natywna praca z rysunkiem** — otwieranie, edycja, odzyskiwanie i zapis plików DWG oraz DXF bez usługi konwersji. +- **Precyzyjne rysowanie 2D** — linie, polilinie, krzywe, splajny, kreskowania, przyciąganie do obiektów, śledzenie, warstwy, bloki i odnośniki zewnętrzne. +- **Narzędzia dokumentacji** — tekst, wymiary, odnośniki, tolerancje, tabele, obszar modelu, obszar papieru, rzutnie i style wydruku. +- **Modelowanie 3D oparte na jądrze** — prymitywy bryłowe, wyciąganie, obrót, przeciągnięcie, loft, operacje logiczne i teselacja elementów ACIS. +- **Renderowanie GPU** — przyspieszone widoki 2D i 3D przez `wgpu`, z kamerą ortograficzną i perspektywiczną. +- **Rozszerzalne przepływy pracy** — natywne wtyczki, skrypty poleceń, konwersja bez interfejsu i wierszowe API automatyzacji JSON. + +

Model 3D w Open CAD Studio

+ +## Przepływy plików + +| Format lub przepływ | Obsługa | +| --- | --- | +| DWG | Odczyt i zapis; wersjonowane cele zapisu od R14 do 2018 | +| DXF | Odczyt i zapis; wersjonowane cele zapisu od R14 do 2018 | +| BAK / SV$ | Otwieranie kopii zapasowych i plików autozapisu | +| OBJ | Import siatek wielokątów | +| LandXML | Import punktów pomiarowych `CgPoint` | +| STL | Eksport danych siatki 3D | +| STEP AP203 | Eksport danych siatki 3D | +| PDF | Drukowanie układów i wybranej geometrii w wersji komputerowej | +| CSV | Wyodrębnianie danych właściwości elementów | +| CTB / STB | Wczytywanie i edycja tabel stylów wydruku | + +## Komputer czy przeglądarka + +Użyj [aplikacji webowej](https://www.opencadstudio.com), aby rozpocząć bez instalacji. Rysunki wybiera się w przeglądarce i zapisuje jako lokalne pliki do pobrania. + +Użyj aplikacji komputerowej do natywnych skojarzeń plików, miniatur w menedżerze plików, drukowania systemowego, wyjścia PDF, zewnętrznych wtyczek, skryptów poleceń i automatyzacji bez interfejsu. Wydania są dostępne dla Windows, Linux i macOS na Apple Silicon. + +## Instalacja + +Wszystkie aktualne pakiety pobierzesz z [najnowszego wydania](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +Wybierz jeden z podpisanych pakietów x86-64: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — zalecany instalator ze skrótami menu Start, skojarzeniami DWG/DXF i miniaturami rysunków. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — samodzielna aplikacja niewymagająca instalacji. + +### Linux + +Pobierz x86-64 AppImage, nadaj mu uprawnienia wykonywania i uruchom: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +Opublikowany pakiet macOS obsługuje Apple Silicon: + +1. Pobierz `OpenCADStudio-*-macos-arm64.dmg`. +2. Otwórz obraz i przeciągnij `OpenCADStudio.app` do **Applications**. +3. Jeśli Gatekeeper zablokuje pierwsze uruchomienie, zatwierdź aplikację w **System Settings → Privacy & Security**. + +Aplikacja jest podpisana ad hoc, ale obecnie nie jest notaryzowana przez Apple. + +## Języki + +Open CAD Studio może korzystać z języka systemu lub jednego z 19 języków interfejsu: + +> Arabski · Portugalski brazylijski · Czeski · Niderlandzki · Angielski · Fiński · Francuski · Niemiecki · Hindi · Węgierski · Włoski · Japoński · Koreański · Polski · Rosyjski · Chiński uproszczony · Hiszpański · Chiński tradycyjny · Turecki + +Język zmienisz w ustawieniach aplikacji. Gdy wybrano **System**, wersja przeglądarkowa używa także preferowanych ustawień regionalnych przeglądarki. + +## Budowanie ze źródeł + +### Wersja komputerowa + +Wymagania: + +- Git +- Aktualny stabilny zestaw narzędzi Rust +- Biblioteki programistyczne grafiki i czcionek dla platformy + +W Ubuntu lub Debianie zainstaluj natywne zależności: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Następnie zbuduj: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +Powstały plik wykonywalny znajduje się w `target/release/OpenCADStudio` (`OpenCADStudio.exe` w Windows). + +### Web + +Jednorazowo zainstaluj cel WebAssembly i narzędzia budowania: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Uruchom serwer programistyczny: + +```bash +trunk serve +``` + +## Automatyzacja + +Program komputerowy obsługuje jednorazową konwersję i trwały serwer bez interfejsu: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +Serwer wymienia jeden obiekt JSON na wiersz przez standardowe wejście/wyjście lub lokalne gniazdo TCP. Zobacz [przewodnik automatyzacji](docs/automation/README.md) i dołączonego [klienta Python](docs/automation/ocs.py). + +## Wtyczki + +Wtyczki komputerowe działają w oddzielnych procesach i komunikują się z hostem przez wersjonowane API wtyczek. Wersja przeglądarkowa nie ładuje natywnych wtyczek. + +- [Architektura wtyczek](docs/plugin-architecture.md) +- [Szablon wtyczki](docs/plugin-template/README.md) +- [Rejestr wtyczek](plugins/README.md) + +## Dokumentacja projektu + +- [API automatyzacji](docs/automation/README.md) +- [Architektura wtyczek](docs/plugin-architecture.md) +- [Potok teselacji](docs/tessellation.md) +- [Zasady bezpieczeństwa](SECURITY.md) + +## Współtworzenie + +Mile widziane są zgłoszenia błędów, ukierunkowane pull requesty, tłumaczenia, ulepszenia dokumentacji i wkład we wtyczki. + +- Przed otwarciem nowego zgłoszenia przeszukaj istniejące [issues](https://github.com/HakanSeven12/OpenCADStudio/issues). +- Do pytań i pomysłów używaj [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions). +- Luki zgłaszaj prywatnie zgodnie z [zasadami bezpieczeństwa](SECURITY.md). + +## Rozwój projektu + + + + + + Gwiazdki i pobrania wydań Open CAD Studio + + + +## Wesprzyj projekt + +Jeśli Open CAD Studio pomaga w Twojej pracy, wesprzyj dalszy rozwój przez [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) lub [Patreon](https://www.patreon.com/HakanSeven12). + +## Licencja + +Open CAD Studio jest rozpowszechniane na warunkach [GNU General Public License v3.0](LICENSE). diff --git a/README.pt-BR.md b/README.pt-BR.md new file mode 100644 index 000000000..24562454a --- /dev/null +++ b/README.pt-BR.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Logotipo do Open CAD Studio

+

Open CAD Studio

+

Desenho 2D e modelagem 3D de código aberto para desktop e web, desenvolvido em Rust.

+ +

+ Versão mais recente + Downloads das versões + Estrelas no GitHub + Licença GPL-3.0 +

+ +

+ Abrir o aplicativo web · + Baixar o aplicativo desktop · + Participar da discussão +

+ +

Área de trabalho do Open CAD Studio

+ +## Visão geral + +Open CAD Studio é um aplicativo multiplataforma para desenho técnico, trabalho com layouts e modelagem de sólidos. Ele lê e grava desenhos DWG e DXF nativamente, com um núcleo de edição compartilhado entre as versões desktop e web. + +O projeto está em desenvolvimento ativo. Mantenha cópias de segurança de desenhos de produção importantes e relate problemas reproduzíveis pelo [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## Destaques + +- **Fluxo de desenho nativo** — abra, edite, recupere e salve arquivos DWG e DXF sem serviço de conversão. +- **Desenho 2D preciso** — linhas, polilinhas, curvas, splines, hachuras, snaps a objetos, rastreamento, camadas, blocos e referências externas. +- **Ferramentas de documentação** — texto, cotas, chamadas, tolerâncias, tabelas, espaço do modelo, espaço do papel, viewports e estilos de plotagem. +- **Modelagem 3D com kernel** — primitivas sólidas, extrusão, revolução, varredura, loft, operações booleanas e tesselação de entidades ACIS. +- **Renderização por GPU** — viewports 2D e 3D aceleradas por `wgpu`, com câmeras ortográfica e em perspectiva. +- **Fluxos extensíveis** — plugins nativos, scripts de comandos, conversão sem interface e API de automação JSON baseada em linhas. + +

Modelo 3D no Open CAD Studio

+ +## Fluxos de arquivos + +| Formato ou fluxo | Suporte | +| --- | --- | +| DWG | Leitura e gravação; destinos de salvamento versionados de R14 a 2018 | +| DXF | Leitura e gravação; destinos de salvamento versionados de R14 a 2018 | +| BAK / SV$ | Abertura de backups e arquivos de salvamento automático | +| OBJ | Importação de malhas poligonais | +| LandXML | Importação de pontos topográficos `CgPoint` | +| STL | Exportação de dados de malha 3D | +| STEP AP203 | Exportação de dados de malha 3D | +| PDF | Plotagem de layouts e geometria selecionada no desktop | +| CSV | Extração de dados de propriedades das entidades | +| CTB / STB | Carregamento e edição de tabelas de estilos de plotagem | + +## Desktop ou web + +Use o [aplicativo web](https://www.opencadstudio.com) para acesso imediato, sem instalação. Os desenhos são selecionados pelo navegador e salvos como downloads locais. + +Use o aplicativo desktop para associações nativas de arquivos, miniaturas no gerenciador de arquivos, impressão do sistema, saída em PDF, plugins externos, scripts de comandos e automação sem interface. Há versões para Windows, Linux e macOS com Apple Silicon. + +## Instalação + +Baixe todos os pacotes atuais na [versão mais recente](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +Escolha um destes pacotes x86-64 assinados: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — instalador recomendado com atalhos no menu Iniciar, associações DWG/DXF e miniaturas de desenhos. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — aplicativo independente; não requer instalação. + +### Linux + +Baixe o AppImage x86-64, torne-o executável e execute: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +O pacote publicado para macOS é compatível com Apple Silicon: + +1. Baixe `OpenCADStudio-*-macos-arm64.dmg`. +2. Abra a imagem e arraste `OpenCADStudio.app` para **Applications**. +3. Se o Gatekeeper bloquear a primeira abertura, autorize o aplicativo em **System Settings → Privacy & Security**. + +O aplicativo possui assinatura ad hoc, mas atualmente não é notarizado pela Apple. + +## Idiomas + +Open CAD Studio pode seguir o idioma do sistema ou usar um destes 19 idiomas de interface: + +> Árabe · Português do Brasil · Tcheco · Holandês · Inglês · Finlandês · Francês · Alemão · Hindi · Húngaro · Italiano · Japonês · Coreano · Polonês · Russo · Chinês simplificado · Espanhol · Chinês tradicional · Turco + +Altere o idioma nas configurações do aplicativo. A versão web também usa a localidade preferida do navegador quando **Sistema** está selecionado. + +## Compilar a partir do código-fonte + +### Desktop + +Requisitos: + +- Git +- Toolchain estável atual do Rust +- Bibliotecas de desenvolvimento gráfico e de fontes da plataforma + +No Ubuntu ou Debian, instale as dependências nativas: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Depois compile: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +O binário resultante é gravado em `target/release/OpenCADStudio` (`OpenCADStudio.exe` no Windows). + +### Web + +Instale uma vez o alvo WebAssembly e as ferramentas de compilação: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Inicie o servidor de desenvolvimento: + +```bash +trunk serve +``` + +## Automação + +O binário desktop oferece conversão única e um servidor persistente sem interface: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +O servidor troca um objeto JSON por linha pela entrada/saída padrão ou por um socket TCP local. Consulte o [guia de automação](docs/automation/README.md) e o [cliente Python](docs/automation/ocs.py) incluído. + +## Plugins + +Plugins desktop são executados em processos separados e se comunicam com o host pela API de plugins versionada. A versão para navegador não carrega plugins nativos. + +- [Arquitetura de plugins](docs/plugin-architecture.md) +- [Modelo de plugin](docs/plugin-template/README.md) +- [Registro de plugins](plugins/README.md) + +## Documentação do projeto + +- [API de automação](docs/automation/README.md) +- [Arquitetura de plugins](docs/plugin-architecture.md) +- [Pipeline de tesselação](docs/tessellation.md) +- [Política de segurança](SECURITY.md) + +## Como contribuir + +Relatos de erros, pull requests focados, traduções, melhorias na documentação e contribuições de plugins são bem-vindos. + +- Pesquise as [issues](https://github.com/HakanSeven12/OpenCADStudio/issues) existentes antes de abrir um novo relato. +- Use [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) para perguntas e ideias. +- Relate vulnerabilidades em particular seguindo a [política de segurança](SECURITY.md). + +## Crescimento do projeto + + + + + + Estrelas e downloads de versões do Open CAD Studio + + + +## Apoie o projeto + +Se o Open CAD Studio ajuda no seu trabalho, apoie o desenvolvimento contínuo pelo [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) ou [Patreon](https://www.patreon.com/HakanSeven12). + +## Licença + +Open CAD Studio é distribuído sob a [Licença Pública Geral GNU v3.0](LICENSE). diff --git a/README.ru.md b/README.ru.md new file mode 100644 index 000000000..212a3c062 --- /dev/null +++ b/README.ru.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Логотип Open CAD Studio

+

Open CAD Studio

+

Открытое приложение для 2D-черчения и 3D-моделирования на компьютере и в браузере, созданное на Rust.

+ +

+ Последняя версия + Загрузки + Звёзды GitHub + Лицензия GPL-3.0 +

+ +

+ Запустить веб-приложение · + Скачать приложение для компьютера · + Присоединиться к обсуждению +

+ +

Рабочее пространство Open CAD Studio

+ +## Обзор + +Open CAD Studio — кроссплатформенное приложение для технического черчения, работы с листами и моделирования тел. Оно напрямую читает и записывает чертежи DWG и DXF; версии для компьютера и браузера используют общее ядро редактирования. + +Проект активно развивается. Храните резервные копии важных рабочих чертежей и сообщайте о воспроизводимых проблемах через [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues). + +## Основные возможности + +- **Прямая работа с чертежами** — открытие, редактирование, восстановление и сохранение DWG и DXF без службы преобразования. +- **Точное 2D-черчение** — линии, полилинии, кривые, сплайны, штриховки, объектные привязки, отслеживание, слои, блоки и внешние ссылки. +- **Средства оформления** — текст, размеры, выноски, допуски, таблицы, пространство модели, пространство листа, видовые экраны и стили печати. +- **3D-моделирование на геометрическом ядре** — примитивы тел, выдавливание, вращение, заметание, лофт, булевы операции и тесселяция объектов ACIS. +- **Отрисовка на GPU** — ускоренные 2D- и 3D-виды через `wgpu`, ортографическая и перспективная камеры. +- **Расширяемые процессы** — нативные плагины, сценарии команд, преобразование без интерфейса и построчный JSON API автоматизации. + +

3D-модель в Open CAD Studio

+ +## Работа с файлами + +| Формат или процесс | Поддержка | +| --- | --- | +| DWG | Чтение и запись; сохранение в версиях от R14 до 2018 | +| DXF | Чтение и запись; сохранение в версиях от R14 до 2018 | +| BAK / SV$ | Открытие резервных копий и файлов автосохранения | +| OBJ | Импорт полигональных сеток | +| LandXML | Импорт точек съёмки `CgPoint` | +| STL | Экспорт данных 3D-сетки | +| STEP AP203 | Экспорт данных 3D-сетки | +| PDF | Печать листов и выбранной геометрии в версии для компьютера | +| CSV | Извлечение данных свойств объектов | +| CTB / STB | Загрузка и редактирование таблиц стилей печати | + +## Компьютер или браузер + +Используйте [веб-приложение](https://www.opencadstudio.com), чтобы начать без установки. Чертежи выбираются в браузере и сохраняются как локальные загрузки. + +Используйте приложение для компьютера, если нужны системные ассоциации файлов, миниатюры в файловом менеджере, системная печать, вывод PDF, внешние плагины, сценарии команд и автоматизация без интерфейса. Выпуски доступны для Windows, Linux и macOS на Apple Silicon. + +## Установка + +Все актуальные пакеты доступны в [последнем выпуске](https://github.com/HakanSeven12/OpenCADStudio/releases/latest). + +### Windows + +Выберите один из подписанных пакетов x86-64: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — рекомендуемый установщик с ярлыками в меню «Пуск», ассоциациями DWG/DXF и миниатюрами чертежей. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — автономное приложение, не требующее установки. + +### Linux + +Скачайте x86-64 AppImage, сделайте его исполняемым и запустите: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +Опубликованный пакет macOS поддерживает Apple Silicon: + +1. Скачайте `OpenCADStudio-*-macos-arm64.dmg`. +2. Откройте образ и перетащите `OpenCADStudio.app` в **Applications**. +3. Если Gatekeeper блокирует первый запуск, разрешите приложение в **System Settings → Privacy & Security**. + +Приложение имеет специальную подпись, но в настоящее время не нотарифицировано Apple. + +## Языки + +Open CAD Studio может следовать языку системы или использовать один из 19 языков интерфейса: + +> Арабский · Бразильский португальский · Чешский · Нидерландский · Английский · Финский · Французский · Немецкий · Хинди · Венгерский · Итальянский · Японский · Корейский · Польский · Русский · Упрощённый китайский · Испанский · Традиционный китайский · Турецкий + +Язык меняется в настройках приложения. При выборе **Система** версия для браузера также использует предпочтительную локаль браузера. + +## Сборка из исходного кода + +### Приложение для компьютера + +Требования: + +- Git +- Текущая стабильная цепочка инструментов Rust +- Библиотеки разработки графики и шрифтов для платформы + +В Ubuntu или Debian установите нативные зависимости: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Затем выполните сборку: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +Готовый файл находится в `target/release/OpenCADStudio` (`OpenCADStudio.exe` в Windows). + +### Web + +Один раз установите цель WebAssembly и инструменты сборки: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Запустите сервер разработки: + +```bash +trunk serve +``` + +## Автоматизация + +Программа для компьютера поддерживает однократное преобразование и постоянный сервер без интерфейса: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +Сервер обменивается одним объектом JSON в строке через стандартный ввод/вывод или локальный TCP-сокет. См. [руководство по автоматизации](docs/automation/README.md) и включённый [клиент Python](docs/automation/ocs.py). + +## Плагины + +Плагины для компьютера работают в отдельных процессах и взаимодействуют с основной программой через версионированный API. Браузерная сборка не загружает нативные плагины. + +- [Архитектура плагинов](docs/plugin-architecture.md) +- [Шаблон плагина](docs/plugin-template/README.md) +- [Реестр плагинов](plugins/README.md) + +## Документация проекта + +- [API автоматизации](docs/automation/README.md) +- [Архитектура плагинов](docs/plugin-architecture.md) +- [Конвейер тесселяции](docs/tessellation.md) +- [Политика безопасности](SECURITY.md) + +## Участие в проекте + +Приветствуются сообщения об ошибках, целевые pull request, переводы, улучшения документации и вклад в плагины. + +- Перед созданием нового сообщения выполните поиск по существующим [issues](https://github.com/HakanSeven12/OpenCADStudio/issues). +- Для вопросов и идей используйте [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions). +- Сообщайте об уязвимостях конфиденциально в соответствии с [политикой безопасности](SECURITY.md). + +## Рост проекта + + + + + + Звёзды и загрузки выпусков Open CAD Studio + + + +## Поддержать проект + +Если Open CAD Studio помогает в вашей работе, поддержите дальнейшую разработку через [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) или [Patreon](https://www.patreon.com/HakanSeven12). + +## Лицензия + +Open CAD Studio распространяется по [GNU General Public License v3.0](LICENSE). diff --git a/README.tr.md b/README.tr.md new file mode 100644 index 000000000..6e1edd837 --- /dev/null +++ b/README.tr.md @@ -0,0 +1,197 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Open CAD Studio logosu

+ +

Open CAD Studio

+ +

Rust ile geliştirilen, masaüstü ve web için açık kaynaklı 2B çizim ve 3B modelleme uygulaması.

+ +

+ Son sürüm + Sürüm indirmeleri + GitHub yıldızları + GPL-3.0 lisansı +

+ +

+ Web uygulamasını aç · + Masaüstü uygulamasını indir · + Tartışmalara katıl +

+ +

Open CAD Studio çalışma alanı

+ +## Genel bakış + +Open CAD Studio; teknik çizim, pafta düzenleme ve katı modelleme için platformlar arası bir uygulamadır. DWG ve DXF çizimlerini doğrudan okur ve yazar; masaüstü ile tarayıcı sürümleri aynı düzenleme çekirdeğini paylaşır. + +Proje aktif olarak geliştirilmektedir. Önemli üretim çizimlerinin yedeklerini saklayın ve tekrarlanabilir sorunları [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues) üzerinden bildirin. + +## Öne çıkanlar + +- **Doğrudan çizim iş akışı** — dönüştürme hizmeti olmadan DWG ve DXF dosyalarını açın, düzenleyin, kurtarın ve kaydedin. +- **Hassas 2B çizim** — çizgiler, çoklu çizgiler, eğriler, spline'lar, taramalar, nesne yakalama, izleme, katmanlar, bloklar ve dış referanslar. +- **Belgelendirme araçları** — metin, ölçülendirme, kılavuzlar, toleranslar, tablolar, model alanı, kağıt alanı, görünüm pencereleri ve çizim stilleri. +- **Çekirdek destekli 3B modelleme** — katı temel şekiller, ekstrüzyon, döndürme, süpürme, loft, Boolean işlemleri ve ACIS varlık mozaiklemesi. +- **GPU ile görüntüleme** — `wgpu` üzerinden hızlandırılmış 2B ve 3B görünüm pencereleri; ortografik ve perspektif kameralar. +- **Genişletilebilir iş akışları** — yerel eklentiler, komut betikleri, arayüzsüz dönüştürme ve satır tabanlı JSON otomasyon API'si. + +

Open CAD Studio içinde 3B model

+ +## Dosya iş akışları + +| Biçim veya iş akışı | Destek | +| --- | --- | +| DWG | Okuma ve yazma; R14 ile 2018 arasında sürümlü kaydetme hedefleri | +| DXF | Okuma ve yazma; R14 ile 2018 arasında sürümlü kaydetme hedefleri | +| BAK / SV$ | Çizim yedeklerini ve otomatik kayıt dosyalarını açma | +| OBJ | Çokgen ağlarını içe aktarma | +| LandXML | `CgPoint` ölçüm noktalarını içe aktarma | +| STL | 3B ağ verilerini dışa aktarma | +| STEP AP203 | 3B ağ verilerini dışa aktarma | +| PDF | Masaüstünde paftaları ve seçili geometrileri çizdirme | +| CSV | Varlık özellik verilerini çıkarma | +| CTB / STB | Çizim stili tablolarını yükleme ve düzenleme | + +## Masaüstü mü, web mi? + +Kurulum yapmadan hemen başlamak için [web uygulamasını](https://www.opencadstudio.com) kullanın. Çizimler tarayıcı üzerinden seçilir ve yerel indirme olarak kaydedilir. + +Yerel dosya ilişkilendirmeleri, dosya yöneticisi küçük resimleri, sistem yazdırması, PDF çıktısı, harici eklentiler, komut betikleri ve arayüzsüz otomasyon için masaüstü uygulamasını kullanın. Windows, Linux ve Apple Silicon macOS için sürüm derlemeleri sunulur. + +## Kurulum + +Güncel paketlerin tamamını [son sürümden](https://github.com/HakanSeven12/OpenCADStudio/releases/latest) indirin. + +### Windows + +İmzalı x86-64 paketlerinden birini seçin: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — Başlat menüsü kısayolları, DWG/DXF dosya ilişkilendirmeleri ve çizim küçük resimleri içeren önerilen kurucu. +- `OpenCADStudio-*-windows-x86_64-portable.exe` — kurulum gerektirmeyen bağımsız uygulama. + +### Linux + +x86-64 AppImage dosyasını indirin, çalıştırılabilir yapın ve başlatın: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +Yayımlanan macOS paketi Apple Silicon'ı destekler: + +1. `OpenCADStudio-*-macos-arm64.dmg` dosyasını indirin. +2. Disk imajını açın ve `OpenCADStudio.app` uygulamasını **Applications** klasörüne sürükleyin. +3. Gatekeeper ilk çalıştırmayı engellerse uygulamayı **System Settings → Privacy & Security** bölümünden onaylayın. + +Uygulama geçici imzaya sahiptir ancak şu anda Apple tarafından noterlenmemiştir. + +## Diller + +Open CAD Studio sistem dilini izleyebilir veya şu 19 arayüz dilinden birini kullanabilir: + +> Arapça · Brezilya Portekizcesi · Çekçe · Felemenkçe · İngilizce · Fince · Fransızca · Almanca · Hintçe · Macarca · İtalyanca · Japonca · Korece · Lehçe · Rusça · Basitleştirilmiş Çince · İspanyolca · Geleneksel Çince · Türkçe + +Dili uygulama ayarlarından değiştirin. **Sistem** seçildiğinde tarayıcı sürümü de tarayıcının tercih ettiği yerel ayarı kullanır. + +## Kaynaktan derleme + +### Masaüstü + +Gereksinimler: + +- Git +- Güncel kararlı Rust araç zinciri +- Platforma ait grafik ve yazı tipi geliştirme kitaplıkları + +Ubuntu veya Debian'da yerel bağımlılıkları yükleyin: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +Ardından derleyin: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +Oluşturulan ikili dosya `target/release/OpenCADStudio` konumuna yazılır (Windows'ta `OpenCADStudio.exe`). + +### Web + +WebAssembly hedefini ve derleme araçlarını bir kez yükleyin: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +Geliştirme sunucusunu başlatın: + +```bash +trunk serve +``` + +## Otomasyon + +Masaüstü ikili dosyası tek seferlik dönüştürmeyi ve kalıcı arayüzsüz sunucuyu destekler: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +Sunucu standart giriş/çıkış veya yerel TCP soketi üzerinden satır başına bir JSON nesnesi alışverişi yapar. [Otomasyon kılavuzuna](docs/automation/README.md) ve birlikte verilen [Python istemcisine](docs/automation/ocs.py) bakın. + +## Eklentiler + +Masaüstü eklentileri ayrı işlemlerde çalışır ve sürümlü eklenti API'si üzerinden ana uygulamayla iletişim kurar. Tarayıcı derlemesi yerel eklentileri yüklemez. + +- [Eklenti mimarisi](docs/plugin-architecture.md) +- [Eklenti şablonu](docs/plugin-template/README.md) +- [Eklenti kayıt defteri](plugins/README.md) + +## Proje belgeleri + +- [Otomasyon API'si](docs/automation/README.md) +- [Eklenti mimarisi](docs/plugin-architecture.md) +- [Mozaikleme işlem hattı](docs/tessellation.md) +- [Güvenlik politikası](SECURITY.md) + +## Katkıda bulunma + +Hata bildirimleri, odaklı pull request'ler, çeviriler, belge iyileştirmeleri ve eklenti katkıları kabul edilir. + +- Yeni bildirim açmadan önce mevcut [issue'larda](https://github.com/HakanSeven12/OpenCADStudio/issues) arama yapın. +- Sorular ve fikirler için [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions) bölümünü kullanın. +- Güvenlik açıklarını [güvenlik politikasını](SECURITY.md) izleyerek özel olarak bildirin. + +## Proje büyümesi + + + + + + Open CAD Studio yıldızları ve sürüm indirmeleri + + + +## Projeyi destekleyin + +Open CAD Studio işinize yardımcı oluyorsa geliştirmeyi [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) veya [Patreon](https://www.patreon.com/HakanSeven12) üzerinden destekleyin. + +## Lisans + +Open CAD Studio, [GNU Genel Kamu Lisansı v3.0](LICENSE) kapsamında dağıtılır. diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 000000000..ef140cc85 --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Open CAD Studio 标志

+

Open CAD Studio

+

使用 Rust 构建、面向桌面端和网页端的开源二维绘图与三维建模应用。

+ +

+ 最新版本 + 版本下载量 + GitHub 星标 + GPL-3.0 许可证 +

+ +

+ 启动网页应用 · + 下载桌面应用 · + 参与讨论 +

+ +

Open CAD Studio 工作区

+ +## 概览 + +Open CAD Studio 是一款用于技术绘图、布局设计和实体建模的跨平台应用。它可原生读取和写入 DWG 与 DXF 图纸,桌面版和浏览器版共享同一套编辑核心。 + +本项目正在积极开发中。请保留重要生产图纸的备份,并通过 [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues) 报告可重现的问题。 + +## 主要功能 + +- **原生图纸工作流** — 无需转换服务即可打开、编辑、恢复和保存 DWG/DXF 文件。 +- **精确二维绘图** — 支持直线、多段线、曲线、样条曲线、填充、对象捕捉、追踪、图层、块和外部参照。 +- **文档工具** — 支持文字、标注、引线、公差、表格、模型空间、图纸空间、视口和打印样式。 +- **几何内核支持的三维建模** — 支持实体基本体、拉伸、旋转、扫掠、放样、布尔运算以及 ACIS 实体细分。 +- **GPU 渲染** — 通过 `wgpu` 加速二维和三维视口,并支持正交与透视相机。 +- **可扩展工作流** — 支持原生插件、命令脚本、无界面转换和逐行 JSON 自动化 API。 + +

Open CAD Studio 中的三维模型

+ +## 文件工作流 + +| 格式或工作流 | 支持情况 | +| --- | --- | +| DWG | 读取和写入;可选择 R14 至 2018 的保存版本 | +| DXF | 读取和写入;可选择 R14 至 2018 的保存版本 | +| BAK / SV$ | 打开图纸备份和自动保存文件 | +| OBJ | 导入多边形网格 | +| LandXML | 导入 `CgPoint` 测量点 | +| STL | 导出三维网格数据 | +| STEP AP203 | 导出三维网格数据 | +| PDF | 在桌面版中输出布局和选定几何图形 | +| CSV | 提取实体属性数据 | +| CTB / STB | 加载和编辑打印样式表 | + +## 桌面版或网页版 + +使用[网页应用](https://www.opencadstudio.com)可无需安装立即开始。图纸通过浏览器选择,并以本地下载文件保存。 + +需要原生文件关联、文件管理器缩略图、系统打印、PDF 输出、外部插件、命令脚本和无界面自动化时,请使用桌面应用。项目提供 Windows、Linux 和 Apple Silicon macOS 版本。 + +## 安装 + +请从[最新版本](https://github.com/HakanSeven12/OpenCADStudio/releases/latest)下载所有当前软件包。 + +### Windows + +请选择一个已签名的 x86-64 软件包: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — 推荐的安装程序,包含开始菜单快捷方式、DWG/DXF 文件关联和图纸缩略图。 +- `OpenCADStudio-*-windows-x86_64-portable.exe` — 无需安装的独立应用程序。 + +### Linux + +下载 x86-64 AppImage,添加执行权限并运行: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +发布的 macOS 软件包支持 Apple Silicon: + +1. 下载 `OpenCADStudio-*-macos-arm64.dmg`。 +2. 打开镜像,将 `OpenCADStudio.app` 拖入 **Applications**。 +3. 如果 Gatekeeper 阻止首次启动,请在 **System Settings → Privacy & Security** 中允许该应用。 + +应用采用临时签名,但目前尚未通过 Apple 公证。 + +## 语言 + +Open CAD Studio 可以跟随系统语言,也可以使用以下 19 种界面语言: + +> 阿拉伯语 · 巴西葡萄牙语 · 捷克语 · 荷兰语 · 英语 · 芬兰语 · 法语 · 德语 · 印地语 · 匈牙利语 · 意大利语 · 日语 · 韩语 · 波兰语 · 俄语 · 简体中文 · 西班牙语 · 繁体中文 · 土耳其语 + +可在应用设置中更改语言。选择**系统**时,浏览器版也会使用浏览器的首选区域设置。 + +## 从源代码构建 + +### 桌面版 + +要求: + +- Git +- 当前稳定版 Rust 工具链 +- 对应平台的图形和字体开发库 + +在 Ubuntu 或 Debian 上安装原生依赖: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +然后构建: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +生成的二进制文件位于 `target/release/OpenCADStudio`(Windows 上为 `OpenCADStudio.exe`)。 + +### 网页版 + +一次性安装 WebAssembly 目标和构建工具: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +启动开发服务器: + +```bash +trunk serve +``` + +## 自动化 + +桌面二进制程序支持一次性转换和持续运行的无界面服务器: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +服务器通过标准输入/输出或本地 TCP 套接字逐行交换 JSON 对象。请参阅[自动化指南](docs/automation/README.md)和随附的 [Python 客户端](docs/automation/ocs.py)。 + +## 插件 + +桌面插件运行于独立进程中,并通过有版本管理的插件 API 与主程序通信。浏览器版本不会加载原生插件。 + +- [插件架构](docs/plugin-architecture.md) +- [插件模板](docs/plugin-template/README.md) +- [插件注册表](plugins/README.md) + +## 项目文档 + +- [自动化 API](docs/automation/README.md) +- [插件架构](docs/plugin-architecture.md) +- [细分处理流程](docs/tessellation.md) +- [安全策略](SECURITY.md) + +## 参与贡献 + +欢迎提交错误报告、目标明确的 pull request、翻译、文档改进和插件贡献。 + +- 提交新报告前请搜索现有 [issues](https://github.com/HakanSeven12/OpenCADStudio/issues)。 +- 问题和想法请使用 [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions)。 +- 请按照[安全策略](SECURITY.md)私下报告漏洞。 + +## 项目成长 + + + + + + Open CAD Studio 星标和版本下载量 + + + +## 支持项目 + +如果 Open CAD Studio 对您的工作有所帮助,请通过 [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) 或 [Patreon](https://www.patreon.com/HakanSeven12) 支持持续开发。 + +## 许可证 + +Open CAD Studio 根据 [GNU General Public License v3.0](LICENSE) 分发。 diff --git a/README.zh-TW.md b/README.zh-TW.md new file mode 100644 index 000000000..bfc7c1a95 --- /dev/null +++ b/README.zh-TW.md @@ -0,0 +1,195 @@ +

+ English · Português (Brasil) · Čeština · Nederlands · Français · Suomi · Deutsch · Magyar · Italiano · 日本語 · 한국어 · Polski · Русский · 简体中文 · Español · 繁體中文 · Türkçe · हिन्दी · العربية +

+ +

Open CAD Studio 標誌

+

Open CAD Studio

+

使用 Rust 建構、適用於桌面與網頁的開放原始碼二維繪圖和三維建模應用程式。

+ +

+ 最新版本 + 版本下載量 + GitHub 星號 + GPL-3.0 授權 +

+ +

+ 啟動網頁應用程式 · + 下載桌面應用程式 · + 參與討論 +

+ +

Open CAD Studio 工作區

+ +## 概覽 + +Open CAD Studio 是用於技術繪圖、配置作業和實體建模的跨平台應用程式。它能原生讀取與寫入 DWG 和 DXF 圖面,桌面版與瀏覽器版共用相同的編輯核心。 + +本專案正積極開發中。請保留重要生產圖面的備份,並透過 [GitHub Issues](https://github.com/HakanSeven12/OpenCADStudio/issues) 回報可重現的問題。 + +## 主要功能 + +- **原生圖面工作流程** — 不需轉換服務即可開啟、編輯、復原及儲存 DWG/DXF 檔案。 +- **精確二維繪圖** — 支援直線、聚合線、曲線、雲形線、填充線、物件鎖點、追蹤、圖層、圖塊和外部參考。 +- **文件工具** — 支援文字、標註、引線、公差、表格、模型空間、圖紙空間、視埠和出圖型式。 +- **幾何核心支援的三維建模** — 支援實體基本形、擠出、旋轉、掃掠、疊層、布林運算和 ACIS 圖元細分。 +- **GPU 轉譯** — 透過 `wgpu` 加速二維和三維視埠,並支援正投影與透視相機。 +- **可擴充工作流程** — 支援原生外掛程式、指令碼、無介面轉換和逐行 JSON 自動化 API。 + +

Open CAD Studio 中的三維模型

+ +## 檔案工作流程 + +| 格式或工作流程 | 支援內容 | +| --- | --- | +| DWG | 讀取與寫入;可選擇 R14 至 2018 的儲存版本 | +| DXF | 讀取與寫入;可選擇 R14 至 2018 的儲存版本 | +| BAK / SV$ | 開啟圖面備份與自動儲存檔案 | +| OBJ | 匯入多邊形網格 | +| LandXML | 匯入 `CgPoint` 測量點 | +| STL | 匯出三維網格資料 | +| STEP AP203 | 匯出三維網格資料 | +| PDF | 在桌面版中出圖配置和選取的幾何圖形 | +| CSV | 擷取圖元屬性資料 | +| CTB / STB | 載入與編輯出圖型式表 | + +## 桌面版或網頁版 + +使用[網頁應用程式](https://www.opencadstudio.com)即可不需安裝立即開始。圖面透過瀏覽器選取,並儲存為本機下載檔案。 + +需要原生檔案關聯、檔案管理員縮圖、系統列印、PDF 輸出、外部外掛程式、指令碼和無介面自動化時,請使用桌面應用程式。專案提供 Windows、Linux 和 Apple Silicon macOS 版本。 + +## 安裝 + +請從[最新版本](https://github.com/HakanSeven12/OpenCADStudio/releases/latest)下載所有目前的套件。 + +### Windows + +請選擇一個已簽署的 x86-64 套件: + +- `OpenCADStudio-*-windows-x86_64-installer.msi` — 建議的安裝程式,包含開始功能表捷徑、DWG/DXF 檔案關聯和圖面縮圖。 +- `OpenCADStudio-*-windows-x86_64-portable.exe` — 不需安裝的獨立應用程式。 + +### Linux + +下載 x86-64 AppImage,加入執行權限並執行: + +```bash +chmod +x OpenCADStudio-*-linux-x86_64.AppImage +./OpenCADStudio-*-linux-x86_64.AppImage +``` + +### macOS + +發佈的 macOS 套件支援 Apple Silicon: + +1. 下載 `OpenCADStudio-*-macos-arm64.dmg`。 +2. 開啟映像檔,將 `OpenCADStudio.app` 拖入 **Applications**。 +3. 如果 Gatekeeper 阻止首次啟動,請在 **System Settings → Privacy & Security** 中允許此應用程式。 + +應用程式採用臨時簽章,但目前尚未通過 Apple 公證。 + +## 語言 + +Open CAD Studio 可以跟隨系統語言,也可以使用以下 19 種介面語言: + +> 阿拉伯文 · 巴西葡萄牙文 · 捷克文 · 荷蘭文 · 英文 · 芬蘭文 · 法文 · 德文 · 北印度文 · 匈牙利文 · 義大利文 · 日文 · 韓文 · 波蘭文 · 俄文 · 簡體中文 · 西班牙文 · 繁體中文 · 土耳其文 + +可在應用程式設定中變更語言。選擇**系統**時,瀏覽器版也會使用瀏覽器的偏好地區設定。 + +## 從原始碼建構 + +### 桌面版 + +需求: + +- Git +- 目前穩定版 Rust 工具鏈 +- 對應平台的圖形與字型開發程式庫 + +在 Ubuntu 或 Debian 上安裝原生相依套件: + +```bash +sudo apt update +sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ + libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ + libfreetype6-dev +``` + +接著建構: + +```bash +git clone https://github.com/HakanSeven12/OpenCADStudio.git +cd OpenCADStudio +cargo build --release --bin OpenCADStudio +``` + +產生的二進位檔位於 `target/release/OpenCADStudio`(Windows 上為 `OpenCADStudio.exe`)。 + +### 網頁版 + +一次安裝 WebAssembly 目標和建構工具: + +```bash +rustup target add wasm32-unknown-unknown +cargo install trunk wasm-bindgen-cli +``` + +啟動開發伺服器: + +```bash +trunk serve +``` + +## 自動化 + +桌面二進位程式支援單次轉換和持續執行的無介面伺服器: + +```bash +OpenCADStudio --export input.dwg output.dxf +OpenCADStudio --serve +OpenCADStudio --serve --port 4242 +``` + +伺服器透過標準輸入/輸出或本機 TCP 通訊端逐行交換 JSON 物件。請參閱[自動化指南](docs/automation/README.md)和隨附的 [Python 用戶端](docs/automation/ocs.py)。 + +## 外掛程式 + +桌面外掛程式在獨立處理程序中執行,並透過有版本管理的外掛程式 API 與主程式通訊。瀏覽器版本不會載入原生外掛程式。 + +- [外掛程式架構](docs/plugin-architecture.md) +- [外掛程式範本](docs/plugin-template/README.md) +- [外掛程式登錄檔](plugins/README.md) + +## 專案文件 + +- [自動化 API](docs/automation/README.md) +- [外掛程式架構](docs/plugin-architecture.md) +- [細分處理流程](docs/tessellation.md) +- [安全性政策](SECURITY.md) + +## 參與貢獻 + +歡迎提交錯誤報告、目標明確的 pull request、翻譯、文件改進和外掛程式貢獻。 + +- 建立新報告前請搜尋現有 [issues](https://github.com/HakanSeven12/OpenCADStudio/issues)。 +- 問題和想法請使用 [Discussions](https://github.com/HakanSeven12/OpenCADStudio/discussions)。 +- 請依照[安全性政策](SECURITY.md)私下回報弱點。 + +## 專案成長 + + + + + + Open CAD Studio 星號與版本下載量 + + + +## 支持專案 + +如果 Open CAD Studio 對您的工作有幫助,請透過 [GitHub Sponsors](https://github.com/sponsors/HakanSeven12) 或 [Patreon](https://www.patreon.com/HakanSeven12) 支持持續開發。 + +## 授權 + +Open CAD Studio 依 [GNU General Public License v3.0](LICENSE) 散佈。 diff --git a/crates/ocs_plugin_api/Cargo.toml b/crates/ocs_plugin_api/Cargo.toml index 7573a1e06..488a92f67 100644 --- a/crates/ocs_plugin_api/Cargo.toml +++ b/crates/ocs_plugin_api/Cargo.toml @@ -14,12 +14,7 @@ serde = { version = "1", features = ["derive"] } # Pulled in only by the `host` feature, which adds the `acadrust`-typed # `HostApi` runtime surface. The default crate stays dependency-free so engine # crates and external tooling can depend on the manifest/ribbon contract cheaply. -# -# acadrust types appear in the HostApi trait object, so the plugin and host -# MUST resolve the exact same acadrust source. The root Cargo.toml pins the -# exact revision via [patch.crates-io]; this crate uses the same version -# requirement so the patch applies consistently across the workspace. -acadrust = { version = "0.4", optional = true, features = ["serde"] } +acadrust = { git = "https://github.com/HakanSeven12/cadcodec.git", rev = "c28b2cd", optional = true, features = ["serde"] } # Runtime IPC and serialization (host feature only). interprocess = { version = "2", optional = true } @@ -42,9 +37,7 @@ serde_json = "1" serde = { version = "1", features = ["derive"] } cargo-lock = "11" # acadrust is scanned at build time to generate the embedded type registry. -# Use the same version requirement as the root Cargo.toml so the -# [patch.crates-io] override applies here too. -acadrust = { version = "0.4", features = ["serde"] } +acadrust = { git = "https://github.com/HakanSeven12/cadcodec.git", rev = "c28b2cd", features = ["serde"] } [dev-dependencies] serde_json = "1" diff --git a/crates/ocs_plugin_api/build.rs b/crates/ocs_plugin_api/build.rs index f7923dc49..2d9179984 100644 --- a/crates/ocs_plugin_api/build.rs +++ b/crates/ocs_plugin_api/build.rs @@ -18,7 +18,10 @@ fn main() { let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); generate_type_registry(&out_dir); generate_version_info(&out_dir); - println!("cargo:rerun-if-changed=Cargo.lock"); + println!( + "cargo:rerun-if-changed={}", + workspace_cargo_lock_path().display() + ); } // ════════════════════════════════════════════════════════════════════════════ diff --git a/crates/ocs_plugin_api/src/host.rs b/crates/ocs_plugin_api/src/host.rs index 35d28360e..eb2220b9b 100644 --- a/crates/ocs_plugin_api/src/host.rs +++ b/crates/ocs_plugin_api/src/host.rs @@ -256,10 +256,6 @@ impl<'de> Deserialize<'de> for PluginNotification { } } -/// An add-on package's entry point: its manifest, optional ribbon tab, and -/// command dispatch. Built-in (in-tree) and dynamically-loaded (cdylib) plugins -/// implement the same trait from this crate, so an out-of-tree add-on targets -/// the stable contract rather than the host binary. /// An add-on package's entry point: its manifest, optional ribbon tab, and /// command dispatch. Built-in (in-tree) and dynamically-loaded (cdylib) plugins /// implement the same trait from this crate, so an out-of-tree add-on targets diff --git a/crates/ocs_plugin_api/src/ipc/mod.rs b/crates/ocs_plugin_api/src/ipc/mod.rs index 5190eb1a4..5ea05e152 100644 --- a/crates/ocs_plugin_api/src/ipc/mod.rs +++ b/crates/ocs_plugin_api/src/ipc/mod.rs @@ -143,6 +143,25 @@ mod tests { } } + #[test] + fn v4_additions_preserve_legacy_discriminants() { + fn discriminant(value: &T) -> u32 { + let bytes = bincode::serialize(value).unwrap(); + u32::from_le_bytes(bytes[..4].try_into().unwrap()) + } + + assert_eq!(discriminant(&HostRequest::Shutdown), 6); + assert_eq!(discriminant(&HostResponse::Error(String::new())), 5); + assert_eq!( + discriminant(&crate::ipc::protocol::PluginRequest::BumpGeometry), + 6 + ); + assert_eq!( + discriminant(&crate::ipc::protocol::PluginResponse::Record(None)), + 3 + ); + } + #[test] fn transport_rejects_oversized_message() { let (mut a, _b) = connect_pair(); diff --git a/crates/ocs_plugin_api/src/ipc/protocol.rs b/crates/ocs_plugin_api/src/ipc/protocol.rs index 9d3c3f917..c8735a30d 100644 --- a/crates/ocs_plugin_api/src/ipc/protocol.rs +++ b/crates/ocs_plugin_api/src/ipc/protocol.rs @@ -59,13 +59,13 @@ pub enum HostRequest { NeedsEntityPick { command_id: u64, }, + Shutdown, ExecuteCode { command_id: u64, source: CommandSource, code: String, tab_index: usize, }, - Shutdown, } /// Responses the plugin runner sends back for `HostRequest`. @@ -76,8 +76,8 @@ pub enum HostResponse { Text(String), Ribbon(Vec), Manifest(OwnedPluginManifest), - CodeExecutionResult(crate::host::ExecutionResult), Error(String), + CodeExecutionResult(crate::host::ExecutionResult), } /// Requests the plugin runner sends to the host. @@ -87,8 +87,6 @@ pub enum PluginRequest { PushOutput(String), PushError(String), AddEntity(EntityType), - /// Add multiple entities in a single request. - AddEntities(Vec), /// Replace the existing entity carrying this entity's handle in place. UpdateEntity(EntityType), /// Delete the entity with `handle`. @@ -119,6 +117,8 @@ pub enum PluginRequest { /// Ask the host to create/refresh a shared-memory document view and return /// the file path + current version. OpenDocumentView, + /// Add multiple entities in a single request. + AddEntities(Vec), /// V4: ask the host to create/refresh a tab-keyed shared-memory document /// view and return the file path + current version. OpenDocumentViewV4 { tab_id: u64 }, @@ -134,7 +134,6 @@ pub enum PluginResponse { Ok, Bool(bool), Handle(Handle), - Handles(Vec), Record(Option), Document(Box), Error(String), @@ -143,6 +142,7 @@ pub enum PluginResponse { path: String, version: u64, }, + Handles(Vec), /// V4: path to the tab-keyed memory-mapped file and current version. DocumentViewV4 { path: String, diff --git a/crates/ocs_plugin_api/src/ipc/proxy.rs b/crates/ocs_plugin_api/src/ipc/proxy.rs index f40ec43d3..1300e18d9 100644 --- a/crates/ocs_plugin_api/src/ipc/proxy.rs +++ b/crates/ocs_plugin_api/src/ipc/proxy.rs @@ -11,7 +11,7 @@ //! formats or enum variants. use std::io::{Read, Write}; -use std::net::{TcpListener, TcpStream}; +use std::net::{Shutdown, TcpListener, TcpStream}; use std::sync::Arc; use std::sync::Mutex; use std::time::Duration; @@ -82,7 +82,7 @@ pub fn recv_framed(reader: &mut R) -> R /// Thread-safe [`PluginRequestSender`] implementation that forwards requests /// over a single TCP stream to a request proxy server. pub struct ProxyPluginRequestSender { - stream: Mutex, + stream: Arc>, } impl ProxyPluginRequestSender { @@ -98,21 +98,14 @@ impl ProxyPluginRequestSender { stream.flush()?; stream.set_read_timeout(Some(REQUEST_TIMEOUT))?; Ok(Self { - stream: Mutex::new(stream), + stream: Arc::new(Mutex::new(stream)), }) } - /// Create a second handle to the same underlying socket so multiple - /// callers can share the proxy connection (requests are still serialized - /// by the mutex on each handle). + /// Create a second handle that shares the connection and its request lock. pub fn try_clone(&self) -> Result { - let stream = self - .stream - .lock() - .map_err(|e| ProxyError::Io(std::io::Error::other(e.to_string())))? - .try_clone()?; Ok(Self { - stream: Mutex::new(stream), + stream: Arc::clone(&self.stream), }) } @@ -145,6 +138,7 @@ impl ProxyPluginRequestSender { || e.kind() == ErrorKind::TimedOut => { if let Err(e) = poll() { + let _ = stream.shutdown(Shutdown::Both); break Err(e); } } diff --git a/crates/ocs_plugin_api/src/ipc/v4/client.rs b/crates/ocs_plugin_api/src/ipc/v4/client.rs index 6c6b6f531..6eda56055 100644 --- a/crates/ocs_plugin_api/src/ipc/v4/client.rs +++ b/crates/ocs_plugin_api/src/ipc/v4/client.rs @@ -43,7 +43,7 @@ type NotificationQueue = mpsc::Receiver<(Option, HostNotification)>; struct Shared { writer: Mutex, next_id: AtomicU64, - in_flight: Mutex>>, + in_flight: Mutex>>, } /// A frame the V4 reader thread delivers to the plugin runner loop. @@ -96,7 +96,7 @@ impl V4Client { let shared = Arc::new(Shared { writer: Mutex::new(stream), next_id: AtomicU64::new(1), - in_flight: Mutex::new(None), + in_flight: Mutex::new(HashMap::new()), }); let shared_for_reader = Arc::clone(&shared); @@ -122,6 +122,15 @@ impl V4Client { self.runner_queue.recv() } + /// Wait up to `timeout` for a host request so the runner can also drain + /// notifications while otherwise idle. + pub fn recv_runner_frame_timeout( + &self, + timeout: Duration, + ) -> Result { + self.runner_queue.recv_timeout(timeout) + } + /// Non-blocking poll for host-to-plugin notifications. pub fn try_recv_notification(&self) -> Option<(Option, HostNotification)> { self.notifications.lock().unwrap_or_else(|e| e.into_inner()).try_recv().ok() @@ -214,8 +223,13 @@ fn reader_thread( loop { match recv::(&mut reader) { Ok(HostToPluginV4::Response { id, payload }) => { - if let Some(tx) = shared.in_flight.lock().unwrap_or_else(|e| e.into_inner()).take() { - let _ = tx.send((id, payload)); + let tx = shared + .in_flight + .lock() + .unwrap_or_else(|e| e.into_inner()) + .remove(&id); + if let Some(tx) = tx { + let _ = tx.send(payload); } else { eprintln!("[plugin] V4 reader: unexpected response id={id}"); } @@ -249,8 +263,11 @@ fn reader_thread( } } })); - // Ensure any synchronous waiter is unblocked. - let _ = shared.in_flight.lock().unwrap_or_else(|e| e.into_inner()).take(); + shared + .in_flight + .lock() + .unwrap_or_else(|e| e.into_inner()) + .clear(); } /// `HostApi` implementation used inside the plugin process over the V4 @@ -264,7 +281,7 @@ pub struct V4PluginHostApi { next_command_id: Cell, record_cache: RefCell>, doc_view: RefCell>, - doc_view_v4: RefCell>, + doc_view_v4: RefCell>, tab_id_cache: Cell>, } @@ -293,7 +310,7 @@ impl V4PluginHostApi { &self, req: PluginRequest, ) -> Result { - send_plugin_request(&self.shared, req) + send_plugin_request(&self.shared, self.tab_id_cache.get(), req) } fn fetch_document(&self) -> CadDocument { @@ -316,23 +333,37 @@ impl V4PluginHostApi { /// thread-safe [`V4PluginRequestSender`]. fn send_plugin_request( shared: &Arc, + tab_id: Option, req: PluginRequest, ) -> Result { let id = shared.next_id.fetch_add(1, Ordering::Relaxed); let (tx, rx) = mpsc::channel(); - *shared.in_flight.lock().unwrap_or_else(|e| e.into_inner()) = Some(tx); - { + shared + .in_flight + .lock() + .unwrap_or_else(|e| e.into_inner()) + .insert(id, tx); + let send_result = { let mut writer = shared.writer.lock().unwrap_or_else(|e| e.into_inner()); - send(&mut writer, &PluginToHostV4::Request { id, payload: req })?; + send( + &mut writer, + &PluginToHostV4::Request { + id, + tab_id, + payload: req, + }, + ) + }; + if let Err(error) = send_result { + shared + .in_flight + .lock() + .unwrap_or_else(|e| e.into_inner()) + .remove(&id); + return Err(error); } match rx.recv() { - Ok((resp_id, resp)) if resp_id == id => Ok(resp), - Ok((resp_id, _)) => Err(crate::ipc::transport::TransportError::Io( - std::io::Error::new( - std::io::ErrorKind::InvalidData, - format!("V4 response id mismatch: expected {id}, got {resp_id}"), - ), - )), + Ok(resp) => Ok(resp), Err(_) => Err(crate::ipc::transport::TransportError::Io( std::io::Error::new( std::io::ErrorKind::NotConnected, @@ -343,17 +374,16 @@ fn send_plugin_request( } /// Thread-safe wrapper around the V4 connection so worker threads can issue -/// host requests. A per-sender mutex serializes requests, matching the -/// single-in-flight behavior of [`V4PluginHostApi::request`]. +/// host requests for the originating document tab. struct V4PluginRequestSender { shared: Arc, - lock: Mutex<()>, + tab_id: u64, } impl PluginRequestSender for V4PluginRequestSender { fn request(&self, req: PluginRequest) -> Result { - let _guard = self.lock.lock().map_err(|e| PluginRequestError(e.to_string()))?; - send_plugin_request(&self.shared, req).map_err(|e| PluginRequestError(e.to_string())) + send_plugin_request(&self.shared, Some(self.tab_id), req) + .map_err(|e| PluginRequestError(e.to_string())) } } @@ -631,7 +661,7 @@ impl HostApi for V4PluginHostApi { fn plugin_request_sender(&self) -> Option> { Some(Box::new(V4PluginRequestSender { shared: Arc::clone(&self.shared), - lock: Mutex::new(()), + tab_id: self.tab_id(), })) } @@ -655,14 +685,13 @@ impl HostApi for V4PluginHostApi { } } - fn document_view_v4(&mut self, _tab_id: u64) -> Option { + fn document_view_v4(&mut self, tab_id: u64) -> Option { { let mut view = self.doc_view_v4.borrow_mut(); - if view.is_none() { - let tab_id = self.tab_id(); + if view.as_ref().map(|(cached_id, _)| *cached_id) != Some(tab_id) { match self.request(PluginRequest::OpenDocumentViewV4 { tab_id }) { Ok(PluginResponse::DocumentViewV4 { path, version }) => { - *view = Some(DocumentViewInfo { path, version }); + *view = Some((tab_id, DocumentViewInfo { path, version })); } Ok(other) => { eprintln!("[plugin] unexpected OpenDocumentViewV4 response: {other:?}"); @@ -673,13 +702,18 @@ impl HostApi for V4PluginHostApi { } } } - self.doc_view_v4.borrow().clone() + self.doc_view_v4 + .borrow() + .as_ref() + .map(|(_, info)| info.clone()) } - fn close_document_view_v4(&mut self, _tab_id: u64) { - let tab_id = self.tab_id(); + fn close_document_view_v4(&mut self, tab_id: u64) { let _ = self.request(PluginRequest::CloseDocumentViewV4 { tab_id }); - self.doc_view_v4.borrow_mut().take(); + let mut view = self.doc_view_v4.borrow_mut(); + if view.as_ref().map(|(cached_id, _)| *cached_id) == Some(tab_id) { + view.take(); + } } } @@ -694,7 +728,7 @@ impl V4Client { let shared = Arc::new(Shared { writer: Mutex::new(stream), next_id: AtomicU64::new(1), - in_flight: Mutex::new(None), + in_flight: Mutex::new(HashMap::new()), }); let shared_for_reader = Arc::clone(&shared); let notifications = Arc::new(Mutex::new(notify_rx)); @@ -776,7 +810,11 @@ mod tests { let runner = thread::spawn(move || { let req = recv::(&mut runner_stream).unwrap(); match req { - PluginToHostV4::Request { id, payload: PluginRequest::PushInfo(s) } => { + PluginToHostV4::Request { + id, + tab_id: _, + payload: PluginRequest::PushInfo(s), + } => { assert_eq!(s, "hello host"); send( &mut runner_stream, @@ -804,7 +842,11 @@ mod tests { let runner = thread::spawn(move || { let req = recv::(&mut runner_stream).unwrap(); match req { - PluginToHostV4::Request { id, payload: PluginRequest::AddEntities(v) } => { + PluginToHostV4::Request { + id, + tab_id: _, + payload: PluginRequest::AddEntities(v), + } => { assert_eq!(v.len(), 2); send( &mut runner_stream, @@ -828,6 +870,56 @@ mod tests { runner.join().unwrap(); } + #[test] + fn concurrent_requests_match_out_of_order_responses() { + let (host_stream, mut runner_stream) = connect_pair(); + let client = V4Client::from_stream_for_test(host_stream); + let sender = Arc::new(V4PluginRequestSender { + shared: Arc::clone(&client.shared), + tab_id: 42, + }); + + let runner = thread::spawn(move || { + let mut requests = Vec::new(); + for _ in 0..2 { + match recv::(&mut runner_stream).unwrap() { + PluginToHostV4::Request { + id, + tab_id: Some(42), + payload: PluginRequest::PushInfo(message), + } => requests.push((id, message)), + other => panic!("unexpected: {other:?}"), + } + } + for (id, message) in requests.into_iter().rev() { + send( + &mut runner_stream, + &HostToPluginV4::Response { + id, + payload: PluginResponse::Bool(message == "first"), + }, + ) + .unwrap(); + } + }); + + let first_sender = Arc::clone(&sender); + let first = thread::spawn(move || { + first_sender + .request(PluginRequest::PushInfo("first".to_string())) + .unwrap() + }); + let second = thread::spawn(move || { + sender + .request(PluginRequest::PushInfo("second".to_string())) + .unwrap() + }); + + assert!(matches!(first.join().unwrap(), PluginResponse::Bool(true))); + assert!(matches!(second.join().unwrap(), PluginResponse::Bool(false))); + runner.join().unwrap(); + } + #[test] fn v4_client_notification_queue_size_env_is_honored() { let _guard = ENV_LOCK.lock().unwrap(); diff --git a/crates/ocs_plugin_api/src/ipc/v4/protocol.rs b/crates/ocs_plugin_api/src/ipc/v4/protocol.rs index cf1d32cfd..2d339b5d2 100644 --- a/crates/ocs_plugin_api/src/ipc/v4/protocol.rs +++ b/crates/ocs_plugin_api/src/ipc/v4/protocol.rs @@ -29,7 +29,11 @@ pub enum HostToPluginV4 { #[derive(Debug, Serialize, Deserialize)] #[allow(clippy::large_enum_variant)] pub enum PluginToHostV4 { - Request { id: u64, payload: PluginRequest }, + Request { + id: u64, + tab_id: Option, + payload: PluginRequest, + }, Response { id: u64, payload: HostResponse }, Notification(NotificationEnvelope), } diff --git a/crates/ocs_plugin_api/src/ipc/v4/server.rs b/crates/ocs_plugin_api/src/ipc/v4/server.rs index f3c7a26ed..08e38c669 100644 --- a/crates/ocs_plugin_api/src/ipc/v4/server.rs +++ b/crates/ocs_plugin_api/src/ipc/v4/server.rs @@ -27,7 +27,11 @@ macro_rules! vlog { /// A frame delivered from the V4 reader thread to the host main thread. pub enum HostIncoming { Response { id: u64, payload: crate::ipc::protocol::HostResponse }, - Request { id: u64, payload: Box }, + Request { + id: u64, + tab_id: Option, + payload: Box, + }, } /// Token-bucket rate limiter. @@ -117,9 +121,17 @@ pub fn run_host_reader_thread( } } } - Ok(PluginToHostV4::Request { id, payload }) => { + Ok(PluginToHostV4::Request { + id, + tab_id, + payload, + }) => { if incoming - .send(HostIncoming::Request { id, payload: Box::new(payload) }) + .send(HostIncoming::Request { + id, + tab_id, + payload: Box::new(payload), + }) .is_err() { break; diff --git a/crates/ocs_plugin_api/src/process.rs b/crates/ocs_plugin_api/src/process.rs index 15061318b..f219af009 100644 --- a/crates/ocs_plugin_api/src/process.rs +++ b/crates/ocs_plugin_api/src/process.rs @@ -346,20 +346,20 @@ impl PluginProcess { } Ok(Err(e)) => return Err(e.into()), Err(mpsc::RecvTimeoutError::Timeout) => { + let status = spawn_failure_status(&child, &last_stderr); if let Some(child) = child.lock().unwrap_or_else(|e| e.into_inner()).take() { reap(child); } - let status = spawn_failure_status(&child, &last_stderr); return Err(PluginError::RunnerCrashed { request: "spawn/accept", status, }); } Err(mpsc::RecvTimeoutError::Disconnected) => { + let status = spawn_failure_status(&child, &last_stderr); if let Some(child) = child.lock().unwrap_or_else(|e| e.into_inner()).take() { reap(child); } - let status = spawn_failure_status(&child, &last_stderr); return Err(PluginError::RunnerCrashed { request: "spawn/accept", status, @@ -740,6 +740,7 @@ impl PluginProcess { } std::thread::sleep(Duration::from_millis(50)); } + reap(child); } None } diff --git a/crates/ocs_plugin_api/src/process/manager.rs b/crates/ocs_plugin_api/src/process/manager.rs index 79524d6a5..d3495d0a0 100644 --- a/crates/ocs_plugin_api/src/process/manager.rs +++ b/crates/ocs_plugin_api/src/process/manager.rs @@ -218,8 +218,10 @@ impl PluginManager { return false; }; let plugin = self.plugins.remove(index); - plugin.process.shutdown_and_wait(Duration::from_secs(5)); - true + plugin + .process + .shutdown_and_wait(Duration::from_secs(5)) + .is_some() } /// Begin asynchronous shutdown of every plugin process. diff --git a/crates/ocs_plugin_api/src/process/v4.rs b/crates/ocs_plugin_api/src/process/v4.rs index c079ac396..9843c3bba 100644 --- a/crates/ocs_plugin_api/src/process/v4.rs +++ b/crates/ocs_plugin_api/src/process/v4.rs @@ -1,14 +1,15 @@ //! Private V4 connection owned by [`PluginProcess`](crate::process::PluginProcess). +use std::collections::VecDeque; use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; -use std::sync::{mpsc, Arc, Mutex}; +use std::sync::{mpsc, Arc, Mutex, TryLockError}; use std::time::{Duration, Instant}; use interprocess::local_socket::Stream; use interprocess::TryClone; use crate::host::{CommandSource, ExecutionResult, HostApi, HostNotification, PluginNotification}; -use crate::ipc::protocol::{HostRequest, HostResponse}; +use crate::ipc::protocol::{HostRequest, HostResponse, PluginRequest}; use crate::ipc::server::handle_plugin_request; use crate::ipc::transport::send; use crate::ipc::v4::protocol::{HostToPluginV4, NotificationEnvelope}; @@ -77,6 +78,8 @@ fn request_kind(req: &HostRequest) -> &'static str { pub(crate) struct V4Connection { shared: Arc, incoming: Mutex>, + deferred: Mutex, Box)>>, + call_lock: Mutex<()>, next_id: AtomicU64, reader_handle: Mutex>>, } @@ -117,6 +120,8 @@ impl V4Connection { Ok(Self { shared, incoming: Mutex::new(incoming_rx), + deferred: Mutex::new(VecDeque::new()), + call_lock: Mutex::new(()), next_id: AtomicU64::new(1), reader_handle: Mutex::new(Some(handle)), }) @@ -157,6 +162,7 @@ impl V4Connection { req: HostRequest, on_start_interactive: &mut dyn FnMut(u64), ) -> Result { + let _call_guard = self.call_lock.lock().unwrap_or_else(|e| e.into_inner()); let id = self.next_id.fetch_add(1, Ordering::Relaxed); let kind = request_kind(&req); let timeout = request_timeout(kind); @@ -188,16 +194,24 @@ impl V4Connection { Ok(HostIncoming::Response { payload, .. }) => { return Err(PluginError::UnexpectedResponse(Box::new(payload))) } - Ok(HostIncoming::Request { id: rid, payload }) => { - let resp = handle_plugin_request(host, *payload, on_start_interactive); - let mut writer = self.shared.writer.lock().unwrap_or_else(|e| e.into_inner()); - let stream = writer.as_mut().ok_or_else(|| { - PluginError::Io(std::io::Error::new( - std::io::ErrorKind::NotConnected, - "V4 connection is shut down", - )) - })?; - send(stream, &HostToPluginV4::Response { id: rid, payload: resp })?; + Ok(HostIncoming::Request { + id: rid, + tab_id, + payload, + }) => { + if tab_id.map_or(true, |request_tab| request_tab == host.tab_id()) { + self.respond_to_plugin_request( + host, + rid, + payload, + on_start_interactive, + )?; + } else { + self.deferred + .lock() + .unwrap_or_else(|e| e.into_inner()) + .push_back((rid, tab_id, payload)); + } } Err(mpsc::RecvTimeoutError::Timeout) => { self.shared.alive.store(false, Ordering::SeqCst); @@ -226,19 +240,50 @@ impl V4Connection { host: &mut dyn HostApi, on_start_interactive: &mut dyn FnMut(u64), ) -> Result<(), PluginError> { + let _call_guard = match self.call_lock.try_lock() { + Ok(guard) => guard, + Err(TryLockError::Poisoned(error)) => error.into_inner(), + Err(TryLockError::WouldBlock) => return Ok(()), + }; + let current_tab_id = host.tab_id(); + let mut ready = VecDeque::new(); + { + let mut deferred = self.deferred.lock().unwrap_or_else(|e| e.into_inner()); + let mut waiting = VecDeque::new(); + while let Some((id, tab_id, payload)) = deferred.pop_front() { + if tab_id.map_or(true, |request_tab| request_tab == current_tab_id) { + ready.push_back((id, payload)); + } else { + waiting.push_back((id, tab_id, payload)); + } + } + *deferred = waiting; + } + while let Some((id, payload)) = ready.pop_front() { + self.respond_to_plugin_request(host, id, payload, on_start_interactive)?; + } + let incoming = self.incoming.lock().unwrap_or_else(|e| e.into_inner()); loop { match incoming.try_recv() { - Ok(HostIncoming::Request { id, payload }) => { - let resp = handle_plugin_request(host, *payload, on_start_interactive); - let mut writer = self.shared.writer.lock().unwrap_or_else(|e| e.into_inner()); - let stream = writer.as_mut().ok_or_else(|| { - PluginError::Io(std::io::Error::new( - std::io::ErrorKind::NotConnected, - "V4 connection is shut down", - )) - })?; - send(stream, &HostToPluginV4::Response { id, payload: resp })?; + Ok(HostIncoming::Request { + id, + tab_id, + payload, + }) => { + if tab_id.map_or(true, |request_tab| request_tab == current_tab_id) { + self.respond_to_plugin_request( + host, + id, + payload, + on_start_interactive, + )?; + } else { + self.deferred + .lock() + .unwrap_or_else(|e| e.into_inner()) + .push_back((id, tab_id, payload)); + } } Ok(HostIncoming::Response { .. }) => { // Responses without a matching active call should not @@ -256,6 +301,31 @@ impl V4Connection { } } + fn respond_to_plugin_request( + &self, + host: &mut dyn HostApi, + id: u64, + payload: Box, + on_start_interactive: &mut dyn FnMut(u64), + ) -> Result<(), PluginError> { + let response = handle_plugin_request(host, *payload, on_start_interactive); + let mut writer = self.shared.writer.lock().unwrap_or_else(|e| e.into_inner()); + let stream = writer.as_mut().ok_or_else(|| { + PluginError::Io(std::io::Error::new( + std::io::ErrorKind::NotConnected, + "V4 connection is shut down", + )) + })?; + send( + stream, + &HostToPluginV4::Response { + id, + payload: response, + }, + )?; + Ok(()) + } + /// Send an `ExecuteCode` request and block until the plugin returns the /// result. The active document tab index is included so the REPL session is /// tied to the tab that issued it. @@ -532,6 +602,7 @@ mod tests { &mut runner_stream, &PluginToHostV4::Request { id: 99, + tab_id: None, payload: PluginRequest::PushInfo("nested".to_string()), }, ) diff --git a/crates/ocs_plugin_api/src/runner.rs b/crates/ocs_plugin_api/src/runner.rs index ca62629ba..6b4a60c6b 100644 --- a/crates/ocs_plugin_api/src/runner.rs +++ b/crates/ocs_plugin_api/src/runner.rs @@ -89,16 +89,14 @@ fn run_v4( })); } - match client.recv_runner_frame() { + match client.recv_runner_frame_timeout(std::time::Duration::from_millis(50)) { Ok(RunnerFrame::Request { id, payload }) => { if let Some(resp) = handle_host_request_v4(&mut *plugin, interactive, &client, id, payload) { client.send_response(id, resp)?; } } - Err(_) => { - // Host disconnected. - break; - } + Err(std::sync::mpsc::RecvTimeoutError::Timeout) => continue, + Err(std::sync::mpsc::RecvTimeoutError::Disconnected) => break, } } Ok(()) diff --git a/crates/ocs_web_worker/Cargo.toml b/crates/ocs_web_worker/Cargo.toml index e850ebeb8..d6c465349 100644 --- a/crates/ocs_web_worker/Cargo.toml +++ b/crates/ocs_web_worker/Cargo.toml @@ -8,7 +8,7 @@ publish = false crate-type = ["cdylib"] [dependencies] -acadrust = { git = "https://github.com/HakanSeven12/cadcodec.git", rev = "4736846", features = ["serde"] } +acadrust = { git = "https://github.com/HakanSeven12/cadcodec.git", rev = "c28b2cd", features = ["serde"] } bincode = "1.3" serde = { version = "1", features = ["derive"] } console_error_panic_hook = "0.1" diff --git a/locales/ar-SA/opencadstudio.ftl b/locales/ar-SA/opencadstudio.ftl index 711bff973..333dc5324 100644 --- a/locales/ar-SA/opencadstudio.ftl +++ b/locales/ar-SA/opencadstudio.ftl @@ -12,6 +12,13 @@ language = .portuguese = Português (Brasil) .arabic = العربية .japanese = 日本語 + .korean = 한국어 + .czech = Čeština + .italian = Italiano + .finnish = Suomi + .hungarian = Magyar + .polish = Polski + .chinese-traditional = 繁體中文 action = .close = إغلاق diff --git a/locales/cs-CZ/opencadstudio.ftl b/locales/cs-CZ/opencadstudio.ftl new file mode 100644 index 000000000..b6182fd64 --- /dev/null +++ b/locales/cs-CZ/opencadstudio.ftl @@ -0,0 +1,3509 @@ +language = + .system = Jazyk systému + .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 = 繁體中文 + +action = + .close = Zavřít + .options = Možnosti + .plugins = Zásuvné moduly + +ribbon-tab = + .draw = Kreslení + .annotate = Poznámky + .insert = Vložit + .model = Model + .layout = Rozvržení + .manage = Správa + .view = Zobrazení + +options = + .language-section = Jazyk + .language-label = Jazyk rozhraní: + .open-save-section = Otevírání a ukládání + .default-save-format-label = Výchozí formát ukládání: + .default-save-format-help = Použije se při prvním uložení nového výkresu. Stávající výkresy si zachovají typ a verzi souboru. + .theme-section = Motiv + .theme-label = Motiv aplikace: + .theme-help = Změnou základní barvy přejdete na vlastní motiv. Odstíny všech součástí motivu se vytvářejí z těchto šesti barev. + .color-background = Pozadí + .color-text = Text + .color-primary = Primární + .color-success = Úspěch + .color-warning = Varování + .color-danger = Nebezpečí + .browser-storage = Úložiště prohlížeče + .dark = Tmavý + .default-application = Výchozí aplikace + .iced-theme = Motiv Iced: + .theme = Motiv + +command-line = + .ready = Open CAD Studio je připraveno. + .hint = Zadejte příkaz nebo použijte pás karet. Soubor OBJ otevřete na kartě Vložit. + .label = Příkaz: + .literal-spaces = Doslovné mezery: mezerník vloží mezeru do řádku místo spuštění příkazu. Volba zůstane aktivní, dokud ji nevypnete. + .invalid = Neplatné + .unable-to-save-file-is-in-use = Nelze uložit: soubor se používá. + +start = + .new-drawing = Nový výkres + .open-file = Otevřít soubor… + .donate = Přispět + .send-feedback = Odeslat zpětnou vazbu + .sponsors = Sponzoři + .tutorials = Návody + .loading-videos = Načítání videí… + .videos-online = Videa se načítají z internetu. + .open-playlist = Otevřít seznam videí na YouTube + .discussions = Diskuze + .pinned = Připnuto + .loading-discussions = Načítání diskuzí… + .discussions-online = Diskuze se načítají z GitHubu. + .open-discussions = Otevřít diskuze na GitHubu + .supporters = Podporovatelé + .support-on-patreon = Podpořit na Patreonu + .recent-files = Nedávné soubory + .videos = Videa + .welcome = Vítejte + .recent-documents = Nedávné dokumenty + .no-recent-files = Otevřené soubory se zobrazí zde. + .browser-storage = Úložiště prohlížeče + .keep-recent-files = Uchovávat nedávné soubory + +modal = + .about = O aplikaci + .keyboard-shortcuts = Klávesové zkratky + .command-aliases = Aliasy příkazů + .find-replace = Najít a nahradit + .plugin-manager = Správce zásuvných modulů + .update-available = Je dostupná aktualizace + .layer-manager = Správce hladin + .layer-state-manager = Správce stavů hladin + .edit-layer-state = Upravit stav hladiny + .plot = Vykreslit + .layout-manager = Správce rozvržení + .scale-manager = Správce měřítek + .annotation-object-scale = Měřítko objektu poznámky + .plot-style-editor = Editor stylu vykreslování + .text-style-manager = Správce stylů textu + .multiline-style-manager = Správce stylů multičar + .table-style-manager = Správce stylů tabulek + .multileader-style-manager = Správce stylů multiodkazů + .dimension-style-manager = Správce kótovacích stylů + .default-application = Výchozí aplikace + .save-warning = Upozornění při ukládání + .unable-save = Výkres nelze uložit + .drawing-changed = Výkres byl na disku změněn + .delete-layer = Odstranit hladinu + .unsaved-changes = Neuložené změny + .unsaved-save-prompt = Chcete změny uložit? + .point-style = Styl bodu + .attribute-editor = Editor atributů + .save-drawing-as = Uložit výkres jako + .recovery-report = Zpráva o obnovení výkresu + .recovery-prompt = Obnovení výkresu + .file-name-could-not-be-saved = Soubor „__ocs_arg_file_name__“ se nepodařilo uložit. + .file-name-was-changed-by-another-application = Soubor „__ocs_arg_file_name__“ byl změněn jinou aplikací. + .count-selected-layers = Počet vybraných hladin: __ocs_arg_count__ + .subject-still-has-count-obj-deleting-will-also = + __ocs_arg_subject__ stále __ocs_arg_has__ __ocs_arg_count__ __ocs_arg_obj__. + Odstraněním se z výkresu odstraní také __ocs_arg_those__. Pokračovat? + .delete-objects = Odstranit objekty + .details-error = Podrobnosti: __ocs_arg_error__ + .file-name = Název souboru: + .format = Formát: + .layer-name = Hladina „__ocs_arg_name__“ + .make-open-cad-studio-your-default-cad-app = Nastavit Open CAD Studio jako výchozí CAD aplikaci? + .not-now = Teď ne + .open-dwg-and-dxf-drawings-in-open-cad-studio-b = Ve výchozím nastavení otevírat výkresy .dwg a .dxf v Open CAD Studio. Později to můžete změnit v nastavení systému. + .path-path = Cesta: __ocs_arg_path__ + .reload-from-disk = Znovu načíst z disku + .save-as = Uložit jako… + .saving-now-could-destroy-those-external-change = Uložením by mohly být ztraceny externí změny. Znovu načtěte kopii z disku, uložte místní práci jinam nebo výslovně potvrďte přepsání. + .the-file-is-open-or-being-used-by-another-appl = Soubor je otevřený nebo ho používá jiná aplikace. Zavřete ho v dané aplikaci a zkuste to znovu, případně výkres uložte pod jiným názvem. + .the-selected-layer-state-is-no-longer-availabl = Vybraný stav hladiny již není dostupný. + .this-drawing-contains-count-aec-civil-objects = + Tento výkres obsahuje __ocs_arg_count__ objektů AEC/Civil, které „__ocs_arg_target__“ nedokáže uložit, a proto nebudou uloženy. + Chcete-li je zachovat, uložte výkres ve zdrojové verzi (__ocs_arg_src_version__). + .yes-set-as-default = Ano, nastavit jako výchozí + .has = obsahuje + .hold = obsahuje + .objects = objektů + .that-object = daný objekt + .those-objects = dané objekty + +clipboard = + .no-supported-content = Schránka neobsahuje podporovaný text ani objekty výkresu. + .unavailable = Systémová schránka není dostupná. + .occupied = Systémová schránka se právě používá. Zkuste to znovu. + .conversion-failed = Text ze schránky se nepodařilo přečíst. + .copybase-specify-base-point = COPYBASE Určete základní bod: + .copy-to-clipboard = Kopírovat do schránky + .cut = Vyjmout + .cut-to-clipboard = Vyjmout do schránky + .pasteclip-pick-insertion-point = PASTECLIP Vyberte bod vložení: + .paste-as-block = Vložit jako blok + .paste-from-clipboard = Vložit ze schránky + .paste-to-original-coordinates = Vložit na původní souřadnice + +viewport = + .split-vertical = Rozdělit výřez svisle + .split-horizontal = Rozdělit výřez vodorovně + .move = Přesunout výřez + .close = Zavřít výřez + +recovery = + .opened-with-repairs = Výkres byl otevřen se zprávou o obnovení + .open-failed = Výkres se nepodařilo otevřít + .repaired-description = Při otevírání výkresu byly zjištěny problémy. Projděte zprávu a pokud byla data opravena, uložte výkres jako nový soubor. + .failed-description = Při obnovení se nepodařilo získat použitelná data výkresu. Projděte zprávu a zkuste zálohu nebo automaticky uloženou kopii. + .entities-checked = Zkontrolované entity + .issues-found = Nalezené problémy + .entities-removed = Odstraněné entity + .references-checked = Zkontrolované reference + .referenced-entities-removed = Odstraněné odkazované entity + .references-unavailable = Nedostupné reference + .log-path = Protokol obnovení + .log-write-failed = Protokol obnovení se nepodařilo zapsat + .log-download-ready = Zpráva o obnovení je připravena ke stažení. + .save-copy = Uložit obnovenou kopii + .show-log = Zobrazit protokol obnovení + .save-new-file-required = Opravený výkres musí být uložen do nového souboru. + .prompt-heading = Běžné otevření se nezdařilo + .prompt-description = Výkres nebyl změněn. Režim obnovení se může pokusit zachránit použitelná data, poškozené záznamy však mohou být přeskočeny. Chcete pokračovat? + .attempt = Zkusit obnovení + .decline = Zrušit +area = + .option-objects =Objekty + .option-back = Zpět + .option-add = Přidat oblast + .option-subtract = Odečíst oblast + .prompt-first = AREA Určete první rohový bod nebo [Objekty/Přidat oblast/Odečíst oblast] : + .prompt-add = AREA ADD Určete první rohový bod nebo [Objekty/oblast odečtení] : + .prompt-subtract = AREA SUBTRACT Určete první rohový bod nebo [Objekty/Přidat oblast] : + .prompt-next = AREA Zadejte další bod (vybráno { $count }, výpočet Enter): + .prompt-objects = AREA Vyberte objekty ({ $count } vybráno, Enter k výpočtu): + .objects-not-measurable = AREA: žádný z vybraných objektů nemá měřitelnou plochu. + .result = Plocha = { $area }, obvod = { $perimeter } + .result-area-only = Oblast = { $area } + .running-result = + Plocha = { $area }, obvod = { $perimeter } + Celková plocha = { $total_area }, Celkový obvod = { $total_perimeter } + .running-result-area-only = + Oblast = { $area } + Celková plocha = { $total_area } + +command-move = + .base = + MOVE Zadejte základní bod [{ $count -> + [one] { $count } objekt + *[other] { $count } objektů + }]: + .target = MOVE Zadejte cíl [základ { $x },{ $y }]: + +command-copy = + .array-count = COPY Enter počet položek do pole: + .base = + COPY Zadejte základní bod [{ $count -> + [one] { $count } objekt + *[other] { $count } objektů + }]: + .array-target = COPY Zadejte druhý bod pro pole položek { $count } [základní { $x },{ $y }]: + .target = + COPY Zadejte cíl [{ $count -> + [one] zatím { $count } kopie + *[other] zatím { $count } kopií + } | Pole | Enter=hotovo | základna { $x },{ $y }]: + +common = + .none-use-shortcuts-set-key-command =(žádné — použijte: SHORTCUTS SET ) + .alignment-indented-label-title-case = Zarovnání: + .background-fill-enabled = Výplň pozadí povolena + .borders-type-weight-color-spacing-hidden = Ohraničení (typ / hmotnost / barva / mezery / skryté) + .data-type = Typ dat: + .fill-color-indented-label-sentence-case = Barva výplně: + .format-string = Formátovat řetězec: + .off-color-ltype = Vypnuto Barva Ltype + .text-color-indented-label-sentence-case = Barva textu: + .text-height-indented-label-sentence-case = Výška textu: + .unit-type = Typ jednotky: + .name-already-in-use = Název "__ocs_fmt_0__" se již používá + .rrggbb-or-blank = #RRGGBB nebo prázdné + .default-parenthesized-lowercase = (výchozí) + .none-parenthesized-lowercase = (žádný) + .value-1st-arrowhead-dimblk1 = 1. hrot šipky (DIMBLK1) + .value-2d-wireframe = 2D drátěný model + .value-2nd-arrowhead-dimblk2 = 2. hrot šipky (DIMBLK2) + .value-3d-wireframe = 3D drátěný model + .value-3dalign-aligned-the-solid-to-the-destination-p = 3DALIGN: zarovná těleso k cílovým bodům. + .value-3dalign-each-point-triple-must-be-non-coincide = 3DALIGN: každá trojice bodů musí být neshodná a nekolineární. + .value-3dalign-select-exactly-one-solid-created-this = 3DALIGN: vyberte přesně jedno těleso vytvořené v této relaci. + .value-3dmirror-added-a-mirror-across-the-plane = 3DMIRROR: přidáno zrcadlo přes rovinu __ocs_fmt_0__. + .value-3dmirror-could-not-determine-the-solid-s-exten = 3DMIRROR: nemohl určit rozsah tělesa. + .value-3dmirror-select-exactly-one-solid-created-this = 3DMIRROR: vyberte přesně jedno těleso vytvořené v této relaci. + .value-3drotate-could-not-determine-the-solid-s-exten = 3DROTATE: nelze určit rozsah tělesa. + .value-3drotate-rotated-angle-deg-about-the-axis = 3DROTATE: otočeno o __ocs_fmt_0__° kolem osy __ocs_fmt_1__. + .value-3drotate-select-exactly-one-solid-created-this = 3DROTATE: vyberte přesně jedno těleso vytvořené v této relaci. + .align-applied = ALIGN: použito. + .above = Nahoře + .accept = Přijmout + .add = Přidat + .add-leader = Přidat vůdce + .align-space = Zarovnat prostor: + .aligned = Zarovnáno + .alignment-title-case = Zarovnání + .all = všechny + .alternate = Střídat + .alternate-units = Alternativní jednotky + .angle = Úhel + .angular-decimals-dimadec = Úhlová desetinná místa (DIMADEC) + .angular-unit-dimaunit = Úhlová jednotka (DIMAUNIT) + .angular-zero-supp-dimazin = Podpora úhlové nuly (DIMAZIN) + .annotation = Anotace + .annotative = Anotace + .apparent-intersection = Zdánlivá křižovatka + .apply = Použít + .apply-cell = Použít buňku + .apply-margins = Použít okraje + .arc = Oblouk + .arch =Oblouk + .architectural = Architektonické + .area = Oblast + .arrow-size = Velikost šipky + .arrowhead = Hrot šípu + .arrowhead-size = Velikost hrotu šipky + .as-displayed = Jak je zobrazeno + .attachment-direction = Směr přílohy: + .attribute = Atribut + .attributes = Atributy + .auto = Auto + .bedit-block-tab-name-is-not-open = BEDIT: karta bloku "__ocs_fmt_0__" není otevřená. + .break-entity-type-not-supported = BREAK: Typ entity není podporován. + .break-fragment-s = BREAK: Fragment(y) __ocs_fmt_0__. + .back = Zpět + .background-color = Barva pozadí + .backward = Pozadu + .baseline = Základní linie + .below = Níže + .block = Blokovat + .block-name-created = Blok "__ocs_fmt_0__" byl vytvořen. + .block-orig-new-name = Blok "__ocs_fmt_0__" → "__ocs_fmt_1__" + .block-content = Blokovat obsah + .block-color = Barva bloku + .block-connection = Blokovat připojení + .block-rotation = Rotace bloku + .blocks = Bloky + .blue = Modrá + .boolean-failed-the-solids-may-not-overlap = Logická hodnota selhala – tělesa se nemusí překrývat. + .boolean-select-exactly-two-solids-created-this = Boolean: vyberte přesně dvě tělesa vytvořená v této relaci. + .bottom = Spodní + .bottom-center-title-case = Spodní střed + .bottom-left-title-case = Vlevo dole + .bottom-right-title-case = Vpravo dole + .bottom-attachment = Spodní příloha: + .bottom-center-sentence-case = Spodní střed + .bottom-left-sentence-case = Vlevo dole + .bottom-right-sentence-case = Vpravo dole + .bottomcenter = Spodní střed + .bottomleft = Vlevo dole + .bottomright = Vpravo dole + .box = Krabice + .break = Přestávka + .brightness = Jas + .by-layer = Podle vrstvy + .byblock = ByBlock + .bylayer = Podle vrstvy + .convtosurface-converted-n-solid-s-to-surface-s = CONVTOSURFACE: převede tělesa __ocs_fmt_0__ na povrchy. + .convtosurface-select-a-solid-created-this-sess = CONVTOSURFACE: vyberte těleso vytvořené v této relaci. + .coords-mode-label = COORDS = __ocs_fmt_0__ (__ocs_fmt_1__) + .copy-specify-destination-count-copies-so-far-a = COPY Zadejte cíl [zatím kopie __ocs_arg_count__ | Pole | Enter=hotovo | základ __ocs_arg_bx__,__ocs_arg_by__]: + .cancel = Zrušit + .cancel-active-command = Zrušit aktivní příkaz + .cannot-delete-a-style-that-is-current-or-in-us = Styl, který je aktuální nebo používaný, nelze odstranit. + .cannot-delete-the-model-layout =Nelze odstranit rozvržení modelu. + .cannot-delete-the-standard-style = Standardní styl nelze odstranit. + .cannot-rename-the-model-layout = Rozvržení modelu nelze přejmenovat. + .cannot-rename-the-standard-style = Standardní styl nelze přejmenovat. + .catchment-tagged-successfully = Povodí úspěšně označeno. + .center = Střed + .center-mark-dimcen = Středová značka (DIMCEN) + .centered = Na střed + .centimeters = Centimetry + .chamfer = Zkosení + .changelog = Seznam změn + .changing-a-base-colour-switches-to-custom-iced = Změna základní barvy se přepne na Vlastní. Iced vytváří každý odstín složky z těchto šesti barev. + .circle = Kruh + .class-version = Verze třídy + .clear = Jasný + .clear-all = Vymazat vše + .clip = Klip + .clipboard = Schránka + .clipboard-is-empty = Schránka je prázdná. + .close = Zavřít + .closed-filled = Zavřeno naplněné + .color = Barva + .command-cancelled-because-the-active-drawing-s = Příkaz byl zrušen, protože se změnil aktivní kreslicí prostor. + .command-history-navigation = Navigace historie příkazů + .command-label-title-case = příkaz: + .conceptual = Koncepční + .cone = Kužel + .content = Obsah + .content-type = Typ obsahu: + .continue = Pokračovat + .contrast = Kontrast + .coordinates = Souřadnice + .copied-path = Zkopírovaná cesta: __ocs_fmt_0__ + .copy = Kopírovat + .could-not-open-file-location-error = Nelze otevřít umístění souboru: __ocs_fmt_0__ + .could-not-rename-block-orig = Nelze přejmenovat blok "__ocs_fmt_0__" + .could-not-set-default-app-err = Nelze nastavit výchozí aplikaci: __ocs_fmt_0__ + .crossing = Přejezd + .current-dim-style-set-to = Aktuální styl ztlumení nastaven na „__ocs_fmt_0__“. + .current-multiline-style = Aktuální víceřádkový styl: __ocs_fmt_0__ + .current-table-style-name = Aktuální styl tabulky: __ocs_fmt_0__ + .current-text-style = Aktuální styl textu: __ocs_fmt_0__ + .custom = Vlastní + .cyan = azurová + .cylinder = Válec + .dataextraction-rows-rows-fname = DATAEXTRACTION __ocs_fmt_0__ řádky → "__ocs_fmt_1__" + .dataextraction-write-failed-e = DATAEXTRACTION: zápis se nezdařil: __ocs_fmt_0__ + .ddedit-entity-type-not-supported = DDEDIT: Typ entity není podporován. + .ddedit-text-updated = DDEDIT: text aktualizován. + .dimbreak-not-yet-implemented-nothing-changed = DIMBREAK: dosud neimplementováno — nic se nezměnilo. + .dimjogline-not-yet-implemented-nothing-changed = DIMJOGLINE: dosud neimplementováno — nic se nezměnilo. + .dimspace-spacing-adjusted =DIMSPACE Rozteč upravena. + .divide-entity-type-not-supported-or-n-2 = DIVIDE: Typ entity není podporován nebo N < 2. + .divide-count-point-s-placed = DIVIDE: Umístění bodu(ů) __ocs_fmt_0__. + .draworder-select-entities-first = DRAWORDER: nejprve vyberte entity. + .danger = Nebezpečí + .data = Data + .data-row = Řádek dat: + .decimal = Desetinné + .decimal-sep-ascii-dimdsep = Desetinný odděl ASCII (DIMDSEP) + .decimal-separator = Desetinný oddělovač + .decimals-dimaltd = Desetinná čísla (DIMALTD) + .decimals-dimdec = Desetinná čísla (DIMDEC) + .default-title-case = Výchozí + .default-text = Výchozí text: + .deg-min-sec = Deg/min/sec + .delete = Smazat + .delete-selected-entities = Smazat vybrané entity + .description-title-case = Popis + .description-label-title-case = Popis: + .diameter = Průměr + .dim-style = Tlumený styl + .dimension = Dimenze + .dimensions = Rozměry + .discard = Zahodit + .discussions = Diskuse + .discussions-load-from-github = Načítání diskuzí ze GitHub. + .display = Displej + .distance = Vzdálenost + .donate = Darovat + .done = Hotovo + .double = Dvojité + .draft = Koncept + .draw = Kreslit + .drawing = Kreslení + .drawing-units = Výkresové jednotky + .drop-0-ft-keep-0-in = Klesejte 0 stop, udržujte 0 + .dynamic = Dynamický + .extrude-could-not-build-profile-select-a-close = EXTRUDE: Nelze vytvořit profil. Vyberte uzavřenou 2D entitu (Kruh, LwPolyline atd.). + .extrude-entity-not-found = EXTRUDE: entita nenalezena. + .extrude-solid-created = EXTRUDE: těleso vytvořeno. + .edge = Okraj + .editing-selected = Střih: __ocs_arg_selected__ + .elements = Prvky: + .ellipse = Elipsa + .enable-alternate-units-dimalt = Povolit alternativní jednotky (DIMALT) + .end-angle = Koncový úhel + .endpoint = Koncový bod + .engineering = Strojírenství + .enter = Enter + .expected-coordinates-x-y-or-a-number-got-text = Očekávané souřadnice (x,y) nebo číslo: "__ocs_fmt_0__" + .extension = Rozšíření + .extension-dimdle = Rozšíření (DIMDLE) + .extension-dimexe = Rozšíření (DIMEXE) + .extents = Rozsahy + .find-replace-replaced-1-occurrence-of-search = FIND/REPLACE: nahrazen 1 výskytem „__ocs_fmt_0__“. + .find-replace-replaced-replaced-occurrence-s-of = FIND/REPLACE: nahrazen __ocs_fmt_0__ výskyt(y) "__ocs_fmt_1__". + .flatshot-created-n-projected-edge-s-at-z-0 =FLATSHOT: vytvořen __ocs_fmt_0__ promítnutý okraj(y) na Z=0. + .flatshot-select-a-solid-created-this-session = FLATSHOT: vyberte těleso vytvořené v této relaci. + .fade = Vyblednout + .failed-to-create-layout-e = Vytvoření rozvržení se nezdařilo: __ocs_fmt_0__ + .feet = Nohy + .fence = Plot + .file-locations-are-unavailable-in-the-web-appl = Umístění souborů není ve webové aplikaci dostupné. + .fill-color-sentence-case = Barva výplně + .fill-color-aci-dimtfillclr = Barva výplně ACI (DIMTFILLCLR) + .fillet = Filet + .finalize-command-repeat-last = Dokončit příkaz / Opakovat jako poslední + .finalizing = Dokončování… + .find-and-replace = Najít a nahradit + .first-seg-angle = První seg. úhel: + .fit = Fit + .fit-dimatfit = Přizpůsobit (DIMATFIT) + .fit-legacy-dimfit = Přizpůsobit (starší DIMFIT) + .fixed-height = Pevná výška: + .fixed-length-dimfxl = Pevná délka (DIMFXL) + .fixed-length-ext-lines-dimfxlon = Ext linky pevné délky (DIMFXLON) + .flat-shaded = Ploché stínované + .flat-shaded-edges = Ploché stínované + okraje + .flow-direction = Směr toku: + .font-load-failed-script-e = Načtení písma se nezdařilo (__ocs_fmt_0__): __ocs_fmt_1__ + .force-text-inside-dimtix = Vynutit text uvnitř (DIMTIX) + .format = Formát + .format-dimlunit = Formát (DIMLUNIT) + .fraction-format-dimfrac = Formát zlomku (DIMFRAC) + .fractional = Zlomkové + .front = Přední + .full = Plný + .full-file-paths-are-unavailable-in-the-web-app = Úplné cesty k souborům nejsou ve webové aplikaci k dispozici. + .general = Generál + .generate-tolerances-dimtol = Vygenerovat tolerance (DIMTOL) + .geometry = Geometrie + .gouraud-shaded = Gouraud Shaded + .gouraud-shaded-edges = Gouraud stínované + hrany + .green = Zelená + .group = Skupina + .group-created = Byla vytvořena skupina „__ocs_fmt_0__“. + .groups = Skupiny + .h-margin = Okraj H: + .hatchedit-hatch-entity-not-found = HATCHEDIT: entita šrafování nebyla nalezena. + .hatchedit-hatch-updated = HATCHEDIT: poklop aktualizován. + .hatchedit-not-a-hatch-entity = HATCHEDIT: není šrafovací entita. + .handle = Rukojeť + .hatch = Poklop + .header-row = Řádek záhlaví: + .header-row-suppressed = Řádek záhlaví byl potlačen + .height = Výška + .height-dimtxt = Výška (DIMTXT) + .helix = Spirála + .hidden = Skrytá + .hidden-line = Skrytá čára + .high = Vysoká + .horizontal = Horizontální + .horizontal-inside-dimtih =Horizontální vnitřní (DIMTIH) + .horizontal-just-dimjust = Pouze horizontální (DIMJUST) + .horizontal-outside-dimtoh = Horizontální vnější (DIMTOH) + .hyperlink = Hypertextový odkaz + .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: importováno „__ocs_fmt_0__“ jako síť. + .importobj-target-drawing-was-closed = IMPORTOBJ: cílové kreslení bylo uzavřeno. + .importobj-error = IMPORTOBJ: __ocs_fmt_0__ + .interfere-created-an-interference-solid-from-t = INTERFERE: vytvořil interferenční těleso z překrytí. + .interfere-select-exactly-two-solids-created-th = INTERFERE: vyberte přesně dvě tělesa vytvořená v této relaci. + .interfere-the-selected-solids-do-not-overlap = INTERFERE: vybraná tělesa se nepřekrývají. + .import = Importovat + .inches = palce + .index = Index + .insert = Vložit + .insert-block = Vložit blok + .insertion = Vkládání + .installed = Instalováno + .intersection = Křižovatka + .invert-selection-object-s-selected = Invertovat výběr: Vybrány objekty __ocs_fmt_0__. + .invisible = Neviditelný + .jis = JIS + .join-count-in-object-s-joined-into-count-out = JOIN: Objekty __ocs_fmt_0__ spojené do __ocs_fmt_1__. + .jog-angle-dimjogang = Úhel posuvu ° (DIMJOGANG) + .join = Připojte se + .keep-0-ft-drop-0-in = Udržujte 0 stop, spusťte 0 + .keep-recent-files = Uchovávejte poslední soubory + .kilometers = Kilometry + .layerstate-deleted-name = LAYERSTATE: odstraněno "__ocs_fmt_0__". + .layerstate-restored-name-restored-layer-s = LAYERSTATE: obnoveno "__ocs_fmt_0__" (vrstvy __ocs_fmt_1__). + .layerstate-saved-name-in-the-drawing = LAYERSTATE: uloženo "__ocs_fmt_0__" ve výkresu. + .layerstate-updated-name = LAYERSTATE: aktualizováno "__ocs_fmt_0__". + .layout-e = LAYOUT: __ocs_fmt_0__ + .lengthen-applied = LENGTHEN: použito. + .lengthen-entity-type-not-supported = LENGTHEN: Typ entity není podporován. + .loft-could-not-loft-profiles-ensure-sections-h = LOFT: Profily nelze loftovat. Ujistěte se, že sekce mají stejný počet hran a jsou kompatibilní. + .loft-solid-created-from-profiles = LOFT: těleso vytvořené z profilů __ocs_fmt_0__. + .landing-distance-sentence-case = Vzdálenost přistání + .landing-distance-label-sentence-case = Vzdálenost přistání: + .landing-gap-sentence-case = Přistávací mezera + .landing-gap-label-sentence-case = Přistávací mezera: + .landscape = Krajina + .language-title-case = Jazyk + .language-label-title-case = jazyk: + .layer = Vrstva + .layer-matched-to-layer = Vrstva odpovídá „__ocs_fmt_0__“. + .layer-state-name-already-exists =Stav vrstvy "__ocs_fmt_0__" již existuje. + .layer-state-name-was-not-found = Stav vrstvy "__ocs_fmt_0__" nebyl nalezen. + .layer-state-name-cannot-be-empty = Název stavu vrstvy nemůže být prázdný. + .layers = Vrstvy + .layout = Rozložení + .layout-name-silindi = Rozložení „__ocs_fmt_0__“ bylo odstraněno + .layout-new-name-created-use-mview-to-add-a-vie = Bylo vytvořeno rozvržení „__ocs_fmt_0__“ – pomocí MVIEW přidejte výřez + .layout-orig-new-name = Rozložení "__ocs_fmt_0__" → "__ocs_fmt_1__" + .layout-name-created = Bylo vytvořeno rozvržení '__ocs_fmt_0__'. + .layout-name-deleted = Rozvržení „__ocs_fmt_0__“ bylo smazáno. + .layout-manager = Správce rozložení + .layout-name-cannot-be-empty = Název rozvržení nemůže být prázdný. + .layout-renamed-old-name-new-name = Rozložení přejmenováno: „__ocs_fmt_0__“ → „__ocs_fmt_1__“ + .leader = vůdce + .leader-format = Formát vůdce + .leader-structure = Struktura vůdce + .leaders = Vedoucí + .leading-trailing = Vedení a konec + .left = Vlevo + .left-attachment = Levá příloha: + .left-to-right-dimtxtdirection = Zleva doprava (DIMTXTDIRECTION) + .length = Délka + .light = Světlo + .limits-generation-dimlim = Generování limitů (DIMLIM) + .line = Linka + .linear = Lineární + .lines = Čáry + .linetype-title-case = Typ čáry + .linetype-scale = Měřítko typu čáry + .lineweight-title-case = Tloušťka čáry + .list = Seznam + .loaded = Nabito + .loading-discussions = Načítání diskuzí… + .loading-videos = Načítání videí… + .load = Načíst… + .low = Nízká + .measure-entity-type-not-supported-or-distance = MEASURE: Typ entity není podporován nebo je vzdálenost příliš velká. + .measure-count-point-s-placed = MEASURE: Umístění bodu(ů) __ocs_fmt_0__. + .mleaderalign-leaders-aligned = MLEADERALIGN Vůdce zarovnány. + .mleadercollect-leaders-collected = MLEADERCOLLECT Lídři shromážděni. + .model-uppercase = MODEL + .ms-is-only-available-in-paper-space-layouts = MS je k dispozici pouze v rozložení papírového prostoru. + .mspace = MSPACE + .mtext = Mtext + .mview-the-clipping-boundary-has-no-usable-area = MVIEW: hranice oříznutí nemá žádnou použitelnou plochu. + .magenta = purpurová + .manage = Spravovat + .meters = metrů + .middle = Střední + .middle-center-title-case = Střed střed + .middle-left-title-case = Uprostřed vlevo + .middle-right-title-case = Uprostřed vpravo + .middle-center-sentence-case = Střed uprostřed + .middle-left-sentence-case = Uprostřed vlevo + .middle-right-sentence-case = Uprostřed vpravo + .middleleft = Uprostřed vlevo + .middleright =Uprostřed vpravo + .midpoint = Střed + .miles = Miles + .millimeters = milimetry + .model-title-case = Model + .modify = Upravit + .move = Pohybujte se + .multiple = Vícenásobné + .multiplier-dimaltf = Násobitel (DIMALTF) + .name-title-case = Jméno + .name-label-title-case = jméno: + .nearest = Nejbližší + .new = Nové + .no = ne + .no-drawing-open-use-new-or-open-first = Žádný výkres není otevřený – nejprve použijte Nový nebo Otevřít. + .no-groups-found-for-selected-objects = Pro vybrané objekty nebyly nalezeny žádné skupiny. + .no-plugin-handled-command = Nebyl zpracován žádný plugin: __ocs_fmt_0__ + .no-viewport-found-in-this-layout = V tomto rozložení nebyl nalezen žádný výřez. + .node = Uzel + .none-title-case = žádný + .normal = Normální + .nothing-found-at-that-point = V tu chvíli nebylo nic nalezeno. + .nothing-to-redo = Není co předělávat. + .nothing-to-undo = Není co vrátit. + .ok = OK + .object-title-case = Objekt + .object-is-on-locked-layer-layer-unlock-the-layer-to-edit-it = Objekt je na zamčené vrstvě "__ocs_fmt_0__" — odemkněte vrstvu, abyste ji mohli upravit. + .object-is-on-locked-layer-layer-unlock-the-layer-to-select-or-edit-it = Objekt je na zamčené vrstvě "__ocs_fmt_0__" — odemkněte vrstvu, abyste ji mohli vybrat nebo upravit. + .oblique = Šikmé (°): + .oblique-angle = Šikmý úhel + .off = Vypnuto + .offset = Offset + .on = Zapnuto + .open = Otevřít + .open-dwg-dxf-not-yet-implemented = Otevřít DWG/DXF: dosud neimplementováno. + .open-cancelled = Otevření zrušeno: "__ocs_fmt_0__" + .open-failed-e = Otevření se nezdařilo: __ocs_fmt_0__ + .open-or-create-a-drawing-to-add-a-layout = Otevřete nebo vytvořte výkres a přidejte rozvržení. + .open-or-create-a-drawing-to-manage-layer-state = Otevřete nebo vytvořte výkres pro správu stavů hladin. + .open-or-create-a-drawing-to-manage-layouts = Otevřete nebo vytvořte výkres pro správu rozvržení. + .open-or-create-a-drawing-to-switch-layouts = Otevřete nebo vytvořte výkres a přepněte rozvržení. + .opened-file-location = Umístění otevřeného souboru: __ocs_fmt_0__ + .opening-name-size-label = Otevírá se „__ocs_fmt_0__“ (__ocs_fmt_1__)… + .options-title-case = Možnosti + .origin = Původ + .ortho = Ortho + .output = Výstup + .outside = Venku + .outside-limits = Mimo limity. + .overall-scale = Celkové měřítko + .overwrite = Přepsat + .pedit-applied = PEDIT: použito. + .pedit-cannot-convert-this-entity = PEDIT: Tuto entitu nelze převést. + .pedit-operation-not-applicable-to-this-entity = PEDIT: operace se na tuto entitu nevztahuje. + .perf = PERF + .polysolid-built-a-wall-solid-from-used-segment =POLYSOLID: postavil pevnou stěnu ze segmentů __ocs_fmt_0__ (šířka __ocs_fmt_1__, výška __ocs_fmt_2__). + .polysolid-select-a-polyline-first = POLYSOLID: nejprve vyberte křivku. + .polysolid-the-polyline-has-no-usable-segments = POLYSOLID: křivka nemá žádné použitelné segmenty. + .pspace = PSPACE + .pyramid-could-not-build-all-faces = PYRAMID: Nelze sestavit všechny plochy. + .pyramid-created-a-n-sided-pyramid-radius-radiu = PYRAMID: vytvořil jehlan se stěnou __ocs_fmt_0__ (poloměr __ocs_fmt_1__, výška __ocs_fmt_2__). + .pyramid-radius-and-height-must-be-positive = PYRAMID: poloměr a výška musí být kladné. + .pyramid-tessellation-failed = PYRAMID: teselace se nezdařila. + .pyramid-tessellation-produced-no-geometry = PYRAMID: teselace neprodukovala žádnou geometrii. + .page-setup = Nastavení stránky + .paper = Papír + .parallel = Paralelní + .parsing-entities = Analýza entit… + .paste = Vložit + .perpendicular = Kolmý + .photometric = Fotometrické + .pick-a-point = Vyberte bod + .pick-an-object = Vyberte objekt + .pinned = Připnuto + .place-text-manually-dimupt = Umístit text ručně (DIMUPT) + .plot = Spiknutí + .plot-style = Styl zápletky + .plot-style-loaded-color-entries = Načten styl vykreslování '__ocs_fmt_0__' (barevné položky __ocs_fmt_1__). + .plot-style-table-cleared = Tabulka stylu vykreslování byla vymazána. + .plot-style-table-saved-to = Tabulka stylu vykreslování byla uložena do "__ocs_fmt_0__". + .plot-window-x0-2-y0-2-to-x1-2-y1-2 = Okno grafu: __ocs_fmt_0__,__ocs_fmt_1__ až __ocs_fmt_2__,__ocs_fmt_3__ + .plot-window-x1-2-y1-2-to-x2-2-y2-2 = Okno grafu: __ocs_fmt_0__,__ocs_fmt_1__ až __ocs_fmt_2__,__ocs_fmt_3__ + .plugin-id-failed-to-load-e = Plugin '__ocs_fmt_0__' se nepodařilo načíst: __ocs_fmt_1__ + .plugin-manager = Správce pluginů + .point = Bod + .point-cloud = Mrak bodů + .polyline = Polyline + .portrait = Portrét + .position = Pozice + .position-x = Pozice X + .position-y = Pozice Y + .position-z = Pozice Z + .precision = Přesnost + .preset = Přednastaveno + .previous = Předchozí + .primary = Primární + .primary-units = Primární jednotky + .print = Tisk + .print-failed-e = Tisk se nezdařil: __ocs_fmt_0__ + .prompt = Výzva + .properties = Vlastnosti + .properties-matched-to-object-s = Vlastnosti odpovídající objektu(ům) __ocs_fmt_0__. + .qselect-object-s-selected = QSELECT: Vybrány objekty __ocs_fmt_0__. + .quadrant = Kvadrant + .quality = Kvalita + .revolve-could-not-revolve-profile =REVOLVE: Profil nelze otočit. + .revolve-entity-not-found = REVOLVE: entita nenalezena. + .revolve-solid-created-0 = REVOLVE: vytvořeno pevné těleso (__ocs_fmt_0__°). + .radians = radiány + .radius = Poloměr + .ray = Paprsek + .read-only-session-read-only-saving-is-disabled = Relace pouze pro čtení (--read-only): ukládání je zakázáno. + .realistic = Realistické + .recent-documents = Nedávné dokumenty + .recent-files = Nedávné soubory + .recent-file-no-longer-exists = Poslední soubor již neexistuje: __ocs_fmt_0__ + .red = Červená + .redo-last-label = Znovu: __ocs_fmt_0__ + .reference = Odkaz + .reference-point = Referenční bod + .remove-leader = Odebrat vůdce + .rename = Přejmenovat + .renamed-old-new = Přejmenováno na „__ocs_fmt_0__“ → „__ocs_fmt_1__“. + .replace = Vyměňte + .replacement-text = Náhradní text + .report = Zpráva + .requires-0-or-1-or-multiple-or-single = Vyžaduje 0 OR 1 OR MULTIPLE OR SINGLE. + .requires-single-or-multiple = Vyžaduje Single nebo Multiple. + .restore = Obnovit + .retry = Zkuste to znovu + .reverse = Reverzní + .right = Správně + .right-attachment = Pravá příloha: + .rotate = Otočit + .rotation = Rotace + .round-off-dimaltrnd = Zaokrouhlení (DIMALTRND) + .round-off-dimrnd = Zaokrouhlení (DIMRND) + .section-could-not-build-the-cutting-plane = SECTION: Nelze sestavit rovinu řezu. + .section-could-not-determine-the-solid-s-extent = SECTION: Nelze určit rozsah tělesa. + .section-created-section-line-s-at-value = SECTION: vytvořena čára(y) řezu __ocs_fmt_0__ na __ocs_fmt_1__=__ocs_fmt_2__. + .section-select-exactly-one-solid-created-this = SECTION: vyberte přesně jedno těleso vytvořené v této relaci. + .section-solid-modelling-is-unavailable-in-this = SECTION: Solid modeling není v tomto sestavení k dispozici. + .section-the-plane-does-not-cross-the-solid = SECTION: rovina neprotíná těleso. + .slice-failed-the-plane-may-not-cross-the-solid = SLICE selhalo – letadlo nesmí protnout těleso. + .slice-could-not-determine-the-solid-s-extent = SLICE: Nelze určit rozsah tělesa. + .slice-cut-at-ax-value-kept-the-half = SLICE: řez na __ocs_fmt_0__=__ocs_fmt_1__, zachování poloviny __ocs_fmt_2__. + .slice-select-exactly-one-solid-created-this-se = SLICE: vyberte přesně jedno těleso vytvořené v této relaci. + .slice-the-plane-does-not-cross-the-solid-on-th = SLICE: rovina neprotíná těleso na držené straně. + .splinefit-fit-a-spline-through-n-points = SPLINEFIT: proložení spline přes body __ocs_fmt_0__. + .splinefit-need-at-least-3-points =SPLINEFIT: potřebujete alespoň 3 body. + .splinefit-select-a-polyline-to-fit-a-spline-th = SPLINEFIT: vyberte křivku pro proložení spline. + .stepout-exported-to = STEPOUT: exportováno do "__ocs_fmt_0__" + .stepout-no-3d-mesh-data-in-this-drawing = STEPOUT: v tomto výkresu nejsou žádná data 3D sítě. + .stepout-error = STEPOUT: __ocs_fmt_0__ + .stlout-exported-to = STLOUT: exportováno do "__ocs_fmt_0__" + .stlout-no-3d-mesh-data-in-this-drawing = STLOUT: v tomto výkresu nejsou žádná data 3D sítě. + .stlout-error = STLOUT: __ocs_fmt_0__ + .stretch-nothing-crosses-the-window = STRETCH: Oknem nic nepřekročí. + .stretch-count-entity-ies-stretched = STRETCH: Entita(y) __ocs_fmt_0__ roztažená. + .sweep-could-not-sweep-profile-along-path-use-a = SWEEP: Nelze posunout profil podél cesty. Použijte uzavřený 2D profil a cestu čáry nebo křivky. + .sweep-solid-created = SWEEP: těleso vytvořeno. + .save = Uložit + .save-as = Uložit jako + .save-drawing-as = Uložit výkres jako + .save-already-running-for-this-drawing = Uložit již běžící pro tento výkres. + .save-anyway = Přesto uložit + .save-error-e = Chyba ukládání: __ocs_fmt_0__ + .save-in-source-version = Uložit ve zdrojové verzi + .save-the-drawing-before-copying-its-file-path = Před zkopírováním cesty k souboru výkres uložte. + .save-the-drawing-before-opening-its-file-locat = Před otevřením umístění souboru výkres uložte. + .saved-download-but-recent-copy-could-not-be-st = Stahování bylo uloženo, ale poslední kopii nelze uložit: __ocs_fmt_0__ + .scale = Měřítko + .scene-cleared = Scéna vymazána. + .scene-cleared-standard-linetypes-loaded = Scéna vymazána. Načteny standardní typy čar. + .scientific = Vědecký + .search-layers = Prohledat vrstvy… + .second-seg-angle = Druhý seg. úhel: + .select-all = Vyberte Vše + .select-similar-added = Vybrat Podobné: Přidáno __ocs_fmt_0__. + .select-a-tangent-object = Vyberte tečný objekt. + .select-one-object-first-then-run-objectscale = Nejprve vyberte jeden objekt a poté spusťte OBJECTSCALE. + .send-feedback = Odeslat zpětnou vazbu + .sent-to-printer-printer = Odesláno do tiskárny: __ocs_fmt_0__ + .set-current = Nastavit aktuální + .shade-plot = Stínový pozemek + .shadow-flags = Stínové vlajky + .single = Svobodný + .size = Velikost + .snap-override-label-next-pick-only = Přepsání uchopení: __ocs_fmt_0__ (pouze další výběr). + .solid-created = Pevná látka vytvořena. + .source-object-not-found = Zdrojový objekt nebyl nalezen. + .spacing = Mezery + .spacing-dimdli = Rozteč (DIMDLI) + .sphere = Koule + .spline = Spline + .sponsors = sponzoři + .standard = Standardní + .start =Začněte + .start-angle = Počáteční úhel + .status = Stav + .stretch = Protáhnout + .style-name-created = Styl '__ocs_fmt_0__' byl vytvořen. + .style-name-deleted = Styl „__ocs_fmt_0__“ byl smazán. + .style-new-already-exists = Styl '__ocs_fmt_0__' již existuje. + .success = Úspěch + .suffix-dimapost = Přípona (DIMAPOST) + .suffix-dimpost = Přípona (DIMPOST) + .support-on-patreon = Podpora na Patreon + .supporters = Příznivci + .suppress-0-ft-0-in = Potlačit 0 stop & 0 palců + .suppress-leading = Potlačit vedení + .suppress-leading-trailing = Potlačit vedení a sestup + .suppress-leading-zeros = Potlačit úvodní nuly + .suppress-none = Žádné potlačit + .suppress-outside-arrows-dimsoxd = Potlačit vnější šipky (DIMSOXD) + .suppress-trailing = Potlačit koncové + .suppress-trailing-zeros = Potlačit koncové nuly + .switched-to-layout-name = Přepnuto na rozvržení „__ocs_fmt_0__“. + .textedit-selected-entity-is-not-text = TEXTEDIT: vybraná entita není text. + .texteditmode-set-to-display-val = TEXTEDITMODE nastaveno na __ocs_fmt_0__ + .table = Tabulka + .tag = Štítek + .tangent = Tangenta + .text = Text + .text-alignment = Zarovnání textu: + .text-always-left = Text vždy vlevo + .text-angle = Úhel textu: + .text-color-sentence-case = Barva textu + .text-color-aci = Barva textu (ACI): + .text-color-aci-dimclrt = Barva textu ACI (DIMCLRT) + .text-fill-mode-dimtfill = Režim textové výplně (DIMTFILL) + .text-frame = Textový rámeček + .text-gap-dimgap = Mezera textu (DIMGAP) + .text-height-sentence-case = Výška textu + .text-height-label-sentence-case = Výška textu: + .text-movement = Pohyb textu + .text-movement-dimtmove = Pohyb textu (DIMTMOVE) + .text-out-first = Nejprve odešlete SMS + .text-style = Styl textu + .text-to-find = Text k nalezení + .the-selected-object-does-not-support-annotatio = Vybraný objekt nepodporuje měřítka poznámek. + .tick-size-dimtsz = Velikost klíštěte (DIMTSZ) + .title = Název + .title-row = Titulní řádek: + .title-row-suppressed = Řádek nadpisu byl potlačen + .toggle-dynamic-input = Přepnout dynamický vstup + .toggle-object-snap = Přepnout uchopení objektu + .toggle-object-snap-tracking = Přepnout sledování uchopení objektu + .toggle-ortho = Přepnout Ortho + .toggle-polar-tracking = Přepnout polární sledování + .tol-decimals-dimalttd = Tol desetinná místa (DIMALTTD) + .tol-zero-supp-dimalttz = Tol zero supp (DIMALTTZ) + .tol-decimals-dimtdec = Tol. desetinná místa (DIMTDEC) + .tol-vert-just-dimtolj =Tol. vert just (DIMTOLJ) + .tol-zero-supp-dimtzin = Tol. nulová podpora (DIMTZIN) + .tolerance = Tolerance + .tolerance-precision = Toleranční přesnost + .tolerances = Tolerance + .tool-palettes = + Nástroj + Palety + .top = Nahoru + .top-center-title-case = Nahoru Střed + .top-left-title-case = Vlevo nahoře + .top-right-title-case = Vpravo nahoře + .top-attachment = Horní příloha: + .top-center-sentence-case = Horní střed + .top-left-sentence-case = Vlevo nahoře + .top-right-sentence-case = Vpravo nahoře + .top-to-bottom = Shora dolů + .topcenter = Horní střed + .topleft = Vlevo nahoře + .topright = Vpravo nahoře + .torus = Torus + .transparency = Transparentnost + .truetype-system = TrueType (systém) + .ttr = Ttr + .tutorials = Tutoriály + .type = Typ + .ucs-world = UCS: Svět + .ucs = UCS: __ocs_fmt_0__ + .unable-to-change-ui-language-error = Nelze změnit jazyk UI: __ocs_fmt_0__ + .undo = Vrátit zpět + .undo-last-label = Zpět: __ocs_fmt_0__ + .uniform-scale = Jednotné měřítko + .unit = Jednotka + .unit-format-dimaltu = Formát jednotky (DIMALTU) + .unit-format-dimunit = Formát jednotky (DIMUNIT) + .unitless = Bez jednotky + .unknown = Neznámý + .unsaved-changes = Neuložené změny + .unsupported-file-type = Nepodporovaný typ souboru: __ocs_fmt_0__ + .up = Nahoru + .update-available = Aktualizace k dispozici + .upside-down = Vzhůru nohama + .v-margin = Okraj V: + .vplayer-frozen-count-layer-s-frozen-in-viewpor = VPLAYER: __ocs_fmt_0__ vrstva(y) zmrazená ve výřezu. + .vplayer-thawed-count-layer-s-thawed-in-viewpor = VPLAYER: Vrstva(y) __ocs_fmt_0__ ve výřezu rozmrzla. + .value = Hodnota + .version = Verze + .vertical = Vertikální + .vertical-pos-dimtad = Vertikální pozice (DIMTAD) + .vertical-pos-dimtvp = Vertikální pozice (DIMTVP) + .videos = videa + .videos-load-from-the-internet = Videa se načítají z internetu. + .view = Zobrazit + .view-home = Pohled: Domů + .view-value = Pohled: __ocs_fmt_0__ + .viewport = Výřez + .viewport-visual-style-label = Vizuální styl výřezu: __ocs_fmt_0__ + .visual-style = Vizuální styl + .visual-style-label = Vizuální styl: __ocs_fmt_0__ + .wblock-saved-block-name = WBLOCK Uloženo "__ocs_fmt_0__" → "__ocs_fmt_1__" + .wblock-save-failed-error = Uložení WBLOCK se nezdařilo: __ocs_fmt_0__ + .web = Web + .wedge =Klín + .weight = Hmotnost + .welcome = Vítejte + .white = Bílá + .width = šířka + .width-factor-title-case = Šířkový faktor + .width-factor-label-title-case = Šířkový faktor: + .width-factor-sentence-case = Šířkový faktor + .window = okno + .wipeout = Wipeout + .wireframe = Drátový model + .with-text = S Textem + .world = svět + .xattach-e = XATTACH: __ocs_fmt_0__ + .xline = XLine + .xref-not-found = XREF Nenalezeno: "__ocs_fmt_0__" (__ocs_fmt_1__) + .xref-unloaded-skipped = XREF Nenačteno (přeskočeno): "__ocs_fmt_0__" + .yards = Yardy + .yellow = Žlutá + .yes = Ano + .zero-suppress-dimaltz = Potlačení nuly (DIMALTZ) + .zero-suppress-dimzin = Potlačení nuly (DIMZIN) + .zoom-extents = Rozsahy přiblížení + .zoom-in = Přiblížit + .zoom-out = Oddálit + .zoom-window = Zoom okno + .command-lowercase = příkaz + .e-g-arial = např. Arial + .linetype-lowercase = typ čáry + .lineweight-lowercase = tloušťka čáry + .object-lowercase = objekt + .options-lowercase = možnosti + .units = jednotek + .count-object-s-added-to-selection = Objekt(y) __ocs_fmt_0__ přidán do výběru. + .count-object-s-pasted = Objekt(y) __ocs_fmt_0__ vložen. + .label-count-noun-created = __ocs_fmt_0__: __ocs_fmt_1__ __ocs_fmt_2__ vytvořeno. + .acquired = Získáno __ocs_fmt_0__. + .alias-es-applied = Byly použity aliasy __ocs_fmt_0__. + .group-s-dissolved = Skupina(y) __ocs_fmt_0__ rozpuštěna. + .layer-s-turned = Vrstva(y) __ocs_fmt_0__ se změnila na __ocs_fmt_1__ + .layer-s = __ocs_fmt_0__ vrstva(y) __ocs_fmt_1__ + .mod-shortcuts = ── __ocs_arg_MOD__ Zkratky ────────────────────────────────└──└─ — + .custom-overrides-shortcuts-set = ── Vlastní přepisy (SHORTCUTS SET) ────────────────── + .function-keys = ── Funkční klávesy ────────────────────────────────└──└─ — + .other-keys = ── Další klávesy ───────────────────── ───────────────────── + .prefix = Předpona + .suffix = Přípona + +errors = + .save-warning = Uložit varování + .unable-to-save-drawing = Nákres nelze uložit + .warning = Varování + +command = + .name-select-objects-then-press-enter = __ocs_arg_name__ vyberte objekty a stiskněte Enter: + .name-which-register-1-5 = __ocs_arg_name__ který registr? [1-5]: + .name-slot-new-value = Nová hodnota __ocs_arg_name____ocs_arg_slot__: + .cancel = *Zrušit* + .add-alias = + Přidat alias + .alias-title-case = Přezdívka + .cannot-add-a-vertex-here =Zde nelze přidat vrchol. + .cannot-break-at-this-vertex = V tomto vrcholu nelze zlomit. + .cannot-place-the-new-vertex = Nelze umístit nový vrchol. + .command = Příkaz + .command-aliases = Aliasy příkazů + .key = klíč + .keyboard-shortcuts = Klávesové zkratky + .layer-0-and-the-current-layer-can-t-be-deleted = Vrstvu "0" a aktuální vrstvu nelze smazat – přeskočit. + .no-drawing-open-use-new-or-open-to-start-a-dra = Žádný otevřený výkres. Ke spuštění kreslení použijte NEW nebo OPEN. + .object-is-on-locked-layer-layer-unlock-the-lay = Objekt je na zamknuté vrstvě "__ocs_fmt_0__" — odemkněte vrstvu a upravte její atributy. + .pan-ended = PAN skončilo. + .polyline-broken-at-vertex = Křivka přerušená ve vrcholu. + .rename-select-the-object-type-to-rename = RENAME Vyberte typ objektu, který chcete přejmenovat: + .rename-type-enter-the-current-name = RENAME __ocs_arg_type__ Enter aktuální název: + .rename-type-rename-old-to = RENAME __ocs_arg_type__ Přejmenujte "__ocs_arg_old__" na: + .specify-new-vertex-location = Zadejte nové umístění vrcholu: + .type-shortcuts-set-key-cmd-to-add-custom-short = Chcete-li přidat vlastní zástupce, zadejte SHORTCUTS SET . + .type-an-alias-and-the-command-it-runs-e-g-l-li = Zadejte alias a příkaz, který se spustí (např. L → LINE). Použít pro uložení do ocad.pgp; uzavřením se zahodí nepoužité úpravy. + .unknown-command-cmd = Neznámý příkaz: __ocs_fmt_0__ + .alias-lowercase = alias + .label = __ocs_fmt_0__: + .expected-a-number-got-raw = __ocs_fmt_0__: očekáváno číslo, mám "__ocs_fmt_1__" + .tcount-select-text-objects-then-press-enter = TCOUNT vyberte textové objekty a stiskněte Enter: + .tcount-starting-number-start = Startovní číslo TCOUNT <__ocs_fmt_0__>: + .tcount-increment-increment = Přírůstek TCOUNT <__ocs_fmt_0__>: + .tcount-placement-overwrite-prefix-suffix-overw = Umístění TCOUNT [přepsat/předpona/přípona] : + +file = + .parse-ms-purge-ms-caches-ms-xref-ms-total-ms = analyzovat __ocs_fmt_0__ms · vyčistit __ocs_fmt_1__ms · mezipaměti __ocs_fmt_2__ms · xref __ocs_fmt_3__ms · celkem __ocs_fmt_4__ms + .archive-save-the-drawing-first-it-has-no-file = ARCHIVE: nejprve uložte výkres (ještě nemá žádnou cestu k souboru). + .autosaved-1-drawing = Automaticky uložen 1 výkres + .background-colour-default-black-darkgray-gray = Barva BACKGROUND [Výchozí/Černá/Tmavě šedá/Šedá/Světlešedá/Bílá] nebo R G B (0–255): + .background-reset-to-default = Pozadí resetováno na výchozí. + .background-rgb = Pozadí: rgb (__ocs_fmt_0__, __ocs_fmt_1__, __ocs_fmt_2__) + .created-new-ctb-table-aci-aci-updated = Byla vytvořena nová tabulka CTB, aktualizováno ACI __ocs_fmt_0__. + .default-save-format = Výchozí formát uložení: + .do-you-want-to-save-changes-to-name =Chcete uložit změny "__ocs_arg_name__"? + .drawing-changed-on-disk = Kresba změněna na disku + .drawing-units-insunits-click-to-change = + Výkresové jednotky (INSUNITS) + Klikněte pro změnu + .drawing-changed-on-disk-while-it-was-opening-s = Kresba se změnila na disku během jeho otevírání; Uložit bude vyžadovat vyřešení konfliktu. + .edit-lease-active-warning-external-change-chec = Upravit pronájem aktivní; __ocs_fmt_0__. Kontroly externí změny zůstávají aktivní. + .files-you-open-will-show-up-here = Zde se zobrazí soubory, které otevřete. + .new-drawing = Nová kresba + .no-plot-style-table-loaded-load-or-create-one = Nebyla načtena žádná tabulka stylu vykreslování. Nejprve načtěte nebo vytvořte jeden. + .nothing-to-plot-model-space-contains-no-printa = Není co vykreslovat: modelový prostor neobsahuje žádnou tisknutelnou geometrii. + .oops-nothing-to-restore = OOPS: není co obnovit. + .oops-restored-n-object-s = OOPS: obnovený objekt(y) __ocs_fmt_0__. + .open-cad-studio-ready = Open CAD Studio připraven. + .open-discussions-on-github = Otevřít diskuse na GitHub + .open-file-title-case = Otevřete soubor + .open-file-picker-title-case = Otevřít soubor… + .open-and-save = Otevřít a uložit + .open-playlist-on-youtube = Otevřít seznam skladeb na YouTube + .opened-name-entity-count-entities = Otevřeno „__ocs_fmt_0__“ — entity __ocs_fmt_1__ + .opened-printer-properties = Otevřené vlastnosti tiskárny. + .opened-read-only-against-other-editors-error = Otevřeno pouze pro čtení proti jiným editorům: __ocs_fmt_0__ + .page-setup-applied-to-the-layout = Nastavení stránky použité na rozvržení. + .path-type = Typ cesty: + .plot-area-is-empty-pick-a-larger-window = Plocha pozemku je prázdná. Vyberte si větší okno. + .plot-style-aci-aci-updated = Styl vykreslování ACI __ocs_fmt_0__ aktualizován. + .plot-style-table-is-not-loaded = Tabulka stylu vykreslování '__ocs_fmt_0__' není načtena. + .quick-print-works-in-model-space = Rychlý tisk funguje v modelovém prostoru. + .reload-failed-error = Opětovné načtení se nezdařilo: __ocs_fmt_0__ + .saveall-save-each-tab-individually-in-the-web = SAVEALL: uložte každou kartu samostatně ve webovém sestavení. + .saveall-saved-saved-drawing-s = SAVEALL: uložený výkres(y) __ocs_fmt_0__ __ocs_fmt_1__. + .saveall-already-has-a-save-running = SAVEALL: __ocs_fmt_0__ již probíhá ukládání + .saveall-failed-e = SAVEALL: __ocs_fmt_0__ se nezdařilo: __ocs_fmt_1__ + .script-path-to-the-scr-file = Cesta SCRIPT k souboru .scr: + .script-cannot-read-p-e = SCRIPT: nelze číst __ocs_fmt_0__: __ocs_fmt_1__ + .script-running-command-s-from-p = SCRIPT: spuštění příkazu(ů) __ocs_fmt_0__ ze __ocs_fmt_1__. + .save-failed-error = Uložení se nezdařilo: __ocs_fmt_0__ + .save-failed-e = Uložení se nezdařilo: __ocs_fmt_0__ + .save-stopped-file-name-changed-outside-open-ca = Ukládání zastaveno: „__ocs_fmt_0__“ změněno mimo Open CAD Studio. + .saved-but-the-refreshed-drawing-is-locked-by-a =Uloženo, ale obnovený výkres je uzamčen jiným editorem: __ocs_fmt_0__ + .saved-filename = Uloženo: __ocs_fmt_0__ + .saved = Uloženo: __ocs_fmt_0__ + .selection-has-no-printable-area = Výběr nemá tisknutelnou oblast. + .selection-has-no-printable-geometry = Výběr nemá tisknutelnou geometrii. + .sending-to-system-printer = Odesílání na systémovou tiskárnu… + .type-a-command-or-use-the-ribbon-open-obj-inse = Zadejte příkaz nebo použijte pás karet. Otevřete OBJ: karta INSERT. + .unable-to-acquire-edit-lock-error = Nelze získat zámek úprav: __ocs_fmt_0__ + .unable-to-save-file-name-file-is-in-use-by-ano = Nelze uložit "__ocs_fmt_0__": soubor je používán jinou aplikací. + .unable-to-save-error = Nelze uložit "__ocs_fmt_0__": __ocs_fmt_1__ + .usage-script-path-to-scr-file = Použití: SCRIPT + .usage-undo-number-of-steps = Použití: UNDO [počet kroků] + .used-for-the-first-save-of-a-new-drawing-exist = Používá se pro první uložení nového výkresu. Stávající výkresy si ponechají svůj typ souboru a verzi. + .visual-style-label = Vizuální styl: __ocs_fmt_0__. + .warning-corrupt-entities-dropped-parser-junk-b = Varování: __ocs_fmt_0__ poškozené entity byly odstraněny (nevyžádaná analyzátor – špatné normály / počty) + .warning-corrupt-xref-entities-dropped = Varování: __ocs_fmt_0__ poškozené entity externí reference byly zrušeny + .xref-loaded = XREF Načteno "__ocs_fmt_0__" + .cmd-cannot-create-folder-e = __ocs_fmt_0__: Nelze vytvořit složku (__ocs_fmt_1__). + .cmd-packaged-copied-file-s-into = __ocs_fmt_0__: zabalené soubory __ocs_fmt_1__ do __ocs_fmt_2__ + .error-external-change-checks-remain-active = __ocs_fmt_0__. Kontroly externí změny zůstávají aktivní. + .warning-external-change-checks-remain-active = __ocs_fmt_0__. Kontroly externí změny zůstávají aktivní. + .opening-a-drawing-by-path-is-not-available-in = Otevření výkresu podle cesty není v prohlížeči k dispozici. + +selection = + .cmd-select-objects-count-selected-enter-to-app = __ocs_arg_cmd__ Vyberte objekty (vybráno __ocs_arg_count__, použít Enter): + .cmd-select-objects = __ocs_arg_cmd__ Vyberte objekty: + .append-to-current-selection = Připojit k aktuálnímu výběru + .last = Poslední + +inquiry = + .handle-x = Rukojeť __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: Vytvoření nového __ocs_fmt_0__ není podporováno. + .addselected-selected-object-not-found = ADDSELECTED: vybraný objekt nebyl nalezen. + .add-selected-drawing-a-new-kind-on-layer-layer = Přidat vybrané: kreslení nového __ocs_fmt_0__ na vrstvu "__ocs_fmt_1__". + .angle-angle = Úhel = __ocs_arg_angle__° + .angle-0-0000-degenerate-rays = Úhel = 0.0000° (degenerované paprsky) + .area-area-perimeter-perimeter = Plocha = __ocs_arg_area__, obvod = __ocs_arg_perimeter__ + .bedit-block-edit-discarded =BEDIT: Úprava bloku „__ocs_fmt_0__“ byla zahozena. + .bedit-block-saved-all-references-updated = BEDIT: Blok "__ocs_fmt_0__" uložen. Všechny reference aktualizovány. + .bedit-editing-block-use-save-block-or-discard = BEDIT: Editační blok "__ocs_fmt_0__". K dokončení použijte Uložit blok nebo Zahodit. + .bedit-block-not-found = BEDIT: blok "__ocs_fmt_0__" nebyl nalezen. + .bedit-cannot-edit-an-external-reference-xref = BEDIT: nelze upravit externí referenci (xref). + .bedit-finish-the-active-refedit-refclose-first = BEDIT: dokončete nejprve aktivní REFEDIT (REFCLOSE). + .bedit-selected-object-is-not-a-block-reference = BEDIT: vybraný objekt není odkazem na blok. + .bedit-discard-invalid-block-editor-state = BEDIT_DISCARD: neplatný stav editoru bloku. + .bedit-discard-no-block-editor-is-open = BEDIT_DISCARD: není otevřen žádný editor bloků. + .bedit-save-invalid-block-editor-state = BEDIT_SAVE: neplatný stav editoru bloku. + .bedit-save-no-block-editor-is-open = BEDIT_SAVE: není otevřen žádný editor bloků. + .cal-expression-e-g-2-3-4 = Výraz CAL (např. (2+3)*4): + .cal-e = CAL: __ocs_fmt_0__ + .count-tally-all-by-type-by-layer = Shoda COUNT [Vše (podle typu) / podle vrstvy]: + .count-total-entity-ies-total = COUNT: Celkový počet entit __ocs_fmt_0__. + .dblist-drawing-has-no-entities = DBLIST: výkres nemá žádné entity. + .dblist-count-entit = DBLIST: Objekty __ocs_fmt_0__. + .dist-specify-first-point = DIST Zadejte první bod: + .dist-specify-second-point = DIST Zadejte druhý bod: + .divide-enter-number-of-segments = DIVIDE Enter počet segmentů: + .divide-select-object-to-divide = DIVIDE Vyberte objekt k rozdělení: + .deselected = Výběr zrušen. + .distance-dist-angle-in-xy-plane-angle-xy-delta = + Vzdálenost = __ocs_arg_dist__, úhel v rovině XY = __ocs_arg_angle_xy__° + Delta X = __ocs_arg_dx__, Delta Y = __ocs_arg_dy__, Delta Z = __ocs_arg_dz__ + .distance-dist-angle-in-xy-plane-angle-xy-angle = + Vzdálenost = __ocs_arg_dist__, úhel v rovině XY = __ocs_arg_angle_xy__°, úhel od roviny XY = __ocs_arg_angle_z__° + Delta X = __ocs_arg_dx__, Delta Y = __ocs_arg_dy__, Delta Z = __ocs_arg_dz__ + .find-replace-replaced-occurrence-s-of = FIND/REPLACE: nahrazen __ocs_fmt_0__ výskyt(y) "__ocs_fmt_1__" → "__ocs_fmt_2__". + .find-not-found = FIND: "__ocs_fmt_0__" nebyl nalezen. + .find-specify-search-text = FIND: zadejte hledaný text. + .find-match-es-for = FIND: __ocs_fmt_0__ shoda(y) pro "__ocs_fmt_1__". + .findall-text-to-find-add-replace-text-by-typin = FINDALL text k nalezení (přidejte REPLACE zadáním): + .flatten-no-entities =FLATTEN: žádné entity. + .flatten-entity-ies-moved-to-z-0 = FLATTEN: Entita(y) __ocs_fmt_0__ přesunuta do Z=0. + .id-specify-point = ID Určete bod: + .list-no-entities-selected-select-entities-firs = LIST: nebyly vybrány žádné entity. Nejprve vyberte entity. + .massprop-no-entities-selected-select-entities = MASSPROP: nebyly vybrány žádné entity. Nejprve vyberte entity. + .measure-select-object-to-measure = MEASURE Vyberte objekt k měření: + .measure-specify-segment-length = MEASURE Zadejte délku segmentu: + .measuregeom-enter-an-option-distance-radius-an = MEASUREGEOM Enter možnost [Vzdálenost/Poloměr/Úhel/Area]: + .measuregeom-select-arc-or-circle = MEASUREGEOM Vyberte oblouk nebo kružnici: + .measuregeom-specify-first-corner-point-enter-t = MEASUREGEOM Určete první rohový bod (zrušení Enter): + .measuregeom-specify-first-point = MEASUREGEOM Zadejte první bod: + .measuregeom-specify-first-ray-point = MEASUREGEOM Určete bod prvního paprsku: + .measuregeom-specify-next-point-n-picked-enter = MEASUREGEOM Zadejte další bod (vybráno __ocs_arg_n__, výpočet Enter): + .measuregeom-specify-second-point = MEASUREGEOM Zadejte druhý bod: + .measuregeom-specify-second-ray-point = MEASUREGEOM Zadejte bod druhého paprsku: + .measuregeom-specify-vertex-point = MEASUREGEOM Zadejte vrcholový bod: + .measure-geometry = Změřte geometrii + .qselect-no-matching-entities = QSELECT: žádné odpovídající entity. + .qselect-entity-ies-selected = QSELECT: Vybrané entity __ocs_fmt_0__. + .refclose-block-saved-all-references-updated = REFCLOSE: Blok "__ocs_fmt_0__" uložen. Všechny reference aktualizovány. + .refclose-changes-discarded = REFCLOSE: Změny byly zahozeny. + .refclose-no-refedit-session-active = REFCLOSE: není aktivní žádná relace REFEDIT. + .refedit-editing-block-run-refclose-to-save-ref = REFEDIT: Editační blok "__ocs_fmt_0__". Spusťte REFCLOSE pro uložení, REFCLOSE_DISCARD pro zrušení. + .refedit-a-session-is-already-active-use-refclo = REFEDIT: relace je již aktivní. Nejprve použijte REFCLOSE. + .refedit-block-not-found = REFEDIT: blok "__ocs_fmt_0__" nebyl nalezen. + .refedit-block-is-empty = REFEDIT: blok je prázdný. + .refedit-selected-object-is-not-an-insert = REFEDIT: vybraný objekt není INSERT. + .radius-radius-diameter-diameter = Rádius = __ocs_arg_radius__, Průměr = __ocs_arg_diameter__ + .selectall-object-s-selected = SELECTALL: Vybrány objekty __ocs_fmt_0__. + .selhandles-no-entities-selected-select-entitie = SELHANDLES: nebyly vybrány žádné entity. Nejprve vyberte entity. + .usage-cal-expression-e-g-cal-2-3-4 = Použití: CAL např. CAL (2+3)*4 + .usage-qselect-type-layer-color-linetype-value = Použití: 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__ Rukojeť:__ocs_fmt_1__ Vrstva:__ocs_fmt_2__ Barva:__ocs_fmt_3__ LT:__ocs_fmt_4____ocs_fmt_5__ + .area-4-perimeter-4-centroid-4-4 = __ocs_fmt_0__ Plocha=__ocs_fmt_1__ Obvod=__ocs_fmt_2__ Centroid=(__ocs_fmt_3__,__ocs_fmt_4__) + +draw = + .insert-x-no-attributes = Vložit __ocs_fmt_0__: žádné atributy. + .tag-val = [__ocs_fmt_0__] = __ocs_fmt_1__ + .no-closed-boundary-found = ⚠ Nebyla nalezena žádná uzavřená hranice. + .inverted = , obráceně + .value-2-point = 2-bodový + .value-2d-solid = 2D pevné + .value-3-point = 3-bodový + .value-3d-polyline = 3D křivka + .value-3dmirror-mirror-plane-x-y-z = 3DMIRROR zrcadlová rovina [X / Y / Z]: + .value-3dpoly-specify-next-point-close-undo = 3DPOLY Určete další bod [Zavřít/Zpět]: + .value-3dpoly-specify-next-point-undo = 3DPOLY Určete další bod [Undo]: + .value-3dpoly-specify-start-point-of-polyline = 3DPOLY Určete počáteční bod křivky: + .value-3drotate-angle-in-degrees = 3Úhel OTÁČENÍ ve stupních: + .value-3drotate-rotation-axis-x-y-z = 3DROTATE rotační osa [X / Y / Z]: + .arc-specify-center = ARC Specifikujte střed: + .arc-specify-end-point-c-cx-cy-r-r = ARC Zadejte koncový bod [c=(__ocs_arg_cx__,__ocs_arg_cy__) r=__ocs_arg_r__]: + .arc-specify-start-point = ARC Zadejte počáteční bod: + .arc-3p-specify-end-point = ARC 3P Zadejte koncový bod: + .arc-3p-specify-second-point-on-arc = ARC 3P Určete druhý bod na oblouku: + .arc-3p-specify-start-point = ARC 3P Zadejte počáteční bod: + .arc-csa-click-end-direction-or-type-arc-span-i = ARC CSA Klikněte na směr konce nebo zadejte rozsah oblouku ve stupních [start=__ocs_arg_sa__]: + .arc-csa-specify-center = ARC CSA Zadejte střed: + .arc-csa-specify-start-point = ARC CSA Zadejte počáteční bod: + .arc-csl-click-chord-end-or-type-chord-length-r = ARC CSL Klikněte na konec akordu nebo zadejte délku akordu [r=__ocs_arg_r__]: + .arc-csl-specify-center = ARC CSL Zadejte střed: + .arc-csl-specify-start-point = ARC CSL Zadejte počáteční bod: + .arc-continue-no-previous-line-or-arc-to-contin = ARC Pokračovat Žádný předchozí řádek nebo oblouk pro pokračování. + .arc-continue-specify-end-point-ctrl-flip-direc = ARC Pokračovat Určete koncový bod [Ctrl = směr převrácení]: + .arc-sca-click-end-direction-or-type-arc-span-i = ARC SCA Klikněte na směr konce nebo zadejte rozsah oblouku ve stupních [start=__ocs_arg_sa__]: + .arc-sca-specify-center =ARC SCA Zadejte střed: + .arc-sca-specify-start-point = ARC SCA Zadejte počáteční bod: + .arc-sce-specify-center = ARC SCE Zadejte střed: + .arc-sce-specify-end-point-r-r = ARC SCE Zadejte koncový bod [r=__ocs_arg_r__]: + .arc-sce-specify-start-point = ARC SCE Zadejte počáteční bod: + .arc-scl-click-chord-end-or-type-chord-length-r = ARC SCL Klikněte na konec akordu nebo zadejte délku akordu [r=__ocs_arg_r__]: + .arc-scl-specify-center = ARC SCL Zadejte střed: + .arc-scl-specify-start-point = ARC SCL Zadejte počáteční bod: + .arc-sea-specify-angle-move-cursor-perpendicula = ARC SEA Zadejte úhel (přesunout kurzor kolmo k tětivě): + .arc-sea-specify-end-point = ARC SEA Zadejte koncový bod: + .arc-sea-specify-start-point = ARC SEA Zadejte počáteční bod: + .arc-sed-specify-end-point = ARC SED Zadejte koncový bod: + .arc-sed-specify-start-point = ARC SED Zadejte počáteční bod: + .arc-sed-specify-tangent-direction-at-start = ARC SED Určete směr tečny na začátku: + .arc-ser-click-radius-point-or-type-radius-valu = ARC SER Klikněte na bod poloměru nebo zadejte hodnotu poloměru: + .arc-ser-specify-end-point = ARC SER Zadejte koncový bod: + .arc-ser-specify-start-point = ARC SER Zadejte počáteční bod: + .area-specify-first-corner-point-enter-to-cance = AREA Určete první rohový bod (zrušení Enter): + .area-specify-next-point-n-picked-enter-to-calc = AREA Zadejte další bod (vybráno __ocs_arg_n__, výpočet Enter): + .attdef-enter-attribute-tag-no-spaces = Značka atributu ATTDEF Enter (bez mezer): + .attdef-enter-default-value-for-tag-enter-blank = Výchozí hodnota ATTDEF Enter pro „__ocs_arg_tag__“ (Enter=prázdné): + .attdef-enter-prompt-for-tag-enter-use-tag = ATTDEF Enter výzva k zadání „__ocs_arg_tag__“ (značka Enter=): + .attdef-specify-insertion-point-for-tag = ATTDEF Zadejte bod vložení pro „__ocs_arg_tag__“: + .attdisp-attribute-display-on-off-normal = Zobrazení atributu ATTDISP [Zapnuto / Vypnuto / Normální]: + .attdisp-sub-count-attribute-definition-s-updat = ATTDISP __ocs_fmt_0__: Aktualizace definic atributů __ocs_fmt_1__. + .attedit-no-insert-entities-in-selection = ATTEDIT: žádné Vkládání entit do výběru. + .attedit-select-an-insert-entity-first = ATTEDIT: nejprve vyberte entitu Vložit. + .attedit-tag-tag-up-not-found-in-selection = ATTEDIT: tag '__ocs_fmt_0__' nebyl ve výběru nalezen. + .attedit-updated-changed-attribute-s-tag-up-new = ATTEDIT: aktualizované atributy __ocs_fmt_0__ [__ocs_fmt_1__] = __ocs_fmt_2__. + .arc-length-symbol-dimarcsym = Symbol délky oblouku (DIMARCSYM) + .axis = Osa + .axis-end =Osa, konec + .boundary-pick-internal-point-miss = BOUNDARY Vyberte vnitřní bod: __ocs_arg_miss__ + .boundary = Hranice + .centerline-select-first-line = CENTERLINE Vyberte první řádek: + .centerline-select-second-line = CENTERLINE Vyberte druhý řádek: + .circle-specify-center-point = CIRCLE Zadejte středový bod: + .circle-specify-radius-or-type-value-r-center-c = CIRCLE Zadejte poloměr nebo hodnotu typu <__ocs_arg_r__> [střed (__ocs_arg_cx__,__ocs_arg_cy__)]: + .circle-2p-specify-first-end-of-diameter = CIRCLE 2P Určete první konec průměru: + .circle-2p-specify-second-end-of-diameter = CIRCLE 2P Zadejte druhý konec průměru: + .circle-3p-specify-first-point = CIRCLE 3P Určete první bod: + .circle-3p-specify-second-point = CIRCLE 3P Zadejte druhý bod: + .circle-3p-specify-third-point = CIRCLE 3P Zadejte třetí bod: + .circle-cd-specify-center-point = CIRCLE CD Zadejte střed: + .circle-cd-specify-diameter-or-type-value-4-cen = CIRCLE CD Zadejte hodnotu průměru nebo typu <__ocs_fmt_0__> [střed (__ocs_fmt_1__,__ocs_fmt_2__)]: + .circle-ttr-select-first-tangent-object = CIRCLE TTR Vyberte první tečný objekt: + .circle-ttr-select-second-tangent-object = CIRCLE TTR Vyberte druhý tečný objekt: + .circle-ttr-specify-radius = CIRCLE TTR Zadejte poloměr: + .circle-ttt-select-first-tangent-object = CIRCLE TTT Vyberte první tečný objekt: + .circle-ttt-select-second-tangent-object = CIRCLE TTT Vyberte druhý tečný objekt: + .circle-ttt-select-third-tangent-object = CIRCLE TTT Vyberte třetí tečný objekt: + .copy-specify-base-point-count-objects = COPY Zadejte základní bod [objekty __ocs_arg_count__]: + .center-line = Středová čára + .center-mark = Středová značka + .center-axes = Střed, Osy + .center-diameter = Střed, Průměr + .center-radius = Střed, Radius + .center-start-angle = Střed, Start, Úhel + .center-start-end = Střed, začátek, konec + .center-start-length = Střed, začátek, délka + .circumscribed = Vymezené + .current-settings-edit-mode = Aktuální nastavení: Režim úprav = __ocs_fmt_0__ + .ddedit-selected-entity-is-not-text = DDEDIT: vybraná entita není text. + .dimcenter-select-arc-or-circle = DIMCENTER Vyberte oblouk nebo kružnici: + .donut-specify-center-of-donut-enter-to-exit = DONUT Zadejte střed prstence (Enter pro ukončení): + .donut-specify-inside-diameter-0 = DONUT Zadejte vnitřní průměr <0>: + .donut-specify-outside-diameter = DONUT Zadejte vnější průměr: + .draw-manually = Kreslit ručně + .ellipse-specify-center = ELLIPSE Specifikujte střed: + .ellipse-specify-major-axis-endpoint = ELLIPSE Zadejte koncový bod hlavní osy: + .ellipse-specify-minor-axis-point-or-type-half =ELLIPSE Zadejte bod vedlejší osy nebo zadejte poloviční délku [hlavní r=__ocs_fmt_0__]: + .ellipse-axis-specify-first-endpoint-of-major-a = ELLIPSE (osa) Zadejte první koncový bod hlavní osy: + .ellipse-axis-specify-minor-axis-point-or-type = ELLIPSE (osa) Zadejte bod vedlejší osy nebo zadejte poloviční délku [hlavní r=__ocs_fmt_0__]: + .ellipse-axis-specify-second-endpoint-of-major = ELLIPSE (osa) Zadejte druhý koncový bod hlavní osy: + .ellipse-arc-specify-center = ELLIPSE ARC Zadejte střed: + .ellipse-arc-specify-end-angle-point-or-type-de = ELLIPSE ARC Zadejte koncový bod úhlu nebo zadejte stupně [start=__ocs_arg_sa__]: + .ellipse-arc-specify-major-axis-endpoint = ELLIPSE ARC Zadejte koncový bod hlavní osy: + .ellipse-arc-specify-minor-axis-point-or-type-h = ELLIPSE ARC Zadejte bod vedlejší osy nebo zadejte poloviční délku [hlavní r=__ocs_arg_r__]: + .ellipse-arc-specify-start-angle-point-or-type = ELLIPSE ARC Určete počáteční bod úhlu nebo zadejte stupně: + .ellipse-arc = Oblouk elipsy + .ext-line-color-aci-dimclre = Barva vnější čáry ACI (DIMCLRE) + .ext-line-weight-dimlwe = Tloušťka vnější čáry (DIMLWE) + .gradient-boundary-point-1 = GRADIENT Hraniční bod 1: + .gradient-point-n = GRADIENT Bod __ocs_arg_n__: + .gradient-kind-invert-pick-internal-point-miss = GRADIENT (__ocs_arg_kind____ocs_arg_invert__) Vyberte vnitřní bod: __ocs_arg_miss__ + .gradient = Gradient + .hatch-boundary-point-1 = HATCH Hraniční bod 1: + .hatch-pick-internal-point-miss = HATCH Vyberte vnitřní bod: __ocs_arg_miss__ + .hatch-point-n = HATCH Bod __ocs_arg_n__: + .hatchedit-pattern-name-scale-scale-angle-angle = HATCHEDIT Vzor:__ocs_arg_name__ Měřítko:__ocs_arg_scale__ Úhel:__ocs_arg_angle__ [P / S / A | Enter uplatnit]: + .hatchedit-select-hatch = HATCHEDIT Vyberte poklop: + .hatchedit-selected-entity-is-not-a-hatch = HATCHEDIT: vybraná entita není šrafování. + .helix-enter-number-of-turns-3 = HELIX Enter počet otáček <3>: + .helix-specify-base-radius = HELIX Zadejte poloměr základny: + .helix-specify-centre-point-of-base = HELIX Určete střed základny: + .helix-specify-helix-height = HELIX Zadejte výšku šroubovice: + .helix-specify-top-radius-same-as-base = HELIX Určete horní poloměr : + .image-specify-insertion-point-name = IMAGE Zadejte bod vložení (__ocs_arg_name__): + .image-specify-width-drag-right = IMAGE Zadejte šířku (přetáhněte doprava): + .invert-off = Invertovat: vypnuto + .invert-on = Invertovat: zapnuto + .line-specify-first-point = LINE Zadejte první bod: + .line-specify-next-point-close-undo = LINE Zadejte další bod [Zavřít/Zpět]: + .line-specify-next-point-undo =LINE Určete další bod [Undo]: + .line-color-aci = Barva čáry (ACI): + .line-type = Typ čáry: + .line-weight = Tloušťka čáry: + .linear-factor-dimlfac = Lineární faktor (DIMLFAC) + .literal-spaces-space-stays-in-the-line-instead = Doslovné mezery: Space zůstane v řádku namísto spuštění příkazu (stejné jako psaní úvodního '>'). Zůstane zapnuté, dokud se nevypne. + .mline-enter-scale-factor = MLINE Enter měřítko: + .mline-specify-next-point-count-pts-enter-to-fi = MLINE Zadejte další bod (__ocs_arg_count__ bodů, Enter pro dokončení, C pro uzavření, S pro nastavení měřítka): + .mline-specify-start-point-scale-scale = MLINE Zadejte počáteční bod (měřítko=__ocs_arg_scale__): + .pline-specify-start-point = PLINE Zadejte počáteční bod: + .pline-mode-next-pt-count-pts = PLINE [__ocs_arg_mode__] Další bod [__ocs_arg_count__pts]: + .point-specify-point = POINT Určete bod: + .polygon-enter-number-of-sides = POLYGON Enter počet stran <__ocs_fmt_0__>: + .polygon-specify-center-sides = POLYGON Zadejte střed [strany __ocs_fmt_0__]: + .polygon-specify-vertex-on-circle-sides-inscrib = POLYGON Určete vrchol na kružnici [vepsané strany __ocs_fmt_0__]: + .polygon-c-enter-number-of-sides = POLYGON C Enter počet stran <__ocs_fmt_0__>: + .polygon-c-specify-center-sides = POLYGON C Zadejte střed [strany __ocs_fmt_0__]: + .polygon-c-specify-edge-midpoint-radius-sides-c = POLYGON C Určete poloměr okraje a středu [opsané strany __ocs_fmt_0__]: + .polygon-e-enter-number-of-sides-n = POLYGON E Enter počet stran <__ocs_arg_n__>: + .polygon-e-specify-first-endpoint-of-edge-n-sid = POLYGON E Určete první koncový bod hrany [strany __ocs_arg_n__]: + .polygon-e-specify-second-endpoint-of-edge-n-si = POLYGON E Zadejte druhý koncový bod hrany [strany __ocs_arg_n__]: + .polysolid-wall-height = POLYSOLID výška stěny: + .polysolid-wall-width = POLYSOLID šířka stěny: + .pyramid-base-radius = Základní poloměr PYRAMID: + .pyramid-height-add-sides-by-typing-a-3rd-numbe = Výška PYRAMID (přidejte strany zadáním 3. čísla): + .polygon-circumscribed = Mnohoúhelník – ohraničený + .polygon-edge = Mnohoúhelník – hrana + .polygon-inscribed = Mnohoúhelník - vepsaný + .ray-specify-start-point = RAY Zadejte počáteční bod: + .ray-specify-through-point = RAY Určete průchozí bod: + .rect-specify-first-corner = RECT Určete první roh: + .rect-specify-opposite-corner = RECT Určete opačný roh: + .rect-cen-specify-center-point = RECT CEN Zadejte střed: + .rect-cen-specify-corner-point =RECT CEN Zadejte rohový bod: + .rect-rot-specify-adjacent-corner-defines-edge = RECT ROT Určete sousední roh (definuje směr hrany): + .rect-rot-specify-first-corner = RECT ROT Určete první roh: + .rect-rot-specify-height-perpendicular-pick = RECT ROT Zadejte výšku (kolmý hrot): + .region-created-count-region-s = REGION: vytvořené oblasti __ocs_fmt_0__. + .region-select-closed-polylines-or-circles = REGION: vyberte uzavřené křivky nebo kružnice. + .revcloud-specify-next-point-count-pts-enter-to = REVCLOUD Zadejte další bod (__ocs_arg_count__ bodů, Enter pro uzavření): + .revcloud-specify-start-point-arc-length-arc-le = REVCLOUD Zadejte počáteční bod (délka oblouku = __ocs_arg_arc_length__): + .rectangle-center = Obdélník - střed + .rectangle-rotated = Obdélník - otočený + .rectangle-two-corners = Obdélník - dva rohy + .rev-cloud = Rev Cloud + .section-cutting-plane-axis-x-y-z = SECTION osa řezné roviny [X / Y / Z]: + .section-offset-along-x = Odsazení SECTION podél X: + .section-offset-along-y = Odsazení SECTION podél Y: + .section-offset-along-z = Odsazení SECTION podél Z: + .sketch-pen-down-move-to-sketch-click-to-lift-e = SKETCH Perem dolů – pohybem na skicu, kliknutím zvedněte, Enter zaznamenáte: + .sketch-pen-up-click-to-lower-the-pen-enter-to = SKETCH Pero nahoru – kliknutím spustíte pero, Enter zaznamenáte: + .slice-cutting-plane-axis-x-y-z-add-top-bottom = SLICE osa řezné roviny [X / Y / Z] (přidejte TOP/BOTTOM zadáním): + .slice-offset-along-x = Odsazení SLICE podél X: + .slice-offset-along-y = Odsazení SLICE podél Y: + .slice-offset-along-z = Odsazení SLICE podél Z: + .solid-specify-first-point = SOLID Zadejte první bod: + .solid-specify-fourth-point = SOLID Zadejte čtvrtý bod: + .solid-specify-second-point = SOLID Zadejte druhý bod: + .solid-specify-third-point = SOLID Zadejte třetí bod: + .spline-specify-first-control-point = SPLINE Zadejte první kontrolní bod: + .spline-specify-next-point-n-pts = SPLINE Zadejte další bod [__ocs_arg_n__ bodů]: + .sketch = Skica + .start-center-angle = Start, Střed, Úhel + .start-center-end = Začátek, Střed, Konec + .start-center-length = Začátek, Střed, Délka + .start-end-angle = Začátek, Konec, Úhel + .start-end-direction = Začátek, konec, směr + .start-end-radius = Start, End, Radius + .suppress-1st-line-dimsd1 = Potlačit 1. řádek (DIMSD1) + .suppress-1st-line-dimse1 = Potlačit 1. řádek (DIMSE1) + .suppress-2nd-line-dimsd2 =Potlačit 2. řádek (DIMSD2) + .suppress-2nd-line-dimse2 = Potlačit 2. řádek (DIMSE2) + .trace-specify-next-point-undo = TRACE Určete další bod [Undo]: + .trace-specify-start-point = TRACE Zadejte počáteční bod: + .trace-specify-trace-width-w = TRACE Zadejte šířku stopy <__ocs_arg_w__>: + .tan-tan-radius = Tan, Tan, Radius + .tan-tan-tan = Tan, Tan, Tan + .trace = Stopa + .ttt = Ttt + .usage-attdisp-on-off-normal = Použití: ATTDISP ON | OFF | NORMAL + .usage-polysolid-width-height-select-a-polyline = Použití: POLYSOLID (nejprve vyberte křivku) + .usage-pyramid-radius-height-sides-default-4-si = Použití: PYRAMID [sides] (výchozí 4 strany) + .wipeout-specify-first-point-or-polyline = WIPEOUT Zadejte první bod nebo [Polyline]: + .wipeout-specify-next-point-or-undo-close-n-poi = WIPEOUT Zadejte další bod nebo [Undo/Close] (body __ocs_arg_n__): + .wipeout-polyline-select-a-closed-planar-polyli = WIPEOUT Polyline Vyberte uzavřenou rovinnou křivku: + .wipeout-rectangular-specify-first-corner = WIPEOUT Obdélníkový Zadejte první roh: + .wipeout-rectangular-specify-opposite-corner = WIPEOUT Obdélníkový Zadejte protilehlý roh: + .x-ray = X-Ray + .xline-specify-a-point = XLINE Určete bod: + .xline-specify-through-point = XLINE Určete průchozí bod: + .n-object-s-erased = Objekty __ocs_fmt_0__ byly vymazány. + +modify = + .count-objects = (Objekty __ocs_arg_count__) + .edge-extend-indented-title-case = [Okraj: Prodloužit] + .align-scale-objects-based-on-alignment-points = ALIGN Měřítko objektů na základě bodů zarovnání? [Y/N]: + .align-select-objects-count-selected-enter-when = ALIGN Vyberte objekty (vybráno __ocs_arg_count__, po dokončení Enter): + .align-specify-1st-destination-point = ALIGN Zadejte 1. cílový bod: + .align-specify-1st-source-point = ALIGN Zadejte 1. zdrojový bod: + .align-specify-2nd-destination-point = ALIGN Zadejte 2. cílový bod: + .align-specify-2nd-source-point-enter-translate = ALIGN Zadejte 2. zdrojový bod (pouze překlad Enter =): + .array3d-column-spacing-rows-cols-levels-row-rs = ARRAY3D Rozteč sloupců [__ocs_arg_rows__×__ocs_arg_cols__×__ocs_arg_levels__, řádek=__ocs_arg_rs__]: + .array3d-enter-column-count-rows-rows = Počet sloupců ARRAY3D Enter [řádky __ocs_arg_rows__]: + .array3d-enter-level-count-rows-cols = ARRAY3D Enter počet úrovní [__ocs_arg_rows__×__ocs_arg_cols__]: + .array3d-enter-row-count = Počet řádků ARRAY3D Enter: + .array3d-level-spacing-rows-cols-levels-r-rs-c = ARRAY3D Rozteč úrovní [__ocs_arg_rows__×__ocs_arg_cols__×__ocs_arg_levels__, r=__ocs_arg_rs__ c=__ocs_arg_cs__]: + .array3d-row-spacing-rows-cols-levels =ARRAY3D Rozteč řádků [__ocs_arg_rows__×__ocs_arg_cols__×__ocs_arg_levels__]: + .arraypath-enter-item-count = ARRAYPATH Enter počet položek <__ocs_fmt_0__>: + .arraypath-select-path-entity-objects = ARRAYPATH Vyberte entitu cesty [objekty __ocs_fmt_0__]: + .arraypolar-enter-item-count = ARRAYPOLAR Enter počet položek <__ocs_fmt_0__>: + .arraypolar-enter-total-angle-in-degrees-0-coun = ARRAYPOLAR Enter celkový úhel ve stupních <__ocs_fmt_0__> [položky __ocs_fmt_1__]: + .arraypolar-specify-center-point-objects = ARRAYPOLAR Zadejte středový bod [objekty __ocs_fmt_0__]: + .arrayrect-column-spacing-0-rows-cols-row-row-s = ARRAYRECT Rozteč sloupců <__ocs_fmt_0__> [__ocs_fmt_1__×__ocs_fmt_2__, řádek=__ocs_fmt_3__]: + .arrayrect-enter-column-count-rows-rows = ARRAYRECT Enter počet sloupců <__ocs_fmt_0__> [__ocs_fmt_1__ řádků]: + .arrayrect-enter-row-count = ARRAYRECT Enter počet řádků <__ocs_fmt_0__>: + .arrayrect-row-spacing-0-rows-cols = ARRAYRECT Rozteč řádků <__ocs_fmt_0__> [__ocs_fmt_1__×__ocs_fmt_2__]: + .attedit-select-block-with-attributes = ATTEDIT Vyberte blok s atributy: + .annotation-object-scale = Měřítko objektu anotace + .bedit-select-block-reference-to-edit = BEDIT Vyberte referenci bloku, kterou chcete upravit: + .blend-enter-continuity-tangent-curvature-c = BLEND Enter spojitost [Tečna/Zakřivení] <__ocs_arg_c__>: + .blend-select-first-open-curve-continuity-c = BLEND Vyberte první otevřenou křivku [Continuity=__ocs_arg_c__]: + .blend-select-second-open-curve-continuity-c = BLEND Vyberte druhou otevřenou křivku [Continuity=__ocs_arg_c__]: + .break-select-object = BREAK Vyberte objekt: + .break-specify-first-break-point = BREAK Zadejte první bod přerušení: + .break-specify-second-break-point = BREAK Zadejte druhý bod přerušení: + .breakatpoint-select-object = BREAKATPOINT Vyberte objekt: + .breakatpoint-specify-break-point = BREAKATPOINT Zadejte bod přerušení: + .block-scale-x = Blokové měřítko X: + .block-scale-y = Blokové měřítko Y: + .block-scale-z = Blokové měřítko Z: + .boundary-edges = Hranice hranic + .break-gap-size = Velikost lomové mezery: + .chamfer-enter-first-chamfer-distance-d1 = CHAMFER Enter vzdálenost prvního zkosení <__ocs_arg_d1__>: + .chamfer-enter-second-chamfer-distance-d2 = CHAMFER Enter druhá vzdálenost zkosení <__ocs_arg_d2__>: + .chamfer-select-first-line-d1-d1-d2-d2 = CHAMFER Vyberte první řádek [D1=__ocs_arg_d1__ D2=__ocs_arg_d2__]: + .chamfer-select-second-line-d1-d1-d2-d2 = CHAMFER Vyberte druhý řádek [D1=__ocs_arg_d1__ D2=__ocs_arg_d2__]: + .chamfer-select-the-adjacent-polyline-segment-d = CHAMFER Vyberte sousední segment křivky [D1=__ocs_arg_d1__ D2=__ocs_arg_d2__]: + .copy-enter-number-of-items-to-array =COPY Enter počet položek do pole: + .copy-specify-second-point-for-n-item-array-bas = COPY Zadejte druhý bod pro pole položek __ocs_arg_n__ [základ __ocs_arg_bx__,__ocs_arg_by__]: + .continuity = Kontinuita + .curvature = Zakřivení + .cutting-edges = Řezné hrany + .decurve = Decurve + .discard-block-edit = Zahodit úpravy bloku + .explode-select-objects-to-explode = EXPLODE Vyberte objekty, které chcete rozložit: + .extend-select-boundary-edges-picked-enter-done = EXTEND Vyberte hraniční hrany [__ocs_fmt_0__ vybráno, Enter = hotovo]: + .extend-enter-done = EXTEND [Enter = hotovo]: + .extend-edge-click-near-end-of-object-to-extend = EXTEND__ocs_fmt_0__ Kliknutím na blízko konce objektu jej prodloužíte (Shift+kliknutí ořízne): + .extend-edge-crossing-first-corner = EXTEND__ocs_fmt_0__ Křížení: první roh: + .extend-edge-crossing-opposite-corner = EXTEND__ocs_fmt_0__ Křížení: protilehlý roh: + .extend-edge-fence-pick-points-placed-enter-ext = EXTEND__ocs_fmt_0__ Plot: body výběru [__ocs_fmt_1__ umístěno, Enter = prodloužit zkřížené]: + .extrim-click-the-side-to-trim-away = EXTRIM Klikněte na stranu, kterou chcete oříznout: + .extrim-select-cutting-boundary = EXTRIM Vyberte hranici řezu: + .edge-extend-title-case = Okraj: Prodloužit + .erase = Vymazat + .explode = explodovat + .extend = Prodloužit + .fillet-enter-fillet-radius-4 = FILLET Enter poloměr zaoblení <__ocs_fmt_0__>: + .fillet-select-first-object-line-arc-lwpolyline = FILLET Vyberte první objekt (Line/Oblouk/LwPolyline) [R=__ocs_fmt_0__]: + .fillet-select-second-object-line-arc-lwpolylin = FILLET Vyberte druhý objekt (Line/Oblouk/LwPolyline) [R=__ocs_fmt_0__]: + .join-select-objects-to-join-count-selected-ent = JOIN Vyberte objekty ke spojení (vybráno __ocs_arg_count__, použití Enter): + .lengthen-enter-option-de-delta-to-total-p-pct = Možnost LENGTHEN Enter [DE / TO / P ]: + .lengthen-select-object = LENGTHEN Vyberte objekt: + .mirror-erase-source-objects-yes-no-no = MIRROR Vymazat zdrojové objekty? [Ano/Ne] : + .mirror-specify-first-mirror-line-point-count-o = MIRROR Určete první bod zrcadlové čáry [objekty __ocs_arg_count__]: + .mirror-specify-second-point-p1-px-py = MIRROR Zadejte druhý bod [p1=__ocs_arg_px__,__ocs_arg_py__]: + .move-specify-base-point-count-objects = MOVE Zadejte základní bod [objekty __ocs_arg_count__]: + .move-specify-destination-base-bx-by = MOVE Zadejte cíl [základ __ocs_arg_bx__,__ocs_arg_by__]: + .mirror = Zrcadlo + .move-freely = Pohybujte se volně + .move-text-arrows-out = Přesuňte text a šipky ven + .offset-select-object-to-offset-enter-to-finish =OFFSET Vyberte objekt k odsazení (dokončete Enter): + .offset-specify-offset-distance-or-through-d = OFFSET Zadejte vzdálenost odsazení nebo [Through] <__ocs_arg_d__>: + .offset-n-click-side-or-multiple-distance-d = OFFSET__ocs_arg_n__ Strana kliknutí nebo [Multiple] [vzdálenost __ocs_arg_d__]: + .offset-n-click-through-point-or-multiple = OFFSET__ocs_arg_n__ Bod prokliku nebo [Multiple]: + .offset-n-multiple-click-next-side-distance-d = OFFSET__ocs_arg_n__ Vícenásobné kliknutí na další stranu [vzdálenost __ocs_arg_d__]: + .offset-n-multiple-click-next-through-point = OFFSET__ocs_arg_n__ Vícenásobné kliknutí dalším průchozím bodem: + .offset-dimexo = Offset (DIMEXO) + .overall-scale-dimscale = Celková stupnice (DIMSCALE) + .pedit-enter-option = Možnost PEDIT Enter: + .pedit-object-is-not-a-polyline-turn-it-into-on = PEDIT Objekt není křivka. Proměnit to v jedno? [Ano/Ne] : + .pedit-select-polyline-or-a-line-arc-to-convert = PEDIT Vyberte křivku (nebo čáru/oblouk pro převod): + .pedit-specify-new-width = PEDIT Zadejte novou šířku: + .pedit-join-select-objects-to-join-count-picked = PEDIT Spojit Vyberte objekty ke spojení (vybráno __ocs_arg_count__), Enter ke sloučení: + .path-array = Pole cesty + .polar-array = Polární pole + .refclose-save-discard-save = REFCLOSE [Uložit/Zahodit] : + .refedit-select-block-reference-to-edit = REFEDIT Vyberte referenci bloku, kterou chcete upravit: + .reverse-select-line-polyline-or-spline-to-reve = REVERSE Vyberte čáru, křivku nebo spline, které chcete obrátit: + .rotate-specify-first-reference-point-or-type-r = ROTATE Zadejte první referenční bod nebo zadejte referenční úhel: + .rotate-specify-new-absolute-angle-ref-a = ROTATE Zadejte nový absolutní úhel [ref=__ocs_arg_a__]: + .rotate-specify-rotation-angle-a = ROTATE Zadejte úhel natočení <__ocs_arg_a__>: + .rotate-specify-rotation-center-count-objects = ROTATE Zadejte střed otáčení [objekty __ocs_arg_count__]: + .rotate-specify-second-reference-point = ROTATE Zadejte druhý referenční bod: + .rectangular-array = Obdélníkové pole + .scale-specify-base-point-count-objects = SCALE Zadejte základní bod [objekty __ocs_arg_count__]: + .scale-specify-first-reference-point-or-type-re = SCALE Zadejte první referenční bod nebo zadejte referenční délku: + .scale-specify-new-length-from-base-or-type-a-l = SCALE Zadejte novou délku od základny nebo zadejte délku [ref=__ocs_arg_d__]: + .scale-specify-scale-factor-f = SCALE Zadejte měřítko <__ocs_arg_f__>: + .scale-specify-second-reference-point = SCALE Zadejte druhý referenční bod: + .splinedit-select-spline = SPLINEDIT Vyberte spline: + .splinedit-close-open-reverse-exit = SPLINEDIT [CLOSE/OPEN/REVERSE/EXIT]: + .stretch-specify-base-point = STRETCH Zadejte základní bod: + .stretch-specify-first-corner-of-crossing-window-count-objects =STRETCH Určete první roh okna křížení [objekty __ocs_arg_count__]: + .stretch-specify-first-corner-of-crossing-window = STRETCH Určete první roh okna křížení: + .stretch-specify-new-point-base-bx-bz = STRETCH Zadejte nový bod [základ __ocs_arg_bx__,__ocs_arg_bz__]: + .stretch-specify-opposite-corner = STRETCH Určete opačný roh: + .save-block = Uložit blok + .save-block-edit = Uložit Úpravu bloku + .scale-manager = Správce váhy + .scale-factor = Měřítko: + .scale-units = Měřítko/jednotky + .spline-edit = Spline Edit + .torient-new-absolute-rotation-most-readable = TORIENT Nová absolutní rotace : + .torient-specify-second-point = TORIENT Zadejte druhý bod: + .trim-erase-click-objects-to-delete-enter-done = TRIM Vymazání: kliknutím na objekty smažete [Enter = hotovo]: + .trim-select-cutting-edges-picked-enter-done = TRIM Vyberte řezné hrany [__ocs_fmt_0__ vybráno, Enter = hotovo]: + .trim-edge-click-segment-to-remove-shift-click = TRIM__ocs_fmt_0__ Kliknutím na segment odeberete (Shift+kliknutím se rozšíří): + .trim-edge-crossing-first-corner = TRIM__ocs_fmt_0__ Křížení: první roh: + .trim-edge-crossing-opposite-corner = TRIM__ocs_fmt_0__ Křížení: protilehlý roh: + .trim-edge-fence-pick-points-placed-enter-trim = TRIM__ocs_fmt_0__ Plot: body výběru [__ocs_fmt_1__ umístěno, Enter = lem překřížený]: + .through = Skrz + .tol-scale-dimtfac = Tol. měřítko (DIMTFAC) + .trim = Oříznout + .exit = výstup + +groups = + .group-enter-group-name-name = GROUP Enter název skupiny [__ocs_arg_name__]: + .ungroup-select-grouped-objects = UNGROUP Vyberte seskupené objekty: + .ungroup = Zrušit seskupení + +layers = + .n-layers = Vrstvy __ocs_arg_n__ + .n-saved-layers = __ocs_arg_n__ uložené vrstvy + .active-ucs-named = Aktivní UCS: __ocs_fmt_0__ | Pojmenováno: __ocs_fmt_1__ + .active-ucs-no-named-ucss-defined = Aktivní UCS: __ocs_fmt_0__ | Nejsou definovány žádné pojmenované UCS. + .all-layers-thawed = Všechny vrstvy rozmrzly. + .all-layers-turned-on = Všechny vrstvy zapnuty. + .changes-affect-the-saved-state-only-the-drawin = Změny ovlivní pouze uložený stav; výkres se nezmění až do obnovení. + .choose-new-to-capture-the-current-layer-settin = Zvolte Nový, chcete-li zachytit aktuální nastavení vrstvy. + .current-mleader-style = Aktuální styl MLeader: __ocs_fmt_0__ + .current-layer = Aktuální vrstva + .current-layer-set-to-layer = Aktuální vrstva nastavena na "__ocs_fmt_0__". + .current-ucs = Aktuální UC + .dimstyle-style-name-prop-val-3 = DIMSTYLE: '__ocs_fmt_0__'. __ocs_fmt_1__ = __ocs_fmt_2__ + .dimstyle-already-exists = DIMSTYLE: '__ocs_fmt_0__' již existuje. + .dimstyle-created =DIMSTYLE: Vytvořeno „__ocs_fmt_0__“. + .dimstyle-not-found = DIMSTYLE: „__ocs_fmt_0__“ nebyl nalezen. + .dimstyle-unknown-property-try-dimtxt-dimasz-di = DIMSTYLE: neznámá vlastnost '__ocs_fmt_0__'. Zkuste: dimtxt dimasz dimdli dimexo dimexe dimgap dimscale dimlfac dimdle dimcen dimtsz + .delete-layer = Smazat vrstvu + .dimstyles = DimStyles: __ocs_fmt_0__ + .edit = Upravit + .edit-layer-state = Upravit stav vrstvy + .freeze = Zmrazit + .hideobjects-select-the-objects-to-hide-first = HIDEOBJECTS: nejprve vyberte objekty, které chcete skrýt. + .hid-n-object-s-unisolateobjects-to-restore = Skryté objekty __ocs_fmt_0__. UNISOLATEOBJECTS obnovit. + .isolateobjects-select-the-objects-to-isolate-f = ISOLATEOBJECTS: vyberte objekty, které chcete izolovat jako první. + .isolate-layer = Izolovat vrstvu + .isolated-n-object-s-unisolateobjects-to-restor = Izolované objekty __ocs_fmt_0__. UNISOLATEOBJECTS obnovit. + .isolation-ended-all-objects-shown = Izolace ukončena — všechny zobrazené objekty. + .laydel-layer-to-delete = Vrstva LAYDEL ke smazání: + .laydel-deleted-layer-layer-and-n-object-s = LAYDEL: odstraněna vrstva "__ocs_fmt_0__" a objekt(y) __ocs_fmt_1__. + .laydel-layer-0-cannot-be-deleted = LAYDEL: vrstvu "0" nelze smazat. + .laydel-no-layer-named-name = LAYDEL: žádná vrstva s názvem „__ocs_fmt_0__“. + .layer-already-exists = LAYER: '__ocs_fmt_0__' již existuje. + .layer-color-set-to-aci = LAYER: Barva „__ocs_fmt_0__“ nastavena na ACI __ocs_fmt_1__. + .layer-created = LAYER: Vytvořeno „__ocs_fmt_0__“. + .layer-not-found = LAYER: „__ocs_fmt_0__“ nebyl nalezen. + .layer-current-layer-set-to = LAYER: aktuální vrstva nastavena na „__ocs_fmt_0__“. + .layer-layers-frozen = LAYER: vrstvy zmrazeny. + .layer-layers-locked = LAYER: vrstvy uzamčeny. + .layer-layers-thawed = LAYER: vrstvy rozmrzlé. + .layer-layers-turned-off = LAYER: vrstvy jsou vypnuty. + .layer-layers-turned-on = LAYER: vrstvy zapnuty. + .layer-layers-unlocked = LAYER: vrstvy odemčeny. + .layerstate-deleted-arg = LAYERSTATE: odstraněno "__ocs_fmt_0__". + .layerstate-no-saved-state-named-arg = LAYERSTATE: žádný uložený stav s názvem „__ocs_fmt_0__“. + .layerstate-restored-arg-n-layer-s = LAYERSTATE: obnoveno "__ocs_fmt_0__" (vrstvy __ocs_fmt_1__). + .layerstate-saved-arg = LAYERSTATE: uloženo "__ocs_fmt_0__". + .layiso-isolated-layer-s = LAYISO: izolovaná vrstva(y) __ocs_fmt_0__. + .layiso-select-entities-on-the-layers-to-isolat = LAYISO: Vyberte entity ve vrstvách, které chcete izolovat jako první. + .laymatch-select-objects-to-change-layer = LAYMATCH Vyberte objekty pro změnu vrstvy: + .laymatch-select-source-object-to-match-layer-f = LAYMATCH Vyberte zdrojový objekt, který má odpovídat vrstvě: + .laymrg-source-layer-merged-away = Zdrojová vrstva LAYMRG (sloučena): + .laymrg-target-layer-kept =Cílová vrstva LAYMRG (zachována): + .laymrg-layer-0-cannot-be-merged-away = LAYMRG: vrstvu "0" nelze sloučit. + .laymrg-merged-src-into-dst-moved-object-s = LAYMRG: sloučeno „__ocs_fmt_0__“ do „__ocs_fmt_1__“ (objekty __ocs_fmt_2__). + .laymrg-source-and-target-are-the-same-layer = LAYMRG: zdroj a cíl jsou stejné vrstvy. + .laymrg-source-and-target-layers-must-both-exis = LAYMRG: musí existovat zdrojová i cílová vrstva. + .layuniso-all-layers-restored = LAYUNISO: všechny vrstvy obnoveny. + .layer-freeze = Layer Freeze + .layer-lock = Zámek vrstvy + .layer-manager = Správce vrstev + .layer-off = Vrstva vypnuta + .layer-state-manager = Správce stavu vrstvy + .layer-unlock = Odemknutí vrstvy + .layer-state-name = Název stavu vrstvy + .layer-states-are-stored-inside-the-drawing-and = Stavy vrstev jsou uloženy uvnitř výkresu a zůstávají dostupné i po jeho opětovném otevření. + .layer-s-frozen = Vrstva(y) zamrzlá. + .layer-s-locked = Vrstva(y) uzamčena. + .layer-s-turned-off = Vrstva(y) vypnuta. + .layer-s-unlocked = Vrstva(y) odemčena. + .layers = Vrstvy: __ocs_fmt_0__ + .lock = Zámek + .mleaderstyle-style-name-prop-val-3 = MLEADERSTYLE: '__ocs_fmt_0__'. __ocs_fmt_1__ = __ocs_fmt_2__ + .mleaderstyle-already-exists = MLEADERSTYLE: '__ocs_fmt_0__' již existuje. + .mleaderstyle-created = MLEADERSTYLE: Vytvořeno „__ocs_fmt_0__“. + .mleaderstyle-not-found = MLEADERSTYLE: „__ocs_fmt_0__“ nebyl nalezen. + .mleaderstyle-current-style-set-to-name = MLEADERSTYLE: aktuální styl nastaven na „__ocs_fmt_0__“. + .mleaderstyle-unknown-property-try-text-height = MLEADERSTYLE: neznámá vlastnost '__ocs_fmt_0__'. Zkuste: text_height arrowhead_size landing_distance landing_gap + .mlstyle-already-exists = MLSTYLE: '__ocs_fmt_0__' již existuje. + .mlstyle-created = MLSTYLE: Vytvořeno „__ocs_fmt_0__“. + .mlstyle-deleted = MLSTYLE: '__ocs_fmt_0__' smazáno. + .mlstyle-not-found = MLSTYLE: „__ocs_fmt_0__“ nebyl nalezen. + .mlstyle-current-style-set-to = MLSTYLE: aktuální styl nastaven na „__ocs_fmt_0__“. + .mleader-styles-none-active-current = M Styly vůdce: (žádné) aktivní: __ocs_fmt_0__ + .mleader-styles-active-current = M Styly vůdce: __ocs_fmt_0__ aktivní: __ocs_fmt_1__ + .mlinestyles = + MLineStyles: + __ocs_fmt_0__ + .make-current = Nastavit jako aktuální + .match-layer = Match Layer + .named-views = Pojmenovaná zobrazení: __ocs_fmt_0__ + .new-vp = Nový VP + .new-vp-freeze = Nový VP Freeze + .new-layer-state = Nový stav vrstvy + .no-dim-styles-defined = Nejsou definovány žádné tmavé styly. + .no-hidden-objects = Žádné skryté předměty. + .no-layer-states-in-this-drawing =V tomto výkresu nejsou žádné stavy hladiny + .no-matching-layer-states = Žádné odpovídající stavy vrstev + .no-multiline-styles = Žádné víceřádkové styly. + .no-named-views-saved = Nebyla uložena žádná pojmenovaná zobrazení. + .no-table-styles = Žádné styly tabulek. + .no-text-styles-defined = Nejsou definovány žádné styly textu. + .not-set = Není nastaveno + .on-off-spaced-separator-title-case = Zapnuto / Vypnuto + .on-off-title-case = Zapnuto/Vypnuto + .optional-description = Volitelný popis + .plan-current-ucs-ucs-world-current = PLAN [Aktuální UC / Ucs / Svět] : + .plan-ucs-ucs-name = PLAN UCS Název ucs: + .plan-current-ucs-plan-view = PLAN: aktuální půdorys UCS. + .plan-plan-view-of-ucs = PLAN: půdorys UCS '__ocs_fmt_0__'. + .plan-world-plan-view = PLAN: půdorys světa. + .properties-restored-by-this-state = Vlastnosti obnovené tímto stavem + .restored-properties = Obnovené vlastnosti + .save-changes = Uložit změny + .save-new-state = Uložit nový stát + .save-captures-the-current-settings-of-every-la = Uložit zachycuje aktuální nastavení každé vrstvy ve výkresu. + .saved-layer-states = Uložené stavy hladiny: __ocs_fmt_0__ + .saved-layer-values = Uložené hodnoty vrstev + .saved-state-details = Podrobnosti uloženého stavu + .search-layer-states = Hledat stavy vrstvy… + .search = Hledat… + .tablestyle-already-exists = TABLESTYLE: '__ocs_fmt_0__' již existuje. + .tablestyle-created = TABLESTYLE: Vytvořeno „__ocs_fmt_0__“. + .tablestyles = + Styly tabulek: + __ocs_fmt_0__ + .text-styles = Styly textu: __ocs_fmt_0__ + .thaw-all-layers = Rozmrazte všechny vrstvy + .turn-all-layers-on = Zapněte všechny vrstvy + .ucs-name-not-found = UCS „__ocs_fmt_0__“ nebyl nalezen. + .ucs-activated = UCS „__ocs_fmt_0__“ aktivováno. + .ucs-deleted = UCS „__ocs_fmt_0__“ smazáno. + .ucs-not-found = UCS „__ocs_fmt_0__“ nebyl nalezen. + .ucs-not-found-usage-ucs-list-save-name-delete = UCS '__ocs_fmt_0__'nenalezeno. Používání: UCS LIST | SAVE | DELETE | W | ORIGIN x, y, z | X/Y/Z + .ucs-saved = UCS „__ocs_fmt_0__“ uloženo. + .ucs-origin-set-to-4-4-4 = Počátek UCS nastaven na (__ocs_fmt_0__, __ocs_fmt_1__, __ocs_fmt_2__). + .ucs-reset-to-world-coordinate-system = UCS se resetuje na světový souřadnicový systém. + .ucs-rotated-2-around-x = UCS se otočil o __ocs_fmt_0__° kolem X. + .ucs-rotated-2-around-y = UCS se otočil o __ocs_fmt_0__° kolem Y. + .ucs-rotated-2-around-z =UCS se otočil o __ocs_fmt_0__° kolem Z. + .ucs = Ucs + .unisolate-layers = Unisolate Vrstvy + .update-from-drawing = Aktualizace z výkresu + .usage-dimstyle-new-name = Použití: DIMSTYLE NEW + .usage-dimstyle-set-name-property-value = Použití: DIMSTYLE SET + .usage-laydel-layer-name = Použití: LAYDEL + .usage-layer-color-name-aci-index = Použití: LAYER COLOR + .usage-layer-list-new-name-on-off-freeze-thaw-l = Používání: LAYER LIST | NEW | ON/OFF/FREEZE/THAW/LOCK/UNLOCK | COLOR | SET + .usage-layer-new-name = Použití: LAYER NEW + .usage-layerstate-delete-name = Použití: LAYERSTATE DELETE + .usage-layerstate-restore-name = Použití: LAYERSTATE RESTORE + .usage-layerstate-save-name = Použití: LAYERSTATE SAVE + .usage-layerstate-save-restore-delete-name-list = Použití: LAYERSTATE SAVE|RESTORE|DELETE | ? (seznam) + .usage-laymrg-source-layer-target-layer = Použití: LAYMRG + .usage-mleaderstyle-list-new-name-set-name-prop = Používání: MLEADERSTYLE LIST | NEW | SET | CURRENT [] + .usage-mleaderstyle-new-name = Použití: MLEADERSTYLE NEW + .usage-mleaderstyle-set-name-property-value = Použití: MLEADERSTYLE SET + .usage-mlstyle-new-name = Použití: MLSTYLE NEW + .usage-mlstyle-set-name = Použití: MLSTYLE SET + .usage-mlstyle-list-new-name-set-name-del-name = Použití: MLSTYLE [LIST|NEW |SET |DEL ] + .usage-plan-ucs-name = Použití: PLAN UCS + .usage-plan-current-ucs-name-world = Použití: PLAN [CURRENT / UCS / WORLD] + .usage-tablestyle-new-name = Použití: TABLESTYLE NEW + .usage-tablestyle-list-new-name = Použití: TABLESTYLE [LIST|NEW ] + .usage-ucs-delete-name = Použití: UCS DELETE + .usage-ucs-origin-x-y-z = Použití: UCS ORIGIN x,y,z + .usage-ucs-save-name = Použití: UCS SAVE + .usage-ucs-x-angle-degrees = Použití: UCS X + .usage-ucs-y-angle-degrees = Použití: UCS Y + .usage-ucs-z-angle-degrees = Použití: UCS Z + .usage-view-delete-name =Použití: VIEW DELETE + .usage-view-list-view-save-name-view-restore-na = Používání: VIEW LIST | VIEW SAVE | VIEW RESTORE | VIEW DELETE + .usage-view-restore-name = Použití: VIEW RESTORE + .usage-view-save-name = Použití: VIEW SAVE + .usage-prefix-font-style-font-file = Použití: __ocs_fmt_0__ FONT