From a0a83ad68153a720ee3c1c97c80a6c914ab6f31b Mon Sep 17 00:00:00 2001 From: ramox81 <184937705+ramox81@users.noreply.github.com> Date: Tue, 13 Oct 2026 15:53:20 +0300 Subject: [PATCH 1/2] ADJUST: images and underlays, -IMAGEADJUST and PDF/DWF/DGNADJUST ADJUST gathers raster images or PDF/DWF/DGN underlays (other objects are dropped silently, pickfirst is used, a mixed set is refused), then asks the image option (Brightness default) or the underlay option (last used), with value prompts that offer the image's own value or the session's last underlay fade/contrast, and Monochrome Yes/No. Invalid values re-prompt. One undo step. -IMAGEADJUST, PDFADJUST, DWFADJUST and DGNADJUST take one kind each. Raster image Brightness/Contrast/Fade move to an Image Adjust section as whole numbers with 0-100 validation. Co-Authored-By: Claude Opus 5.5 --- locales/ar-SA/opencadstudio.ftl | 21 +- locales/bg-BG/opencadstudio.ftl | 21 +- locales/cs-CZ/opencadstudio.ftl | 21 +- locales/de-DE/opencadstudio.ftl | 21 +- locales/el-GR/opencadstudio.ftl | 21 +- locales/en-US/opencadstudio.ftl | 21 +- locales/es-ES/opencadstudio.ftl | 21 +- locales/fi-FI/opencadstudio.ftl | 21 +- locales/fr-FR/opencadstudio.ftl | 21 +- locales/hi-IN/opencadstudio.ftl | 21 +- locales/hu-HU/opencadstudio.ftl | 21 +- locales/it-IT/opencadstudio.ftl | 21 +- locales/ja-JP/opencadstudio.ftl | 21 +- locales/ko-KR/opencadstudio.ftl | 21 +- locales/lo-LA/opencadstudio.ftl | 21 +- locales/nl-NL/opencadstudio.ftl | 21 +- locales/pl-PL/opencadstudio.ftl | 21 +- locales/pt-BR/opencadstudio.ftl | 21 +- locales/ru-RU/opencadstudio.ftl | 21 +- locales/tr-TR/opencadstudio.ftl | 21 +- locales/zh-CN/opencadstudio.ftl | 21 +- locales/zh-TW/opencadstudio.ftl | 21 +- src/app/command_driver/utilities.rs | 27 +++ src/app/commands/display.rs | 221 ++++++++++------- src/app/update/command.rs | 4 +- src/command.rs | 6 + src/entities/raster_image.rs | 27 ++- src/entities/underlay.rs | 3 +- src/locale_catalog.rs | 21 +- src/modules/draw/select.rs | 26 ++ src/modules/insert/mod.rs | 2 +- src/modules/insert/xadjust.rs | 353 ++++++++++++++++++++++++++++ 32 files changed, 841 insertions(+), 311 deletions(-) diff --git a/locales/ar-SA/opencadstudio.ftl b/locales/ar-SA/opencadstudio.ftl index 506cc6a3a..b7f6da528 100644 --- a/locales/ar-SA/opencadstudio.ftl +++ b/locales/ar-SA/opencadstudio.ftl @@ -1093,7 +1093,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: أدخل Left أو Top أو Right. .isodraft-expected-on-or-off = ISODRAFT: أدخل On أو Off. .xdata-selected-entities-are-on-locked-layers = XDATA: العناصر المحددة على طبقات مقفلة. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: لم يتم تحديد صور نقطية أو الخاصية غير معروفة (استخدم BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: أدخل عددًا صحيحًا من -4 إلى 4. .usage-datalink-path-to-csv = الاستخدام: DATALINK <مسار-ملف-.csv> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: لم يتم العثور على جداول مرتبطة. @@ -3930,6 +3929,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = حدد صورة أو طبقة سفلية: + .adjust-select-pdf-underlay = حدد طبقة سفلية PDF: + .adjust-select-dwf-underlay = حدد طبقة سفلية DWF: + .adjust-select-dgn-underlay = حدد طبقة سفلية DGN: + .adjust-mixed-underlays = *مجموعة تحديد غير صالحة. حدد طبقات سفلية من نوع الملف نفسه فقط.* + .adjust-image-option = أدخل خيار الصورة [التباين/التلاشي/السطوع] <السطوع>: + .adjust-underlay-option = أدخل خيار الطبقة السفلية __ocs_arg_kind__ [التلاشي/التباين/أحادي اللون] <__ocs_arg_option__>: + .adjust-monochrome = أحادي اللون? [نعم/لا] <__ocs_arg_value__>: + .adjust-brightness-value = أدخل قيمة السطوع (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = أدخل قيمة التباين (0-100) <__ocs_arg_value__>: + .adjust-fade-value = أدخل قيمة التلاشي (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = يجب أن تكون القيمة عددًا صحيحًا بين 0 و 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4658,13 +4669,6 @@ view = .x-no-xdata = __ocs_fmt_0__: لا توجد بيانات موسعة. .value-3d-orbit = مدار ثلاثي الأبعاد .value-3d-orbit-drag-with-right-mouse-button = المدار ثلاثي الأبعاد: اسحب بزر الفأرة الأيمن. - .adjust-brightness-contrast-fade = ADJUST [السطوع / التباين / التلاشي]: - .adjust-brightness-0-100 = ADJUST السطوع 0-100: - .adjust-contrast-0-100 = ADJUST التباين 0-100: - .adjust-fade-0-100 = ADJUST التلاشي 0-100: - .adjust-select-raster-image-s-first = ADJUST: حدد صورة نقطية أولًا. - .adjust-value-must-be-0-100 = ADJUST: يجب أن تكون القيمة بين 0 و100. - .adjust-action-v-on-changed-image-s = ADJUST: ‏__ocs_fmt_0__ = __ocs_fmt_1__ على __ocs_fmt_2__ صورة. .annoallvisible-new-value-0-1 = ANNOALLVISIBLE القيمة الجديدة [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: أدخل 0 أو 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE القيمة الجديدة [-4..4]: @@ -4790,7 +4794,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = الطبقة السفلية __ocs_fmt_0__: التلاشي=__ocs_fmt_1__، التباين=__ocs_fmt_2__، التشغيل=__ocs_fmt_3__، القص=__ocs_fmt_4__، الأحادي=__ocs_fmt_5__ .updated-changed-underlay-s = تم تحديث __ocs_fmt_0__ طبقة سفلية. - .usage-adjust-brightness-contrast-fade-0-100 = الاستخدام: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = الاستخدام: ANNOSCALE مثلًا 1:50 أو 2:1 أو معامل .usage-draworder-f-front-b-back-a-above-handle = الاستخدام: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = الاستخدام: HYPERLINK (حدد الكائنات أولًا) diff --git a/locales/bg-BG/opencadstudio.ftl b/locales/bg-BG/opencadstudio.ftl index 491097bb2..0dc7b8a18 100644 --- a/locales/bg-BG/opencadstudio.ftl +++ b/locales/bg-BG/opencadstudio.ftl @@ -1080,7 +1080,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: въведете Left, Top или Right. .isodraft-expected-on-or-off = ISODRAFT: въведете On или Off. .xdata-selected-entities-are-on-locked-layers = XDATA: избраните обекти са в заключени слоеве. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: няма избрани растерни изображения или свойството е неизвестно (използвайте BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: въведете цяло число от -4 до 4. .usage-datalink-path-to-csv = Употреба: DATALINK <път-до-.csv> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: няма намерени свързани таблици. @@ -3917,6 +3916,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Изберете изображение или подложка: + .adjust-select-pdf-underlay = Изберете подложка PDF: + .adjust-select-dwf-underlay = Изберете подложка DWF: + .adjust-select-dgn-underlay = Изберете подложка DGN: + .adjust-mixed-underlays = *Невалиден набор за избор. Изберете само подложки от един и същ файлов тип.* + .adjust-image-option = Въведете опция за изображение [Контраст/Заглушаване/Яркост] <Яркост>: + .adjust-underlay-option = Въведете опция за подложка __ocs_arg_kind__ [Заглушаване/Контраст/Монохромно] <__ocs_arg_option__>: + .adjust-monochrome = Монохромно? [Да/Не] <__ocs_arg_value__>: + .adjust-brightness-value = Въведете стойност: яркост (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Въведете стойност: контраст (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Въведете стойност: заглушаване (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Стойността трябва да е цяло число между 0 и 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4645,13 +4656,6 @@ view = .x-no-xdata = __ocs_fmt_0__: няма xdata. .value-3d-orbit = 3D Орбита .value-3d-orbit-drag-with-right-mouse-button = 3D Орбита: влачи с десен бутон на мишката. - .adjust-brightness-contrast-fade = ADJUST [Яркост / Контраст / Заглушаване]: - .adjust-brightness-0-100 = ADJUST яркост 0-100: - .adjust-contrast-0-100 = ADJUST контраст 0-100: - .adjust-fade-0-100 = ADJUST заглушаване 0-100: - .adjust-select-raster-image-s-first = ADJUST: първо избери растерно изображение(я). - .adjust-value-must-be-0-100 = ADJUST: стойността трябва да е 0-100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ на __ocs_fmt_2__ изображение(я). .annoallvisible-new-value-0-1 = ANNOALLVISIBLE нова стойност [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: въведи 0 или 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE нова стойност [-4..4]: @@ -4777,7 +4781,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Подложка __ocs_fmt_0__: заглушаване=__ocs_fmt_1__, контраст=__ocs_fmt_2__, вкл.=__ocs_fmt_3__, изрязване=__ocs_fmt_4__, моно=__ocs_fmt_5__ .updated-changed-underlay-s = Обновени __ocs_fmt_0__ подложка(и). - .usage-adjust-brightness-contrast-fade-0-100 = Употреба: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Употреба: ANNOSCALE <съотношение> напр. 1:50, 2:1, или фактор .usage-draworder-f-front-b-back-a-above-handle = Употреба: DRAWORDER F|FRONT | B|BACK | A|ABOVE <манипулатор> | U|UNDER <манипулатор> .usage-hyperlink-url-select-objects-first = Употреба: HYPERLINK (първо избери обекти) diff --git a/locales/cs-CZ/opencadstudio.ftl b/locales/cs-CZ/opencadstudio.ftl index 678e9179d..ec959eb95 100644 --- a/locales/cs-CZ/opencadstudio.ftl +++ b/locales/cs-CZ/opencadstudio.ftl @@ -1080,7 +1080,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: zadejte Left, Top nebo Right. .isodraft-expected-on-or-off = ISODRAFT: zadejte On nebo Off. .xdata-selected-entities-are-on-locked-layers = XDATA: vybrané objekty jsou v uzamčených hladinách. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: nejsou vybrány rastrové obrázky nebo je vlastnost neznámá (použijte BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: zadejte celé číslo od -4 do 4. .usage-datalink-path-to-csv = Použití: DATALINK .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: nebyly nalezeny propojené tabulky. @@ -3915,6 +3914,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Vyberte obrázek nebo podklad: + .adjust-select-pdf-underlay = Vyberte podklad PDF: + .adjust-select-dwf-underlay = Vyberte podklad DWF: + .adjust-select-dgn-underlay = Vyberte podklad DGN: + .adjust-mixed-underlays = *Neplatná sada výběru. Vyberte pouze podklady stejného typu souboru.* + .adjust-image-option = Zadejte možnost obrázku [Kontrast/Vyblednout/Jas] : + .adjust-underlay-option = Zadejte možnost podkladu __ocs_arg_kind__ [Vyblednout/Kontrast/Monochromatický] <__ocs_arg_option__>: + .adjust-monochrome = Monochromatický? [Ano/ne] <__ocs_arg_value__>: + .adjust-brightness-value = Zadejte hodnotu: jas (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Zadejte hodnotu: kontrast (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Zadejte hodnotu: vyblednout (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Hodnota musí být celé číslo mezi 0 a 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4643,13 +4654,6 @@ view = .x-no-xdata = __ocs_fmt_0__: žádná xdata. .value-3d-orbit = 3D oběh .value-3d-orbit-drag-with-right-mouse-button = 3D Orbit: táhněte pravým tlačítkem myši. - .adjust-brightness-contrast-fade = ADJUST [Jas / Kontrast / Vyblednutí]: - .adjust-brightness-0-100 = Jas ADJUST 0-100: - .adjust-contrast-0-100 = ADJUST kontrast 0-100: - .adjust-fade-0-100 = ADJUST prolínání 0-100: - .adjust-select-raster-image-s-first = ADJUST: nejprve vyberte rastrový obrázek(y). - .adjust-value-must-be-0-100 = ADJUST: hodnota musí být 0-100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ na snímcích __ocs_fmt_2__. .annoallvisible-new-value-0-1 = Nová hodnota ANNOALLVISIBLE [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: zadejte 0 nebo 1. .annoautoscale-new-value-4-4 = Nová hodnota ANNOAUTOSCALE [-4..4]: @@ -4775,7 +4779,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Podložka __ocs_fmt_0__: vyblednout=__ocs_fmt_1__, kontrast=__ocs_fmt_2__, na=__ocs_fmt_3__, klip=__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = Aktualizované podložky __ocs_fmt_0__. - .usage-adjust-brightness-contrast-fade-0-100 = Použití: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Použití: ANNOSCALE např. 1:50, 2:1 nebo faktor .usage-draworder-f-front-b-back-a-above-handle = Používání: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Použití: HYPERLINK (nejprve vyberte objekty) diff --git a/locales/de-DE/opencadstudio.ftl b/locales/de-DE/opencadstudio.ftl index b5d3e3009..9f6c5ccad 100644 --- a/locales/de-DE/opencadstudio.ftl +++ b/locales/de-DE/opencadstudio.ftl @@ -1081,7 +1081,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: Left, Top oder Right eingeben. .isodraft-expected-on-or-off = ISODRAFT: On oder Off eingeben. .xdata-selected-entities-are-on-locked-layers = XDATA: Ausgewählte Objekte liegen auf gesperrten Layern. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: Keine Rasterbilder ausgewählt oder unbekannte Eigenschaft (BRIGHTNESS/CONTRAST/FADE verwenden). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: Eine ganze Zahl von -4 bis 4 eingeben. .usage-datalink-path-to-csv = Aufruf: DATALINK .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: keine verknüpften Tabellen gefunden. @@ -3916,6 +3915,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Bild oder Unterlage wählen: + .adjust-select-pdf-underlay = PDF-Unterlage wählen: + .adjust-select-dwf-underlay = DWF-Unterlage wählen: + .adjust-select-dgn-underlay = DGN-Unterlage wählen: + .adjust-mixed-underlays = *Ungültiger Auswahlsatz. Nur Unterlagenobjekte desselben Dateityps wählen.* + .adjust-image-option = Bildoption eingeben [Kontrast/Abblendung/Helligkeit] : + .adjust-underlay-option = __ocs_arg_kind__-Unterlagenoption eingeben [Abblendung/Kontrast/Monochrom] <__ocs_arg_option__>: + .adjust-monochrome = Monochrom? [Ja/Nein] <__ocs_arg_value__>: + .adjust-brightness-value = Wert für Helligkeit eingeben (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Wert für Kontrast eingeben (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Wert für Abblendung eingeben (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Der Wert muss eine ganze Zahl zwischen 0 und 100 sein. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4644,13 +4655,6 @@ view = .x-no-xdata = __ocs_fmt_0__: keine xdata. .value-3d-orbit = 3D-Bahn .value-3d-orbit-drag-with-right-mouse-button = 3D Orbit: Ziehen Sie mit der rechten Maustaste. - .adjust-brightness-contrast-fade = ADJUST [Helligkeit / Kontrast / Ausblenden]: - .adjust-brightness-0-100 = ADJUST Helligkeit 0-100: - .adjust-contrast-0-100 = ADJUST Kontrast 0-100: - .adjust-fade-0-100 = ADJUST Ausblenden 0-100: - .adjust-select-raster-image-s-first = ADJUST: Wählen Sie zuerst Rasterbild(e). - .adjust-value-must-be-0-100 = ADJUST: Der Wert muss 0-100 sein. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ auf __ocs_fmt_2__ Bild(en). .annoallvisible-new-value-0-1 = ANNOALLVISIBLE neuer Wert [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: Geben Sie 0 oder 1 ein. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE neuer Wert [-4..4]: @@ -4776,7 +4780,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Unterlag __ocs_fmt_0__: fade=__ocs_fmt_1__, contrast=__ocs_fmt_2__, on=__ocs_fmt_3__, clip=__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = Aktualisiert __ocs_fmt_0__ underlay(s). - .usage-adjust-brightness-contrast-fade-0-100 = Verwendung: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Verwendung: ANNOSCALE e.g. 1:50, 2:1, or a factor .usage-draworder-f-front-b-back-a-above-handle = Verwendung: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Verwendung: HYPERLINK (select objects first) diff --git a/locales/el-GR/opencadstudio.ftl b/locales/el-GR/opencadstudio.ftl index 3cd9057c4..4a4ab291b 100644 --- a/locales/el-GR/opencadstudio.ftl +++ b/locales/el-GR/opencadstudio.ftl @@ -1082,7 +1082,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: πληκτρολογήστε Left, Top ή Right. .isodraft-expected-on-or-off = ISODRAFT: πληκτρολογήστε On ή Off. .xdata-selected-entities-are-on-locked-layers = XDATA: οι επιλεγμένες οντότητες βρίσκονται σε κλειδωμένα επίπεδα. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: δεν έχουν επιλεγεί εικόνες ράστερ ή η ιδιότητα είναι άγνωστη (χρησιμοποιήστε BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: εισαγάγετε ακέραιο από -4 έως 4. .usage-datalink-path-to-csv = Χρήση: DATALINK <διαδρομή-προς-.csv> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: δεν βρέθηκαν συνδεδεμένοι πίνακες. @@ -3928,6 +3927,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Επιλέξτε εικόνα ή υπόβαθρο: + .adjust-select-pdf-underlay = Επιλέξτε υπόβαθρο PDF: + .adjust-select-dwf-underlay = Επιλέξτε υπόβαθρο DWF: + .adjust-select-dgn-underlay = Επιλέξτε υπόβαθρο DGN: + .adjust-mixed-underlays = *Μη έγκυρο σύνολο επιλογής. Επιλέξτε μόνο υπόβαθρα του ίδιου τύπου αρχείου.* + .adjust-image-option = Εισαγάγετε επιλογή εικόνας [Αντίθεση/Ξεθώριασμα/Φωτεινότητα] <Φωτεινότητα>: + .adjust-underlay-option = Εισαγάγετε επιλογή υποβάθρου __ocs_arg_kind__ [Ξεθώριασμα/Αντίθεση/Μονόχρωμο] <__ocs_arg_option__>: + .adjust-monochrome = Μονόχρωμο? [Ναι/Όχι] <__ocs_arg_value__>: + .adjust-brightness-value = Εισαγάγετε τιμή: φωτεινότητα (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Εισαγάγετε τιμή: αντίθεση (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Εισαγάγετε τιμή: ξεθώριασμα (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Η τιμή πρέπει να είναι ακέραιος αριθμός από 0 έως 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4639,13 +4650,6 @@ view = .x-no-xdata = __ocs_fmt_0__: χωρίς xdata. .value-3d-orbit = Τροχιά 3D .value-3d-orbit-drag-with-right-mouse-button = Τροχιά 3D: σύρετε με το δεξί πλήκτρο του ποντικιού. - .adjust-brightness-contrast-fade = ADJUST [Φωτεινότητα / Αντίθεση / Ξεθώριασμα]: - .adjust-brightness-0-100 = ADJUST φωτεινότητα 0-100: - .adjust-contrast-0-100 = ADJUST αντίθεση 0-100: - .adjust-fade-0-100 = ADJUST ξεθώριασμα 0-100: - .adjust-select-raster-image-s-first = ADJUST: επιλέξτε πρώτα εικόνα(ες) ράστερ. - .adjust-value-must-be-0-100 = ADJUST: η τιμή πρέπει να είναι 0-100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ σε __ocs_fmt_2__ εικόνα(ες). .annoallvisible-new-value-0-1 = ANNOALLVISIBLE νέα τιμή [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: δώστε 0 ή 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE νέα τιμή [-4..4]: @@ -4777,7 +4781,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Υπόβαθρο __ocs_fmt_0__: ξεθώριασμα=__ocs_fmt_1__, αντίθεση=__ocs_fmt_2__, ενεργό=__ocs_fmt_3__, αποκοπή=__ocs_fmt_4__, μονόχρωμο=__ocs_fmt_5__ .updated-changed-underlay-s = Ενημερώθηκαν __ocs_fmt_0__ υπόβαθρο(α). - .usage-adjust-brightness-contrast-fade-0-100 = Χρήση: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Χρήση: ANNOSCALE <λόγος> π.χ. 1:50, 2:1 ή συντελεστής .usage-draworder-f-front-b-back-a-above-handle = Χρήση: DRAWORDER F|FRONT | B|BACK | A|ABOVE <αναγνωριστικό> | U|UNDER <αναγνωριστικό> .usage-hyperlink-url-select-objects-first = Χρήση: HYPERLINK (επιλέξτε πρώτα αντικείμενα) diff --git a/locales/en-US/opencadstudio.ftl b/locales/en-US/opencadstudio.ftl index 47dd8e2b0..023024b72 100644 --- a/locales/en-US/opencadstudio.ftl +++ b/locales/en-US/opencadstudio.ftl @@ -1079,7 +1079,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: expected Left, Top, or Right. .isodraft-expected-on-or-off = ISODRAFT: expected On or Off. .xdata-selected-entities-are-on-locked-layers = XDATA: selected entities are on locked layers. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: no raster images selected, or unknown property (use BRIGHTNESS|CONTRAST|FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: enter an integer from -4 through 4. .usage-datalink-path-to-csv = Usage: DATALINK .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: no linked tables found. @@ -3928,6 +3927,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Select image or underlay: + .adjust-select-pdf-underlay = Select PDF underlay: + .adjust-select-dwf-underlay = Select DWF underlay: + .adjust-select-dgn-underlay = Select DGN underlay: + .adjust-mixed-underlays = *Invalid selection set. Select underlay objects of the same file type only.* + .adjust-image-option = Enter image option [Contrast/Fade/Brightness] : + .adjust-underlay-option = Enter __ocs_arg_kind__ underlay option [Fade/Contrast/Monochrome] <__ocs_arg_option__>: + .adjust-monochrome = Monochrome? [Yes/No] <__ocs_arg_value__>: + .adjust-brightness-value = Enter brightness value (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Enter contrast value (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Enter fade value (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Value must be an integer between 0 and 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4638,13 +4649,6 @@ view = .x-no-xdata = __ocs_fmt_0__: no xdata. .value-3d-orbit = 3D Orbit .value-3d-orbit-drag-with-right-mouse-button = 3D Orbit: drag with right mouse button. - .adjust-brightness-contrast-fade = ADJUST [Brightness / Contrast / Fade]: - .adjust-brightness-0-100 = ADJUST brightness 0-100: - .adjust-contrast-0-100 = ADJUST contrast 0-100: - .adjust-fade-0-100 = ADJUST fade 0-100: - .adjust-select-raster-image-s-first = ADJUST: select raster image(s) first. - .adjust-value-must-be-0-100 = ADJUST: value must be 0-100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ on __ocs_fmt_2__ image(s). .annoallvisible-new-value-0-1 = ANNOALLVISIBLE new value [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: enter 0 or 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE new value [-4..4]: @@ -4776,7 +4780,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Underlay __ocs_fmt_0__: fade=__ocs_fmt_1__, contrast=__ocs_fmt_2__, on=__ocs_fmt_3__, clip=__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = Updated __ocs_fmt_0__ underlay(s). - .usage-adjust-brightness-contrast-fade-0-100 = Usage: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Usage: ANNOSCALE e.g. 1:50, 2:1, or a factor .usage-draworder-f-front-b-back-a-above-handle = Usage: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Usage: HYPERLINK (select objects first) diff --git a/locales/es-ES/opencadstudio.ftl b/locales/es-ES/opencadstudio.ftl index 5ee417586..6dc56692e 100644 --- a/locales/es-ES/opencadstudio.ftl +++ b/locales/es-ES/opencadstudio.ftl @@ -1081,7 +1081,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: introduzca Left, Top o Right. .isodraft-expected-on-or-off = ISODRAFT: introduzca On u Off. .xdata-selected-entities-are-on-locked-layers = XDATA: las entidades seleccionadas están en capas bloqueadas. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: no hay imágenes ráster seleccionadas o la propiedad es desconocida (use BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: introduzca un entero de -4 a 4. .usage-datalink-path-to-csv = Uso: DATALINK .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: no se encontraron tablas vinculadas. @@ -3918,6 +3917,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Seleccione una imagen o un calco subyacente: + .adjust-select-pdf-underlay = Seleccione un calco subyacente PDF: + .adjust-select-dwf-underlay = Seleccione un calco subyacente DWF: + .adjust-select-dgn-underlay = Seleccione un calco subyacente DGN: + .adjust-mixed-underlays = *Conjunto de selección no válido. Seleccione solo calcos subyacentes del mismo tipo de archivo.* + .adjust-image-option = Indique una opción de imagen [Contraste/Desvanecimiento/Brillo] : + .adjust-underlay-option = Indique una opción de calco subyacente __ocs_arg_kind__ [Desvanecimiento/Contraste/Monocromo] <__ocs_arg_option__>: + .adjust-monochrome = Monocromo? [Sí/No] <__ocs_arg_value__>: + .adjust-brightness-value = Indique el valor de brillo (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Indique el valor de contraste (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Indique el valor de desvanecimiento (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = El valor debe ser un número entero entre 0 y 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4646,13 +4657,6 @@ view = .x-no-xdata = __ocs_fmt_0__: sin datos extendidos. .value-3d-orbit = Órbita 3D .value-3d-orbit-drag-with-right-mouse-button = Órbita 3D: arrastre con el botón derecho del ratón. - .adjust-brightness-contrast-fade = ADJUST [Brillo/Contraste/Desvanecimiento]: - .adjust-brightness-0-100 = ADJUST Brillo 0-100: - .adjust-contrast-0-100 = ADJUST Contraste 0-100: - .adjust-fade-0-100 = ADJUST Desvanecimiento 0-100: - .adjust-select-raster-image-s-first = ADJUST: seleccione primero una o más imágenes ráster. - .adjust-value-must-be-0-100 = ADJUST: el valor debe estar entre 0 y 100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ en __ocs_fmt_2__ imagen(es). .annoallvisible-new-value-0-1 = ANNOALLVISIBLE Valor nuevo [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: introduzca 0 o 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE Valor nuevo [-4..4]: @@ -4778,7 +4782,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Calco __ocs_fmt_0__: difuminado=__ocs_fmt_1__, contraste=__ocs_fmt_2__, activado=__ocs_fmt_3__, delimitado=__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = Se actualizaron __ocs_fmt_0__ calcos subyacentes. - .usage-adjust-brightness-contrast-fade-0-100 = Uso: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Uso: ANNOSCALE p. ej., 1:50, 2:1 o un factor .usage-draworder-f-front-b-back-a-above-handle = Uso: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Uso: HYPERLINK (seleccione primero los objetos) diff --git a/locales/fi-FI/opencadstudio.ftl b/locales/fi-FI/opencadstudio.ftl index 9af55c14a..159aa6e25 100644 --- a/locales/fi-FI/opencadstudio.ftl +++ b/locales/fi-FI/opencadstudio.ftl @@ -1080,7 +1080,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: anna Left, Top tai Right. .isodraft-expected-on-or-off = ISODRAFT: anna On tai Off. .xdata-selected-entities-are-on-locked-layers = XDATA: valitut objektit ovat lukituilla tasoilla. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: rasterikuvia ei ole valittu tai ominaisuus on tuntematon (käytä BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: anna kokonaisluku väliltä -4–4. .usage-datalink-path-to-csv = Käyttö: DATALINK <.csv-tiedoston-polku> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: linkitettyjä taulukoita ei löytynyt. @@ -3917,6 +3916,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Valitse kuva tai pohja: + .adjust-select-pdf-underlay = Valitse PDF-pohja: + .adjust-select-dwf-underlay = Valitse DWF-pohja: + .adjust-select-dgn-underlay = Valitse DGN-pohja: + .adjust-mixed-underlays = *Virheellinen valintajoukko. Valitse vain samaa tiedostotyyppiä olevia pohjia.* + .adjust-image-option = Anna kuvan asetus [Kontrasti/Häivyttää/Kirkkaus] : + .adjust-underlay-option = Anna __ocs_arg_kind__-pohjan asetus [Häivyttää/Kontrasti/Yksivärinen] <__ocs_arg_option__>: + .adjust-monochrome = Yksivärinen? [Kyllä/Ei] <__ocs_arg_value__>: + .adjust-brightness-value = Anna arvo: kirkkaus (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Anna arvo: kontrasti (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Anna arvo: häivyttää (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Arvon on oltava kokonaisluku väliltä 0–100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4645,13 +4656,6 @@ view = .x-no-xdata = __ocs_fmt_0__: ei xdataa. .value-3d-orbit =3D kiertorata .value-3d-orbit-drag-with-right-mouse-button = 3D-kiertorata: vedä hiiren oikealla painikkeella. - .adjust-brightness-contrast-fade = ADJUST [Kirkkaus / Kontrasti / Haalistuminen]: - .adjust-brightness-0-100 = ADJUST kirkkaus 0-100: - .adjust-contrast-0-100 = ADJUST kontrasti 0-100: - .adjust-fade-0-100 = ADJUST häivytys 0-100: - .adjust-select-raster-image-s-first = ADJUST: valitse ensin rasterikuva(t). - .adjust-value-must-be-0-100 = ADJUST: arvon on oltava 0-100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ __ocs_fmt_2__-kuvissa. .annoallvisible-new-value-0-1 = ANNOALLVISIBLE uusi arvo [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: kirjoita 0 tai 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE uusi arvo [-4..4]: @@ -4777,7 +4781,6 @@ view = .userr-n-val = USER__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Aluskate __ocs_fmt_0__: haalistua=__ocs_fmt_1__, kontrasti=__ocs_fmt_2__, päällä=__ocs_fmt_3__, klipsi=__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = Päivitetty __ocs_fmt_0__-alusta(t). - .usage-adjust-brightness-contrast-fade-0-100 = Käyttö: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Käyttö: ANNOSCALE esim. 1:50, 2:1 tai kerroin .usage-draworder-f-front-b-back-a-above-handle = Käyttö: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Käyttö: HYPERLINK (valitse ensin objektit) diff --git a/locales/fr-FR/opencadstudio.ftl b/locales/fr-FR/opencadstudio.ftl index 08b0e100d..bf0131f8b 100644 --- a/locales/fr-FR/opencadstudio.ftl +++ b/locales/fr-FR/opencadstudio.ftl @@ -1081,7 +1081,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE : saisissez Left, Top ou Right. .isodraft-expected-on-or-off = ISODRAFT : saisissez On ou Off. .xdata-selected-entities-are-on-locked-layers = XDATA : les objets sélectionnés sont sur des calques verrouillés. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST : aucune image matricielle sélectionnée ou propriété inconnue (utilisez BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE : saisissez un entier entre -4 et 4. .usage-datalink-path-to-csv = Utilisation : DATALINK .datalinkupdate-no-linked-tables-found = DATALINKUPDATE : aucune table liée trouvée. @@ -3918,6 +3917,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Sélectionnez une image ou un calque sous-jacent : + .adjust-select-pdf-underlay = Sélectionnez un calque sous-jacent PDF : + .adjust-select-dwf-underlay = Sélectionnez un calque sous-jacent DWF : + .adjust-select-dgn-underlay = Sélectionnez un calque sous-jacent DGN : + .adjust-mixed-underlays = *Jeu de sélection non valide. Sélectionnez uniquement des calques sous-jacents du même type de fichier.* + .adjust-image-option = Entrez une option d'image [Contraste/Estompage/Luminosité] : + .adjust-underlay-option = Entrez une option de calque sous-jacent __ocs_arg_kind__ [Estompage/Contraste/Monochrome] <__ocs_arg_option__>: + .adjust-monochrome = Monochrome? [Oui/Non] <__ocs_arg_value__>: + .adjust-brightness-value = Entrez la valeur de luminosité (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Entrez la valeur de contraste (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Entrez la valeur d’estompage (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = La valeur doit être un nombre entier compris entre 0 et 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4647,13 +4658,6 @@ view = .x-no-xdata = __ocs_fmt_0__: pas de xdata. .value-3d-orbit = Orbite 3D .value-3d-orbit-drag-with-right-mouse-button = Orbite 3D: faites glisser avec le bouton droit de la souris. - .adjust-brightness-contrast-fade = ADJUST [Luminosité / Contraste / Estompage] : - .adjust-brightness-0-100 = ADJUST luminosité 0-100: - .adjust-contrast-0-100 = ADJUST contraste 0-100: - .adjust-fade-0-100 = ADJUST estompage 0-100 : - .adjust-select-raster-image-s-first = ADJUST : sélectionnez d'abord les images master. - .adjust-value-must-be-0-100 = ADJUST: la valeur doit être 0-100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ sur __ocs_fmt_2__ image(s). .annoallvisible-new-value-0-1 = ANNOALLVISIBLE nouvelle valeur [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE : entrez 0 ou 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE nouvelle valeur [-4..4]: @@ -4779,7 +4783,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Sous-couche __ocs_fmt_0__ : estompage=__ocs_fmt_1__, contraste=__ocs_fmt_2__, actif=__ocs_fmt_3__, délimitation=__ocs_fmt_4__, monochrome=__ocs_fmt_5__ .updated-changed-underlay-s = Mise à jour de __ocs_fmt_0__ sous-couche(s). - .usage-adjust-brightness-contrast-fade-0-100 = Utilisation : ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Utilisation : ANNOSCALE e.g. 1:50, 2:1, or a factor .usage-draworder-f-front-b-back-a-above-handle = Utilisation : DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Utilisation : HYPERLINK (select objects first) diff --git a/locales/hi-IN/opencadstudio.ftl b/locales/hi-IN/opencadstudio.ftl index c520b2135..2d992b2d2 100644 --- a/locales/hi-IN/opencadstudio.ftl +++ b/locales/hi-IN/opencadstudio.ftl @@ -1069,7 +1069,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: Left, Top या Right दर्ज करें। .isodraft-expected-on-or-off = ISODRAFT: On या Off दर्ज करें। .xdata-selected-entities-are-on-locked-layers = XDATA: चयनित इकाइयाँ लॉक लेयर पर हैं। - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: कोई रास्टर छवि चयनित नहीं है या गुण अज्ञात है (BRIGHTNESS/CONTRAST/FADE उपयोग करें)। .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: -4 से 4 तक पूर्णांक दर्ज करें। .usage-datalink-path-to-csv = उपयोग: DATALINK <.csv-का-पथ> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: कोई लिंक की गई तालिका नहीं मिली। @@ -3906,6 +3905,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = छवि या अंडरले चुनें: + .adjust-select-pdf-underlay = PDF अंडरले चुनें: + .adjust-select-dwf-underlay = DWF अंडरले चुनें: + .adjust-select-dgn-underlay = DGN अंडरले चुनें: + .adjust-mixed-underlays = *अमान्य चयन सेट। केवल एक ही फ़ाइल प्रकार के अंडरले चुनें।* + .adjust-image-option = छवि विकल्प दर्ज करें [कंट्रास्ट/फेड/चमक] <चमक>: + .adjust-underlay-option = __ocs_arg_kind__ अंडरले विकल्प दर्ज करें [फेड/कंट्रास्ट/मोनोक्रोम] <__ocs_arg_option__>: + .adjust-monochrome = मोनोक्रोम? [हाँ/नहीं] <__ocs_arg_value__>: + .adjust-brightness-value = चमक मान दर्ज करें (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = कंट्रास्ट मान दर्ज करें (0-100) <__ocs_arg_value__>: + .adjust-fade-value = फेड मान दर्ज करें (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = मान 0 और 100 के बीच का पूर्णांक होना चाहिए। .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4634,13 +4645,6 @@ view = .x-no-xdata = __ocs_fmt_0__: कोई Xdata नहीं। .value-3d-orbit = 3D कक्षा .value-3d-orbit-drag-with-right-mouse-button = 3D Orbit: दाहिने माउस बटन के साथ खींचें। - .adjust-brightness-contrast-fade = ADJUST [चमक / कॉन्ट्रास्ट / फेड]: - .adjust-brightness-0-100 = ADJUST चमक 0-100: - .adjust-contrast-0-100 = ADJUST विपरीत 0-100: - .adjust-fade-0-100 = ADJUST फीका 0-100: - .adjust-select-raster-image-s-first = ADJUST: पहले रास्टर छवि का चयन करें। - .adjust-value-must-be-0-100 = ADJUST: मान 0-100 होना चाहिए। - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ पर __ocs_fmt_2__ छवि(s). .annoallvisible-new-value-0-1 = ANNOALLVISIBLE नया मान [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: 0 या 1 दर्ज करें। .annoautoscale-new-value-4-4 = ANNOAUTOSCALE नया मूल्य [-4..4]: @@ -4766,7 +4770,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Underlay __ocs_fmt_0__: frequ = __ocs_fmt_1__, विपरीत = __ocs_fmt_2__, on=__ocs_fmt_3__, क्लिप =__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = अद्यतन __ocs_fmt_0__ underlay(s)). - .usage-adjust-brightness-contrast-fade-0-100 = उपयोग: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = उपयोग: ANNOSCALE e.g. 1:50, 2:1, or a factor .usage-draworder-f-front-b-back-a-above-handle = उपयोग: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = उपयोग: HYPERLINK (select objects first) diff --git a/locales/hu-HU/opencadstudio.ftl b/locales/hu-HU/opencadstudio.ftl index 9b40b57ca..db4e41305 100644 --- a/locales/hu-HU/opencadstudio.ftl +++ b/locales/hu-HU/opencadstudio.ftl @@ -1085,7 +1085,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: írja be: Left, Top vagy Right. .isodraft-expected-on-or-off = ISODRAFT: írja be: On vagy Off. .xdata-selected-entities-are-on-locked-layers = XDATA: a kijelölt objektumok zárolt fóliákon vannak. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: nincs kijelölt raszterkép, vagy ismeretlen a tulajdonság (használja: BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: adjon meg egy egész számot -4 és 4 között. .usage-datalink-path-to-csv = Használat: DATALINK <.csv-elérési-út> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: nem található csatolt táblázat. @@ -3914,6 +3913,18 @@ insert = .xref-attach-dwg = DWG csatolása .xref-attach-image = Kép csatolása .select-images = Válasszon képeket: + .adjust-select-image-or-underlay = Válasszon képet vagy alátétet: + .adjust-select-pdf-underlay = Válasszon PDF alátétet: + .adjust-select-dwf-underlay = Válasszon DWF alátétet: + .adjust-select-dgn-underlay = Válasszon DGN alátétet: + .adjust-mixed-underlays = *Érvénytelen kijelölési készlet. Csak azonos fájltípusú alátéteket válasszon.* + .adjust-image-option = Adja meg a kép opcióját [Kontraszt/Halványítás/Fényerő] : + .adjust-underlay-option = Adja meg a(z) __ocs_arg_kind__ alátét opcióját [Halványítás/Kontraszt/Monokróm] <__ocs_arg_option__>: + .adjust-monochrome = Monokróm? [Igen/Nem] <__ocs_arg_value__>: + .adjust-brightness-value = Adja meg az értéket: fényerő (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Adja meg az értéket: kontraszt (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Adja meg az értéket: halványítás (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Az értéknek 0 és 100 közötti egész számnak kell lennie. .transparency-mode-on = Adja meg az átlátszósági módot [ON/OFF] : .transparency-mode-off = Adja meg az átlátszósági módot [ON/OFF] : .xref-attach-menu = Csatolás… @@ -4643,13 +4654,6 @@ view = .x-no-xdata = __ocs_fmt_0__: nincs xdata. .value-3d-orbit = 3D keringés .value-3d-orbit-drag-with-right-mouse-button = 3D Orbit: húzza a jobb egérgombbal. - .adjust-brightness-contrast-fade = ADJUST [Brightness / Contrast / Fade]: - .adjust-brightness-0-100 = ADJUST fényerő 0-100: - .adjust-contrast-0-100 = ADJUST kontraszt 0-100: - .adjust-fade-0-100 = ADJUST Halványítás 0–100: - .adjust-select-raster-image-s-first = ADJUST: először válassza ki a raszterképe(ke)t. - .adjust-value-must-be-0-100 = ADJUST: az értéknek 0 és 100 között kell lennie. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ __ocs_fmt_2__ kép(ek)en. .annoallvisible-new-value-0-1 = ANNOALLVISIBLE új érték [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: írjon be 0 vagy 1 értéket. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE új érték [-4..4]: @@ -4769,7 +4773,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Alávetítés __ocs_fmt_0__: halványítás=__ocs_fmt_1__, kontraszt=__ocs_fmt_2__, be=__ocs_fmt_3__, körülvágás=__ocs_fmt_4__, egyszínű=__ocs_fmt_5__ .updated-changed-underlay-s = Frissített __ocs_fmt_0__ alávetítés(ek). - .usage-adjust-brightness-contrast-fade-0-100 = Használat: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Használat: ANNOSCALE pl. 1:50, 2:1 vagy egy tényező .usage-draworder-f-front-b-back-a-above-handle = Használat: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Használat: HYPERLINK (először válassza ki az objektumokat) diff --git a/locales/it-IT/opencadstudio.ftl b/locales/it-IT/opencadstudio.ftl index b494306f2..020ff2d09 100644 --- a/locales/it-IT/opencadstudio.ftl +++ b/locales/it-IT/opencadstudio.ftl @@ -1080,7 +1080,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: immetti Left, Top o Right. .isodraft-expected-on-or-off = ISODRAFT: immetti On o Off. .xdata-selected-entities-are-on-locked-layers = XDATA: le entità selezionate sono su layer bloccati. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: nessuna immagine raster selezionata o proprietà sconosciuta (usa BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: immetti un intero da -4 a 4. .usage-datalink-path-to-csv = Uso: DATALINK .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: nessuna tabella collegata trovata. @@ -3917,6 +3916,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Selezionare un'immagine o un sottoposto: + .adjust-select-pdf-underlay = Selezionare un sottoposto PDF: + .adjust-select-dwf-underlay = Selezionare un sottoposto DWF: + .adjust-select-dgn-underlay = Selezionare un sottoposto DGN: + .adjust-mixed-underlays = *Gruppo di selezione non valido. Selezionare solo sottoposti dello stesso tipo di file.* + .adjust-image-option = Specificare un'opzione immagine [Contrasto/Svanire/Luminosità] : + .adjust-underlay-option = Specificare un'opzione sottoposto __ocs_arg_kind__ [Svanire/Contrasto/Monocromatico] <__ocs_arg_option__>: + .adjust-monochrome = Monocromatico? [Sì/No] <__ocs_arg_value__>: + .adjust-brightness-value = Specificare il valore di luminosità (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Specificare il valore di contrasto (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Specificare il valore di svanire (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Il valore deve essere un numero intero compreso tra 0 e 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4645,13 +4656,6 @@ view = .x-no-xdata = __ocs_fmt_0__: nessun dato x. .value-3d-orbit =Orbita 3D .value-3d-orbit-drag-with-right-mouse-button = Orbita 3D: trascina con il tasto destro del mouse. - .adjust-brightness-contrast-fade = ADJUST [Luminosità/Contrasto/Dissolvenza]: - .adjust-brightness-0-100 = Luminosità ADJUST 0-100: - .adjust-contrast-0-100 = ADJUST contrasto 0-100: - .adjust-fade-0-100 = ADJUST dissolvenza 0-100: - .adjust-select-raster-image-s-first = ADJUST: seleziona prima le immagini raster. - .adjust-value-must-be-0-100 = ADJUST: il valore deve essere compreso tra 0 e 100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ sulle immagini __ocs_fmt_2__. .annoallvisible-new-value-0-1 = ANNOALLVISIBLE nuovo valore [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: inserisci 0 o 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE nuovo valore [-4..4]: @@ -4777,7 +4781,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Sottofondo __ocs_fmt_0__: dissolvenza=__ocs_fmt_1__, contrasto=__ocs_fmt_2__, on=__ocs_fmt_3__, clip=__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = Sottofondi __ocs_fmt_0__ aggiornati. - .usage-adjust-brightness-contrast-fade-0-100 = Utilizzo: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Utilizzo: ANNOSCALE ad es. 1:50, 2:1 o un fattore .usage-draworder-f-front-b-back-a-above-handle = Utilizzo: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Utilizzo: HYPERLINK (selezionare prima gli oggetti) diff --git a/locales/ja-JP/opencadstudio.ftl b/locales/ja-JP/opencadstudio.ftl index 88381d6b0..3ec41503b 100644 --- a/locales/ja-JP/opencadstudio.ftl +++ b/locales/ja-JP/opencadstudio.ftl @@ -1071,7 +1071,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: Left、Top、Right のいずれかを入力してください。 .isodraft-expected-on-or-off = ISODRAFT: On または Off を入力してください。 .xdata-selected-entities-are-on-locked-layers = XDATA: 選択した図形はロックされた画層上にあります。 - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: ラスター画像が選択されていないか、プロパティが不明です(BRIGHTNESS/CONTRAST/FADE を使用)。 .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: -4 から 4 までの整数を入力してください。 .usage-datalink-path-to-csv = 使用法: DATALINK <.csvのパス> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: リンクされた表が見つかりません。 @@ -3906,6 +3905,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = イメージまたはアンダーレイを選択: + .adjust-select-pdf-underlay = PDF アンダーレイを選択: + .adjust-select-dwf-underlay = DWF アンダーレイを選択: + .adjust-select-dgn-underlay = DGN アンダーレイを選択: + .adjust-mixed-underlays = *選択セットが無効です。同じファイル タイプのアンダーレイのみを選択してください。* + .adjust-image-option = イメージ オプションを入力 [コントラスト/フェード/明るさ] <明るさ>: + .adjust-underlay-option = __ocs_arg_kind__ アンダーレイ オプションを入力 [フェード/コントラスト/モノクロ] <__ocs_arg_option__>: + .adjust-monochrome = モノクロ? [はい/いいえ] <__ocs_arg_value__>: + .adjust-brightness-value = 明るさの値を入力 (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = コントラストの値を入力 (0-100) <__ocs_arg_value__>: + .adjust-fade-value = フェードの値を入力 (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = 値は 0 から 100 までの整数でなければなりません。 .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4634,13 +4645,6 @@ view = .x-no-xdata = __ocs_fmt_0__: 拡張データなし。 .value-3d-orbit = 3D オービット .value-3d-orbit-drag-with-right-mouse-button = 3D オービット: マウス右ボタンでドラッグします。 - .adjust-brightness-contrast-fade = ADJUST [明るさ / コントラスト / フェード]: - .adjust-brightness-0-100 = ADJUST 明るさ 0-100: - .adjust-contrast-0-100 = ADJUST コントラスト 0-100: - .adjust-fade-0-100 = ADJUST フェード 0-100: - .adjust-select-raster-image-s-first = ADJUST: 先にラスター画像を選択してください。 - .adjust-value-must-be-0-100 = ADJUST: 値は 0~100 にしてください。 - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_2__ 個の画像で __ocs_fmt_0__ = __ocs_fmt_1__ に変更しました。 .annoallvisible-new-value-0-1 = ANNOALLVISIBLE 新しい値 [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: 0 または 1 を入力してください。 .annoautoscale-new-value-4-4 = ANNOAUTOSCALE 新しい値 [-4..4]: @@ -4766,7 +4770,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = アンダーレイ __ocs_fmt_0__: フェード=__ocs_fmt_1__、コントラスト=__ocs_fmt_2__、表示=__ocs_fmt_3__、クリップ=__ocs_fmt_4__、モノクロ=__ocs_fmt_5__ .updated-changed-underlay-s = __ocs_fmt_0__ 個のアンダーレイを更新しました。 - .usage-adjust-brightness-contrast-fade-0-100 = 使用法: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = 使用法: ANNOSCALE 例: 1:50、2:1、または係数 .usage-draworder-f-front-b-back-a-above-handle = 使用法: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = 使用法: HYPERLINK (先にオブジェクトを選択) diff --git a/locales/ko-KR/opencadstudio.ftl b/locales/ko-KR/opencadstudio.ftl index 265f722ce..81abcfda5 100644 --- a/locales/ko-KR/opencadstudio.ftl +++ b/locales/ko-KR/opencadstudio.ftl @@ -1080,7 +1080,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: Left, Top 또는 Right를 입력하세요. .isodraft-expected-on-or-off = ISODRAFT: On 또는 Off를 입력하세요. .xdata-selected-entities-are-on-locked-layers = XDATA: 선택한 객체가 잠긴 도면층에 있습니다. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: 래스터 이미지를 선택하지 않았거나 알 수 없는 속성입니다(BRIGHTNESS/CONTRAST/FADE 사용). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: -4부터 4까지 정수를 입력하세요. .usage-datalink-path-to-csv = 사용법: DATALINK <.csv-경로> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: 연결된 테이블을 찾을 수 없습니다. @@ -3917,6 +3916,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = 이미지 또는 언더레이 선택: + .adjust-select-pdf-underlay = PDF 언더레이 선택: + .adjust-select-dwf-underlay = DWF 언더레이 선택: + .adjust-select-dgn-underlay = DGN 언더레이 선택: + .adjust-mixed-underlays = *선택 세트가 잘못되었습니다. 같은 파일 유형의 언더레이만 선택하십시오.* + .adjust-image-option = 이미지 옵션 입력 [대비/페이드/밝기] <밝기>: + .adjust-underlay-option = __ocs_arg_kind__ 언더레이 옵션 입력 [페이드/대비/흑백] <__ocs_arg_option__>: + .adjust-monochrome = 흑백? [예/아니요] <__ocs_arg_value__>: + .adjust-brightness-value = 밝기 값 입력 (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = 대비 값 입력 (0-100) <__ocs_arg_value__>: + .adjust-fade-value = 페이드 값 입력 (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = 값은 0에서 100 사이의 정수여야 합니다. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4645,13 +4656,6 @@ view = .x-no-xdata = __ocs_fmt_0__: 확장 데이터가 없습니다. .value-3d-orbit =3D 궤도 .value-3d-orbit-drag-with-right-mouse-button = 3D 궤도: 마우스 오른쪽 버튼으로 드래그합니다. - .adjust-brightness-contrast-fade = ADJUST [밝기 / 대비 / 페이드]: - .adjust-brightness-0-100 = ADJUST 밝기 0-100: - .adjust-contrast-0-100 = ADJUST 대비 0-100: - .adjust-fade-0-100 = ADJUST 페이드 0-100: - .adjust-select-raster-image-s-first = ADJUST: 먼저 래스터 이미지를 선택합니다. - .adjust-value-must-be-0-100 = ADJUST: 값은 0-100이어야 합니다. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_2__ 이미지의 __ocs_fmt_0__ = __ocs_fmt_1__. .annoallvisible-new-value-0-1 = ANNOALLVISIBLE 새 값 [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: 0 또는 1을 입력합니다. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE 새 값 [-4..4]: @@ -4777,7 +4781,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = 언더레이 __ocs_fmt_0__: fade=__ocs_fmt_1__, 대비=__ocs_fmt_2__, on=__ocs_fmt_3__, 클립=__ocs_fmt_4__, 모노=__ocs_fmt_5__ .updated-changed-underlay-s = __ocs_fmt_0__ 언더레이가 업데이트되었습니다. - .usage-adjust-brightness-contrast-fade-0-100 = 사용법: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = 사용법: ANNOSCALE 예: 1:50, 2:1 또는 요소 .usage-draworder-f-front-b-back-a-above-handle = 사용법: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = 사용법: HYPERLINK (객체를 먼저 선택) diff --git a/locales/lo-LA/opencadstudio.ftl b/locales/lo-LA/opencadstudio.ftl index f419faa2a..dfbd9a0d3 100644 --- a/locales/lo-LA/opencadstudio.ftl +++ b/locales/lo-LA/opencadstudio.ftl @@ -1086,7 +1086,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: ຕ້ອງການ Left, Top, ຫຼື Right. .isodraft-expected-on-or-off = ISODRAFT: ຕ້ອງການ On ຫຼື Off. .xdata-selected-entities-are-on-locked-layers = XDATA: ອົງປະກອບທີ່ເລືອກຢູ່ໃນເລເຢີທີ່ລັອກໄວ້. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: ບໍ່ມີຮູບພາບຣາສເຕີຖືກເລືອກ, ຫຼື ບໍ່ຮູ້ຈັກຄຸນສົມບັດ (ໃຊ້ BRIGHTNESS|CONTRAST|FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: ປ້ອນຈຳນວນຖ້ວນແຕ່ -4 ຫາ 4. .usage-datalink-path-to-csv = ວິທີໃຊ້: DATALINK <ເສັ້ນທາງໄຟລ໌-.csv> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: ບໍ່ພົບຕາຕະລາງທີ່ເຊື່ອມໂຍງ. @@ -3930,6 +3929,18 @@ insert = .xref-attach-dwg = ແນບ DWG .xref-attach-image = ແນບຮູບພາບ .select-images = ເລືອກຮູບພາບ: + .adjust-select-image-or-underlay = ເລືອກຮູບພາບ ຫຼື ຊັ້ນຮອງ: + .adjust-select-pdf-underlay = ເລືອກຊັ້ນຮອງ PDF: + .adjust-select-dwf-underlay = ເລືອກຊັ້ນຮອງ DWF: + .adjust-select-dgn-underlay = ເລືອກຊັ້ນຮອງ DGN: + .adjust-mixed-underlays = *ຊຸດການເລືອກບໍ່ຖືກຕ້ອງ. ເລືອກສະເພາະຊັ້ນຮອງທີ່ມີປະເພດໄຟລ໌ດຽວກັນ.* + .adjust-image-option = ປ້ອນຕົວເລືອກຮູບພາບ [ຄວາມຄົມຊັດ/ຈາງ/ຄວາມສະຫວ່າງ] <ຄວາມສະຫວ່າງ>: + .adjust-underlay-option = ປ້ອນຕົວເລືອກຊັ້ນຮອງ __ocs_arg_kind__ [ຈາງ/ຄວາມຄົມຊັດ/ສີຂາວດຳ] <__ocs_arg_option__>: + .adjust-monochrome = ສີຂາວດຳ? [ແມ່ນ/ບໍ່] <__ocs_arg_value__>: + .adjust-brightness-value = ປ້ອນຄ່າ ຄວາມສະຫວ່າງ (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = ປ້ອນຄ່າ ຄວາມຄົມຊັດ (0-100) <__ocs_arg_value__>: + .adjust-fade-value = ປ້ອນຄ່າ ຈາງ (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = ຄ່າຕ້ອງເປັນຈໍານວນຖ້ວນລະຫວ່າງ 0 ຫາ 100. .transparency-mode-on = ປ້ອນໂໝດຄວາມໂປ່ງໃສ [ON/OFF] : .transparency-mode-off = ປ້ອນໂໝດຄວາມໂປ່ງໃສ [ON/OFF] : .xref-attach-menu = ແນບ... @@ -4639,13 +4650,6 @@ view = .x-no-xdata = __ocs_fmt_0__: ບໍ່ມີ xdata. .value-3d-orbit = ໝູນມຸມມອງ 3D (3D Orbit) .value-3d-orbit-drag-with-right-mouse-button = 3D Orbit: ລາກດ້ວຍປຸ່ມເມົາສ໌ຂວາ. - .adjust-brightness-contrast-fade = ADJUST [ຄວາມສະຫວ່າງ / ຄວາມຄົມຊັດ / ຄວາມຈາງ]: - .adjust-brightness-0-100 = ADJUST ຄວາມສະຫວ່າງ 0-100: - .adjust-contrast-0-100 = ADJUST ຄວາມຄົມຊັດ 0-100: - .adjust-fade-0-100 = ADJUST ຄວາມຈາງ 0-100: - .adjust-select-raster-image-s-first = ADJUST: ເລືອກຮູບພາບແຣັສເຕີກ່ອນ. - .adjust-value-must-be-0-100 = ADJUST: ຄ່າຕ້ອງຢູ່ລະຫວ່າງ 0-100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ ໃນ __ocs_fmt_2__ ຮູບພາບ. .annoallvisible-new-value-0-1 = ANNOALLVISIBLE ຄ່າໃໝ່ [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: ປ້ອນ 0 ຫຼື 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE ຄ່າໃໝ່ [-4..4]: @@ -4777,7 +4781,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = ຊັ້ນຮອງພື້ນ __ocs_fmt_0__: ຄວາມຈາງ=__ocs_fmt_1__, ຄວາມຄົມຊັດ=__ocs_fmt_2__, ເປີດ=__ocs_fmt_3__, ຕັດຂອບ=__ocs_fmt_4__, ຂາວດໍາ=__ocs_fmt_5__ .updated-changed-underlay-s = ອັບເດດແລ້ວ __ocs_fmt_0__ ຊັ້ນຮອງພື້ນ. - .usage-adjust-brightness-contrast-fade-0-100 = ວິທີໃຊ້: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = ວິທີໃຊ້: ANNOSCALE <ອັດຕາສ່ວນ> ເຊັ່ນ 1:50, 2:1, ຫຼື ຕົວຄູນ .usage-draworder-f-front-b-back-a-above-handle = ວິທີໃຊ້: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = ວິທີໃຊ້: HYPERLINK (ເລືອກວັດຖຸກ່ອນ) diff --git a/locales/nl-NL/opencadstudio.ftl b/locales/nl-NL/opencadstudio.ftl index 64b4faa7c..eb8ccf33a 100644 --- a/locales/nl-NL/opencadstudio.ftl +++ b/locales/nl-NL/opencadstudio.ftl @@ -1079,7 +1079,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: voer Left, Top of Right in. .isodraft-expected-on-or-off = ISODRAFT: voer On of Off in. .xdata-selected-entities-are-on-locked-layers = XDATA: geselecteerde objecten staan op vergrendelde lagen. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: geen rasterafbeeldingen geselecteerd of onbekende eigenschap (gebruik BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: voer een geheel getal van -4 tot en met 4 in. .usage-datalink-path-to-csv = Gebruik: DATALINK .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: geen gekoppelde tabellen gevonden. @@ -3916,6 +3915,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Selecteer afbeelding of onderlegger: + .adjust-select-pdf-underlay = Selecteer PDF-onderlegger: + .adjust-select-dwf-underlay = Selecteer DWF-onderlegger: + .adjust-select-dgn-underlay = Selecteer DGN-onderlegger: + .adjust-mixed-underlays = *Ongeldige selectieset. Selecteer alleen onderleggers van hetzelfde bestandstype.* + .adjust-image-option = Voer afbeeldingsoptie in [Contrast/Transparantie/Helderheid] : + .adjust-underlay-option = Voer __ocs_arg_kind__-onderleggeroptie in [Transparantie/Contrast/Monochroom] <__ocs_arg_option__>: + .adjust-monochrome = Monochroom? [Ja/Nee] <__ocs_arg_value__>: + .adjust-brightness-value = Voer waarde voor helderheid in (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Voer waarde voor contrast in (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Voer waarde voor transparantie in (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = De waarde moet een geheel getal tussen 0 en 100 zijn. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4644,13 +4655,6 @@ view = .x-no-xdata = __ocs_fmt_0__: geen xdata. .value-3d-orbit = 3D-baan .value-3d-orbit-drag-with-right-mouse-button = 3D Orbit: sleep met de rechter muisknop. - .adjust-brightness-contrast-fade = ADJUST [Helderheid / Contrast / Vervagen]: - .adjust-brightness-0-100 = ADJUST helderheid 0-100: - .adjust-contrast-0-100 = ADJUST contrast 0-100: - .adjust-fade-0-100 = ADJUST vervaging 0-100: - .adjust-select-raster-image-s-first = ADJUST: selecteer eerst rasterafbeelding(s). - .adjust-value-must-be-0-100 = ADJUST: waarde moet 0-100 zijn. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ op __ocs_fmt_2__ image(s). .annoallvisible-new-value-0-1 = ANNOALLVISIBLE nieuwe waarde [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: vul 0 of 1 in. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE nieuwe waarde [-4..4]: @@ -4776,7 +4780,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Onderlaag __ocs_fmt_0__: fade=__ocs_fmt_1__, contrast=__ocs_fmt_2__, on=__ocs_fmt_3__, clip=__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = Bijgewerkt __ocs_fmt_0__ underlay(s). - .usage-adjust-brightness-contrast-fade-0-100 = Gebruik: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Gebruik: ANNOSCALE e.g. 1:50, 2:1, or a factor .usage-draworder-f-front-b-back-a-above-handle = Gebruik: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Gebruik: HYPERLINK (select objects first) diff --git a/locales/pl-PL/opencadstudio.ftl b/locales/pl-PL/opencadstudio.ftl index e0c88c3a4..600bfdf83 100644 --- a/locales/pl-PL/opencadstudio.ftl +++ b/locales/pl-PL/opencadstudio.ftl @@ -1080,7 +1080,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: wpisz Left, Top lub Right. .isodraft-expected-on-or-off = ISODRAFT: wpisz On lub Off. .xdata-selected-entities-are-on-locked-layers = XDATA: zaznaczone obiekty znajdują się na zablokowanych warstwach. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: brak zaznaczonych obrazów rastrowych lub nieznana właściwość (użyj BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: wpisz liczbę całkowitą od -4 do 4. .usage-datalink-path-to-csv = Użycie: DATALINK <ścieżka-do-.csv> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: nie znaleziono połączonych tabel. @@ -3917,6 +3916,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Wybierz obraz lub podkład: + .adjust-select-pdf-underlay = Wybierz podkład PDF: + .adjust-select-dwf-underlay = Wybierz podkład DWF: + .adjust-select-dgn-underlay = Wybierz podkład DGN: + .adjust-mixed-underlays = *Nieprawidłowy zbiór wskazań. Wybierz tylko podkłady tego samego typu pliku.* + .adjust-image-option = Podaj opcję obrazu [Kontrast/Zniknąć/Jasność] : + .adjust-underlay-option = Podaj opcję podkładu __ocs_arg_kind__ [Zniknąć/Kontrast/Monochromatyczny] <__ocs_arg_option__>: + .adjust-monochrome = Monochromatyczny? [Tak/Nie] <__ocs_arg_value__>: + .adjust-brightness-value = Podaj wartość: jasność (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Podaj wartość: kontrast (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Podaj wartość: zniknąć (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Wartość musi być liczbą całkowitą z zakresu od 0 do 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4645,13 +4656,6 @@ view = .x-no-xdata = __ocs_fmt_0__: brak xdata. .value-3d-orbit =Orbita 3D .value-3d-orbit-drag-with-right-mouse-button = Orbita 3D: przeciągnij prawym przyciskiem myszy. - .adjust-brightness-contrast-fade = ADJUST [Jasność / Kontrast / Zanik]: - .adjust-brightness-0-100 = ADJUST jasność 0-100: - .adjust-contrast-0-100 = ADJUST kontrast 0-100: - .adjust-fade-0-100 = ADJUST zanikanie 0-100: - .adjust-select-raster-image-s-first = ADJUST: najpierw wybierz obrazy rastrowe. - .adjust-value-must-be-0-100 = ADJUST: wartość musi wynosić 0-100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ na obrazach __ocs_fmt_2__. .annoallvisible-new-value-0-1 = ANNOALLVISIBLE nowa wartość [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: wprowadź 0 lub 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE nowa wartość [-4..4]: @@ -4777,7 +4781,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Podkład __ocs_fmt_0__: fade=__ocs_fmt_1__, kontrast=__ocs_fmt_2__, on=__ocs_fmt_3__, klip=__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = Zaktualizowano podkładki __ocs_fmt_0__. - .usage-adjust-brightness-contrast-fade-0-100 = Zastosowanie: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Zastosowanie: ANNOSCALE np. 1:50, 2:1 lub współczynnik .usage-draworder-f-front-b-back-a-above-handle = Zastosowanie: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Sposób użycia: HYPERLINK (najpierw wybierz obiekty) diff --git a/locales/pt-BR/opencadstudio.ftl b/locales/pt-BR/opencadstudio.ftl index 18d9cd8cd..4cde99d7d 100644 --- a/locales/pt-BR/opencadstudio.ftl +++ b/locales/pt-BR/opencadstudio.ftl @@ -1081,7 +1081,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: digite Left, Top ou Right. .isodraft-expected-on-or-off = ISODRAFT: digite On ou Off. .xdata-selected-entities-are-on-locked-layers = XDATA: as entidades selecionadas estão em camadas bloqueadas. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: nenhuma imagem raster selecionada ou propriedade desconhecida (use BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: digite um inteiro de -4 a 4. .usage-datalink-path-to-csv = Uso: DATALINK .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: nenhuma tabela vinculada encontrada. @@ -3919,6 +3918,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Selecione uma imagem ou referência subjacente: + .adjust-select-pdf-underlay = Selecione uma referência subjacente PDF: + .adjust-select-dwf-underlay = Selecione uma referência subjacente DWF: + .adjust-select-dgn-underlay = Selecione uma referência subjacente DGN: + .adjust-mixed-underlays = *Conjunto de seleção inválido. Selecione apenas referências subjacentes do mesmo tipo de arquivo.* + .adjust-image-option = Insira a opção de imagem [Contraste/Esmaecimento/Brilho] : + .adjust-underlay-option = Insira a opção de referência subjacente __ocs_arg_kind__ [Esmaecimento/Contraste/Monocromático] <__ocs_arg_option__>: + .adjust-monochrome = Monocromático? [Sim/Não] <__ocs_arg_value__>: + .adjust-brightness-value = Insira o valor de brilho (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Insira o valor de contraste (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Insira o valor de esmaecimento (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = O valor deve ser um número inteiro entre 0 e 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4646,13 +4657,6 @@ view = .x-no-xdata = __ocs_fmt_0__: sem dados estendidos. .value-3d-orbit = Órbita 3D .value-3d-orbit-drag-with-right-mouse-button = Órbita 3D: arraste com o botão direito do mouse. - .adjust-brightness-contrast-fade = ADJUST [Brilho / Contraste / Esmaecimento]: - .adjust-brightness-0-100 = ADJUST brilho 0-100: - .adjust-contrast-0-100 = ADJUST contraste 0-100: - .adjust-fade-0-100 = ADJUST esmaecimento 0-100: - .adjust-select-raster-image-s-first = ADJUST: selecione primeiro as imagens raster. - .adjust-value-must-be-0-100 = ADJUST: o valor deve estar entre 0 e 100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ em __ocs_fmt_2__ imagens. .annoallvisible-new-value-0-1 = ANNOALLVISIBLE novo valor [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: insira 0 ou 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE novo valor [-4..4]: @@ -4778,7 +4782,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Subjacência __ocs_fmt_0__: esmaecimento=__ocs_fmt_1__, contraste=__ocs_fmt_2__, ligada=__ocs_fmt_3__, delimitada=__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = __ocs_fmt_0__ subjacências atualizadas. - .usage-adjust-brightness-contrast-fade-0-100 = Uso: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Uso: ANNOSCALE por exemplo, 1:50, 2:1 ou um fator .usage-draworder-f-front-b-back-a-above-handle = Uso: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Uso: HYPERLINK (selecione primeiro os objetos) diff --git a/locales/ru-RU/opencadstudio.ftl b/locales/ru-RU/opencadstudio.ftl index df43b135a..58a7f52eb 100644 --- a/locales/ru-RU/opencadstudio.ftl +++ b/locales/ru-RU/opencadstudio.ftl @@ -1084,7 +1084,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: введите Left, Top или Right. .isodraft-expected-on-or-off = ISODRAFT: введите On или Off. .xdata-selected-entities-are-on-locked-layers = XDATA: выбранные объекты находятся на заблокированных слоях. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: растровые изображения не выбраны или свойство неизвестно (используйте BRIGHTNESS/CONTRAST/FADE). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: введите целое число от -4 до 4. .usage-datalink-path-to-csv = Использование: DATALINK <путь-к-.csv> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: связанные таблицы не найдены. @@ -3919,6 +3918,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = Выберите изображение или подложку: + .adjust-select-pdf-underlay = Выберите подложку PDF: + .adjust-select-dwf-underlay = Выберите подложку DWF: + .adjust-select-dgn-underlay = Выберите подложку DGN: + .adjust-mixed-underlays = *Недопустимый набор. Выберите только подложки одного типа файлов.* + .adjust-image-option = Введите параметр изображения [контраст/Угасание/Яркость] <Яркость>: + .adjust-underlay-option = Введите параметр подложки __ocs_arg_kind__ [Угасание/контраст/Монохромный] <__ocs_arg_option__>: + .adjust-monochrome = Монохромный? [Да/Нет] <__ocs_arg_value__>: + .adjust-brightness-value = Введите значение: яркость (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Введите значение: контраст (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Введите значение: угасание (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Значение должно быть целым числом от 0 до 100. .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4647,13 +4658,6 @@ view = .x-no-xdata = __ocs_fmt_0__: нет данных. .value-3d-orbit = 3D орбитальная .value-3d-orbit-drag-with-right-mouse-button = 3D Orbit: перетащите правой кнопкой мыши. - .adjust-brightness-contrast-fade = ADJUST [Яркость / Контраст / Фаде]: - .adjust-brightness-0-100 = ADJUST яркость 0-100: - .adjust-contrast-0-100 = ADJUST Контраст 0-100: - .adjust-fade-0-100 = ADJUST выцветание 0-100: - .adjust-select-raster-image-s-first = ADJUST: сначала выберите растровое изображение(и). - .adjust-value-must-be-0-100 = ADJUST: значение должно быть 0-100. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__ = __ocs_fmt_1__ на __ocs_fmt_2__ изображении(ах). .annoallvisible-new-value-0-1 = ANNOALLVISIBLE новое значение [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: введите 0 или 1. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE новое значение [-4..4]: @@ -4779,7 +4783,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Подложка __ocs_fmt_0__: fade=__ocs_fmt_1__, contrast=__ocs_fmt_2__, on=__ocs_fmt_3__, clip=__ocs_fmt_4__, mono=__ocs_fmt_5__ .updated-changed-underlay-s = Обновлено __ocs_fmt_0__ underlay(s). - .usage-adjust-brightness-contrast-fade-0-100 = Использование: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Использование: ANNOSCALE e.g. 1:50, 2:1, or a factor .usage-draworder-f-front-b-back-a-above-handle = Использование: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Использование: HYPERLINK (select objects first) diff --git a/locales/tr-TR/opencadstudio.ftl b/locales/tr-TR/opencadstudio.ftl index 83e54cc6a..17997d814 100644 --- a/locales/tr-TR/opencadstudio.ftl +++ b/locales/tr-TR/opencadstudio.ftl @@ -1067,7 +1067,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE: Left, Top veya Right girin. .isodraft-expected-on-or-off = ISODRAFT: On veya Off girin. .xdata-selected-entities-are-on-locked-layers = XDATA: seçilen nesneler kilitli katmanlarda. - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST: raster görüntü seçilmedi veya özellik bilinmiyor (BRIGHTNESS/CONTRAST/FADE kullanın). .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE: -4 ile 4 arasında bir tamsayı girin. .usage-datalink-path-to-csv = Kullanım: DATALINK <.csv-dosya-yolu> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE: bağlantılı tablo bulunamadı. @@ -3884,6 +3883,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Görüntüleri seçin: + .adjust-select-image-or-underlay = Görüntü veya altlık seçin: + .adjust-select-pdf-underlay = PDF altlığı seçin: + .adjust-select-dwf-underlay = DWF altlığı seçin: + .adjust-select-dgn-underlay = DGN altlığı seçin: + .adjust-mixed-underlays = *Geçersiz seçim kümesi. Yalnız aynı dosya türündeki altlık nesnelerini seçin.* + .adjust-image-option = Görüntü seçeneğini girin [Karşıtlık/Solukluk/Parlaklık] : + .adjust-underlay-option = __ocs_arg_kind__ altlık seçeneğini girin [Solukluk/Karşıtlık/Tek Renkli] <__ocs_arg_option__>: + .adjust-monochrome = Tek Renkli? [Evet/Hayır] <__ocs_arg_value__>: + .adjust-brightness-value = Parlaklık değerini girin (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = Karşıtlık değerini girin (0-100) <__ocs_arg_value__>: + .adjust-fade-value = Solukluk değerini girin (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = Değer 0 ile 100 arasında bir tam sayı olmalıdır. .transparency-mode-on = Saydamlık modunu girin [ON/OFF] : .transparency-mode-off = Saydamlık modunu girin [ON/OFF] : .xref-attach-menu = Attach... @@ -4597,13 +4608,6 @@ view = .x-no-xdata = __ocs_fmt_0__: xdata yok. .value-3d-orbit = 3B Yörünge .value-3d-orbit-drag-with-right-mouse-button = 3B Yörünge: sağ fare düğmesiyle sürükleyin. - .adjust-brightness-contrast-fade = ADJUST [Parlaklık / Karşıtlık / Solma]: - .adjust-brightness-0-100 = ADJUST Parlaklık 0-100: - .adjust-contrast-0-100 = ADJUST Karşıtlık 0-100: - .adjust-fade-0-100 = ADJUST Solma 0-100: - .adjust-select-raster-image-s-first = ADJUST: önce raster görüntüleri seçin. - .adjust-value-must-be-0-100 = ADJUST: değer 0 ile 100 arasında olmalıdır. - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_2__ görüntüde __ocs_fmt_0__ = __ocs_fmt_1__ olarak değiştirildi. .annoallvisible-new-value-0-1 = ANNOALLVISIBLE Yeni değer [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: 0 veya 1 girin. .annoautoscale-new-value-4-4 = ANNOAUTOSCALE Yeni değer [-4..4]: @@ -4723,7 +4727,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__ = __ocs_fmt_1__ .underlay-x-fade-contrast-on-clip-mono = Altlık __ocs_fmt_0__: solukluk=__ocs_fmt_1__, karşıtlık=__ocs_fmt_2__, açık=__ocs_fmt_3__, kırp=__ocs_fmt_4__, tek renk=__ocs_fmt_5__ .updated-changed-underlay-s = __ocs_fmt_0__ altlık güncellendi. - .usage-adjust-brightness-contrast-fade-0-100 = Kullanım: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = Kullanım: ANNOSCALE ör. 1:50, 2:1 veya bir katsayı .usage-draworder-f-front-b-back-a-above-handle = Kullanım: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = Kullanım: HYPERLINK (önce nesneleri seçin) diff --git a/locales/zh-CN/opencadstudio.ftl b/locales/zh-CN/opencadstudio.ftl index 373580f22..17cc09674 100644 --- a/locales/zh-CN/opencadstudio.ftl +++ b/locales/zh-CN/opencadstudio.ftl @@ -1068,7 +1068,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE:请输入 Left、Top 或 Right。 .isodraft-expected-on-or-off = ISODRAFT:请输入 On 或 Off。 .xdata-selected-entities-are-on-locked-layers = XDATA:选定实体位于锁定的图层上。 - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST:未选择光栅图像或属性未知(使用 BRIGHTNESS/CONTRAST/FADE)。 .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE:请输入 -4 到 4 之间的整数。 .usage-datalink-path-to-csv = 用法:DATALINK <.csv文件路径> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE:未找到链接表格。 @@ -3901,6 +3900,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = 选择图像或参考底图: + .adjust-select-pdf-underlay = 选择 PDF 参考底图: + .adjust-select-dwf-underlay = 选择 DWF 参考底图: + .adjust-select-dgn-underlay = 选择 DGN 参考底图: + .adjust-mixed-underlays = *选择集无效。请仅选择相同文件类型的参考底图。* + .adjust-image-option = 输入图像选项 [对比度/变暗/亮度] <亮度>: + .adjust-underlay-option = 输入 __ocs_arg_kind__ 参考底图选项 [变暗/对比度/单色] <__ocs_arg_option__>: + .adjust-monochrome = 单色? [是/否] <__ocs_arg_value__>: + .adjust-brightness-value = 输入亮度值 (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = 输入对比度值 (0-100) <__ocs_arg_value__>: + .adjust-fade-value = 输入变暗值 (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = 值必须是介于 0 和 100 之间的整数。 .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4629,13 +4640,6 @@ view = .x-no-xdata = __ocs_fmt_0__:无xdata. .value-3d-orbit = 三维动态观察 .value-3d-orbit-drag-with-right-mouse-button = 三维轨道:用鼠标右键拖动. - .adjust-brightness-contrast-fade = ADJUST [光亮/对比/淡: - .adjust-brightness-0-100 = ADJUST 亮度 0-100 : - .adjust-contrast-0-100 = ADJUST 对比 0-100 : - .adjust-fade-0-100 = ADJUST 淡出 0- 100 : - .adjust-select-raster-image-s-first = ADJUST:先选择光栅图像。 - .adjust-value-must-be-0-100 = ADJUST:值必须是0-100。 - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__= __ocs_fmt_1__在__ocs_fmt_2__图像上。 .annoallvisible-new-value-0-1 = ANNOALLVISIBLE 新值 [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: 输入 0 或 1 。 .annoautoscale-new-value-4-4 = ANNOAUTOSCALE 新值 [-4..4]: @@ -4761,7 +4765,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__=__ocs_fmt_1__(简体中文) .underlay-x-fade-contrast-on-clip-mono = 内饰 __ocs_fmt_0__: 淡出=( 淡出=)__ocs_fmt_1__,对比=__ocs_fmt_2__打开=__ocs_fmt_3__,夹=__ocs_fmt_4__单数=__ocs_fmt_5__ .updated-changed-underlay-s = 已更新 __ocs_fmt_0__ 内置 。 - .usage-adjust-brightness-contrast-fade-0-100 = 用法: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = 用法: ANNOSCALE e.g. 1:50, 2:1, or a factor .usage-draworder-f-front-b-back-a-above-handle = 用法: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = 用法: HYPERLINK (select objects first) diff --git a/locales/zh-TW/opencadstudio.ftl b/locales/zh-TW/opencadstudio.ftl index fe9ae1a53..aa43a1d97 100644 --- a/locales/zh-TW/opencadstudio.ftl +++ b/locales/zh-TW/opencadstudio.ftl @@ -1080,7 +1080,6 @@ common = .isoplane-expected-left-top-or-right = ISOPLANE:請輸入 Left、Top 或 Right。 .isodraft-expected-on-or-off = ISODRAFT:請輸入 On 或 Off。 .xdata-selected-entities-are-on-locked-layers = XDATA:選取的實體位於鎖定的圖層上。 - .adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade = ADJUST:未選取點陣影像或屬性不明(使用 BRIGHTNESS/CONTRAST/FADE)。 .annoautoscale-enter-an-integer-from-4-through-4 = ANNOAUTOSCALE:請輸入 -4 到 4 之間的整數。 .usage-datalink-path-to-csv = 用法:DATALINK <.csv檔案路徑> .datalinkupdate-no-linked-tables-found = DATALINKUPDATE:找不到連結的表格。 @@ -3913,6 +3912,18 @@ insert = .xref-attach-dwg = Attach DWG .xref-attach-image = Attach Image .select-images = Select image(s): + .adjust-select-image-or-underlay = 選取影像或參考底圖: + .adjust-select-pdf-underlay = 選取 PDF 參考底圖: + .adjust-select-dwf-underlay = 選取 DWF 參考底圖: + .adjust-select-dgn-underlay = 選取 DGN 參考底圖: + .adjust-mixed-underlays = *選取集無效。請只選取相同檔案類型的參考底圖。* + .adjust-image-option = 輸入影像選項 [對比度/變暗/亮度] <亮度>: + .adjust-underlay-option = 輸入 __ocs_arg_kind__ 參考底圖選項 [變暗/對比度/單色] <__ocs_arg_option__>: + .adjust-monochrome = 單色? [是/否] <__ocs_arg_value__>: + .adjust-brightness-value = 輸入亮度值 (0-100) <__ocs_arg_value__>: + .adjust-contrast-value = 輸入對比度值 (0-100) <__ocs_arg_value__>: + .adjust-fade-value = 輸入變暗值 (0-100) <__ocs_arg_value__>: + .adjust-value-integer-0-100 = 值必須是介於 0 和 100 之間的整數。 .transparency-mode-on = Enter transparency mode [ON/OFF] : .transparency-mode-off = Enter transparency mode [ON/OFF] : .xref-attach-menu = Attach... @@ -4641,13 +4652,6 @@ view = .x-no-xdata = __ocs_fmt_0__:無xdata. .value-3d-orbit = 三維動態觀察 .value-3d-orbit-drag-with-right-mouse-button = 三維軌道:用滑鼠右鍵拖動. - .adjust-brightness-contrast-fade = ADJUST [光亮/對比/淡: - .adjust-brightness-0-100 = ADJUST 亮度 0-100 : - .adjust-contrast-0-100 = ADJUST 對比 0-100 : - .adjust-fade-0-100 = ADJUST 淡出 0- 100 : - .adjust-select-raster-image-s-first = ADJUST:先選擇光柵圖像。 - .adjust-value-must-be-0-100 = ADJUST:值必須是0-100。 - .adjust-action-v-on-changed-image-s = ADJUST: __ocs_fmt_0__= __ocs_fmt_1__在__ocs_fmt_2__圖像上。 .annoallvisible-new-value-0-1 = ANNOALLVISIBLE 新值 [0/1]: .annoallvisible-enter-0-or-1 = ANNOALLVISIBLE: 輸入 0 或 1 。 .annoautoscale-new-value-4-4 = ANNOAUTOSCALE 新值 [-4..4]: @@ -4773,7 +4777,6 @@ view = .userr-n-val = USERR__ocs_fmt_0__=__ocs_fmt_1__(簡體中文) .underlay-x-fade-contrast-on-clip-mono = 內飾 __ocs_fmt_0__: 淡出=( 淡出=)__ocs_fmt_1__,對比=__ocs_fmt_2__開啟=__ocs_fmt_3__,夾=__ocs_fmt_4__單數=__ocs_fmt_5__ .updated-changed-underlay-s = 已更新 __ocs_fmt_0__ 內置 。 - .usage-adjust-brightness-contrast-fade-0-100 = 用法: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> .usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor = 用法: ANNOSCALE e.g. 1:50, 2:1, or a factor .usage-draworder-f-front-b-back-a-above-handle = 用法: DRAWORDER F|FRONT | B|BACK | A|ABOVE | U|UNDER .usage-hyperlink-url-select-objects-first = 用法: HYPERLINK (select objects first) diff --git a/src/app/command_driver/utilities.rs b/src/app/command_driver/utilities.rs index 720c9153c..38e35314d 100644 --- a/src/app/command_driver/utilities.rs +++ b/src/app/command_driver/utilities.rs @@ -507,6 +507,32 @@ impl OpenCADStudio { StepInput::SelectionComplete(kept) } + /// Keeps only the kinds of object the active command takes, dropping + /// the rest of a completed selection silently. + fn filter_command_entity_selection(&mut self, input: StepInput) -> StepInput { + let StepInput::SelectionComplete(handles) = input else { + return input; + }; + let i = self.active_tab; + let Some(keep) = self.tabs[i] + .active_cmd + .as_ref() + .and_then(|command| command.selection_entity_filter()) + else { + return StepInput::SelectionComplete(handles); + }; + let (kept, dropped): (Vec, Vec) = handles + .into_iter() + .partition(|h| self.tabs[i].scene.document.get_entity(*h).is_some_and(keep)); + for handle in &dropped { + self.tabs[i].scene.deselect_entity(*handle); + } + if !dropped.is_empty() { + self.refresh_properties(); + } + StepInput::SelectionComplete(kept) + } + /// Drops locked point clouds from a completed selection when the active /// command would move them, saying which were locked and how many went. fn filter_locked_point_cloud_selection(&mut self, input: StepInput) -> StepInput { @@ -562,6 +588,7 @@ impl OpenCADStudio { let input = self.filter_associative_dimension_selection(input); let input = self.filter_block_reference_selection(input); let input = self.filter_locked_point_cloud_selection(input); + let input = self.filter_command_entity_selection(input); // XCLIP / CLIP learn which chosen references carry a clip already. { let i = self.active_tab; diff --git a/src/app/commands/display.rs b/src/app/commands/display.rs index c48af2cbf..587f52d30 100644 --- a/src/app/commands/display.rs +++ b/src/app/commands/display.rs @@ -1381,101 +1381,120 @@ impl OpenCADStudio { return Some(Task::none()); } - // ADJUST — set brightness / contrast / fade on selected raster images - // ADJUST BRIGHTNESS|CONTRAST|FADE <0-100> - "ADJUST" => { - use crate::command::SelectThenKeywordCommand; - let has_sel = !self.tabs[i].scene.selected_entities().is_empty(); - let c = SelectThenKeywordCommand::new( - "ADJUST", - "ADJUST [Brightness / Contrast / Fade]:", - vec![ - ( - "Brightness", - "BRIGHTNESS", - Some("ADJUST brightness 0-100:"), - ), - ("Contrast", "CONTRAST", Some("ADJUST contrast 0-100:")), - ("Fade", "FADE", Some("ADJUST fade 0-100:")), - ], - has_sel, - ); - self.command_line.push_info(&c.prompt()); - self.tabs[i].active_cmd = Some(Box::new(c)); - } - cmd if cmd.starts_with("ADJUST ") => { - let rest = cmd.trim_start_matches("ADJUST").trim(); - let parts: Vec<&str> = rest.splitn(2, char::is_whitespace).collect(); - let action = parts.first().map(|s| s.to_uppercase()).unwrap_or_default(); - let arg = parts.get(1).copied().unwrap_or("").trim(); - let handles: Vec = self.tabs[i] + // ADJUST / -IMAGEADJUST / PDFADJUST / DWFADJUST / DGNADJUST: + // chosen images or underlays (pickfirst first), then the option + // and the value. + "ADJUST" | "-IMAGEADJUST" | "PDFADJUST" | "DWFADJUST" | "DGNADJUST" => { + let mode = match cmd { + "-IMAGEADJUST" => "I", + "PDFADJUST" => "P", + "DWFADJUST" => "W", + "DGNADJUST" => "G", + _ => "A", + }; + let keep = crate::modules::insert::xadjust::keeps(mode); + let chosen: Vec = self.tabs[i] .scene .selected_entities() - .iter() - .map(|(h, _)| *h) - .filter(|handle| !self.tabs[i].scene.is_layer_locked(*handle)) + .into_iter() + .filter(|(_, e)| keep(e)) + .map(|(h, _)| h) .collect(); - if handles.is_empty() { - self.command_line - .push_error(crate::t!("ADJUST: select raster image(s) first.").as_ref()); - } else if action.is_empty() { - self.command_line.push_info( - crate::t!("Usage: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100>").as_ref(), - ); - } else if let Ok(v) = arg.parse::() { - let v = v.min(100); - self.push_undo_snapshot(i, "ADJUST"); - let mut changed = 0usize; - let mut changed_handles = Vec::new(); - for h in &handles { - if let Some(codec::EntityType::RasterImage(img)) = self.tabs[i] - .scene - .document - .entities_mut() - .find(|e| e.common().handle == *h) - { - match action.as_str() { - "BRIGHTNESS" => { - img.brightness = v; - changed += 1; - changed_handles.push(*h); - } - "CONTRAST" => { - img.contrast = v; - changed += 1; - changed_handles.push(*h); - } - "FADE" => { - img.fade = v; - changed += 1; - changed_handles.push(*h); - } - _ => {} - } - } - } - if changed > 0 { - self.tabs[i].dirty = true; - for &handle in &changed_handles { - self.tabs[i].scene.reseed_derived_caches(handle); - } - let changes: Vec<_> = changed_handles - .into_iter() - .map(|handle| (handle, crate::scene::ChangeKind::Modified)) - .collect(); - self.tabs[i].scene.bump_entities(&changes); - self.command_line.push_output( - crate::tf!("ADJUST: {action} = {v} on {changed} image(s).").as_ref(), - ); - } else { - self.command_line.push_error( - crate::t!("ADJUST: no raster images selected, or unknown property (use BRIGHTNESS|CONTRAST|FADE).").as_ref(), - ); - } - } else { - self.command_line - .push_error(crate::t!("ADJUST: value must be 0-100.").as_ref()); + if !chosen.is_empty() { + self.tabs[i] + .scene + .replace_selection(chosen.into_iter().collect()); + return Some(self.dispatch_command(&format!("_ADJUSTSEL {mode}"))); } + self.start_adjust_selection(i, cmd, mode); + } + // The gathered objects: one kind at a time, then the option. + c if c.starts_with("_ADJUSTSEL ") => { + use crate::command::CadCommand; + use crate::modules::insert::xadjust::{self, AdjustCommand}; + let mode = c["_ADJUSTSEL ".len()..].trim().to_string(); + let keep = xadjust::keeps(&mode); + let name = xadjust::command_name(&mode); + let objects: Vec<(codec::Handle, codec::EntityType)> = self.tabs[i] + .scene + .selected_entities() + .into_iter() + .filter(|(h, e)| keep(e) && !self.tabs[i].scene.is_layer_locked(*h)) + .map(|(h, e)| (h, e.clone())) + .collect(); + match AdjustCommand::for_objects(&objects) { + None => {} + Some(Err(message)) => { + self.command_line.push_error(crate::t!(message).as_ref()); + self.start_adjust_selection(i, name, &mode); + } + Some(Ok(command)) => { + self.command_line.push_info(&command.prompt()); + self.command_line.set_step_options(command.options()); + self.tabs[i].active_cmd = Some(Box::new(command)); + } + } + // Repeating runs the command, not this step. + return Some(self.finish_dispatch(name)); + } + // `_ADJUSTAPPLY ` + // writes the value to every listed image or underlay, one undo step. + c if c.starts_with("_ADJUSTAPPLY ") => { + let mut parts = c.split_whitespace().skip(1); + let prop = parts.next().unwrap_or("").to_string(); + let value: u8 = parts.next().and_then(|v| v.parse().ok()).unwrap_or(0); + let handles: Vec = parts + .filter_map(|h| u64::from_str_radix(h, 16).ok()) + .map(codec::Handle::new) + .collect(); + self.push_undo_snapshot(i, "ADJUST"); + let mut changed = Vec::new(); + for h in &handles { + let done = match self.tabs[i].scene.document.get_entity_mut(*h) { + Some(codec::EntityType::RasterImage(img)) => match prop.as_str() { + "BRIGHTNESS" => { + img.brightness = value; + true + } + "CONTRAST" => { + img.contrast = value; + true + } + "FADE" => { + img.fade = value; + true + } + _ => false, + }, + Some(codec::EntityType::Underlay(u)) => match prop.as_str() { + "CONTRAST" => { + u.set_contrast(value); + true + } + "FADE" => { + u.set_fade(value); + true + } + "MONOCHROME" => { + u.set_monochrome(value != 0); + true + } + _ => false, + }, + _ => false, + }; + if done { + self.tabs[i].scene.reseed_derived_caches(*h); + changed.push((*h, crate::scene::ChangeKind::Modified)); + } + } + if !changed.is_empty() { + self.tabs[i].scene.bump_entities(&changed); + self.tabs[i].dirty = true; + } + // The command used the set up; nothing stays chosen. + self.tabs[i].scene.deselect_all(); + self.refresh_properties(); } // ANNOSCALE / CANNOSCALE — set the current annotation scale @@ -2206,6 +2225,26 @@ pub(crate) fn table_to_csv(table: &codec::entities::Table) -> String { .join("\r\n") } +impl OpenCADStudio { + /// The ADJUST family's object prompt, keeping only the kinds `mode` + /// takes (see `xadjust::keeps`). + fn start_adjust_selection(&mut self, i: usize, name: &str, mode: &str) { + use crate::command::CadCommand; + use crate::modules::insert::xadjust; + self.tabs[i].scene.deselect_all(); + self.refresh_properties(); + let command = crate::modules::draw::select::SelectObjectsCommand::filtered( + name, + &format!("_ADJUSTSEL {mode}"), + xadjust::select_prompt(mode), + xadjust::keeps(mode), + ); + self.command_line.push_info(&command.prompt()); + self.command_line.set_step_options(command.options()); + self.tabs[i].active_cmd = Some(Box::new(command)); + } +} + #[cfg(test)] mod tests { use crate::app::OpenCADStudio; diff --git a/src/app/update/command.rs b/src/app/update/command.rs index 7e2c909dd..6ec4fbbd2 100644 --- a/src/app/update/command.rs +++ b/src/app/update/command.rs @@ -3809,7 +3809,9 @@ impl OpenCADStudio { return Task::none(); } } - if field.starts_with("ul_") { + if field.starts_with("ul_") + || matches!(field, "ri_bright" | "ri_contrast" | "ri_fade") + { if let Err(message) = crate::entities::underlay::validate_property(field, &val) { self.command_line.push_error(message); diff --git a/src/command.rs b/src/command.rs index adb883d84..4c8faa590 100644 --- a/src/command.rs +++ b/src/command.rs @@ -2960,6 +2960,12 @@ pub trait CadCommand: Send { false } + /// The kinds of object the command takes (ADJUST): the host drops the + /// rest of each completed selection without a word. + fn selection_entity_filter(&self) -> Option bool> { + None + } + /// The command takes block references only (XCLIP): the host drops the /// rest and says how many were ineligible. fn selection_keeps_block_references(&self) -> bool { diff --git a/src/entities/raster_image.rs b/src/entities/raster_image.rs index 23b90ddd3..e560a841f 100644 --- a/src/entities/raster_image.rs +++ b/src/entities/raster_image.rs @@ -333,7 +333,20 @@ impl PropertyEditable for RasterImage { .contains(codec::entities::ImageDisplayFlags::USE_CLIPPING_BOUNDARY); let clip_inverted = self.clip_boundary.clip_mode == codec::entities::ClipMode::Inside; let transparency = self.common.transparency.to_string(); + let whole = |label: &str, field: &'static str, value: u8| Property { + label: t!(label).into_owned(), + field, + value: PropValue::EditText(value.to_string()), + }; vec![ + PropSection { + title: t!("Image Adjust").into_owned(), + props: vec![ + whole("Brightness", "ri_bright", self.brightness), + whole("Contrast", "ri_contrast", self.contrast), + whole("Fade", "ri_fade", self.fade), + ], + }, PropSection { title: t!("Geometry").into_owned(), props: vec![ @@ -362,13 +375,6 @@ impl PropertyEditable for RasterImage { title: t!("Misc").into_owned(), props: vec![ ro(t!("Name").as_ref(), "ri_name", self.file_name().to_string()), - edit( - t!("Brightness").as_ref(), - "ri_bright", - self.brightness as f64, - ), - edit(t!("Contrast").as_ref(), "ri_contrast", self.contrast as f64), - edit(t!("Fade").as_ref(), "ri_fade", self.fade as f64), ro(t!("Transparency").as_ref(), "ri_transparency", transparency), Property { label: t!("Show image").into_owned(), @@ -449,9 +455,10 @@ impl PropertyEditable for RasterImage { "ri_ox" => self.insertion_point.x = v, "ri_oy" => self.insertion_point.y = v, "ri_oz" => self.insertion_point.z = v, - "ri_bright" => self.brightness = v.clamp(0.0, 100.0) as u8, - "ri_contrast" => self.contrast = v.clamp(0.0, 100.0) as u8, - "ri_fade" => self.fade = v.clamp(0.0, 100.0) as u8, + // Out-of-range values are refused before they get here. + "ri_bright" if (0.0..=100.0).contains(&v) => self.brightness = v as u8, + "ri_contrast" if (0.0..=100.0).contains(&v) => self.contrast = v as u8, + "ri_fade" if (0.0..=100.0).contains(&v) => self.fade = v as u8, _ => {} } } diff --git a/src/entities/underlay.rs b/src/entities/underlay.rs index 9aa7cc3fb..ba40632f6 100644 --- a/src/entities/underlay.rs +++ b/src/entities/underlay.rs @@ -227,7 +227,8 @@ fn parse_flag(value: &str, current: bool) -> bool { pub(crate) fn validate_property(field: &str, value: &str) -> Result<(), &'static str> { let number = || value.trim().parse::().ok(); match field { - "ul_contrast" | "ul_fade" => match number() { + // A raster image's Image Adjust rows take the same range. + "ul_contrast" | "ul_fade" | "ri_bright" | "ri_contrast" | "ri_fade" => match number() { Some(v) if (0.0..=100.0).contains(&v) && v.fract() == 0.0 => Ok(()), _ => Err("Value must be an integer between 0 and 100"), }, diff --git a/src/locale_catalog.rs b/src/locale_catalog.rs index 62719b52e..63c1d00d9 100644 --- a/src/locale_catalog.rs +++ b/src/locale_catalog.rs @@ -557,13 +557,6 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static "ACI:" => Some(("styles", "aci")), "ADDSELECTED: creating a new {kind} is not supported." => Some(("inquiry", "addselected-creating-a-new-kind-is-not-support")), "ADDSELECTED: selected object not found." => Some(("inquiry", "addselected-selected-object-not-found")), - "ADJUST [Brightness / Contrast / Fade]:" => Some(("view", "adjust-brightness-contrast-fade")), - "ADJUST brightness 0-100:" => Some(("view", "adjust-brightness-0-100")), - "ADJUST contrast 0-100:" => Some(("view", "adjust-contrast-0-100")), - "ADJUST fade 0-100:" => Some(("view", "adjust-fade-0-100")), - "ADJUST: select raster image(s) first." => Some(("view", "adjust-select-raster-image-s-first")), - "ADJUST: value must be 0-100." => Some(("view", "adjust-value-must-be-0-100")), - "ADJUST: {action} = {v} on {changed} image(s)." => Some(("view", "adjust-action-v-on-changed-image-s")), "ALIGN Scale objects based on alignment points? [Y/N]:" => Some(("modify", "align-scale-objects-based-on-alignment-points")), "ALIGN Select objects (%{count} selected, Enter when done):" => Some(("modify", "align-select-objects-count-selected-enter-when")), "ALIGN Specify 1st destination point:" => Some(("modify", "align-specify-1st-destination-point")), @@ -3487,7 +3480,6 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static "Updated {changed} underlay(s)." => Some(("view", "updated-changed-underlay-s")), "Upper" => Some(("annotate", "upper")), "Upside down" => Some(("common", "upside-down")), - "Usage: ADJUST BRIGHTNESS|CONTRAST|FADE <0-100>" => Some(("view", "usage-adjust-brightness-contrast-fade-0-100")), "Usage: ANNOSCALE e.g. 1:50, 2:1, or a factor" => Some(("view", "usage-annoscale-ratio-e-g-1-50-2-1-or-a-factor")), "Usage: ATTDISP ON | OFF | NORMAL" => Some(("draw", "usage-attdisp-on-off-normal")), "Usage: ATTSYNC . Blocks: {}" => Some(("insert", "usage-attsync-block-name-blocks")), @@ -3748,6 +3740,18 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static "Attach DWG" => Some(("insert", "xref-attach-dwg")), "Attach Image" => Some(("insert", "xref-attach-image")), "Select image(s):" => Some(("insert", "select-images")), + "Select image or underlay:" => Some(("insert", "adjust-select-image-or-underlay")), + "Select PDF underlay:" => Some(("insert", "adjust-select-pdf-underlay")), + "Select DWF underlay:" => Some(("insert", "adjust-select-dwf-underlay")), + "Select DGN underlay:" => Some(("insert", "adjust-select-dgn-underlay")), + "*Invalid selection set. Select underlay objects of the same file type only.*" => Some(("insert", "adjust-mixed-underlays")), + "Enter image option [Contrast/Fade/Brightness] :" => Some(("insert", "adjust-image-option")), + "Enter %{kind} underlay option [Fade/Contrast/Monochrome] <%{option}>:" => Some(("insert", "adjust-underlay-option")), + "Monochrome? [Yes/No] <%{value}>:" => Some(("insert", "adjust-monochrome")), + "Enter brightness value (0-100) <%{value}>:" => Some(("insert", "adjust-brightness-value")), + "Enter contrast value (0-100) <%{value}>:" => Some(("insert", "adjust-contrast-value")), + "Enter fade value (0-100) <%{value}>:" => Some(("insert", "adjust-fade-value")), + "Value must be an integer between 0 and 100." => Some(("insert", "adjust-value-integer-0-100")), "Enter transparency mode [ON/OFF] :" => Some(("insert", "transparency-mode-on")), "Enter transparency mode [ON/OFF] :" => Some(("insert", "transparency-mode-off")), "Attach..." => Some(("insert", "xref-attach-menu")), @@ -4127,7 +4131,6 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static "ISOPLANE: expected Left, Top, or Right." => Some(("common", "isoplane-expected-left-top-or-right")), "ISODRAFT: expected On or Off." => Some(("common", "isodraft-expected-on-or-off")), "XDATA: selected entities are on locked layers." => Some(("common", "xdata-selected-entities-are-on-locked-layers")), - "ADJUST: no raster images selected, or unknown property (use BRIGHTNESS|CONTRAST|FADE)." => Some(("common", "adjust-no-raster-images-selected-or-unknown-property-use-brightness-contrast-fade")), "ANNOAUTOSCALE: enter an integer from -4 through 4." => Some(("common", "annoautoscale-enter-an-integer-from-4-through-4")), "Usage: DATALINK " => Some(("common", "usage-datalink-path-to-csv")), "DATALINKUPDATE: no linked tables found." => Some(("common", "datalinkupdate-no-linked-tables-found")), diff --git a/src/modules/draw/select.rs b/src/modules/draw/select.rs index f434bfeeb..f7a4339ca 100644 --- a/src/modules/draw/select.rs +++ b/src/modules/draw/select.rs @@ -41,6 +41,9 @@ pub struct SelectObjectsCommand { /// The command works on associative dimensions only; the host drops /// everything else from each completed selection. associative_dimensions_only: bool, + /// The kinds of object the command takes; the host drops the rest of + /// each completed selection silently, and Enter on nothing ends quietly. + keep: Option bool>, } impl SelectObjectsCommand { @@ -57,6 +60,7 @@ impl SelectObjectsCommand { auto_constrain_settings: false, prompt_text: None, associative_dimensions_only: false, + keep: None, } } @@ -74,6 +78,7 @@ impl SelectObjectsCommand { auto_constrain_settings: false, prompt_text: None, associative_dimensions_only: false, + keep: None, } } @@ -91,6 +96,7 @@ impl SelectObjectsCommand { auto_constrain_settings: false, prompt_text: None, associative_dimensions_only: false, + keep: None, } } @@ -108,6 +114,7 @@ impl SelectObjectsCommand { auto_constrain_settings: false, prompt_text: None, associative_dimensions_only: false, + keep: None, } } @@ -131,6 +138,18 @@ impl SelectObjectsCommand { command } + /// The command's own wording, keeping only what `keep` accepts. + pub fn filtered( + prompt_cmd: &str, + pending_cmd: &str, + prompt_text: &'static str, + keep: fn(&codec::EntityType) -> bool, + ) -> Self { + let mut command = Self::with_prompt(prompt_cmd, pending_cmd, prompt_text); + command.keep = Some(keep); + command + } + pub fn auto_constrain(pending_cmd: &str) -> Self { let mut command = Self::new(pending_cmd); command.auto_constrain_settings = true; @@ -203,6 +222,10 @@ impl CadCommand for SelectObjectsCommand { self.associative_dimensions_only } + fn selection_entity_filter(&self) -> Option bool> { + self.keep + } + fn selection_drops_locked_point_clouds(&self) -> bool { matches!( self.pending_cmd.as_str(), @@ -320,6 +343,9 @@ impl CadCommand for SelectObjectsCommand { } return CmdResult::NeedPoint; } + if self.keep.is_some() && self.handles.is_empty() { + return CmdResult::Relaunch(std::mem::take(&mut self.pending_cmd), Vec::new()); + } if !self.commit_on_enter || self.handles.is_empty() { return CmdResult::Cancel; } diff --git a/src/modules/insert/mod.rs b/src/modules/insert/mod.rs index 19b88737b..bad3a68d8 100644 --- a/src/modules/insert/mod.rs +++ b/src/modules/insert/mod.rs @@ -26,7 +26,7 @@ mod snap_underlays; pub(crate) mod solid3d_cmds; mod underlay_layers; pub(crate) mod wblock; -mod xadjust; +pub(crate) mod xadjust; pub(crate) mod xattach; pub(crate) mod xclip; pub(crate) mod xref_cmd; diff --git a/src/modules/insert/xadjust.rs b/src/modules/insert/xadjust.rs index 92e72fb57..096f934a9 100644 --- a/src/modules/insert/xadjust.rs +++ b/src/modules/insert/xadjust.rs @@ -1,4 +1,30 @@ +// ADJUST / -IMAGEADJUST / PDFADJUST / DWFADJUST / DGNADJUST — brightness, +// contrast and fade of raster images; fade, contrast and monochrome of +// PDF, DWF and DGN underlays. +// +// Select image or underlay: +// Enter image option [Contrast/Fade/Brightness] : +// Enter brightness value (0-100) <50>: +// +// Enter PDF underlay option [Fade/Contrast/Monochrome] : +// Enter fade value (0-100) <25>: +// Monochrome? [Yes/No] : +// +// An image value prompt offers the first image's own value. The underlay +// option and the fade / contrast values offered are the last ones used in +// the session, whatever the underlay kind. The host applies the value to +// every chosen object as one undo step. + +use std::sync::Mutex; + +use codec::entities::{UnderlayDisplayFlags, UnderlayType}; +use codec::types::Handle; +use codec::EntityType; + +use crate::command::{CadCommand, CmdOption, CmdResult, InputKind}; use crate::modules::{IconKind, ModuleEvent, ToolDef}; +use crate::t; + pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/xadjust.svg")); pub fn tool() -> ToolDef { ToolDef { @@ -8,3 +34,330 @@ pub fn tool() -> ToolDef { event: ModuleEvent::Command("ADJUST".to_string()), } } + +/// What a command takes: `A` images or underlays, `I` images, `P` / `W` / +/// `G` PDF / DWF / DGN underlays. +pub fn keeps(mode: &str) -> fn(&EntityType) -> bool { + fn any(e: &EntityType) -> bool { + matches!(e, EntityType::RasterImage(_) | EntityType::Underlay(_)) + } + fn image(e: &EntityType) -> bool { + matches!(e, EntityType::RasterImage(_)) + } + fn pdf(e: &EntityType) -> bool { + matches!(e, EntityType::Underlay(u) if u.underlay_type == UnderlayType::Pdf) + } + fn dwf(e: &EntityType) -> bool { + matches!(e, EntityType::Underlay(u) if u.underlay_type == UnderlayType::Dwf) + } + fn dgn(e: &EntityType) -> bool { + matches!(e, EntityType::Underlay(u) if u.underlay_type == UnderlayType::Dgn) + } + match mode { + "I" => image, + "P" => pdf, + "W" => dwf, + "G" => dgn, + _ => any, + } +} + +/// The command each mode belongs to. +pub fn command_name(mode: &str) -> &'static str { + match mode { + "I" => "-IMAGEADJUST", + "P" => "PDFADJUST", + "W" => "DWFADJUST", + "G" => "DGNADJUST", + _ => "ADJUST", + } +} + +/// The selection prompt of each command. +pub fn select_prompt(mode: &str) -> &'static str { + match mode { + "I" => "Select image(s):", + "P" => "Select PDF underlay:", + "W" => "Select DWF underlay:", + "G" => "Select DGN underlay:", + _ => "Select image or underlay:", + } +} + +#[derive(Clone, Copy, PartialEq)] +enum Prop { + Brightness, + Contrast, + Fade, + Monochrome, +} + +impl Prop { + fn label(self) -> &'static str { + match self { + Prop::Brightness => "Brightness", + Prop::Contrast => "Contrast", + Prop::Fade => "Fade", + Prop::Monochrome => "Monochrome", + } + } + fn key(self) -> &'static str { + match self { + Prop::Brightness => "BRIGHTNESS", + Prop::Contrast => "CONTRAST", + Prop::Fade => "FADE", + Prop::Monochrome => "MONOCHROME", + } + } +} + +const IMAGE_OPTIONS: [Prop; 3] = [Prop::Contrast, Prop::Fade, Prop::Brightness]; +const UNDERLAY_OPTIONS: [Prop; 3] = [Prop::Fade, Prop::Contrast, Prop::Monochrome]; + +/// The underlay option, fade and contrast last used in the session. +static LAST_UNDERLAY: Mutex<(usize, u8, u8)> = Mutex::new((0, 25, 75)); + +fn last_underlay() -> (usize, u8, u8) { + LAST_UNDERLAY.lock().map(|v| *v).unwrap_or((0, 25, 75)) +} + +enum Subject { + Image { + brightness: u8, + contrast: u8, + fade: u8, + }, + Underlay { + kind: &'static str, + monochrome: bool, + }, +} + +pub struct AdjustCommand { + handles: Vec, + subject: Subject, + prop: Option, +} + +/// Why a chosen set cannot be adjusted together. +pub const MIXED: &str = + "*Invalid selection set. Select underlay objects of the same file type only.*"; + +impl AdjustCommand { + /// The command for the chosen objects (the first one supplies the image + /// values and the monochrome state), or the reason they do not go + /// together. `None` when nothing adjustable was chosen. + pub fn for_objects(objects: &[(Handle, EntityType)]) -> Option> { + let (_, first) = objects.first()?; + let kind = |e: &EntityType| match e { + EntityType::Underlay(u) => Some(u.underlay_type), + _ => None, + }; + if objects.iter().any(|(_, e)| kind(e) != kind(first)) { + return Some(Err(MIXED)); + } + let subject = match first { + EntityType::RasterImage(img) => Subject::Image { + brightness: img.brightness, + contrast: img.contrast, + fade: img.fade, + }, + EntityType::Underlay(u) => Subject::Underlay { + kind: match u.underlay_type { + UnderlayType::Pdf => "PDF", + UnderlayType::Dwf => "DWF", + UnderlayType::Dgn => "DGN", + }, + monochrome: u.flags.contains(UnderlayDisplayFlags::MONOCHROME), + }, + _ => return None, + }; + Some(Ok(Self { + handles: objects.iter().map(|(h, _)| *h).collect(), + subject, + prop: None, + })) + } + + fn options_list(&self) -> &'static [Prop; 3] { + match self.subject { + Subject::Image { .. } => &IMAGE_OPTIONS, + Subject::Underlay { .. } => &UNDERLAY_OPTIONS, + } + } + + fn default_option(&self) -> Prop { + match self.subject { + Subject::Image { .. } => Prop::Brightness, + Subject::Underlay { .. } => UNDERLAY_OPTIONS[last_underlay().0.min(2)], + } + } + + fn default_value(&self, prop: Prop) -> u8 { + match (&self.subject, prop) { + (Subject::Image { brightness, .. }, Prop::Brightness) => *brightness, + (Subject::Image { contrast, .. }, Prop::Contrast) => *contrast, + (Subject::Image { fade, .. }, _) => *fade, + (Subject::Underlay { .. }, Prop::Contrast) => last_underlay().2, + (Subject::Underlay { .. }, _) => last_underlay().1, + } + } + + fn apply(&self, prop: Prop, value: u8) -> CmdResult { + if let Subject::Underlay { .. } = self.subject { + if let Ok(mut last) = LAST_UNDERLAY.lock() { + last.0 = UNDERLAY_OPTIONS.iter().position(|p| *p == prop).unwrap_or(0); + match prop { + Prop::Fade => last.1 = value, + Prop::Contrast => last.2 = value, + _ => {} + } + } + } + let handles: Vec = self + .handles + .iter() + .map(|h| format!("{:X}", h.value())) + .collect(); + CmdResult::Dispatch(format!( + "_ADJUSTAPPLY {} {} {}", + prop.key(), + value, + handles.join(" ") + )) + } +} + +/// Whether `text` names `label` (its key letter or a longer prefix, in +/// English or in the interface language). +fn names(text: &str, label: &str) -> bool { + let english = label.to_uppercase(); + let local = t!(label).to_uppercase(); + !text.is_empty() && (english.starts_with(text) || local.starts_with(text)) +} + +impl CadCommand for AdjustCommand { + fn name(&self) -> &'static str { + "ADJUST" + } + + fn prompt(&self) -> String { + match (self.prop, &self.subject) { + (None, Subject::Image { .. }) => { + t!("Enter image option [Contrast/Fade/Brightness] :").into_owned() + } + (None, Subject::Underlay { kind, .. }) => t!( + "Enter %{kind} underlay option [Fade/Contrast/Monochrome] <%{option}>:", + kind = kind, + option = t!(self.default_option().label()) + ) + .into_owned(), + (Some(Prop::Monochrome), Subject::Underlay { monochrome, .. }) => t!( + "Monochrome? [Yes/No] <%{value}>:", + value = if *monochrome { t!("Yes") } else { t!("No") } + ) + .into_owned(), + (Some(Prop::Brightness), _) => t!( + "Enter brightness value (0-100) <%{value}>:", + value = self.default_value(Prop::Brightness) + ) + .into_owned(), + (Some(Prop::Contrast), _) => t!( + "Enter contrast value (0-100) <%{value}>:", + value = self.default_value(Prop::Contrast) + ) + .into_owned(), + (Some(_), _) => t!( + "Enter fade value (0-100) <%{value}>:", + value = self.default_value(Prop::Fade) + ) + .into_owned(), + } + } + + fn options(&self) -> Vec { + match self.prop { + None => self + .options_list() + .iter() + .map(|p| CmdOption::new(p.label(), &p.label()[..1])) + .collect(), + Some(Prop::Monochrome) => vec![CmdOption::new("Yes", "Y"), CmdOption::new("No", "N")], + Some(_) => Vec::new(), + } + } + + fn input_kind(&self) -> InputKind { + InputKind::SingleToken + } + + fn on_text_input(&mut self, text: &str) -> Option { + let text = text.trim().to_uppercase(); + let invalid = || { + Some(CmdResult::ReportError( + t!("Invalid option keyword.").into_owned(), + )) + }; + match self.prop { + None => { + let chosen = if text.is_empty() { + Some(self.default_option()) + } else { + self.options_list() + .iter() + .copied() + .find(|p| names(&text, p.label())) + }; + let Some(prop) = chosen else { + return invalid(); + }; + self.prop = Some(prop); + Some(CmdResult::NeedPoint) + } + Some(Prop::Monochrome) => { + let Subject::Underlay { monochrome, .. } = self.subject else { + return Some(CmdResult::Cancel); + }; + let on = if text.is_empty() { + monochrome + } else if names(&text, "Yes") { + true + } else if names(&text, "No") { + false + } else { + return invalid(); + }; + Some(self.apply(Prop::Monochrome, on as u8)) + } + Some(prop) => { + let value = if text.is_empty() { + Some(self.default_value(prop)) + } else { + text.parse::().ok().filter(|v| *v <= 100) + }; + match (value, &self.subject) { + (Some(v), _) => Some(self.apply(prop, v)), + (None, Subject::Image { .. }) => Some(CmdResult::ReportError( + t!("Value must be an integer between 0 and 100.").into_owned(), + )), + (None, Subject::Underlay { .. }) => Some(CmdResult::ReportError( + crate::tf!("Requires an integer between {min} and {max}.", min = 0, max = 100) + .into_owned(), + )), + } + } + } + } + + fn on_point(&mut self, _pt: glam::DVec3) -> CmdResult { + CmdResult::NeedPoint + } + + fn on_enter(&mut self) -> CmdResult { + self.on_text_input("").unwrap_or(CmdResult::Cancel) + } +} + +inventory::submit!(crate::command::CommandRegistration { + names: &["-IMAGEADJUST", "PDFADJUST", "DWFADJUST", "DGNADJUST"] +}); From 8743f6a1999c143d04df77ffec5be3514c65ab3f Mon Sep 17 00:00:00 2001 From: ramox81 <184937705+ramox81@users.noreply.github.com> Date: Tue, 13 Oct 2026 17:02:11 +0300 Subject: [PATCH 2/2] Raster images: draw with their brightness and contrast Co-Authored-By: Claude Opus 5.5 --- src/scene/model/image_model.rs | 63 +++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/src/scene/model/image_model.rs b/src/scene/model/image_model.rs index 8bb860278..1195420fa 100644 --- a/src/scene/model/image_model.rs +++ b/src/scene/model/image_model.rs @@ -252,7 +252,7 @@ impl ImageModel { Some(Self { render_instance: None, file_path: img.file_path.clone(), - pixels: decoded.pixels, + pixels: adjusted_image_pixels(&img.file_path, &decoded.pixels, img.brightness, img.contrast), width: decoded.width, height: decoded.height, opacity, @@ -659,6 +659,67 @@ pub fn clear_image_cache() { /// The result — including a `None` — is cached so the raster loader and the /// unresolved-reference placeholder agree on one answer without fetching /// twice. +/// Brightness and contrast (0–100, 50 = unchanged) as one lookup table per +/// colour channel. Measured against the reference's display of a gradient: +/// brightness is a power curve x^g with g = ((100 − B) / B)^0.72 (0 is black, +/// 100 white); contrast bends lightness around one half the same way, +/// 0.5 ± 0.5·|2x − 1|^h with h = ((100 − C) / C)^0.72 (0 is flat grey, 100 a +/// hard step). Brightness is applied first. Fade is the model's opacity. +pub(crate) fn brightness_contrast_lut(brightness: u8, contrast: u8) -> [u8; 256] { + // ponytail: the 0.72 exponent is a least-squares fit of seven measured + // levels (within about 10/255); refine with more reference samples. + let curve = |v: u8| -> f64 { (f64::from(100 - v.min(100)) / f64::from(v.min(100).max(1))).powf(0.72) }; + let mut lut = [0u8; 256]; + for (i, out) in lut.iter_mut().enumerate() { + let mut x = i as f64 / 255.0; + x = match brightness.min(100) { + 0 => 0.0, + 100 => if i == 0 { 0.0 } else { 1.0 }, + b => x.powf(curve(b)), + }; + x = match contrast.min(100) { + 0 => 0.5, + 100 => if x >= 0.5 { 1.0 } else { 0.0 }, + c => { + let d = 2.0 * x - 1.0; + 0.5 + 0.5 * d.signum() * d.abs().powf(curve(c)) + } + }; + *out = (x.clamp(0.0, 1.0) * 255.0).round() as u8; + } + lut +} + +/// The decoded raster with the entity's brightness and contrast applied, +/// memoised per source and setting (the GPU keeps textures per pixel buffer). +fn adjusted_image_pixels(path: &str, pixels: &Arc>, brightness: u8, contrast: u8) -> Arc> { + if brightness == 50 && contrast == 50 { + return Arc::clone(pixels); + } + type Key = (String, usize, u8, u8); + static CACHE: OnceLock>>>> = OnceLock::new(); + let key = (path.to_string(), Arc::as_ptr(pixels) as usize, brightness, contrast); + let cache = CACHE.get_or_init(|| Mutex::new(HashMap::new())); + if let Some(hit) = cache.lock().unwrap_or_else(|p| p.into_inner()).get(&key) { + return Arc::clone(hit); + } + let lut = brightness_contrast_lut(brightness, contrast); + let mut out = pixels.as_ref().clone(); + for px in out.chunks_exact_mut(4) { + for c in &mut px[..3] { + *c = lut[*c as usize]; + } + } + let out = Arc::new(out); + let mut cache = cache.lock().unwrap_or_else(|p| p.into_inner()); + // ponytail: cleared wholesale past 64 entries; an LRU if many images are adjusted. + if cache.len() > 64 { + cache.clear(); + } + cache.insert(key, Arc::clone(&out)); + out +} + pub fn resolve_image(path: &str) -> Option { let path = path.trim(); if path.is_empty() {