From e75f6b36479cf88163bd58931f28385625b7846c Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sat, 20 Mar 2021 12:09:34 -0400 Subject: [PATCH 01/89] Add Turkish translation by mhalil (Mustafa Halil). --- res/CMakeLists.txt | 1 + res/locales.txt | 1 + res/locales/tr_TR.po | 2192 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2194 insertions(+) create mode 100644 res/locales/tr_TR.po diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt index 9152488d..5b7c45d1 100644 --- a/res/CMakeLists.txt +++ b/res/CMakeLists.txt @@ -257,6 +257,7 @@ add_resources( locales/en_US.po locales/fr_FR.po locales/uk_UA.po + locales/tr_TR.po locales/ru_RU.po locales/zh_CN.po fonts/unifont.hex.gz diff --git a/res/locales.txt b/res/locales.txt index 0f4fab16..daedc309 100644 --- a/res/locales.txt +++ b/res/locales.txt @@ -4,5 +4,6 @@ de-DE,0407,Deutsch en-US,0409,English (US) fr-FR,040C,Français ru-RU,0419,Русский +tr-TR,041F,Türkçe uk-UA,0422,Українська zh-CN,0804,简体中文 diff --git a/res/locales/tr_TR.po b/res/locales/tr_TR.po new file mode 100644 index 00000000..9e46b0dd --- /dev/null +++ b/res/locales/tr_TR.po @@ -0,0 +1,2192 @@ +# Turkish translations for SolveSpace package. +# Copyright (C) 2017 the SolveSpace authors +# This file is distributed under the same license as the SolveSpace package. +# Automatically generated, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.0\n" +"Report-Msgid-Bugs-To: whitequark@whitequark.org\n" +"POT-Creation-Date: 2021-02-01 15:45+0200\n" +"PO-Revision-Date: 2021-03-09 22:58+0300\n" +"Last-Translator: Mustafa Halil GÖRENTAŞ \n" +"Language-Team: app4soft\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.4.2\n" +"X-Poedit-SourceCharset: UTF-8\n" + +#: clipboard.cpp:310 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"İşi yalnızca bir çalışma düzleminde kesin, yapıştır ve kopyalayın.\n" +"\n" +"Çizim -> Çalışma Düzleminde menüsü ile bir düzlemi etkinleştirin." + +#: clipboard.cpp:327 +msgid "Clipboard is empty; nothing to paste." +msgstr "Pano boş; yapıştırılacak bir şey yok." + +#: clipboard.cpp:374 +msgid "Number of copies to paste must be at least one." +msgstr "Yapıştırılacak kopya sayısı en az bir olmalıdır." + +#: clipboard.cpp:390 textscreens.cpp:783 +msgid "Scale cannot be zero." +msgstr "Ölçek sıfır olamaz." + +#: clipboard.cpp:432 +msgid "Select one point to define origin of rotation." +msgstr "Dönüşün başlangıç noktasını tanımlamak için bir nokta seçin." + +#: clipboard.cpp:444 +msgid "Select two points to define translation vector." +msgstr "Öteleme vektörünü tanımlamak için iki nokta seçin." + +#: clipboard.cpp:454 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "Dönüşüm özdeştir. Yani tüm kopyalar tam olarak üst üste gelecek." + +#: clipboard.cpp:458 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "Yapıştırılamayacak kadar çok öğe; bunu daha küçük yapıştımalara bölün." + +#: clipboard.cpp:463 +msgid "No workplane active." +msgstr "Etkin Çalışma Düzlemi yok." + +#: confscreen.cpp:418 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Hatalı biçim: koordinatları x, y, z olarak belirtin" + +#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +msgid "Bad format: specify color as r, g, b" +msgstr "Hatalı biçim: rengi r, g, b olarak belirtin" + +#: confscreen.cpp:454 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"Görünüm -> Perspektif Projeksiyonu Kullan'ı etkinleştirene kadar perspektif " +"çarpanının hiçbir etkisi olmayacaktır." + +#: confscreen.cpp:467 confscreen.cpp:477 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "Ondalık basamak sonra 0 ile %d arasında basamak belirtin." + +#: confscreen.cpp:489 +msgid "Export scale must not be zero!" +msgstr "Dışa aktarma ölçeği sıfır olmamalıdır!" + +#: confscreen.cpp:501 +msgid "Cutter radius offset must not be negative!" +msgstr "Kesici yarıçap ofseti negatif olmamalıdır!" + +#: confscreen.cpp:555 +msgid "Bad value: autosave interval should be positive" +msgstr "Hatalı değer: otomatik kaydetme süresi pozitif olmalıdır" + +#: confscreen.cpp:558 +msgid "Bad format: specify interval in integral minutes" +msgstr "Hatalı biçim: süre aralığını dakika cinsinden belirtin" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "nktlar-kesişen" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "nkt-nkt-mesafe" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "nkt-çizgi-mesafesi" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "nkt-düzlem-mesafesi" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "nkt-yüzey-mesafesi" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "proj-nkt-nkt-mesafesi" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "düzlemde-nkt" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "nkt-çizgide" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "yüzeyde-nkt" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "eş-uzunluk" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "eş-uzunluk-ve-çzg-nkt-mesafesi" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "eş-nkt-çizgi-mesafesi" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "uzunluk-oranı" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "length-difference" +msgstr "uzunluk-farkı" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "symmetric" +msgstr "simetrik" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "simetrik-y" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "simetrik-d" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "simetrik-çizgi" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "orta noktada" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "horizontal" +msgstr "yatay" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "vertical" +msgstr "dikey" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "diameter" +msgstr "çap" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "nkt-çemberde" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "aynı-yön" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "angle" +msgstr "açı" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "parallel" +msgstr "paralel" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "yay-çizgi-teğet" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "kubik-çizgi-teğet" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "eğri-eğri-teğet" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "dik" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "eş-yarıçap" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "eş-açı" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "eş-çizgi-uzn-yay-uzn" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "sürüklendiği-yerde-kilitli" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "comment" +msgstr "yorum" + +#: constraint.cpp:140 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"Teğet, yay ve çizgi parçası bir uç noktayı paylaşmalıdır. Teğeti " +"sınırlandırmadan önce bunları Sınırlandır -> Noktada ile sınırlandırın." + +#: constraint.cpp:158 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"Teğet kübik ve çizgi parçası bir uç noktayı paylaşmalıdır. Teğeti " +"sınırlandırmadan önce onları Sınırlandır -> Noktada ile sınırlandırın." + +#: constraint.cpp:183 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Eğriler bir uç noktayı paylaşmalıdır. Teğeti sınırlandırmadan önce onları " +"Sınırlandır -> Noktada ile sınırlandırın." + +#: constraint.cpp:231 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"Mesafe / çap sınırlandırması için hatalı seçim. Bu sınırlandırma şunlara " +"uygulanabilir:\n" +"\n" +" * iki nokta (noktalar arasındaki mesafe)\n" +" * bir çizgi parçası (uzunluk)\n" +" * iki nokta ve bir çizgi parçası veya normal (öngörülen mesafe)\n" +" * bir çalışma düzlemi ve bir nokta (minimum mesafe)\n" +" * bir çizgi parçası ve bir nokta (minimum mesafe)\n" +" * bir düzlem yüzeyi ve bir nokta (minimum mesafe)\n" +" * bir daire veya yay (çap)\n" + +#: constraint.cpp:284 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and a plane face (point on face)\n" +msgstr "" +"Nokta / eğri / düzlem sınırlandırması için hatalı seçim. Bu sınırlandırma " +"şunlara uygulanabilir:\n" +"\n" +" * iki nokta (çakışan noktalar)\n" +" * bir nokta ve bir çalışma düzlemi (düzlemdeki nokta)\n" +" * bir nokta ve bir çizgi parçası (çizgi üzerinde nokta)\n" +" * bir nokta ve bir daire veya yay (eğri üzerinde nokta)\n" +" * bir nokta ve bir düzlem yüzeyi (yüzeyin üzerine gelin)\n" + +#: constraint.cpp:346 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +" * two circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"Eşit uzunluk / yarıçap sınırlandırması için hatalı seçim. Bu sınırlandırma " +"şunlara uygulanabilir:\n" +"\n" +" * iki çizgi parçası (eşit uzunluk)\n" +" * iki çizgi parçası ve iki nokta (eşit nokta-çizgi mesafeleri)\n" +" * bir çizgi parçası ve iki nokta (eşit nokta-çizgi mesafeleri)\n" +" * bir çizgi parçası ve bir nokta ve çizgi parçası (nokta-çizgi mesafesi " +"uzunluğa eşittir)\n" +" * dört çizgi parçası veya normal (A, B ve C, D arasında eşit açı)\n" +" * üç çizgi parçası veya normal (A, B ve B, C arasında eşit açı)\n" +" * iki daire veya yay (eşit yarıçap)\n" +" * bir çizgi parçası ve bir yay (çizgi parçası uzunluğu yay uzunluğuna " +"eşittir)\n" + +#: constraint.cpp:385 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +msgstr "" +"Uzunluk oranı sınırlandırması için hatalı seçim. Bu sınırlandırma şunlara " +"uygulanabilir:\n" +"\n" +" * iki çizgi parçası\n" + +#: constraint.cpp:402 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +msgstr "" +"Uzunluk farkı sınırlandırması için hatalı seçim. Bu sınırlandırma şunlara " +"uygulanabilir:\n" +"\n" +" * iki çizgi parçası\n" + +#: constraint.cpp:428 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"Orta nokta sınırlandırması için hatalı seçim. Bu sınırlandırma şunlara " +"uygulanabilir:\n" +"\n" +" * bir çizgi parçası ve bir nokta (orta noktayı işaret edin)\n" +" * bir çizgi parçası ve bir çalışma düzlemi (düzlemdeki çizginin orta " +"noktası)\n" + +#: constraint.cpp:486 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Simetrik sınırlandırması için hatalı seçim. Bu sınırlandırma şunlara " +"uygulanabilir:\n" +"\n" +" * iki nokta veya bir çizgi parçası (çalışma düzleminin koordinat ekseni " +"etrafında simetrik)\n" +" * çizgi parçası ve iki nokta veya bir çizgi parçası (çizgi parçası " +"etrafında simetrik)\n" +" * çalışma düzlemi ve iki nokta veya bir çizgi parçası (çalışma düzlemi " +"etrafında simetrik)\n" + +#: constraint.cpp:500 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"Açık bir simetri düzlemi olmadan simetriyi sınırlandırırken bir çalışma " +"düzlemi etkin olmalıdır." + +#: constraint.cpp:530 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"Yatay veya dikey bir sınırlandırma uygulamadan önce bir çalışma düzlemini " +"(Çizim -> Çalışma Düzleminde menüsü) etkinleştirin." + +#: constraint.cpp:543 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two points\n" +" * a line segment\n" +msgstr "" +"Yatay / dikey sınırlandırma için hatalı seçim. Bu sınırlandırma şunlara " +"uygulanabilir:\n" +"\n" +" * iki nokta\n" +" * bir çizgi parçası\n" + +#: constraint.cpp:564 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"Aynı yön sınırlandırması için hatalı seçim. Bu sınırlandırma şunlara " +"uygulanabilir:\n" +"\n" +" * iki normal\n" + +#: constraint.cpp:614 +msgid "Must select an angle constraint." +msgstr "Bir açı sınırlaması seçilmelidir." + +#: constraint.cpp:627 +msgid "Must select a constraint with associated label." +msgstr "İlişkili etikete sahip bir sınırlama seçilmelidir." + +#: constraint.cpp:638 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Açı sınırlaması için hatalı seçim. Bu sınırlandırma şunlara uygulanabilir:\n" +"\n" +" * iki çizgi parçası\n" +" * bir çizgi parçası ve normal\n" +" * iki normal\n" + +#: constraint.cpp:701 +msgid "Curve-curve tangency must apply in workplane." +msgstr "Eğri-eğri teğetliği çalışma düzlemine uygulanmalıdır." + +#: constraint.cpp:711 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments (parallel)\n" +" * a line segment and a normal (parallel)\n" +" * two normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"Paralel / teğet sınırlaması için hatalı seçim. Bu sınırlandırma şunlara " +"uygulanabilir:\n" +"\n" +" * iki çizgi parçası (paralel)\n" +" * bir çizgi parçası ve normal (paralel)\n" +" * iki normal (paralel)\n" +" * bir uç noktayı paylaşan(teğet) iki çizgi parçası, yay veya " +"bezier'ler\n" + +#: constraint.cpp:729 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Dikey sınırlama için hatalı seçim. Bu sınırlandırma şunlara uygulanabilir:\n" +"\n" +" * iki çizgi parçası\n" +" * bir çizgi parçası ve normal\n" +" * iki normal\n" + +#: constraint.cpp:744 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"Sürüklendiği yerde noktayı sınırlandırmak için hatalı seçim. Bu " +"sınırlandırma şunlara uygulanabilir:\n" +"\n" +"* bir nokta\n" + +#: constraint.cpp:755 +msgid "click center of comment text" +msgstr "yorum metninin merkezine tıklayın" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"Katı model yok; katılama ve döndürme komutları ile bir model çizin veya açık " +"çizgileri ve eğrileri dışa vermek için Görüntüyü 2d olarak Dışa Aktar'ı " +"kullanın." + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"Kesiti Dışa Aktarmak için hatalı seçim. Lütfen şunlardan birini seçin:\n" +"\n" +" * aktif bir çalışma düzleminde iken hiçbir şey seçmeyin (çalışma " +"düzlemi, kesit düzlemidir)\n" +" * bir yüzey (yüzeyden kesit düzlemi)\n" +" * bir nokta ve iki çizgi parçası (nokta boyunca düzlem ve çizgilere " +"paralel)\n" + +#: export.cpp:822 +msgid "Active group mesh is empty; nothing to export." +msgstr "Etkin Mesh grubu boş; dışa aktarılacak bir şey yok." + +#: exportvector.cpp:337 +msgid "freehand lines were replaced with continuous lines" +msgstr "serbest çizgiler, sürekli çizgilerle değiştirildi" + +#: exportvector.cpp:339 +msgid "zigzag lines were replaced with continuous lines" +msgstr "zikzak çizgiler sürekli çizgilerle değiştirildi" + +#: exportvector.cpp:593 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "Çizimin bazı yönlerinin DXF eşdeğeri yoktur ve dışa aktarılmamıştır:\n" + +#: exportvector.cpp:839 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"PDF sayfa boyutu 200 x 200 inç'i aşıyor; birçok görüntüleyici bu dosyayı " +"reddedebilir." + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "düzlemde çizim" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "#referanslar" + +#: file.cpp:552 +msgid "The file is empty. It may be corrupt." +msgstr "Dosya boş. Bozuk olabilir." + +#: file.cpp:557 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Dosyada veriler tanınmadı. Bu dosya bozuk veya programın daha yeni bir " +"sürümü ile oluşturulmuş olabilir." + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "Eksik Dosya" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "\"%s\" bağlantılı dosya yok." + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" +"Yerini manuel olarak mı bulmak istiyorsunuz?\n" +"\n" +"Reddederseniz, eksik dosyaya bağlı olan geometri kalıcı olarak " +"kaldırılacaktır." + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "&Evet" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "&Hayır" + +#: file.cpp:877 solvespace.cpp:569 +msgctxt "button" +msgid "&Cancel" +msgstr "&İptal" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "&Dosya" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "&Yeni" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "&Aç..." + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "&Son Erişilenden Aç" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Kaydet" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "&Farklı kaydet..." + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "&Resim olarak dışa aktar..." + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "&Görüntüyü 2d olarak dışa aktar..." + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "&Kesiti 2d olarak dışa aktar..." + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "3d &TelKafes olarak dışa aktar..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "&Üçgensel Mesh olarak dışa aktar..." + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Y&üzeyleri dışa aktar..." + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "&İçe Aktar..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "&Çıkış" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "D&üzen" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Geri al" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Yinele" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Tümünü Yeniden &Oluştur" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Seçimi &Izgaraya Tuttur" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "İçe Aktarılanları &90° Döndür" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "&Kes" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "K&opyala" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "Y&apıştır" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "&Dönüştürerek Yapıştır..." + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Sil" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Kenar &Zincirini Seçin" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "&Tümünü Seç" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "Tüm Seçimi &Kaldır" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "&Çizgi Biçimi..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&Projeksiyonu Görüntüle..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "Y&apılandır..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&Görünüm" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "&Yakınlaş" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "&Uzaklaş" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr "&Sığacak Şekilde Yakınlaş" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Görünümü &Çalışma Düzlemine Hizala" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "En Yakın &Orto Görünüm" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "En Yakın &İzometrik Görünüm" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Noktayı Merkezde Görüntüle" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "&Izgarayı Göster" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Aktif Olmayan Katıları &Koyulaştır" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "&Perspektif Projeksiyonu Kullanın" + +#: graphicswin.cpp:97 +msgid "Dimension &Units" +msgstr "Ölçü &Birimleri" + +#: graphicswin.cpp:98 +msgid "Dimensions in &Millimeters" +msgstr "&Milimetre cinsinden ölçü" + +#: graphicswin.cpp:99 +msgid "Dimensions in M&eters" +msgstr "M&etre cinsinden ölçü" + +#: graphicswin.cpp:100 +msgid "Dimensions in &Inches" +msgstr "&İnç cinsinden ölçü" + +#: graphicswin.cpp:102 +msgid "Show &Toolbar" +msgstr "&Araç Çubuğunu Göster" + +#: graphicswin.cpp:103 +msgid "Show Property Bro&wser" +msgstr "&Özellik Tarayıcısını Göster" + +#: graphicswin.cpp:105 +msgid "&Full Screen" +msgstr "&Tam Ekran" + +#: graphicswin.cpp:107 +msgid "&New Group" +msgstr "Yeni &Grup" + +#: graphicswin.cpp:108 +msgid "Sketch In &3d" +msgstr "&3d'de Çizim Yap" + +#: graphicswin.cpp:109 +msgid "Sketch In New &Workplane" +msgstr "&Yeni Çalışma Düzleminde Çizim Yap" + +#: graphicswin.cpp:111 +msgid "Step &Translating" +msgstr "Adım &Ötele" + +#: graphicswin.cpp:112 +msgid "Step &Rotating" +msgstr "Adım &Döndür" + +#: graphicswin.cpp:114 +msgid "E&xtrude" +msgstr "&Katıla" + +#: graphicswin.cpp:115 +msgid "&Helix" +msgstr "&Helis" + +#: graphicswin.cpp:116 +msgid "&Lathe" +msgstr "&Çark" + +#: graphicswin.cpp:117 +msgid "Re&volve" +msgstr "Dö&ndür" + +#: graphicswin.cpp:119 +msgid "Link / Assemble..." +msgstr "Bağla / Montajla..." + +#: graphicswin.cpp:120 +msgid "Link Recent" +msgstr "Son Erişilenden Bağla" + +#: graphicswin.cpp:122 +msgid "&Sketch" +msgstr "&Çizim" + +#: graphicswin.cpp:123 +msgid "In &Workplane" +msgstr "Ç&alışma Düzleminde" + +#: graphicswin.cpp:124 +msgid "Anywhere In &3d" +msgstr "&3d'de Herhangi Bir Yerde" + +#: graphicswin.cpp:126 +msgid "Datum &Point" +msgstr "Referasn &Noktası" + +#: graphicswin.cpp:127 +msgid "&Workplane" +msgstr "Ça&lışma Düzlemi" + +#: graphicswin.cpp:129 +msgid "Line &Segment" +msgstr "Çizgi &Parçası" + +#: graphicswin.cpp:130 +msgid "C&onstruction Line Segment" +msgstr "&Yapı Çizgisi Parçası" + +#: graphicswin.cpp:131 +msgid "&Rectangle" +msgstr "&Dikdörtgen" + +#: graphicswin.cpp:132 +msgid "&Circle" +msgstr "&Çember" + +#: graphicswin.cpp:133 +msgid "&Arc of a Circle" +msgstr "Çember &Yayı" + +#: graphicswin.cpp:134 +msgid "&Bezier Cubic Spline" +msgstr "Bezier Kübik &Eğri" + +#: graphicswin.cpp:136 +msgid "&Text in TrueType Font" +msgstr "TrueType Yazı Tipinde &Metin" + +#: graphicswin.cpp:137 +msgid "&Image" +msgstr "&Resim" + +#: graphicswin.cpp:139 +msgid "To&ggle Construction" +msgstr "Yap&ıyı Değiştir" + +#: graphicswin.cpp:140 +msgid "Tangent &Arc at Point" +msgstr "Noktada &Teğet Yay" + +#: graphicswin.cpp:141 +msgid "Split Curves at &Intersection" +msgstr "Kesişim yerinde Eğrileri &Böl" + +#: graphicswin.cpp:143 +msgid "&Constrain" +msgstr "&Sınırlandır" + +#: graphicswin.cpp:144 +msgid "&Distance / Diameter" +msgstr "&Mesafe / Çap" + +#: graphicswin.cpp:145 +msgid "Re&ference Dimension" +msgstr "&Referans Ölçü" + +#: graphicswin.cpp:146 +msgid "A&ngle" +msgstr "&Açı" + +#: graphicswin.cpp:147 +msgid "Reference An&gle" +msgstr "Referans A&çı" + +#: graphicswin.cpp:148 +msgid "Other S&upplementary Angle" +msgstr "Diğer &Bütünler Açı" + +#: graphicswin.cpp:149 +msgid "Toggle R&eference Dim" +msgstr "Ölçüyü Re&ferans Yap / Yapma" + +#: graphicswin.cpp:151 +msgid "&Horizontal" +msgstr "&Yatay" + +#: graphicswin.cpp:152 +msgid "&Vertical" +msgstr "&Dikey" + +#: graphicswin.cpp:154 +msgid "&On Point / Curve / Plane" +msgstr "&Noktada / Eğride / Düzlemde" + +#: graphicswin.cpp:155 +msgid "E&qual Length / Radius / Angle" +msgstr "&Eşit Uzunluk / Yarıçap / Açı" + +#: graphicswin.cpp:156 +msgid "Length Ra&tio" +msgstr "&Uzunluk Oranı" + +#: graphicswin.cpp:157 +msgid "Length Diff&erence" +msgstr "U&zunluk Farkı" + +#: graphicswin.cpp:158 +msgid "At &Midpoint" +msgstr "&Orta Noktada" + +#: graphicswin.cpp:159 +msgid "S&ymmetric" +msgstr "&Simetrik" + +#: graphicswin.cpp:160 +msgid "Para&llel / Tangent" +msgstr "&Paralel / Teğet" + +#: graphicswin.cpp:161 +msgid "&Perpendicular" +msgstr "D&ik" + +#: graphicswin.cpp:162 +msgid "Same Orient&ation" +msgstr "Aynı &Yön" + +#: graphicswin.cpp:163 +msgid "Lock Point Where &Dragged" +msgstr "Sürüklendiği Yerde Noktayı &Kilitle" + +#: graphicswin.cpp:165 +msgid "Comment" +msgstr "Y&orum" + +#: graphicswin.cpp:167 +msgid "&Analyze" +msgstr "&Analiz Et" + +#: graphicswin.cpp:168 +msgid "Measure &Volume" +msgstr "&Hacmi Ölçün" + +#: graphicswin.cpp:169 +msgid "Measure A&rea" +msgstr "&Alanı Ölçün" + +#: graphicswin.cpp:170 +msgid "Measure &Perimeter" +msgstr "&Çevre Uzunluğunu Ölçün" + +#: graphicswin.cpp:171 +msgid "Show &Interfering Parts" +msgstr "&Engelleyen Parçaları Göster" + +#: graphicswin.cpp:172 +msgid "Show &Naked Edges" +msgstr "A&çık Kenarları Göster" + +#: graphicswin.cpp:173 +msgid "Show &Center of Mass" +msgstr "&Kütle Merkezini Göster" + +#: graphicswin.cpp:175 +msgid "Show &Underconstrained Points" +msgstr "&Sınırlanmamış Noktaları Göster" + +#: graphicswin.cpp:177 +msgid "&Trace Point" +msgstr "&Noktayı İzle" + +#: graphicswin.cpp:178 +msgid "&Stop Tracing..." +msgstr "&İzlemeyi &Durdur..." + +#: graphicswin.cpp:179 +msgid "Step &Dimension..." +msgstr "Adım &Ölçüsü..." + +#: graphicswin.cpp:181 +msgid "&Help" +msgstr "&Yardım" + +#: graphicswin.cpp:182 +msgid "&Language" +msgstr "&Dil" + +#: graphicswin.cpp:183 +msgid "&Website / Manual" +msgstr "&Web sitesi / Kılavuz" + +#: graphicswin.cpp:185 +msgid "&About" +msgstr "&Hakkında" + +#: graphicswin.cpp:355 +msgid "(no recent files)" +msgstr "(yeni dosyalar yok)" + +#: graphicswin.cpp:363 +#, c-format +msgid "File '%s' does not exist." +msgstr "'%s' dosyası mevcut değil." + +#: graphicswin.cpp:725 +msgid "No workplane is active, so the grid will not appear." +msgstr "Etkin çalışma düzlemi yok, bu nedenle ızgara görünmeyecektir." + +#: graphicswin.cpp:740 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"Perspektif çarpanı sıfıra ayarlanmıştır, bu nedenle görünüm her zaman " +"paralel bir projeksiyon olacaktır.\n" +"\n" +"Perspektif bir projeksiyon için, konfigürasyon ekranındaki perspektif " +"çarpanını değiştirin. 0,3 civarında bir değer tipiktir." + +#: graphicswin.cpp:819 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" +"Bir nokta seçin; bu nokta ekrandaki görüntünün merkezi haline gelecektir." + +#: graphicswin.cpp:1114 +msgid "No additional entities share endpoints with the selected entities." +msgstr "Hiçbir ek öğe, seçili öğeler ile uç noktaları paylaşmaz." + +#: graphicswin.cpp:1132 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"Bu komutu kullanmak için, bağlantılı bir parçadan bir nokta veya başka bir " +"öğe seçin veya bir bağlantı grubunu etkin grup haline getirin." + +#: graphicswin.cpp:1155 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"Etkin çalışma düzlemi yok. Tutturma ızgarasının düzlemini tanımlamak için " +"bir çalışma düzlemini (Çizim -> Çalışma Düzleminde menüsü ile) etkinleştirin." + +#: graphicswin.cpp:1162 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"Bu öğeleri ızgaraya tutturamazsınız; noktaları, metin yorumlarını veya " +"sınırlamaları bir etiketle seçin. Bir çizgiyi tutturmak için uç noktalarını " +"seçin." + +#: graphicswin.cpp:1247 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" +"Çalışma düzlemi seçilmedi. Bu grup için varsayılan çalışma düzlemi " +"etkinleştiriliyor." + +#: graphicswin.cpp:1250 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"Hiçbir çalışma düzlemi seçilmemiştir ve aktif grubun varsayılan bir çalışma " +"düzlemi yoktur. Bir çalışma düzlemi seçmeyi veya yeni çalışma düzleminde " +"çizim grubunu etkinleştirmeyi deneyin." + +#: graphicswin.cpp:1271 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Noktada teğet yay oluşturmak için hatalı seçim. Tek bir nokta seçin veya yay " +"parametrelerini ayarlamak için hiçbir şey seçmeyin." + +#: graphicswin.cpp:1282 +msgid "click point on arc (draws anti-clockwise)" +msgstr "yayın ilk noktası için tıklayın (saat yönünün tersine çizilir)" + +#: graphicswin.cpp:1283 +msgid "click to place datum point" +msgstr "referans noktasını yerleştirmek için tıklayın" + +#: graphicswin.cpp:1284 +msgid "click first point of line segment" +msgstr "çizgi parçasının ilk noktası için tıklayın" + +#: graphicswin.cpp:1286 +msgid "click first point of construction line segment" +msgstr "yapı çizgisinin ilk noktası için tıklayın" + +#: graphicswin.cpp:1287 +msgid "click first point of cubic segment" +msgstr "kübik segmentin ilk noktası için tıklayın" + +#: graphicswin.cpp:1288 +msgid "click center of circle" +msgstr "çemberin merkezi için tıklayın" + +#: graphicswin.cpp:1289 +msgid "click origin of workplane" +msgstr "çalışma düzleminin merkezi için tıklayın" + +#: graphicswin.cpp:1290 +msgid "click one corner of rectangle" +msgstr "dikdörtgenin bir köşesi için tıklayın" + +#: graphicswin.cpp:1291 +msgid "click top left of text" +msgstr "metnin sol üst köşesi için tıklayın" + +#: graphicswin.cpp:1297 +msgid "click top left of image" +msgstr "resmin sol üst köşesi için tıklayın" + +#: graphicswin.cpp:1309 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"Hiçbir öğe seçilmedi. Yapı durumlarını geçiş yapmaya çalışmadan önce öğeleri " +"seçin." + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "3d-içinde-çizim" + +#: group.cpp:142 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"Çalışma düzleminde yeni taslak çizmek için hatalı seçim. Bu grup şunlarla " +"oluşturulabilir:\n" +"\n" +" * bir nokta (nokta boyunca, eksenleri koordine etmek için ortogonal)\n" +" * bir nokta ve iki çizgi parçası (noktadan, çizgilere paralel)\n" +" * bir çalışma düzlemi (çalışma düzleminin kopyası)\n" + +#: group.cpp:154 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Katılama işleminden önce bir çalışma düzlemini etkinleştirin (Çizim -> " +"Çalışma Düzleminde menüsü). Çizim, çalışma düzlemine dik olarak " +"katılanacaktır." + +#: group.cpp:163 +msgctxt "group-name" +msgid "extrude" +msgstr "katıla" + +#: group.cpp:168 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "Çark işlemi yalnızca düzlemsel çizimlere uygulanabilir." + +#: group.cpp:179 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Yeni çark grubu için hatalı seçim. Bu grup şu şekilde oluşturulabilir:\n" +"\n" +" * bir nokta ve bir çizgi parçası veya normal (çizgiye / normale paralel " +"bir eksen etrafında, nokta boyunca döndürülür )\n" +" * bir çizgi parçası (çizgi parçası etrafında döndürülür)\n" + +#: group.cpp:189 +msgctxt "group-name" +msgid "lathe" +msgstr "çark" + +#: group.cpp:194 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "Döndürme işlemi yalnızca düzlemsel çizimlere uygulanabilir." + +#: group.cpp:205 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Yeni döndürme grup için hatalı seçim. Bu grup şunlarla oluşturulabilir:\n" +"\n" +" * bir nokta ve bir çizgi parçası veya normal (çizgiye / normale paralel, " +"noktadan geçen bir eksen etrafında döndürülür)\n" +" * bir çizgi parçası (çizgi parçası etrafında döndürülür)\n" + +#: group.cpp:217 +msgctxt "group-name" +msgid "revolve" +msgstr "döndür" + +#: group.cpp:222 +msgid "Helix operation can only be applied to planar sketches." +msgstr "Helis işlemi yalnızca düzlemsel çizimlere uygulanabilir." + +#: group.cpp:233 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Yeni helis grubu için hatalı seçim. Bu grup şunlarla oluşturulabilir:\n" +"\n" +" * bir nokta ve bir çizgi parçası veya normal (çizgiye / normale paralel, " +"noktadan geçen bir eksen etrafında döndürülür)\n" +" * bir çizgi parçası (çizgi parçası etrafında döndürülür)\n" + +#: group.cpp:245 +msgctxt "group-name" +msgid "helix" +msgstr "helis" + +#: group.cpp:258 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"Yeni çevirme için hatalı seçim. Bu grup şunlarla oluşturulabilir:\n" +"\n" +" * çalışma düzleminde bir nokta, kilitli olduğu sürece (düzlemde o nokta " +"etrafında çevirin)\n" +" * bir nokta ve bir çizgi veya bir normal (nokta boyunca bir eksen " +"etrafında ve çizgiye / normale paralel çevirin)\n" + +#: group.cpp:271 +msgctxt "group-name" +msgid "rotate" +msgstr "çevir" + +#: group.cpp:282 +msgctxt "group-name" +msgid "translate" +msgstr "ötele" + +#: group.cpp:400 +msgid "(unnamed)" +msgstr "(isimsiz)" + +#: groupmesh.cpp:709 +msgid "not closed contour, or not all same style!" +msgstr "kapalı olmayan kontur veya tümü aynı biçimde değil!" + +#: groupmesh.cpp:722 +msgid "points not all coplanar!" +msgstr "noktaların hepsi aynı düzlemde değil!" + +#: groupmesh.cpp:724 +msgid "contour is self-intersecting!" +msgstr "kontur kendisiyle kesişiyor!" + +#: groupmesh.cpp:726 +msgid "zero-length edge!" +msgstr "sıfır-uzunlukta kenar!" + +#: modify.cpp:254 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "Teğet yay oluşturmak için çalışma düzleminde çizim yapılmalıdır." + +#: modify.cpp:301 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"Bir teğet yay oluşturmak için, bu gruptaki iki yapı-dışı çizginin veya " +"dairenin ve çalışma düzleminin birleştiği bir nokta seçin." + +#: modify.cpp:388 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"Bu köşe yuvarlatılamadı. Daha küçük bir yarıçap deneyin veya teğet " +"sınırlamaları ile istenen geometriyi elle oluşturmayı deneyin." + +#: modify.cpp:597 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "Bu öğeler bölünemedi; yalnızca çizgiler, çemberler veya küpler." + +#: modify.cpp:624 +msgid "Must be sketching in workplane to split." +msgstr "Bölmek için çalışma düzleminde çizim olmalı." + +#: modify.cpp:631 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "" +"Birbiriyle kesişen iki öğe seçin (örneğin iki çizgi / çember / yay veya bir " +"çizgi / çember / yay ve bir nokta)." + +#: modify.cpp:736 +msgid "Can't split; no intersection found." +msgstr "Bölünemez; kesişim bulunamadı." + +#: mouse.cpp:559 +msgid "Assign to Style" +msgstr "Biçime Ata" + +#: mouse.cpp:575 +msgid "No Style" +msgstr "Biçim Yok" + +#: mouse.cpp:578 +msgid "Newly Created Custom Style..." +msgstr "Yeni Oluşturulan Özel Biçim ..." + +#: mouse.cpp:585 +msgid "Group Info" +msgstr "Grup Bilgisi" + +#: mouse.cpp:605 +msgid "Style Info" +msgstr "Biçim Bİlgisi" + +#: mouse.cpp:625 +msgid "Select Edge Chain" +msgstr "Kenar Zinciri Seçin" + +#: mouse.cpp:631 +msgid "Toggle Reference Dimension" +msgstr "Ölçü Referansını Değiştir" + +#: mouse.cpp:637 +msgid "Other Supplementary Angle" +msgstr "Diğer Bütünler Açı" + +#: mouse.cpp:642 +msgid "Snap to Grid" +msgstr "Izgaraya Tuttur" + +#: mouse.cpp:651 +msgid "Remove Spline Point" +msgstr "Eğri Noktasını Sil" + +#: mouse.cpp:686 +msgid "Add Spline Point" +msgstr "Eğri Noktası Ekle" + +#: mouse.cpp:690 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "Eğri noktası eklenemiyor: en fazla nokta sayısına ulaşıldı." + +#: mouse.cpp:715 +msgid "Toggle Construction" +msgstr "Yapıyı değiştir" + +#: mouse.cpp:730 +msgid "Delete Point-Coincident Constraint" +msgstr "Çakışan-Nokta Sınırlamasını Sil" + +#: mouse.cpp:749 +msgid "Cut" +msgstr "Kes" + +#: mouse.cpp:751 +msgid "Copy" +msgstr "Kopyala" + +#: mouse.cpp:755 +msgid "Select All" +msgstr "Tümünü Seç" + +#: mouse.cpp:760 +msgid "Paste" +msgstr "Yapıştır" + +#: mouse.cpp:762 +msgid "Paste Transformed..." +msgstr "Dönüştürerek Yapıştır..." + +#: mouse.cpp:767 +msgid "Delete" +msgstr "Sil" + +#: mouse.cpp:770 +msgid "Unselect All" +msgstr "Tüm Seçimi Kaldır" + +#: mouse.cpp:777 +msgid "Unselect Hovered" +msgstr "Fareyle Üzerine Gelinen Seçimi Kaldır" + +#: mouse.cpp:786 +msgid "Zoom to Fit" +msgstr "Sığdırmak için Yakınlaştır" + +#: mouse.cpp:988 mouse.cpp:1275 +msgid "click next point of line, or press Esc" +msgstr "çizginin sonraki noktası için tıklayın veya Esc tuşuna basın" + +#: mouse.cpp:994 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"3d'de dikdörtgen çizilemez; önce Çizim -> Çalışma Düzleminde menüsü ile bir " +"çalışma düzlemini etkinleştirin." + +#: mouse.cpp:1028 +msgid "click to place other corner of rectangle" +msgstr "dikdörtgenin diğer köşesini yerleştirmek için tıklayın" + +#: mouse.cpp:1048 +msgid "click to set radius" +msgstr "yarıçapı ayarlamak için tıklayın" + +#: mouse.cpp:1053 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"3d'de yay çizemez; önce Çizim -> Çalışma Düzleminde menüsü ile bir çalışma " +"düzlemini etkinleştirin." + +#: mouse.cpp:1072 +msgid "click to place point" +msgstr "noktayı yerleştirmek için tıklayın" + +#: mouse.cpp:1088 +msgid "click next point of cubic, or press Esc" +msgstr "sonraki kübik noktayı tıklayın veya Esc tuşuna basın" + +#: mouse.cpp:1093 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"Zaten bir çalışma düzleminde çizim yapılıyor; 3d'de çizim yapmadan önce yeni " +"çalışma düzlemi oluşturun." + +#: mouse.cpp:1109 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"3d'de metin yazılamaz; önce Çizim -> Çalışma Düzleminde menüsü ile bir " +"çalışma düzlemini etkinleştirin." + +#: mouse.cpp:1126 +msgid "click to place bottom right of text" +msgstr "metnin sağ alt konumunu yerleştirmek için tıklayın" + +#: mouse.cpp:1132 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"3d'de resim eklenemez; önce Çizim -> Çalışma Düzleminde menüsü ile bir " +"çalışma düzlemini etkinleştirin." + +#: mouse.cpp:1159 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "YENİ YORUM - DÜZENLEMEK İÇİN ÇİFT TIKLAYIN" + +#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "SolveSpace Modelleri" + +#: platform/gui.cpp:90 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "IDF devre kartı" + +#: platform/gui.cpp:94 +msgctxt "file-type" +msgid "PNG image" +msgstr "PNG Resmi" + +#: platform/gui.cpp:98 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL mesh" + +#: platform/gui.cpp:99 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront OBJ mesh" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Görüntüleyicili, Three.js-uyumlu mesh" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js-uyumlu mesh, yalnızca mesh" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "VRML text file" +msgstr "VRML metin dosyası" + +#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +msgctxt "file-type" +msgid "STEP file" +msgstr "STEP dosyası" + +#: platform/gui.cpp:110 +msgctxt "file-type" +msgid "PDF file" +msgstr "PDF dosyası" + +#: platform/gui.cpp:111 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "Kapsüllenmiş PostScript" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "Ölçeklenebilir Vektör Grafikleri (SVG)" + +#: platform/gui.cpp:114 platform/gui.cpp:121 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "DXF dosyası (AutoCAD 2007)" + +#: platform/gui.cpp:115 +msgctxt "file-type" +msgid "HPGL file" +msgstr "HPGL dosyası" + +#: platform/gui.cpp:116 +msgctxt "file-type" +msgid "G Code" +msgstr "G Kodu" + +#: platform/gui.cpp:125 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "AutoCAD DXF ve DWG dosyaları" + +#: platform/gui.cpp:129 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "Virgülle ayrılmış değerler (CSV)" + +#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +msgid "untitled" +msgstr "isimsiz" + +#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 +#: platform/guiwin.cpp:1582 +msgctxt "title" +msgid "Save File" +msgstr "Dosyayı Kaydet" + +#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 +#: platform/guiwin.cpp:1584 +msgctxt "title" +msgid "Open File" +msgstr "Dosyayı Aç" + +#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +msgctxt "button" +msgid "_Cancel" +msgstr "_İptal" + +#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +msgctxt "button" +msgid "_Save" +msgstr "_Kaydet" + +#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +msgctxt "button" +msgid "_Open" +msgstr "_Aç" + +#: solvespace.cpp:169 +msgctxt "title" +msgid "Autosave Available" +msgstr "Otomatik Kaydetme Kullanılabilir" + +#: solvespace.cpp:170 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "Bu çizim için otomatik kaydetme dosyası kullanılabilir." + +#: solvespace.cpp:171 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "Bunun yerine otomatik kaydetme dosyasını yüklemek istiyor musunuz?" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "&Load autosave" +msgstr "&Otomatik kaydetmeyi yükle" + +#: solvespace.cpp:174 +msgctxt "button" +msgid "Do&n't Load" +msgstr "&Yükleme" + +#: solvespace.cpp:557 +msgctxt "title" +msgid "Modified File" +msgstr "Değiştirilen Dosya" + +#: solvespace.cpp:559 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "\"%s\" çiziminde yaptığınız değişiklikleri kaydetmek istiyor musunuz?" + +#: solvespace.cpp:562 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "Yeni çizimde yaptığınız değişiklikleri kaydetmek istiyor musunuz?" + +#: solvespace.cpp:565 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Bunları kaydetmezseniz değişiklikleriniz kaybolur." + +#: solvespace.cpp:566 +msgctxt "button" +msgid "&Save" +msgstr "&Kaydet" + +#: solvespace.cpp:568 +msgctxt "button" +msgid "Do&n't Save" +msgstr "K&aydetme" + +#: solvespace.cpp:589 +msgctxt "title" +msgid "(new sketch)" +msgstr "(yeni çizim)" + +#: solvespace.cpp:596 +msgctxt "title" +msgid "Property Browser" +msgstr "Özellik Tarayıcısı" + +#: solvespace.cpp:658 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"Sınırlamalar şu anda gösterilmektedir ve takım yolunda dışa aktarılacaktır. " +"Muhtemelen istediğiniz bu değil; metin penceresinin üst kısmındaki " +"bağlantıya tıklayarak bunları gizleyin." + +#: solvespace.cpp:730 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"Dosya türü '%s' dosya uzantısından tanımlanamıyor; .dxf veya .dwg'yi deneyin." + +#: solvespace.cpp:778 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "Sınırlamanın bir etiketi olmalı ve bir referans ölçüsü olmamalıdır." + +#: solvespace.cpp:782 +msgid "Bad selection for step dimension; select a constraint." +msgstr "" +"Adım ölçüsü için hatalı seçim; bir nokta boyunca, eksenleri koordine etmek " +"için ortogonal seçin." + +#: solvespace.cpp:806 +msgid "The assembly does not interfere, good." +msgstr "Montaj engel değil, iyi." + +#: solvespace.cpp:822 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"Katı modelin hacmi:\n" +"\n" +" % s" + +#: solvespace.cpp:831 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"Mevcut mesh grubunun hacmi:\n" +"\n" +" %s" + +#: solvespace.cpp:836 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"Eğri yüzeyler, üçgenler olarak yaklaştırılmıştır.\n" +"Bu, tipik olarak yaklaşık 1% hataya neden olur." + +#: solvespace.cpp:851 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Seçilen yüzlerin yüzey alanı:\n" +"\n" +" %s\n" +"\n" +"Eğriler, parçalı doğrusal olarak yaklaştırıldı.\n" +"Bu, tipik olarak yaklaşık 1%% hataya neden olur." + +#: solvespace.cpp:860 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"Bu grup, doğru biçimlendirilmiş 2d kapalı alan içermiyor. Açık, eş düzlemli " +"değil veya kendisiyle kesişiyor." + +#: solvespace.cpp:872 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Bu grupta çizilen bölgenin alanı:\n" +"\n" +" %s\n" +"\n" +"Eğriler, parçalı doğrusal olarak yaklaştırıldı.\n" +"Bu, tipik olarak yaklaşık 1%% hataya neden olur." + +#: solvespace.cpp:892 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"Seçilen öğelerin toplam uzunluğu:\n" +"\n" +" %s\n" +"\n" +"Eğriler, parçalı doğrusal olarak yaklaştırıldı.\n" +"Bu, tipik olarak yaklaşık 1%% hataya neden olur." + +#: solvespace.cpp:898 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "" +"Çevre uzunluğu için hatalı seçim; çizgi parçalarını, yayları ve eğrileri " +"seçin." + +#: solvespace.cpp:914 +msgid "Bad selection for trace; select a single point." +msgstr "İzleme için hatalı seçim; tek bir nokta seçin." + +#: solvespace.cpp:941 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "\"%s\" ye yazılamadı" + +#: solvespace.cpp:971 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "Mesh kendisiyle kesişiyor (TAMAM değil, geçersiz)." + +#: solvespace.cpp:972 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "Mesh kendi kendine kesişmiyor (tamam, geçerli)." + +#: solvespace.cpp:974 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "Mesh'in açık kenarları var (tamam DEĞİL, geçersiz)." + +#: solvespace.cpp:975 +msgid "The mesh is watertight (okay, valid)." +msgstr "Mesh çok sıkı (tamam, geçerli)" + +#: solvespace.cpp:978 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"Model, %d yüzeylerden %d üçgen içerir." + +#: solvespace.cpp:982 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Sıfır sorunlu kenar, iyi.%s" + +#: solvespace.cpp:985 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d sorunlu kenar, kötü.%s" + +#: solvespace.cpp:998 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"Bu SolveSpace'in %s sürümüdür.\n" +"\n" +"Daha fazla bilgi için, http://solvespace.com/ bkz.\n" +"\n" +"SolveSpace ücretsiz bir yazılımdır: GNU Genel Kamu \n" +"Lisansı (GPL) sürüm 3 veya daha sonraki hükümler altında \n" +"onu değiştirmekte ve / veya yeniden dağıtmakta özgürsünüz.\n" +"\n" +"Yasaların izin verdiği ölçüde GARANTİ YOKTUR. \n" +"Ayrıntılar için http://gnu.org/licenses/ adresini ziyaret edin.\n" +"\n" +"© 2008-% d Jonathan Westhues ve diğer yazarlar.\n" + +#: style.cpp:166 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"Başka bir öğeden türetilen bir öğeye biçim atayamazsınız; bu öğenin üst " +"öğesine bir biçim atamayı deneyin." + +#: style.cpp:665 +msgid "Style name cannot be empty" +msgstr "Biçim adı boş olamaz" + +#: textscreens.cpp:741 +msgid "Can't repeat fewer than 1 time." +msgstr "1 defadan az tekrar edilemez." + +#: textscreens.cpp:745 +msgid "Can't repeat more than 999 times." +msgstr "999 defadan fazla tekrar edilemez." + +#: textscreens.cpp:770 +msgid "Group name cannot be empty" +msgstr "Grup adı boş olamaz" + +#: textscreens.cpp:813 +msgid "Opacity must be between zero and one." +msgstr "Şeffaflık değeri sıfır ile bir arasında olmalıdır." + +#: textscreens.cpp:848 +msgid "Radius cannot be zero or negative." +msgstr "Yarıçap sıfır veya negatif değer olamaz." + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "Çizgi parçası ile taslak çizin" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "Dikdörtgen çizin" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "Çember çizin" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "Bir çember yayı çizin" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "TrueType yazı tipindeki metinden eğriler çizin" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "Bir dosyadan resim ekleyin" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "Seçilen noktada teğet yay oluşturun" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "Kübik Bezier Eğri Çizin" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "Referans Nokta Ekleyin" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "Yapıyı değiştirin" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "Çizgileri / eğrileri kesiştikleri yerde bölün" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "Mesafeyi / çapı / uzunluğu sınırlandırın" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "Açıyı sınırlandırın" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "Yatay olarak sınırlandırın" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "Dikey olarak sınırlandırın" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "Paralel veya teğet olarak sınırlandırın" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "Dik olarak sınırlandırın" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "Noktayı çizgi / eğri / düzlem / nokta ile çakıştırarak sınırlandırın" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "Simetrik olarak sınırlandırın" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "Eşit uzunluk / yarıçap / açı olarak sınırlandırın" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "Normalleri aynı yönde sınırlandırın" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "Diğer bütünler açı" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "Ölçüyü Referans Yap / Yapma" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "Etkin çizimi katılayarak yeni grup oluşturun" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "Etkin çizimi döndürerek yeni grup oluşturun" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "Etkin çizimden sarmal yeni grup oluştur" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "Etkin çizimi döndürülür yeni grup oluşturun" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "Adımlayarak ve tekrarlayarak yeni dönüş grup oluşturun" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "Adımlayarak ve tekrarlayarak yeni öteleme grup oluşturun" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "" +"Yeni çalışma düzleminde yeni grup oluşturun (verilen öğeler aracılığıyla)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "3d'de yeni grup oluşturun" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "Bağlantı / Montaj dosyası ile yeni grup oluşturun" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "En yakın izometrik görünüm" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "Görünümü etkin çalışma düzlemine hizalayın" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "Hata" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "Mesaj" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "&Tamam" + +#: view.cpp:78 +msgid "Scale cannot be zero or negative." +msgstr "Ölçek sıfır veya negatif olamaz." + +#: view.cpp:90 view.cpp:99 +msgid "Bad format: specify x, y, z" +msgstr "Kötü biçim: x, y, z'yi belirtin" + +#~ msgctxt "file-type" +#~ msgid "Q3D Object file" +#~ msgstr "Q3D Object file" From 39c18a70b24a47110fbd8759a5dd250fce81cc5c Mon Sep 17 00:00:00 2001 From: app4soft Date: Sat, 20 Mar 2021 23:02:00 +0200 Subject: [PATCH 02/89] Update uk_UA.po --- res/locales/uk_UA.po | 281 +++++++++++++++++++++++-------------------- 1 file changed, 149 insertions(+), 132 deletions(-) diff --git a/res/locales/uk_UA.po b/res/locales/uk_UA.po index 86ce77b4..0b09760f 100644 --- a/res/locales/uk_UA.po +++ b/res/locales/uk_UA.po @@ -1,20 +1,21 @@ # Ukrainian translations for SolveSpace package. # Copyright (C) 2017 the SolveSpace authors # This file is distributed under the same license as the SolveSpace package. -# AppSoft4 , 2017. +# app4soft , 2021. msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" -"Report-Msgid-Bugs-To: whitequark@whitequark.org\n" +"Report-Msgid-Bugs-To: https://github.com/solvespace/solvespace/issues\n" "POT-Creation-Date: 2021-02-01 15:45+0200\n" -"PO-Revision-Date: 2017-01-05 10:30+0000\n" -"Last-Translator: appsoft@ua.fm\n" -"Language-Team: OpenOrienteeringUkraine\n" +"PO-Revision-Date: 2021-03-09 23:34+0200\n" +"Last-Translator: https://github.com/Symbian9\n" +"Language-Team: app4soft\n" "Language: uk_UA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.4.2\n" #: clipboard.cpp:310 msgid "" @@ -22,26 +23,29 @@ msgid "" "\n" "Activate one with Sketch -> In Workplane." msgstr "" +"Вирізання, вставка та копіювання працює лише у площині.\n" +"\n" +"Активуйте одну через Креслення -> У площині." #: clipboard.cpp:327 msgid "Clipboard is empty; nothing to paste." -msgstr "" +msgstr "Буфер обміну порожній; немає чого вставляти." #: clipboard.cpp:374 msgid "Number of copies to paste must be at least one." -msgstr "" +msgstr "Кількість копій для вставки має бути не менше одної." #: clipboard.cpp:390 textscreens.cpp:783 msgid "Scale cannot be zero." -msgstr "" +msgstr "Масштаб не може бути нульовим." #: clipboard.cpp:432 msgid "Select one point to define origin of rotation." -msgstr "" +msgstr "Оберіть одну точку для визначення центру обертання." #: clipboard.cpp:444 msgid "Select two points to define translation vector." -msgstr "" +msgstr "Оберіть дві точки для визначення вектору розміщення." #: clipboard.cpp:454 msgid "" @@ -50,97 +54,102 @@ msgid "" msgstr "" #: clipboard.cpp:458 +#, fuzzy msgid "Too many items to paste; split this into smaller pastes." -msgstr "" +msgstr "Забагато об'єктів для вставки; рзділіть копіювання на кілька етапів." #: clipboard.cpp:463 msgid "No workplane active." -msgstr "" +msgstr "Немає активної площини." #: confscreen.cpp:418 msgid "Bad format: specify coordinates as x, y, z" -msgstr "" +msgstr "Некоректний формат: визначте координати X, Y, Z" #: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 msgid "Bad format: specify color as r, g, b" -msgstr "" +msgstr "Некоректний формат: визначте колір як R, G, B" #: confscreen.cpp:454 +#, fuzzy msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." msgstr "" +"Значення перспективи не матиме ефекту допоки не ввімкнено Вигляд -> " +"Використовувати Перспективну проєкцію." #: confscreen.cpp:467 confscreen.cpp:477 #, c-format msgid "Specify between 0 and %d digits after the decimal." -msgstr "" +msgstr "Визначте кількість десяткових знаків від 0 до %d." #: confscreen.cpp:489 msgid "Export scale must not be zero!" -msgstr "" +msgstr "Масштаб експорту не може бути нульовим!" #: confscreen.cpp:501 msgid "Cutter radius offset must not be negative!" -msgstr "" +msgstr "Радіус відступу різання не може бути від'ємним!" #: confscreen.cpp:555 msgid "Bad value: autosave interval should be positive" -msgstr "" +msgstr "Некоректне значення: інтервал автозбереження має бути додатнім" #: confscreen.cpp:558 +#, fuzzy msgid "Bad format: specify interval in integral minutes" -msgstr "" +msgstr "Некоректний формат: визначте цілим числом інтервал у хвилинах" #: constraint.cpp:12 msgctxt "constr-name" msgid "pts-coincident" -msgstr "" +msgstr "співпадіння-тчк" #: constraint.cpp:13 msgctxt "constr-name" msgid "pt-pt-distance" -msgstr "" +msgstr "відстань-тчк-тчк" #: constraint.cpp:14 msgctxt "constr-name" msgid "pt-line-distance" -msgstr "" +msgstr "відстань-тчк-лінія" #: constraint.cpp:15 msgctxt "constr-name" msgid "pt-plane-distance" -msgstr "" +msgstr "відстань-тчк-площина" #: constraint.cpp:16 msgctxt "constr-name" msgid "pt-face-distance" -msgstr "" +msgstr "відстань-тчк-грань" #: constraint.cpp:17 msgctxt "constr-name" msgid "proj-pt-pt-distance" -msgstr "" +msgstr "проєційна-відстань-тчк-тчк" #: constraint.cpp:18 msgctxt "constr-name" msgid "pt-in-plane" -msgstr "" +msgstr "тчк-у-площині" #: constraint.cpp:19 msgctxt "constr-name" msgid "pt-on-line" -msgstr "" +msgstr "тчк-на-лінії" #: constraint.cpp:20 msgctxt "constr-name" msgid "pt-on-face" -msgstr "" +msgstr "тчк-на-грані" #: constraint.cpp:21 msgctxt "constr-name" msgid "eq-length" -msgstr "" +msgstr "рівні-довжини" #: constraint.cpp:22 msgctxt "constr-name" @@ -150,62 +159,62 @@ msgstr "" #: constraint.cpp:23 msgctxt "constr-name" msgid "eq-pt-line-distances" -msgstr "" +msgstr "рівна-відстань-тчк-лінія" #: constraint.cpp:24 msgctxt "constr-name" msgid "length-ratio" -msgstr "" +msgstr "пропорція-довжин" #: constraint.cpp:25 msgctxt "constr-name" msgid "length-difference" -msgstr "" +msgstr "різниця-довжин" #: constraint.cpp:26 msgctxt "constr-name" msgid "symmetric" -msgstr "" +msgstr "симетрія" #: constraint.cpp:27 msgctxt "constr-name" msgid "symmetric-h" -msgstr "" +msgstr "симетрія-вертикально" #: constraint.cpp:28 msgctxt "constr-name" msgid "symmetric-v" -msgstr "" +msgstr "симетрія-горизонтально" #: constraint.cpp:29 msgctxt "constr-name" msgid "symmetric-line" -msgstr "" +msgstr "симетрія-відносно-лінії" #: constraint.cpp:30 msgctxt "constr-name" msgid "at-midpoint" -msgstr "" +msgstr "на-середині" #: constraint.cpp:31 msgctxt "constr-name" msgid "horizontal" -msgstr "" +msgstr "горизонталь" #: constraint.cpp:32 msgctxt "constr-name" msgid "vertical" -msgstr "" +msgstr "вертикаль" #: constraint.cpp:33 msgctxt "constr-name" msgid "diameter" -msgstr "" +msgstr "діаметр" #: constraint.cpp:34 msgctxt "constr-name" msgid "pt-on-circle" -msgstr "" +msgstr "тчк-на-колі" #: constraint.cpp:35 msgctxt "constr-name" @@ -215,57 +224,57 @@ msgstr "" #: constraint.cpp:36 msgctxt "constr-name" msgid "angle" -msgstr "" +msgstr "кут" #: constraint.cpp:37 msgctxt "constr-name" msgid "parallel" -msgstr "" +msgstr "паралель" #: constraint.cpp:38 msgctxt "constr-name" msgid "arc-line-tangent" -msgstr "" +msgstr "дотичні-дуга-лінія" #: constraint.cpp:39 msgctxt "constr-name" msgid "cubic-line-tangent" -msgstr "" +msgstr "дотичні-сплайн-лінія" #: constraint.cpp:40 msgctxt "constr-name" msgid "curve-curve-tangent" -msgstr "" +msgstr "дотичні-крива-крива" #: constraint.cpp:41 msgctxt "constr-name" msgid "perpendicular" -msgstr "" +msgstr "перпендикуляр" #: constraint.cpp:42 msgctxt "constr-name" msgid "eq-radius" -msgstr "" +msgstr "рівнозначні-радіуси" #: constraint.cpp:43 msgctxt "constr-name" msgid "eq-angle" -msgstr "" +msgstr "рівнозначні-кути" #: constraint.cpp:44 msgctxt "constr-name" msgid "eq-line-len-arc-len" -msgstr "" +msgstr "рівнозначні-лінія-дуга" #: constraint.cpp:45 msgctxt "constr-name" msgid "lock-where-dragged" -msgstr "" +msgstr "фіксоване-положення" #: constraint.cpp:46 msgctxt "constr-name" msgid "comment" -msgstr "" +msgstr "коментар" #: constraint.cpp:140 msgid "" @@ -442,7 +451,7 @@ msgstr "" #: constraint.cpp:755 msgid "click center of comment text" -msgstr "" +msgstr "клікніть в місце де буде центр коментаря" #: export.cpp:19 msgid "" @@ -485,33 +494,35 @@ msgstr "" #: file.cpp:44 group.cpp:91 msgctxt "group-name" msgid "sketch-in-plane" -msgstr "" +msgstr "креслення-в-площині" #: file.cpp:62 msgctxt "group-name" msgid "#references" -msgstr "" +msgstr "#базові-площини" #: file.cpp:552 msgid "The file is empty. It may be corrupt." -msgstr "" +msgstr "Файл порожній. Він може бути пошкодженим." #: file.cpp:557 msgid "" "Unrecognized data in file. This file may be corrupt, or from a newer version " "of the program." msgstr "" +"Нерозпізнані дані у файлі. Цей файл може бути пошкодженим або збереженим " +"новою версією програми." #: file.cpp:867 msgctxt "title" msgid "Missing File" -msgstr "" +msgstr "Втрачений Файл" #: file.cpp:868 #, c-format msgctxt "dialog" msgid "The linked file “%s” is not present." -msgstr "" +msgstr "Приєднаний файл “%s” відсутній." #: file.cpp:870 msgctxt "dialog" @@ -525,17 +536,17 @@ msgstr "" #: file.cpp:873 msgctxt "button" msgid "&Yes" -msgstr "" +msgstr "&Так" #: file.cpp:875 msgctxt "button" msgid "&No" -msgstr "" +msgstr "&Ні" #: file.cpp:877 solvespace.cpp:569 msgctxt "button" msgid "&Cancel" -msgstr "" +msgstr "&Відмінити" #: graphicswin.cpp:41 msgid "&File" @@ -635,7 +646,7 @@ msgstr "Вставити &Трансфмованим..." #: graphicswin.cpp:72 msgid "&Delete" -msgstr "&Delete" +msgstr "&Видалити" #: graphicswin.cpp:74 msgid "Select &Edge Chain" @@ -651,19 +662,19 @@ msgstr "&Зняти Виділення з Усього" #: graphicswin.cpp:78 msgid "&Line Styles..." -msgstr "" +msgstr "Стилі &Ліній..." #: graphicswin.cpp:79 msgid "&View Projection..." -msgstr "" +msgstr "&Проекція Відображення..." #: graphicswin.cpp:81 msgid "Con&figuration..." -msgstr "" +msgstr "&Налаштування..." #: graphicswin.cpp:84 msgid "&View" -msgstr "&View" +msgstr "&Відображення" #: graphicswin.cpp:85 msgid "Zoom &In" @@ -691,7 +702,7 @@ msgstr "Найближчий &Ізометричний Вигляд" #: graphicswin.cpp:92 msgid "&Center View At Point" -msgstr "&Центрувати Вигляд На Точці" +msgstr "&Центрувати Вигляд на Точці" #: graphicswin.cpp:94 msgid "Show Snap &Grid" @@ -699,7 +710,7 @@ msgstr "Показати &Сітку Прикріплення" #: graphicswin.cpp:95 msgid "Darken Inactive Solids" -msgstr "" +msgstr "Затінювати Неактивні Тіла" #: graphicswin.cpp:96 msgid "Use &Perspective Projection" @@ -707,19 +718,19 @@ msgstr "Використовувати &Перспективну Проекці #: graphicswin.cpp:97 msgid "Dimension &Units" -msgstr "" +msgstr "Розмірні &Одиниці" #: graphicswin.cpp:98 msgid "Dimensions in &Millimeters" -msgstr "Розміри в &Міліметрах" +msgstr "Розміри у &Міліметрах" #: graphicswin.cpp:99 msgid "Dimensions in M&eters" -msgstr "" +msgstr "Розміри у &Метрах" #: graphicswin.cpp:100 msgid "Dimensions in &Inches" -msgstr "Розміри в &Дюймах" +msgstr "Розміри у &Дюймах" #: graphicswin.cpp:102 msgid "Show &Toolbar" @@ -739,11 +750,11 @@ msgstr "&Нова Група" #: graphicswin.cpp:108 msgid "Sketch In &3d" -msgstr "Креслення В &3d" +msgstr "Креслення в &3D" #: graphicswin.cpp:109 msgid "Sketch In New &Workplane" -msgstr "Креслення В Новій Робочій &Площині" +msgstr "Креслення в Новій &Площині" #: graphicswin.cpp:111 msgid "Step &Translating" @@ -759,7 +770,7 @@ msgstr "Ви&давити" #: graphicswin.cpp:115 msgid "&Helix" -msgstr "" +msgstr "&Спіраль" #: graphicswin.cpp:116 msgid "&Lathe" @@ -767,13 +778,15 @@ msgstr "&Виточити" #: graphicswin.cpp:117 msgid "Re&volve" -msgstr "" +msgstr "&Обертати" #: graphicswin.cpp:119 +#, fuzzy msgid "Link / Assemble..." msgstr "Приєднати / Монтувати..." #: graphicswin.cpp:120 +#, fuzzy msgid "Link Recent" msgstr "Приєднати Недавні" @@ -783,11 +796,11 @@ msgstr "&Креслення" #: graphicswin.cpp:123 msgid "In &Workplane" -msgstr "В Робочій &Площині" +msgstr "У Робочій &Площині" #: graphicswin.cpp:124 msgid "Anywhere In &3d" -msgstr "Будь-де В &3d" +msgstr "Будь-де В &3D" #: graphicswin.cpp:126 msgid "Datum &Point" @@ -823,11 +836,11 @@ msgstr "Кубічний Сплайн &Без'є" #: graphicswin.cpp:136 msgid "&Text in TrueType Font" -msgstr "&Текст з TrueType Шрифтом" +msgstr "&Текст із TrueType Шрифтом" #: graphicswin.cpp:137 msgid "&Image" -msgstr "" +msgstr "&Зображення" #: graphicswin.cpp:139 msgid "To&ggle Construction" @@ -947,7 +960,7 @@ msgstr "Показати &Приховані Ребра" #: graphicswin.cpp:173 msgid "Show &Center of Mass" -msgstr "" +msgstr "Показати &Центр Масс" #: graphicswin.cpp:175 msgid "Show &Underconstrained Points" @@ -983,16 +996,16 @@ msgstr "&Про програму" #: graphicswin.cpp:355 msgid "(no recent files)" -msgstr "" +msgstr "(нємає нещодавніх файлів)" #: graphicswin.cpp:363 #, c-format msgid "File '%s' does not exist." -msgstr "" +msgstr "Файл '%s' відсутній." #: graphicswin.cpp:725 msgid "No workplane is active, so the grid will not appear." -msgstr "" +msgstr "Відсутня активна площина - сітка не відображатиметься." #: graphicswin.cpp:740 msgid "" @@ -1195,7 +1208,7 @@ msgstr "" #: group.cpp:400 msgid "(unnamed)" -msgstr "" +msgstr "(безіменне)" #: groupmesh.cpp:709 msgid "not closed contour, or not all same style!" @@ -1211,7 +1224,7 @@ msgstr "" #: groupmesh.cpp:726 msgid "zero-length edge!" -msgstr "" +msgstr "ребро нульової довжини!" #: modify.cpp:254 msgid "Must be sketching in workplane to create tangent arc." @@ -1234,8 +1247,9 @@ msgid "Couldn't split this entity; lines, circles, or cubics only." msgstr "" #: modify.cpp:624 +#, fuzzy msgid "Must be sketching in workplane to split." -msgstr "" +msgstr "Має бути накреслений у робочій площині для розділеня." #: modify.cpp:631 msgid "" @@ -1245,7 +1259,7 @@ msgstr "" #: modify.cpp:736 msgid "Can't split; no intersection found." -msgstr "" +msgstr "Неможливо розділити; відсутній перетин." #: mouse.cpp:559 msgid "Assign to Style" @@ -1394,12 +1408,12 @@ msgstr "" #: mouse.cpp:1159 msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -msgstr "" +msgstr "КОМЕНТАР -- ДВІЧІ КЛІКНІТЬ ДЛЯ РЕДАГУВАННЯ" #: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 msgctxt "file-type" msgid "SolveSpace models" -msgstr "" +msgstr "SolveSpace модель" #: platform/gui.cpp:90 msgctxt "file-type" @@ -1409,17 +1423,17 @@ msgstr "" #: platform/gui.cpp:94 msgctxt "file-type" msgid "PNG image" -msgstr "" +msgstr "PNG зображення" #: platform/gui.cpp:98 msgctxt "file-type" msgid "STL mesh" -msgstr "" +msgstr "STL меш" #: platform/gui.cpp:99 msgctxt "file-type" msgid "Wavefront OBJ mesh" -msgstr "" +msgstr "Wavefront OBJ меш" #: platform/gui.cpp:100 msgctxt "file-type" @@ -1434,17 +1448,17 @@ msgstr "" #: platform/gui.cpp:102 msgctxt "file-type" msgid "VRML text file" -msgstr "" +msgstr "VRML меш, текстовий формат" #: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 msgctxt "file-type" msgid "STEP file" -msgstr "" +msgstr "STEP файл" #: platform/gui.cpp:110 msgctxt "file-type" msgid "PDF file" -msgstr "" +msgstr "PDF файл" #: platform/gui.cpp:111 msgctxt "file-type" @@ -1454,93 +1468,93 @@ msgstr "" #: platform/gui.cpp:112 msgctxt "file-type" msgid "Scalable Vector Graphics" -msgstr "" +msgstr "Scalable Vector Graphics, векторний формат" #: platform/gui.cpp:114 platform/gui.cpp:121 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" -msgstr "" +msgstr "DXF файл (AutoCAD 2007)" #: platform/gui.cpp:115 msgctxt "file-type" msgid "HPGL file" -msgstr "" +msgstr "HPGL файл" #: platform/gui.cpp:116 msgctxt "file-type" msgid "G Code" -msgstr "" +msgstr "G Code" #: platform/gui.cpp:125 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" -msgstr "" +msgstr "AutoCAD DXF та DWG файли" #: platform/gui.cpp:129 msgctxt "file-type" msgid "Comma-separated values" -msgstr "" +msgstr "Comma-separated values" #: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 msgid "untitled" -msgstr "" +msgstr "без імені" #: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 #: platform/guiwin.cpp:1582 msgctxt "title" msgid "Save File" -msgstr "" +msgstr "Зберегти Файл" #: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 #: platform/guiwin.cpp:1584 msgctxt "title" msgid "Open File" -msgstr "" +msgstr "Відкрити Файл" #: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 msgctxt "button" msgid "_Cancel" -msgstr "" +msgstr "_Скасувати" #: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 msgctxt "button" msgid "_Save" -msgstr "" +msgstr "_Зберегти" #: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 msgctxt "button" msgid "_Open" -msgstr "" +msgstr "_Відкрити" #: solvespace.cpp:169 msgctxt "title" msgid "Autosave Available" -msgstr "" +msgstr "Наявні автозбереження" #: solvespace.cpp:170 msgctxt "dialog" msgid "An autosave file is available for this sketch." -msgstr "" +msgstr "Наявні автозбереження для цього креслення." #: solvespace.cpp:171 msgctxt "dialog" msgid "Do you want to load the autosave file instead?" -msgstr "" +msgstr "Завантажити файл автозбереження?" #: solvespace.cpp:172 msgctxt "button" msgid "&Load autosave" -msgstr "" +msgstr "&Завантажити автозбереження" #: solvespace.cpp:174 msgctxt "button" msgid "Do&n't Load" -msgstr "" +msgstr "&Не Завантажувати" #: solvespace.cpp:557 msgctxt "title" msgid "Modified File" -msgstr "" +msgstr "Файл Змінено" #: solvespace.cpp:559 #, c-format @@ -1561,22 +1575,22 @@ msgstr "" #: solvespace.cpp:566 msgctxt "button" msgid "&Save" -msgstr "" +msgstr "&Зберегти" #: solvespace.cpp:568 msgctxt "button" msgid "Do&n't Save" -msgstr "" +msgstr "&Не Зберігати" #: solvespace.cpp:589 msgctxt "title" msgid "(new sketch)" -msgstr "" +msgstr "(нове креслення)" #: solvespace.cpp:596 msgctxt "title" msgid "Property Browser" -msgstr "" +msgstr "Браузер Властивостей" #: solvespace.cpp:658 msgid "" @@ -1605,12 +1619,15 @@ msgid "The assembly does not interfere, good." msgstr "" #: solvespace.cpp:822 -#, c-format +#, fuzzy, c-format msgid "" "The volume of the solid model is:\n" "\n" " %s" msgstr "" +"Об'єм тіла:\n" +"\n" +" %s" #: solvespace.cpp:831 #, c-format @@ -1679,7 +1696,7 @@ msgstr "" #: solvespace.cpp:941 #, c-format msgid "Couldn't write to '%s'" -msgstr "" +msgstr "Неможливо записати у '%s'" #: solvespace.cpp:971 msgid "The mesh is self-intersecting (NOT okay, invalid)." @@ -1750,27 +1767,27 @@ msgstr "" #: style.cpp:665 msgid "Style name cannot be empty" -msgstr "" +msgstr "Стиль не може містити порожнє ім'я" #: textscreens.cpp:741 msgid "Can't repeat fewer than 1 time." -msgstr "" +msgstr "Не можливо повторити менше 1 разу." #: textscreens.cpp:745 msgid "Can't repeat more than 999 times." -msgstr "" +msgstr "Не можливо повторити понад 999 разів." #: textscreens.cpp:770 msgid "Group name cannot be empty" -msgstr "" +msgstr "Група не може містити порожнє ім'я" #: textscreens.cpp:813 msgid "Opacity must be between zero and one." -msgstr "" +msgstr "Непрозорість має бути між 0 та 1." #: textscreens.cpp:848 msgid "Radius cannot be zero or negative." -msgstr "" +msgstr "Радіус не може бути нульовим чи від'ємним." #: toolbar.cpp:18 msgid "Sketch line segment" @@ -1794,7 +1811,7 @@ msgstr "Накреслити криві з тексту на TrueType шрифт #: toolbar.cpp:28 msgid "Sketch image from a file" -msgstr "" +msgstr "Вставити зображення з файлу" #: toolbar.cpp:30 msgid "Create tangent arc at selected point" @@ -1911,25 +1928,25 @@ msgstr "Вирівняти вигляд до активної робочої п #: util.cpp:165 msgctxt "title" msgid "Error" -msgstr "" +msgstr "Помилка" #: util.cpp:165 msgctxt "title" msgid "Message" -msgstr "" +msgstr "Повідомлення" #: util.cpp:170 msgctxt "button" msgid "&OK" -msgstr "" +msgstr "&OK" #: view.cpp:78 msgid "Scale cannot be zero or negative." -msgstr "" +msgstr "Масштаб не може бути нульовим чи від'ємним." #: view.cpp:90 view.cpp:99 msgid "Bad format: specify x, y, z" -msgstr "" +msgstr "Некоректний формат: визначте X, Y, Z" #~ msgid "Show Degrees of &Freedom" #~ msgstr "Показати Степені &Свободи" From 53f5e4e7e5ee7884e58835d3169ab1b768cd44da Mon Sep 17 00:00:00 2001 From: robnee Date: Thu, 25 Mar 2021 20:50:44 -0400 Subject: [PATCH 03/89] export style for construction entities for edges --- src/drawentity.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drawentity.cpp b/src/drawentity.cpp index 00bcb28a..5e1122ad 100644 --- a/src/drawentity.cpp +++ b/src/drawentity.cpp @@ -26,7 +26,7 @@ void Entity::GenerateEdges(SEdgeList *el) { List lv = {}; sb->MakePwlInto(&lv); for(int j = 1; j < lv.n; j++) { - el->AddEdge(lv[j-1], lv[j], style.v, i); + el->AddEdge(lv[j-1], lv[j], Style::ForEntity(h).v, i); } lv.Clear(); } From d511ce4accddda31f51329efa383693bf294bfd1 Mon Sep 17 00:00:00 2001 From: robnee Date: Sat, 27 Mar 2021 11:35:59 -0400 Subject: [PATCH 04/89] Trigger redraw on load factory default styles --- src/style.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/style.cpp b/src/style.cpp index 19a1835c..7f89e7b8 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -389,6 +389,7 @@ void TextWindow::ScreenShowStyleInfo(int link, uint32_t v) { void TextWindow::ScreenLoadFactoryDefaultStyles(int link, uint32_t v) { Style::LoadFactoryDefaults(); SS.TW.GoToScreen(Screen::LIST_OF_STYLES); + SS.GW.persistentDirty = true; } void TextWindow::ScreenCreateCustomStyle(int link, uint32_t v) { From 5e42275b1a807c817846f7306fa82f92379dcd62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?= Date: Sat, 27 Mar 2021 14:48:31 +0100 Subject: [PATCH 05/89] Fix pathologically slow translate groups on Linux Major performance improvement on GCC with libstdc++. --- src/dsc.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/dsc.h b/src/dsc.h index 93403bca..34190e62 100644 --- a/src/dsc.h +++ b/src/dsc.h @@ -467,11 +467,17 @@ public: // Look to see if we already have something with the same handle value. ssassert(FindByIdNoOops(t->h) == nullptr, "Handle isn't unique"); - // Copy-construct at the end of the list. - new(&elem[n]) T(*t); + // Find out where the added element should be. + int pos = LowerBoundIndex(*t); + + // Shift everything from there to the end of the array. + new(&elem[n]) T(); + for (int i = n; i > pos; i--) + elem[i] = std::move(elem[i - 1]); + + // Copy-construct at the right place. + elem[pos] = T(*t); ++n; - // The item we just added is trivially sorted, so "merge" - std::inplace_merge(begin(), end() - 1, end(), Compare()); } T *FindById(H h) { From 204ca3178ed8b579ce44096183b06ac970fe9993 Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Mon, 29 Mar 2021 13:43:50 -0400 Subject: [PATCH 06/89] Add some notes on ID lists, Entities, and Remap --- developer_docs/IdLists_Entities_and_Remap.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 developer_docs/IdLists_Entities_and_Remap.txt diff --git a/developer_docs/IdLists_Entities_and_Remap.txt b/developer_docs/IdLists_Entities_and_Remap.txt new file mode 100644 index 00000000..c0a595d8 --- /dev/null +++ b/developer_docs/IdLists_Entities_and_Remap.txt @@ -0,0 +1,17 @@ +Some notes about Entities, Entity IDs and the IdList structure +============================================================== +Sketch entities in SolveSpace are all of the same type without use of language support for polymorphism. The entity class is defined in sketch.h. That class contains an enum for each entity to define its type (line, arc, etc...) and some other members that can be used to store different things depending on the entity type. This means all entities are the same size, so some data may be reference by pointers from the entity (font, extra points, etc...) + +Entities in a sketch are kept in a global array (IdList) referenced by a unique Id (handle) and can be looked up by Id in log(n) time via binary search. In order to use binary seach the array must be kept in order sorted by Id. One problem is that insertion takes O(n) time because half the list (on average) must be shifted to make room for a new item. + +The IdList class is a template and is used for more than entites. + +EntityMap: +========== +Another important structure is the EntityMap and EntityKey defined in sketch.h This is what allows SovleSpace to update groups when earlier groups in the sketch are changed. If a rectangle is extruded to a box and items are constrained to entites on that box, the user can go back to the sketch and modify it. Entites can be added, modified an even deleted. So long as the entites that are later used to build upon are kept the later extrude group will pick up the changes from the 2D sketch and anything build on it will remain. + +The way this works is that each group has a member called remap, which is one of these maps. This is where my understanding is fuzzy. At the end of Group.cpp is a function called Group::CopyEntity() which is used to make new sketch entites when a group is created. These are generally copies of entities in the previous group, but there are exceptions. A point will be used to generate a line when extruding a 2D sketch. A point will also be "copied" to a circle for a Lathe group. For this reason, the entity key is derived by combining its previous key with something often called the CopyNumber or just remap (unfortunate). + +When a group is regenerated (the first time, or after a previous one is modified) entites are copied from the old group to the new one. For Step Translating and Rotating there may be many copies, and the copy number is literally N for the Nth copy except for the last one which gets an enum - it is common to constrain the last item, so it gets a large unique number so that constraints still refer to it if the number of copies changes. When an entity is copied like this a new handle is created unless there is already an entity in Remap that was created the same way. This is how constructions are preserved across underlying changes. + +There are some hard limits used in the hash table for the remap mechanism which limit the number of entites in a group (but not the global sketch). From 58b425cdceb07a20026720d988f8a7cea6c5ded4 Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Mon, 29 Mar 2021 13:52:41 -0400 Subject: [PATCH 07/89] formatting --- developer_docs/IdLists_Entities_and_Remap.txt | 44 ++++++++++++++++--- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/developer_docs/IdLists_Entities_and_Remap.txt b/developer_docs/IdLists_Entities_and_Remap.txt index c0a595d8..03ea9d7f 100644 --- a/developer_docs/IdLists_Entities_and_Remap.txt +++ b/developer_docs/IdLists_Entities_and_Remap.txt @@ -1,17 +1,49 @@ Some notes about Entities, Entity IDs and the IdList structure ============================================================== -Sketch entities in SolveSpace are all of the same type without use of language support for polymorphism. The entity class is defined in sketch.h. That class contains an enum for each entity to define its type (line, arc, etc...) and some other members that can be used to store different things depending on the entity type. This means all entities are the same size, so some data may be reference by pointers from the entity (font, extra points, etc...) +Sketch entities in SolveSpace are all of the same type without use of language +support for polymorphism. The entity class is defined in sketch.h. That class +contains an enum for each entity to define its type (line, arc, etc...) and some +other members that can be used to store different things depending on the entity +type. This means all entities are the same size, so some data may be reference +by pointers from the entity (font, extra points, etc...) -Entities in a sketch are kept in a global array (IdList) referenced by a unique Id (handle) and can be looked up by Id in log(n) time via binary search. In order to use binary seach the array must be kept in order sorted by Id. One problem is that insertion takes O(n) time because half the list (on average) must be shifted to make room for a new item. +Entities in a sketch are kept in a global array (IdList) referenced by a unique +Id (handle) and can be looked up by Id in log(n) time via binary search. In +order to use binary seach the array must be kept in order sorted by Id. One +problem is that insertion takes O(n) time because half the list (on average) +must be shifted to make room for a new item. The IdList class is a template and is used for more than entites. EntityMap: ========== -Another important structure is the EntityMap and EntityKey defined in sketch.h This is what allows SovleSpace to update groups when earlier groups in the sketch are changed. If a rectangle is extruded to a box and items are constrained to entites on that box, the user can go back to the sketch and modify it. Entites can be added, modified an even deleted. So long as the entites that are later used to build upon are kept the later extrude group will pick up the changes from the 2D sketch and anything build on it will remain. +Another important structure is the EntityMap and EntityKey defined in sketch.h +This is what allows SovleSpace to update groups when earlier groups in the +sketch are changed. If a rectangle is extruded to a box and items are +constrained to entites on that box, the user can go back to the sketch and +modify it. Entites can be added, modified an even deleted. So long as the +entites that are later used to build upon are kept the later extrude group will +pick up the changes from the 2D sketch and anything build on it will remain. -The way this works is that each group has a member called remap, which is one of these maps. This is where my understanding is fuzzy. At the end of Group.cpp is a function called Group::CopyEntity() which is used to make new sketch entites when a group is created. These are generally copies of entities in the previous group, but there are exceptions. A point will be used to generate a line when extruding a 2D sketch. A point will also be "copied" to a circle for a Lathe group. For this reason, the entity key is derived by combining its previous key with something often called the CopyNumber or just remap (unfortunate). +The way this works is that each group has a member called remap, which is one of +these maps. This is where my understanding is fuzzy. At the end of Group.cpp is +a function called Group::CopyEntity() which is used to make new sketch entites +when a group is created. These are generally copies of entities in the previous +group, but there are exceptions. A point will be used to generate a line when +extruding a 2D sketch. A point will also be "copied" to a circle for a Lathe +group. For this reason, the entity key is derived by combining its previous key +with something often called the CopyNumber or just remap (unfortunate). -When a group is regenerated (the first time, or after a previous one is modified) entites are copied from the old group to the new one. For Step Translating and Rotating there may be many copies, and the copy number is literally N for the Nth copy except for the last one which gets an enum - it is common to constrain the last item, so it gets a large unique number so that constraints still refer to it if the number of copies changes. When an entity is copied like this a new handle is created unless there is already an entity in Remap that was created the same way. This is how constructions are preserved across underlying changes. +When a group is regenerated (the first time, or after a previous one is +modified) entites are copied from the old group to the new one. For Step +Translating and Rotating there may be many copies, and the copy number is +literally N for the Nth copy except for the last one which gets an enum - it is +common to constrain the last item, so it gets a large unique number so that +constraints still refer to it if the number of copies changes. When an entity is +copied like this a new handle is created unless there is already an entity in +Remap that was created the same way. This is how constructions are preserved +across underlying changes. + +There are some hard limits used in the hash table for the remap mechanism which +limit the number of entites in a group (but not the global sketch). -There are some hard limits used in the hash table for the remap mechanism which limit the number of entites in a group (but not the global sketch). From 1628097037f18537676dc829237276b88d0e6aff Mon Sep 17 00:00:00 2001 From: robnee Date: Sat, 27 Mar 2021 11:12:01 -0400 Subject: [PATCH 08/89] Save stipple settings for default styles to config --- src/sketch.h | 6 ++++ src/style.cpp | 98 +++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 85 insertions(+), 19 deletions(-) diff --git a/src/sketch.h b/src/sketch.h index 68a912b3..bda0a983 100644 --- a/src/sketch.h +++ b/src/sketch.h @@ -884,11 +884,14 @@ public: double width; int zIndex; bool exportable; + StipplePattern stippleType; } Default; static const Default Defaults[]; static std::string CnfColor(const std::string &prefix); static std::string CnfWidth(const std::string &prefix); + static std::string CnfStippleType(const std::string &prefix); + static std::string CnfStippleScale(const std::string &prefix); static std::string CnfTextHeight(const std::string &prefix); static std::string CnfPrefixToName(const std::string &prefix); static std::string CnfExportable(const std::string &prefix); @@ -918,7 +921,10 @@ public: static bool Exportable(int hs); static hStyle ForEntity(hEntity he); static StipplePattern PatternType(hStyle hs); + static double StippleScale(hStyle hs); static double StippleScaleMm(hStyle hs); + static std::string StipplePatternName(hStyle hs); + static StipplePattern StipplePatternFromString(std::string name); std::string DescriptionString() const; diff --git a/src/style.cpp b/src/style.cpp index 7f89e7b8..b4ed841e 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -8,22 +8,22 @@ #include "solvespace.h" const Style::Default Style::Defaults[] = { - { { ACTIVE_GRP }, "ActiveGrp", RGBf(1.0, 1.0, 1.0), 1.5, 4, true }, - { { CONSTRUCTION }, "Construction", RGBf(0.1, 0.7, 0.1), 1.5, 0, false }, - { { INACTIVE_GRP }, "InactiveGrp", RGBf(0.5, 0.3, 0.0), 1.5, 3, true }, - { { DATUM }, "Datum", RGBf(0.0, 0.8, 0.0), 1.5, 0, true }, - { { SOLID_EDGE }, "SolidEdge", RGBf(0.8, 0.8, 0.8), 1.0, 2, true }, - { { CONSTRAINT }, "Constraint", RGBf(1.0, 0.1, 1.0), 1.0, 0, true }, - { { SELECTED }, "Selected", RGBf(1.0, 0.0, 0.0), 1.5, 0, true }, - { { HOVERED }, "Hovered", RGBf(1.0, 1.0, 0.0), 1.5, 0, true }, - { { CONTOUR_FILL }, "ContourFill", RGBf(0.0, 0.1, 0.1), 1.0, 0, true }, - { { NORMALS }, "Normals", RGBf(0.0, 0.4, 0.4), 1.0, 0, true }, - { { ANALYZE }, "Analyze", RGBf(0.0, 1.0, 1.0), 3.0, 0, true }, - { { DRAW_ERROR }, "DrawError", RGBf(1.0, 0.0, 0.0), 8.0, 0, true }, - { { DIM_SOLID }, "DimSolid", RGBf(0.1, 0.1, 0.1), 1.0, 0, true }, - { { HIDDEN_EDGE }, "HiddenEdge", RGBf(0.8, 0.8, 0.8), 1.0, 1, true }, - { { OUTLINE }, "Outline", RGBf(0.8, 0.8, 0.8), 3.0, 5, true }, - { { 0 }, NULL, RGBf(0.0, 0.0, 0.0), 0.0, 0, true } + { { ACTIVE_GRP }, "ActiveGrp", RGBf(1.0, 1.0, 1.0), 1.5, 4, true, StipplePattern::CONTINUOUS }, + { { CONSTRUCTION }, "Construction", RGBf(0.1, 0.7, 0.1), 1.5, 0, false, StipplePattern::CONTINUOUS }, + { { INACTIVE_GRP }, "InactiveGrp", RGBf(0.5, 0.3, 0.0), 1.5, 3, true, StipplePattern::CONTINUOUS }, + { { DATUM }, "Datum", RGBf(0.0, 0.8, 0.0), 1.5, 0, true, StipplePattern::CONTINUOUS }, + { { SOLID_EDGE }, "SolidEdge", RGBf(0.8, 0.8, 0.8), 1.0, 2, true, StipplePattern::CONTINUOUS }, + { { CONSTRAINT }, "Constraint", RGBf(1.0, 0.1, 1.0), 1.0, 0, true, StipplePattern::CONTINUOUS }, + { { SELECTED }, "Selected", RGBf(1.0, 0.0, 0.0), 1.5, 0, true, StipplePattern::CONTINUOUS }, + { { HOVERED }, "Hovered", RGBf(1.0, 1.0, 0.0), 1.5, 0, true, StipplePattern::CONTINUOUS }, + { { CONTOUR_FILL }, "ContourFill", RGBf(0.0, 0.1, 0.1), 1.0, 0, true, StipplePattern::CONTINUOUS }, + { { NORMALS }, "Normals", RGBf(0.0, 0.4, 0.4), 1.0, 0, true, StipplePattern::CONTINUOUS }, + { { ANALYZE }, "Analyze", RGBf(0.0, 1.0, 1.0), 3.0, 0, true, StipplePattern::CONTINUOUS }, + { { DRAW_ERROR }, "DrawError", RGBf(1.0, 0.0, 0.0), 8.0, 0, true, StipplePattern::CONTINUOUS }, + { { DIM_SOLID }, "DimSolid", RGBf(0.1, 0.1, 0.1), 1.0, 0, true, StipplePattern::CONTINUOUS }, + { { HIDDEN_EDGE }, "HiddenEdge", RGBf(0.8, 0.8, 0.8), 1.0, 1, true, StipplePattern::DASH }, + { { OUTLINE }, "Outline", RGBf(0.8, 0.8, 0.8), 3.0, 5, true, StipplePattern::CONTINUOUS }, + { { 0 }, NULL, RGBf(0.0, 0.0, 0.0), 0.0, 0, true, StipplePattern::CONTINUOUS } }; std::string Style::CnfColor(const std::string &prefix) { @@ -32,6 +32,12 @@ std::string Style::CnfColor(const std::string &prefix) { std::string Style::CnfWidth(const std::string &prefix) { return "Style_" + prefix + "_Width"; } +std::string Style::CnfStippleType(const std::string &prefix) { + return "Style_" + prefix + "_StippleType"; +} +std::string Style::CnfStippleScale(const std::string &prefix) { + return "Style_" + prefix + "_StippleScale"; +} std::string Style::CnfTextHeight(const std::string &prefix) { return "Style_" + prefix + "_TextHeight"; } @@ -105,9 +111,13 @@ void Style::FillDefaultStyle(Style *s, const Default *d, bool factory) { : settings->ThawBool(CnfExportable(d->cnfPrefix), d->exportable); s->filled = false; s->fillColor = RGBf(0.3, 0.3, 0.3); - s->stippleType = (d->h.v == Style::HIDDEN_EDGE) ? StipplePattern::DASH - : StipplePattern::CONTINUOUS; - s->stippleScale = 15.0; + s->stippleType = (factory) + ? d->stippleType + : Style::StipplePatternFromString( + settings->ThawString(CnfStippleType(d->cnfPrefix), "")); + s->stippleScale = (factory) + ? 15.0 + : settings->ThawFloat(CnfStippleScale(d->cnfPrefix), 15.0); s->zIndex = d->zIndex; } @@ -125,6 +135,8 @@ void Style::FreezeDefaultStyles(Platform::SettingsRef settings) { for(d = &(Defaults[0]); d->h.v; d++) { settings->FreezeColor(CnfColor(d->cnfPrefix), Color(d->h)); settings->FreezeFloat(CnfWidth(d->cnfPrefix), (float)Width(d->h)); + settings->FreezeString(CnfStippleType(d->cnfPrefix), StipplePatternName(d->h)); + settings->FreezeFloat(CnfStippleScale(d->cnfPrefix), (float)StippleScale(d->h)); settings->FreezeFloat(CnfTextHeight(d->cnfPrefix), (float)TextHeight(d->h)); settings->FreezeBool(CnfExportable(d->cnfPrefix), Exportable(d->h.v)); } @@ -353,11 +365,59 @@ hStyle Style::ForEntity(hEntity he) { return hs; } +StipplePattern Style::StipplePatternFromString(std::string name) { + std::transform(name.begin(), name.end(), name.begin(), ::tolower); + if(name == "continuous") { + return StipplePattern::CONTINUOUS; + } else if(name == "shortdash") { + return StipplePattern::SHORT_DASH; + } else if(name == "dash") { + return StipplePattern::DASH; + } else if(name == "longdash") { + return StipplePattern::LONG_DASH; + } else if(name == "dashdot") { + return StipplePattern::DASH_DOT; + } else if(name == "dashdotdot") { + return StipplePattern::DASH_DOT_DOT; + } else if(name == "dot") { + return StipplePattern::DOT; + } else if(name == "freehand") { + return StipplePattern::FREEHAND; + } else if(name == "zigzag") { + return StipplePattern::ZIGZAG; + } + + return StipplePattern::CONTINUOUS; +} + StipplePattern Style::PatternType(hStyle hs) { Style *s = Get(hs); return s->stippleType; } +std::string Style::StipplePatternName(hStyle hs) { + Style *s = Get(hs); + switch(s->stippleType) { + case StipplePattern::CONTINUOUS: return "Continuous"; + case StipplePattern::SHORT_DASH: return "ShortDash"; + case StipplePattern::DASH: return "Dash"; + case StipplePattern::LONG_DASH: return "LongDash"; + case StipplePattern::DASH_DOT: return "DashDot"; + case StipplePattern::DASH_DOT_DOT: return "DashDotDot"; + case StipplePattern::DOT: return "Dot"; + case StipplePattern::FREEHAND: return "FreeHand"; + case StipplePattern::ZIGZAG: return "ZigZag"; + } + + return "CONTINUOUS"; +} + + +double Style::StippleScale(hStyle hs) { + Style *s = Get(hs); + return s->stippleScale; +} + double Style::StippleScaleMm(hStyle hs) { Style *s = Get(hs); if(s->widthAs == UnitsAs::MM) { From d8816863d0a0daec3251e5c34b1b221ba1a8445d Mon Sep 17 00:00:00 2001 From: Maximilian Federle Date: Tue, 30 Mar 2021 11:35:04 +0200 Subject: [PATCH 09/89] CI: Lock qemu version to known working --- .github/workflows/cd.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 4cf7ab40..154b6faa 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -135,6 +135,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: docker/setup-qemu-action@v1 + with: + image: tonistiigi/binfmt@sha256:df15403e06a03c2f461c1f7938b171fda34a5849eb63a70e2a2109ed5a778bde - uses: actions/checkout@v2 - name: Set Up Source run: rsync --filter=":- .gitignore" -r ./ pkg/snap/solvespace-snap-src From 5c3ce9bfc22d90700f8fa4861037a19ed546b874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?= Date: Sun, 28 Mar 2021 19:05:03 +0200 Subject: [PATCH 10/89] GTK: make spacenavd work through its socket, too E.g. for when you have more than one user logged in, in which case spacenavd works only for the first of those X11 displays. We try to do it the old way first, so there should be no regressions. Also fixes storing non-booleans in bool variables. --- src/platform/guigtk.cpp | 74 +++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 18 deletions(-) diff --git a/src/platform/guigtk.cpp b/src/platform/guigtk.cpp index 94247b45..e4bc3156 100644 --- a/src/platform/guigtk.cpp +++ b/src/platform/guigtk.cpp @@ -34,6 +34,11 @@ #if defined(HAVE_SPACEWARE) # include # include +# if GTK_CHECK_VERSION(3, 20, 0) +# include +# else +# include +# endif #endif #include "solvespace.h" @@ -1039,15 +1044,7 @@ void Open3DConnexion() {} void Close3DConnexion() {} #if defined(HAVE_SPACEWARE) && defined(GDK_WINDOWING_X11) -static GdkFilterReturn GdkSpnavFilter(GdkXEvent *gdkXEvent, GdkEvent *gdkEvent, gpointer data) { - XEvent *xEvent = (XEvent *)gdkXEvent; - WindowImplGtk *window = (WindowImplGtk *)data; - - spnav_event spnavEvent; - if(!spnav_x11_event(xEvent, &spnavEvent)) { - return GDK_FILTER_CONTINUE; - } - +static void ProcessSpnavEvent(WindowImplGtk *window, const spnav_event &spnavEvent, bool shiftDown, bool controlDown) { switch(spnavEvent.type) { case SPNAV_EVENT_MOTION: { SixDofEvent event = {}; @@ -1058,8 +1055,8 @@ static GdkFilterReturn GdkSpnavFilter(GdkXEvent *gdkXEvent, GdkEvent *gdkEvent, event.rotationX = (double)spnavEvent.motion.rx * 0.001; event.rotationY = (double)spnavEvent.motion.ry * 0.001; event.rotationZ = (double)spnavEvent.motion.rz * -0.001; - event.shiftDown = xEvent->xmotion.state & ShiftMask; - event.controlDown = xEvent->xmotion.state & ControlMask; + event.shiftDown = shiftDown; + event.controlDown = controlDown; if(window->onSixDofEvent) { window->onSixDofEvent(event); } @@ -1075,17 +1072,52 @@ static GdkFilterReturn GdkSpnavFilter(GdkXEvent *gdkXEvent, GdkEvent *gdkEvent, } switch(spnavEvent.button.bnum) { case 0: event.button = SixDofEvent::Button::FIT; break; - default: return GDK_FILTER_REMOVE; + default: return; } - event.shiftDown = xEvent->xmotion.state & ShiftMask; - event.controlDown = xEvent->xmotion.state & ControlMask; + event.shiftDown = shiftDown; + event.controlDown = controlDown; if(window->onSixDofEvent) { window->onSixDofEvent(event); } break; } +} - return GDK_FILTER_REMOVE; +static GdkFilterReturn GdkSpnavFilter(GdkXEvent *gdkXEvent, GdkEvent *gdkEvent, gpointer data) { + XEvent *xEvent = (XEvent *)gdkXEvent; + WindowImplGtk *window = (WindowImplGtk *)data; + bool shiftDown = (xEvent->xmotion.state & ShiftMask) != 0; + bool controlDown = (xEvent->xmotion.state & ControlMask) != 0; + + spnav_event spnavEvent; + if(spnav_x11_event(xEvent, &spnavEvent)) { + ProcessSpnavEvent(window, spnavEvent, shiftDown, controlDown); + return GDK_FILTER_REMOVE; + } + return GDK_FILTER_CONTINUE; +} + +static gboolean ConsumeSpnavQueue(GIOChannel *, GIOCondition, gpointer data) { + WindowImplGtk *window = (WindowImplGtk *)data; + Glib::RefPtr gdkWindow = window->gtkWindow.get_window(); + + // We don't get modifier state through the socket. + int x, y; + Gdk::ModifierType mask{}; +#if GTK_CHECK_VERSION(3, 20, 0) + Glib::RefPtr device = gdkWindow->get_display()->get_default_seat()->get_pointer(); +#else + Glib::RefPtr device = gdkWindow->get_display()->get_device_manager()->get_client_pointer(); +#endif + gdkWindow->get_device_position(device, x, y, mask); + bool shiftDown = (mask & Gdk::SHIFT_MASK) != 0; + bool controlDown = (mask & Gdk::CONTROL_MASK) != 0; + + spnav_event spnavEvent; + while(spnav_poll_event(&spnavEvent)) { + ProcessSpnavEvent(window, spnavEvent, shiftDown, controlDown); + } + return TRUE; } void Request3DConnexionEventsForWindow(WindowRef window) { @@ -1093,10 +1125,16 @@ void Request3DConnexionEventsForWindow(WindowRef window) { std::static_pointer_cast(window); Glib::RefPtr gdkWindow = windowImpl->gtkWindow.get_window(); - if(GDK_IS_X11_DISPLAY(gdkWindow->get_display()->gobj())) { + if(!GDK_IS_X11_DISPLAY(gdkWindow->get_display()->gobj())) { + return; + } + + if(spnav_x11_open(gdk_x11_get_default_xdisplay(), + gdk_x11_window_get_xid(gdkWindow->gobj())) != -1) { gdkWindow->add_filter(GdkSpnavFilter, windowImpl.get()); - spnav_x11_open(gdk_x11_get_default_xdisplay(), - gdk_x11_window_get_xid(gdkWindow->gobj())); + } else if(spnav_open() != -1) { + g_io_add_watch(g_io_channel_unix_new(spnav_fd()), G_IO_IN, + ConsumeSpnavQueue, windowImpl.get()); } } #else From 6b94af07659bbe5d7635dddab3dc21262a7a78e7 Mon Sep 17 00:00:00 2001 From: dustinhartlyn <79132671+dustinhartlyn@users.noreply.github.com> Date: Thu, 1 Apr 2021 06:24:04 -0700 Subject: [PATCH 11/89] minor fix open/save dialogue on windows (#983) * minor fix open/save dialogue on windows On windows 10 the open/save dialogue box has an minor error, and I believe I fixed it. When "Open" is selected from the menu, the title of the dialogue box says "SolveSpace - Save File" and the entered file name is "united". My fix correctly titles the dialoged box, and leaves the address bar blank when a file is being opened because "united" is only needed as a default name when a file being saved. I found that class FileDialogImplWin32 from guiwin.cpp contains two if statements for "isSaveDialog". This is redundant. I removed the first where the title was originally set, but not working. I then set the title in the second if statement and moved the 'if isEmpty'' to this section. * Update guiwin.cpp replaced tabs with spaces --- src/platform/guiwin.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/platform/guiwin.cpp b/src/platform/guiwin.cpp index b93b87b4..e98e8738 100644 --- a/src/platform/guiwin.cpp +++ b/src/platform/guiwin.cpp @@ -1583,11 +1583,6 @@ public: ofn.nMaxFile = sizeof(filenameWC) / sizeof(wchar_t); ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; - if(isSaveDialog) { - SetTitle(C_("title", "Save File")); - } else { - SetTitle(C_("title", "Open File")); - } } void SetTitle(std::string title) override { @@ -1640,13 +1635,14 @@ public: } bool RunModal() override { - if(GetFilename().IsEmpty()) { - SetFilename(Path::From(_("untitled"))); - } - if(isSaveDialog) { + SetTitle(C_("title", "Save File")); + if(GetFilename().IsEmpty()) { + SetFilename(Path::From(_("untitled"))); + } return GetSaveFileNameW(&ofn) == TRUE; } else { + SetTitle(C_("title", "Open File")); return GetOpenFileNameW(&ofn) == TRUE; } } From 2df786e7415501c748f34741aa1d5c561e730814 Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Thu, 1 Apr 2021 17:28:43 -0400 Subject: [PATCH 12/89] correct the order of glyphs 2334, 2335 and 2312 in unicode.lff.gz font file. --- res/fonts/unicode.lff.gz | Bin 482562 -> 482562 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/res/fonts/unicode.lff.gz b/res/fonts/unicode.lff.gz index 6b1b04daf484b2d5e5d5281a74cb354bc1834f0d..f6e55fbfc9a12943edc73fee0c604d6e92c196ef 100644 GIT binary patch delta 478882 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%0A4lJ?*(&ZgvW#xjpup3- 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%0DJpLu2W{(tF4QdTmN(Il^) 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 z zme*7d*QtIpMmyLUcCeXyeJs~ud~l018R%q-Zc9!G@$k|I(DT6XJTN>De67T$2=3t{ zFY%M#1Y1BKJ*z)|dPaeCEq-($Ca>_(ZRl;aLje1SQ}*qVS=qwI{U^MMg!o$gGeq9;Y>K4Qj%UdwLL2C7O6odZqie^L&*qWOF!#!#qm~!*5SDo4 zX&T6^CmC}q=MR?Nxq}E!ium*I!S^I^uV^&^>778P#7g~txgy-;DpE+Hu+|xJ`5nuA z&L8KH95fdg5TgondT&bcJ`n%OBRt<^$4j0u{#QPkU}O9 zHS>qsev!rGhBDFtI^`E!fg#I_}1V=26c=h!L zTL}2|Bhs)gLK%1@0}>M()w6~8IxV^`XLY6w$pW2a7e;G%cM)xg*80n8#D@_K`#O6MSKz?*{oA}P?8k90+?nrKUZlu(xqSJt;uHJ4>8)%#|EHL05Q zyL&yZ^+JrPA|OOkg1dQDN*$p(5r~Eqid9l3YxwaAZP}xsyeY(( z=V)$!b}ue2F0L*r{-_jIrp&S$d$k5LV8pJ*O3Y4on0-=-6^1e=4ZM^Emi(?B&)-S` zdn?twyNZ-q$xfpQovr<&99CaqIK+V%!{-HJOv^u^EtUpiH3ZsbxC#leoUd4GPMLxd z4zow0lXP$wmr|^M*#X$!;k8!rBC3W=m=I%wSuY{RY~Z1b z7U$YSN=PbKhpHo9I*Yu3q`0*`L_3wQ$(;=NWvzSltJt9ab1rSJeSN;1F7pG%jEjH1 z#LoY?Hvd<;oC+CAh2Tw(N61h9MY7j6oWpVq$3WhoFW*8}SesnsC1!c5^72|Ks7#lC zG?l}`M`I%W-_scx-X%@x%2EuVmLu$T^2K{9{_vLbI&}`Oh&NhIJ0Zzm&*6t2c))DzIrw+*UH! zBH|=HZc8F1gU{bYxjN03-PB0s_v9&m+Exm*WjI>obBNFG^lRh8dDrvf*}&hxB55s5 z0vS4KxfFwV3R|bPZyIs(9V_Orc@O~y+iR9D|TJ; zn`>|K;4I0&5eQTYId(_hSY@TLQXpTK$P5W>WCo)|{;Q|H@{@nXa*3|n+c}1R^%~Nx zY9lTgY|#$|dgt|i*+(mtRO!;7;m2?IQk)6m2Du@lxJPgle!o+L`N^NB?gHuSc}FGt zVnG`Y1(l`%O#PC-fP@Z_hs4!VpgmmoNrBv&OzvEbveTQGPKu}%6vS#FlHR3@BpEUF zKBj1bjK;&WMUXl(w?PJ*QW%tf+kLaz?(?Fjw5ZCukX5p9$@SRRx9Y1-Xv#rN`2L-8<3jENt}O-H@#}baxufDzD;bbADLHd?Drs?d^V&WulArz>*J!T! z4SS)D#^rOCMx`8F3Z)&Egy+CGluATaMpd(7V~x^)WelHvooV@hsSTNDDQ4G|K$4=v z1u@pMKcf>k5ot_?c_g82A-tLb?MEsu(EdnL?vb7wq|M+egeY511}FV*GIw~0`zjA~GWz7)mQv0~jmPpIe zuNNHz@_17cE`vIMBkPQ#L;r8GHx*0Ho(wn)^QIx#jf;bx4ECVIS5F3vOqtpeZHWiY zmI5)RwT+OegDbd$Oiw@g=}1sV?^p@mNAI42g-8LM6wX{>Ab?)B)_CWfmX4qPFjZ;+ z((EwS;B&sjL?Tfp|MFTVHYuid1kE$Imzef7ikJ5a9Ht7E>LVX{uAlyn*F~o<@Qq5e1l&KJGGz)xJ9Xx&2*|i2m5^YMN75~q zFW2nIhC=U(bODFZQ>iBzbAu_LO_kefPX-5+&QMz zbCRc|r+1brpgf9)py~{3HUZ&sgIad>kZ;H9^zfa3fBL)b@k8JG^|aG5oYXo$pN2dB z$L%LrGNsyMDN5i=V}1T$8lllaE+3$6P^C%KO+9!}gu z?%1FhJ`wLkWq5>GVQ;ce9Uco%#&y}fs(3c|xq%ov4ZJB3Q>BOnI*Z%vn9ydqZm_pE zB9+ZB1e@iT)suk@U>KRa_}FvSQy_i^#e}xKRP;Nam~Kp=EhU|$|ECsm9GST&N^nkp z%@9xj)Ln%32+id{ZWjVCdupidYIZ>4fQU7&`6=mfS7v8GeG}R;6zpLwNC#h3eeM)! z%hYe4??y+;9!a~N0=N;K{>Hb|<5>#4P2Lv-=ZZgv z8oa; zt2;f86|xL-2Aq#4P3P2~Yr9A}UbgT9YAh>s#R6>!$4e)kFHVxJ;FIMO#{>$;i@DFs z=LsD7w3^~iin>!(jl+F8`PiTSOYWm$V+CrXutRdz;Df?Z9g+4Q zj=4+}Xv>nSihzW7&(Yc*Xv^YCRUNAONKxA0df; z=}nhwqk+s9>mhxqS4vm>nl9bCUKr?%K9GaKh(xqyZrx;u?cG?99Cr7ANfYVmh5j_T zt$=ExkS&<+oC56`4Qqi&ZF<}Ww9ss^?t>raPyYfXw3Ad|Sw?{EbH$x^g_p;AvaRHz zd|r!j#wTEZvNo9jq&i6$3LUyft>Tnfn1^3XytDU+T7j*&ZwH!3(6z9%BG%Gc|KnESNEB`8R6EJPd$-K+hhJuvaS52_0CF= zutq!Vl;8hfAii@?q=7!K8ZQ@~XO6;ieu=5uRcQ0YNFM1vjMgdZEWAmKfjZ@Px3FN5 za*8cm(3>0t&=SpmeB@g?B<8iGiG$F}>4k&NIEBLB|5pj#x7xzUSv`<>vM6Z?odpgT zo(AOaDI~Nl%-K_*?E-d>Qns=~U1J8(uB2tRkpgXqaziOA&@PlHhM0yBk|TrCn*?Vh zTwDnU+S0zdLj~*BNL3}UM+7;B!Y*ZkZS8dk@kWdUGLWx-i8k}#xhDfeu*);plCrMJ zU~~C)^Htg)UELd`D>hQ2I3~0y9C7oTzC?xsLw^?sXnMs%I>6SuAb>*NrNP+~WXiGx zB3GfQfPZ_ZR2{00_^JqWGA=dtHd))VajIM;8JvvIR7AUL7-ye|fg-&p14c6Y41^pT z`i0s`mD^u`L1+&--yta;+prbeu+`qh?wJC)19#jh5M#LH0 zhch^Yy{1TaYxV6ut9FVDWlN8uiCCpoBUYJz69Y35FFAQ~p95E!VR_;s?s&S$`X19Rv@zyBXW)4IUg;r{um6S%LbDXmelErwYWFYPUj+iDqGLQkkk0 z6YNGs4bZ$yv&dOAi=3Z`h>1BW(>W^BISSa>1#E&H7Ig-umsGP$UfTF&sd#(5x;Eg03Q%e$njl_i=PeSah;bnIDju`IfmyO&5I~BI@e&7SvVvKw9ZVPAR117p`IrXKkr@ zf`Ab3eoKC8?Hyltc4&J#v*M=Cu%e-+5cyp@4pF z{sq%&fV0|#W)AivM7)fDmA9#yL_3}7s~8L*x^}wM40UfQ!+v)y)tm#eB4;2skRm3; zelF{84yZ-{!LNa~jeGX3P)wIV5-$TR5CB9(5z}C%>6y2m9PLS;d5;-@yJv$>N{qZ;<$0TiKlbGK{H^FB6n%-;+ouMcCMQiknj`s3eN%x{? z1VvdPzE&~I{=Sm5?;6aq6*MwgOXCt4JXu1#7!>mrK3Q;uW}T2@E2lt=Ev&H#_z8>< z@Ovz;x|Q4}G3^WqH>UC5N@huiyQ;Vb47Uu9RcfG^HpX7H7BrzwoI!K z6WX%hwSC{9(q|}t2BqGt?-IYN(7O(b22c#SRqqVs z*zM45Dp%<#Pz*0UhL^rQAoUoU)Nk(;dXKDnXEHbtV_p0kacG2APl0%`cM9bQaiUdB zh^r>Oc0L@WNQetr$OpT=9I>?+%P2{a;uERq8mVbAE8UA`A>e}Oe&<6%7 zk)8~HI2$72+&Jdmh0MSykryH!WD&E3EFcB@T_HDiT2XwdDgm(#h+q-%b1mgPpnU!Z zKRJmSYAP)IL@e*Fmv`5z`F~tVzUa!fbR};3mg8Yh28?7!{F;n~SQVWE2oiVvFn;RA zZ;^RSp&z>VNzL!uu;S~>=|Ag_wy;+ScI*g$7luydm-mla^nA^8r*+kcT%SK4&r zJvXIyq(d9hq5Wu8kv7}Sr!_?gSde0bz?0X_I^e~^pmHlhj41~r#28Ny!MPc{Q&cwR z>;BdECov+bFbMe=yH=E=R&@E~f7#!PY!4s!%`TMuKAps7rd?|aL=ID@8>$dFa85IS zhPTYuels8Cjvuw$$_k7+1Is5h3zCZ6tga%1wBbk%E>q=355?@TQ-8CJ&%4cA4MPZU zR8gY3N(!`Pcrv88Z7W4xgDrH3YE_6}k8r*Vgvm=QoRAMkB@TDF&^b2zKm!v#;VJBl zJ*v`Y#ZK^nj+m-^qoqLpU$dn^c&~APwv`4v6HdT<=ZJd!!T+f)uuEE?8Qe7jcWvd7 z0&O`Dmt??=er2$h{1-{ zn~EuA>DH>u;u~r3MC>S>T8I;EDceJQL+D&PaK?h{3lWn<>y(iLZD&PC?5%|El>%+q zN)N>(dgGmaAZ9;&!)D*Hwx$bz1m=rE`HA#%?hF)xSPX$UL<@Q%>P+y?5T@>W8Q4Tn^-<^V^q zrJp{M!N!+~R~2$fu=B=$d@sZo7LqlE_)?45sO&21fuu+O4dWXj$EHJ*1%5`Z@Sd>~ zrc4K2Ta!{7Xedik?SZx`d!wX4r%qosaPS$T1kN%oALiZOPnDYBxEw!{L&K9 z!jey<(N>a*WN#YLxELg&W9xmKB5+bn8BpqG}Sn|gUrNqw%-MRGHDh@NJ9Lc%wVCWn7jBA zLv)G3eN|<9tyI+eWliS8_GP$`UTo{&9bdCU(Qke(MWM5Nkfc(7pe@%?^pa&0!<*~9Up@)9KRlW#UE>m(Um$Y=aE|{`%*ORVpU5)n?sS3dEMaOruV$abeWiA|}KJQpJSWhnA@i zj%K-mb%>l91D({6(*A+?ofTsd2rWU&lsS`GF)cSWhF~HWg{8Rpt*C}@&t#y;D9K=Z zJc(96j4aBl2V$3^VnVzIzR1aUF7%jdkJyZV{QC^T_mlH>$AZu(DUf6LOo15d?8p^j zJ0N0#&Qv~~2p3{0sYgerVrWtK>F>NGu&}`;39ywChs?9kSxC+|F?xlzlpitE3h|mh zycmA!psxya&)~HpbVebE2zZ>8Fi5RP_W(x7Ol@jbi{KAR}SzcoH6llv? z4N1uH8fz!B9mqvL+?ykc7J~)56o{(#yqc0IfOPY%NL_D(U!V%)6s+iEZ z&!un>h-0#5f~)a!ZE~z$E5vMajM26`Mw4SHL_9Hk=Rl6FoB}bXSxIOQ3ICK7h_j|E z&&9LSD4wZC#88>RZdi!1!T%@3*Wzjj#Lqx15WkBX)gm?{Hs8lsOCWN8ti=B-#lM#p zGKJTOO20jd!2SHc9#@W#CA>S8DZYCo9RBb>B`S<@)K_2Z&>74XMWcrp++twRV}FZC$8qjCUiSOwxif@u(*9&A@_nP zO|CTs1X8MsMU9i!EhDEu__9rD{Ps!nN@wqw(3Zk2R-Zyl&2#&(!d{JQ6|nkgD)|Y%wceb` zPh?Gy{1n<+-tnuu%`H3oDa2x!(w{=xO-D?Be)qJ#{o((AIJ+YD075%GM z^sip7id^mkLi!A3Y@xFaIi~|WXQ6XIr+@OAFM~F&!9ZKaAKZw^^s>qR60M;eaid#PjSo%T-7pf2#oUd?0xI%rTyWyZ)_3x7PRG>3lzp15yfC*om zfI$0XkyS^{p}7w`$B_(N_P9q1w1+*2Ud3i%PjX|NBw}$#@{dA1t|VcZgnscxVo5`QcFf4UIrLKN_5IX z5?1xGg&~r!(jzZa3MI|!hywoXA7OkWPg}B-28w{#Lhu1k>7)J#h);`1AVftdwXX>= zh7SmTnT1kN%n==J6*AlgVWuYC%AjPLKR_Wg>#P3{DF!M`WcsT^Z zX;D!%Tw&U)`Bb5K{2al18s=4hKM_<})$q$s{kXmQ8&wDgOVC&*IOw z&6sI_BEQg(*MO1Cq@K{GJ}}mv1Yl@zAB9I;1cy-(l4M}>Pt*D_Hw?{g1iVz$2`Y8BxfKjMB_;&rL{BAvq@!vspPe&1$la-#L|Oe%HhuFpv;r3 zAU?$pRp8>&lF8K@CK?R3$LH~NyanlVCo$wPn=V5M2jN%0ILZ6b`7HyzVt49;YBp^W00P>>-MIzOng?jDFgQtu_i zU!dt}R8AXe36Ndgf^+V8pD*Y*r)^)Jy-ZP-eGh3O!IFr|_>rQSajroMaT7DFF^&k<0B+ zWu!p6#mp3FLz$zhFH6m4Bymy@{!Jpuu)M@pU1(QHBiF|P&u7z@PgAFVV4!nhknEc| zCc$taPEmJcMrKZk8C!kNr9HYdv0#@X#5S|eTCos+qnaJu53yLfFksf15d!9yx%93j z5(PC91=UFb>qiH&H5>$4++~|T^;kqYGM7U$_7~Ukor*O&h9@w~AYClPA#1TqO^AF@ zZp_`l;U8dQl(iHfV5bp(e>EHyk^XPPi%*x+u#}%81>$~KV_`mYfuH^4#q^D8AI;uo zP+|ML+cMa(aEhDJ^pp=Xou#DoWypRGTJ!sOSDRIC3R1!@FjkbJ_G<~U%@;O%QuI*=d zdtDrIFN}~EZ@w#0w*(>H&A2K)Y4KfHRL#2QWdP$?JbPk)P&O&MzQo|ZXhBZ(6X#_H zIG^OuD1Fo^nmB>^M8kBV!7(`gPpmcZwin;w^1^iTFHMQ`uxY*}uIAfB&+k6l{USqU(CvXH7bIue4!3N}t^ia>Pb_ng_ z{BsJ#Ye%VnDo#wNTzNnaF?^WyUT1xENgZyf%c(_13;qAYvBuCKgHlgAR(1RbnU)16 z*KKPu^@QA*tkSdTF*=TCQ@ldlKy-x9kP?>%Zy^4#d6FK1wv3VQ;0Q0jyLH_Gv zI})u^hBVZR(;gIOt@3M52B<7?Z&droWSNS_#bGJs_dRW0IS=U}6w+nj;EsMOp-s!f zUZp;NGN$!B#!P`2qj}~ql_#sGD9{eeFNuQ;X}@Th@;DQ^92RIxVuW&n-X(C`qsI>g zH3k!Vej~f-xN9K%ICD&yw`SI-J|%gY5ltE0JsBzxfy*0+$KqyQO-T+nt)oOFwB-|4 z!ZEDq+u^n6B7tqh&;DgP1$s6rP9PTZudSMYKC_0;e^GfGT-|ZlY6##BzjNO3|2PvI za#Wu;mrVweg~b+RS@k66QjP9<_8g6Kz27^Y83EaF{68zZkWiNkA0?XU^(@|8Aw9`os9H#7?ZV((Hp@LDLL1*%JD-B3(rF`R z0j_SEy118e5z-YoCM;jB-N#Bx~T!%dZBYXAw`Dc zPP8-KSFQc87IJVt?-XcDb*P8_Q0EYTPbaV$={T)C&T;k>s3*@b+8rw|A!=&cRLou) znCc-R2*6vPUK)k}r?S2Q*Gr*u9za9IRYb%-MxUEQGyU10e|_`Hsugu!G>Rn2Lb>>} zhWRi!0mJvaNfy58-;DwINKC>1I%Qgm;{mSLSo5C_n3}z8ZPfk5bAugfbfw;Zls7#* z%TA%ZPQrXWwRJFv;8}C_=kffN6y1!Ti4MG}S&v51&;DJi%(+Re0@CwBTTT$Z$aFEz z5f|f#Y%8nB25cBAY|RjYiz&yPn_GiM2}1Bg08S$H{CH?80_>NzwiQ>?hzra`nZfQ9 zwzY*_NR6xdwlD%VJFrU>I_GwO#r9}9b+G8eU~oh)i>>GX-J~jg}%@*)?#1 zKv2xSK=0cZs1SQJ?oa%gyc@78!;F6`!bXi`u;mrXIjJ7b?9cu~qNr0WTntQ)$ae~~ zrAs)aMyR47Dp%J^fi}gy>q-Vn<_zu8FK^nxDiC4}{n&vRyXB-DCJ9`BLMYvye0!Kg{e!<#{?na86wIs?K7n#V)p`J`pJm2r-7#bs)wr z2F^}+uvJ?N;Pi#6Sz}WiUXI^@id%(U#MhD*(Doa@9pau&E_-Cq3?S8u2$D zw_R7H`l&_clr=TcmT4tu*g~YhXnLra9{yV@79zfee!%4X@O zF!`(E%MiKQvT_)?zB(D5VsM>Z^mB3FrNfWp&bfDm=)ZLGN+}Rys=)~HBx`^ku`||U zAO)h%uGayFmLR53CmcRDnpnR7_|~hXHai=)lQxO_@<1o-PkBDb275 zfQyTa$KhSIeX;^^(v)|W&EOW9{f%|8c52gq^gULY#hVzsECTU@MamVAzF=2QfqcQD zGAa}o>>U^E?F)8t)u-+7X#S|V;x zgOuv2ro~j#Vyek8)#Sg8YpHN`ar>lVwh=m~aCo*6V%6W9S}RIpz07O@(MdN}zBCZ+ z;bNxhhdT8~KVq&)6Z-W`@2|wg@h)45f^Sw8ipcr;-cz7$@1ta}l_a}n3dFruq3&;v zHD{4+n%dZZ^8QFav&)E5gvx`Mh?RDL5c_Kt6FT>rGzJ1~YNTP&-*0agz)PzpsDYoh zm_P``?>D(ExO639Kb}uo zLGPZulfWExb*COe&`+*g@C1O}m0YTDzg*0IcmyVY^Aq3aWXS&LPuK)>aY2!le69mQQ!pvb4Us6lC|h0b~*=Jd{GlmfX^raq+08XZJ6 zI*96jj(6r~C`r-mD%tERStU>rh&^1G1+MT!?aKC_lRI#+{b>rLk;+CBgI&cylJb6L z+gi!)DiPwiln+xU(1rCq})7y@8zpiClo>}${3)<={{o?nR&3`>(j(;2$$b~ z?q~o@?9Tim7(*%oJY0mkN*3A5gsdVXK0?(Be<$UwQWDg$hG|h%Tv-T{(R?3 zvH#kRGv9QvRUU>#Y>K#N*amMzB9-!Xw5QyPedotK0 z9S>ADd58Aubl)`m$DyMwC+GBSFO=SJHrJ?l(wxp$~>bCAiTi0D}g7+gD^N;;os z2XH3wnhZ!}I_Xe@L+Coq$Vrc8fS}W`_y}^Lq{lO$-W;O>ajMryGjW6ek0kY0vc#+$ zdF8i|L#=e>0yw{s%7-b?4tB+V3(unI4n~JV#QJhf2y(a@grSsp)}Bk7ut2*9S*E{` zWm@sM6ME5jo%D!dtb~&V^t{pffE(=u8!_@+KO-(DqSb^6s()WVHn(T5m)qkGp$%xvKSl>B*~Uq#hcm z=kh>3-lg8og>j#K$shkH7SpXbfmSqF)b7EeMqaZ-UQ=juIK9jkI)g>`V9`BTl<+p5 zWW%DUGD8+-N<(h&4&C1J z@(WkhmI~EMf=yyIbOt0dKyaIL?V8-;K2gZoM~Z0?QBB9L^)U{?wWTJ5b6ko?A|db5 zaJ?PU;vfIS(=^>dyfqxnTf^!@wDi9&AJ@`Jbtv3XU0hYr%-wH)_3{RtixTL;&>#!{ zOLZtb#W#Jwx$D&%8a&mf>scixIQ*KEfBxe?V15$p#;n_i;7no7x6g{gE^nb3TY)x$F|kCLkTv8fZlyqHeZ~32U`ueVL$;V`t9FP@r4VOUjp0JO zQXzfFBde3Sa0Z`$h5|UimTauLP%pO5a3~|#GIhA*{G&OkXi6$v8V-1wqrr@T7h#87 zBLUxf&~ZkHn}R{bf1xeKpIK6%SUN;Q6K-~B6kQ_fDXWQg>Us7^LQ%6CQL`FeX!An# z?S5PDZRH0Df_(uG)1LK&+URlin$arsM#;*E>DSD|e$CS0?p zK>No(JLCDy9$0KXy9`;?U#90$rS@If@#G1GQ7oS{`w;XTTQOEP<;GK72NW*iz;x=t zc{&m%l``~M0wNng^}ihTzZ_kkIodw+?O{oXj1}c^y{u60Mw=-R6HZ!I2ssJWA`6A< z(6z|d2GQbw0hwTT_uU$t^W%-E%r2W9YYnIcIkNO9@J>cePd&=CrNnHURJlS{9sXs^c+tqi}5`u2i>j7%>uXtdq|`)8L$+| z$Z^8%S|yfvBj#6Se_*gbGEGoI7e|qO1YYiQu`gYJouQ*Tl>ih$>%PU(?plXo`(opb zaq2{W{73(959W~4B=B(Fatfs3JZm(^{r-kF9fNaF&)I2EJtX=DCB(&$!KoQx)PnjV z(OHfo8+T$tp=J125AP#}cXt_fj_=s!PintinkR4p4%Q2^oO(Lj5B2509;QnS(RQ3^Jw;8GG#{S0E>t0sE_9);M<^gJ)E*aVjte#WLJbLL%0Wb~KJ|#WwPBR`9GHVI0f2rOm5I4<;1!Ahzd7F@l!`>5< zxsW?KXG?*cxW1jY21~$^>d574GyyXkV%2MKSN~)nOF%(oM`$ZOY{EIpjE%Yixch}z zqMU4w0(eP?Tgb}I3s4RcI?38IP{L$Ph>YqPOld2Rgu1=ZIlCuSX{*x3I_uTAz}BQS zZDww8e^OYMUm@7*6aMA{|N6XY)Z_UZ-KTow-)av0&JoD_<3D4?{_nI1iUKhA;-qAa zAZN*YK&}Wvt{A^a_{#xPDkdaus8i8^HGC;0y6D=oj6?{?4v>)u086f{MUJIL2#`Lo z+!taIwo<=FXiIYkcJ4x3oZsA2AbtyY!35f2e@GEFjy721lACBlf~HcMOo%_Bv5Wbh zJSBw#eL2IM5Em}^*g*f2h2Ft@Naa^ho3oH(v!y_ciKHEd6lFw>czkP(xIcy7@0?8A zAO8ij@03@RdtC~|>#|aOMQF2)e1gRSK)y_)*oDyMDLqZGc-%}|_>yE(%{tR;(PzB{Oo#dAXnV5&lI96=@0{$$a{0t{z{h| zB+PS4GT1|s#K{0@0!bLg-}sdVoBR4TlK~?5mIiS}>IzYe4YhX)#ENZW>6A;|MFk5m zuLJGOp`Xh?A`=%O0V%Y_UnTtZ83s;RodQoBm$d{WmI$?ZF*Ks=Xt?cjO4;|{swuDOfyG;}1;0tEc!az$bbjhI(O?s7iCND2k=aK)x#)sYI<%dDCaZCO7~sI3x_ zwm8qSA&}+iL}=GOY%H&Wg~%%&XQ>~EH@1q1LYuOBH_2O*+A#O@CkT-q|9q-q&;>#^ z1R$!KcT_cB$H0fK1&&tI)qzIU0oxq~+S1SO^6nl~eT`sa57g>&(1k@}7Y9|4;`!D>mK-L{EBlO7!V_K33 zk*qyfLKPx)YS5HP$hCw%Q=mQQ12AR&?mmlCOUFJ00A2m!M2MYDVTa1fqfoG}R zM$rdYsvY~+8fnJrngUY$e;~~YiM<43yw*I$B-$c26G!}{NBPs-R8Yo~pGaw}KRWhaj)qC{rNDy6eLn7h8x~3NdEQ8&L;a!~&63qZDV03A44A z*G}dPihAh-v3G7Ff7eLB-=NT<`zluTP^Em(*pE9_qa zInS9@0Fy8=NJ!&OftVtnl;j8CkyJlqBv;W>j>QcCB9p6j0!8#HrD&eU${HP$cXUw- zZPkPj>p@yXe*#C1+axWPAT5?4Enbn<#1|c;)|8W|721Q_8^nZ|_3fOSg&Z3-1#;}Z zQy^FEDi>A1f<@KuzTZ2bQb(ZOLu<)kH~Jn!r1c7on0vanemWDHO_&gR**&bHc>~gA zXuB0Umv4rkObYbc+hJ!#>>J$gArbH)B{c0%l;|G%e}CNFKds$M{hp12c{sLBj9ryd z&zJ~H;y3EMAwN-^s3=>_=Oxzj(%VpdJgJQPc<@h3d{?g zY>%qIfykB_EU@#dcB&SD%ppXw^Ee)=fwVgTq28Hw41PmB9FxkrGvroh$gQH=qPXp% zaHaPSxw@M*gt&u?70Y)Iz3@-|9qXl)qSM(qh#O@~R)_lv^TrfL>R+dgs#7CrUEqL@L%|Ernu z~ZJj^zh!s___z7b=(JpNE9kBHx z;_PC!{CcV*W28Wgap|NM`j3Y7Py|npHu(6|owV0LKRFXY;ai9?kFa-)urRl7DG+1i zf4~rI`$i`Nd?Eu~e;4|u7Zp8GUTMV4YzHiN)PHJK_G=48NC zsMZV=2s?iNwk%B4v~vH(6%yA;}!;joc=JoueBi z5NYe8R($v968y=3;W&9wCgI}d^Wrcnf0rJ$_2@5V@?qK2DYfV}HYytRP;%6h=ze}e z-dRo`mN+>%Qb%RJ#423{^Xva(Bcz^W=yIEZs;Bz<;_ZELv2`UDuNmXc<>Ko8a-RcL zY?H)n`&kd_FPTo{YW0rB67h~_`HnKN(6d(U$l6Be))nGw-M$doO*z(-$m(!Gf2O-8 z5H}K^?}cP=1`&3v8&IA?;soaOVBk=fi%>KjB%0--qYe5(pVyA$M-?)8&vWP6Y`mn- z0o7fDegj^@e9}D#$d&5Z6mPrZS@t>Tj^nhK3><;JhEV8hJh~i@R>vdhF=)m?rSxcV zDH^su-vjG9OSzx_udFC%_B6a|f2|bWT6&Uc0Vz%D*|V)sT7|V+F1&dGf6>3N-Ce1L2FkgtnHQP%9{|EEmzn z1MP5T`_iM03LeUg4OjIIoD#g95!5)VCC#l=3b87}W;|TRKQ(W@e;?i0>&fv>%GX(ui&KMeCb5xVca~-8-%P}9UT`nYY}4o) zq&(|Id${v(wkGUN42}kzeUkx;!i|MuA$$!n-Nbw-GWH6@v{z?sLTKaHYR^%lQ{Xb0 z>#|HN`+PcR@0gCH_QAPl;i-UxQ(N(xdM;MQJB_Cawh5R-@M ze-PRs&XXRQo~n*0aQ%s>wR0p4Q=pSkP%mqsGXXSS&Ve>}e}z(mR^dTBOaqs!U9on- zS}KJ%jw)%IBhttfA}B2dVtdb!D<=_uA%}ov6=?XLg4iH*COnilkqaT(^|iexJ7M8P zaiB9i496^>IO)S}N*t>zU8RyhXM~SZNsCfRlfl(6YZbdVYY0vzebGV+Hl+~fLDpEZ zW~6FyXo53qe@)L?Q<2-9mA9m0g(%HM;3#cB}$fa{T{1(O>i;4 z#q<_Q))q-tI1OFlIfMzWc!DdM;Og`Y*Vzjoo#%H(!guZ$1?;F&? z0~EP*2D!8rZz3wnqFdTrLu+y*;$ZOXGT!u*M=#1`f589M_+5qgZYT4X0>yOpSI-qW z=87D1MQl`sHm`Kd71eV^_gtaY1{yM9wpZitmYefba!J?wRhbA6#6#54EizE8ISXaf z#UWuww58fG)Lb>>V(1LrWi!4BgNl&?G1E3bB|Yw#&fZOI(=*%j)HY&n8_(pX*}e@W z1idE;f5e!Dwug(&)?Oh2TOjR`!wk>grrIcNy*Dw ziR>0Wm3Qo;@256{ifA%84Cm&1_+~n^vH{Y7e~Bk6D&B6SRH~`bUtac^=XC~5n{rHT zcAQ^quU3|Wv|rzY1Y5pm?BMCX1$!*lob(Anlja_d$lVpzDM=THLRm8StGabUrqrs2 zxY|x5&d>krlWX}>mkMuS8h5OBKGdd)@mMHWuJ5&}G$J={Z$u-t%2N)Nr}MK?AS*v* zfBipQKbk2F*sWUW1}}6L;X_x(a0>`>k*%aarr^M^LTL9WP6QGSC!1rGwf2&BRe9Vw zt44FC?%62Yqi~iC&h-KI2KcN*zc8P5YT{oa zy0p`~JgGV=#9@3fF(`zCMNY~Vt5X!kyd>z(C;-AZKObsf1%qHM!jpQW)DAbf^&LL>JFN`0Nk>P$I&Gbj}<%4 zP$2%I=d3BViccf|Mb?91#za6OpkOSz&=8#4|Hhv9FFb#m-IMPOj}w{|QrRe_o^*g8aJE?;}ru^ZSuR9s=m*hyGW|dQJzAg}} z%%2b5N`c6QtZd*BVpiORcv|!HSB>-PaySAe>#Azmq_o{1MT0Y2ih0k3Ws8l4GDcZA(BcecC`eXZjLY> zCe>hZ#Vv7jAu`)AnFd0Fb#O;c0F8Y_4B)KEh=9~Y!Ha?;(p+u|XGx7{%inV(14eK} zrAs|Bd!GlzyM)em5Mu(g;E1;E%W0B&+HZI$(1{+1hitMPUWg~jf49AUL+1Qja|%R) z{5*q5Af~GEm2t0~jsKtiI!%0G&B1IQIc0BW+}iP6iWJ`VlSwYk+4K!`g9w>4(nL6y zF(FbG=-3iExf(5IvT{5{ZE%6M>@v`YGiaRgLTI;ryTt4fvt-teC#4rQ??+B6lK^f_ zu^Cd3RZHd1&pC8ye{~_d4baHO-0`eqb;pwuKFG}>Y@VT_P_~~-l2Aj!fzL6cu6YsC z=hoAdnY0%)P&GL_7ZO?vd*_AR1T+)fDpymZLzpdH)J>LxpUvmvNye&1K;;V+>*^k= z94J@uR9rk{4OwZwT4Ya~pX$l)S{3jUL1 z1Tr&s;6DrTN4EHp+5^i^#o%nh(EXSU@D;S3j_w||lh+jJ?9C;C5J=Jq2oap|P4*pu z&Nz5hmnftFD3TS(e3i0~?|k3aodTi!B`sHi-A#l|e}T@qfEyCBBSgD9M`=JcDrMVU za62O)oCXOvHV@X>g+x`bKRG2HbRrCR<{RfRYaa|-$6LGTvQQTWMFPH3G(#bacU2w; zRkp}_NCvydxF3iIXR&xQABV-t`#I1#_=DuYK=_&F2CjaRG=F;3QWjY*(`tItYI-wB zZ!;9;e=WTo=&V|OeVXKUyC!_QCOnE0G)$PkQ4ST4}ro7x3RuBO~RI(JC?S>ta7`)mdKYz^iZn<@s4ofFUl z5rXdCI$y)!$fYQAK9&;fu<^q9FT@*bQLjOWKT~NMNEQF-pQOKgt#Z(*nZ7_tXu39} ze^iyy9zuKALC}Epab}ST&T(7lE;8WkdfwZ8_iDh8NSAm!J}r=AgKL$-vF(zfM<6C9 z*>tqrjoR5+lmcyaN}%E_L|F*MguEa_PrH`_C4#Y&fTK9!^xTc9sSYic35qKg} zp!>Q00&(4>Bo=nwg_AM2A;Yu9Yd+CqZg9ab3|+;!x}J#CpWa za!lwy@g}1xAzoRS&t2or(GrlOC7^@`kPvgr5>#(A?rkzjz#itbd*l#?wJ!ozVr=)| z7@0#Dc0q&Z&;IOd2H9V2giy?FAwxKNQ_`LLse=zpp4G=iL>z7V@@}K=%rk$@yI!DggDQ7C)M*qGWxC4pg z*-A3lw4yzIECSn>IgoThYse9>07nSmjBGdA%YiJNwn7z=82TD~+~Ne;~%-Ru_md`6<{- z{0ol-#cFd*D3lGVrG`!-0UPFiCK;h~{hx~(laUZJ(`s<2(F(F;AslE+;0t*Iq3EG+ zakLx##WAo7Io9qJ$T3)x-xd!0=A3PhoNaf`mZx3Zu*w$(az^X_N8G<{-O^muf#`ia z%h$e^an5LQwV$J|e~|R+ISd9H5a8`9Z+pA!D!>?HY$1V!Kp}%vVPdPIq#-WcsIPptNgMpc7JVPu5-FMu`5Ulv4U;iWnmz|``k)+F!%gd3= zi#(mvbbX~jzbsJ~UHO>kjgb>XyD-v4pQDhIn7ANBHtFx(f2~zPKdHl%6rnv|=3_{? z|E#x@*GM21Eh{O7LKOaErx^jaDy4sfcBVEsSb;*@0%-8{6b575WHQ)V2d|m}sZLQf zn3G(yRkTPDoc+TwsQ%yee?J57J(Ps&470GRmOBNqoXZF~7t1P4aUO|w*32TbH4!;; zUb)^dUpYj0e-6Y1^`Lf$5I!v(ZO==(V)(>VwrO~lkG}W6 zwq+o*^W}p-Edd1pmM@t#CSW6g)_;wY`fyRxg&}~he+g?*cr=j`{W`0PNJ&QJE45N> zg9dyjW|T^KEWEIboA^rcO=H>iV&X5shUatLNsoLdNtg?!MYMzAnHqb!Pq3JI5)96k++~^Wo~%XflmxbbhaVsZc3be=lIrt^uN~%uQV?jLSIZOhk9#euLDNbLcLY!oZ8I9T_C#!gUkYk z#u?%sV(v@#b+XW7usxFu;fbQ&=JXo@tKGB^P*O7dQVku$vVlSILhcB>R|;eou_puW zfBubiS)nbNoskT73@}ZBwg#BO%MoHWf1HYIpr?liCr8c-h$cyoyOZYt{XHQD0OUhj zaz&G!AW|iSd`F|IC&4yjVFq_W#1yWk1h(8^x~mxub*4aGb?Z!lHiTgmvy@TMsg5bWyQ?K2Ter1=g zfh`mgP?v7kWUl`1Nmz;u=*dKeV1?6SpQYW8&+?tqY4u0{=l|LmxOi|o+ykVQe}s;I zajprl34|EQYBErHq~*G8BgVLTd}<*6ezFO1iBp?ak2c9u1}EhLfLFuCOX2c%j)c6> zN!xdR)UEteP4X|-B9O$fh>Ov}{$7Igl0zu3A40Ta;%ryE;CBl2^<%-mL@Pv#o8)ZQo67e9 zyVDKlkV2x})r5GSD6}EnbjV&Qkcl6qra-(oSl9tIPicX2l3amU_$`RMe+al>fmIlY zHt_HQIoVT_L2L#3t3gd1jBJ4Xp^&?WP%{)_7vN+Av1xIg1KpdHC?|_A*IA^-odRtO zTxs;$LA&u)U=sq#3MK=y%a%r?iHbr$O$3 z^E@x6%6fDr{ZnmY7w1%8(J(u+_l21~8*`qr`K6SMgpPCommIknXMCphKn7Yiw+?kp zC@n0VzLfBkT-4E#e^`9jh3e@Z)v3;C4DG}>|1KPzzy10aE3guvcVj2#i|tjzVV2O> zv{wazW=zj{b}JPTZO$Uh2-dNn))Z((ubkUNEIjaqWG=31>O(ALyK_zyy~HC`k_ zww0O!odq(I4n2|%cM#3)Ae!Z{WtKKhpI_nwSJjJ4>cy(?f5nop{>L_};Wn!gZB`@N ztSp!pXn#pq?@I!FA><7rX!l5D2HFzClZl}O073~N+CJPTxBRZUg+6@R zK(w7tYhcT&e<=`a{L&c=%}maTESoh4#MP_jOn=x;*^oi7B_cM} zek11N3X-MJZtO6-&{IitD6we3InNb}rX0njsx+0RPeHI_Mpb&IRaL8=q(FR!rjZCl zTLZh6e?G}Ut|*p~0@>zo(fKWaR#YR`io8gTya*Kd&Toe(TIk$f5ZOS+n@CMIwI+kD z>!FVnXiH9#B9jN~9GZ`eJdxHpzNsF!5{mHsh0dkhlsT_Dvt2=`hIm%8ERlzzOG3n_ zsy1Fj7jI76gw$`Ol$0!^zI@VG8+JgUEg9m_e`AimQ-Ug2%7PkbE)2#pRzgA!t-^ zQkotqYoP4b^=Kk`tsZBs{^LJ0H5+7IH4sLnd~49#&6Kg!hOQvfwdJ27C<9jD$Db9a ze-&A7&gu&Zbd>UL_sj@6Y*#ibdp+SC%xXbXm%^$B5}-TtHuo#L4MPWyZK+#B2iY-p z7AGD_n2LLg6MYtBu}d%W>_&8g2{H9P$QrYxIgmO_ zy=*eAh?Nup?phzMu9!Z`{2`C>ELG+Tbu`5}+;Q$BuREi+55&VY5ApDif07^|4HurO zY=e_5j#L{f#uxpdi=;FMC(~RWA*O<|)ax~FmC9|XP^+xc&Av4a_|3iIZ)z2fe}wmw z@2*_K12Ov6q&cDET2`L?KwCtqGE<-}dGmXvKy-9sNE!777cB-%3(+#HL0C!m9G30E z-Cbf7WT9HmlDu{x^Eg&Zf%tdoBo*=sokt49pGNy@UG5wL&A;9$&{mju-6_zH(D9=n z@(x{9p&d%vsl8}wkC>e>?vHG!e_;!431?K>{c5K2Xh_=^N)Y-s>_O^OOC2b{)J_iU|69TPQKh_e@pAK5Ik%u z6dQ+V=1VmIbz(nt-rI`Vw>OwOnuqRa9-7fSG@s_7+bIa4?Fm6W1$t_|)hURR zlE$w^z(tBA9s+w~*Gz#}W>Sq+9l^$sP7Bsd)W(D zi4(j|JklMhhoc-Q^4BkPf5tNe29k~h8-;mJ06dSIMd<2kbXCRdum(b{R;Ku? z`}XbU0U71^rqr|{pu&+fZLUZich4dsASFT4lIpwon(0Kr&irEjf41}KQ-X{`l85tI z0^nEv9mOv`TrDcTqn@ov%A^F8IINL__&?Q7FyHRtiZiI&)RTermAhq_Wofp=v%)go zX&6}BCZ2QN`92$1=EvWpyCQ`<`6p`s>M{*|yv7O#2rlH=PwM!s`|wBp%datEj|kiK zTLRRr6k)4+8~ouQf3&hW=g9CozINrdxpG^~UdF@&B%&ylKtKvVmlpzN_Ky#3pua(x zfWSpAko<)<-XhC)A=)+mE)ct$&#M`*PmY9BIca@5Z7j4UWehL0kM+urwWOAjYq=*3A_?G1Oi8ejw2 z)=COw+l;?MH1Di@AeY8qbB}FT)oG?cw4J*$1#&^Mv=qp>vo=#8UJ-X(5gv(l+csY- z_9BYC3>`p~f4rtZ(gH4$0xmA04fmov!&Yux&km0fe20$pEop1z>|O>Iph%t!c4q&{ ztzq5{&Rr~DAg}((_oxeUTEi#hD^LrhtClT+m@R>Lg+}P*^qmKY#r!ZPU9h@%d9g-a zNYtrjnJ}&UM98{}3~0e^6v(z7HY^lZOt%uU3<5IEe?m?JoGalb7Z%eD_;8j4PHbuH zL7DvDBoPE-t)S^8boLmqCc#}L+A(-MJtN2)*#u}i7h+G-SrAj8Z z=k@tF2K-LPGD*qHY<4Y_yb#(=V@)IwSNU1zi0U4>?_Gl^!8jsPQ5q%!o*I%vuJBJ$ zo`q74f6%#5j!(b~h3Hkhbbt}MJ6j-edkP&}Wkw>wA-BT4@8cQ@t?+Vdt988P~ z@mJA(25;%!nx1|qgY8@3?9)-?sYUk_0n2{6pGwF)W{=Mj1q{^I$xTD(d@fWzu;vm$ z3Br9`Q8a-{e@zA-EX?2QapT(6?fac0>+>i7f8TT2FW0$nT_C##DcBo*56g=&`W`Sa zR7bgIX_wSd@P?FLLxatgQy>ON=qBk5@t^uZLb z$)8KPU!4bT?9UlttO%h*@=>@j@<_rsEdBqKfv@HnSubM@E|!Rg`qLZZO=P06|MU1uFo{>X8 znc!=xSLJ?rn#$cJ=F$o65h|sDUX)Ac$F?sioPMr@8akgfBLS5 z9}~C=JXQ*H77@;OG}tv7q^#_xu~m(dEke67eF%kGA-rcp#*Cq7i)3SaNj9Pr8C`Qi zTRD4iLSDHUkewIe>6KUgNbDkQ)LnW$Q4FedOLA{bGd3`%BN=RpRk2;e>n=k5a;HFB zf^m>(7ILXSi>;!u(#SW{k0;{mf8Fe26>^1o1l?rD78d9%lA#kXv?u*&*o15wHVs== zn3inR&?b1HeFd`H&_)WhM~Hm|;@=I1mqMnRA@d^ScfJ21V!|yXFxo$nrXnBgn^G`5 zg;s$Hy%mBzL|;26NQfs0?WxbiDDNzRPRhe3?Ra+#y8Ey||4KgE?Em%Oe<#l}Y$g>D zkiKimdJHcp!B;CL7Az^V8*FmOPRoqICNZ5pB!$>9+VRPQEc~x?*zV2$-SI!J;{kOyvA(C&PsT1^c$*ZGz7xLM&`Nslq#vZ|GI3*e3vqD_<{7e|DaO;ApJL+hEr zmhvr2(L`roVnN-&7Pj_?oYXkb0MtPt+uBTl&U-Fre1!Px%jU*|e-cTH`abkM?^_IS z0!N$G(Prg4s=??Z%a|z;ZRq0(WLupn5HI>ceO#g4Iimd16*d`gPS2Vku*LH&v~5hy zkql&8n<)^}?j91+ZObt@B1g-}9eJ{QDeBM(G2n~Q(j1vg3)B&u9T^g+U`rC6`v{31 z$b=JZO=n%nz!pXVe53ZsS5;Rh1{|P#R0A- z)*G(t=>Fh$hdoL>p60D!XBYwuS~{@GbDWb?AKc~|g%f7)#)G~aSU2~H3`?Su+(j*GKx z3M$Cj#TrbsJLlyfUn|6mkDc2g?$D>)*Y0ddD|TOn_;bU3&5j6p$C5j7D2In^vtJFAF3+O#1~Tf|=pv^j_8Ot%x*=bMT!vN(+w5|~Mk z=e`LJf7Klf)vkIYFCa3GK{OE_D0c z!2fl+eU_@_!od;9@VA*^x|w|{oRq1den*ib@nLJ8a#oy~JtHNvSB(HGyX4^VGqd@b z=PZ#b($3Z6pu$LJ<9b#ou2~>m)SW>5kmP$6e^0Skv>2EwuFet7wRqDYjVe~vo%K-( zDEBBI|CXhW=j)JL#@{U&*ek~nZJ~|Jrh6i{)|R)<%n1RRN@67l;X{shZi@pdAzgxT zfsQNsreV1R8#l#NXX!Lk4`|I4h_?H1nF7&m>!+5`NQ&knyg8jRQX?0nf1(JfW?*hE*dR?GS%5^st3mWFXttOo3Q>QUjzA z{TnIF3Gw_(eez`xVsplQ#U#!e4g57a_-AD19|1gT1O(!9<+avmfA&G&U`bnp3poKjZY|_OCv?@!##8%5`e2-Z1-;gw3?KIp1?( zR+_U@uq9rYq77dsN`pEru1BG>z(4^DJU${SK(HXY?l+}9+nYwKoxvehv(G6Of2W=c z*c0?aYgE7Fn1X#mohTkf@q(pB9aFIhg3WJKxf&%5{388ar{J}tzD!{ZBK(yzgZzkO zevK1Z)#7o-=QH}imJZ4FDwz}SLW}au*p-pj%GW-Rv-B=EKVPnA@e+8mlLKqdQ4$gpQ)$j>6djapGkff<~=N5$zq53@wtbHYe zO}!4@3EW0h9JZ*$J+g`v_rl5)9;UK+&07~qZi*3dcV+f?=);xrrm+;avsMsSnPPwq)-kev#yCpqe`(`TbsasfDV#&8 z!Z$J*T2!la)a;B2XE0b7@ReHKaWoCeaMv9NX%Z7}(d}Mj^kFC}qDS4&&|$`>651L^ zqS+48V$0e;2zI;zHK3li(hVb3JsnDMlC~6)Z+&H@Xn7TZz%!Kytxi)G)iCrWZ9)Dl=NO(BiH_)Q~CWBNcjKh?=$ka`1{arBiN9CWPzVx zV>*ZPSUK`o=cKbmoXC~@RZ<|P`z2-R2_k5&ypzHHe5Q!ziLRLfovrQM36RtP*m4Ik z@mT0Y18~#Mh!#i>ot-4RpMIpe6V3h{SVGvD15 z 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 E2PzyAUh&CNjl{UX!4J7$+Sy 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'{|9>14Ex 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

L*7)2xo za&F1!>rj#_QZvIaB+)H#Rex(T+MIwmax#Jq*X_{ou8XN!qfOC|5W*tb9FPGocxo++ zMh5-*>YvZGjL4l2{(rGm5Wv}OfEA=WXX;8k!Ln_9(&7O|lasl0ARE^M|W^+!&fVoIv>L2?^=q8&QF+Hi+?n9yoh!%kj}m{ zKK7twBxc}kX5gI_C*5rLLQrHmJOGW9SehuYP-}s5)jhPB1T#NUrbN4A;!g~#BHA%D zX5qYNGaEF`8Q^SSnHGQ}-QrvOusnbCZ`2KXtIpl(Q?`!wf{3Dt&N*!GIgQQ@V$ydu z>3cd#R##MZGlK~+eU=X zW!;zvzk!3(K<^6*arKO}kcUU=t|X(g;eur#pwi&&zSh#f@kBS0Fq#g#uUM`p-=$rCLOJ&L}0u` z_-BNAKSMSmR4qGaWB?tHJM>DMZ_&*YGPDPX-e?RG^8J z*$Yk&5x%gZGk@H__}qvwjU;$E`1L4+9=Y(olF_EbT$k2dm&`(Yt*;GtdJ%!ypq9t( zs#|~J{1F+te;4(m3;aDUE<`&+EGv?9M5sk_g&;yTQYkpwvO7w|pFN+X^#%m1Xco>E z(Pj7uN??n%r4b`d*O;YiO42pu=$c%ICNE*wOBnVNmVY}PmOCBP{m>A#$DUunA|^t* zr9;_*2&+#t{f~yhW~b&f?_?zDe=z|nm;g=je3R3eDRXYL2X27DAy%A3*sV_8txg>> zIT1?`9UJGv8DR;eGM;YkhHPC!vaTst*OaQ$J*+NaWmqhlS$Ip|O5AlN?z(RKAT33j zj%XLKu74vYINg_)}w6h0j*JqGKuXoBw4!Ni=a_#2NK zioSTB5k-I`aMA*|QWLjQ6HBRy^5mS#;xP{eHzqb8yRO9)*8sGyv4 zGTN2NcYJ8^Bvk%*A_$r?`#^+(MA**h0WD&1;EB;$i_c9EZAV0^S)IF7-MCyNqVI(0 z+|9xJjAaD~fg+cX+wIiL^CO6M@bAaj#D5X}Rm?P*y!w)I{U$R z7CItKBIpQq474QL90Zhk5e~P+jk8=D#n~FT2mx?rDB5z}sM-vqxK|R;$`WoL(S|fF z^yJ<&&-|>0!xR4o)x{@bC!*aE4@KpWXj70EgN1>RQkjU1h<4`;j`&ordh^yVAb-Mz z#8s6@m93~nb#^;9bkSAb@;8ooC@RLVSt5L@I;D~D_>8+z6rmMGXuUWh3#Hs2{YBE6 zhq}XAY6-v!;$mC9+V-kUZ&jvOiC$(^xcUyRzQu`PuC`iiwbsTcx485&SJu+F)&kHH zYb^jQTx*Fo)w#2Ex-;LMYpu$g=YNyA)Oz*JT4~#2M_{zqs% za>^)9Bl=@P-@C*jne_=oXVI<7#t`9C$!hXWGMaW5qK)ZTQL8MnL>?(jM2fY0Nk%7* zKKFRyqkOR&;#5rajHv|TB6;de2Q`|5WeifB{Nh_*XYzm z&o1Be^#DZpUAV?2db+TP8h^od`}Vkfdtgms^ChddU1i*8cb>EWoOtg^35PQ4kNzuC z!WWV{qFOA)agkP!BoWa$pNhpCu{G-gH0uIf&81LAn@9@lzg@`3UJtM52K$2SodLeZ z$odOo;Q(NXZVDsVP;dsod!oMrz&T*2fSm!xwHVqG_3hjc0z0OMpMUIvz>eX<`JGdS zGbZXp-&;>cXHz>-R5XzWaPNAx0$xR7qo8n4Bolw5Tu2v-q*Q1C=cL-04$Qpwj_2Sy>cKxfq&1vk`X9EGa8Zr@O>xL z9f)u@P&tuEoUv|VS?6f#2zKMwmw~pT*x!thHKC2@WZ`KWXfA2E+>rzWz{MV^G9z5< zOsNs!Lp3vyohlQNe@OyR4PY)H-%6l0lV_UAGt=Z5BAgf})z(R>{p#=kA}Ranl>Pjl znzEnlE+V(Gn15SY%&jcuRu(Y@vTYh%U$8ueBT0ncK)-RIpD(1ZBXT8DI{Ko*ZiP;n zgz}7_T}E4RH^Z``sN_Q%YI~C^zK?BUh%V9QDBI|S2!K2_Ps4H|RaI=G6DAxVEA+eq zyyVX#-r_*7j3G8e2(5xZW(2`Rl_G{p5y5`BB3A%(4u9NPF~V&Qz~Y3Ws0%$t7aEMd zt}1-OwmGj9pykVzAOH*N5Lo}MZu+8g%3Wn@dtt4jVPrUw^6rsiCsN*hDD6I8vhGgZ zJFWlZ^|R9dA;3xGGQo72z$1Jb=k+lB&+(yrbe5A{Syhc%!zQdDS+#s3+3HM2XQ5@m z&gh)-f`6slXnWAwRJ2Zk)6$cXY_Y--$)=Z5q88!{XK^F~dE`hcCnH>FYJD@Y_p+Gn zWii`wZibr|?m-{&k0J2%tN-;;qlvlhCn_cg9#aIx0^jBv$6^G`esZLJ@bF|Gnc>XQ zoCb=6ENjpLfFR4^{$mL(R{&TdA~xEOoQu(Sm46AkY($YY6~L0dvF%{gRzx7(gf>NX0cP;}GF_uoH+j z2Cg1yB!Ue^S^ie$8)ByI>d6RwFcS^jM1N1w0!i<};SwF9`$W{=$`atpY$v9g?i)q5 z-_W}dkD%HySE||7k>{LBcur(&=Q|U&6NAG;b2bTV4$kBS0ZY6*CjnRn#!L|5bt>b% z{Q{%HjBue#>M?)+EX2R|4?%6e;6i5f=@O|Wq20-7Q=*X#Mj%wf>&nUKoZkLMiGLTO zjsA|I?uka~e^e5Hke)?zDF7^N<<>Cn?qQEcXj-89db6WmtG2sZKiIC3jFc$OcQS&F zRKCg!Ve!Hc$FNNr0QSHv&@zw}ccs2CXVZewy)JLTzU8Ol$H7{#OUwTMi zddYGzXV2-{kPIR(DH!5UC=NE;pW`t)zJG4|-62V9nyq$lNx*>y`G?LLdS{-Yw z5so15&E?{ZT4v&ipI(q(`%N^4N9KSf8_87gVvizZwD89n&X#qca|H40n9(pO=P|MK zb&7!-AzL}2980uWb&AWKiGSc8+En%QIq$J(NJZk^%bfF;=ZF7<*xn55Cg{$EDz<=Qj&6=D9RBIa5 zr4=i`WVO-Ia+Z~2h~vR$lK=14Q%V0>6w(+ZO9b1%xhL9>&PrU&M~(2;e(SgoG1_w} z{jMGvOa|eT>aHnU&z;?wV()q`am;#9Y^F8g^VH44XCYEN;KwhlhHy~A|K@Wiiaxd& z&x9u>Kz_CuK9@MyK7VRpcrq0Js)pT#6i&<&gT|7FAr=p}t)BZ(J@oj#@gjj08!^N{SI}e-=K0z2_ynKcA;IJI!OXoxO4LMjwS2QbFe|Dsl4zsFAC$ zWTZB8XxAXj$mTv8Z3uXutCA`x@j57_ENQ32w9kv(Y6oq-Cx7ZWC$|+7`0%iG0&wY_ z`9i<;Ph#@Mg{;{1euC}#{>(*60#KZT1wa8a#|Rqw$DSvECCO@xvmSACJl#)trnJMSo#(5YQ$=Wr?b?HYWpdo;aif zNy8V|`Z-Br_*K5cs>ulFlHQAiqew-8NL2piBX{|0za1OeI9uhp4JLg3jvCUs@s8{L z6HA8P`WMUfMsY{}-PNBe79=&>f&)WA;iNY#eqmAeC~lv@97{#BQOpjHT{pgacwYY^ zVQD!ZcYg)%rErqfkHvAfmH)= zLRS+MPOoV6nLvXg9-7_%RkO-9h*`T zF^hmmO?_o1qo=x9-ivm&U~-Nmur)|zBqJP0wtpiNZ7L+j3P-d(HPAx?F<|TLhy)uc zg1(Xf&eqJO2wUanDdL~qLv`kNoatgfzB7|&*5SEOv6mmW(5%xXO-Kx8JDmx90jt>Zv zz`4vLR}-lnpxq#FSwiy^2wOFm>2^~rZLFxH2!LM`Ygs(1+2sN|GUVK_qt=oHViZdW z7loQ&{!B!4N!u6jyqh>`kBW-W%?)MSMHjvidGj~M=U z%%UN}iqk{=7(mOn^hua41Zn!LOGNt+an7uyB(O2rc_lu^sP$&#JYNM08JkCyuEH{wFo4UoDx|n%# zUn_F(+82yq>n2^H_;ukI2_QIu1>jWiZ(0CoiDn1@SXg5ulC9s^RAR=&*-NyiOmy8G z8i;_Xj!_SaQMP>}J5m!LH>Oye;eS{Ja{6z)@7dANlyqFKWF&%c%Zafd;+`inOiBK?&^H3Q7M=lrXR)L+_ft&p~nv_pECP8ZRBH+$ilYG2G~tS1t)>@LY@b9!na z+l3ULOrHMIPk2-;)&$&~TC;+nye_};v*_+(s2be&^!4%c}g zB%E@uGkoz8@gifw99}vn(cZxd>JS`@WN_TVMCu;Q?jDSk_f4*3M}9GGxsU*xer?<8UpN zi;-dgJ^{J{SyP(c+9|aJq9tkUMCXW{Lmj+kB1xN^Qjen?g_q}s>A!Stn4dZwc_DJU z5VNQ zqByU79p{CmAs47PuQ|@U9p~L&$9V-;P~`csaPSd1et*Vlw_>$NOL96^>yFhr7qk#s z?a1PM8mq<6oX8LpZ7R!D%4J2fR(#H4dlS$u>VOi6!^?1OejTkb?7kucI92B)65l}4 z+C;Q=YknXphEgbow*hoggy;XC@CsnZDBt+9=dKCyoqzO4A6C*2OYFzh_uIAkljZxH zC8OiM<9}e1x{}cs+gnERF&=SGqY2{EMeO4`_ti@H)xwjtH05V$`g-x=$_PIx+fT~& zle+z+Za<0HQHb}P1+2sIGXf>Jq341KEq&bciOwC^ysEg4@KLum`VFWS!GmBQ%&sHC*dbz6??xSrnx{%Xzw=-cm`C78A{hT z4Syl~f0IwavE3Mc;^!=F6AYQk5_q(`FO;7n`Him3(8R%WNcvL_sc}kZ%&m@M#)XLBu(0 zDZ6qKSUpirsPeyVmK^w0GFeDZeI3=msFg&}uZ(u&1I`;?TLs*6MxzRnkCTu>cmy*e z@l5gsvGp8yFIrSRZF#&-TULc5dr{S>b$-L`-!2->BC`UlE9tNJ$(N`wd)(4QA%6(n zXnc%45xr>fhYXm zZ3L?|X0Fq(5u#<7o~xgw6Aldf%u4>lrC&xS|y{B4qE6*HkYrCqWcYeZq|;!f#{=>S`=SgP7Ve%6s7qo^KVm%Bi^h z`ag&wb}TnubYcOzu{0IrBMVlp>U?DN9h7|s5$#L$ods$1nAQkoHlWbHDUdb;z*Y#C zZXrlIEdy;Of#ViXcfe?OaDUz-p$JaOK%g}ccC7|EGzcjbG%l5@zc4fe02byLiv`k( zMsSj^bFOt>-T*s5^d-gez~v(HgfnUIwJ_S-hWCL@>NawLIQRS z9-seqwy-c;hy-4SKw)gsL^!0pnu#{Ye?^fsHsXs7No3%QX6kz8DyX5nBY& zxtKz`Aj(-lhb|ZN?Q;zh?J5neM)qHXf=%^VB5_T|Oh&tTc(Re*yT=D?pc6CPB*Mq4 zqRf*qpjHCn1ket(<9`Vq7b5n2#a*9Oi}o-EE)D&i$6O#RtTNt5_UYGuloV86NYb$9 zzadG}n52QI8t`<&W;$UroUj?(Oh-{@bvcC=zK9WQ>}V!>X?``@9fGytQ)F|Vi;0%% zTb<}1ZfqWWZ1EXJu*G*V`bNt<E>W$?j9JS$jjv9IPC4UlQ=B6ukGnu-XOx@g0 z-84Ff_abM7U}Ku$aUcmc=E!8mzjWzBuOM7HA`w)I``;r5$Tzc^_h5h#q}Rkp{e7=w z1RKv9k$RkvNGP(cB^wbA3oDF7u(3UrNH$sUcZqhIu8@9()=LtQU_zE)LY6o}lrD?* z^|*#&Unkle$bZn|Y6Xg`SyKWOEMO(AF%eE6!^)xXxD_Q6h;XcETMma`!`yYk++Y9ggy=7Zr+9=)#U5Wt z^g>z|*r5y24&`T&zNWIWCa$xACrF@OY|u!hn;uED8-Ez+lM^Y#39zl%mdzc==BJA* zAFJbqJu^a?B3m9~ea!yo(FoMa5s$ ze{n#Wd=0q3Y&ObnHj*-})|4^C`WakP4#i<5K1%rR!q^%vDOypupbRZ2Lkmjxf-)W! z+|q(Vw125IR6H>SEVv~WoQET>YVwY6xZ5|}?HlfiyLH3mr5lcD<1!B#+~5t@b;A+F z)k_*&Hx2F<4esXcM!$pMsHUG7Z8r_2r+uhmDrmzw=HhjmDSSK0%S3>{>C>{Tz$o;- zqkS*&5#^*Ap(DW7n6avAW&^pKGg*k>y>KQA5q~r_BKy^(WHGz4R-IWZQu+kc;)bO2 zI$eIh{(FgBH+Hc1M2+HDdhq2CX`l2*h_QqW!?|oO5?eUo{LVV7hfWh62G~Q-#g_08 zeU-8Mbo~_>DgM9Uk4H;-{E34VKrFfz#HuDUSShJuSAt1}LY0-wD1VGHWngpI+9D%3NvO^i;JAVi+ z1AAWBh;TsJgSfoN4_6$9D-NNo6N@|%?gy^&MEiX0Smgy+<7+DNokczhf@hH@*ichB zi~M+M4k|ftiH{;$;-jhy)76Dp(POE$Q6L;pR$0~~zfMsMBiL>o`1_qFEa)iJypqp2 zB;Q7$Ambm^A;7|Mc&+MrfWx1S%1H5uvk@Oi!W{ z^Tw4NaWD|HZ=`!*+f`+|JT?YY4dz)NTSr4Ik;-3D>L8MB$rSx|gIpqjvj~DbBd|qw zcvuhP{f!!>Z&WDFEGru!z@%_r;i%igcVk#`>i-=ywU`S-w8dw6m@T1>Z+~02t=zH| z55~E82nQOu2I%m3IJ+09Hsw~D*2Ej+YCH45STVa7)o$iohrY+(LVdS(1cY|_3r0Q-nXT@P@N-STUiDiHnF54%Rx46k~ z(!Mo`xM`SBC|yn7_BR8!`yn~}@T8mn@t-Gj)t?RH3L%~=M0~F3TKKlvqd5R=4nT_o z(4qh|KhAf@JzArnxvCViE~pMg-X{J))ELq*Jqj~GpuSfm*@!kptA9@;AHcCh3F1^4 zh|ZRK?vbcQ5WU7{A>My(95rRACnM$roco3#ehzLNju6;HJtrgC?vaetURcQZj@ecr z#u)r%pmPL*t8i>Y8)7KP+BhzD&y2_|tt2Daf^2It-(*eK7e#K*V}k;5jSq}0h_6X3JL&xl9VYol+& z2;_7!Wr?=B3?~ZrOkAi#+6b;1ZNvPNWlqYJj~8IrG}u-W3SvgG)tQWNplKu8kKVTt zy6p$bgvC=@7c^@G@NW0fbup4G!{R-t95#d_lF{bm*vd2tZGTH2I=WKUjqF$>Fe+}y z+7oTcajP|SdGx`uKzZ0km5oR&e()B5cmzQH@qdfXK@1g+q8I!r1b72lI49eL^)f2T z)fMIHigIy9xo~-U5?y&I+>6?d5o~8tSTceQ%PfFI1iGXKI^0Ic83BBEL3-TDXp_Wr z_hj^qFY)SUe1G&o;F!=k_(hAp%|&0=e7}_fS}OT+DV*>jI>?R#&QXEP7!hn06PAeV zMAfH@x)TcbZ@2Q``BomB=v=;2Ebyrcw?|N3*8Gk+i+`waH&?h_;O0s?>4xAjZW?xo z1K`%-nn;Ati`lL52#13`bwuA)-EJz8g};?SC_jRT$!Js9^6bgb=9BjN zjo*u}O$|Uv0BRyh)kG2vOQrg|fbRQRl9BKG<@VQrpcebUN=t1-n$;GLG zlGWX*j}L&l8YJ`q4nIZ5{ja?m@CFITC{Q>?M6!irv>axvOvk8j7EEj+F+|De?47sr zFGM10YFfkqcczi>VYDgs9=tiC{rP;0vSceydw(cP;6_;exoIs9$Q>w!4K`M2RLUeB zh}wYDb83yWy2Sh!qRsHCjbwyxOjUiN-7!fmgdB;^HXCkN5SV~OFA43^>{%P3PyhlZ zkZiRjBiJanpC7sX^G#K>Z7AB#Hx8-?Akk@R>ASO+zU8HF{f}7ss+PX$rLTGEYg+oW zkbf`&tLNEZ@DU+OzL94qdRY<&8>$%ohU~u)GTS$fEYaf+oaL_^e%x>TLDFJ#_Q z%!d#tq-zT4nnF5V*NZ#wFCg9wq@C8gi8~Enpepx@NQ$Xtrde zc9e^rGgZN#78N4sf{RB~#5d{|9w5TyMuJfJXj?NG!G_3!Ba5C%M-%E;n4C25jg6#{ z5h`Ou-=Ui^J&l_P_nO=~^Or_{{C~A_BD3H4cWGE=vSVOOO#)}n$_fmLb|vb_cqy*cT_j|h&&(*DJrgHQwxmF4r77xENQZv zYy*LZO4X%!KQwjZ4ZV5&@CPQ14Y_1P=rHYje?JvIg60;UCtU;H-B)3!cZj3 zh|c>TGDoxs1~@&vta70^*hoX>$0FugS(9h-8F&j$twp z?z)DplL%*q^pK^Cdo9yLmgyni_6rUz{zS<1s$Woy)SzMYngqzlTBKtw+^!5nFGr%y zQf2LtDjQ^o40bFuEFwm`fIk=o#Q->+)CPN<(V|qHEX$N75#w0jnSZYIgpE4A0_UK5 zfHcwOsPW1Z!jzfj5*XnG)3%-kd&wmyk}V`uh+yM*0wUQe*5M;G_#6Kr+FI!HH3e`@ zk+Zb(t(1Rhmgl93bJ2Mb)gB_GP8B&1M$U8{;1VHnjx0{0z+1-1qwr3GMot79BUz%| zF(h|Vxke4YMMWke$bWb!Zn|G=@fk+2#dk4+4VxtZJ^@~1)s(n)(`y9S`gvF|j*A*p zE9f*Y&D+aR(HB4xS-G^K@HuCN&qNzT1|oh|W#Lw3VKrr#rZY@a8Kxk6M23k7AIU>_ zO$E?{y&p#BT4f5t2pofF5FkUe=(&gqzC`N2C~Chb-_?Jy9DkxMhiJnwnlk-2GyQnP z1*<5nz5O*iFnVU83;?G|IjZIy)v%k!5Vo2(VYC~A-gDU!p|aA^fKMdbJ(JPq08jom zY>=1A+5kvmObmG-3Ubp#1s(vZE_4i=KXK_x0Jw9hxpj%>lQts!zlkIe(e4OUL+Foa zbGWtc6NdiH>3@LcbU;X%hmGh=j}HER(s@c3tRNsCJMo(>A?ZhWOkxWNt`?-BG&3BjI|b|!pNEd;8)TaBH=37nkRxz z0w*QHc}Ygl2V=otN+)Et7Zc@4rqz~+wiS7;jjR@|rx&Y%GE|em!_X=ms~p_*p`86? z9lRwSyniJfyjA5Z5uL1zi33DidRtUZptr=fv|)9H+uo9uX}X-HE?;SpX|>3-Dsq*I zJ*6d2X~|Q%6>ep-|iB7nu zC9a_|$ydG5uI5ZelI6}N8OhdWGQuaa9p!Srvwuci8sSr=no>hGY|kHMJG=!NRpL3jY)Kp?*lCKGbr07xKH=chPKoP|t$0MM!m zTrHx_!Q==ifMWOI-NrCxK#!sDieYG@`&)l^%X<->9i<|*Z-jCt3!X$sI>&m-me-lz za8Uu^jnIDt3!o<0Pn%bBGE(zuQ}b#=^J-=h7(q6AevY3-baI{Nzpdc50inR6;ebOI zP-WfB=lJvbZFXgxX{pWfE;Iebb z?F1Qgf($y@D{FLI)m!ck(WBDh;oztG2bx;|FdMK40iZCb-hZ&2)ULABuEJJ40W_aK zV@D`~svh939^grFfJt$Hr3L6_<_3RK+-C)v%G-1;L0wBw(-H&*(WYECsMJeKP|OU7 zHHgTXE)BXsT!bc2GD0DSw>A-kkof;fCr_l1a&5HPD_`9;AM01?%Ip*27}G|yJ!)0} ziVidpo!tH#hUQiB4}*3Y{6iwu!xrBi<00$KDki|@3=d9{faMl11VEPFlaYUH(ZEau z8-3IJk&wM*Bf__!TT6sPL8@0a?=|G}A@tf5`%TFpF*Cns4ShRGK`5KSMPb^|<5n21kleX5hM9@d|hA5536-I<()4{bS z!m&X}7&YIFG{tylmSV&?idlbRC1x!G?XF2XPs5zuWY%BzawEp09SpSnh^h)+|6i)_kG=n!o;??yNC7|fi=m>l!($C1|8A*s2^F;>7HnyA2NrfclP7!k#iMb2J+=rLDTuW%KC9q2& zzhg_{BWI_10%8ysR7iiwt|K(p5t^LhCZ{gT&AYQqM7ZPW4iat728V`Ib1dt884ydhF$fH3sFu*Ap?Qh36b+k)>qFiMQJ(&n|iEu|xvwmPXgkPPLz#eGj zj7x?H_w6B|BqQ~HubGVSS}pCiebzFd)&kCONBn*}e!m^RPsi_5@%lwl`Io(-1q=C~ z{@&yDLT0C+`(S^-2OgN7m@{^cjK2=S1P>^!t5J7}UowlhB-4Y6nr+Rt?BQv0LA>8^ z7~@C9$d1G$9=>X^>Y)9{We@`Eev7%*bp_yx8#XM82 z5+1Z-{``duyxAy-OT6M|N67OxK#dVcrB%4jqBo;?1mSrFW zc1QOm8O2#uPdQSZ^C><7V4sBr;Ou^lU8&1_#bv(YGGB2y`Ldqmi*}=zt)Y2qXx>OG-)PpI<5m*?UJ3Rj#6wrH^LRk2@`xEg=oZ7@^Y-`M#E=tjsG_$k9x&<%K#afHlM!s3wA;-dj4Z{d$q1w+vJ8npM&gi6 zBG`Z8GmKz^5G(*J7yiER-WT5Z!lz&OX#R>2F-H2OA*XUtw=AL|qP~*RwrW`Pfw6ZZ zD~=+PEv76H!FFDGP7R6J(%x^<-mis~AA$`PmZ*b6XQd*c~k{G%Z zRf9o-Nr>20R2)L!B6~E3Y7|B%KVlovZXSOuZUmYd|DVcfmF@L48SRFi>tJ>gZOxfB zIqtDdPoaj&SLIFyAj@sj%}=0>2;Zc07<-pZt$F#~oI{V3a}~XbaoEH-R3oa|2=VRQe$fOLj4KK3|FS8BXWDoJA4kp=#MkfUzw&5kVVRZ?;{ycxi z=C{nwhXE?`P{a(8EJ*_AY-1r6!1+fFp=h$|%&I(OTG&M`fOCLXsbDn_YmFEm33Qgr z$P1mjooI6u!dV3SoL?5f|Mf3Y*0_d&95)sDs7H%#*J#;lOc>Hxi|*ZG24L1tU~Xu^ zLTOw$N|)QC*oh83sT+&HQG+V+)k1$*`gi|+JbmE?!NUpbtS#2-iw&MxW54W&A+b$f znE))j7d7mf^d-IX`EM7$^nlQ8WtM$TeaQ0`NV~IDDSpB_Kj9xm6Uhmp&<}XGB(O0k zc#I?vmYA<5fM6m_MqBd`8Hb0hGDCPLBQ-KiH#bZ-H)NTz+9K-hR*CZoV6T62&|BD~ zaZqmO+SI?rWo4`KJU=JSGBWk@JGLZN?6vkUrI)UKF7D?_FG(W|5$xir# zHj5WyCL^iIWRFqG921^FfxsliQ-Wq=u8~w2VnZX^RGtMC5`&kJh9((ivIw){_y!l&~3X&KqsrjXi(-2-=9`qPCul zl*?`%>%yTQ{q8@OGE3%aCa?=K<&Aogj|~glV8IMN+jo%N0&s02iq|}Ed;S;p`D%5J zcmgZj;)gu%f%R>1U9V5x_)!LBzXf9N%-2bw1j8}nBN#D8!GBRi()yd{m0$LO5}BJG zI;y|>#ZNDxqgvSTA+UeZ)c3_j6WHjdItP>htbvBHEJg09)%E^@fZ~gM7}wnI7vCRR{?6)?@@*JHxSzU{j+4BcuV% zC4DSozhYsKVkMI{R7E6$ZK9??B-^xY(#8v@J^rqVK*da;+{AzT$>kHx=^mj&I5ttB?o@Uf#+ntWQ2ppnx>}8b@cQW=*%7>Wkv%#Rj6R0NU6Xs zV2g*ou@q1thMs=}cISai0!Tzr8LzJ+EcLtp45ieF++0+BDX%h*HfJ(=srnmjzsvux zdU^#Dgz{8kF-L--fA4VKfA^0-S&B0TRtq-4D%14FD3wY-3tJSw{j6-^5Aa#p%J!4z zs*WxCCc7+BX{wu*cg{Ew*u|AOBd}GZWO1?)(e%x?1=D{dQr371$*qPVqFLgY!Pp+# z&z-k&K#M2EfQk%nhy`Cgu8}U){Vw)FLk8BDiLa7szONB%Y#K%`o08GIN~U7u z`C{QoCyLiRZyQ@EFGn$m>celQ6!pt{jQ3?WPh2B$EB)-n69~er0Qcu{Cjoj3oz6nv zsP6Q{N34HO2;gpY&Wyo?C&01XDBT#LFX=cj$!Lez)Zr2&qvPEXjL;%TQGsQf2nR-J>({cOtrpy@B!Ei>ED8XGRImWR z!kvLgwjtB_lt|Uo9+!;p9l~ZLZ!=Smks(NAZ-yEnMa4t*^#_Fm}1Zp`M$rkDlM6h8x3MW4A0?pJ| zgeRAnpajGkL$r$~*fok0^Q*%>0+40dv}mK(qOc$|1cD7hgvvS91c)|u1^D$_>`Ql6 z2K%-SL9BjPO-ACq)X;B0l+hZa41j;rxjAECA^*Z`DWt&>VGND)1UN(#yoUhzo{Bks zDV*s)`?!vEtz%v5*sXQ!-crn!U@q6Lu0^bC4eMIMI##fb1*~JeirxzBB*RS=r zwtn@Kh@(zHfZagXi0%L)oN0RFM7Wrlr6a=SOdHYprnJ2LT}$HQ`8%W94VQl)9tZy9 z#Ysnk2**yrPgLV)p$_(iAr#lrN=qcgu`-g;-_1(9w9+nG?wka;(snMiUF&SuGTXJv zb}h19Yi!pN+r7e0udrTq+q1-ajpc!2sFmBBN6($8jUfDSB8Ak&A$80PjrF3=WOM?^ zw~%KOI4AE+PD^~;1$ow!tpb0D*K{yn0bbW1hF$ICM@2a`0jG3@Vnp9TVf~h<)2ld# zL|T-}Oh&swha%|iw{5w|MudwzY+Qq$Md(?DvkXDxabqh~dGmLsf3 zzkK*)|J&~+s7e;CNKGqJ(~2~-A`N*~w>+yD5|~xmAv!01soDgB;m8yHC>RPEfa*-(J90A%W<^UXjYpT36S|4g0LB#wPMOfgiLAJj81?xQ8F?*wsU6BehC0Ra%^KpxEw)*0oXAQ`JHo-nRA6> zhu;|M4-5cj9U7bn0f3VROSdJ&V}kn#v^%`dJGvi$ zNk;gLj(wi!cnmjeTsR{K-En~$ff*4tqc|@UK5z^T4IdaKv7C&~+R6WCv7+=jW$6 z-;x|3Y@Ga>J^3|z@@w|w*VkFEaau2kp+#d3gz*Q2@fT=^o#7HRexB(-7gkXhOR1@y zS#6}I1`%FD8xdZ}l67~-$7gc$%QhmsR-Fc;wJ(2H+e`&^L( zo37tX0{iT}u-v{zThsMOB>GxhKbNoD;Dv=q01;)A?ve!XN~Udz5WyAr8$|e27CW2! zlJazJH7>yrrG5&a?jJuydiK+mfW z@K<7}-HGSNiHZQuT5z%iK^T7ufM1t6pAtVVCK1FBHo{x+AP`}*=KsT_c4XQ)nv_UA zyfNFIXb;!Q;;uST$B%!S;EWr7L!4X z@4x6ui_}nnvzaQ%dnw6Vh9V9kmGzs;`psp1j8OK-Kd^js7ghA7;sJlb>xIbm!gX}v zBDyxmMonI58M|1utO*e)=eX2H|Ayr;(N~Ix)5`@HKbRpLOIDEWA==bR2w^fJUEv;} z5W*Jmp?m}_7X|oqlpMdl(zY5>&Vd($<|gfk`0|hg8|Iur5 zFeX@s#y!!oS$kB{hYcD>=(*}D=-!r+xu+_BH&yP9a3@eI@5+BKHn{vnmey3M&(_uC zvxyUdLSQkQJ2)*baG>gIq_sFFN|wEnM_Fca|zNP;gGb)a&6ghcsNWq7dA5I!jZdt?nx%#nG}h~ zOR0unv0lhV#&~~H1dJUb!8f`enMjW7=CJdA{4@6NG%fT)3;obSe`}$?xzKm6^Igk) z*DBu?TXlt2U6EB+U==LB;~wHD11YY$Ycg_NH62%-gZjn}Zk@#l=Oc(Gk|Pybb47aZ zckISF86mxNq>z#kQjH)x#~}CEFPGj-l2;v?=!5YyONxIXk`>`|VJCj0!9!lrt1obN zo=yt@EDdw4iC_ywEF;)hpBHnB4E81}dn`K9r5)7;Ae1>d?ScruN0mbox42GCEm-`8 z)Wjk}zYT3f=LY1|Un8|;t?8IkPLqA6D3|Nn2RO^|{hSV}a4pqZiImPLPG=N;S!(_h z!5yNF2tR*-wqlj_#YuY%AF0kpRR>9Z4e2}pAUfr=+z%G0hzzv`F3-0kk`4XgoRT)^ z>eOVkp(O~qir6Zl>e6{O4~qX4VTl0VYe1lo2%jmssHdq0x=J#Ft#d{kkZe^&<>dgO zwq%5JMVS^Nd|?hi&lX4NpNu2>Odm_#WwCxmD)N6{X@q@Ma=a=zUX>iLN{&}09tk#- z0*-}XL!>%<$R`PYI}vI3c2v5k09ezGizqm{5czb(mOk;y z0SSNj5KtguIVQ6j69fLr8=Lyo3(_&14a+Fd`2`Whgo_QdsjgkAe?A}y*orFRM8_34 zu4B}lh@f^nAS6YE7KAgbIvMSP1u}C==s~+c2j#?&w!@wN&|}d060$ZeT~lTd%k73`T>7-hiYr5!2f{Meq*5BIL|;`ORFX$Tn-{* zI=Y9fGat{5n-%RVPeR4lW$oAS?@(sN{dmZ@KmON$qgJ+0%U8Z3>(kuklGbu*pxwM9 z0nWX~8!{g8Dy3nH?#EGeKN8^+c|%s;ksx1#*cr){?6N>sS)jN(rMQX3?K-@7+rWS8 zj9{y5Yz2bNuS3vrM~IRHaFQZ?G1{CM&^b;ZwgYOVMzlqAuCkN)i^ll?XAKVhu~>tF zbjsD7GCAy(HlwrQ!z8dPu0Y600HGOZfUrcg3v`9T$-hzX>WGFryjQeCfZcqdpe6<$ zh!z5{1Y^|*HZE2~@t#cjFz2Jro9cfa93JlHmC6Hg{Gt(T4N61-_O}xUhI(%V_Ggm| zz-z#r^u2Q@{hNeJrwg5~bGppwDyNH_u5m)LJ?ELYcWpg7l3n@G~P-8 zcpdL0A{6I%FLf7uiz~jxCEqLaUV6l1G(cdAH68B|0|ba*BfFXiIWHA9y9$4x9E_HX zKn2j)wEAL;&oF|G69|Z4yI`ehaBZ_TvSNK0%|otstHUe&c#b?sDL8&&r{)x1$P?Nn7;RrOvq zy;n``RXryo?Ny)!bw$5w87fc(4c|>Z99+2icBJ$KVgX0Y8IR{uY!H9-j7RXQG8`tN z<7_$ac{%Ut#-!m)=q-~5czJveUU{K05+zW89n-#0Zv(&rc@~>wgoRr|v_QLKp}$VZ zNQB*#nl9Z6)%TQ*=w*I~(Md3t=Qq7hGQT6^3xtoY%!dJOPV`B9+#R{K;B^vVb8aU@ zGSXgfdDKnBd6{eiquqZn@~V_%^f(*^1c?|6ThCn+rrenI7Z~EUuXkunjIjpKbtSW83b`RMmFlt|3)nkmwH11up_|&@JUkyb+5A( zurvKj>~{d${Pq{7J9j=&Sc`eCydQ}~q|2mbUkGt9G$=&eS@VAhSr#Hxe??F)$}mMD zaFHs`UWSl6jG_+_c;Ki{l}bIbsD~8lsuqk>J9UJ!K*ysRg^C)5$_owM2sY-Th+tzb zsy#iWjkzd*6L;LoMG>jOn_c0}tbnmOkOmHsq=f<(u!fhM{ zLrzeg$w;=#jG?QDpfF}KGHJmM!c^)h6e5Z6m8lR(gu{Onk*`GFhh*E6k-8%mKlHU9 zhRLWI!S8=Yo|V^eERVr=A=(XBIhD>ZLAcoAsZGvJ#_%(N%}HPJ&54lPUEE#R19@rE zbm`&JsQgf#z_~hbeo1(V#9$6XHisdb!%!VOR|n7C!E<-;?0Rc;y;bGbiuw#D2JsQz zF?ien_-TJ^mnMRzk9KJQ^idWJo+fh3Sar)-EKdtx(`a)nSrBB1?3Q5H4esR|1c&2s zhZGPlWPshJ`g5{3p&r~LcBKL>$Cw6xiYVT+p#1^>yL|~U4ge%_>U-kjZkSVp#xJ1V zFbxRlD(0pt#%EsVND}RaAhgHGB%s}_6l#PY&)a|W!)(IGrW%9W`;`Bh&VL!f2H!hR z75*Amg1BMM9H}4wmzW@d7NZb_Xh~p0xiMOdD%pLllHEtJ$;G*o07yCH_Nl=|P29KJ zxo?mWPVkV7yzggk{MkEy_s&mQu!7GZ!sj00F#*NCIodV~JB9L8ac{D~5d`@aGjo76 z1|omjYyxbyzu(rt4W`JTc9Ri``SW;5MqoFvYpT0zD)fAVWKXm!;=AYwCE6iL)>$y2 ztwTvYRC|dwt@AX7ap0};c1M3{Dr`iX4bh!M!pFvQO(fgs$!OE*$akWs zb>9?^8J3s{CTF+`sI&o@hfr`isi#Ii;u{4xBe@#|oVj^=`+odi6RO3yScBc8Y`pPhe_JX`Yt ze_@_&V?r9>c&J0QouT5+Cmh?c?4K_Ar?EPKW1H=tRywHkPbFp!0NRlhJGvA*7ClWP zZatVI769Exhi9FPHmBD>C4~8DBAaL-)rm;9Ig=4Sp&@xd6yKwvn-f5kHIQbz_@Wp9 zZ64b&wJkKPh+tz~k?7p)@*jVe+=n2OcZ!4$jL<|&GnqvFcI~6f9IGq9W)n?gKXqnbFJr%WjK6jE+-nzluI$TZ zk8}i-m1E@#_QBFrLZW}f=^PyX2tWegB<&AlpxYA1j|jH-4n})m*qGK1#<%AZ3jZG9 z+@0r3N7D}x&L@*PmwCQgPpCZ{+|rd_{vS8l%SyRK@Ko3vDGKEDHg2^2F8B;~1XN!} z_eq@mt*J}3nGeUAg?r8sc?r48F5EsXQ2ECIb^FZ$e z!fVAvtjYkdrVKEVk|N=x4p(HViy#*m=MmL}=l~IHg(?`#4ODd=2<(PF&q*1mgOD9P z?pHEG4hi~40Ox<5iry8)J|HCjI>bka;ApUXnN`sI#8nP=r18H^NWgY30!C*mGTUUB zZ6cP3(Y6+|03Cl22;aU*_f|fZ^$nK_e5$L@$1{WFQXb-Rv9hRGse)$swUNpsGUaHR zaumMiWK9F$96wo_ELn9A4s@vK-dgxh7hJ^)e&Piu@q&kV!9Bd-r1Gx}4G|*P3Psm} zU_*Zjz$R^R+{p;5UeHX8aFsyH1^||V?hqo`q9cJwHWYs~%!(Z@bPR_W3_w1FBF#Ov zt1y?x@l66a*px?{Os8Scz2bpLl(80NgpWWJpJTX6U9{`vA0x(AlmFg zYn(w7*B?9ggAPN4qdJ+Q2U1nz?#W2?iXf@S22)ToiZ$kTdluS>n;VOp^+~GrNjSJA zY5+ze?hk)Sn}oEZoW<1;XH{k88V0w9egmHrMYyubPI-6xnai_vyM3J7Op9E_$O!gx zq-2QBk3YLh;^R|ah?haH`nGF?*3})mCx^LF-4GEM z(LAR`EPB-Xc?FRwqf3?1g>vr~Z^=r#`C+L=2akWnc>ToAi1W_IP{j|OX3P+6h}v{? zUEL?f`pK`ShTiUI%BP0JQd{sBXCd?YKS``8=AHbrz`1O1xi&=LRD_dcgw!sN_q4wA zO$W;e>K+{9M1-cpXi?LE(4aUSk0^Yc0BGoGaD#}%POBoPRVTlk`#Q&ef@Ed1G37IJ zHY$H3^+GqrXvd&aFs}e!rXZURz!D090{DTj0N@9*&*;S2ZW@3u;@@9eo_}NQ3n4CzF=m?I%J01E;#FbFXnkLOg*N@$U;?_`=ttQz(tk$SQv? zUWXj{7}eoe$cXR-8R51@e{wbkvyJhDo=f`Czrfn{!*iDZ$(Jh!okVIRQXi4ph}1>I zCL;9^)gjiDm>jE$HC4&m=$X8YF5T}aT?NaD2>n9rAtJ&n>9-SYj>(QLqGB|*DlSA=gc~a} zwv8+s(WbI~RA$;fa`HUaGwZYu%i=ZsxOFTH1!SL>KnRg=_-G;_4!!h z1Q@|q@zaQ8o3_Q^Us=TSXieM?qA2V>FAHhPc_b=BC@3EBvUZkXqj*`IvPq4~O%T(; ziC`NL9VC*i&SZ457BRas2^^;(ItD^a1W0c4vfI2kn}D`#M$Ns%s3F3+5PwE54U$5r zKD=o>^P8qKziBwLntp0Ar(%DaQ!&MxziMdM&g5V>evT{Nzui-~Hj)*sWOyXny=&wxyIfn5c?+UDUdk&{}< zNL;OHt`_Ez+)Cw)pF=a6PKFx67N21R8*j6!8}CJb{G&Gc*Sh6L3>bgDJRH?bqP3B1 zF(H!(He`YUknKQz@0O)^S^zdRgma>5tDWF1A2`E7#ik2@?}+!g%r6g-n;zrSfspj0 zhf2hVCc3MaY3Pf=oRMrX-j+ybMAI;tUJo>7q89SWswE@YnoQ=&HSy${2-Ot0`5-(! zzOsZjN+jx)*;o%jtD1kHMY=W{vt(-^v`4vsX#1BXspmJ$Fm5F7GvlMGve9vQc>~A& zf0QYH^3$)Ag`CcCB9n&5#As8tD`Yr`T!c+A(1Qh-%L-}DwrM3bj$GY-)_ISz{cP&q z@BJ)n*X}P)f&V_??11P5{-_u_gK@q8gHxbc8PMzmsPmsre^!5|KdaK8sMR&CXv57@ z!_8B?ugZx@m3cm%eP%;d2RS5~o1>^igyb1qYJlVTL=7;=>Okm8R6ig4=qmEg(f3D$ z>tlo%E5M;WG4?ZpNEN|3BFB#H z=aBAVfHCo2MzDX~U=$F^)@Cx=pN+?>ZkjWC$=FhzDVXM=%@W$?)1@&!n>-J1v)-=n z*FH|mtK19uow?(TqQp_2is*@u7gdzcHIxa>D1qeg?4~FR;F_II+3n}>jn4+`Cy`m5 zp=lnCXm?LWc>gIT;D${*Y5{& z?Go9oi0oEGc55QLHIdz>$Zm7HH2zV6N`8yu_|N>7p*tMl=TO|g@>zU`-@e0xDFmNo z=ne!=ZL ?=ZYB;2c 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 Xf3bT258zMx`00NEM}aPcA&wUS#HD;- From 2e88c5e0da4618dde5e391a3aa7337b272c12336 Mon Sep 17 00:00:00 2001 From: robnee Date: Thu, 1 Apr 2021 20:52:03 -0400 Subject: [PATCH 13/89] Clamp lighting value on export to fix flat colors Also, this fixes the Printf format for the ambient lighting entry on the configuration screen. This was causing string behavior when attempting to edit the ambient lighting value on Windows. Oddly this didn't seem to affect Linux. --- src/confscreen.cpp | 4 +--- src/export.cpp | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/confscreen.cpp b/src/confscreen.cpp index c7e2815a..4a4b7b23 100644 --- a/src/confscreen.cpp +++ b/src/confscreen.cpp @@ -236,9 +236,7 @@ void TextWindow::ShowConfiguration() { CO(SS.lightDir[i]), i, &ScreenChangeLightDirection, SS.lightIntensity[i], i, &ScreenChangeLightIntensity); } - Printf(false, "%Bp ambient lighting " - "%2 %Fl%D%f%Ll[c]%E", - (i & 1) ? 'd' : 'a', i, + Printf(false, "%Ba ambient lighting %2 %Fl%f%Ll[c]%E", SS.ambientIntensity, &ScreenChangeLightAmbient); Printf(false, ""); diff --git a/src/export.cpp b/src/export.cpp index b9ebb914..f1c331fd 100644 --- a/src/export.cpp +++ b/src/export.cpp @@ -366,9 +366,9 @@ void SolveSpaceUI::ExportLinesAndMesh(SEdgeList *sel, SBezierList *sbl, SMesh *s // And calculate lighting for the triangle Vector n = tt.Normal().WithMagnitude(1); - double lighting = SS.ambientIntensity + + double lighting = min(1.0, SS.ambientIntensity + max(0.0, (SS.lightIntensity[0])*(n.Dot(l0))) + - max(0.0, (SS.lightIntensity[1])*(n.Dot(l1))); + max(0.0, (SS.lightIntensity[1])*(n.Dot(l1)))); double r = min(1.0, tt.meta.color.redF() * lighting), g = min(1.0, tt.meta.color.greenF() * lighting), b = min(1.0, tt.meta.color.blueF() * lighting); From cc52eb237d90ba883693b646b2e73716a56eb825 Mon Sep 17 00:00:00 2001 From: robnee Date: Sat, 27 Mar 2021 12:26:49 -0400 Subject: [PATCH 14/89] Allow right click to end sketching of all entities --- src/mouse.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/mouse.cpp b/src/mouse.cpp index 77b52342..b8a191f7 100644 --- a/src/mouse.cpp +++ b/src/mouse.cpp @@ -526,11 +526,16 @@ void GraphicsWindow::MouseRightUp(double x, double y) { } if(pending.operation == Pending::DRAGGING_NEW_LINE_POINT || - pending.operation == Pending::DRAGGING_NEW_CUBIC_POINT) + pending.operation == Pending::DRAGGING_NEW_CUBIC_POINT || + pending.operation == Pending::DRAGGING_NEW_ARC_POINT || + pending.operation == Pending::DRAGGING_NEW_RADIUS || + pending.operation == Pending::DRAGGING_NEW_POINT + ) { // Special case; use a right click to stop drawing lines, since // a left click would draw another one. This is quicker and more - // intuitive than hitting escape. Likewise for new cubic segments. + // intuitive than hitting escape. Likewise for other entities + // for consistency. ClearPending(); return; } From af8b0e4dbfa2b62dc76c4d5de636992a994d8762 Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Thu, 1 Apr 2021 19:54:48 -0400 Subject: [PATCH 15/89] change test sketch failing under x86-64-v3. Add a copy of the sketch for the old round-trip tests. --- test/constraint/equal_angle/normal.png | Bin 5267 -> 5271 bytes test/constraint/equal_angle/normal.slvs | 20 +- .../equal_angle/normal_old_version.slvs | 463 ++++++++++++++++++ test/constraint/equal_angle/test.cpp | 4 +- 4 files changed, 475 insertions(+), 12 deletions(-) create mode 100644 test/constraint/equal_angle/normal_old_version.slvs diff --git a/test/constraint/equal_angle/normal.png b/test/constraint/equal_angle/normal.png index 3f81a9543e93bd20eed1bc2f27cd82c6e4962e4a..aecf31558739c25da5a58ab8caa8bad7e4c0a8b5 100644 GIT binary patch literal 5271 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 F{1e^z4Lkq< diff --git a/test/constraint/equal_angle/normal.slvs b/test/constraint/equal_angle/normal.slvs index b1d538f1..60e7b924 100644 --- a/test/constraint/equal_angle/normal.slvs +++ b/test/constraint/equal_angle/normal.slvs @@ -119,7 +119,7 @@ Param.val=-5.00000000000000000000 AddParam Param.h.v.=00040011 -Param.val=5.00000000000000000000 +Param.val=5.00000000000000088818 AddParam Param.h.v.=00040013 @@ -147,7 +147,7 @@ Param.val=10.00000000000000000000 AddParam Param.h.v.=00060010 -Param.val=10.00000000000000000000 +Param.val=10.29878739785912600269 AddParam Param.h.v.=00060011 @@ -155,7 +155,7 @@ Param.val=10.00000000000000000000 AddParam Param.h.v.=00060013 -Param.val=5.00000000000000000000 +Param.val=5.29878739785912422633 AddParam Param.h.v.=00060014 @@ -163,7 +163,7 @@ Param.val=5.00000000000000000000 AddParam Param.h.v.=00070010 -Param.val=5.00000000000000000000 +Param.val=5.29878739785912422633 AddParam Param.h.v.=00070011 @@ -171,7 +171,7 @@ Param.val=5.00000000000000000000 AddParam Param.h.v.=00070013 -Param.val=10.00000000000000000000 +Param.val=10.29878739785912600269 AddParam Param.h.v.=00070014 @@ -310,7 +310,7 @@ Entity.type=2001 Entity.construction=0 Entity.workplane.v=80020000 Entity.actPoint.x=-5.00000000000000000000 -Entity.actPoint.y=5.00000000000000000000 +Entity.actPoint.y=5.00000000000000088818 Entity.actVisible=1 AddEntity @@ -363,7 +363,7 @@ Entity.h.v=00060001 Entity.type=2001 Entity.construction=0 Entity.workplane.v=80020000 -Entity.actPoint.x=10.00000000000000000000 +Entity.actPoint.x=10.29878739785912600269 Entity.actPoint.y=10.00000000000000000000 Entity.actVisible=1 AddEntity @@ -372,7 +372,7 @@ Entity.h.v=00060002 Entity.type=2001 Entity.construction=0 Entity.workplane.v=80020000 -Entity.actPoint.x=5.00000000000000000000 +Entity.actPoint.x=5.29878739785912422633 Entity.actPoint.y=5.00000000000000000000 Entity.actVisible=1 AddEntity @@ -390,7 +390,7 @@ Entity.h.v=00070001 Entity.type=2001 Entity.construction=0 Entity.workplane.v=80020000 -Entity.actPoint.x=5.00000000000000000000 +Entity.actPoint.x=5.29878739785912422633 Entity.actPoint.y=5.00000000000000000000 Entity.actVisible=1 AddEntity @@ -399,7 +399,7 @@ Entity.h.v=00070002 Entity.type=2001 Entity.construction=0 Entity.workplane.v=80020000 -Entity.actPoint.x=10.00000000000000000000 +Entity.actPoint.x=10.29878739785912600269 Entity.actPoint.y=5.00000000000000000000 Entity.actVisible=1 AddEntity diff --git a/test/constraint/equal_angle/normal_old_version.slvs b/test/constraint/equal_angle/normal_old_version.slvs new file mode 100644 index 00000000..b1d538f1 --- /dev/null +++ b/test/constraint/equal_angle/normal_old_version.slvs @@ -0,0 +1,463 @@ +SolveSpaceREVa + + +Group.h.v=00000001 +Group.type=5000 +Group.name=#references +Group.color=ff000000 +Group.skipFirst=0 +Group.predef.swapUV=0 +Group.predef.negateU=0 +Group.predef.negateV=0 +Group.visible=1 +Group.suppress=0 +Group.relaxConstraints=0 +Group.allowRedundant=0 +Group.allDimsReference=0 +Group.scale=1.00000000000000000000 +Group.remap={ +} +AddGroup + +Group.h.v=00000002 +Group.type=5001 +Group.order=1 +Group.name=sketch-in-plane +Group.activeWorkplane.v=80020000 +Group.color=ff000000 +Group.subtype=6000 +Group.skipFirst=0 +Group.predef.q.w=1.00000000000000000000 +Group.predef.origin.v=00010001 +Group.predef.swapUV=0 +Group.predef.negateU=0 +Group.predef.negateV=0 +Group.visible=1 +Group.suppress=0 +Group.relaxConstraints=0 +Group.allowRedundant=0 +Group.allDimsReference=0 +Group.scale=1.00000000000000000000 +Group.remap={ +} +AddGroup + +Param.h.v.=00010010 +AddParam + +Param.h.v.=00010011 +AddParam + +Param.h.v.=00010012 +AddParam + +Param.h.v.=00010020 +Param.val=1.00000000000000000000 +AddParam + +Param.h.v.=00010021 +AddParam + +Param.h.v.=00010022 +AddParam + +Param.h.v.=00010023 +AddParam + +Param.h.v.=00020010 +AddParam + +Param.h.v.=00020011 +AddParam + +Param.h.v.=00020012 +AddParam + +Param.h.v.=00020020 +Param.val=0.50000000000000000000 +AddParam + +Param.h.v.=00020021 +Param.val=0.50000000000000000000 +AddParam + +Param.h.v.=00020022 +Param.val=0.50000000000000000000 +AddParam + +Param.h.v.=00020023 +Param.val=0.50000000000000000000 +AddParam + +Param.h.v.=00030010 +AddParam + +Param.h.v.=00030011 +AddParam + +Param.h.v.=00030012 +AddParam + +Param.h.v.=00030020 +Param.val=0.50000000000000000000 +AddParam + +Param.h.v.=00030021 +Param.val=-0.50000000000000000000 +AddParam + +Param.h.v.=00030022 +Param.val=-0.50000000000000000000 +AddParam + +Param.h.v.=00030023 +Param.val=-0.50000000000000000000 +AddParam + +Param.h.v.=00040010 +Param.val=-5.00000000000000000000 +AddParam + +Param.h.v.=00040011 +Param.val=5.00000000000000000000 +AddParam + +Param.h.v.=00040013 +Param.val=-10.00000000000000000000 +AddParam + +Param.h.v.=00040014 +Param.val=5.00000000000000000000 +AddParam + +Param.h.v.=00050010 +Param.val=-10.00000000000000000000 +AddParam + +Param.h.v.=00050011 +Param.val=5.00000000000000000000 +AddParam + +Param.h.v.=00050013 +Param.val=-5.00000000000000000000 +AddParam + +Param.h.v.=00050014 +Param.val=10.00000000000000000000 +AddParam + +Param.h.v.=00060010 +Param.val=10.00000000000000000000 +AddParam + +Param.h.v.=00060011 +Param.val=10.00000000000000000000 +AddParam + +Param.h.v.=00060013 +Param.val=5.00000000000000000000 +AddParam + +Param.h.v.=00060014 +Param.val=5.00000000000000000000 +AddParam + +Param.h.v.=00070010 +Param.val=5.00000000000000000000 +AddParam + +Param.h.v.=00070011 +Param.val=5.00000000000000000000 +AddParam + +Param.h.v.=00070013 +Param.val=10.00000000000000000000 +AddParam + +Param.h.v.=00070014 +Param.val=5.00000000000000000000 +AddParam + +Request.h.v=00000001 +Request.type=100 +Request.group.v=00000001 +Request.construction=0 +AddRequest + +Request.h.v=00000002 +Request.type=100 +Request.group.v=00000001 +Request.construction=0 +AddRequest + +Request.h.v=00000003 +Request.type=100 +Request.group.v=00000001 +Request.construction=0 +AddRequest + +Request.h.v=00000004 +Request.type=200 +Request.workplane.v=80020000 +Request.group.v=00000002 +Request.construction=0 +AddRequest + +Request.h.v=00000005 +Request.type=200 +Request.workplane.v=80020000 +Request.group.v=00000002 +Request.construction=0 +AddRequest + +Request.h.v=00000006 +Request.type=200 +Request.workplane.v=80020000 +Request.group.v=00000002 +Request.construction=0 +AddRequest + +Request.h.v=00000007 +Request.type=200 +Request.workplane.v=80020000 +Request.group.v=00000002 +Request.construction=0 +AddRequest + +Entity.h.v=00010000 +Entity.type=10000 +Entity.construction=0 +Entity.point[0].v=00010001 +Entity.normal.v=00010020 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00010001 +Entity.type=2000 +Entity.construction=1 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00010020 +Entity.type=3000 +Entity.construction=0 +Entity.point[0].v=00010001 +Entity.actNormal.w=1.00000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00020000 +Entity.type=10000 +Entity.construction=0 +Entity.point[0].v=00020001 +Entity.normal.v=00020020 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00020001 +Entity.type=2000 +Entity.construction=1 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00020020 +Entity.type=3000 +Entity.construction=0 +Entity.point[0].v=00020001 +Entity.actNormal.w=0.50000000000000000000 +Entity.actNormal.vx=0.50000000000000000000 +Entity.actNormal.vy=0.50000000000000000000 +Entity.actNormal.vz=0.50000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00030000 +Entity.type=10000 +Entity.construction=0 +Entity.point[0].v=00030001 +Entity.normal.v=00030020 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00030001 +Entity.type=2000 +Entity.construction=1 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00030020 +Entity.type=3000 +Entity.construction=0 +Entity.point[0].v=00030001 +Entity.actNormal.w=0.50000000000000000000 +Entity.actNormal.vx=-0.50000000000000000000 +Entity.actNormal.vy=-0.50000000000000000000 +Entity.actNormal.vz=-0.50000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00040000 +Entity.type=11000 +Entity.construction=0 +Entity.point[0].v=00040001 +Entity.point[1].v=00040002 +Entity.workplane.v=80020000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00040001 +Entity.type=2001 +Entity.construction=0 +Entity.workplane.v=80020000 +Entity.actPoint.x=-5.00000000000000000000 +Entity.actPoint.y=5.00000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00040002 +Entity.type=2001 +Entity.construction=0 +Entity.workplane.v=80020000 +Entity.actPoint.x=-10.00000000000000000000 +Entity.actPoint.y=5.00000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00050000 +Entity.type=11000 +Entity.construction=0 +Entity.point[0].v=00050001 +Entity.point[1].v=00050002 +Entity.workplane.v=80020000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00050001 +Entity.type=2001 +Entity.construction=0 +Entity.workplane.v=80020000 +Entity.actPoint.x=-10.00000000000000000000 +Entity.actPoint.y=5.00000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00050002 +Entity.type=2001 +Entity.construction=0 +Entity.workplane.v=80020000 +Entity.actPoint.x=-5.00000000000000000000 +Entity.actPoint.y=10.00000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00060000 +Entity.type=11000 +Entity.construction=0 +Entity.point[0].v=00060001 +Entity.point[1].v=00060002 +Entity.workplane.v=80020000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00060001 +Entity.type=2001 +Entity.construction=0 +Entity.workplane.v=80020000 +Entity.actPoint.x=10.00000000000000000000 +Entity.actPoint.y=10.00000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00060002 +Entity.type=2001 +Entity.construction=0 +Entity.workplane.v=80020000 +Entity.actPoint.x=5.00000000000000000000 +Entity.actPoint.y=5.00000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00070000 +Entity.type=11000 +Entity.construction=0 +Entity.point[0].v=00070001 +Entity.point[1].v=00070002 +Entity.workplane.v=80020000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00070001 +Entity.type=2001 +Entity.construction=0 +Entity.workplane.v=80020000 +Entity.actPoint.x=5.00000000000000000000 +Entity.actPoint.y=5.00000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=00070002 +Entity.type=2001 +Entity.construction=0 +Entity.workplane.v=80020000 +Entity.actPoint.x=10.00000000000000000000 +Entity.actPoint.y=5.00000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=80020000 +Entity.type=10000 +Entity.construction=0 +Entity.point[0].v=80020002 +Entity.normal.v=80020001 +Entity.actVisible=1 +AddEntity + +Entity.h.v=80020001 +Entity.type=3010 +Entity.construction=0 +Entity.point[0].v=80020002 +Entity.actNormal.w=1.00000000000000000000 +Entity.actVisible=1 +AddEntity + +Entity.h.v=80020002 +Entity.type=2012 +Entity.construction=1 +Entity.actVisible=1 +AddEntity + +Constraint.h.v=00000001 +Constraint.type=20 +Constraint.group.v=00000002 +Constraint.workplane.v=80020000 +Constraint.ptA.v=00040002 +Constraint.ptB.v=00050001 +Constraint.other=0 +Constraint.other2=0 +Constraint.reference=0 +AddConstraint + +Constraint.h.v=00000002 +Constraint.type=20 +Constraint.group.v=00000002 +Constraint.workplane.v=80020000 +Constraint.ptA.v=00060002 +Constraint.ptB.v=00070001 +Constraint.other=0 +Constraint.other2=0 +Constraint.reference=0 +AddConstraint + +Constraint.h.v=00000003 +Constraint.type=54 +Constraint.group.v=00000002 +Constraint.workplane.v=80020000 +Constraint.entityA.v=00040000 +Constraint.entityB.v=00050000 +Constraint.entityC.v=00070000 +Constraint.entityD.v=00060000 +Constraint.other=0 +Constraint.other2=0 +Constraint.reference=0 +AddConstraint + diff --git a/test/constraint/equal_angle/test.cpp b/test/constraint/equal_angle/test.cpp index f1e5fce9..e96c709f 100644 --- a/test/constraint/equal_angle/test.cpp +++ b/test/constraint/equal_angle/test.cpp @@ -8,12 +8,12 @@ TEST_CASE(normal_roundtrip) { TEST_CASE(normal_migrate_from_v20) { CHECK_LOAD("normal_v20.slvs"); - CHECK_SAVE("normal.slvs"); + CHECK_SAVE("normal_old_version.slvs"); } TEST_CASE(normal_migrate_from_v22) { CHECK_LOAD("normal_v22.slvs"); - CHECK_SAVE("normal.slvs"); + CHECK_SAVE("normal_old_version.slvs"); } TEST_CASE(other_roundtrip) { From fa41676b6d34536d1f4c867970c1c4a4d6303a0f Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Fri, 2 Apr 2021 17:17:10 -0400 Subject: [PATCH 16/89] Update mimalloc version. --- extlib/mimalloc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extlib/mimalloc b/extlib/mimalloc index 27627843..4e643b6d 160000 --- a/extlib/mimalloc +++ b/extlib/mimalloc @@ -1 +1 @@ -Subproject commit 27627843648ef84aee1621976f25bee5946e6bda +Subproject commit 4e643b6d3178e0ea2a093b7e14fe621631a91e4b From 9020b83b9b283f87cb91af1f00051dd1aa34949d Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sat, 3 Apr 2021 13:13:27 -0400 Subject: [PATCH 17/89] Fix issue #984 by changing the comma in not-closed-contour chinese translation. --- res/locales/zh_CN.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/res/locales/zh_CN.po b/res/locales/zh_CN.po index 1c2ce7f6..6cc88cdd 100644 --- a/res/locales/zh_CN.po +++ b/res/locales/zh_CN.po @@ -2,20 +2,20 @@ # Copyright (C) 2020 the PACKAGE authors # This file is distributed under the same license as the SolveSpace package. # , 2020. -# +# msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" "POT-Creation-Date: 2021-02-01 15:45+0200\n" -"PO-Revision-Date: 2020-09-28 12:42+0800\n" +"PO-Revision-Date: 2021-04-03 13:10-0400\n" "Last-Translator: lomatus@163.com\n" "Language-Team: none\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Poedit 2.4.2\n" #: clipboard.cpp:310 msgid "" @@ -1286,7 +1286,7 @@ msgstr "(未命名)" #: groupmesh.cpp:709 msgid "not closed contour, or not all same style!" -msgstr "未闭合轮廓,或样式不一致!" +msgstr "未闭合轮廓 , 或样式不一致!" #: groupmesh.cpp:722 msgid "points not all coplanar!" From 3ed151bf90abe8bf2ba94307ae45e5d7cf1630aa Mon Sep 17 00:00:00 2001 From: robnee Date: Sat, 3 Apr 2021 15:11:10 -0400 Subject: [PATCH 18/89] Skip image rendering in CLI rather than hard abort --- src/render/render2d.cpp | 4 ++-- test/request/image/linked.png | Bin 0 -> 4309 bytes test/request/image/normal.png | Bin 0 -> 4292 bytes test/request/image/test.cpp | 5 ++--- 4 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 test/request/image/linked.png create mode 100644 test/request/image/normal.png diff --git a/src/render/render2d.cpp b/src/render/render2d.cpp index 710e795d..fd948e80 100644 --- a/src/render/render2d.cpp +++ b/src/render/render2d.cpp @@ -190,11 +190,11 @@ void SurfaceRenderer::DrawFaces(const SMesh &m, const std::vector &fac void SurfaceRenderer::DrawPixmap(std::shared_ptr pm, const Vector &o, const Vector &u, const Vector &v, const Point2d &ta, const Point2d &tb, hFill hcf) { - ssassert(false, "Not implemented"); + dbp("Not implemented"); } void SurfaceRenderer::InvalidatePixmap(std::shared_ptr pm) { - ssassert(false, "Not implemented"); + dbp("Not implemented"); } //----------------------------------------------------------------------------- diff --git a/test/request/image/linked.png b/test/request/image/linked.png new file mode 100644 index 0000000000000000000000000000000000000000..8667e34140ad2c7704ef6f2ca9b11630c3c03765 GIT binary patch literal 4309 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 literal 0 HcmV?d00001 diff --git a/test/request/image/test.cpp b/test/request/image/test.cpp index da0954e0..a9507bee 100644 --- a/test/request/image/test.cpp +++ b/test/request/image/test.cpp @@ -2,13 +2,12 @@ TEST_CASE(normal_roundtrip) { CHECK_LOAD("normal.slvs"); - // Can't render images through cairo for now. - // CHECK_RENDER("normal.png"); + CHECK_RENDER("normal.png"); CHECK_SAVE("normal.slvs"); } TEST_CASE(linked_roundtrip) { CHECK_LOAD("linked.slvs"); - // CHECK_RENDER("linked.png"); + CHECK_RENDER("linked.png"); CHECK_SAVE("linked.slvs"); } From 312a8df1074d1450bb18dff85b3e604aa165b9e3 Mon Sep 17 00:00:00 2001 From: robnee Date: Sat, 3 Apr 2021 14:41:08 -0400 Subject: [PATCH 19/89] repair glyph data for [ff0c] to prevent assertion --- res/fonts/unicode.lff.gz | Bin 482562 -> 482559 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/res/fonts/unicode.lff.gz b/res/fonts/unicode.lff.gz index f6e55fbfc9a12943edc73fee0c604d6e92c196ef..6d35aecf6bca69f87886c7d51db5d1bc25ec0caa 100644 GIT binary patch delta 4035 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 delta 4038 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 s9be$Rt<8 From 8105699d5e2db1a650f2b37259461523d732882a Mon Sep 17 00:00:00 2001 From: Koen Schmeets Date: Mon, 8 Feb 2021 01:07:21 +0100 Subject: [PATCH 20/89] Add apple arm64 support --- .github/scripts/build-macos.sh | 67 ++++++++++++------ .github/scripts/install-macos.sh | 14 +++- .github/scripts/sign-macos.sh | 14 ++++ .github/workflows/cd.yml | 18 ++--- .github/workflows/test.yml | 6 +- CMakeLists.txt | 32 ++++----- cmake/libpng-macos-arm64.patch | 117 +++++++++++++++++++++++++++++++ extlib/libpng | 2 +- res/CMakeLists.txt | 2 +- src/CMakeLists.txt | 46 ++++++++---- 10 files changed, 250 insertions(+), 68 deletions(-) create mode 100644 cmake/libpng-macos-arm64.patch diff --git a/.github/scripts/build-macos.sh b/.github/scripts/build-macos.sh index bb4c1e0c..fae7e27f 100755 --- a/.github/scripts/build-macos.sh +++ b/.github/scripts/build-macos.sh @@ -1,27 +1,52 @@ #!/bin/sh -xe -mkdir build || true -cd build - -OSX_TARGET="10.9" - +ENABLE_SANITIZERS="OFF" if [ "$1" = "release" ]; then - BUILD_TYPE=RelWithDebInfo - cmake \ - -DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_TARGET}" \ - -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ - -DENABLE_OPENMP="ON" \ - -DENABLE_LTO="ON" \ - .. + BUILD_TYPE="RelWithDebInfo" + ENABLE_LTO="ON" else - BUILD_TYPE=Debug - cmake \ - -DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_TARGET}" \ - -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ - -DENABLE_OPENMP="ON" \ - -DENABLE_SANITIZERS="ON" \ - .. + BUILD_TYPE="Debug" + ENABLE_LTO="OFF" fi -cmake --build . --config "${BUILD_TYPE}" -- -j$(nproc) -make -j$(nproc) test_solvespace +# this is an option for our Github CI only, since it doesn't have a macos arm64 image yet +CMAKE_GENERATOR="Unix Makefiles" +CMAKE_PREFIX_PATH="" +if [ "$2" = "arm64" ]; then + OSX_ARCHITECTURE="arm64" + CMAKE_PREFIX_PATH="/tmp/libomp-arm64/libomp/11.0.1" + git apply cmake/libpng-macos-arm64.patch || echo "Could not apply patch, probably already patched..." + mkdir build-arm64 || true + cd build-arm64 +elif [ "$2" = "x86_64" ]; then + OSX_ARCHITECTURE="x86_64" + CMAKE_PREFIX_PATH="/tmp/libomp-x86_64/libomp/11.0.1" + mkdir build || true + cd build +else + mkdir build || true + cd build +fi + +if [ "$3" = "xcode" ]; then + CMAKE_GENERATOR="Xcode" +fi + +cmake \ + -G "${CMAKE_GENERATOR}" \ + -D CMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \ + -D CMAKE_OSX_ARCHITECTURES="${OSX_ARCHITECTURE}" \ + -D CMAKE_BUILD_TYPE="${BUILD_TYPE}" \ + -D ENABLE_OPENMP="ON" \ + -D ENABLE_SANITIZERS="${ENABLE_SANITIZERS}" \ + -D ENABLE_LTO="${ENABLE_LTO}" \ + .. + +if [ "$3" = "xcode" ]; then + open solvespace.xcodeproj +else + cmake --build . --config "${BUILD_TYPE}" -j$(sysctl -n hw.logicalcpu) + if [ $(uname -m) = "$2" ]; then + make -j$(sysctl -n hw.logicalcpu) test_solvespace + fi +fi \ No newline at end of file diff --git a/.github/scripts/install-macos.sh b/.github/scripts/install-macos.sh index 457dd5d4..c6ec104d 100755 --- a/.github/scripts/install-macos.sh +++ b/.github/scripts/install-macos.sh @@ -1,4 +1,14 @@ #!/bin/sh -xe -brew install libomp -git submodule update --init \ No newline at end of file +if [ "$1" = "ci" ]; then + curl -L https://bintray.com/homebrew/bottles/download_file?file_path=libomp-11.0.1.arm64_big_sur.bottle.tar.gz --output /tmp/libomp-arm64.tar.gz + mkdir /tmp/libomp-arm64 || true + tar -xzvf /tmp/libomp-arm64.tar.gz -C /tmp/libomp-arm64 + curl -L https://bintray.com/homebrew/bottles/download_file?file_path=libomp-11.0.1.big_sur.bottle.tar.gz --output /tmp/libomp-x86_64.tar.gz + mkdir /tmp/libomp-x86_64 || true + tar -xzvf /tmp/libomp-x86_64.tar.gz -C /tmp/libomp-x86_64 +else + brew install libomp +fi + +git submodule update --init extlib/cairo extlib/freetype extlib/libdxfrw extlib/libpng extlib/mimalloc extlib/pixman extlib/zlib diff --git a/.github/scripts/sign-macos.sh b/.github/scripts/sign-macos.sh index c23dab99..80ac1256 100755 --- a/.github/scripts/sign-macos.sh +++ b/.github/scripts/sign-macos.sh @@ -1,5 +1,19 @@ #!/bin/bash -xe +lipo \ + -create \ + build/bin/SolveSpace.app/Contents/MacOS/SolveSpace \ + build-arm64/bin/SolveSpace.app/Contents/MacOS/SolveSpace \ + -output \ + build/bin/SolveSpace.app/Contents/MacOS/SolveSpace + +lipo \ + -create \ + build/bin/SolveSpace.app/Contents/MacOS/solvespace-cli \ + build-arm64/bin/SolveSpace.app/Contents/MacOS/solvespace-cli \ + -output \ + build/bin/SolveSpace.app/Contents/MacOS/solvespace-cli + cd build openmp="bin/SolveSpace.app/Contents/Resources/lib/libomp.dylib" diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 154b6faa..99c85b3d 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -32,14 +32,14 @@ jobs: shell: bash test_macos: - runs-on: macos-latest + runs-on: macos-10.15 name: Test macOS steps: - uses: actions/checkout@v2 - name: Install Dependencies - run: .github/scripts/install-macos.sh + run: .github/scripts/install-macos.sh ci - name: Build & Test - run: .github/scripts/build-macos.sh + run: .github/scripts/build-macos.sh debug arm64 && .github/scripts/build-macos.sh debug x86_64 build_release_windows: needs: [test_ubuntu, test_windows, test_macos] @@ -80,13 +80,13 @@ jobs: build_release_macos: needs: [test_ubuntu, test_windows, test_macos] name: Build Release macOS - runs-on: macos-latest + runs-on: macos-10.15 steps: - uses: actions/checkout@v2 - name: Install Dependencies - run: .github/scripts/install-macos.sh + run: .github/scripts/install-macos.sh ci - name: Build & Test - run: .github/scripts/build-macos.sh release + run: .github/scripts/build-macos.sh release arm64 && .github/scripts/build-macos.sh release x86_64 - name: Sign Build run: .github/scripts/sign-macos.sh env: @@ -100,7 +100,7 @@ jobs: with: name: macos path: build/bin/SolveSpace.dmg - + deploy_snap_amd64: needs: [test_ubuntu, test_windows, test_macos] name: Deploy AMD64 Snap @@ -128,7 +128,7 @@ jobs: store_login: ${{ secrets.SNAPSTORE_LOGIN }} snap: ${{ steps.build.outputs.snap }} release: edge,beta - + deploy_snap_arm64: needs: [test_ubuntu, test_windows, test_macos] name: Deploy ARM64 Snap @@ -160,7 +160,7 @@ jobs: store_login: ${{ secrets.SNAPSTORE_LOGIN }} snap: ${{ steps.build.outputs.snap }} release: edge,beta - + update_edge_release: name: Update Edge Release needs: [build_release_windows, build_release_windows_openmp, build_release_macos] diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 27462aef..1ca64b3a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,11 +34,11 @@ jobs: shell: bash test_macos: - runs-on: macos-latest + runs-on: macos-10.15 name: Test macOS steps: - uses: actions/checkout@v2 - name: Install Dependencies - run: .github/scripts/install-macos.sh + run: .github/scripts/install-macos.sh ci - name: Build & Test - run: .github/scripts/build-macos.sh + run: .github/scripts/build-macos.sh debug arm64 && .github/scripts/build-macos.sh debug x86_64 diff --git a/CMakeLists.txt b/CMakeLists.txt index 12948781..62eb646d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,5 @@ # cmake configuration +cmake_minimum_required(VERSION 3.9...3.19) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) message(FATAL_ERROR @@ -7,17 +8,10 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) " mkdir build && cd build && cmake ..") endif() -cmake_minimum_required(VERSION 3.7.2 FATAL_ERROR) -if(NOT CMAKE_VERSION VERSION_LESS 3.11.0) - cmake_policy(VERSION 3.11.0) -endif() -if(NOT CMAKE_VERSION VERSION_LESS 3.9) - # LTO/IPO with non-Intel compilers on Linux requires policy CMP0069 to be set to NEW. - # Set it explicitly until cmake_minimum_required is raised to >= 3.9. - cmake_policy(SET CMP0069 NEW) -endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") + +cmake_policy(SET CMP0048 OLD) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED YES) @@ -27,7 +21,7 @@ set(CMAKE_USER_MAKE_RULES_OVERRIDE set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX "${CMAKE_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake") -if(APPLE OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") +if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") endif() @@ -40,10 +34,10 @@ include(GetGitCommitHash) # and instead uncomment the following, adding the complete git hash of the checkout you are using: # set(GIT_COMMIT_HASH 0000000000000000000000000000000000000000) -project(solvespace) set(solvespace_VERSION_MAJOR 3) set(solvespace_VERSION_MINOR 0) string(SUBSTRING "${GIT_COMMIT_HASH}" 0 8 solvespace_GIT_HASH) +project(solvespace LANGUAGES C CXX ASM) set(ENABLE_GUI ON CACHE BOOL "Whether the graphical interface is enabled") @@ -68,10 +62,6 @@ if("${CMAKE_GENERATOR}" STREQUAL "Xcode") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${CMAKE_BINARY_DIR}/bin>) endif() -if(NOT CMAKE_C_COMPILER_ID STREQUAL CMAKE_CXX_COMPILER_ID) - message(FATAL_ERROR "C and C++ compilers should be supplied by the same vendor") -endif() - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) # GCC 4.8/4.9 ship with broken but present . meh. @@ -210,6 +200,12 @@ if(WIN32 OR APPLE) find_vendored_package(PNG libpng SKIP_INSTALL_ALL ON PNG_LIBRARY png_static + PNG_ARM_NEON "off" + PNG_SHARED OFF + PNG_STATIC ON + PNG_EXECUTABLES OFF + PNG_TESTS OFF + PNG_FRAMEWORK OFF PNG_PNG_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/extlib/libpng) list(APPEND PNG_PNG_INCLUDE_DIR ${CMAKE_BINARY_DIR}/extlib/libpng) @@ -222,11 +218,14 @@ if(WIN32 OR APPLE) FREETYPE_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extlib/freetype/include) message(STATUS "Using in-tree pixman") - add_vendored_subdirectory(extlib/pixman) set(PIXMAN_FOUND YES) set(PIXMAN_LIBRARY pixman) + set(PIXMAN_BUILD_TESTS OFF CACHE BOOL "") + set(PIXMAN_BUILD_DEMOS OFF CACHE BOOL "") + set(PIXMAN_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extlib/pixman/pixman) list(APPEND PIXMAN_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/extlib/pixman/pixman) + add_vendored_subdirectory(extlib/pixman) message(STATUS "Using in-tree cairo") add_vendored_subdirectory(extlib/cairo) @@ -275,6 +274,7 @@ if(ENABLE_GUI) elseif(APPLE) find_package(OpenGL REQUIRED) find_library(APPKIT_LIBRARY AppKit REQUIRED) + set(util_LIBRARIES ${APPKIT_LIBRARY}) else() find_package(OpenGL REQUIRED) find_package(SpaceWare) diff --git a/cmake/libpng-macos-arm64.patch b/cmake/libpng-macos-arm64.patch new file mode 100644 index 00000000..2d0e15cf --- /dev/null +++ b/cmake/libpng-macos-arm64.patch @@ -0,0 +1,117 @@ +diff --git a/extlib/libpng/CMakeLists.txt b/extlib/libpng/CMakeLists.txt +index 42ff0f9025..6834ea332e 100644 +--- a/extlib/libpng/CMakeLists.txt ++++ b/extlib/libpng/CMakeLists.txt +@@ -65,11 +65,22 @@ option(PNG_HARDWARE_OPTIMIZATIONS "Enable hardware optimizations" ON) + set(PNG_PREFIX "" CACHE STRING "Prefix to add to the API function names") + set(DFA_XTRA "" CACHE FILEPATH "File containing extra configuration settings") + ++# CMake currently sets CMAKE_SYSTEM_PROCESSOR to one of x86_64 or arm64 on macOS, ++# based upon the OS architecture, not the target architecture. As such, we need ++# to check CMAKE_OSX_ARCHITECTURES to identify which hardware-specific flags to ++# enable. Note that this will fail if you attempt to build a universal binary in ++# a single cmake invocation. ++if (APPLE AND CMAKE_OSX_ARCHITECTURES) ++ set(TARGET_ARCH ${CMAKE_OSX_ARCHITECTURES}) ++else() ++ set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) ++endif() ++ + if(PNG_HARDWARE_OPTIMIZATIONS) + + # Set definitions and sources for ARM. +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") ++if(TARGET_ARCH MATCHES "^arm" OR ++ TARGET_ARCH MATCHES "^aarch64") + set(PNG_ARM_NEON_POSSIBLE_VALUES check on off) + set(PNG_ARM_NEON "check" + CACHE STRING "Enable ARM NEON optimizations: check|on|off; check is default") +@@ -95,8 +106,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR + endif() + + # Set definitions and sources for PowerPC. +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*") ++if(TARGET_ARCH MATCHES "^powerpc*" OR ++ TARGET_ARCH MATCHES "^ppc64*") + set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off) + set(PNG_POWERPC_VSX "on" + CACHE STRING "Enable POWERPC VSX optimizations: on|off; on is default") +@@ -118,8 +129,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR + endif() + + # Set definitions and sources for Intel. +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*") ++if(TARGET_ARCH MATCHES "^i?86" OR ++ TARGET_ARCH MATCHES "^x86_64*") + set(PNG_INTEL_SSE_POSSIBLE_VALUES on off) + set(PNG_INTEL_SSE "on" + CACHE STRING "Enable INTEL_SSE optimizations: on|off; on is default") +@@ -141,8 +152,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR + endif() + + # Set definitions and sources for MIPS. +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*") ++if(TARGET_ARCH MATCHES "mipsel*" OR ++ TARGET_ARCH MATCHES "mips64el*") + set(PNG_MIPS_MSA_POSSIBLE_VALUES on off) + set(PNG_MIPS_MSA "on" + CACHE STRING "Enable MIPS_MSA optimizations: on|off; on is default") +@@ -166,26 +177,26 @@ endif() + else(PNG_HARDWARE_OPTIMIZATIONS) + + # Set definitions and sources for ARM. +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") ++if(TARGET_ARCH MATCHES "^arm" OR ++ TARGET_ARCH MATCHES "^aarch64") + add_definitions(-DPNG_ARM_NEON_OPT=0) + endif() + + # Set definitions and sources for PowerPC. +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*") ++if(TARGET_ARCH MATCHES "^powerpc*" OR ++ TARGET_ARCH MATCHES "^ppc64*") + add_definitions(-DPNG_POWERPC_VSX_OPT=0) + endif() + + # Set definitions and sources for Intel. +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*") ++if(TARGET_ARCH MATCHES "^i?86" OR ++ TARGET_ARCH MATCHES "^x86_64*") + add_definitions(-DPNG_INTEL_SSE_OPT=0) + endif() + + # Set definitions and sources for MIPS. +-if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR +- CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*") ++if(TARGET_ARCH MATCHES "mipsel*" OR ++ TARGET_ARCH MATCHES "mips64el*") + add_definitions(-DPNG_MIPS_MSA_OPT=0) + endif() + +@@ -412,19 +412,11 @@ else() + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/checksym.awk" + "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.def") + +- add_custom_target(symbol-check +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk") +- + generate_copy("${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" + "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym") + generate_copy("${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" + "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers") + +- add_custom_target(genvers +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers") +- add_custom_target(gensym +- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym") +- + add_custom_target("genprebuilt" + COMMAND "${CMAKE_COMMAND}" + "-DOUTPUT=scripts/pnglibconf.h.prebuilt" diff --git a/extlib/libpng b/extlib/libpng index e9c3d83d..dbe3e0c4 160000 --- a/extlib/libpng +++ b/extlib/libpng @@ -1 +1 @@ -Subproject commit e9c3d83d5a04835806287f1e8c0f2d3a962d6673 +Subproject commit dbe3e0c43e549a1602286144d94b0666549b18e6 diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt index 5b7c45d1..0f737a1e 100644 --- a/res/CMakeLists.txt +++ b/res/CMakeLists.txt @@ -31,7 +31,7 @@ if(WIN32) set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${source}") endfunction() elseif(APPLE) - set(app_resource_dir ${CMAKE_BINARY_DIR}/bin/SolveSpace.app/Contents/Resources) + set(app_resource_dir ${CMAKE_BINARY_DIR}/Resources) set(cli_resource_dir ${CMAKE_BINARY_DIR}/res) function(add_resource name) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 45dab944..5ac7b41d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -338,7 +338,10 @@ if(ENABLE_GUI) LINK_FLAGS "/MANIFEST:NO /SAFESEH:NO /INCREMENTAL:NO /OPT:REF") elseif(APPLE) set_target_properties(solvespace PROPERTIES - OUTPUT_NAME SolveSpace) + OUTPUT_NAME SolveSpace + XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME "YES" + XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.solvespace" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") endif() endif() @@ -401,17 +404,30 @@ endif() # solvespace macOS package if(APPLE) - set(bundle SolveSpace) - set(bundle_bin ${EXECUTABLE_OUTPUT_PATH}/${bundle}.app/Contents/MacOS) - set(bundle_resources ${EXECUTABLE_OUTPUT_PATH}/${bundle}.app/Contents/Resources/lib) - execute_process( - COMMAND mkdir -p ${bundle_resources} - COMMAND cp -p /usr/local/opt/libomp/lib/libomp.dylib ${bundle_resources}/libomp.dylib - ) - add_custom_command(TARGET solvespace POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${bundle_bin} - COMMAND ${CMAKE_COMMAND} -E copy $ ${bundle_bin} - COMMAND install_name_tool -change /usr/local/opt/libomp/lib/libomp.dylib "@executable_path/../Resources/lib/libomp.dylib" ${bundle_bin}/${bundle} - COMMENT "Bundling executable solvespace-cli" - VERBATIM) -endif() + set(LIBOMP_LIB_PATH ${OpenMP_CXX_INCLUDE_DIRS}/../lib/libomp.dylib) + set(LIBOMP_LINK_PATH "@executable_path/../Resources/libomp.dylib") + set(LIBOMP_LINK_PATH_UTILS "@executable_path/SolveSpace.app/Contents/Resources/libomp.dylib") + if(ENABLE_GUI) + add_custom_command(TARGET solvespace POST_BUILD + COMMAND cp -r ${CMAKE_BINARY_DIR}/Resources $ + ) + if(ENABLE_OPENMP) + execute_process(COMMAND install_name_tool -id ${LIBOMP_LINK_PATH} ${LIBOMP_LIB_PATH}) + message("FROM " ${${LIBOMP_LIB_PATH}} "TO" $/Resources/libomp.dylib) + add_custom_command(TARGET solvespace POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${LIBOMP_LIB_PATH} $/Resources/libomp.dylib + COMMAND install_name_tool -change ${LIBOMP_LINK_PATH} ${LIBOMP_LINK_PATH_UTILS} $ + ) + endif() + endif() + if(ENABLE_TESTS AND ENABLE_OPENMP) + add_custom_command(TARGET solvespace POST_BUILD + COMMAND install_name_tool -change ${LIBOMP_LINK_PATH} ${LIBOMP_LINK_PATH_UTILS} $) + endif() + if(ENABLE_CLI) + add_custom_command(TARGET solvespace POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ $ + COMMENT "Bundling executable solvespace-cli" + VERBATIM) + endif() +endif() \ No newline at end of file From 2a56ba661e3b626c7aea001adb1db3b3b3a60f0b Mon Sep 17 00:00:00 2001 From: Koen Schmeets Date: Mon, 8 Feb 2021 01:07:53 +0100 Subject: [PATCH 21/89] Fix debugging and profiling on macOS --- CMakeLists.txt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 62eb646d..bdd36705 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,11 +72,13 @@ endif() # common compiler flags include(CheckCXXCompilerFlag) -set(FILE_PREFIX_MAP "-ffile-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}=.") -check_cxx_compiler_flag("${FILE_PREFIX_MAP}" HAS_FILE_PREFIX_MAP) -if(HAS_FILE_PREFIX_MAP) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FILE_PREFIX_MAP}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FILE_PREFIX_MAP}") +if (NOT APPLE) + set(FILE_PREFIX_MAP "-ffile-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}=.") + check_cxx_compiler_flag("${FILE_PREFIX_MAP}" HAS_FILE_PREFIX_MAP) + if(HAS_FILE_PREFIX_MAP) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FILE_PREFIX_MAP}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FILE_PREFIX_MAP}") + endif() endif() if(MINGW) From e2bf722feca491cfb67b977d063cc1620184be1a Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Sun, 4 Apr 2021 13:21:14 +0100 Subject: [PATCH 22/89] Copy path to avoid it being invalidated by OkayToStartNewFile() --- src/graphicswin.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index a7d44f12..8427fa1e 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -369,8 +369,11 @@ static void PopulateMenuWithPathnames(Platform::MenuRef menu, void GraphicsWindow::PopulateRecentFiles() { PopulateMenuWithPathnames(openRecentMenu, SS.recentFiles, [](const Platform::Path &path) { + // OkayToStartNewFile could mutate recentFiles, which will invalidate path (which is a + // refererence into the recentFiles vector), so take a copy of it here. + Platform::Path pathCopy(path); if(!SS.OkayToStartNewFile()) return; - SS.Load(path); + SS.Load(pathCopy); }); PopulateMenuWithPathnames(linkRecentMenu, SS.recentFiles, [](const Platform::Path &path) { From b8e41c8da9510b6b082f80e9362616355f305a6a Mon Sep 17 00:00:00 2001 From: Koen Schmeets Date: Sun, 4 Apr 2021 19:15:00 +0200 Subject: [PATCH 23/89] Correct libomp.dylib path in sign-macos.sh script --- .github/scripts/sign-macos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/scripts/sign-macos.sh b/.github/scripts/sign-macos.sh index 80ac1256..74cd4768 100755 --- a/.github/scripts/sign-macos.sh +++ b/.github/scripts/sign-macos.sh @@ -16,7 +16,7 @@ lipo \ cd build -openmp="bin/SolveSpace.app/Contents/Resources/lib/libomp.dylib" +openmp="bin/SolveSpace.app/Contents/Resources/libomp.dylib" app="bin/SolveSpace.app" dmg="bin/SolveSpace.dmg" bundle_id="com.solvespace.solvespace" From a01dd18495a6ea193928c952a855d8e4647fa421 Mon Sep 17 00:00:00 2001 From: Koen Schmeets Date: Sun, 4 Apr 2021 20:24:22 +0200 Subject: [PATCH 24/89] Combine arm64 and x86_64 libomp libraries --- .github/scripts/sign-macos.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/scripts/sign-macos.sh b/.github/scripts/sign-macos.sh index 74cd4768..8e944d3e 100755 --- a/.github/scripts/sign-macos.sh +++ b/.github/scripts/sign-macos.sh @@ -1,5 +1,12 @@ #!/bin/bash -xe +lipo \ + -create \ + build/bin/SolveSpace.app/Contents/Resources/libomp.dylib \ + build-arm64/bin/SolveSpace.app/Contents/Resources/libomp.dylib \ + -output \ + build/bin/SolveSpace.app/Contents/Resources/libomp.dylib + lipo \ -create \ build/bin/SolveSpace.app/Contents/MacOS/SolveSpace \ From 853e7d83e95455c0e56825205bacc1158774822b Mon Sep 17 00:00:00 2001 From: ruevs Date: Wed, 7 Apr 2021 10:45:03 +0300 Subject: [PATCH 25/89] Extrude, Lathe and Revolve Icons Updated Discussion here https://github.com/solvespace/solvespace/issues/857#issuecomment-813631658 --- res/icons/graphics-window/extrude.png | Bin 207 -> 216 bytes res/icons/graphics-window/lathe.png | Bin 245 -> 245 bytes res/icons/graphics-window/revolve.png | Bin 226 -> 245 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/res/icons/graphics-window/extrude.png b/res/icons/graphics-window/extrude.png index ad71bce33b5580e16c097121a561cde66b40a603..a8eb88bccda1dcf6d60e61e88e778f17960d1698 100644 GIT binary patch delta 170 zcmV;b09F6b0oVbMHh+ytL_t(I%iWVp3cxT3M2&|X@082hMIe~3QbK7vyLRMh#3A~I z0BB4A97?2_t>n=rqLh+LA)=gf{lj}ZNNGUU-aKv9ELl4!OHtKk4;{#zXsqOEwY%(5 zeCqV(pvWCPJJFAKBqEhnQf?dAPZ3$3+5XC_ThhOr2!I>fP$T;9QTp^pC}VEVr2oab Y0M-zQoYf{A2mk;807*qoM6N<$g2{?d0{{R3 delta 161 zcmV;S0AByt0nY)DHh&3lNLh0L01FcU01FcV0GgZ_0001QNkl^958W@NQT6+0K0{%t0FQ^s49TNQ?AdAJPzZCl5gWBN&!U_gMy0X z9FF(PZE8f+o%9=Wr#77*`U;fymV?TD%Xx`133b{ZQHriLdKy%HTenXFxcgsYAf1%G P00000NkvXXu0mjf@ghJ! diff --git a/res/icons/graphics-window/lathe.png b/res/icons/graphics-window/lathe.png index 02625401d3d75fe219d7f2da0752ed9a367649fb..3487bf239c0486b3c507b063210fa2fc0af53522 100644 GIT binary patch delta 199 zcmV;&0672k0rdfpHh-!~L_t(I%gt0l4#Xe`1ha32H|b~D0|{+a5I1g8PE8pm1A_p( zEznC4(e!_7Ek$&%A8X?51Lq0ZK;~Jd__8bzkqmDMrXV67%c#AKju4SjAR;1;?I=q( zY`lXsrxY3ctpor*UeA%cnHl{Ye{=1;B6EkC^&`8nhF-ak>=A4SoVM{6LicB50&ra=raRSmmTwpHT5)1$U002ovPDHLkV1g$@ BQ|tn0a_!N^u#r`8sDE?R2w7Hk5vsp+1@k08&b(Eb2NkJb?9ev>jdgMVJ`?03sqH z=cG};ZnfCu==uuC6OCHl>c&f~s0E)FO}fU|SHh-|{Y5+kyDNZf|A+MAgp+jTobwag g=ezToUCOcR1}8CEkVezuO8@`>07*qoM6N<$f)vwKq5uE@ delta 159 zcmV;Q0AT<10pbCWOMik%L_t(I%k5KJ4!|G?lZCV5ne?*Vhl|nR1Co7giF`^aAZ-X= z3z{WFWcZ$QHW9V;x@Mj2aI--iNIT0A&)Wh3F~%*7b)ULCfc1B@6J7cuA_4#a5fPDb zQ`Xll6kZ)&Zwc}c{gH@`w(=3R{-_o)ij#Ebl+u&)>$~HsUKl-5;sz=mJQfGbGTQ(E N002ovPDHLkV1k{yMlJvV From af5fbf636418cd245c8070ff2a800b15a59f3aed Mon Sep 17 00:00:00 2001 From: ruevs Date: Wed, 7 Apr 2021 12:54:14 +0300 Subject: [PATCH 26/89] Revolve icon updated to counter-clockwise, which is the way revolve works Lathe icon updated to match. Discussion here https://github.com/solvespace/solvespace/issues/857#issuecomment-814697125 --- res/icons/graphics-window/lathe.png | Bin 245 -> 260 bytes res/icons/graphics-window/revolve.png | Bin 245 -> 264 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/res/icons/graphics-window/lathe.png b/res/icons/graphics-window/lathe.png index 3487bf239c0486b3c507b063210fa2fc0af53522..cb91631b2b7def64147005c0dba90b65a294f899 100644 GIT binary patch delta 222 zcmV<403rYN0fYjOE`R?+r05&~006m3L_t(I%f(e&4#Xe`1mjuZO!l(u2OEo^q-)&N zkf!0)=}e&rAaLRoICSbNK*Ur3b+xG<-K*L9Sd&DDMw+*JX6$G)%SM-;W&u7TTjY1u zRve2A?P6M)0#+NiL_qwuo04#oO~f{q$S(qjzNF@KzVK!LO;@$^h`Mk@%*@ua1g=Iz zdexi6MDFD7tPaIgtgg4!)S)ZelDp*cWIhy*({70<4s_BkPRY(i_@%07*qoM6N<$g3?QHcmMzZ delta 207 zcmV;=05JcA0`&oqE`I=SrU#J#0062CDmw1{=&{s2Y8>H;Y;8W90_V%Tmu8DD_H*?e*O8DJm-xjO`! zTo)d7x@;l;5h$gzu%k??B_vv>Vguv$D)`%xRHoWNmD!hfpfo+ g8O7awY`?YHZ%3tAAx}39ZvX%Q07*qoM6N<$f>YjOxBvhE delta 211 zcmeBR`pP&#tDXS_@|Lkr1X7#@9+AZi4BWyX%*Zfnjs#F}s;7%%h{frrlO6dEC~&YW z{kZmr+TSzAf48W;Ug6`a-)| zoD4x;%XD5@8QC;^E!`p;`^$BPBm;wzlG5`ff%|>(w%&O9;uqHm;ohiwua0@IS;0DA z+;`Wp8{vnRP5kR>!?L>}=YRW`M=g^}p3eC!eEa$C&$D7rZG6q9ZWuMe?eZgUkn=rV L{an^LB{Ts5nPXWE From f4ad82055e00c02d9ece2cab4730a1104de2e423 Mon Sep 17 00:00:00 2001 From: Maximilian Federle Date: Thu, 8 Apr 2021 16:24:53 +0200 Subject: [PATCH 27/89] CI: Support cancelling, update actions & prevent draft releases Allow the workflow to be cancelled without running all remaining jobs. On invocation of the workflow, cancel concurrent runs of older commits automatically. Replace unmaintained release action with recommended alternative. After much testing, I found that the problem of releases being created as draft releases can be traced to a consistency issue/race condition on GitHub's side. Prevent this by inserting a generous delay between deleting and re-creating the edge release. --- .github/workflows/cd.yml | 44 ++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 99c85b3d..22a5d1a7 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -9,19 +9,32 @@ on: - created jobs: + cancel_previous_runs: + runs-on: ubuntu-latest + name: Cancel Previous Runs + if: github.event_name == 'push' + steps: + - uses: styfle/cancel-workflow-action@0.8.0 + with: + access_token: ${{ github.token }} + test_ubuntu: - runs-on: ubuntu-18.04 - name: Test Ubuntu - steps: - - uses: actions/checkout@v2 - - name: Install Dependencies - run: .github/scripts/install-ubuntu.sh - - name: Build & Test - run: .github/scripts/build-ubuntu.sh + needs: [cancel_previous_runs] + runs-on: ubuntu-18.04 + name: Test Ubuntu + if: "!cancelled()" + steps: + - uses: actions/checkout@v2 + - name: Install Dependencies + run: .github/scripts/install-ubuntu.sh + - name: Build & Test + run: .github/scripts/build-ubuntu.sh test_windows: + needs: [cancel_previous_runs] runs-on: windows-2019 name: Test Windows + if: "!cancelled()" steps: - uses: actions/checkout@v2 - name: Install Dependencies @@ -32,8 +45,10 @@ jobs: shell: bash test_macos: + needs: [cancel_previous_runs] runs-on: macos-10.15 name: Test macOS + if: "!cancelled()" steps: - uses: actions/checkout@v2 - name: Install Dependencies @@ -164,26 +179,29 @@ jobs: update_edge_release: name: Update Edge Release needs: [build_release_windows, build_release_windows_openmp, build_release_macos] - if: always() && github.event_name == 'push' + if: github.event_name == 'push' && !cancelled() runs-on: ubuntu-latest outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} steps: - name: Delete Old Edge Release - uses: dev-drprasad/delete-tag-and-release@v0.1.2 + uses: dev-drprasad/delete-tag-and-release@v0.2.0 with: delete_release: true tag_name: edge env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Wait + shell: bash + run: sleep 60 - name: Create New Edge Release id: create_release - uses: actions/create-release@v1 + uses: softprops/action-gh-release@35d938cf01f60fbe522917c81be1e892074f6ad6 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: edge - release_name: Edge + name: Edge prerelease: true draft: false body: ${{ github.event.head_commit.message }} @@ -191,7 +209,7 @@ jobs: upload_release_assets: name: Upload Release Assets needs: [build_release_windows, build_release_windows_openmp, build_release_macos, update_edge_release] - if: always() + if: "!cancelled()" runs-on: ubuntu-latest steps: - name: Download All Workflow Artifacts From 9e8c3db856b8fa9eeb807b42239cf9d404739acf Mon Sep 17 00:00:00 2001 From: app4soft Date: Tue, 13 Apr 2021 21:32:17 +0300 Subject: [PATCH 28/89] Update uk_UA.po --- res/locales/uk_UA.po | 179 +++++++++++++++++++++++++++---------------- 1 file changed, 115 insertions(+), 64 deletions(-) diff --git a/res/locales/uk_UA.po b/res/locales/uk_UA.po index 0b09760f..e71069a9 100644 --- a/res/locales/uk_UA.po +++ b/res/locales/uk_UA.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: https://github.com/solvespace/solvespace/issues\n" "POT-Creation-Date: 2021-02-01 15:45+0200\n" -"PO-Revision-Date: 2021-03-09 23:34+0200\n" +"PO-Revision-Date: 2021-04-14 01:42+0300\n" "Last-Translator: https://github.com/Symbian9\n" "Language-Team: app4soft\n" "Language: uk_UA\n" @@ -154,7 +154,7 @@ msgstr "рівні-довжини" #: constraint.cpp:22 msgctxt "constr-name" msgid "eq-length-and-pt-ln-dist" -msgstr "" +msgstr "рівні-довжина-відстань-тчк-лінія" #: constraint.cpp:23 msgctxt "constr-name" @@ -219,7 +219,7 @@ msgstr "тчк-на-колі" #: constraint.cpp:35 msgctxt "constr-name" msgid "same-orientation" -msgstr "" +msgstr "співнаправленість" #: constraint.cpp:36 msgctxt "constr-name" @@ -401,12 +401,13 @@ msgid "" msgstr "" #: constraint.cpp:614 +#, fuzzy msgid "Must select an angle constraint." -msgstr "" +msgstr "Необхідно обрати кут." #: constraint.cpp:627 msgid "Must select a constraint with associated label." -msgstr "" +msgstr "Необхідно обрати обмежувач з відповідною міткою." #: constraint.cpp:638 msgid "" @@ -458,6 +459,9 @@ msgid "" "No solid model present; draw one with extrudes and revolves, or use Export " "2d View to export bare lines and curves." msgstr "" +"Вісутня об'ємна модель; створіть одну з допомогою екструдування та " +"виточування або скористайтеся функцією \"Експортувати 2D Вигляд\" для " +"еспорту лише ліній та кривих." #: export.cpp:61 msgid "" @@ -471,7 +475,7 @@ msgstr "" #: export.cpp:822 msgid "Active group mesh is empty; nothing to export." -msgstr "" +msgstr "Активна група не містить меш; немає чого експортувати." #: exportvector.cpp:337 msgid "freehand lines were replaced with continuous lines" @@ -485,11 +489,15 @@ msgstr "" msgid "" "Some aspects of the drawing have no DXF equivalent and were not exported:\n" msgstr "" +"Деякі аспекти креслення на мають відповідників у форматі DXF і не будуть " +"експортовані:\n" #: exportvector.cpp:839 msgid "" "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." msgstr "" +"Розмір аркуша у PDF перевищує 200×200 дюймів; багато переглядачів можуть не " +"підтримувати цей файл." #: file.cpp:44 group.cpp:91 msgctxt "group-name" @@ -578,15 +586,15 @@ msgstr "Експортувати &Зображення..." #: graphicswin.cpp:49 msgid "Export 2d &View..." -msgstr "Експортувати 2d &Вигляд..." +msgstr "Експортувати 2D &Вигляд..." #: graphicswin.cpp:50 msgid "Export 2d &Section..." -msgstr "Експортувати 2d &Секцію..." +msgstr "Експортувати 2D &Секцію..." #: graphicswin.cpp:51 msgid "Export 3d &Wireframe..." -msgstr "Експортувати 3d &Скелет..." +msgstr "Експортувати 3D &Скелет..." #: graphicswin.cpp:52 msgid "Export Triangle &Mesh..." @@ -750,11 +758,11 @@ msgstr "&Нова Група" #: graphicswin.cpp:108 msgid "Sketch In &3d" -msgstr "Креслення в &3D" +msgstr "Креслення у &3D" #: graphicswin.cpp:109 msgid "Sketch In New &Workplane" -msgstr "Креслення в Новій &Площині" +msgstr "Креслення у Новій &Площині" #: graphicswin.cpp:111 msgid "Step &Translating" @@ -781,14 +789,12 @@ msgid "Re&volve" msgstr "&Обертати" #: graphicswin.cpp:119 -#, fuzzy msgid "Link / Assemble..." -msgstr "Приєднати / Монтувати..." +msgstr "Приєднати / Зібрати..." #: graphicswin.cpp:120 -#, fuzzy msgid "Link Recent" -msgstr "Приєднати Недавні" +msgstr "Приєднати Нещодавні" #: graphicswin.cpp:122 msgid "&Sketch" @@ -800,7 +806,7 @@ msgstr "У Робочій &Площині" #: graphicswin.cpp:124 msgid "Anywhere In &3d" -msgstr "Будь-де В &3D" +msgstr "Будь-де в &3D" #: graphicswin.cpp:126 msgid "Datum &Point" @@ -964,7 +970,7 @@ msgstr "Показати &Центр Масс" #: graphicswin.cpp:175 msgid "Show &Underconstrained Points" -msgstr "" +msgstr "Показати &Надмірно Обмежені Точки" #: graphicswin.cpp:177 msgid "&Trace Point" @@ -1066,39 +1072,39 @@ msgstr "" #: graphicswin.cpp:1283 msgid "click to place datum point" -msgstr "" +msgstr "клікніть для встановлення вихідної точки" #: graphicswin.cpp:1284 msgid "click first point of line segment" -msgstr "" +msgstr "клікніть першу точку прямої лінії" #: graphicswin.cpp:1286 msgid "click first point of construction line segment" -msgstr "" +msgstr "клікніть першу точку конструктивної прямої лінії" #: graphicswin.cpp:1287 msgid "click first point of cubic segment" -msgstr "" +msgstr "клікніть першу точку кривої" #: graphicswin.cpp:1288 msgid "click center of circle" -msgstr "" +msgstr "клікніть в місце де буде центр коментаря" #: graphicswin.cpp:1289 msgid "click origin of workplane" -msgstr "" +msgstr "клікніть в центр відліку площини" #: graphicswin.cpp:1290 msgid "click one corner of rectangle" -msgstr "" +msgstr "клікніть для встановлення першого кута прямокутника" #: graphicswin.cpp:1291 msgid "click top left of text" -msgstr "" +msgstr "клікніть для встановлення верхньої лівої межі тексту" #: graphicswin.cpp:1297 msgid "click top left of image" -msgstr "" +msgstr "клікніть для встановлення верхньої лівої межі зображення" #: graphicswin.cpp:1309 msgid "" @@ -1109,7 +1115,7 @@ msgstr "" #: group.cpp:86 msgctxt "group-name" msgid "sketch-in-3d" -msgstr "" +msgstr "ескіз-в-3D" #: group.cpp:142 msgid "" @@ -1126,11 +1132,13 @@ msgid "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " "will be extruded normal to the workplane." msgstr "" +"Активуйте робочу площину ( Ескіз -> У Площині) перед екструдуванням. Ескіз " +"буде екструдовано перпендикулярно до робочої площини." #: group.cpp:163 msgctxt "group-name" msgid "extrude" -msgstr "" +msgstr "видавлювання" #: group.cpp:168 msgid "Lathe operation can only be applied to planar sketches." @@ -1148,7 +1156,7 @@ msgstr "" #: group.cpp:189 msgctxt "group-name" msgid "lathe" -msgstr "" +msgstr "проточування" #: group.cpp:194 msgid "Revolve operation can only be applied to planar sketches." @@ -1166,11 +1174,11 @@ msgstr "" #: group.cpp:217 msgctxt "group-name" msgid "revolve" -msgstr "" +msgstr "прокручування" #: group.cpp:222 msgid "Helix operation can only be applied to planar sketches." -msgstr "" +msgstr "Спіраль може бути створена лише на основі площинного ескізу." #: group.cpp:233 msgid "" @@ -1184,7 +1192,7 @@ msgstr "" #: group.cpp:245 msgctxt "group-name" msgid "helix" -msgstr "" +msgstr "спіраль" #: group.cpp:258 msgid "" @@ -1199,12 +1207,12 @@ msgstr "" #: group.cpp:271 msgctxt "group-name" msgid "rotate" -msgstr "" +msgstr "крутіння" #: group.cpp:282 msgctxt "group-name" msgid "translate" -msgstr "" +msgstr "перекладання" #: group.cpp:400 msgid "(unnamed)" @@ -1212,7 +1220,7 @@ msgstr "(безіменне)" #: groupmesh.cpp:709 msgid "not closed contour, or not all same style!" -msgstr "" +msgstr "не замкнений контур або не все в єдиному стилі!" #: groupmesh.cpp:722 msgid "points not all coplanar!" @@ -1220,7 +1228,7 @@ msgstr "" #: groupmesh.cpp:724 msgid "contour is self-intersecting!" -msgstr "" +msgstr "контур самоперетинається!" #: groupmesh.cpp:726 msgid "zero-length edge!" @@ -1308,6 +1316,7 @@ msgstr "Додати Точку Сплайну" #: mouse.cpp:690 msgid "Cannot add spline point: maximum number of points reached." msgstr "" +"Неможливо додати точку сплайна: перевищено максимальну кількість точок." #: mouse.cpp:715 msgid "Toggle Construction" @@ -1355,7 +1364,7 @@ msgstr "Умістити на Екрані" #: mouse.cpp:988 mouse.cpp:1275 msgid "click next point of line, or press Esc" -msgstr "" +msgstr "клікніть наступну точку лінії або натисніть Esc" #: mouse.cpp:994 msgid "" @@ -1365,11 +1374,11 @@ msgstr "" #: mouse.cpp:1028 msgid "click to place other corner of rectangle" -msgstr "" +msgstr "клікніть для встановлення іншого кута прямокутника" #: mouse.cpp:1048 msgid "click to set radius" -msgstr "" +msgstr "клікніть для визначення радіусу" #: mouse.cpp:1053 msgid "" @@ -1379,11 +1388,11 @@ msgstr "" #: mouse.cpp:1072 msgid "click to place point" -msgstr "" +msgstr "клікніть для встановлення точки" #: mouse.cpp:1088 msgid "click next point of cubic, or press Esc" -msgstr "" +msgstr "клікніть наступну точку кривої або натисніть Esc" #: mouse.cpp:1093 msgid "" @@ -1398,7 +1407,7 @@ msgstr "" #: mouse.cpp:1126 msgid "click to place bottom right of text" -msgstr "" +msgstr "клікніть для встановлення нижньої правої межі тексту" #: mouse.cpp:1132 msgid "" @@ -1418,7 +1427,7 @@ msgstr "SolveSpace модель" #: platform/gui.cpp:90 msgctxt "file-type" msgid "IDF circuit board" -msgstr "" +msgstr "IDF друкована плата" #: platform/gui.cpp:94 msgctxt "file-type" @@ -1438,12 +1447,12 @@ msgstr "Wavefront OBJ меш" #: platform/gui.cpp:100 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" -msgstr "" +msgstr "Three.js-сумісний меш, з переглядачем" #: platform/gui.cpp:101 msgctxt "file-type" msgid "Three.js-compatible mesh, mesh only" -msgstr "" +msgstr "Three.js-сумісний меш, лише меш" #: platform/gui.cpp:102 msgctxt "file-type" @@ -1463,7 +1472,7 @@ msgstr "PDF файл" #: platform/gui.cpp:111 msgctxt "file-type" msgid "Encapsulated PostScript" -msgstr "" +msgstr "Encapsulated PostScript" #: platform/gui.cpp:112 msgctxt "file-type" @@ -1560,17 +1569,17 @@ msgstr "Файл Змінено" #, c-format msgctxt "dialog" msgid "Do you want to save the changes you made to the sketch “%s”?" -msgstr "" +msgstr "Чи хочете ви зберегти зміни зроблені вами у ескізі “%s”?" #: solvespace.cpp:562 msgctxt "dialog" msgid "Do you want to save the changes you made to the new sketch?" -msgstr "" +msgstr "Чи хочете ви зберегти зміни зроблені вами у новому ескізі?" #: solvespace.cpp:565 msgctxt "dialog" msgid "Your changes will be lost if you don't save them." -msgstr "" +msgstr "Ваші зміни буде втрачено якщо ви не збережете їх." #: solvespace.cpp:566 msgctxt "button" @@ -1608,24 +1617,24 @@ msgstr "" #: solvespace.cpp:778 msgid "Constraint must have a label, and must not be a reference dimension." -msgstr "" +msgstr "Обмежувач має містити мітку і бути не відносним розміром." #: solvespace.cpp:782 msgid "Bad selection for step dimension; select a constraint." -msgstr "" +msgstr "Поганий вибір для крокової зміни розміру; оберіть обмежувач." #: solvespace.cpp:806 msgid "The assembly does not interfere, good." msgstr "" #: solvespace.cpp:822 -#, fuzzy, c-format +#, c-format msgid "" "The volume of the solid model is:\n" "\n" " %s" msgstr "" -"Об'єм тіла:\n" +"Об'єм твердого тіла становить:\n" "\n" " %s" @@ -1637,6 +1646,10 @@ msgid "" "\n" " %s" msgstr "" +"\n" +"Об'єм поточної групи мешу становить:\n" +"\n" +" %s" #: solvespace.cpp:836 msgid "" @@ -1662,6 +1675,8 @@ msgid "" "This group does not contain a correctly-formed 2d closed area. It is open, " "not coplanar, or self-intersecting." msgstr "" +"Ця група не місить коректно сформованого замкненої 2D площини. Вона " +"відкрита, не компланарна, або ж самоперетинається." #: solvespace.cpp:872 #, c-format @@ -1673,6 +1688,12 @@ msgid "" "Curves have been approximated as piecewise linear.\n" "This introduces error, typically of around 1%%." msgstr "" +"Площа заповнення ескізу у цій групі становить:\n" +"\n" +" %s\n" +"\n" +"Криві наближено до ламаних ліній.\n" +"Це вносить похибку, зазвичай близько 1%%." #: solvespace.cpp:892 #, c-format @@ -1684,14 +1705,20 @@ msgid "" "Curves have been approximated as piecewise linear.\n" "This introduces error, typically of around 1%%." msgstr "" +"Загальна довжина обраних елементів становить:\n" +"\n" +" %s\n" +"\n" +"Криві наближено до ламаних ліній.\n" +"Це вносить похибку, зазвичай близько 1%%." #: solvespace.cpp:898 msgid "Bad selection for perimeter; select line segments, arcs, and curves." -msgstr "" +msgstr "Поганий вибір для периметру; оберіть відрізки, дуги та криві." #: solvespace.cpp:914 msgid "Bad selection for trace; select a single point." -msgstr "" +msgstr "Поганий вибір для вістежування шляху; оберіть одну точку." #: solvespace.cpp:941 #, c-format @@ -1700,19 +1727,19 @@ msgstr "Неможливо записати у '%s'" #: solvespace.cpp:971 msgid "The mesh is self-intersecting (NOT okay, invalid)." -msgstr "" +msgstr "Меш самоперетинається (НЕ добре, недійсний)." #: solvespace.cpp:972 msgid "The mesh is not self-intersecting (okay, valid)." -msgstr "" +msgstr "Меш самоперетинається (добре, дійсний)." #: solvespace.cpp:974 msgid "The mesh has naked edges (NOT okay, invalid)." -msgstr "" +msgstr "Меш містить оголені ребра (НЕ добре, недійсний)." #: solvespace.cpp:975 msgid "The mesh is watertight (okay, valid)." -msgstr "" +msgstr "Меш водонепроникний (добре, дійсний)." #: solvespace.cpp:978 #, c-format @@ -1731,6 +1758,11 @@ msgid "" "\n" "Zero problematic edges, good.%s" msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Відсутні проблемні ребра, добре.%s" #: solvespace.cpp:985 #, c-format @@ -1741,6 +1773,11 @@ msgid "" "\n" "%d problematic edges, bad.%s" msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d проблемних ребер, погано.%s" #: solvespace.cpp:998 #, c-format @@ -1758,12 +1795,26 @@ msgid "" "\n" "© 2008-%d Jonathan Westhues and other authors.\n" msgstr "" +"Це SolveSpace версії %s.\n" +"\n" +"Більше інформації на сайті http://solvespace.com/\n" +"\n" +"SolveSpace є вільною програмою: ви можете модифікувати\n" +"та/або розповсюджувати її відповідно до ліцензії GNU\n" +"General Public License (GPL) версії 3 чи новішої.\n" +"\n" +"ВІЧСУТНІ БУДЬ-ЯКІ ГАРАНТІЇ, в межах, доволених\n" +"законом. Деталі на сайті http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues та інші автори.\n" #: style.cpp:166 msgid "" "Can't assign style to an entity that's derived from another entity; try " "assigning a style to this entity's parent." msgstr "" +"Неможливо призначити стиль елементу який походить від іншого елемента; " +"спробуйте призначити стиль батьківському елементу." #: style.cpp:665 msgid "Style name cannot be empty" @@ -1883,19 +1934,19 @@ msgstr "Перемкнути відносність розміру" #: toolbar.cpp:68 msgid "New group extruding active sketch" -msgstr "Нова група екструдування активного креслення" +msgstr "Нова група екструдування активного ескізу" #: toolbar.cpp:70 msgid "New group rotating active sketch" -msgstr "Нова група обертання актиного креслення" +msgstr "Нова група обертання актиного ескізу" #: toolbar.cpp:72 msgid "New group helix from active sketch" -msgstr "" +msgstr "Нова група спіралі з активного ескізу" #: toolbar.cpp:74 msgid "New group revolve active sketch" -msgstr "" +msgstr "Нова група обертання активного ескізу" #: toolbar.cpp:76 msgid "New group step and repeat rotating" @@ -1911,7 +1962,7 @@ msgstr "Нова група в новій площині (через обран #: toolbar.cpp:82 msgid "New group in 3d" -msgstr "Нова група в 3d" +msgstr "Нова група в 3D" #: toolbar.cpp:84 msgid "New group linking / assembling file" From 0e0b0252e23dd5bd4ae82ababcc54c44aee036d6 Mon Sep 17 00:00:00 2001 From: Maximilian Federle Date: Sat, 17 Apr 2021 23:22:09 +0200 Subject: [PATCH 29/89] CI: Never skip cancel_previous_runs The if condition was nonsensical and did not serve any practical purpose; removing it allows the succeeding jobs to run in any case without additional code. --- .github/workflows/cd.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 22a5d1a7..dde06b80 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -12,7 +12,6 @@ jobs: cancel_previous_runs: runs-on: ubuntu-latest name: Cancel Previous Runs - if: github.event_name == 'push' steps: - uses: styfle/cancel-workflow-action@0.8.0 with: @@ -22,7 +21,6 @@ jobs: needs: [cancel_previous_runs] runs-on: ubuntu-18.04 name: Test Ubuntu - if: "!cancelled()" steps: - uses: actions/checkout@v2 - name: Install Dependencies @@ -34,7 +32,6 @@ jobs: needs: [cancel_previous_runs] runs-on: windows-2019 name: Test Windows - if: "!cancelled()" steps: - uses: actions/checkout@v2 - name: Install Dependencies @@ -48,7 +45,6 @@ jobs: needs: [cancel_previous_runs] runs-on: macos-10.15 name: Test macOS - if: "!cancelled()" steps: - uses: actions/checkout@v2 - name: Install Dependencies From 8a4d84e85e808228089b6081d734fb3b0f9c0d62 Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Wed, 21 Apr 2021 09:57:49 -0500 Subject: [PATCH 30/89] Add comment about asan warnings. --- src/platform/guigtk.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/platform/guigtk.cpp b/src/platform/guigtk.cpp index e4bc3156..94eb6b5e 100644 --- a/src/platform/guigtk.cpp +++ b/src/platform/guigtk.cpp @@ -222,6 +222,10 @@ public: } return false; }; + // Note: asan warnings about new-delete-type-mismatch are false positives here: + // https://gitlab.gnome.org/GNOME/gtkmm/-/issues/65 + // Pass new_delete_type_mismatch=0 to ASAN_OPTIONS to disable those warnings. + // Unfortunately they won't go away until upgrading to gtkmm4 _connection = Glib::signal_timeout().connect(handler, milliseconds); } }; From 9e1a608118e48e2f1217bc1cb807817ae2026c37 Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Wed, 21 Apr 2021 16:32:24 -0500 Subject: [PATCH 31/89] Install appstream metadata in flatpak and normal desktop Linux --- res/CMakeLists.txt | 14 +++ .../com.solvespace.SolveSpace.metainfo.xml.in | 87 +++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 res/freedesktop/com.solvespace.SolveSpace.metainfo.xml.in diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt index 0f737a1e..3bd63d8b 100644 --- a/res/CMakeLists.txt +++ b/res/CMakeLists.txt @@ -134,6 +134,13 @@ else() DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications RENAME com.solvespace.SolveSpace.desktop) + set(DESKTOP_FILE_NAME com.solvespace.SolveSpace.desktop) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/freedesktop/com.solvespace.SolveSpace.metainfo.xml.in + ${CMAKE_CURRENT_BINARY_DIR}/freedesktop/com.solvespace.SolveSpace.metainfo.xml) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freedesktop/com.solvespace.SolveSpace.metainfo.xml + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo) + install(FILES freedesktop/solvespace-flatpak-mime.xml DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mime/packages RENAME com.solvespace.SolveSpace-slvs.xml) @@ -176,6 +183,13 @@ else() install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freedesktop/solvespace.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications) + set(DESKTOP_FILE_NAME solvespace.desktop) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/freedesktop/com.solvespace.SolveSpace.metainfo.xml.in + ${CMAKE_CURRENT_BINARY_DIR}/freedesktop/com.solvespace.SolveSpace.metainfo.xml) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freedesktop/com.solvespace.SolveSpace.metainfo.xml + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo) + install(FILES freedesktop/solvespace-mime.xml DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mime/packages RENAME solvespace-slvs.xml) diff --git a/res/freedesktop/com.solvespace.SolveSpace.metainfo.xml.in b/res/freedesktop/com.solvespace.SolveSpace.metainfo.xml.in new file mode 100644 index 00000000..3e88165b --- /dev/null +++ b/res/freedesktop/com.solvespace.SolveSpace.metainfo.xml.in @@ -0,0 +1,87 @@ + + + com.solvespace.SolveSpace + + SolveSpace +

A free (GPLv3) parametric 3d CAD tool + + CC0-1.0 + GPL-3.0-or-later + ryan_AT_ryanpavlik.com + + + Graphics + 3DGraphics + Engineering + + +

+ SolveSpace is a free (GPLv3) parametric 3d CAD tool. Applications include: +

+
    +
  • Modeling 3d parts — draw with extrudes, revolves, and Boolean operations
  • +
  • Modeling 2d parts — draw the part as a single section, and export; use 3d assembly to verify fit
  • +
  • Modeling 3d-printed parts — export the STL or other triangle mesh expected by most slicers
  • +
  • Preparing 2D CAM data — export 2d vector art for a waterjet machine or laser cutter
  • +
  • Mechanism design — use the constraint solver to simulate planar or spatial linkages
  • +
  • Plane and solid geometry — replace hand-solved trigonometry with a live dimensioned drawing
  • +
+
+ https://solvespace.com + https://github.com/solvespace/solvespace/issues + + @DESKTOP_FILE_NAME@ + + application/x-solvespace + + + + + + + +

Major new stable release. Includes new intersection boolean operation, + new types of groups, solid model suppression, usability improvements + (especially regarding redundant constraints and automatic constraints), + and more. Also includes performance and scalability improvements.

+
+ https://github.com/solvespace/solvespace/releases/tag/v3.0 +
+ + + +

Second release candidate for the 3.0 stable release.

+
+ https://github.com/solvespace/solvespace/releases/tag/v3.0.rc2 +
+ + + +

First release candidate for the 3.0 stable release.

+
+ https://github.com/solvespace/solvespace/releases/tag/v3.0.rc1 +
+ + + +

Bug-fix release in the 2.x series, fixing some crashes.

+
+ https://github.com/solvespace/solvespace/releases/tag/v2.3 +
+ + + +

Bug-fix release, including performance improvements.

+
+ https://github.com/solvespace/solvespace/releases/tag/v2.2 +
+ + + +

Introduced *nix compatibility, internationalization, technical drawing mode, improved import and export, and other features and fixes.

+
+ https://github.com/solvespace/solvespace/releases/tag/v2.1 +
+
+ + From 5f81066c135aab73b42ff03a94c5e86bcb5500be Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Wed, 21 Apr 2021 16:34:22 -0500 Subject: [PATCH 32/89] Add more categories to the desktop files. --- res/freedesktop/solvespace-flatpak.desktop.in | 2 +- res/freedesktop/solvespace-snap.desktop | 2 +- res/freedesktop/solvespace.desktop.in | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/res/freedesktop/solvespace-flatpak.desktop.in b/res/freedesktop/solvespace-flatpak.desktop.in index b16ccf44..c80b67ad 100644 --- a/res/freedesktop/solvespace-flatpak.desktop.in +++ b/res/freedesktop/solvespace-flatpak.desktop.in @@ -6,5 +6,5 @@ Exec=${CMAKE_INSTALL_FULL_BINDIR}/solvespace MimeType=application/x-solvespace Icon=com.solvespace.SolveSpace Type=Application -Categories=Graphics +Categories=Graphics;3DGraphics;Engineering; Keywords=parametric;cad;2d;3d; diff --git a/res/freedesktop/solvespace-snap.desktop b/res/freedesktop/solvespace-snap.desktop index 8441258c..da0dda13 100644 --- a/res/freedesktop/solvespace-snap.desktop +++ b/res/freedesktop/solvespace-snap.desktop @@ -6,5 +6,5 @@ Exec=solvespace MimeType=application/x-solvespace Icon=${SNAP}/meta/icons/hicolor/scalable/apps/snap.solvespace.svg Type=Application -Categories=Graphics +Categories=Graphics;3DGraphics;Engineering; Keywords=parametric;cad;2d;3d; diff --git a/res/freedesktop/solvespace.desktop.in b/res/freedesktop/solvespace.desktop.in index 8c6fb24a..87e6863c 100644 --- a/res/freedesktop/solvespace.desktop.in +++ b/res/freedesktop/solvespace.desktop.in @@ -6,5 +6,5 @@ Exec=${CMAKE_INSTALL_FULL_BINDIR}/solvespace MimeType=application/x-solvespace Icon=solvespace Type=Application -Categories=Graphics +Categories=Graphics;3DGraphics;Engineering; Keywords=parametric;cad;2d;3d; From 7f5bb401c39977127d0ad111b359a752ef2be15f Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Wed, 21 Apr 2021 16:34:55 -0500 Subject: [PATCH 33/89] Update flatpak manifest --- pkg/flatpak/com.solvespace.SolveSpace.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/flatpak/com.solvespace.SolveSpace.json b/pkg/flatpak/com.solvespace.SolveSpace.json index 8c4ce513..fe03179f 100644 --- a/pkg/flatpak/com.solvespace.SolveSpace.json +++ b/pkg/flatpak/com.solvespace.SolveSpace.json @@ -125,8 +125,8 @@ "name": "SolveSpace", "sources": [ { - "type": "git", - "path": "/home/whitequark/Projects/solvespace" + "type": "dir", + "path": "../.." } ], "buildsystem": "cmake", From 8fbefa1ae5098a0e70404b768448c933a3feec6d Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Thu, 22 Apr 2021 13:17:49 -0500 Subject: [PATCH 34/89] Update flatpak manifest more. --- pkg/flatpak/com.solvespace.SolveSpace.json | 53 +++++++++++++--------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/pkg/flatpak/com.solvespace.SolveSpace.json b/pkg/flatpak/com.solvespace.SolveSpace.json index fe03179f..8f55fa84 100644 --- a/pkg/flatpak/com.solvespace.SolveSpace.json +++ b/pkg/flatpak/com.solvespace.SolveSpace.json @@ -1,19 +1,29 @@ { "app-id": "com.solvespace.SolveSpace", - "runtime": "org.gnome.Platform", - "runtime-version": "3.30", - "sdk": "org.gnome.Sdk", + "runtime": "org.freedesktop.Platform", + "runtime-version": "20.08", + "sdk": "org.freedesktop.Sdk", "finish-args": [ /* Access to display server and OpenGL */ - "--share=ipc", "--socket=fallback-x11", "--socket=wayland", "--device=dri", + "--share=ipc", + "--socket=fallback-x11", + "--socket=wayland", + "--device=dri", /* Access to save files */ "--filesystem=home" ], "cleanup": [ - "/include", "/lib/*/include", - "*.a", "*.la", "*.m4", "/lib/libslvs*.so*", "/lib/libglibmm_generate_extra_defs*.so*", - "/share/pkgconfig", "*.pc", - "/share/man", "/share/doc", + "/include", + "/lib/*/include", + "*.a", + "*.la", + "*.m4", + "/lib/libslvs*.so*", + "/lib/libglibmm_generate_extra_defs*.so*", + "/share/pkgconfig", + "*.pc", + "/share/man", + "/share/doc", "/share/aclocal", /* mm-common junk */ "/bin/mm-common-prepare", @@ -26,8 +36,8 @@ "sources": [ { "type": "archive", - "url": "http://ftp.gnome.org/pub/GNOME/sources/mm-common/0.9/mm-common-0.9.12.tar.xz", - "sha256": "ceffdcce1e5b52742884c233ec604bf6fded12eea9da077ce7a62c02c87e7c0b" + "url": "https://download.gnome.org/sources/mm-common/1.0/mm-common-1.0.2.tar.xz", + "sha256": "a2a99f3fa943cf662f189163ed39a2cfc19a428d906dd4f92b387d3659d1641d" } ] }, @@ -39,21 +49,20 @@ "sources": [ { "type": "archive", - "url": "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.10/libsigc++-2.10.1.tar.xz", - "sha256": "c9a25f26178c6cbb147f9904d8c533b5a5c5111a41ac2eb781eb734eea446003" + "url": "https://download.gnome.org/sources/libsigc++/2.10/libsigc%2B%2B-2.10.6.tar.xz", + "sha256": "dda176dc4681bda9d5a2ac1bc55273bdd381662b7a6d49e918267d13e8774e1b" } ] }, { "name": "glibmm", - "config-opts": [ - "--disable-documentation" - ], + "config-opts": [], + "buildsystem": "meson", "sources": [ { "type": "archive", - "url": "http://ftp.gnome.org/pub/GNOME/sources/glibmm/2.58/glibmm-2.58.1.tar.xz", - "sha256": "6e5fe03bdf1e220eeffd543e017fd2fb15bcec9235f0ffd50674aff9362a85f0" + "url": "https://download.gnome.org/sources/glibmm/2.64/glibmm-2.64.5.tar.xz", + "sha256": "508fc86e2c9141198aa16c225b16fd6b911917c0d3817602652844d0973ea386" } ] }, @@ -98,14 +107,13 @@ }, { "name": "gtkmm", - "config-opts": [ - "--disable-documentation" - ], + "config-opts": [], + "buildsystem": "meson", "sources": [ { "type": "archive", - "url": "http://ftp.gnome.org/pub/GNOME/sources/gtkmm/3.24/gtkmm-3.24.1.tar.xz", - "sha256": "ddfe42ed2458a20a34de252854bcf4b52d3f0c671c045f56b42aa27c7542d2fd" + "url": "https://download.gnome.org/sources/gtkmm/3.24/gtkmm-3.24.4.tar.xz", + "sha256": "9beb71c3e90cfcfb790396b51e3f5e7169966751efd4f3ef9697114be3be6743" } ] }, @@ -113,6 +121,7 @@ "name": "libjson-c", "sources": [ { + /* 0.15-nodoc doesn't build */ "type": "archive", "url": "https://s3.amazonaws.com/json-c_releases/releases/json-c-0.13.1-nodoc.tar.gz", "sha256": "94a26340c0785fcff4f46ff38609cf84ebcd670df0c8efd75d039cc951d80132" From bedf72180e602e78000950c2d75a9ab195c43555 Mon Sep 17 00:00:00 2001 From: ruevs Date: Fri, 23 Apr 2021 14:29:22 +0300 Subject: [PATCH 35/89] Final Update of Changelog for 3.0 (#1025) * Final Update of Changelog for 3.0 * Fix markdownlint warnings on CHANGELOG.md * Remove Q3D mention from 3.0 release changelog. Co-authored-by: Ryan Pavlik --- CHANGELOG.md | 474 ++++++++++++++++++++++++++------------------------- 1 file changed, 244 insertions(+), 230 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f70812ec..c6d0fe70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,280 +5,294 @@ Changelog --- New sketch features: - * New intersection boolean operation for solid models. - * New groups, revolution and helical extrusion. - * Extrude, lathe, translate and rotate groups can use the "assembly" - boolean operation, to increase performance. - * The solid model of extrude and lathe groups can be suppressed, - for splitting a single model in multiple parts to export, - or if only the generated entities are desired, without the mesh. - * Translate and rotate groups can create n-dimensional arrays using - the "difference" and "assembly" boolean operations. - * A new sketch in workplane group can be created based on existing workplane. - * TTF text request has two additional points on the right side, which allow - constraining the width of text. - * Image requests can now be created, similar to TTF text requests. - This replaces the "style → background image" feature. - * Irrelevant points (e.g. arc center point) are not counted when estimating - the bounding box used to compute chord tolerance. - * When adding a constraint which has a label and is redundant with another - constraint, the constraint is added as a reference, avoiding an error. - * Datum points can be copied and pasted. - * "Split Curves at Intersection" can now split curves at point lying on curve, - not just at intersection of two curves. - * Property browser now shows amount of degrees of freedom in group list. - It also shows a yellow "err" if the sketch has problems (e.g. self - intersecting) that would propagate in subsequent groups. - * It is now possible to press "g" to toggle construction on new objects while - they are still being drawn. + +* New intersection boolean operation for solid models. +* New groups, revolution and helical extrusion. +* Extrude, lathe, translate and rotate groups can use the "assembly" + boolean operation, to increase performance. +* The solid model of extrude and lathe groups can be suppressed, + for splitting a single model in multiple parts to export, + or if only the generated entities are desired, without the mesh. +* Translate and rotate groups can create n-dimensional arrays using + the "difference" and "assembly" boolean operations. +* A new sketch in workplane group can be created based on existing workplane. +* TTF text request has two additional points on the right side, which allow + constraining the width of text. +* Image requests can now be created, similar to TTF text requests. + This replaces the "style → background image" feature. +* Irrelevant points (e.g. arc center point) are not counted when estimating + the bounding box used to compute chord tolerance. +* When adding a constraint which has a label and is redundant with another + constraint, the constraint is added as a reference, avoiding an error. +* Datum points can be copied and pasted. +* "Split Curves at Intersection" can now split curves at point lying on curve, + not just at intersection of two curves. +* Property browser now shows amount of degrees of freedom in group list. + It also shows a yellow "err" if the sketch has problems (e.g. self + intersecting) that would propagate in subsequent groups. +* It is now possible to press "g" to toggle construction on new objects while + they are still being drawn. +* Allow right click to end sketching of all entities. New constraint features: - * When dragging an arc or rectangle point, it will be automatically - constrained to other points with a click. - * When selecting a constraint, the requests it constraints can be selected - in the text window. - * When selecting an entity, the constraints applied to it can be selected - in the text window. - * Distance constraint labels can now be formatted to use SI prefixes. - Values are edited in the configured unit regardless of label format. - * When creating a constraint, if an exactly identical constraint already - exists, it is now selected instead of adding a redundant constraint. - * It is now possible to turn off automatic creation of horizontal/vertical - constraints on line segments. - * Automatic creation of constraints no longer happens if the constraint - would have been redundant with other ones. - * New option to open the constraint editor for newly created constraints - with a value. - * New "redundant constraint timeout (in ms)" option to prevent UI freeze - when looking for redundant constraints. - * Swap vertical and horizontal constraints when pasting rotated by 90/270 - degrees. + +* When dragging an arc or rectangle point, it will be automatically + constrained to other points with a click. +* When selecting a constraint, the requests it constraints can be selected + in the text window. +* When selecting an entity, the constraints applied to it can be selected + in the text window. +* Distance constraint labels can now be formatted to use SI prefixes. + Values are edited in the configured unit regardless of label format. +* When creating a constraint, if an exactly identical constraint already + exists, it is now selected instead of adding a redundant constraint. +* It is now possible to turn off automatic creation of horizontal/vertical + constraints on line segments. +* Automatic creation of constraints no longer happens if the constraint + would have been redundant with other ones. +* New option to open the constraint editor for newly created constraints + with a value. +* New "redundant constraint timeout (in ms)" option to prevent UI freeze + when looking for redundant constraints. +* Swap vertical and horizontal constraints when pasting rotated by 90/270 + degrees. New export/import features: - * Link IDF circuit boards in an assembly (.emn files) - * Three.js: allow configuring projection for exported model, and initially - use the current viewport projection. - * Wavefront OBJ: a material file is exported alongside the model, containing - mesh color information. - * DXF/DWG: 3D DXF files are imported as construction entities, in 3d. - * [ADDED 2019-02-25](https://github.com/solvespace/solvespace/pull/384) and [REMOVED 2020-11-13](https://github.com/solvespace/solvespace/issues/795): - Q3D: [Q3D](https://github.com/q3k/q3d/) triangle meshes can now be - exported. This format allows to easily hack on triangle mesh data created - in SolveSpace, supports colour information and is more space efficient than - most other formats. - * VRML (WRL) triangle meshes can now be exported, useful for e.g. [KiCAD](http://kicad.org). - * Export 2d section: custom styled entities that lie in the same - plane as the exported section are included. - * Added ExportBackgroundColor in configuration for EPS, PDF, and SVG files. - * STEP export includes object colors and transparency. + +* Link IDF circuit boards in an assembly (.emn files) +* Three.js: allow configuring projection for exported model, and initially + use the current viewport projection. +* Wavefront OBJ: a material file is exported alongside the model, containing + mesh color information. +* DXF/DWG: 3D DXF files are imported as construction entities, in 3d. +* VRML (WRL) triangle meshes can now be exported, useful for e.g. [KiCAD](http://kicad.org). +* Export 2d section: custom styled entities that lie in the same + plane as the exported section are included. +* Added ExportBackgroundColor in configuration for EPS, PDF, and SVG files. +* STEP export includes object colors and transparency. +* Default "line styles" have a new "export these objects" option. New rendering features: - * The "Show/hide hidden lines" button is now a tri-state button that allows - showing all lines (on top of shaded mesh), stippling occluded lines - or not drawing them at all. - * The "Show/hide outlines" button is now independent from "Show/hide edges". - * "View | Darken Inactive Solids" added. When turned off and a "sketch in plane" - group is active solids form previous groups will not be "darkened" (have the - s000d-#def-dim-solid style applied to them). + +* The "Show/hide hidden lines" button is now a tri-state button that allows + showing all lines (on top of shaded mesh), stippling occluded lines + or not drawing them at all. +* The "Show/hide outlines" button is now independent from "Show/hide edges". +* "View | Darken Inactive Solids" added. When turned off and a "sketch in plane" + group is active solids form previous groups will not be "darkened" (have the + s000d-#def-dim-solid style applied to them). New measurement/analysis features: - * New choice for base unit, meters. - * New command for measuring total length of selected entities, - "Analyze → Measure Perimeter". - * New command for measuring center of mass, with live updates as the sketch - changes, "Analyze → Center of Mass". - * New option for displaying areas of closed contours. - * When calculating volume of the mesh, volume of the solid from the current - group is now shown alongside total volume of all solids. - * When calculating area, and faces are selected, calculate area of those faces - instead of the closed contour in the sketch. - * When selecting a point and a line, projected distance to current - workplane is displayed. + +* New choice for base unit, meters. +* New command for measuring total length of selected entities, + "Analyze → Measure Perimeter". +* New command for measuring center of mass, with live updates as the sketch + changes, "Analyze → Center of Mass". +* New option for displaying areas of closed contours. +* When calculating volume of the mesh, volume of the solid from the current + group is now shown alongside total volume of all solids. +* When calculating area, and faces are selected, calculate area of those faces + instead of the closed contour in the sketch. +* When selecting a point and a line, projected distance to current + workplane is displayed. Other new features: - * Improvements to the text window for selected entities and constraints. - * Ambient light source added in text window to allow flat shaded renderings. - * New command-line interface, for batch exporting and more. - * The graphical interface now supports HiDPI screens on every OS. - * New option to lock Z axis to be always vertical, like in SketchUp. - * New button to hide all construction entities. - * New link to match the on-screen size of the sketch with its actual size, - "view → set to full scale". - * When zooming to fit, constraints are also considered. - * Ctrl-clicking entities now deselects them, as the inverse of clicking. - * When clicking on an entity that shares a place with other entities, - the entity from the current group is selected. - * When dragging an entity that shares a place with other entities, - the entity from a request is selected. For example, dragging a point on - a face of an extrusion coincident with the source sketch plane will - drag the point from the source sketch. - * The default font for TTF text is now Bitstream Vera Sans, which is - included in the resources such that it is available on any OS. - * In expressions, numbers can contain the digit group separator, "_". - * The "=" key is bound to "Zoom In", like "+" key. - * The numpad decimal separator key is bound to "." regardless of locale. - * On Windows, full-screen mode is implemented. - * On Linux, native file chooser dialog can be used. - * New edit menu items "Line Styles", "View Projection" and "Configuration" - that are shortcuts to the respective configuration screens. - * New cmake build options using -DENABLE_OPENMP=yes and -DENABLE_LTO=yes - to enable support for multi-threading and link-time optimization. - * "Shift+Scroll" for ten times finer zoom. - * Chinese translation + +* Improvements to the text window for selected entities and constraints. +* Ambient light source added in text window to allow flat shaded renderings. +* New command-line interface, for batch exporting and more. +* The graphical interface now supports HiDPI screens on every OS. +* New option to lock Z axis to be always vertical, like in SketchUp. +* New button to hide all construction entities. +* New link to match the on-screen size of the sketch with its actual size, + "view → set to full scale". +* When zooming to fit, constraints are also considered. +* Ctrl-clicking entities now deselects them, as the inverse of clicking. +* When clicking on an entity that shares a place with other entities, + the entity from the current group is selected. +* When dragging an entity that shares a place with other entities, + the entity from a request is selected. For example, dragging a point on + a face of an extrusion coincident with the source sketch plane will + drag the point from the source sketch. +* The default font for TTF text is now Bitstream Vera Sans, which is + included in the resources such that it is available on any OS. +* In expressions, numbers can contain the digit group separator, "_". +* The "=" key is bound to "Zoom In", like "+" key. +* The numpad decimal separator key is bound to "." regardless of locale. +* On Windows, full-screen mode is implemented. +* On Linux, native file chooser dialog can be used. +* New edit menu items "Line Styles", "View Projection" and "Configuration" + that are shortcuts to the respective configuration screens. +* New cmake build options using -DENABLE_OPENMP=yes and -DENABLE_LTO=yes + to enable support for multi-threading and link-time optimization. +* "Shift+Scroll" for ten times finer zoom. +* Translations: Chinese, French, German, Russian, Turkish, Ukrainian. Bugs fixed: - * Fixed broken --view options for command line thumbnail image creation. - * Some errors in Triangulation of surfaces. - * Some NURNS boolean operations that failed particularly on surfaces - created with Lathe, Revolve, or Helix. - * Segfault in Remove Spline Point context menu. - * A point in 3d constrained to any line whose length is free no longer - causes the line length to collapse. - * Curve-line constraints (in 3d), parallel constraints (in 3d), and - same orientation constraints are more robust. - * Adding some constraints (vertical, midpoint, etc) twice errors out - immediately, instead of later and in a confusing way. - * Constraining a newly placed point to a hovered entity does not cause - spurious changes in the sketch. - * Points highlighted with "Analyze → Show Degrees of Freedom" are drawn - on top of all other geometry. - * A step rotate/translate group using a group forced to triangle mesh - as a source group also gets forced to triangle mesh. - * Paste Transformed with a negative scale does not invert arcs. - * The tangent arc now modifies the original entities instead of deleting - them, such that their constraints are retained. - * When linking a sketch file, missing custom styles are now imported from - the linked file. - * 3Dconnexion SpaceMouse should now work (on Windows and macOS X). - * Improved NURBS boolean operations on curved surfaces in some cases. - * Show only usable fonts in the font selector. + +* Fixed broken --view options for command line thumbnail image creation. +* Some errors in Triangulation of surfaces. +* Some NURNS boolean operations that failed particularly on surfaces + created with Lathe, Revolve, or Helix. +* Segfault in Remove Spline Point context menu. +* A point in 3d constrained to any line whose length is free no longer + causes the line length to collapse. +* Curve-line constraints (in 3d), parallel constraints (in 3d), and + same orientation constraints are more robust. +* Adding some constraints (vertical, midpoint, etc) twice errors out + immediately, instead of later and in a confusing way. +* Constraining a newly placed point to a hovered entity does not cause + spurious changes in the sketch. +* Points highlighted with "Analyze → Show Degrees of Freedom" are drawn + on top of all other geometry. +* A step rotate/translate group using a group forced to triangle mesh + as a source group also gets forced to triangle mesh. +* Paste Transformed with a negative scale does not invert arcs. +* The tangent arc now modifies the original entities instead of deleting + them, such that their constraints are retained. +* When linking a sketch file, missing custom styles are now imported from + the linked file. +* 3Dconnexion SpaceMouse should now work (on Windows and macOS X). +* Improved NURBS boolean operations on curved surfaces in some cases. +* Show only usable fonts in the font selector. 2.x --- Bug fixes: - * Do not crash when changing an unconstrained lathe group between - union and difference modes. + +* Do not crash when changing an unconstrained lathe group between + union and difference modes. 2.3 --- Bug fixes: - * Do not crash when applying a symmetry constraint to two points. - * Fix TTF font metrics again (properly this time). - * Fix the "draw back faces in red" option. - * Fix export of wireframe as 3D DXF. - * Various minor crashes. + +* Do not crash when applying a symmetry constraint to two points. +* Fix TTF font metrics again (properly this time). +* Fix the "draw back faces in red" option. +* Fix export of wireframe as 3D DXF. +* Various minor crashes. 2.2 --- Other new features: - * OS X: support 3Dconnexion devices (SpaceMouse, SpaceNavigator, etc). - * GTK: files with uppercase extensions can be opened. + +* OS X: support 3Dconnexion devices (SpaceMouse, SpaceNavigator, etc). +* GTK: files with uppercase extensions can be opened. Bug fixes: - * Do not remove autosaves after successfully opening a file, preventing - data loss in case of two abnormal terminations in a row. - * Do not crash when changing autosave interval. - * Unbreak the "Show degrees of freedom" command. - * Three.js: correctly respond to controls when browser zoom is used. - * OS X: do not completely hide main window when defocused. - * GTK: unbreak 3Dconnexion support. - * When pasting transformed entities, multiply constraint values by scale. - * Fix TTF font metrics (restore the behavior from version 2.0). - * Forcibly show the current group once we start a drawing operation. - * DXF export: always declare layers before using them. - * Do not truncate operations on selections to first 32 selected entities. - * Translate and rotate groups inherit the "suppress solid model" setting. - * DXF: files with paths containing non-ASCII or spaces can be exported - or imported. - * Significantly improved performance when dragging an entity. - * Various crashes and minor glitches. + +* Do not remove autosaves after successfully opening a file, preventing + data loss in case of two abnormal terminations in a row. +* Do not crash when changing autosave interval. +* Unbreak the "Show degrees of freedom" command. +* Three.js: correctly respond to controls when browser zoom is used. +* OS X: do not completely hide main window when defocused. +* GTK: unbreak 3Dconnexion support. +* When pasting transformed entities, multiply constraint values by scale. +* Fix TTF font metrics (restore the behavior from version 2.0). +* Forcibly show the current group once we start a drawing operation. +* DXF export: always declare layers before using them. +* Do not truncate operations on selections to first 32 selected entities. +* Translate and rotate groups inherit the "suppress solid model" setting. +* DXF: files with paths containing non-ASCII or spaces can be exported + or imported. +* Significantly improved performance when dragging an entity. +* Various crashes and minor glitches. 2.1 --- New sketch features: - * Lathe groups create circle and face entities. - * New toolbar button for creating lathe groups. - * Chord tolerance is separated into two: display chord tolerance (specified - in percents, relative to model bounding box), and export chord tolerance - (specified in millimeters as absolute value). - * Bezier spline points can be added and removed after the spline is created. - * When an unconstrained extrusion is switched between "union" and - "difference", its normal is flipped. - * Groups can be added in the middle of the stack. Note that this results - in files incompatible with version 2.0. - * Active group can be removed. - * Removing an imported group does not cause all subsequent groups to also - be removed. - * When a new group with a solid is created, the color is taken from - a previous group with a solid, if any. - * Entities in a newly active group do not become visible. - * When entities are selected, "Zoom to fit" zooms to fit only these - entities and not the entire sketch. - * Zero-length edges are reported with a "zero-length error", not - "points not all coplanar". + +* Lathe groups create circle and face entities. +* New toolbar button for creating lathe groups. +* Chord tolerance is separated into two: display chord tolerance (specified + in percents, relative to model bounding box), and export chord tolerance + (specified in millimeters as absolute value). +* Bezier spline points can be added and removed after the spline is created. +* When an unconstrained extrusion is switched between "union" and + "difference", its normal is flipped. +* Groups can be added in the middle of the stack. Note that this results + in files incompatible with version 2.0. +* Active group can be removed. +* Removing an imported group does not cause all subsequent groups to also + be removed. +* When a new group with a solid is created, the color is taken from + a previous group with a solid, if any. +* Entities in a newly active group do not become visible. +* When entities are selected, "Zoom to fit" zooms to fit only these + entities and not the entire sketch. +* Zero-length edges are reported with a "zero-length error", not + "points not all coplanar". New constraint features: - * Height of the font used for drawing constraint labels can be changed. - * New constraint, length difference, placed with J. - (Patch by Peter Ruevski) - * Horizontal/vertical constraints are automatically added if a line segment - is close enough to being horizontal/vertical. This can be disabled by - holding Ctrl. - * Reference dimensions and angles can be placed with Shift+D and Shift+N. - * Copying and pasting entities duplicates any constraints that only involve - entities in the clipboard, as well as selected comments. - * Diameter constraints can be shown as radius. - * The "pi" identifier can be used in expressions. - * Constraint labels can be snapped to grid. - * Integer angles are displayed without trailing zeroes. - * Angle constraints have proper reference lines and arrowheads. - * Extension lines are drawn for point-line distance constraints. + +* Height of the font used for drawing constraint labels can be changed. +* New constraint, length difference, placed with J. + (Patch by Peter Ruevski) +* Horizontal/vertical constraints are automatically added if a line segment + is close enough to being horizontal/vertical. This can be disabled by + holding Ctrl. +* Reference dimensions and angles can be placed with Shift+D and Shift+N. +* Copying and pasting entities duplicates any constraints that only involve + entities in the clipboard, as well as selected comments. +* Diameter constraints can be shown as radius. +* The "pi" identifier can be used in expressions. +* Constraint labels can be snapped to grid. +* Integer angles are displayed without trailing zeroes. +* Angle constraints have proper reference lines and arrowheads. +* Extension lines are drawn for point-line distance constraints. New solver features: - * Sketches with redundant and unsolvable constraints are distinguished. - * New group setting, "allow redundant constraints". Note that it makes - the solver less stable. + +* Sketches with redundant and unsolvable constraints are distinguished. +* New group setting, "allow redundant constraints". Note that it makes + the solver less stable. New rendering and styling features: - * New line style parameter: stippling, based on ISO 128. - * Outlines of solids can be drawn in a particular style (by default, thick - lines) controlled by the "Show outline of solid model" button. - * Occluded edges can be drawn in a particular style (by default, stippled - with short dashes) controlled by the "Show hidden lines" button. - * Solids can be made transparent. + +* New line style parameter: stippling, based on ISO 128. +* Outlines of solids can be drawn in a particular style (by default, thick + lines) controlled by the "Show outline of solid model" button. +* Occluded edges can be drawn in a particular style (by default, stippled + with short dashes) controlled by the "Show hidden lines" button. +* Solids can be made transparent. New export/import features: - * The old "import" command (for .slvs files) is renamed to "link". - * If a linked .slvs file is not found, first the relative path recorded - in the .slvs file is checked and then the absolute path; this is - an inversion of the previously used order. If it is still not found, - a dialog appears offering to locate it. - * DXF and DWG files can be imported, with point-coincident, horizontal and - vertical constraints automatically inferred from geometry, and distance - and angle constraints created when a dimension placed against geometry - exists. - * Triangle mesh can be exported for viewing in the browser through WebGL. - * Export dialogs remember the last file format used, and preselect it. - * Exported DXF files have exact circles, arcs and splines instead of - a piecewise linear approximation (unless hidden line removal was needed). - * Exported DXF files preserve color and line thickness. - * In exported DXF files, constraints are represented as DXF dimensions, - instead of piecewise linear geometry. - * When exporting 2d views, overlapping lines are removed. + +* The old "import" command (for .slvs files) is renamed to "link". +* If a linked .slvs file is not found, first the relative path recorded + in the .slvs file is checked and then the absolute path; this is + an inversion of the previously used order. If it is still not found, + a dialog appears offering to locate it. +* DXF and DWG files can be imported, with point-coincident, horizontal and + vertical constraints automatically inferred from geometry, and distance + and angle constraints created when a dimension placed against geometry + exists. +* Triangle mesh can be exported for viewing in the browser through WebGL. +* Export dialogs remember the last file format used, and preselect it. +* Exported DXF files have exact circles, arcs and splines instead of + a piecewise linear approximation (unless hidden line removal was needed). +* Exported DXF files preserve color and line thickness. +* In exported DXF files, constraints are represented as DXF dimensions, + instead of piecewise linear geometry. +* When exporting 2d views, overlapping lines are removed. Other new features: - * Native Linux (GTK 2 and GTK 3) and Mac OS X ports. - * Automatically save and then restore sketches if SolveSpace crashes. - (Patch by Marc Britten) - * Unicode is supported everywhere (filenames, group names, TTF text, - comments), although RTL scripts and scripts making heavy use of ligatures - are not rendered correctly. - * The vector font is grid-fitted when rendered on screen to make it easier - to read regardless of its size. + +* Native Linux (GTK 2 and GTK 3) and Mac OS X ports. +* Automatically save and then restore sketches if SolveSpace crashes. + (Patch by Marc Britten) +* Unicode is supported everywhere (filenames, group names, TTF text, + comments), although RTL scripts and scripts making heavy use of ligatures + are not rendered correctly. +* The vector font is grid-fitted when rendered on screen to make it easier + to read regardless of its size. 2.0 --- From 00533a0fb22c85293d253f998c8d6f30029061ea Mon Sep 17 00:00:00 2001 From: ruevs Date: Fri, 23 Apr 2021 16:07:51 +0300 Subject: [PATCH 36/89] Remove reference to SketchUp in the changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6d0fe70..c21b5d9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -103,7 +103,8 @@ Other new features: * Ambient light source added in text window to allow flat shaded renderings. * New command-line interface, for batch exporting and more. * The graphical interface now supports HiDPI screens on every OS. -* New option to lock Z axis to be always vertical, like in SketchUp. +* New option to lock Z axis to be always vertical when rotating the view, + a.k.a. "turntable navigation". * New button to hide all construction entities. * New link to match the on-screen size of the sketch with its actual size, "view → set to full scale". From 709dc31f7865573cbf23c09dbd1946b017e7dc80 Mon Sep 17 00:00:00 2001 From: robnee Date: Sun, 25 Apr 2021 09:24:35 -0400 Subject: [PATCH 37/89] Fix lookup of stipple pattern before config is available Fix a bug with the lookup of stipple pattern for default styles when the config settings are not yet available (install/upgrade/first run). This caused hidden lines to display as continuous rather than dashed. --- src/sketch.h | 1 + src/style.cpp | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/sketch.h b/src/sketch.h index bda0a983..74111d18 100644 --- a/src/sketch.h +++ b/src/sketch.h @@ -924,6 +924,7 @@ public: static double StippleScale(hStyle hs); static double StippleScaleMm(hStyle hs); static std::string StipplePatternName(hStyle hs); + static std::string StipplePatternName(StipplePattern stippleType); static StipplePattern StipplePatternFromString(std::string name); std::string DescriptionString() const; diff --git a/src/style.cpp b/src/style.cpp index b4ed841e..b1070cdc 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -114,7 +114,8 @@ void Style::FillDefaultStyle(Style *s, const Default *d, bool factory) { s->stippleType = (factory) ? d->stippleType : Style::StipplePatternFromString( - settings->ThawString(CnfStippleType(d->cnfPrefix), "")); + settings->ThawString(CnfStippleType(d->cnfPrefix), + StipplePatternName(d->stippleType))); s->stippleScale = (factory) ? 15.0 : settings->ThawFloat(CnfStippleScale(d->cnfPrefix), 15.0); @@ -397,7 +398,11 @@ StipplePattern Style::PatternType(hStyle hs) { std::string Style::StipplePatternName(hStyle hs) { Style *s = Get(hs); - switch(s->stippleType) { + return StipplePatternName(s->stippleType); +} + +std::string Style::StipplePatternName(StipplePattern stippleType) { + switch(stippleType) { case StipplePattern::CONTINUOUS: return "Continuous"; case StipplePattern::SHORT_DASH: return "ShortDash"; case StipplePattern::DASH: return "Dash"; @@ -409,10 +414,9 @@ std::string Style::StipplePatternName(hStyle hs) { case StipplePattern::ZIGZAG: return "ZigZag"; } - return "CONTINUOUS"; + return "Continuous"; } - double Style::StippleScale(hStyle hs) { Style *s = Get(hs); return s->stippleScale; From e15ccdd477693e2e8b140572d9a8d5fd114cc474 Mon Sep 17 00:00:00 2001 From: robnee Date: Sun, 11 Apr 2021 10:04:28 -0400 Subject: [PATCH 38/89] Update property browser display live when dragging Keep items in selected state while dragging so that property browser will track them until the left mouse button is released. Also, trigger a property browser update on mouse move while dragging to make the display "live" --- src/mouse.cpp | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/mouse.cpp b/src/mouse.cpp index b8a191f7..e46acae8 100644 --- a/src/mouse.cpp +++ b/src/mouse.cpp @@ -10,6 +10,8 @@ void GraphicsWindow::UpdateDraggedPoint(hEntity hp, double mx, double my) { Vector pos = p->PointGetNum(); UpdateDraggedNum(&pos, mx, my); p->PointForceTo(pos); + + SS.ScheduleShowTW(); } void GraphicsWindow::UpdateDraggedNum(Vector *pos, double mx, double my) { @@ -188,32 +190,23 @@ void GraphicsWindow::MouseMoved(double x, double y, bool leftDown, hEntity dragEntity = ChooseFromHoverToDrag().entity; if(dragEntity.v) e = SK.GetEntity(dragEntity); if(e && e->type != Entity::Type::WORKPLANE) { - Entity *e = SK.GetEntity(dragEntity); + if(!hoverWasSelectedOnMousedown) { + // The user clicked an unselected entity, which + // means they're dragging just the hovered thing, + // not the full selection. So clear all the selection + // except that entity. + ClearSelection(); + MakeSelected(dragEntity); + } if(e->type == Entity::Type::CIRCLE && selection.n <= 1) { // Drag the radius. - ClearSelection(); pending.circle = dragEntity; pending.operation = Pending::DRAGGING_RADIUS; } else if(e->IsNormal()) { - ClearSelection(); pending.normal = dragEntity; pending.operation = Pending::DRAGGING_NORMAL; } else { - if(!hoverWasSelectedOnMousedown) { - // The user clicked an unselected entity, which - // means they're dragging just the hovered thing, - // not the full selection. So clear all the selection - // except that entity. - ClearSelection(); - MakeSelected(e->h); - } StartDraggingBySelection(); - if(!hoverWasSelectedOnMousedown) { - // And then clear the selection again, since they - // probably didn't want that selected if they just - // were dragging it. - ClearSelection(); - } hover.Clear(); pending.operation = Pending::DRAGGING_POINTS; } @@ -425,6 +418,7 @@ void GraphicsWindow::MouseMoved(double x, double y, bool leftDown, SK.GetEntity(circle->distance)->DistanceForceTo(r); SS.MarkGroupDirtyByEntity(pending.circle); + SS.ScheduleShowTW(); break; } @@ -1311,15 +1305,20 @@ void GraphicsWindow::MouseLeftDown(double mx, double my, bool shiftDown, bool ct void GraphicsWindow::MouseLeftUp(double mx, double my, bool shiftDown, bool ctrlDown) { orig.mouseDown = false; - hoverWasSelectedOnMousedown = false; switch(pending.operation) { case Pending::DRAGGING_POINTS: - SS.extraLine.draw = false; - // fall through case Pending::DRAGGING_CONSTRAINT: case Pending::DRAGGING_NORMAL: case Pending::DRAGGING_RADIUS: + if(!hoverWasSelectedOnMousedown) { + // And then clear the selection again, since they + // probably didn't want that selected if they just + // were dragging it. + ClearSelection(); + } + hoverWasSelectedOnMousedown = false; + SS.extraLine.draw = false; ClearPending(); Invalidate(); break; From 7e08b02de1d91580f691dbe5eed08e2ccfd24eed Mon Sep 17 00:00:00 2001 From: ruevs Date: Tue, 11 May 2021 11:03:16 +0300 Subject: [PATCH 39/89] Allow comments to be associated with point entities If a single point is selected when a "Constrain | Comment" (`;`) is added then the comment is associated with the point and its position becomes relative to the point. In this way the comment will move with the point. If nothing is selected or more than a single point is selected then the behaviour is as before and the comment is "floating". Closes #1032 --- src/constraint.cpp | 17 +++++++++++++---- src/drawconstraint.cpp | 9 +++++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/constraint.cpp b/src/constraint.cpp index 435fc3ac..c1da398d 100644 --- a/src/constraint.cpp +++ b/src/constraint.cpp @@ -767,10 +767,19 @@ void Constraint::MenuConstrain(Command id) { break; case Command::COMMENT: - SS.GW.pending.operation = GraphicsWindow::Pending::COMMAND; - SS.GW.pending.command = Command::COMMENT; - SS.GW.pending.description = _("click center of comment text"); - SS.ScheduleShowTW(); + if(gs.points == 1 && gs.n == 1) { + c.type = Type::COMMENT; + c.ptA = gs.point[0]; + c.group = SS.GW.activeGroup; + c.workplane = SS.GW.ActiveWorkplane(); + c.comment = _("NEW COMMENT -- DOUBLE-CLICK TO EDIT"); + AddConstraint(&c); + } else { + SS.GW.pending.operation = GraphicsWindow::Pending::COMMAND; + SS.GW.pending.command = Command::COMMENT; + SS.GW.pending.description = _("click center of comment text"); + SS.ScheduleShowTW(); + } break; default: ssassert(false, "Unexpected menu ID"); diff --git a/src/drawconstraint.cpp b/src/drawconstraint.cpp index 2cdb9afc..d6a6f3fb 100644 --- a/src/drawconstraint.cpp +++ b/src/drawconstraint.cpp @@ -1189,8 +1189,13 @@ s: } hcs = canvas->GetStroke(stroke); } - DoLabel(canvas, hcs, disp.offset, labelPos, u, v); - if(refs) refs->push_back(disp.offset); + Vector ref = disp.offset; + if(ptA.v) { + Vector a = SK.GetEntity(ptA)->PointGetNum(); + ref = a.Plus(disp.offset); + } + DoLabel(canvas, hcs, ref, labelPos, u, v); + if(refs) refs->push_back(ref); return; } } From 7674be791e84ee4f9d06ca6e4ba35f94342c9543 Mon Sep 17 00:00:00 2001 From: ruevs Date: Wed, 31 Mar 2021 01:29:05 +0300 Subject: [PATCH 40/89] IdList: Optimize IdList by Using an Index and Add a Proper Iterator - Use `std::vector elemstore` to store elements. Avoids manual memory management. - Add and index (`std::vector elemidx`) that avoids moving large objects when adding elements. - Add a free element list (`std::vector freelist`) that speeds up element removal by avoiding rearranging the element storage. It also avoids reallocations when adding elements later. - Add a proper iterator. It will be used to remove NextAfter - which is a performance bottleneck. --- src/dsc.h | 290 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 190 insertions(+), 100 deletions(-) diff --git a/src/dsc.h b/src/dsc.h index 34190e62..f4a7933c 100644 --- a/src/dsc.h +++ b/src/dsc.h @@ -10,6 +10,7 @@ #include "solvespace.h" #include +#include /// Trait indicating which types are handle types and should get the associated operators. /// Specialize for each handle type and inherit from std::true_type. @@ -371,15 +372,28 @@ public: } }; +template class IdList; + // Comparison functor used by IdList and related classes template struct CompareId { - bool operator()(T const& lhs, T const& rhs) const { - return lhs.h.v < rhs.h.v; + + CompareId(const IdList *list) { + idlist = list; } - bool operator()(T const& lhs, H rhs) const { - return lhs.h.v < rhs.v; + + bool operator()(int lhs, T const& rhs) const { + return idlist->elemstore[lhs].h.v < rhs.h.v; } + bool operator()(int lhs, H rhs) const { + return idlist->elemstore[lhs].h.v < rhs.v; + } + bool operator()(T *lhs, int rhs) const { + return lhs->h.v < idlist->elemstore[rhs].h.v; + } + +private: + const IdList *idlist; }; // A list, where each element has an integer identifier. The list is kept @@ -387,23 +401,89 @@ struct CompareId { // id. template class IdList { - T *elem = nullptr; - int elemsAllocated = 0; + std::vector elemstore; + std::vector elemidx; + std::vector freelist; public: - int n = 0; + int n = 0; // PAR@@@@@ make this private to see all interesting and suspicious places in SoveSpace ;-) + friend struct CompareId; using Compare = CompareId; + struct iterator { + typedef std::random_access_iterator_tag iterator_category; + typedef T value_type; + typedef int difference_type; + typedef T *pointer; + typedef T &reference; + + public: + T &operator*() const noexcept { return *elem; } + const T *operator->() const noexcept { return elem; } + + T &operator=(const T &e) const noexcept { + *elem = e; + return *this; + } + T &operator=(const H h) const noexcept { + elem->h = e; + return *this; + } + + bool operator==(const iterator &p) const { return p.position == position; } + bool operator<(const iterator &p) const { return position < p.position; } + bool operator!=(const iterator &p) const { return !operator==(p); } + bool operator>(const iterator &p) const { return operator!=(p) && !operator<(p); } + bool operator>=(const iterator &p) const { return !operator<(p); } + bool operator<=(const iterator &p) const { return !operator>(p); } + + iterator &operator++() { + ++position; + if(position >= (int)list->elemidx.size()) { + elem = nullptr; // PAR@@@@ Remove just debugging + } else if(0 <= position) { + elem = &(list->elemstore[list->elemidx[position]]); + } + return *this; + } + iterator &operator--() { + --position; + if(0 > position) { + elem = nullptr; // PAR@@@@ Remove just debugging + } else if(position < list->elemidx.size()) { + elem = &(list->elemstore[list->elemidx[position]]); + } + return *this; + } + + iterator(IdList *l) : list(l), position(0) { + if(list) { + if(list->elemstore.size() && list->elemidx.size()) { + elem = &(list->elemstore[list->elemidx[position]]); + } + } + }; + iterator(const iterator &iter) + : list(iter.list), position(iter.position), elem(iter.elem){}; + iterator(IdList *l, int pos) : list(l), position(pos) { + if(position >= (int)list->elemidx.size()) { + elem = nullptr; + } else if(0 <= position) { + elem = &((list->elemstore)[list->elemidx[position]]); + } + }; + + private: + int position; + T *elem; + IdList *list; + }; + + bool IsEmpty() const { return n == 0; } - void AllocForOneMore() { - if(n >= elemsAllocated) { - ReserveMore((elemsAllocated + 32)*2 - n); - } - } - uint32_t MaximumId() { if(IsEmpty()) { return 0; @@ -414,75 +494,65 @@ public: H AddAndAssignId(T *t) { t->h.v = (MaximumId() + 1); - AllocForOneMore(); - // Copy-construct at the end of the list. - new(&elem[n]) T(*t); + // Add at the end of the list. + elemstore.push_back(*t); + elemidx.push_back(elemstore.size()-1); ++n; return t->h; } - T * LowerBound(T const& t) { - if(IsEmpty()) { - return nullptr; - } - auto it = std::lower_bound(begin(), end(), t, Compare()); - return it; - } - - T * LowerBound(H const& h) { - if(IsEmpty()) { - return nullptr; - } - auto it = std::lower_bound(begin(), end(), h, Compare()); - return it; - } - int LowerBoundIndex(T const& t) { if(IsEmpty()) { return 0; } - auto it = LowerBound(t); - auto idx = std::distance(begin(), it); + auto it = std::lower_bound(elemptr.begin(), elemptr.end(), t, Compare(this)); + auto idx = std::distance(elemidx.begin(), it); auto i = static_cast(idx); return i; } + void ReserveMore(int howMuch) { - if(n + howMuch > elemsAllocated) { - elemsAllocated = n + howMuch; - T *newElem = (T *)::operator new[]((size_t)elemsAllocated*sizeof(T)); - for(int i = 0; i < n; i++) { - new(&newElem[i]) T(std::move(elem[i])); - elem[i].~T(); - } - ::operator delete[](elem); - elem = newElem; - } + elemstore.reserve(n + howMuch); + elemidx.reserve(n + howMuch); +// freelist.reserve(n + howMuch); // PAR@@@@ maybe we should - not much more RAM } void Add(T *t) { - AllocForOneMore(); - // Look to see if we already have something with the same handle value. ssassert(FindByIdNoOops(t->h) == nullptr, "Handle isn't unique"); // Find out where the added element should be. - int pos = LowerBoundIndex(*t); + auto pos = std::lower_bound(elemidx.begin(), elemidx.end(), *t, Compare(this)); - // Shift everything from there to the end of the array. - new(&elem[n]) T(); - for (int i = n; i > pos; i--) - elem[i] = std::move(elem[i - 1]); + if(freelist.empty()) { // Add a new element to the store + elemstore.push_back(*t); + // Insert a pointer to the element at the correct position + if(elemidx.empty()) { + // The list is empty so pos, begin and end are all null. + // insert does not work in this case. + elemidx.push_back(elemstore.size()-1); + } else { + elemidx.insert(pos, elemstore.size() - 1); + } + } else { // Use the last element from the freelist + // Insert an index to the element at the correct position + elemidx.insert(pos, freelist.back()); + // Remove the element from the freelist + freelist.pop_back(); + + // Copy-construct to the element storage. + elemstore[*pos] = T(*t); + // *elemptr[pos] = *t; // PAR@@@@@@ maybe this? + } - // Copy-construct at the right place. - elem[pos] = T(*t); ++n; } T *FindById(H h) { T *t = FindByIdNoOops(h); - ssassert(t != NULL, "Cannot find handle"); + ssassert(t != nullptr, "Cannot find handle"); return t; } @@ -490,51 +560,63 @@ public: if(IsEmpty()) { return -1; } - auto it = LowerBound(h); - auto idx = std::distance(begin(), it); - if (idx < n) { - return idx; + auto it = std::lower_bound(elemidx.begin(), elemidx.end(), h, Compare(this)); + if(it == elemidx.end()) { + return -1; + } else { + auto idx = std::distance(elemidx.begin(), it); + return static_cast(idx); } - return -1; } T *FindByIdNoOops(H h) { if(IsEmpty()) { return nullptr; } - auto it = LowerBound(h); - if (it == nullptr || it == end()) { + auto it = std::lower_bound(elemidx.begin(), elemidx.end(), h, Compare(this)); + if(it == elemidx.end()) { return nullptr; + } else { + if(elemstore[*it].h.v != h.v) { + return nullptr; + } + return &elemstore[*it]; } - if (it->h.v == h.v) { - return it; - } - return nullptr; } T *First() { - return (IsEmpty()) ? NULL : &(elem[0]); + return (IsEmpty()) ? nullptr : &(elemstore[0]); } T *Last() { - return (IsEmpty()) ? NULL : &(elem[n-1]); - } - T *NextAfter(T *prev) { - if(IsEmpty() || !prev) return NULL; - if(prev - First() == (n - 1)) return NULL; - return prev + 1; + return (IsEmpty()) ? nullptr : &(elemstore[elemidx.back()]); } - T &Get(size_t i) { return elem[i]; } - T const &Get(size_t i) const { return elem[i]; } + // Remove this entirely?!? 199 places in the code mostly for loops? + T *NextAfter(T *prev) { + if(IsEmpty() || !prev) { + return nullptr; + } + + // PAR@@@@ This is slower than before now. O(log(n)) was O(1) + auto it = std::upper_bound(elemidx.begin(), elemidx.end(), prev, Compare(this)); + if(it == elemidx.end()) { + return nullptr; + } else { + return &elemstore[*it]; + } + } + + T &Get(size_t i) { return elemstore[elemidx[i]]; } + T const &Get(size_t i) const { return elemstore[elemidx[i]]; } T &operator[](size_t i) { return Get(i); } T const &operator[](size_t i) const { return Get(i); } - T *begin() { return IsEmpty() ? nullptr : &elem[0]; } - T *end() { return IsEmpty() ? nullptr : &elem[0] + n; } - const T *begin() const { return IsEmpty() ? nullptr : &elem[0]; } - const T *end() const { return IsEmpty() ? nullptr : &elem[0] + n; } - const T *cbegin() const { return begin(); } - const T *cend() const { return end(); } + iterator begin() { return IsEmpty() ? nullptr : iterator(this); } + iterator end() { return IsEmpty() ? nullptr : iterator(this, elemidx.size()); } + const iterator begin() const { return IsEmpty() ? nullptr : iterator(this); } + const iterator end() const { return IsEmpty() ? nullptr : iterator(this, elemidx.size()); } + const iterator cbegin() const { return begin(); } + const iterator cend() const { return end(); } void ClearTags() { for(auto &elt : *this) { elt.tag = 0; } @@ -551,22 +633,23 @@ public: int src, dest; dest = 0; for(src = 0; src < n; src++) { - if(elem[src].tag) { + if(elemstore[elemidx[src]].tag) { // this item should be deleted - elem[src].Clear(); + elemstore[elemidx[src]].Clear(); +// elemstore[elemidx[src]].~T(); // Clear below calls the destructors + freelist.push_back(elemidx[src]); + elemidx[src] = 0xDEADBEEF; // PAR@@@@@ just for debugging, not needed, remove later } else { if(src != dest) { - elem[dest] = elem[src]; + elemidx[dest] = elemidx[src]; } dest++; } } - for(int i = dest; i < n; i++) - elem[i].~T(); n = dest; - // and elemsAllocated is untouched, because we didn't resize + elemidx.resize(n); // Clear left over elements at the end. } - void RemoveById(H h) { + void RemoveById(H h) { // PAR@@@@@ this can be optimized ClearTags(); FindById(h)->tag = 1; RemoveTagged(); @@ -574,28 +657,35 @@ public: void MoveSelfInto(IdList *l) { l->Clear(); - std::swap(l->elem, elem); - std::swap(l->elemsAllocated, elemsAllocated); + std::swap(l->elemstore, elemstore); + std::swap(l->elemidx, elemidx); + std::swap(l->freelist, freelist); std::swap(l->n, n); } void DeepCopyInto(IdList *l) { l->Clear(); - l->elem = (T *)::operator new[](elemsAllocated * sizeof(elem[0])); - for(int i = 0; i < n; i++) - new(&l->elem[i]) T(elem[i]); - l->elemsAllocated = elemsAllocated; - l->n = n; + + for(auto const &it : elemstore) { + l->elemstore.push_back(it); + } + + for(auto const &it : elemidx) { + l->elemidx.push_back(it); + } + + l->n = n; } void Clear() { - for(int i = 0; i < n; i++) { - elem[i].Clear(); - elem[i].~T(); + for(auto &it : elemidx) { + elemstore[it].Clear(); +// elemstore[it].~T(); // clear below calls the destructors } - if(elem) ::operator delete[](elem); - elem = NULL; - elemsAllocated = n = 0; + freelist.clear(); + elemidx.clear(); + elemstore.clear(); + n = 0; } }; From 9dd67c7ba05e1fe33768f8540e36c2395d981227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?= Date: Sat, 3 Apr 2021 19:07:53 +0200 Subject: [PATCH 41/89] Use Range-based for Loops Instead of NextAfter for all IdList Objects Based on commit '3b395bb5a7' by pjanx Resolves a performance regression of iteration being O(n * log n) rather than O(n). --- src/clipboard.cpp | 19 ++++++------- src/draw.cpp | 17 ++++++----- src/exportstep.cpp | 11 ++++---- src/exportvector.cpp | 57 +++++++++++++++++++------------------ src/file.cpp | 30 ++++++++++---------- src/graphicswin.cpp | 50 +++++++++++++++------------------ src/groupmesh.cpp | 20 ++++++------- src/modify.cpp | 48 +++++++++++++++----------------- src/mouse.cpp | 18 ++++++------ src/srf/boolean.cpp | 65 ++++++++++++++++++++----------------------- src/srf/merge.cpp | 7 ++--- src/srf/raycast.cpp | 34 +++++++++++----------- src/srf/surface.cpp | 32 +++++++++------------ src/srf/surfinter.cpp | 34 +++++++++++----------- src/style.cpp | 9 +++--- 15 files changed, 210 insertions(+), 241 deletions(-) diff --git a/src/clipboard.cpp b/src/clipboard.cpp index d43ec458..96265008 100644 --- a/src/clipboard.cpp +++ b/src/clipboard.cpp @@ -138,18 +138,17 @@ void GraphicsWindow::CopySelection() { } } - Constraint *c; - for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { - if(!SS.clipboard.ContainsEntity(c->ptA) || - !SS.clipboard.ContainsEntity(c->ptB) || - !SS.clipboard.ContainsEntity(c->entityA) || - !SS.clipboard.ContainsEntity(c->entityB) || - !SS.clipboard.ContainsEntity(c->entityC) || - !SS.clipboard.ContainsEntity(c->entityD) || - c->type == Constraint::Type::COMMENT) { + for(Constraint &c : SK.constraint) { + if(!SS.clipboard.ContainsEntity(c.ptA) || + !SS.clipboard.ContainsEntity(c.ptB) || + !SS.clipboard.ContainsEntity(c.entityA) || + !SS.clipboard.ContainsEntity(c.entityB) || + !SS.clipboard.ContainsEntity(c.entityC) || + !SS.clipboard.ContainsEntity(c.entityD) || + c.type == Constraint::Type::COMMENT) { continue; } - SS.clipboard.c.Add(c); + SS.clipboard.c.Add(&c); } } diff --git a/src/draw.cpp b/src/draw.cpp index ccaeb961..3610f201 100644 --- a/src/draw.cpp +++ b/src/draw.cpp @@ -210,16 +210,15 @@ void GraphicsWindow::SelectByMarquee() { BBox marqueeBBox = BBox::From(Vector::From(marqueePoint.x, marqueePoint.y, VERY_NEGATIVE), Vector::From(orig.mouse.x, orig.mouse.y, VERY_POSITIVE)); - Entity *e; - for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { - if(e->group != SS.GW.activeGroup) continue; - if(e->IsFace() || e->IsDistance()) continue; - if(!e->IsVisible()) continue; + for(Entity &e : SK.entity) { + if(e.group != SS.GW.activeGroup) continue; + if(e.IsFace() || e.IsDistance()) continue; + if(!e.IsVisible()) continue; bool entityHasBBox; - BBox entityBBox = e->GetOrGenerateScreenBBox(&entityHasBBox); + BBox entityBBox = e.GetOrGenerateScreenBBox(&entityHasBBox); if(entityHasBBox && entityBBox.Overlaps(marqueeBBox)) { - MakeSelected(e->h); + MakeSelected(e.h); } } } @@ -412,8 +411,8 @@ void GraphicsWindow::HitTestMakeSelection(Point2d mp) { cached.projRight = projRight; cached.projUp = projUp; cached.scale = scale; - for(Entity *e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { - e->screenBBoxValid = false; + for(Entity &e : SK.entity) { + e.screenBBoxValid = false; } } diff --git a/src/exportstep.cpp b/src/exportstep.cpp index db42dc08..5bfa57f6 100644 --- a/src/exportstep.cpp +++ b/src/exportstep.cpp @@ -353,22 +353,21 @@ void StepFileWriter::ExportSurfacesTo(const Platform::Path &filename) { advancedFaces = {}; - SSurface *ss; - for(ss = shell->surface.First(); ss; ss = shell->surface.NextAfter(ss)) { - if(ss->trim.IsEmpty()) + for(SSurface &ss : shell->surface) { + if(ss.trim.IsEmpty()) continue; // Get all of the loops of Beziers that trim our surface (with each // Bezier split so that we use the section as t goes from 0 to 1), and // the piecewise linearization of those loops in xyz space. SBezierList sbl = {}; - ss->MakeSectionEdgesInto(shell, NULL, &sbl); + ss.MakeSectionEdgesInto(shell, NULL, &sbl); // Apply the export scale factor. - ss->ScaleSelfBy(1.0/SS.exportScale); + ss.ScaleSelfBy(1.0/SS.exportScale); sbl.ScaleSelfBy(1.0/SS.exportScale); - ExportSurface(ss, &sbl); + ExportSurface(&ss, &sbl); sbl.Clear(); } diff --git a/src/exportvector.cpp b/src/exportvector.cpp index 97730997..5a3c5d36 100644 --- a/src/exportvector.cpp +++ b/src/exportvector.cpp @@ -170,22 +170,21 @@ public: } if(writer->constraint) { - Constraint *c; - for(c = writer->constraint->First(); c; c = writer->constraint->NextAfter(c)) { - if(!writer->NeedToOutput(c)) continue; - switch(c->type) { + for(Constraint &c : *writer->constraint) { + if(!writer->NeedToOutput(&c)) continue; + switch(c.type) { case Constraint::Type::PT_PT_DISTANCE: { - Vector ap = SK.GetEntity(c->ptA)->PointGetNum(); - Vector bp = SK.GetEntity(c->ptB)->PointGetNum(); - Vector ref = ((ap.Plus(bp)).ScaledBy(0.5)).Plus(c->disp.offset); + Vector ap = SK.GetEntity(c.ptA)->PointGetNum(); + Vector bp = SK.GetEntity(c.ptB)->PointGetNum(); + Vector ref = ((ap.Plus(bp)).ScaledBy(0.5)).Plus(c.disp.offset); writeAlignedDimension(xfrm(ap), xfrm(bp), xfrm(ref), - xfrm(ref), c->Label(), c->GetStyle(), c->valA); + xfrm(ref), c.Label(), c.GetStyle(), c.valA); break; } case Constraint::Type::PT_LINE_DISTANCE: { - Vector pt = SK.GetEntity(c->ptA)->PointGetNum(); - Entity *line = SK.GetEntity(c->entityA); + Vector pt = SK.GetEntity(c.ptA)->PointGetNum(); + Entity *line = SK.GetEntity(c.entityA); Vector lA = SK.GetEntity(line->point[0])->PointGetNum(); Vector lB = SK.GetEntity(line->point[1])->PointGetNum(); Vector dl = lB.Minus(lA); @@ -194,7 +193,7 @@ public: if(pt.Equals(closest)) break; - Vector ref = ((closest.Plus(pt)).ScaledBy(0.5)).Plus(c->disp.offset); + Vector ref = ((closest.Plus(pt)).ScaledBy(0.5)).Plus(c.disp.offset); Vector refClosest = ref.ClosestPointOnLine(lA, dl); double ddl = dl.Dot(dl); @@ -209,54 +208,54 @@ public: Vector xdl = xfrm(lB).Minus(xfrm(lA)); writeLinearDimension(xfrm(pt), xfrm(refClosest), xfrm(ref), - xfrm(ref), c->Label(), + xfrm(ref), c.Label(), atan2(xdl.y, xdl.x) / PI * 180.0 + 90.0, 0.0, - c->GetStyle(), c->valA); + c.GetStyle(), c.valA); break; } case Constraint::Type::DIAMETER: { - Entity *circle = SK.GetEntity(c->entityA); + Entity *circle = SK.GetEntity(c.entityA); Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); Quaternion q = SK.GetEntity(circle->normal)->NormalGetNum(); Vector n = q.RotationN().WithMagnitude(1); double r = circle->CircleGetRadiusNum(); - Vector ref = center.Plus(c->disp.offset); + Vector ref = center.Plus(c.disp.offset); // Force the label into the same plane as the circle. ref = ref.Minus(n.ScaledBy(n.Dot(ref) - n.Dot(center))); Vector rad = ref.Minus(center).WithMagnitude(r); - if(/*isRadius*/c->other) { + if(/*isRadius*/c.other) { writeRadialDimension( xfrm(center), xfrm(center.Plus(rad)), - xfrm(ref), c->Label(), c->GetStyle(), c->valA); + xfrm(ref), c.Label(), c.GetStyle(), c.valA); } else { writeDiametricDimension( xfrm(center.Minus(rad)), xfrm(center.Plus(rad)), - xfrm(ref), c->Label(), c->GetStyle(), c->valA); + xfrm(ref), c.Label(), c.GetStyle(), c.valA); } break; } case Constraint::Type::ANGLE: { - Entity *a = SK.GetEntity(c->entityA); - Entity *b = SK.GetEntity(c->entityB); + Entity *a = SK.GetEntity(c.entityA); + Entity *b = SK.GetEntity(c.entityB); Vector a0 = a->VectorGetStartPoint(); Vector b0 = b->VectorGetStartPoint(); Vector da = a->VectorGetNum(); Vector db = b->VectorGetNum(); - if(/*otherAngle*/c->other) { + if(/*otherAngle*/c.other) { a0 = a0.Plus(da); da = da.ScaledBy(-1); } bool skew = false; - Vector ref = c->disp.offset; + Vector ref = c.disp.offset; Vector pi = Vector::AtIntersectionOfLines(a0, a0.Plus(da), b0, b0.Plus(db), &skew); - if(!skew) ref = pi.Plus(c->disp.offset); + if(!skew) ref = pi.Plus(c.disp.offset); Vector norm = da.Cross(db); Vector dna = norm.Cross(da).WithMagnitude(1.0); @@ -277,7 +276,7 @@ public: Vector bisect = da.WithMagnitude(1.0).ScaledBy(cos(thetaf / 2.0)).Plus( dna.ScaledBy(sin(thetaf / 2.0))); - ref = pi.Plus(bisect.WithMagnitude(c->disp.offset.Magnitude())); + ref = pi.Plus(bisect.WithMagnitude(c.disp.offset.Magnitude())); // Get lines again to write exact line. a0 = a->VectorGetStartPoint(); @@ -287,15 +286,15 @@ public: writeAngularDimension( xfrm(a0), xfrm(a0.Plus(da)), xfrm(b0), xfrm(b0.Plus(db)), xfrm(ref), - xfrm(ref), c->Label(), c->GetStyle(), c->valA); + xfrm(ref), c.Label(), c.GetStyle(), c.valA); break; } case Constraint::Type::COMMENT: { - Style *st = SK.style.FindById(c->GetStyle()); - writeText(xfrm(c->disp.offset), c->Label(), - Style::TextHeight(c->GetStyle()) / SS.GW.scale, - st->textAngle, st->textOrigin, c->GetStyle()); + Style *st = SK.style.FindById(c.GetStyle()); + writeText(xfrm(c.disp.offset), c.Label(), + Style::TextHeight(c.GetStyle()) / SS.GW.scale, + st->textAngle, st->textOrigin, c.GetStyle()); break; } diff --git a/src/file.cpp b/src/file.cpp index 160b5ec7..4e3b50d3 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -354,19 +354,18 @@ bool SolveSpaceUI::SaveToFile(const Platform::Path &filename) { } SShell *s = &g->runningShell; - SSurface *srf; - for(srf = s->surface.First(); srf; srf = s->surface.NextAfter(srf)) { + for(SSurface &srf : s->surface) { fprintf(fh, "Surface %08x %08x %08x %d %d\n", - srf->h.v, srf->color.ToPackedInt(), srf->face, srf->degm, srf->degn); - for(i = 0; i <= srf->degm; i++) { - for(j = 0; j <= srf->degn; j++) { + srf.h.v, srf.color.ToPackedInt(), srf.face, srf.degm, srf.degn); + for(i = 0; i <= srf.degm; i++) { + for(j = 0; j <= srf.degn; j++) { fprintf(fh, "SCtrl %d %d %.20f %.20f %.20f Weight %20.20f\n", - i, j, CO(srf->ctrl[i][j]), srf->weight[i][j]); + i, j, CO(srf.ctrl[i][j]), srf.weight[i][j]); } } STrimBy *stb; - for(stb = srf->trim.First(); stb; stb = srf->trim.NextAfter(stb)) { + for(stb = srf.trim.First(); stb; stb = srf.trim.NextAfter(stb)) { fprintf(fh, "TrimBy %08x %d %.20f %.20f %.20f %.20f %.20f %.20f\n", stb->curve.v, stb->backwards ? 1 : 0, CO(stb->start), CO(stb->finish)); @@ -374,21 +373,20 @@ bool SolveSpaceUI::SaveToFile(const Platform::Path &filename) { fprintf(fh, "AddSurface\n"); } - SCurve *sc; - for(sc = s->curve.First(); sc; sc = s->curve.NextAfter(sc)) { + for(SCurve &sc : s->curve) { fprintf(fh, "Curve %08x %d %d %08x %08x\n", - sc->h.v, - sc->isExact ? 1 : 0, sc->exact.deg, - sc->surfA.v, sc->surfB.v); + sc.h.v, + sc.isExact ? 1 : 0, sc.exact.deg, + sc.surfA.v, sc.surfB.v); - if(sc->isExact) { - for(i = 0; i <= sc->exact.deg; i++) { + if(sc.isExact) { + for(i = 0; i <= sc.exact.deg; i++) { fprintf(fh, "CCtrl %d %.20f %.20f %.20f Weight %.20f\n", - i, CO(sc->exact.ctrl[i]), sc->exact.weight[i]); + i, CO(sc.exact.ctrl[i]), sc.exact.weight[i]); } } SCurvePt *scpt; - for(scpt = sc->pts.First(); scpt; scpt = sc->pts.NextAfter(scpt)) { + for(scpt = sc.pts.First(); scpt; scpt = sc.pts.NextAfter(scpt)) { fprintf(fh, "CurvePt %d %.20f %.20f %.20f\n", scpt->vertex ? 1 : 0, CO(scpt->p)); } diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index 8427fa1e..5422a579 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -968,20 +968,19 @@ void GraphicsWindow::ForceTextWindowShown() { } void GraphicsWindow::DeleteTaggedRequests() { - Request *r; // Delete any requests that were affected by this deletion. - for(r = SK.request.First(); r; r = SK.request.NextAfter(r)) { - if(r->workplane == Entity::FREE_IN_3D) continue; - if(!r->workplane.isFromRequest()) continue; - Request *wrkpl = SK.GetRequest(r->workplane.request()); + for(Request &r : SK.request) { + if(r.workplane == Entity::FREE_IN_3D) continue; + if(!r.workplane.isFromRequest()) continue; + Request *wrkpl = SK.GetRequest(r.workplane.request()); if(wrkpl->tag) - r->tag = 1; + r.tag = 1; } // Rewrite any point-coincident constraints that were affected by this // deletion. - for(r = SK.request.First(); r; r = SK.request.NextAfter(r)) { - if(!r->tag) continue; - FixConstraintsForRequestBeingDeleted(r->h); + for(Request &r : SK.request) { + if(!r.tag) continue; + FixConstraintsForRequestBeingDeleted(r.h); } // and then delete the tagged requests. SK.request.RemoveTagged(); @@ -1045,9 +1044,8 @@ void GraphicsWindow::MenuEdit(Command id) { SS.centerOfMass.draw = false; // This clears the marks drawn to indicate which points are // still free to drag. - Param *p; - for(p = SK.param.First(); p; p = SK.param.NextAfter(p)) { - p->free = false; + for(Param &p : SK.param) { + p.free = false; } if(SS.exportMode) { SS.exportMode = false; @@ -1057,13 +1055,12 @@ void GraphicsWindow::MenuEdit(Command id) { break; case Command::SELECT_ALL: { - Entity *e; - for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { - if(e->group != SS.GW.activeGroup) continue; - if(e->IsFace() || e->IsDistance()) continue; - if(!e->IsVisible()) continue; + for(Entity &e : SK.entity) { + if(e.group != SS.GW.activeGroup) continue; + if(e.IsFace() || e.IsDistance()) continue; + if(!e.IsVisible()) continue; - SS.GW.MakeSelected(e->h); + SS.GW.MakeSelected(e.h); } SS.GW.Invalidate(); SS.ScheduleShowTW(); @@ -1071,24 +1068,23 @@ void GraphicsWindow::MenuEdit(Command id) { } case Command::SELECT_CHAIN: { - Entity *e; int newlySelected = 0; bool didSomething; do { didSomething = false; - for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { - if(e->group != SS.GW.activeGroup) continue; - if(!e->HasEndpoints()) continue; - if(!e->IsVisible()) continue; + for(Entity &e : SK.entity) { + if(e.group != SS.GW.activeGroup) continue; + if(!e.HasEndpoints()) continue; + if(!e.IsVisible()) continue; - Vector st = e->EndpointStart(), - fi = e->EndpointFinish(); + Vector st = e.EndpointStart(), + fi = e.EndpointFinish(); bool onChain = false, alreadySelected = false; List *ls = &(SS.GW.selection); for(Selection *s = ls->First(); s; s = ls->NextAfter(s)) { if(!s->entity.v) continue; - if(s->entity == e->h) { + if(s->entity == e.h) { alreadySelected = true; continue; } @@ -1105,7 +1101,7 @@ void GraphicsWindow::MenuEdit(Command id) { } } if(onChain && !alreadySelected) { - SS.GW.MakeSelected(e->h); + SS.GW.MakeSelected(e.h); newlySelected++; didSomething = true; } diff --git a/src/groupmesh.cpp b/src/groupmesh.cpp index f1041d63..11add4f1 100644 --- a/src/groupmesh.cpp +++ b/src/groupmesh.cpp @@ -83,13 +83,12 @@ void Group::GenerateLoops() { } void SShell::RemapFaces(Group *g, int remap) { - SSurface *ss; - for(ss = surface.First(); ss; ss = surface.NextAfter(ss)){ - hEntity face = { ss->face }; + for(SSurface &ss : surface){ + hEntity face = { ss.face }; if(face == Entity::NO_ENTITY) continue; face = g->Remap(face, remap); - ss->face = face.v; + ss.face = face.v; } } @@ -292,13 +291,12 @@ void Group::GenerateShellAndMesh() { // So these are the sides if(ss->degm != 1 || ss->degn != 1) continue; - Entity *e; - for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { - if(e->group != opA) continue; - if(e->type != Entity::Type::LINE_SEGMENT) continue; + for(Entity &e : SK.entity) { + if(e.group != opA) continue; + if(e.type != Entity::Type::LINE_SEGMENT) continue; - Vector a = SK.GetEntity(e->point[0])->PointGetNum(), - b = SK.GetEntity(e->point[1])->PointGetNum(); + Vector a = SK.GetEntity(e.point[0])->PointGetNum(), + b = SK.GetEntity(e.point[1])->PointGetNum(); a = a.Plus(ttop); b = b.Plus(ttop); // Could get taken backwards, so check all cases. @@ -307,7 +305,7 @@ void Group::GenerateShellAndMesh() { (a.Equals(ss->ctrl[0][1]) && b.Equals(ss->ctrl[1][1])) || (b.Equals(ss->ctrl[0][1]) && a.Equals(ss->ctrl[1][1]))) { - face = Remap(e->h, REMAP_LINE_TO_FACE); + face = Remap(e.h, REMAP_LINE_TO_FACE); ss->face = face.v; break; } diff --git a/src/modify.cpp b/src/modify.cpp index 94b24787..99cb48bb 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -50,38 +50,36 @@ void GraphicsWindow::FixConstraintsForRequestBeingDeleted(hRequest hr) { Request *r = SK.GetRequest(hr); if(r->group != SS.GW.activeGroup) return; - Entity *e; - for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { - if(!(e->h.isFromRequest())) continue; - if(e->h.request() != hr) continue; + for(Entity &e : SK.entity) { + if(!(e.h.isFromRequest())) continue; + if(e.h.request() != hr) continue; - if(e->type != Entity::Type::POINT_IN_2D && - e->type != Entity::Type::POINT_IN_3D) + if(e.type != Entity::Type::POINT_IN_2D && + e.type != Entity::Type::POINT_IN_3D) { continue; } // This is a point generated by the request being deleted; so fix // the constraints for that. - FixConstraintsForPointBeingDeleted(e->h); + FixConstraintsForPointBeingDeleted(e.h); } } void GraphicsWindow::FixConstraintsForPointBeingDeleted(hEntity hpt) { List ld = {}; - Constraint *c; SK.constraint.ClearTags(); - for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { - if(c->type != Constraint::Type::POINTS_COINCIDENT) continue; - if(c->group != SS.GW.activeGroup) continue; + for(Constraint &c : SK.constraint) { + if(c.type != Constraint::Type::POINTS_COINCIDENT) continue; + if(c.group != SS.GW.activeGroup) continue; - if(c->ptA == hpt) { - ld.Add(&(c->ptB)); - c->tag = 1; + if(c.ptA == hpt) { + ld.Add(&(c.ptB)); + c.tag = 1; } - if(c->ptB == hpt) { - ld.Add(&(c->ptA)); - c->tag = 1; + if(c.ptB == hpt) { + ld.Add(&(c.ptA)); + c.tag = 1; } } // Remove constraints without waiting for regeneration; this way @@ -225,21 +223,21 @@ void GraphicsWindow::ParametricCurve::CreateRequestTrimmedTo(double t, // happens to exist, then constrain that point coincident to hpt. //----------------------------------------------------------------------------- void GraphicsWindow::ParametricCurve::ConstrainPointIfCoincident(hEntity hpt) { - Entity *e, *pt; + Entity *pt; pt = SK.GetEntity(hpt); Vector ev, ptv; ptv = pt->PointGetNum(); - for(e = SK.entity.First(); e; e = SK.entity.NextAfter(e)) { - if(e->h == pt->h) continue; - if(!e->IsPoint()) continue; - if(e->group != pt->group) continue; - if(e->workplane != pt->workplane) continue; + for(Entity &e : SK.entity) { + if(e.h == pt->h) continue; + if(!e.IsPoint()) continue; + if(e.group != pt->group) continue; + if(e.workplane != pt->workplane) continue; - ev = e->PointGetNum(); + ev = e.PointGetNum(); if(!ev.Equals(ptv)) continue; - Constraint::ConstrainCoincident(hpt, e->h); + Constraint::ConstrainCoincident(hpt, e.h); break; } } diff --git a/src/mouse.cpp b/src/mouse.cpp index e46acae8..2e1c75a8 100644 --- a/src/mouse.cpp +++ b/src/mouse.cpp @@ -713,11 +713,12 @@ void GraphicsWindow::MouseRightUp(double x, double y) { if(gs.points == 1) { Entity *p = SK.GetEntity(gs.point[0]); - Constraint *c; + Constraint *c = nullptr; IdList *lc = &(SK.constraint); - for(c = lc->First(); c; c = lc->NextAfter(c)) { - if(c->type != Constraint::Type::POINTS_COINCIDENT) continue; - if(c->ptA == p->h || c->ptB == p->h) { + for(Constraint &ci : *lc) { + if(ci.type != Constraint::Type::POINTS_COINCIDENT) continue; + if(ci.ptA == p->h || ci.ptB == p->h) { + c = &ci; break; } } @@ -727,11 +728,10 @@ void GraphicsWindow::MouseRightUp(double x, double y) { SS.UndoRemember(); SK.constraint.ClearTags(); - Constraint *c; - for(c = SK.constraint.First(); c; c = SK.constraint.NextAfter(c)) { - if(c->type != Constraint::Type::POINTS_COINCIDENT) continue; - if(c->ptA == p->h || c->ptB == p->h) { - c->tag = 1; + for(Constraint &c : SK.constraint) { + if(c.type != Constraint::Type::POINTS_COINCIDENT) continue; + if(c.ptA == p->h || c.ptB == p->h) { + c.tag = 1; } } SK.constraint.RemoveTagged(); diff --git a/src/srf/boolean.cpp b/src/srf/boolean.cpp index 1edf46ed..4586cb58 100644 --- a/src/srf/boolean.cpp +++ b/src/srf/boolean.cpp @@ -521,20 +521,19 @@ SSurface SSurface::MakeCopyTrimAgainst(SShell *parent, SEdgeList inter = {}; SSurface *ss; - SCurve *sc; - for(sc = into->curve.First(); sc; sc = into->curve.NextAfter(sc)) { - if(sc->source != SCurve::Source::INTERSECTION) continue; + for(SCurve &sc : into->curve) { + if(sc.source != SCurve::Source::INTERSECTION) continue; if(opA) { - if(sc->surfA != h) continue; - ss = shb->surface.FindById(sc->surfB); + if(sc.surfA != h) continue; + ss = shb->surface.FindById(sc.surfB); } else { - if(sc->surfB != h) continue; - ss = sha->surface.FindById(sc->surfA); + if(sc.surfB != h) continue; + ss = sha->surface.FindById(sc.surfA); } int i; - for(i = 1; i < sc->pts.n; i++) { - Vector a = sc->pts[i-1].p, - b = sc->pts[i].p; + for(i = 1; i < sc.pts.n; i++) { + Vector a = sc.pts[i-1].p, + b = sc.pts[i].p; Point2d auv, buv; ss->ClosestPointTo(a, &(auv.x), &(auv.y)); @@ -560,9 +559,9 @@ SSurface SSurface::MakeCopyTrimAgainst(SShell *parent, bkwds = !bkwds; } if(bkwds) { - inter.AddEdge(tb, ta, sc->h.v, 1); + inter.AddEdge(tb, ta, sc.h.v, 1); } else { - inter.AddEdge(ta, tb, sc->h.v, 0); + inter.AddEdge(ta, tb, sc.h.v, 0); } } } @@ -711,20 +710,18 @@ void SShell::MakeIntersectionCurvesAgainst(SShell *agnst, SShell *into) { for(int i = 0; i< surface.n; i++) { SSurface *sa = &surface[i]; - SSurface *sb; - for(sb = agnst->surface.First(); sb; sb = agnst->surface.NextAfter(sb)){ + for(SSurface &sb : agnst->surface){ // Intersect every surface from our shell against every surface // from agnst; this will add zero or more curves to the curve // list for into. - sa->IntersectAgainst(sb, this, agnst, into); + sa->IntersectAgainst(&sb, this, agnst, into); } } } void SShell::CleanupAfterBoolean() { - SSurface *ss; - for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { - ss->edges.Clear(); + for(SSurface &ss : surface) { + ss.edges.Clear(); } } @@ -734,10 +731,9 @@ void SShell::CleanupAfterBoolean() { // by their new IDs. //----------------------------------------------------------------------------- void SShell::RewriteSurfaceHandlesForCurves(SShell *a, SShell *b) { - SCurve *sc; - for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { - sc->surfA = sc->GetSurfaceA(a, b)->newH, - sc->surfB = sc->GetSurfaceB(a, b)->newH; + for(SCurve &sc : curve) { + sc.surfA = sc.GetSurfaceA(a, b)->newH, + sc.surfB = sc.GetSurfaceB(a, b)->newH; } } @@ -759,32 +755,32 @@ void SShell::MakeFromAssemblyOf(SShell *a, SShell *b) { // First, copy over all the curves. Note which shell (a or b) each curve // came from, but assign it a new ID. curve.ReserveMore(a->curve.n + b->curve.n); - SCurve *c, cn; + SCurve cn; for(i = 0; i < 2; i++) { ab = (i == 0) ? a : b; - for(c = ab->curve.First(); c; c = ab->curve.NextAfter(c)) { - cn = SCurve::FromTransformationOf(c, t, q, 1.0); + for(SCurve &c : ab->curve) { + cn = SCurve::FromTransformationOf(&c, t, q, 1.0); cn.source = (i == 0) ? SCurve::Source::A : SCurve::Source::B; // surfA and surfB are wrong now, and we can't fix them until // we've assigned IDs to the surfaces. So we'll get that later. - c->newH = curve.AddAndAssignId(&cn); + c.newH = curve.AddAndAssignId(&cn); } } // Likewise copy over all the surfaces. surface.ReserveMore(a->surface.n + b->surface.n); - SSurface *s, sn; + SSurface sn; for(i = 0; i < 2; i++) { ab = (i == 0) ? a : b; - for(s = ab->surface.First(); s; s = ab->surface.NextAfter(s)) { - sn = SSurface::FromTransformationOf(s, t, q, 1.0, /*includingTrims=*/true); + for(SSurface &s : ab->surface) { + sn = SSurface::FromTransformationOf(&s, t, q, 1.0, /*includingTrims=*/true); // All the trim curve IDs get rewritten; we know the new handles // to the curves since we recorded them in the previous step. STrimBy *stb; for(stb = sn.trim.First(); stb; stb = sn.trim.NextAfter(stb)) { stb->curve = ab->curve.FindById(stb->curve)->newH; } - s->newH = surface.AddAndAssignId(&sn); + s.newH = surface.AddAndAssignId(&sn); } } @@ -809,12 +805,11 @@ void SShell::MakeFromBoolean(SShell *a, SShell *b, SSurface::CombineAs type) { // the surfaces in B (which is all of the intersection curves). a->MakeIntersectionCurvesAgainst(b, this); - SCurve *sc; - for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { - SSurface *srfA = sc->GetSurfaceA(a, b), - *srfB = sc->GetSurfaceB(a, b); + for(SCurve &sc : curve) { + SSurface *srfA = sc.GetSurfaceA(a, b), + *srfB = sc.GetSurfaceB(a, b); - sc->RemoveShortSegments(srfA, srfB); + sc.RemoveShortSegments(srfA, srfB); } // And clean up the piecewise linear things we made as a calculation aid diff --git a/src/srf/merge.cpp b/src/srf/merge.cpp index a91a307f..42ae5590 100644 --- a/src/srf/merge.cpp +++ b/src/srf/merge.cpp @@ -58,10 +58,9 @@ void SShell::MergeCoincidentSurfaces() { // All the references to this surface get replaced with the // new srf - SCurve *sc; - for(sc = curve.First(); sc; sc = curve.NextAfter(sc)) { - if(sc->surfA == sj->h) sc->surfA = si->h; - if(sc->surfB == sj->h) sc->surfB = si->h; + for(SCurve &sc : curve) { + if(sc.surfA == sj->h) sc.surfA = si->h; + if(sc.surfB == sj->h) sc.surfB = si->h; } } diff --git a/src/srf/raycast.cpp b/src/srf/raycast.cpp index 58779282..f1c0d2bd 100644 --- a/src/srf/raycast.cpp +++ b/src/srf/raycast.cpp @@ -381,9 +381,8 @@ void SShell::AllPointsIntersecting(Vector a, Vector b, List *il, bool asSegment, bool trimmed, bool inclTangent) { - SSurface *ss; - for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { - ss->AllPointsIntersecting(a, b, il, + for(SSurface &ss : surface) { + ss.AllPointsIntersecting(a, b, il, asSegment, trimmed, inclTangent); } } @@ -434,11 +433,10 @@ bool SShell::ClassifyEdge(Class *indir, Class *outdir, // First, check for edge-on-edge int edge_inters = 0; Vector inter_surf_n[2], inter_edge_n[2]; - SSurface *srf; - for(srf = surface.First(); srf; srf = surface.NextAfter(srf)) { - if(srf->LineEntirelyOutsideBbox(ea, eb, /*asSegment=*/true)) continue; + for(SSurface &srf : surface) { + if(srf.LineEntirelyOutsideBbox(ea, eb, /*asSegment=*/true)) continue; - SEdgeList *sel = &(srf->edges); + SEdgeList *sel = &(srf.edges); SEdge *se; for(se = sel->l.First(); se; se = sel->l.NextAfter(se)) { if((ea.Equals(se->a) && eb.Equals(se->b)) || @@ -448,9 +446,9 @@ bool SShell::ClassifyEdge(Class *indir, Class *outdir, if(edge_inters < 2) { // Edge-on-edge case Point2d pm; - srf->ClosestPointTo(p, &pm, /*mustConverge=*/false); + srf.ClosestPointTo(p, &pm, /*mustConverge=*/false); // A vector normal to the surface, at the intersection point - inter_surf_n[edge_inters] = srf->NormalAt(pm); + inter_surf_n[edge_inters] = srf.NormalAt(pm); // A vector normal to the intersecting edge (but within the // intersecting surface) at the intersection point, pointing // out. @@ -520,25 +518,25 @@ bool SShell::ClassifyEdge(Class *indir, Class *outdir, // are on surface) and for numerical stability, so we don't pick up // the additional error from the line intersection. - for(srf = surface.First(); srf; srf = surface.NextAfter(srf)) { - if(srf->LineEntirelyOutsideBbox(ea, eb, /*asSegment=*/true)) continue; + for(SSurface &srf : surface) { + if(srf.LineEntirelyOutsideBbox(ea, eb, /*asSegment=*/true)) continue; Point2d puv; - srf->ClosestPointTo(p, &(puv.x), &(puv.y), /*mustConverge=*/false); - Vector pp = srf->PointAt(puv); + srf.ClosestPointTo(p, &(puv.x), &(puv.y), /*mustConverge=*/false); + Vector pp = srf.PointAt(puv); if((pp.Minus(p)).Magnitude() > LENGTH_EPS) continue; Point2d dummy = { 0, 0 }; - SBspUv::Class c = (srf->bsp) ? srf->bsp->ClassifyPoint(puv, dummy, srf) : SBspUv::Class::OUTSIDE; + SBspUv::Class c = (srf.bsp) ? srf.bsp->ClassifyPoint(puv, dummy, &srf) : SBspUv::Class::OUTSIDE; if(c == SBspUv::Class::OUTSIDE) continue; // Edge-on-face (unless edge-on-edge above superceded) Point2d pin, pout; - srf->ClosestPointTo(p.Plus(edge_n_in), &pin, /*mustConverge=*/false); - srf->ClosestPointTo(p.Plus(edge_n_out), &pout, /*mustConverge=*/false); + srf.ClosestPointTo(p.Plus(edge_n_in), &pin, /*mustConverge=*/false); + srf.ClosestPointTo(p.Plus(edge_n_out), &pout, /*mustConverge=*/false); - Vector surf_n_in = srf->NormalAt(pin), - surf_n_out = srf->NormalAt(pout); + Vector surf_n_in = srf.NormalAt(pin), + surf_n_out = srf.NormalAt(pout); *indir = ClassifyRegion(edge_n_in, surf_n_in, surf_n); *outdir = ClassifyRegion(edge_n_out, surf_n_out, surf_n); diff --git a/src/srf/surface.cpp b/src/srf/surface.cpp index 815aedad..c63875e5 100644 --- a/src/srf/surface.cpp +++ b/src/srf/surface.cpp @@ -1038,35 +1038,31 @@ void SShell::MakeFromTransformationOf(SShell *a, { booleanFailed = false; surface.ReserveMore(a->surface.n); - SSurface *s; - for(s = a->surface.First(); s; s = a->surface.NextAfter(s)) { + for(SSurface &s : a->surface) { SSurface n; - n = SSurface::FromTransformationOf(s, t, q, scale, /*includingTrims=*/true); + n = SSurface::FromTransformationOf(&s, t, q, scale, /*includingTrims=*/true); surface.Add(&n); // keeping the old ID } curve.ReserveMore(a->curve.n); - SCurve *c; - for(c = a->curve.First(); c; c = a->curve.NextAfter(c)) { + for(SCurve &c : a->curve) { SCurve n; - n = SCurve::FromTransformationOf(c, t, q, scale); + n = SCurve::FromTransformationOf(&c, t, q, scale); curve.Add(&n); // keeping the old ID } } void SShell::MakeEdgesInto(SEdgeList *sel) { - SSurface *s; - for(s = surface.First(); s; s = surface.NextAfter(s)) { - s->MakeEdgesInto(this, sel, SSurface::MakeAs::XYZ); + for(SSurface &s : surface) { + s.MakeEdgesInto(this, sel, SSurface::MakeAs::XYZ); } } void SShell::MakeSectionEdgesInto(Vector n, double d, SEdgeList *sel, SBezierList *sbl) { - SSurface *s; - for(s = surface.First(); s; s = surface.NextAfter(s)) { - if(s->CoincidentWithPlane(n, d)) { - s->MakeSectionEdgesInto(this, sel, sbl); + for(SSurface &s : surface) { + if(s.CoincidentWithPlane(n, d)) { + s.MakeSectionEdgesInto(this, sel, sbl); } } } @@ -1088,15 +1084,13 @@ bool SShell::IsEmpty() const { } void SShell::Clear() { - SSurface *s; - for(s = surface.First(); s; s = surface.NextAfter(s)) { - s->Clear(); + for(SSurface &s : surface) { + s.Clear(); } surface.Clear(); - SCurve *c; - for(c = curve.First(); c; c = curve.NextAfter(c)) { - c->Clear(); + for(SCurve &c : curve) { + c.Clear(); } curve.Clear(); } diff --git a/src/srf/surfinter.cpp b/src/srf/surfinter.cpp index 0a827761..9e03a83c 100644 --- a/src/srf/surfinter.cpp +++ b/src/srf/surfinter.cpp @@ -23,20 +23,20 @@ void SSurface::AddExactIntersectionCurve(SBezier *sb, SSurface *srfB, // Now we have to piecewise linearize the curve. If there's already an // identical curve in the shell, then follow that pwl exactly, otherwise // calculate from scratch. - SCurve split, *existing = NULL, *se; + SCurve split, *existing = NULL; SBezier sbrev = *sb; sbrev.Reverse(); bool backwards = false; #pragma omp critical(into) { - for(se = into->curve.First(); se; se = into->curve.NextAfter(se)) { - if(se->isExact) { - if(sb->Equals(&(se->exact))) { - existing = se; + for(SCurve &se : into->curve) { + if(se.isExact) { + if(sb->Equals(&(se.exact))) { + existing = &se; break; } - if(sbrev.Equals(&(se->exact))) { - existing = se; + if(sbrev.Equals(&(se.exact))) { + existing = &se; backwards = true; break; } @@ -332,15 +332,14 @@ void SSurface::IntersectAgainst(SSurface *b, SShell *agnstA, SShell *agnstB, shext = agnstA; } bool foundExact = false; - SCurve *sc; - for(sc = shext->curve.First(); sc; sc = shext->curve.NextAfter(sc)) { - if(sc->source == SCurve::Source::INTERSECTION) continue; - if(!sc->isExact) continue; - if((sc->surfA != sext->h) && (sc->surfB != sext->h)) continue; + for(SCurve &sc : shext->curve) { + if(sc.source == SCurve::Source::INTERSECTION) continue; + if(!sc.isExact) continue; + if((sc.surfA != sext->h) && (sc.surfB != sext->h)) continue; // we have a curve belonging to the curved surface and not the plane. // does it lie completely in the plane? - if(splane->ContainsPlaneCurve(sc)) { - SBezier bezier = sc->exact; + if(splane->ContainsPlaneCurve(&sc)) { + SBezier bezier = sc.exact; AddExactIntersectionCurve(&bezier, b, agnstA, agnstB, into); foundExact = true; } @@ -571,10 +570,9 @@ bool SSurface::ContainsPlaneCurve(SCurve *sc) const { void SShell::MakeCoincidentEdgesInto(SSurface *proto, bool sameNormal, SEdgeList *el, SShell *useCurvesFrom) { - SSurface *ss; - for(ss = surface.First(); ss; ss = surface.NextAfter(ss)) { - if(proto->CoincidentWith(ss, sameNormal)) { - ss->MakeEdgesInto(this, el, SSurface::MakeAs::XYZ, useCurvesFrom); + for(SSurface &ss : surface) { + if(proto->CoincidentWith(&ss, sameNormal)) { + ss.MakeEdgesInto(this, el, SSurface::MakeAs::XYZ, useCurvesFrom); } } diff --git a/src/style.cpp b/src/style.cpp index b1070cdc..6ca61e56 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -470,14 +470,13 @@ void TextWindow::ShowListOfStyles() { Printf(true, "%Ft color style-name"); bool darkbg = false; - Style *s; - for(s = SK.style.First(); s; s = SK.style.NextAfter(s)) { + for(Style &s : SK.style) { Printf(false, "%Bp %Bz %Bp %Fl%Ll%f%D%s%E", darkbg ? 'd' : 'a', - &s->color, + &s.color, darkbg ? 'd' : 'a', - ScreenShowStyleInfo, s->h.v, - s->DescriptionString().c_str()); + ScreenShowStyleInfo, s.h.v, + s.DescriptionString().c_str()); darkbg = !darkbg; } From 034d9213f11c08cd339ec0ebca7009ef5f0819b7 Mon Sep 17 00:00:00 2001 From: ruevs Date: Mon, 5 Apr 2021 18:05:08 +0300 Subject: [PATCH 42/89] IdList: Remove Unused IndexOf, First, Last and NextAfter Methods --- src/dsc.h | 45 +++++---------------------------------------- 1 file changed, 5 insertions(+), 40 deletions(-) diff --git a/src/dsc.h b/src/dsc.h index f4a7933c..1599484c 100644 --- a/src/dsc.h +++ b/src/dsc.h @@ -488,7 +488,7 @@ public: if(IsEmpty()) { return 0; } else { - return Last()->h.v; + return elemstore[elemidx.back()].h.v; } } @@ -514,9 +514,9 @@ public: } void ReserveMore(int howMuch) { - elemstore.reserve(n + howMuch); - elemidx.reserve(n + howMuch); -// freelist.reserve(n + howMuch); // PAR@@@@ maybe we should - not much more RAM + elemstore.reserve(elemstore.size() + howMuch); + elemidx.reserve(elemidx.size() + howMuch); + // freelist.reserve(freelist.size() + howMuch); // PAR@@@@ maybe we should - not much more RAM } void Add(T *t) { @@ -556,19 +556,6 @@ public: return t; } - int IndexOf(H h) { - if(IsEmpty()) { - return -1; - } - auto it = std::lower_bound(elemidx.begin(), elemidx.end(), h, Compare(this)); - if(it == elemidx.end()) { - return -1; - } else { - auto idx = std::distance(elemidx.begin(), it); - return static_cast(idx); - } - } - T *FindByIdNoOops(H h) { if(IsEmpty()) { return nullptr; @@ -584,28 +571,6 @@ public: } } - T *First() { - return (IsEmpty()) ? nullptr : &(elemstore[0]); - } - T *Last() { - return (IsEmpty()) ? nullptr : &(elemstore[elemidx.back()]); - } - - // Remove this entirely?!? 199 places in the code mostly for loops? - T *NextAfter(T *prev) { - if(IsEmpty() || !prev) { - return nullptr; - } - - // PAR@@@@ This is slower than before now. O(log(n)) was O(1) - auto it = std::upper_bound(elemidx.begin(), elemidx.end(), prev, Compare(this)); - if(it == elemidx.end()) { - return nullptr; - } else { - return &elemstore[*it]; - } - } - T &Get(size_t i) { return elemstore[elemidx[i]]; } T const &Get(size_t i) const { return elemstore[elemidx[i]]; } T &operator[](size_t i) { return Get(i); } @@ -674,7 +639,7 @@ public: l->elemidx.push_back(it); } - l->n = n; + l->n = n; } void Clear() { From 3e01afa3ae907193de2c118354632d0118f117d7 Mon Sep 17 00:00:00 2001 From: ruevs Date: Tue, 6 Apr 2021 15:55:47 +0300 Subject: [PATCH 43/89] Remove all unused methods from IdList and its iterator Fix gcc warning -Wreorder-ctor https://stackoverflow.com/questions/1828037/whats-the-point-of-g-wreorder --- src/dsc.h | 47 ++++++----------------------------------------- 1 file changed, 6 insertions(+), 41 deletions(-) diff --git a/src/dsc.h b/src/dsc.h index 1599484c..19f08686 100644 --- a/src/dsc.h +++ b/src/dsc.h @@ -421,21 +421,8 @@ public: T &operator*() const noexcept { return *elem; } const T *operator->() const noexcept { return elem; } - T &operator=(const T &e) const noexcept { - *elem = e; - return *this; - } - T &operator=(const H h) const noexcept { - elem->h = e; - return *this; - } - bool operator==(const iterator &p) const { return p.position == position; } - bool operator<(const iterator &p) const { return position < p.position; } bool operator!=(const iterator &p) const { return !operator==(p); } - bool operator>(const iterator &p) const { return operator!=(p) && !operator<(p); } - bool operator>=(const iterator &p) const { return !operator<(p); } - bool operator<=(const iterator &p) const { return !operator>(p); } iterator &operator++() { ++position; @@ -446,26 +433,20 @@ public: } return *this; } - iterator &operator--() { - --position; - if(0 > position) { - elem = nullptr; // PAR@@@@ Remove just debugging - } else if(position < list->elemidx.size()) { - elem = &(list->elemstore[list->elemidx[position]]); - } - return *this; + + // Needed for std:find_if of gcc used in entity.cpp GenerateEquations + difference_type operator-(const iterator &rhs) const noexcept { + return position - rhs.position; } - iterator(IdList *l) : list(l), position(0) { + iterator(IdList *l) : position(0), list(l) { if(list) { if(list->elemstore.size() && list->elemidx.size()) { elem = &(list->elemstore[list->elemidx[position]]); } } }; - iterator(const iterator &iter) - : list(iter.list), position(iter.position), elem(iter.elem){}; - iterator(IdList *l, int pos) : list(l), position(pos) { + iterator(IdList *l, int pos) : position(pos), list(l) { if(position >= (int)list->elemidx.size()) { elem = nullptr; } else if(0 <= position) { @@ -503,16 +484,6 @@ public: return t->h; } - int LowerBoundIndex(T const& t) { - if(IsEmpty()) { - return 0; - } - auto it = std::lower_bound(elemptr.begin(), elemptr.end(), t, Compare(this)); - auto idx = std::distance(elemidx.begin(), it); - auto i = static_cast(idx); - return i; - } - void ReserveMore(int howMuch) { elemstore.reserve(elemstore.size() + howMuch); elemidx.reserve(elemidx.size() + howMuch); @@ -572,16 +543,10 @@ public: } T &Get(size_t i) { return elemstore[elemidx[i]]; } - T const &Get(size_t i) const { return elemstore[elemidx[i]]; } T &operator[](size_t i) { return Get(i); } - T const &operator[](size_t i) const { return Get(i); } iterator begin() { return IsEmpty() ? nullptr : iterator(this); } iterator end() { return IsEmpty() ? nullptr : iterator(this, elemidx.size()); } - const iterator begin() const { return IsEmpty() ? nullptr : iterator(this); } - const iterator end() const { return IsEmpty() ? nullptr : iterator(this, elemidx.size()); } - const iterator cbegin() const { return begin(); } - const iterator cend() const { return end(); } void ClearTags() { for(auto &elt : *this) { elt.tag = 0; } From e74e2024658ff6c6ce8e239932d95149eb174e45 Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Wed, 12 May 2021 20:02:21 -0400 Subject: [PATCH 44/89] fix a compiler warning on GTK builds --- src/platform/guigtk.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/guigtk.cpp b/src/platform/guigtk.cpp index 94eb6b5e..46a7df35 100644 --- a/src/platform/guigtk.cpp +++ b/src/platform/guigtk.cpp @@ -1345,7 +1345,7 @@ public: return; Platform::Path path = GetFilename(); - if(gtkChooser->get_action() != GTK_FILE_CHOOSER_ACTION_OPEN) { + if(gtkChooser->get_action() != Gtk::FILE_CHOOSER_ACTION_OPEN) { SetCurrentName(path.WithExtension(extension).FileName()); } } From b5fb1dd4297fa5271dc7f54910380a30fa3aff48 Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sun, 16 May 2021 11:13:14 -0400 Subject: [PATCH 45/89] Show IDF keepout regions as construction entities. --- src/importidf.cpp | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/importidf.cpp b/src/importidf.cpp index 1789e5cc..101feff1 100644 --- a/src/importidf.cpp +++ b/src/importidf.cpp @@ -77,7 +77,7 @@ static hEntity newPoint(EntityList *el, int *id, Vector p, bool visible = true) return en.h; } -static hEntity newLine(EntityList *el, int *id, hEntity p0, hEntity p1) { +static hEntity newLine(EntityList *el, int *id, hEntity p0, hEntity p1, bool keepout) { Entity en = {}; en.type = Entity::Type::LINE_SEGMENT; en.point[0] = p0; @@ -85,8 +85,8 @@ static hEntity newLine(EntityList *el, int *id, hEntity p0, hEntity p1) { en.extraPoints = 0; en.timesApplied = 0; en.group.v = 493; - en.construction = false; - en.style.v = Style::ACTIVE_GRP; + en.construction = keepout; + en.style.v = keepout? Style::CONSTRUCTION : Style::ACTIVE_GRP; en.actVisible = true; en.forceHidden = false; @@ -117,7 +117,7 @@ static hEntity newNormal(EntityList *el, int *id, Quaternion normal) { return en.h; } -static hEntity newArc(EntityList *el, int *id, hEntity p0, hEntity p1, hEntity pc, hEntity hnorm) { +static hEntity newArc(EntityList *el, int *id, hEntity p0, hEntity p1, hEntity pc, hEntity hnorm, bool keepout) { Entity en = {}; en.type = Entity::Type::ARC_OF_CIRCLE; en.point[0] = pc; @@ -127,8 +127,8 @@ static hEntity newArc(EntityList *el, int *id, hEntity p0, hEntity p1, hEntity p en.extraPoints = 0; en.timesApplied = 0; en.group.v = 403; - en.construction = false; - en.style.v = Style::ACTIVE_GRP; + en.construction = keepout; + en.style.v = keepout? Style::CONSTRUCTION : Style::ACTIVE_GRP; en.actVisible = true; en.forceHidden = false; *id = *id+1; @@ -158,7 +158,7 @@ static hEntity newDistance(EntityList *el, int *id, double distance) { return en.h; } -static hEntity newCircle(EntityList *el, int *id, hEntity p0, hEntity hdist, hEntity hnorm) { +static hEntity newCircle(EntityList *el, int *id, hEntity p0, hEntity hdist, hEntity hnorm, bool keepout) { Entity en = {}; en.type = Entity::Type::CIRCLE; en.point[0] = p0; @@ -167,8 +167,8 @@ static hEntity newCircle(EntityList *el, int *id, hEntity p0, hEntity hdist, hEn en.extraPoints = 0; en.timesApplied = 0; en.group.v = 399; - en.construction = false; - en.style.v = Style::ACTIVE_GRP; + en.construction = keepout; + en.style.v = keepout? Style::CONSTRUCTION : Style::ACTIVE_GRP; en.actVisible = true; en.forceHidden = false; @@ -196,18 +196,18 @@ static Vector ArcCenter(Vector p0, Vector p1, double angle) { // Positive angles are counter clockwise, negative are clockwise. An angle of 360 // indicates a circle centered at x1,y1 passing through x2,y2 and is a complete loop. static void CreateEntity(EntityList *el, int *id, hEntity h0, hEntity h1, hEntity hnorm, - Vector p0, Vector p1, double angle) { + Vector p0, Vector p1, double angle, bool keepout) { if (angle == 0.0) { //line if(p0.Equals(p1)) return; - newLine(el, id, h0, h1); + newLine(el, id, h0, h1, keepout); } else if(angle == 360.0) { // circle double d = p1.Minus(p0).Magnitude(); hEntity hd = newDistance(el, id, d); - newCircle(el, id, h1, hd, hnorm); + newCircle(el, id, h1, hd, hnorm, keepout); } else { // arc @@ -226,7 +226,7 @@ static void CreateEntity(EntityList *el, int *id, hEntity h0, hEntity h1, hEntit } Vector c = m.Minus(perp.ScaledBy(dist)); hEntity hc = newPoint(el, id, c, /*visible=*/false); - newArc(el, id, h0, h1, hc, hnorm); + newArc(el, id, h0, h1, hc, hnorm, keepout); } } @@ -355,10 +355,9 @@ bool LinkIDF(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s } else if (line.find(".BOARD_OUTLINE") == 0) { section = board_outline; record_number = 1; -// no keepouts for now - they should also be shown as construction? -// } else if (line.find(".ROUTE_KEEPOUT") == 0) { -// section = routing_keepout; -// record_number = 1; + } else if (line.find(".ROUTE_KEEPOUT") == 0) { + section = routing_keepout; + record_number = 1; } else if(line.find(".DRILLED_HOLES") == 0) { section = drilled_holes; record_number = 1; @@ -433,13 +432,15 @@ bool LinkIDF(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s bool vis = (ang == 360.0); if (bottomEntities) { hEntity hp = newPoint(el, &entityCount, point, /*visible=*/vis); - CreateEntity(el, &entityCount, hprev, hp, hnorm, pprev, point, ang); + CreateEntity(el, &entityCount, hprev, hp, hnorm, pprev, point, ang, + (section == routing_keepout) ); pprev = point; hprev = hp; } if (topEntities) { hEntity hp = newPoint(el, &entityCount, pTop, /*visible=*/vis); - CreateEntity(el, &entityCount, hprevTop, hp, hnorm, pprevTop, pTop, ang); + CreateEntity(el, &entityCount, hprevTop, hp, hnorm, pprevTop, pTop, + ang, (section == routing_keepout) ); pprevTop = pTop; hprevTop = hp; } @@ -467,12 +468,12 @@ bool LinkIDF(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s Vector cent = Vector::From(x,y,0.0); hEntity hcent = newPoint(el, &entityCount, cent); hEntity hdist = newDistance(el, &entityCount, d/2); - newCircle(el, &entityCount, hcent, hdist, hnorm); + newCircle(el, &entityCount, hcent, hdist, hnorm, false); // and again for the top Vector cTop = Vector::From(x,y,board_thickness); hcent = newPoint(el, &entityCount, cTop); hdist = newDistance(el, &entityCount, d/2); - newCircle(el, &entityCount, hcent, hdist, hnorm); + newCircle(el, &entityCount, hcent, hdist, hnorm, false); // create the curves for the extrusion Vector pt = Vector::From(x+d/2, y, 0.0); MakeBeziersForArcs(&sbl, cent, pt, pt, normal, 360.0); From 021f72488172ebee54882ae8e079749b78b6795f Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Fri, 21 May 2021 07:54:24 +0200 Subject: [PATCH 46/89] Drop XPM app icons They were added with commit a98cdeeb16038cc386c9d329ac30d3b2d124f578 and they were only useful for the old Debian menu system, which was deprecated almost 6 years ago [1]. As the old Debian menu file is no more provided in the Debian packaging, the XPM versions of the application icon can be safely removed, as there are already icons in the XDG hicolor icon theme. [1] https://lists.debian.org/debian-devel-announce/2015/09/msg00000.html --- res/CMakeLists.txt | 5 --- res/freedesktop/solvespace-16x16.xpm | 27 ------------- res/freedesktop/solvespace-24x24.xpm | 35 ----------------- res/freedesktop/solvespace-32x32.xpm | 43 -------------------- res/freedesktop/solvespace-48x48.xpm | 59 ---------------------------- 5 files changed, 169 deletions(-) delete mode 100644 res/freedesktop/solvespace-16x16.xpm delete mode 100644 res/freedesktop/solvespace-24x24.xpm delete mode 100644 res/freedesktop/solvespace-32x32.xpm delete mode 100644 res/freedesktop/solvespace-48x48.xpm diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt index 3bd63d8b..e702a568 100644 --- a/res/CMakeLists.txt +++ b/res/CMakeLists.txt @@ -209,11 +209,6 @@ else() DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}/mimetypes RENAME application.x-solvespace.png) endforeach() - - foreach(SIZE 16x16 24x24 32x32 48x48) - install(FILES freedesktop/solvespace-${SIZE}.xpm - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pixmaps) - endforeach() endif() endif() diff --git a/res/freedesktop/solvespace-16x16.xpm b/res/freedesktop/solvespace-16x16.xpm deleted file mode 100644 index 3cd06622..00000000 --- a/res/freedesktop/solvespace-16x16.xpm +++ /dev/null @@ -1,27 +0,0 @@ -/* XPM */ -static char *solvespace_16x16[] = { -/* columns rows colors chars-per-pixel */ -"16 16 5 1 ", -" c black", -". c #1ED500", -"X c #DE00D6", -"o c #CBCBCB", -"O c None", -/* pixels */ -"OOO OOOOOOOOOOOO", -"OOO OOOOOOOOOOOO", -"OOO OOOOOOOOOOOO", -"OOO OOOOOXOOOOOO", -"OOO OOOOOXoOOOOO", -"OOO OOOOOXoOOOOO", -"OOO OOOOOXoOOOOO", -"OOO OOOOOXoOOOOO", -"OOO OOOOOXoOOOOO", -"OOO OOXXXXXXXOOO", -"OOO OOOoooooooOO", -"OO...OOOOOOOOOOO", -" ... ", -"OO...OOOOOOOOOOO", -"OOO OOOOOOOOOOOO", -"OOO OOOOOOOOOOOO" -}; diff --git a/res/freedesktop/solvespace-24x24.xpm b/res/freedesktop/solvespace-24x24.xpm deleted file mode 100644 index 9d1c02e6..00000000 --- a/res/freedesktop/solvespace-24x24.xpm +++ /dev/null @@ -1,35 +0,0 @@ -/* XPM */ -static char *solvespace_24x24[] = { -/* columns rows colors chars-per-pixel */ -"24 24 5 1 ", -" c black", -". c #1ED500", -"X c #DE00D6", -"o c #CBCBCB", -"O c None", -/* pixels */ -"OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOO OOOOOOOOOOOOOOOO", -"OOOOOOO OOOOOOOOOOOOOOOO", -"OOOOOOO OOOOOOOOOOOOOOOO", -"OOOOOOO OOOOOXOOOOOOOOOO", -"OOOOOOO OOOOOXoOOOOOOOOO", -"OOOOOOO OOOOOXoOOOOOOOOO", -"OOOOOOO OOOOOXoOOOOOOOOO", -"OOOOOOO OOOOOXoOOOOOOOOO", -"OOOOOOO OOOOOXoOOOOOOOOO", -"OOOOOOO OOXXXXXXXOOOOOOO", -"OOOOOOO OOOoooooooOOOOOO", -"OOOOOO...OOOOOOOOOOOOOOO", -"OOOO ... OOOO", -"OOOOOO...OOOOOOOOOOOOOOO", -"OOOOOOO OOOOOOOOOOOOOOOO", -"OOOOOOO OOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOO" -}; diff --git a/res/freedesktop/solvespace-32x32.xpm b/res/freedesktop/solvespace-32x32.xpm deleted file mode 100644 index 0d7c5987..00000000 --- a/res/freedesktop/solvespace-32x32.xpm +++ /dev/null @@ -1,43 +0,0 @@ -/* XPM */ -static char *solvespace_32x32[] = { -/* columns rows colors chars-per-pixel */ -"32 32 5 1 ", -" c black", -". c #1ED500", -"X c #DE00D6", -"o c #CBCBCB", -"O c None", -/* pixels */ -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXoOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXoOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXoOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXoOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXoOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXoOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXoOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXoOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXoOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOXXoOOOOOOOOOOOO", -"OOOOOO OOOOXXXXXXXXXXXXOOOOOOOO", -"OOOOOO OOOOXXXXXXXXXXXXOOOOOOOO", -"OOOOOO OOOOOooooooooooooOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOO......OOOOOOOOOOOOOOOOOOOOOO", -"OOOO......OOOOOOOOOOOOOOOOOOOOOO", -" ...... ", -" ...... ", -"OOOO......OOOOOOOOOOOOOOOOOOOOOO", -"OOOO......OOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOO OOOOOOOOOOOOOOOOOOOOOOOO" -}; diff --git a/res/freedesktop/solvespace-48x48.xpm b/res/freedesktop/solvespace-48x48.xpm deleted file mode 100644 index c5adf53b..00000000 --- a/res/freedesktop/solvespace-48x48.xpm +++ /dev/null @@ -1,59 +0,0 @@ -/* XPM */ -static char *solvespace_48x48[] = { -/* columns rows colors chars-per-pixel */ -"48 48 5 1 ", -" c black", -". c #1ED500", -"X c #DE00D6", -"o c #CBCBCB", -"O c None", -/* pixels */ -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOXXoOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOXXXXXXXXXXXXOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOXXXXXXXXXXXXOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOooooooooooooOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOO ...... OOOOOOOO", -"OOOOOOOO ...... OOOOOOOO", -"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOO......OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", -"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" -}; From 4ee869906540343522db76f1ed170e74f3dbed8c Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Fri, 21 May 2021 08:07:16 +0200 Subject: [PATCH 47/89] Fix icon name for XDG mimetypes The default icon for XDG mimetypes is the name of the mime with '/' replaced with '-', unless the mimetype has an 'icon' attribute (and solvespace-mime.xml does not have it). So the right icon name for application/x-solvespace is 'application-x-solvespace', not 'application.x-solvespace'. Hence, properly rename the mimetype icons in non-flatpak and non-snap installations. --- res/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt index e702a568..3b4216c1 100644 --- a/res/CMakeLists.txt +++ b/res/CMakeLists.txt @@ -199,7 +199,7 @@ else() RENAME solvespace.svg) install(FILES freedesktop/solvespace-scalable.svg DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/mimetypes - RENAME application.x-solvespace.svg) + RENAME application-x-solvespace.svg) foreach(SIZE 16x16 24x24 32x32 48x48) install(FILES freedesktop/solvespace-${SIZE}.png @@ -207,7 +207,7 @@ else() RENAME solvespace.png) install(FILES freedesktop/solvespace-${SIZE}.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}/mimetypes - RENAME application.x-solvespace.png) + RENAME application-x-solvespace.png) endforeach() endif() endif() From 3ccf7845f5271adb9dc097a1cac4f7cfe54f88b3 Mon Sep 17 00:00:00 2001 From: Olivier JANIN Date: Sun, 6 Jun 2021 15:27:55 +0200 Subject: [PATCH 48/89] Improve "Sketch in New Workplane" by adding two way of construction - point and normal - point and face --- src/group.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/group.cpp b/src/group.cpp index 1539e68c..cfe573e7 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -138,12 +138,26 @@ void Group::MenuGroup(Command id, Platform::Path linkFile) { g.predef.q = wrkplg->predef.q; } else ssassert(false, "Unexpected workplane subtype"); } + } else if(gs.anyNormals == 1 && gs.points == 1 && gs.n == 2) { + g.subtype = Subtype::WORKPLANE_BY_POINT_ORTHO; + Vector direction = SK.GetEntity(gs.anyNormal[0])->VectorGetNum(); + g.predef.q = Quaternion::From(direction, 0); + g.predef.origin = gs.point[0]; + } else if(gs.faces == 1 && gs.points == 1 && gs.n == 2) { + g.subtype = Subtype::WORKPLANE_BY_POINT_ORTHO; + Vector direction = SK.GetEntity(gs.face[0])->FaceGetNormalNum(); + g.predef.q = Quaternion::From(direction, 0); + g.predef.origin = gs.point[0]; } else { Error(_("Bad selection for new sketch in workplane. This " "group can be created with:\n\n" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, " - "parallel to the lines)\n" + "parallel to the lines)\n" + " * a point and a normal (through the point, " + "orthogonal to the normal)\n" + " * a point and a face (through the point, " + "parallel to the face)\n" " * a workplane (copy of the workplane)\n")); return; } From 4308dc136b03d6727da96ec75cc7ae27d169040a Mon Sep 17 00:00:00 2001 From: Maxipaille Date: Mon, 7 Jun 2021 15:59:19 +0200 Subject: [PATCH 49/89] Fix "Sketch in New Workplane" point & normal to set correct orientation of workplane Temporary disable other ways because of wrong implementation --- src/group.cpp | 23 +++++++++++------------ src/sketch.h | 3 +++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/group.cpp b/src/group.cpp index cfe573e7..0f458045 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -139,15 +139,13 @@ void Group::MenuGroup(Command id, Platform::Path linkFile) { } else ssassert(false, "Unexpected workplane subtype"); } } else if(gs.anyNormals == 1 && gs.points == 1 && gs.n == 2) { - g.subtype = Subtype::WORKPLANE_BY_POINT_ORTHO; - Vector direction = SK.GetEntity(gs.anyNormal[0])->VectorGetNum(); - g.predef.q = Quaternion::From(direction, 0); - g.predef.origin = gs.point[0]; - } else if(gs.faces == 1 && gs.points == 1 && gs.n == 2) { - g.subtype = Subtype::WORKPLANE_BY_POINT_ORTHO; - Vector direction = SK.GetEntity(gs.face[0])->FaceGetNormalNum(); - g.predef.q = Quaternion::From(direction, 0); - g.predef.origin = gs.point[0]; + g.subtype = Subtype::WORKPLANE_BY_POINT_NORMAL; + g.predef.q = SK.GetEntity(gs.anyNormal[0])->NormalGetNum(); + g.predef.origin = gs.point[0]; + //} else if(gs.faces == 1 && gs.points == 1 && gs.n == 2) { + // g.subtype = Subtype::WORKPLANE_BY_POINT_FACE; + // g.predef.q = SK.GetEntity(gs.face[0])->NormalGetNum(); + // g.predef.origin = gs.point[0]; } else { Error(_("Bad selection for new sketch in workplane. This " "group can be created with:\n\n" @@ -156,8 +154,8 @@ void Group::MenuGroup(Command id, Platform::Path linkFile) { "parallel to the lines)\n" " * a point and a normal (through the point, " "orthogonal to the normal)\n" - " * a point and a face (through the point, " - "parallel to the face)\n" + /*" * a point and a face (through the point, " + "parallel to the face)\n"*/ " * a workplane (copy of the workplane)\n")); return; } @@ -454,7 +452,7 @@ void Group::Generate(IdList *entity, if(predef.negateU) u = u.ScaledBy(-1); if(predef.negateV) v = v.ScaledBy(-1); q = Quaternion::From(u, v); - } else if(subtype == Subtype::WORKPLANE_BY_POINT_ORTHO) { + } else if(subtype == Subtype::WORKPLANE_BY_POINT_ORTHO || subtype == Subtype::WORKPLANE_BY_POINT_NORMAL /*|| subtype == Subtype::WORKPLANE_BY_POINT_FACE*/) { // Already given, numerically. q = predef.q; } else ssassert(false, "Unexpected workplane subtype"); @@ -462,6 +460,7 @@ void Group::Generate(IdList *entity, Entity normal = {}; normal.type = Entity::Type::NORMAL_N_COPY; normal.numNormal = q; + normal.point[0] = h.entity(2); normal.group = h; normal.h = h.entity(1); diff --git a/src/sketch.h b/src/sketch.h index 74111d18..0aa75988 100644 --- a/src/sketch.h +++ b/src/sketch.h @@ -198,6 +198,9 @@ public: // For drawings in 2d WORKPLANE_BY_POINT_ORTHO = 6000, WORKPLANE_BY_LINE_SEGMENTS = 6001, + WORKPLANE_BY_POINT_NORMAL = 6002, + //WORKPLANE_BY_POINT_FACE = 6003, + //WORKPLANE_BY_FACE = 6004, // For extrudes, translates, and rotates ONE_SIDED = 7000, TWO_SIDED = 7001 From 37de36425770880032bd281efe069a1c0b8daea9 Mon Sep 17 00:00:00 2001 From: Eric Chan Date: Fri, 25 Jun 2021 13:25:53 -0700 Subject: [PATCH 50/89] Addition of ArcLength Ratio and ArcLength Difference constraints to Constraints list --- include/slvs.h | 4 + src/constraint.cpp | 42 +++++++- src/constrainteq.cpp | 218 ++++++++++++++++++++++++++++++++++++++++- src/drawconstraint.cpp | 42 +++++++- src/graphicswin.cpp | 4 +- src/lib.cpp | 4 + src/mouse.cpp | 8 +- src/sketch.h | 5 +- src/solvespace.cpp | 6 +- 9 files changed, 323 insertions(+), 10 deletions(-) diff --git a/include/slvs.h b/include/slvs.h index 1c97fbf8..458f8c0d 100644 --- a/include/slvs.h +++ b/include/slvs.h @@ -113,6 +113,10 @@ typedef struct { #define SLVS_C_WHERE_DRAGGED 100031 #define SLVS_C_CURVE_CURVE_TANGENT 100032 #define SLVS_C_LENGTH_DIFFERENCE 100033 +#define SLVS_C_ARC_ARC_LEN_RATIO 100034 +#define SLVS_C_ARC_LINE_LEN_RATIO 100035 +#define SLVS_C_ARC_ARC_DIFFERENCE 100036 +#define SLVS_C_ARC_LINE_DIFFERENCE 100037 typedef struct { Slvs_hConstraint h; diff --git a/src/constraint.cpp b/src/constraint.cpp index c1da398d..6a25c265 100644 --- a/src/constraint.cpp +++ b/src/constraint.cpp @@ -22,7 +22,11 @@ std::string Constraint::DescriptionString() const { case Type::EQ_LEN_PT_LINE_D: s = C_("constr-name", "eq-length-and-pt-ln-dist"); break; case Type::EQ_PT_LN_DISTANCES: s = C_("constr-name", "eq-pt-line-distances"); break; case Type::LENGTH_RATIO: s = C_("constr-name", "length-ratio"); break; + case Type::ARC_ARC_LEN_RATIO: s = C_("constr-name", "arc-arc-length-ratio"); break; + case Type::ARC_LINE_LEN_RATIO: s = C_("constr-name", "arc-line-length-ratio"); break; case Type::LENGTH_DIFFERENCE: s = C_("constr-name", "length-difference"); break; + case Type::ARC_ARC_DIFFERENCE: s = C_("constr-name", "arc-arc-len-difference"); break; + case Type::ARC_LINE_DIFFERENCE: s = C_("constr-name", "arc-line-len-difference"); break; case Type::SYMMETRIC: s = C_("constr-name", "symmetric"); break; case Type::SYMMETRIC_HORIZ: s = C_("constr-name", "symmetric-h"); break; case Type::SYMMETRIC_VERT: s = C_("constr-name", "symmetric-v"); break; @@ -384,10 +388,27 @@ void Constraint::MenuConstrain(Command id) { c.type = Type::LENGTH_RATIO; c.entityA = gs.entity[0]; c.entityB = gs.entity[1]; + } + else if(gs.arcs == 2 && gs.n == 2) { + c.type = Type::ARC_ARC_LEN_RATIO; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } + else if(gs.lineSegments == 1 && gs.arcs == 1 && gs.n == 2) { + c.type = Type::ARC_LINE_LEN_RATIO; + if(SK.GetEntity(gs.entity[0])->type == Entity::Type::ARC_OF_CIRCLE) { + c.entityA = gs.entity[1]; + c.entityB = gs.entity[0]; + } else { + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } } else { Error(_("Bad selection for length ratio constraint. This " "constraint can apply to:\n\n" - " * two line segments\n")); + " * two line segments\n" + " * two arcs\n" + " * one arc and one line segment\n")); return; } @@ -401,10 +422,27 @@ void Constraint::MenuConstrain(Command id) { c.type = Type::LENGTH_DIFFERENCE; c.entityA = gs.entity[0]; c.entityB = gs.entity[1]; + } + else if(gs.arcs == 2 && gs.n == 2) { + c.type = Type::ARC_ARC_DIFFERENCE; + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } + else if(gs.lineSegments == 1 && gs.arcs == 1 && gs.n == 2) { + c.type = Type::ARC_LINE_DIFFERENCE; + if(SK.GetEntity(gs.entity[0])->type == Entity::Type::ARC_OF_CIRCLE) { + c.entityA = gs.entity[1]; + c.entityB = gs.entity[0]; + } else { + c.entityA = gs.entity[0]; + c.entityB = gs.entity[1]; + } } else { Error(_("Bad selection for length difference constraint. This " "constraint can apply to:\n\n" - " * two line segments\n")); + " * two line segments\n" + " * two arcs\n" + " * one arc and one line segment\n")); return; } diff --git a/src/constrainteq.cpp b/src/constrainteq.cpp index 965a13d0..c21d1072 100644 --- a/src/constrainteq.cpp +++ b/src/constrainteq.cpp @@ -18,7 +18,11 @@ bool ConstraintBase::HasLabel() const { case Type::PROJ_PT_DISTANCE: case Type::DIAMETER: case Type::LENGTH_RATIO: + case Type::ARC_ARC_LEN_RATIO: + case Type::ARC_LINE_LEN_RATIO: case Type::LENGTH_DIFFERENCE: + case Type::ARC_ARC_DIFFERENCE: + case Type::ARC_LINE_DIFFERENCE: case Type::ANGLE: case Type::COMMENT: return true; @@ -39,7 +43,11 @@ bool ConstraintBase::IsProjectible() const { case Type::EQ_PT_LN_DISTANCES: case Type::EQUAL_ANGLE: case Type::LENGTH_RATIO: + case Type::ARC_ARC_LEN_RATIO: + case Type::ARC_LINE_LEN_RATIO: case Type::LENGTH_DIFFERENCE: + case Type::ARC_ARC_DIFFERENCE: + case Type::ARC_LINE_DIFFERENCE: case Type::SYMMETRIC: case Type::SYMMETRIC_HORIZ: case Type::SYMMETRIC_VERT: @@ -334,6 +342,110 @@ void ConstraintBase::GenerateEquations(IdList *l, AddEq(l, (la->Div(lb))->Minus(exA), 0); return; } + + case Type::ARC_ARC_LEN_RATIO: { + EntityBase *arc1 = SK.GetEntity(entityA), + *arc2 = SK.GetEntity(entityB); + + // And get the arc1 radius, and the cosine of its angle + EntityBase *ao1 = SK.GetEntity(arc1->point[0]), + *as1 = SK.GetEntity(arc1->point[1]), + *af1 = SK.GetEntity(arc1->point[2]); + + ExprVector aos1 = (as1->PointGetExprs()).Minus(ao1->PointGetExprs()), + aof1 = (af1->PointGetExprs()).Minus(ao1->PointGetExprs()); + Expr *r1 = aof1.Magnitude(); + + ExprVector n1 = arc1->Normal()->NormalExprsN(); + ExprVector u1 = aos1.WithMagnitude(Expr::From(1.0)); + ExprVector v1 = n1.Cross(u1); + // so in our new csys, we start at (1, 0, 0) + Expr *costheta1 = aof1.Dot(u1)->Div(r1); + Expr *sintheta1 = aof1.Dot(v1)->Div(r1); + + double thetas1, thetaf1, dtheta1; + arc1->ArcGetAngles(&thetas1, &thetaf1, &dtheta1); + Expr *theta1; + if(dtheta1 < 3*PI/4) { + theta1 = costheta1->ACos(); + } else if(dtheta1 < 5*PI/4) { + // As the angle crosses pi, cos theta1 is not invertible; + // so use the sine to stop blowing up + theta1 = Expr::From(PI)->Minus(sintheta1->ASin()); + } else { + theta1 = (Expr::From(2*PI))->Minus(costheta1->ACos()); + } + + // And get the arc2 radius, and the cosine of its angle + EntityBase *ao2 = SK.GetEntity(arc2->point[0]), + *as2 = SK.GetEntity(arc2->point[1]), + *af2 = SK.GetEntity(arc2->point[2]); + + ExprVector aos2 = (as2->PointGetExprs()).Minus(ao2->PointGetExprs()), + aof2 = (af2->PointGetExprs()).Minus(ao2->PointGetExprs()); + Expr *r2 = aof2.Magnitude(); + + ExprVector n2 = arc2->Normal()->NormalExprsN(); + ExprVector u2 = aos2.WithMagnitude(Expr::From(1.0)); + ExprVector v2 = n2.Cross(u2); + // so in our new csys, we start at (1, 0, 0) + Expr *costheta2 = aof2.Dot(u2)->Div(r2); + Expr *sintheta2 = aof2.Dot(v2)->Div(r2); + + double thetas2, thetaf2, dtheta2; + arc2->ArcGetAngles(&thetas2, &thetaf2, &dtheta2); + Expr *theta2; + if(dtheta2 < 3*PI/4) { + theta2 = costheta2->ACos(); + } else if(dtheta2 < 5*PI/4) { + // As the angle crosses pi, cos theta2 is not invertible; + // so use the sine to stop blowing up + theta2 = Expr::From(PI)->Minus(sintheta2->ASin()); + } else { + theta2 = (Expr::From(2*PI))->Minus(costheta2->ACos()); + } + // And write the equation; (r1*theta1) / ( r2*theta2) = some ratio + AddEq(l, (r1->Times(theta1))->Div(r2->Times(theta2))->Minus(exA), 0); + return; + } + + case Type::ARC_LINE_LEN_RATIO: { + EntityBase *line = SK.GetEntity(entityA), + *arc1 = SK.GetEntity(entityB); + + Expr *ll = Distance(workplane, line->point[0], line->point[1]); + + // And get the arc1 radius, and the cosine of its angle + EntityBase *ao1 = SK.GetEntity(arc1->point[0]), + *as1 = SK.GetEntity(arc1->point[1]), + *af1 = SK.GetEntity(arc1->point[2]); + + ExprVector aos1 = (as1->PointGetExprs()).Minus(ao1->PointGetExprs()), + aof1 = (af1->PointGetExprs()).Minus(ao1->PointGetExprs()); + Expr *r1 = aof1.Magnitude(); + ExprVector n1 = arc1->Normal()->NormalExprsN(); + ExprVector u1 = aos1.WithMagnitude(Expr::From(1.0)); + ExprVector v1 = n1.Cross(u1); + // so in our new csys, we start at (1, 0, 0) + Expr *costheta1 = aof1.Dot(u1)->Div(r1); + Expr *sintheta1 = aof1.Dot(v1)->Div(r1); + + double thetas1, thetaf1, dtheta1; + arc1->ArcGetAngles(&thetas1, &thetaf1, &dtheta1); + Expr *theta1; + if(dtheta1 < 3*PI/4) { + theta1 = costheta1->ACos(); + } else if(dtheta1 < 5*PI/4) { + // As the angle crosses pi, cos theta1 is not invertible; + // so use the sine to stop blowing up + theta1 = Expr::From(PI)->Minus(sintheta1->ASin()); + } else { + theta1 = (Expr::From(2*PI))->Minus(costheta1->ACos()); + } + // And write the equation; (r1*theta1) / ( length) = some ratio + AddEq(l, (r1->Times(theta1))->Div(ll)->Minus(exA), 0); + return; + } case Type::LENGTH_DIFFERENCE: { EntityBase *a = SK.GetEntity(entityA); @@ -343,7 +455,111 @@ void ConstraintBase::GenerateEquations(IdList *l, AddEq(l, (la->Minus(lb))->Minus(exA), 0); return; } + + case Type::ARC_ARC_DIFFERENCE: { + EntityBase *arc1 = SK.GetEntity(entityA), + *arc2 = SK.GetEntity(entityB); + // And get the arc1 radius, and the cosine of its angle + EntityBase *ao1 = SK.GetEntity(arc1->point[0]), + *as1 = SK.GetEntity(arc1->point[1]), + *af1 = SK.GetEntity(arc1->point[2]); + + ExprVector aos1 = (as1->PointGetExprs()).Minus(ao1->PointGetExprs()), + aof1 = (af1->PointGetExprs()).Minus(ao1->PointGetExprs()); + Expr *r1 = aof1.Magnitude(); + + ExprVector n1 = arc1->Normal()->NormalExprsN(); + ExprVector u1 = aos1.WithMagnitude(Expr::From(1.0)); + ExprVector v1 = n1.Cross(u1); + // so in our new csys, we start at (1, 0, 0) + Expr *costheta1 = aof1.Dot(u1)->Div(r1); + Expr *sintheta1 = aof1.Dot(v1)->Div(r1); + + double thetas1, thetaf1, dtheta1; + arc1->ArcGetAngles(&thetas1, &thetaf1, &dtheta1); + Expr *theta1; + if(dtheta1 < 3*PI/4) { + theta1 = costheta1->ACos(); + } else if(dtheta1 < 5*PI/4) { + // As the angle crosses pi, cos theta1 is not invertible; + // so use the sine to stop blowing up + theta1 = Expr::From(PI)->Minus(sintheta1->ASin()); + } else { + theta1 = (Expr::From(2*PI))->Minus(costheta1->ACos()); + } + + // And get the arc2 radius, and the cosine of its angle + EntityBase *ao2 = SK.GetEntity(arc2->point[0]), + *as2 = SK.GetEntity(arc2->point[1]), + *af2 = SK.GetEntity(arc2->point[2]); + + ExprVector aos2 = (as2->PointGetExprs()).Minus(ao2->PointGetExprs()), + aof2 = (af2->PointGetExprs()).Minus(ao2->PointGetExprs()); + Expr *r2 = aof2.Magnitude(); + + ExprVector n2 = arc2->Normal()->NormalExprsN(); + ExprVector u2 = aos2.WithMagnitude(Expr::From(1.0)); + ExprVector v2 = n2.Cross(u2); + // so in our new csys, we start at (1, 0, 0) + Expr *costheta2 = aof2.Dot(u2)->Div(r2); + Expr *sintheta2 = aof2.Dot(v2)->Div(r2); + + double thetas2, thetaf2, dtheta2; + arc2->ArcGetAngles(&thetas2, &thetaf2, &dtheta2); + Expr *theta2; + if(dtheta2 < 3*PI/4) { + theta2 = costheta2->ACos(); + } else if(dtheta2 < 5*PI/4) { + // As the angle crosses pi, cos theta2 is not invertible; + // so use the sine to stop blowing up + theta2 = Expr::From(PI)->Minus(sintheta2->ASin()); + } else { + theta2 = (Expr::From(2*PI))->Minus(costheta2->ACos()); + } + // And write the equation; (r1*theta1) - ( r2*theta2) = some difference + AddEq(l, (r1->Times(theta1))->Minus(r2->Times(theta2))->Minus(exA), 0); + return; + } + + case Type::ARC_LINE_DIFFERENCE: { + EntityBase *line = SK.GetEntity(entityA), + *arc1 = SK.GetEntity(entityB); + + Expr *ll = Distance(workplane, line->point[0], line->point[1]); + + // And get the arc1 radius, and the cosine of its angle + EntityBase *ao1 = SK.GetEntity(arc1->point[0]), + *as1 = SK.GetEntity(arc1->point[1]), + *af1 = SK.GetEntity(arc1->point[2]); + + ExprVector aos1 = (as1->PointGetExprs()).Minus(ao1->PointGetExprs()), + aof1 = (af1->PointGetExprs()).Minus(ao1->PointGetExprs()); + Expr *r1 = aof1.Magnitude(); + ExprVector n1 = arc1->Normal()->NormalExprsN(); + ExprVector u1 = aos1.WithMagnitude(Expr::From(1.0)); + ExprVector v1 = n1.Cross(u1); + // so in our new csys, we start at (1, 0, 0) + Expr *costheta1 = aof1.Dot(u1)->Div(r1); + Expr *sintheta1 = aof1.Dot(v1)->Div(r1); + + double thetas1, thetaf1, dtheta1; + arc1->ArcGetAngles(&thetas1, &thetaf1, &dtheta1); + Expr *theta1; + if(dtheta1 < 3*PI/4) { + theta1 = costheta1->ACos(); + } else if(dtheta1 < 5*PI/4) { + // As the angle crosses pi, cos theta1 is not invertible; + // so use the sine to stop blowing up + theta1 = Expr::From(PI)->Minus(sintheta1->ASin()); + } else { + theta1 = (Expr::From(2*PI))->Minus(costheta1->ACos()); + } + // And write the equation; (r1*theta1) - ( length) = some difference + AddEq(l, (r1->Times(theta1))->Minus(ll)->Minus(exA), 0); + return; + } + case Type::DIAMETER: { EntityBase *circle = SK.GetEntity(entityA); Expr *r = circle->CircleGetRadiusExpr(); @@ -511,7 +727,7 @@ void ConstraintBase::GenerateEquations(IdList *l, } } return; - + case Type::SYMMETRIC: if(workplane == EntityBase::FREE_IN_3D) { EntityBase *plane = SK.GetEntity(entityA); diff --git a/src/drawconstraint.cpp b/src/drawconstraint.cpp index d6a6f3fb..4952d362 100644 --- a/src/drawconstraint.cpp +++ b/src/drawconstraint.cpp @@ -12,7 +12,7 @@ std::string Constraint::Label() const { std::string result; if(type == Type::ANGLE) { result = SS.DegreeToString(valA) + "°"; - } else if(type == Type::LENGTH_RATIO) { + } else if(type == Type::LENGTH_RATIO || type == Type::ARC_ARC_LEN_RATIO || type == Type::ARC_LINE_LEN_RATIO) { result = ssprintf("%.3f:1", valA); } else if(type == Type::COMMENT) { result = comment; @@ -1000,7 +1000,43 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, } return; } + case Type::ARC_ARC_LEN_RATIO: + case Type::ARC_ARC_DIFFERENCE: { + Entity *circle = SK.GetEntity(entityA); + Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); + Quaternion q = SK.GetEntity(circle->normal)->NormalGetNum(); + Vector n = q.RotationN().WithMagnitude(1); + double r = circle->CircleGetRadiusNum(); + Vector ref2; + DoEqualRadiusTicks(canvas, hcs, entityA, &ref2); + DoEqualRadiusTicks(canvas, hcs, entityB, &ref2); + + Vector ref = center.Plus(disp.offset); + // Force the label into the same plane as the circle. + ref = ref.Minus(n.ScaledBy(n.Dot(ref) - n.Dot(center))); + if(refs) refs->push_back(ref); + Vector topLeft; + DoLabel(canvas, hcs, ref, &topLeft, gr, gu); + if(labelPos) *labelPos = topLeft; + return; + } + case Type::ARC_LINE_LEN_RATIO: + case Type::ARC_LINE_DIFFERENCE: { + Vector a, b = Vector::From(0, 0, 0); + Vector ref; + Entity *e = SK.GetEntity(entityA); + a = SK.GetEntity(e->point[0])->PointGetNum(); + b = SK.GetEntity(e->point[1])->PointGetNum(); + DoEqualLenTicks(canvas, hcs, a, b, gn, &ref); + if(refs) refs->push_back(ref); + DoEqualRadiusTicks(canvas, hcs, entityB, &ref); + if(refs) refs->push_back(ref); + ref = ((a.Plus(b)).ScaledBy(0.5)).Plus(disp.offset); + DoLabel(canvas, hcs, ref, labelPos, gr, gu); + return; + } + case Type::EQ_LEN_PT_LINE_D: { Entity *forLen = SK.GetEntity(entityA); Vector a = SK.GetEntity(forLen->point[0])->PointGetNum(), @@ -1243,7 +1279,11 @@ bool Constraint::HasLabel() const { case Type::PT_FACE_DISTANCE: case Type::PROJ_PT_DISTANCE: case Type::LENGTH_RATIO: + case Type::ARC_ARC_LEN_RATIO: + case Type::ARC_LINE_LEN_RATIO: case Type::LENGTH_DIFFERENCE: + case Type::ARC_ARC_DIFFERENCE: + case Type::ARC_LINE_DIFFERENCE: case Type::DIAMETER: case Type::ANGLE: return true; diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index 5422a579..0b8fb64f 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -153,8 +153,8 @@ const MenuEntry Menu[] = { { 1, NULL, Command::NONE, 0, KN, NULL }, { 1, N_("&On Point / Curve / Plane"), Command::ON_ENTITY, 'o', KN, mCon }, { 1, N_("E&qual Length / Radius / Angle"), Command::EQUAL, 'q', KN, mCon }, -{ 1, N_("Length Ra&tio"), Command::RATIO, 'z', KN, mCon }, -{ 1, N_("Length Diff&erence"), Command::DIFFERENCE, 'j', KN, mCon }, +{ 1, N_("Length / Arc Ra&tio"), Command::RATIO, 'z', KN, mCon }, +{ 1, N_("Length / Arc Diff&erence"), Command::DIFFERENCE, 'j', KN, mCon }, { 1, N_("At &Midpoint"), Command::AT_MIDPOINT, 'm', KN, mCon }, { 1, N_("S&ymmetric"), Command::SYMMETRIC, 'y', KN, mCon }, { 1, N_("Para&llel / Tangent"), Command::PARALLEL, 'l', KN, mCon }, diff --git a/src/lib.cpp b/src/lib.cpp index b0d8e1d6..9da18b04 100644 --- a/src/lib.cpp +++ b/src/lib.cpp @@ -131,11 +131,15 @@ case SLVS_C_PT_ON_LINE: t = Constraint::Type::PT_ON_LINE; break; case SLVS_C_PT_ON_FACE: t = Constraint::Type::PT_ON_FACE; break; case SLVS_C_EQUAL_LENGTH_LINES: t = Constraint::Type::EQUAL_LENGTH_LINES; break; case SLVS_C_LENGTH_RATIO: t = Constraint::Type::LENGTH_RATIO; break; +case SLVS_C_ARC_ARC_LEN_RATIO: t = Constraint::Type::ARC_ARC_LEN_RATIO; break; +case SLVS_C_ARC_LINE_LEN_RATIO: t = Constraint::Type::ARC_LINE_LEN_RATIO; break; case SLVS_C_EQ_LEN_PT_LINE_D: t = Constraint::Type::EQ_LEN_PT_LINE_D; break; case SLVS_C_EQ_PT_LN_DISTANCES: t = Constraint::Type::EQ_PT_LN_DISTANCES; break; case SLVS_C_EQUAL_ANGLE: t = Constraint::Type::EQUAL_ANGLE; break; case SLVS_C_EQUAL_LINE_ARC_LEN: t = Constraint::Type::EQUAL_LINE_ARC_LEN; break; case SLVS_C_LENGTH_DIFFERENCE: t = Constraint::Type::LENGTH_DIFFERENCE; break; +case SLVS_C_ARC_ARC_DIFFERENCE: t = Constraint::Type::ARC_ARC_DIFFERENCE; break; +case SLVS_C_ARC_LINE_DIFFERENCE:t = Constraint::Type::ARC_LINE_DIFFERENCE; break; case SLVS_C_SYMMETRIC: t = Constraint::Type::SYMMETRIC; break; case SLVS_C_SYMMETRIC_HORIZ: t = Constraint::Type::SYMMETRIC_HORIZ; break; case SLVS_C_SYMMETRIC_VERT: t = Constraint::Type::SYMMETRIC_VERT; break; diff --git a/src/mouse.cpp b/src/mouse.cpp index 2e1c75a8..a88d34f8 100644 --- a/src/mouse.cpp +++ b/src/mouse.cpp @@ -1373,7 +1373,7 @@ void GraphicsWindow::EditConstraint(hConstraint constraint) { value /= 2; // Try showing value with default number of digits after decimal first. - if(c->type == Constraint::Type::LENGTH_RATIO) { + if(c->type == Constraint::Type::LENGTH_RATIO || c->type == Constraint::Type::ARC_ARC_LEN_RATIO || c->type == Constraint::Type::ARC_LINE_LEN_RATIO) { editValue = ssprintf("%.3f", value); } else if(c->type == Constraint::Type::ANGLE) { editValue = SS.DegreeToString(value); @@ -1434,7 +1434,9 @@ void GraphicsWindow::EditControlDone(const std::string &s) { case Constraint::Type::PT_LINE_DISTANCE: case Constraint::Type::PT_FACE_DISTANCE: case Constraint::Type::PT_PLANE_DISTANCE: - case Constraint::Type::LENGTH_DIFFERENCE: { + case Constraint::Type::LENGTH_DIFFERENCE: + case Constraint::Type::ARC_ARC_DIFFERENCE: + case Constraint::Type::ARC_LINE_DIFFERENCE: { // The sign is not displayed to the user, but this is a signed // distance internally. To flip the sign, the user enters a // negative distance. @@ -1448,6 +1450,8 @@ void GraphicsWindow::EditControlDone(const std::string &s) { } case Constraint::Type::ANGLE: case Constraint::Type::LENGTH_RATIO: + case Constraint::Type::ARC_ARC_LEN_RATIO: + case Constraint::Type::ARC_LINE_LEN_RATIO: // These don't get the units conversion for distance, and // they're always positive c->valA = fabs(e->Eval()); diff --git a/src/sketch.h b/src/sketch.h index 0aa75988..9f73a32a 100644 --- a/src/sketch.h +++ b/src/sketch.h @@ -676,7 +676,10 @@ public: CURVE_CURVE_TANGENT = 125, EQUAL_RADIUS = 130, WHERE_DRAGGED = 200, - + ARC_ARC_LEN_RATIO = 210, + ARC_LINE_LEN_RATIO = 211, + ARC_ARC_DIFFERENCE = 212, + ARC_LINE_DIFFERENCE = 213, COMMENT = 1000 }; diff --git a/src/solvespace.cpp b/src/solvespace.cpp index 4e458cf4..0f0a0ec9 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -764,7 +764,11 @@ void SolveSpaceUI::MenuAnalyze(Command id) { SS.TW.stepDim.isDistance = (c->type != Constraint::Type::ANGLE) && (c->type != Constraint::Type::LENGTH_RATIO) && - (c->type != Constraint::Type::LENGTH_DIFFERENCE); + (c->type != Constraint::Type::ARC_ARC_LEN_RATIO) && + (c->type != Constraint::Type::ARC_LINE_LEN_RATIO) && + (c->type != Constraint::Type::LENGTH_DIFFERENCE) && + (c->type != Constraint::Type::ARC_ARC_DIFFERENCE) && + (c->type != Constraint::Type::ARC_LINE_DIFFERENCE) ; SS.TW.shown.constraint = c->h; SS.TW.shown.screen = TextWindow::Screen::STEP_DIMENSION; From 002b12484eda445cd6846904f2000afacc4d199e Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Wed, 30 Jun 2021 21:21:45 -0400 Subject: [PATCH 51/89] Update CHANGELOG.md Add some post 3.0 improvements --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c21b5d9a..de3d2f53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,27 @@ Changelog ========= +3.x - since the 3.0 release, only available in edge builds +--- + +New Constraints: + +* Arc-length ratio and difference. +* Arc & line lenfth ratio and difference. + +Sketching: + +* Allow a point and normal to define sketch-in-new-workplane +* update property browser live while dragging the sketch + +MISC: + +* When linking ciruit boards (IDF .emn files) show keepout regions as construction entites. + +Performance: + +* more changes to the ID list implementation + 3.0 --- From ddb76324afb99376c1bf5cccec2db7cb06a023dc Mon Sep 17 00:00:00 2001 From: app4soft Date: Thu, 1 Jul 2021 13:06:33 +0300 Subject: [PATCH 52/89] Update CHANGELOG.md Fix typo --- CHANGELOG.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de3d2f53..8532370c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,21 +6,21 @@ Changelog New Constraints: -* Arc-length ratio and difference. -* Arc & line lenfth ratio and difference. +* Arcs length ratio and difference. +* Arc & Line length ratio and difference. Sketching: -* Allow a point and normal to define sketch-in-new-workplane -* update property browser live while dragging the sketch +* Allow use of Point & Normal to define "sketch-in-new-workplane". +* Update "Property Browser" live while dragging the sketch. MISC: -* When linking ciruit boards (IDF .emn files) show keepout regions as construction entites. +* When linking circuit boards (IDF .emn files) show keepout regions as construction entites. Performance: -* more changes to the ID list implementation +* More changes to the ID list implementation. 3.0 --- From 37da0f334188de5f3d046f7a7df16ec6b5503c2f Mon Sep 17 00:00:00 2001 From: luz paz Date: Mon, 5 Jul 2021 12:29:14 -0400 Subject: [PATCH 53/89] Fix various typos Found via `codespell -q 3 -S ./res/locales,./extlib -L asign,ba,hsi,mata,tothe` --- CHANGELOG.md | 2 +- developer_docs/IdLists_Entities_and_Remap.txt | 16 ++++++++-------- developer_docs/Solver_Transforms.txt | 4 ++-- src/clipboard.cpp | 2 +- src/graphicswin.cpp | 2 +- src/importidf.cpp | 6 +++--- src/platform/guiwin.cpp | 2 +- src/solvespace.cpp | 2 +- src/srf/boolean.cpp | 4 ++-- src/srf/curve.cpp | 2 +- src/srf/triangulate.cpp | 8 ++++---- src/textscreens.cpp | 2 +- src/textwin.cpp | 4 ++-- 13 files changed, 28 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8532370c..e2e22b4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ Sketching: MISC: -* When linking circuit boards (IDF .emn files) show keepout regions as construction entites. +* When linking circuit boards (IDF .emn files) show keepout regions as construction entities. Performance: diff --git a/developer_docs/IdLists_Entities_and_Remap.txt b/developer_docs/IdLists_Entities_and_Remap.txt index 03ea9d7f..5fe17916 100644 --- a/developer_docs/IdLists_Entities_and_Remap.txt +++ b/developer_docs/IdLists_Entities_and_Remap.txt @@ -9,25 +9,25 @@ by pointers from the entity (font, extra points, etc...) Entities in a sketch are kept in a global array (IdList) referenced by a unique Id (handle) and can be looked up by Id in log(n) time via binary search. In -order to use binary seach the array must be kept in order sorted by Id. One +order to use binary search the array must be kept in order sorted by Id. One problem is that insertion takes O(n) time because half the list (on average) must be shifted to make room for a new item. -The IdList class is a template and is used for more than entites. +The IdList class is a template and is used for more than entities. EntityMap: ========== Another important structure is the EntityMap and EntityKey defined in sketch.h This is what allows SovleSpace to update groups when earlier groups in the sketch are changed. If a rectangle is extruded to a box and items are -constrained to entites on that box, the user can go back to the sketch and -modify it. Entites can be added, modified an even deleted. So long as the -entites that are later used to build upon are kept the later extrude group will +constrained to entities on that box, the user can go back to the sketch and +modify it. Entities can be added, modified an even deleted. So long as the +entities that are later used to build upon are kept the later extrude group will pick up the changes from the 2D sketch and anything build on it will remain. The way this works is that each group has a member called remap, which is one of these maps. This is where my understanding is fuzzy. At the end of Group.cpp is -a function called Group::CopyEntity() which is used to make new sketch entites +a function called Group::CopyEntity() which is used to make new sketch entities when a group is created. These are generally copies of entities in the previous group, but there are exceptions. A point will be used to generate a line when extruding a 2D sketch. A point will also be "copied" to a circle for a Lathe @@ -35,7 +35,7 @@ group. For this reason, the entity key is derived by combining its previous key with something often called the CopyNumber or just remap (unfortunate). When a group is regenerated (the first time, or after a previous one is -modified) entites are copied from the old group to the new one. For Step +modified) entities are copied from the old group to the new one. For Step Translating and Rotating there may be many copies, and the copy number is literally N for the Nth copy except for the last one which gets an enum - it is common to constrain the last item, so it gets a large unique number so that @@ -45,5 +45,5 @@ Remap that was created the same way. This is how constructions are preserved across underlying changes. There are some hard limits used in the hash table for the remap mechanism which -limit the number of entites in a group (but not the global sketch). +limit the number of entities in a group (but not the global sketch). diff --git a/developer_docs/Solver_Transforms.txt b/developer_docs/Solver_Transforms.txt index 1ea3ae5f..98300f8b 100644 --- a/developer_docs/Solver_Transforms.txt +++ b/developer_docs/Solver_Transforms.txt @@ -46,7 +46,7 @@ POINT_N_ROT_TRANS: Rotates a point via quaternion param[3],param[4],param[5],par POINT_N_COPY: A non-transformed copy of a point - numeric copy? -POINT_N_ROT_AA: A point rotated arount point param[0],param[1],param[2] Where the +POINT_N_ROT_AA: A point rotated around point param[0],param[1],param[2] Where the angle is given by param[3]*timesApplied (times 2?) and the axis of rotation defined by param[4],param[5],param[6] @@ -130,7 +130,7 @@ the entity itself. The ForceTo() functions are shortcuts for using the solver. They are passed the desired location of a point (or orientation of a normal...) and have the opportunity to back-calculate what the group parameters should be to place it there. This is -used for mouse dragging of copied entites. It is notable that the constraints will +used for mouse dragging of copied entities. It is notable that the constraints will still be applied afterward, but this is a good shortcut. When creating a new entity transformation, the first thing to do is define the diff --git a/src/clipboard.cpp b/src/clipboard.cpp index 96265008..69a624c3 100644 --- a/src/clipboard.cpp +++ b/src/clipboard.cpp @@ -281,7 +281,7 @@ void GraphicsWindow::PasteClipboard(Vector trans, double theta, double scale) { } case Constraint::Type::HORIZONTAL: case Constraint::Type::VERTICAL: - // When rotating 90 or 270 degrees, swap the vertical / horizontal constaints + // When rotating 90 or 270 degrees, swap the vertical / horizontal constraints if (EXACT(fmod(theta + (PI/2), PI) == 0)) { if(c.type == Constraint::Type::HORIZONTAL) { c.type = Constraint::Type::VERTICAL; diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index 0b8fb64f..16846d25 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -370,7 +370,7 @@ static void PopulateMenuWithPathnames(Platform::MenuRef menu, void GraphicsWindow::PopulateRecentFiles() { PopulateMenuWithPathnames(openRecentMenu, SS.recentFiles, [](const Platform::Path &path) { // OkayToStartNewFile could mutate recentFiles, which will invalidate path (which is a - // refererence into the recentFiles vector), so take a copy of it here. + // reference into the recentFiles vector), so take a copy of it here. Platform::Path pathCopy(path); if(!SS.OkayToStartNewFile()) return; SS.Load(pathCopy); diff --git a/src/importidf.cpp b/src/importidf.cpp index 101feff1..8ca3432a 100644 --- a/src/importidf.cpp +++ b/src/importidf.cpp @@ -54,7 +54,7 @@ static std::vector splitString(const std::string line) { } ////////////////////////////////////////////////////////////////////////////// -// Functions for linking an IDF file - we need to create entites that +// Functions for linking an IDF file - we need to create entities that // get remapped into a linked group similar to linking .slvs files ////////////////////////////////////////////////////////////////////////////// @@ -291,9 +291,9 @@ static void MakeBeziersForArcs(SBezierList *sbl, Vector center, Vector pa, Vecto namespace SolveSpace { // Here we read the important section of an IDF file. SolveSpace Entities are directly created by -// the funcions above, which is only OK because of the way linking works. For example points do +// the functions above, which is only OK because of the way linking works. For example points do // not have handles for solver parameters (coordinates), they only have their actPoint values -// set (or actNormal or actDistance). These are incompete entites and would be a problem if +// set (or actNormal or actDistance). These are incomplete entities and would be a problem if // they were part of the sketch, but they are not. After making a list of them here, a new group // gets created from copies of these. Those copies are complete and part of the sketch group. bool LinkIDF(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *sh) { diff --git a/src/platform/guiwin.cpp b/src/platform/guiwin.cpp index e98e8738..ba9e18cf 100644 --- a/src/platform/guiwin.cpp +++ b/src/platform/guiwin.cpp @@ -1229,7 +1229,7 @@ public: sscheck(GetMonitorInfo(MonitorFromRect(&rc, MONITOR_DEFAULTTONEAREST), &mi)); // If it somehow ended up off-screen, then put it back. - // and make it visible by at least this portion of the scrren + // and make it visible by at least this portion of the screen const LONG movein = 40; RECT mrc = mi.rcMonitor; diff --git a/src/solvespace.cpp b/src/solvespace.cpp index 0f0a0ec9..ccea271a 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -349,7 +349,7 @@ static const char *DimToString(int dim) { } static std::pair SelectSIPrefixMm(int ord, int dim) { // decide what units to use depending on the order of magnitude of the -// measure in meters and the dimmension (1,2,3 lenear, area, volume) +// measure in meters and the dimension (1,2,3 lenear, area, volume) switch(dim) { case 0: case 1: diff --git a/src/srf/boolean.cpp b/src/srf/boolean.cpp index 4586cb58..7700e1b6 100644 --- a/src/srf/boolean.cpp +++ b/src/srf/boolean.cpp @@ -29,7 +29,7 @@ void SCurve::GetAxisAlignedBounding(Vector *ptMax, Vector *ptMin) const { } } -// We will be inserting other curve verticies into our curves to split them. +// We will be inserting other curve vertices into our curves to split them. // This is helpful when curved surfaces become tangent along a trim and the // usual tests for curve-surface intersection don't split the curve at a vertex. // This is faster than the previous version that split at surface corners and @@ -796,7 +796,7 @@ void SShell::MakeFromBoolean(SShell *a, SShell *b, SSurface::CombineAs type) { b->MakeClassifyingBsps(NULL); // Copy over all the original curves, splitting them so that a - // piecwise linear segment never crosses a surface from the other + // piecewise linear segment never crosses a surface from the other // shell. a->CopyCurvesSplitAgainst(/*opA=*/true, b, this); b->CopyCurvesSplitAgainst(/*opA=*/false, a, this); diff --git a/src/srf/curve.cpp b/src/srf/curve.cpp index 55496b67..382415b1 100644 --- a/src/srf/curve.cpp +++ b/src/srf/curve.cpp @@ -817,7 +817,7 @@ void SCurve::RemoveShortSegments(SSurface *srfA, SSurface *srfB) { continue; } - // if the curve is exact and points are >0.05 appart wrt t, point is there + // if the curve is exact and points are >0.05 apart wrt t, point is there // deliberately regardless of chord tolerance (ex: small circles) tprev = t = tnext = 0; if (isExact) { diff --git a/src/srf/triangulate.cpp b/src/srf/triangulate.cpp index d02f9638..464bce62 100644 --- a/src/srf/triangulate.cpp +++ b/src/srf/triangulate.cpp @@ -426,7 +426,7 @@ void SContour::UvTriangulateInto(SMesh *m, SSurface *srf) { if (i == l.n-1) { end = true; } - if (end) { // triangulate the fan and tag the verticies + if (end) { // triangulate the fan and tag the vertices if (j > 3) { Vector center = l[pstart+1].p.Plus(l[pstart+j-1].p).ScaledBy(0.5); for (int x=0; xMakeTriangulationGridInto(&lj, 0, 1, /*swapped=*/false, 0); // force 2nd order grid to have at least 4 segments in each direction - if ((li.n < 5) && (srf->degm>1)) { // 4 segments minimun + if ((li.n < 5) && (srf->degm>1)) { // 4 segments minimum li.Clear(); li.Add(&v[0]);li.Add(&v[1]);li.Add(&v[2]);li.Add(&v[3]);li.Add(&v[4]); } - if ((lj.n < 5) && (srf->degn>1)) { // 4 segments minimun + if ((lj.n < 5) && (srf->degn>1)) { // 4 segments minimum lj.Clear(); lj.Add(&v[0]);lj.Add(&v[1]);lj.Add(&v[2]);lj.Add(&v[3]);lj.Add(&v[4]); } @@ -681,7 +681,7 @@ void SPolygon::UvGridTriangulateInto(SMesh *mesh, SSurface *srf) { if (!bottom[j]) // add our own bottom edge holes.AddEdge(a, b); } else { - if (prev_flag) // add our left neighbots right edge + if (prev_flag) // add our left neighbors right edge holes.AddEdge(a, d); if (bottom[j]) // add our bottom neighbors top edge holes.AddEdge(b, a); diff --git a/src/textscreens.cpp b/src/textscreens.cpp index 07d5cdee..884d963d 100644 --- a/src/textscreens.cpp +++ b/src/textscreens.cpp @@ -579,7 +579,7 @@ void TextWindow::ShowGroupSolveInfo() { } if(g->solved.timeout) { - Printf(true, "%FxSome items in list have been ommitted%Fd"); + Printf(true, "%FxSome items in list have been omitted%Fd"); Printf(false, "%Fxbecause the operation timed out.%Fd"); } diff --git a/src/textwin.cpp b/src/textwin.cpp index 3e339226..599844cc 100644 --- a/src/textwin.cpp +++ b/src/textwin.cpp @@ -348,8 +348,8 @@ void TextWindow::ClearScreen() { rows = 0; } -// This message was addded when someone had too many fonts for the text window -// Scrolling seemed to be broken, but was actaully at the MAX_ROWS. +// This message was added when someone had too many fonts for the text window +// Scrolling seemed to be broken, but was actually at the MAX_ROWS. static const char* endString = " **** End of Text Screen ****"; void TextWindow::Printf(bool halfLine, const char *fmt, ...) { From a97b77c1e552c89aee873562694e7ac733056094 Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sat, 17 Jul 2021 18:38:57 -0400 Subject: [PATCH 54/89] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2e22b4b..3df5b20b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,11 @@ Changelog 3.x - since the 3.0 release, only available in edge builds --- -New Constraints: +Constraints: * Arcs length ratio and difference. * Arc & Line length ratio and difference. +* Allow comments to be associated with point entities. Sketching: From 2afd6103d97b88f8cfd52109de3e7cf06c95b2aa Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Thu, 1 Oct 2020 00:05:33 -0400 Subject: [PATCH 55/89] Add STL linking with bounding box and edge verticies. Experimental. --- src/CMakeLists.txt | 1 + src/file.cpp | 4 +- src/importmesh.cpp | 222 +++++++++++++++++++++++++++++++++++++++++++ src/platform/gui.cpp | 1 + src/solvespace.h | 1 + 5 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 src/importmesh.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5ac7b41d..ec39939c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -176,6 +176,7 @@ set(solvespace_core_SOURCES groupmesh.cpp importdxf.cpp importidf.cpp + importmesh.cpp mesh.cpp modify.cpp mouse.cpp diff --git a/src/file.cpp b/src/file.cpp index 4e3b50d3..c8989728 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -710,7 +710,9 @@ bool SolveSpaceUI::LoadEntitiesFromFile(const Platform::Path &filename, EntityLi SMesh *m, SShell *sh) { if(strcmp(filename.Extension().c_str(), "emn")==0) { - return LinkIDF(filename, le, m, sh); + return LinkIDF(filename, le, m, sh); + } else if(strcmp(filename.Extension().c_str(), "stl")==0) { + return LinkStl(filename, le, m, sh); } else { return LoadEntitiesFromSlvs(filename, le, m, sh); } diff --git a/src/importmesh.cpp b/src/importmesh.cpp new file mode 100644 index 00000000..21151753 --- /dev/null +++ b/src/importmesh.cpp @@ -0,0 +1,222 @@ +//----------------------------------------------------------------------------- +// Triangle mesh file reader. Reads an STL file triangle mesh and creates +// a SovleSpace SMesh from it. Supports only Linking, not import. +// +// Copyright 2020 Paul Kahler. +//----------------------------------------------------------------------------- +#include "solvespace.h" +#include "sketch.h" +#include + +#define MIN_POINT_DISTANCE 0.001 + +// we will check for duplicate verticies and keep all their normals +class vertex { +public: + Vector p; + std::vector normal; +}; + +static bool isEdgeVertex(vertex &v) { + unsigned int i,j; + bool result = false; + for(i=0;i &lv, Vector &p, Vector &n) { + unsigned int i; + for(i=0; iAdd(&en); + return en.h; +} + +// check if a vertex is unique and add it via newPoint if it is. +static void addVertex(EntityList *el, Vector v) { + if(el->n < 15000) { + int id = el->n+2; + newPoint(el, id, v); + } +} + +static hEntity newLine(EntityList *el, int id, hEntity p0, hEntity p1) { + Entity en = {}; + en.type = Entity::Type::LINE_SEGMENT; + en.point[0] = p0; + en.point[1] = p1; + en.extraPoints = 0; + en.timesApplied = 0; + en.group.v = 493; + en.construction = true; + en.style.v = Style::CONSTRUCTION; + en.actVisible = true; + en.forceHidden = false; + + en.h.v = id + en.group.v*65536; + el->Add(&en); + return en.h; +} + +namespace SolveSpace { + +bool LinkStl(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *sh) { + dbp("\nLink STL triangle mesh."); + el->Clear(); + std::string data; + if(!ReadFile(filename, &data)) { + Error("Couldn't read from '%s'", filename.raw.c_str()); + return false; + } + + std::stringstream f(data); + + char str[80] = {}; + f.read(str, 80); + + uint32_t n; + uint32_t color; + + f.read((char*)&n, 4); + dbp("%d triangles", n); + + float x,y,z; + float xn,yn,zn; + + //add the STL origin as an entity + addVertex(el, Vector::From(0.0, 0.0, 0.0)); + + std::vector verts = {}; + + for(uint32_t i = 0; i> 7) & 0xf8; + tr.meta.color.green = (color >> 2) & 0xf8; + tr.meta.color.blue = (color << 3); + tr.meta.color.alpha = 255; + } else { + tr.meta.color.red = 90; + tr.meta.color.green = 120; + tr.meta.color.blue = 140; + tr.meta.color.alpha = 255; + } + + m->AddTriangle(&tr); + Vector normal = tr.Normal().WithMagnitude(1.0); + addUnique(verts, tr.a, normal); + addUnique(verts, tr.b, normal); + addUnique(verts, tr.c, normal); + } + SK.GetGroup(SS.GW.activeGroup)->forceToMesh = true; + dbp("%d verticies", verts.size()); + + BBox box = {}; + box.minp = verts[0].p; + box.maxp = verts[0].p; + + // determine the bounding box for all vertexes + for(unsigned int i=1; in+2; + p[0] = newPoint(el, id++, Vector::From(box.minp.x, box.minp.y, box.minp.z)); + p[1] = newPoint(el, id++, Vector::From(box.maxp.x, box.minp.y, box.minp.z)); + p[2] = newPoint(el, id++, Vector::From(box.minp.x, box.maxp.y, box.minp.z)); + p[3] = newPoint(el, id++, Vector::From(box.maxp.x, box.maxp.y, box.minp.z)); + p[4] = newPoint(el, id++, Vector::From(box.minp.x, box.minp.y, box.maxp.z)); + p[5] = newPoint(el, id++, Vector::From(box.maxp.x, box.minp.y, box.maxp.z)); + p[6] = newPoint(el, id++, Vector::From(box.minp.x, box.maxp.y, box.maxp.z)); + p[7] = newPoint(el, id++, Vector::From(box.maxp.x, box.maxp.y, box.maxp.z)); + + newLine(el, id++, p[0], p[1]); + newLine(el, id++, p[0], p[2]); + newLine(el, id++, p[3], p[1]); + newLine(el, id++, p[3], p[2]); + + newLine(el, id++, p[4], p[5]); + newLine(el, id++, p[4], p[6]); + newLine(el, id++, p[7], p[5]); + newLine(el, id++, p[7], p[6]); + + newLine(el, id++, p[0], p[4]); + newLine(el, id++, p[1], p[5]); + newLine(el, id++, p[2], p[6]); + newLine(el, id++, p[3], p[7]); + + for(unsigned int i=0; i SolveSpaceModelFileFilters = { std::vector SolveSpaceLinkFileFilters = { { CN_("file-type", "SolveSpace models"), { "slvs" } }, { CN_("file-type", "IDF circuit board"), { "emn" } }, + { CN_("file-type", "STL triangle mesh"), { "stl" } }, }; std::vector RasterFileFilters = { diff --git a/src/solvespace.h b/src/solvespace.h index e64a1ab8..d4caab2b 100644 --- a/src/solvespace.h +++ b/src/solvespace.h @@ -812,6 +812,7 @@ public: void ImportDxf(const Platform::Path &file); void ImportDwg(const Platform::Path &file); bool LinkIDF(const Platform::Path &filename, EntityList *le, SMesh *m, SShell *sh); +bool LinkStl(const Platform::Path &filename, EntityList *le, SMesh *m, SShell *sh); extern SolveSpaceUI SS; extern Sketch SK; From f6bb0a2d35ba6c67a72170413207d0f28bac216d Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Wed, 28 Jul 2021 21:01:46 -0400 Subject: [PATCH 56/89] Add an ALL filter for linking files that includes slvs, emn, and stl --- src/platform/gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/platform/gui.cpp b/src/platform/gui.cpp index a685e866..0c9637ff 100644 --- a/src/platform/gui.cpp +++ b/src/platform/gui.cpp @@ -86,6 +86,7 @@ std::vector SolveSpaceModelFileFilters = { }; std::vector SolveSpaceLinkFileFilters = { + { CN_("file-type", "ALL"), { "slvs", "emn", "stl" } }, { CN_("file-type", "SolveSpace models"), { "slvs" } }, { CN_("file-type", "IDF circuit board"), { "emn" } }, { CN_("file-type", "STL triangle mesh"), { "stl" } }, From 06a1f8031daa1be9e2bc364f1f1cc2ddd3111a74 Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sat, 24 Jul 2021 21:55:54 -0400 Subject: [PATCH 57/89] Add optional helix pitch constraint. --- src/group.cpp | 6 ++++++ src/textscreens.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++++ src/ui.h | 6 +++++- 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/group.cpp b/src/group.cpp index 0f458045..438d5108 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -813,6 +813,12 @@ void Group::GenerateEquations(IdList *l) { AddEq(l, (EC(axis.z))->Minus(EP(6)), 5); #undef EC #undef EP + if(type == Type::HELIX) { + if(valB != 0.0) { + AddEq(l, Expr::From(h.param(7))->Times(Expr::From(PI))-> + Minus(Expr::From(h.param(3))->Times(Expr::From(valB))), 6); + } + } } else if(type == Type::EXTRUDE) { if(predef.entityB != Entity::FREE_IN_3D) { // The extrusion path is locked along a line, normal to the diff --git a/src/textscreens.cpp b/src/textscreens.cpp index 884d963d..ee6d90ea 100644 --- a/src/textscreens.cpp +++ b/src/textscreens.cpp @@ -299,6 +299,23 @@ void TextWindow::ScreenChangeGroupScale(int link, uint32_t v) { SS.TW.edit.meaning = Edit::GROUP_SCALE; SS.TW.edit.group.v = v; } +void TextWindow::ScreenChangeHelixPitch(int link, uint32_t v) { + Group *g = SK.GetGroup(SS.TW.shown.group); + double pitch = g->valB/SS.MmPerUnit(); + SS.TW.ShowEditControl(3, ssprintf("%.8f", pitch)); + SS.TW.edit.meaning = Edit::HELIX_PITCH; + SS.TW.edit.group.v = v; +} +void TextWindow::ScreenChangePitchOption(int link, uint32_t v) { + Group *g = SK.GetGroup(SS.TW.shown.group); + if(g->valB == 0.0) { + g->valB = SK.GetParam(g->h.param(7))->val * PI / + (SK.GetParam(g->h.param(3))->val); + } else { + g->valB = 0.0; + } + SS.GW.Invalidate(); +} void TextWindow::ScreenDeleteGroup(int link, uint32_t v) { SS.UndoRemember(); @@ -398,6 +415,26 @@ void TextWindow::ShowGroupInfo() { } Printf(false, ""); + if(g->type == Group::Type::HELIX) { + Printf(false, "%Ft pitch - length per turn%E"); + + if (fabs(g->valB) != 0.0) { + Printf(false, " %Ba %# %Fl%Ll%f%D[change]%E", + g->valB / SS.MmPerUnit(), + &TextWindow::ScreenChangeHelixPitch, g->h.v); + } else { + Printf(false, " %Ba %# %E", + SK.GetParam(g->h.param(7))->val * PI / + ( (SK.GetParam(g->h.param(3))->val) * SS.MmPerUnit() ), + &TextWindow::ScreenChangeHelixPitch, g->h.v); + } + Printf(false, " %Fd%f%LP%s fixed", + &TextWindow::ScreenChangePitchOption, + g->valB != 0 ? CHECK_TRUE : CHECK_FALSE); + + Printf(false, ""); // blank line + } + if(g->type == Group::Type::EXTRUDE || g->type == Group::Type::LATHE || g->type == Group::Type::REVOLVE || g->type == Group::Type::LINKED || g->type == Group::Type::HELIX) { @@ -789,6 +826,15 @@ void TextWindow::EditControlDone(std::string s) { } break; + case Edit::HELIX_PITCH: // stored in valB + if(Expr *e = Expr::From(s, /*popUpError=*/true)) { + double ev = e->Eval(); + Group *g = SK.GetGroup(edit.group); + g->valB = ev * SS.MmPerUnit(); + SS.MarkGroupDirty(g->h); + } + break; + case Edit::GROUP_COLOR: { Vector rgb; if(sscanf(s.c_str(), "%lf, %lf, %lf", &rgb.x, &rgb.y, &rgb.z)==3) { diff --git a/src/ui.h b/src/ui.h index 026d57de..359ad401 100644 --- a/src/ui.h +++ b/src/ui.h @@ -342,7 +342,9 @@ public: VIEW_PROJ_RIGHT = 702, VIEW_PROJ_UP = 703, // For tangent arc - TANGENT_ARC_RADIUS = 800 + TANGENT_ARC_RADIUS = 800, + // For helix pitch + HELIX_PITCH = 802 }; struct { bool showAgain; @@ -473,6 +475,8 @@ public: static void ScreenChangeExprA(int link, uint32_t v); static void ScreenChangeGroupName(int link, uint32_t v); static void ScreenChangeGroupScale(int link, uint32_t v); + static void ScreenChangeHelixPitch(int link, uint32_t v); + static void ScreenChangePitchOption(int link, uint32_t v); static void ScreenChangeLightDirection(int link, uint32_t v); static void ScreenChangeLightIntensity(int link, uint32_t v); static void ScreenChangeLightAmbient(int link, uint32_t v); From 1b8e1dec652eef7916a94b6c9db404457dacb0db Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sat, 31 Jul 2021 13:22:40 -0400 Subject: [PATCH 58/89] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3df5b20b..2bba8def 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,11 +12,13 @@ Constraints: Sketching: +* Added an optional "pitch" parameter to helix extrusions (in the text window) * Allow use of Point & Normal to define "sketch-in-new-workplane". * Update "Property Browser" live while dragging the sketch. MISC: +* Added the ability to Link STL files. * When linking circuit boards (IDF .emn files) show keepout regions as construction entities. Performance: From 56719415dea4de7af750227653362f4c8cad78f8 Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Sun, 1 Aug 2021 11:34:55 +0100 Subject: [PATCH 59/89] Don't reset showFaces every time a group is activated Instead store the state separately for drawing and non-drawing group types, and set showFaces to one of those, whenever a group is activated. --- src/graphicswin.cpp | 10 ++++++++++ src/group.cpp | 7 +++---- src/ui.h | 2 ++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index 16846d25..84e83d6f 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -407,6 +407,8 @@ void GraphicsWindow::Init() { showEdges = true; showMesh = false; showOutlines = false; + showFacesDrawing = false; + showFacesNonDrawing = true; drawOccludedAs = DrawOccludedAs::INVISIBLE; showTextWindow = true; @@ -1366,6 +1368,14 @@ void GraphicsWindow::ToggleBool(bool *v) { SS.GenerateAll(SolveSpaceUI::Generate::UNTIL_ACTIVE); } + if(v == &showFaces) { + if(g->type == Group::Type::DRAWING_WORKPLANE || g->type == Group::Type::DRAWING_3D) { + showFacesDrawing = showFaces; + } else { + showFacesNonDrawing = showFaces; + } + } + Invalidate(/*clearPersistent=*/true); SS.ScheduleShowTW(); } diff --git a/src/group.cpp b/src/group.cpp index 438d5108..1fcbdeda 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -416,11 +416,10 @@ std::string Group::DescriptionString() { } void Group::Activate() { - if(type == Type::EXTRUDE || type == Type::LINKED || type == Type::LATHE || - type == Type::REVOLVE || type == Type::HELIX || type == Type::TRANSLATE || type == Type::ROTATE) { - SS.GW.showFaces = true; + if(type == Type::DRAWING_WORKPLANE || type == Type::DRAWING_3D) { + SS.GW.showFaces = SS.GW.showFacesDrawing; } else { - SS.GW.showFaces = false; + SS.GW.showFaces = SS.GW.showFacesNonDrawing; } SS.MarkGroupDirty(h); // for good measure; shouldn't be needed SS.ScheduleShowTW(); diff --git a/src/ui.h b/src/ui.h index 359ad401..ace4ddd8 100644 --- a/src/ui.h +++ b/src/ui.h @@ -802,6 +802,8 @@ public: bool showEdges; bool showOutlines; bool showFaces; + bool showFacesDrawing; + bool showFacesNonDrawing; bool showMesh; void ToggleBool(bool *v); From b65a0be3d68610f87b062787b6606ef4609641cd Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Sun, 11 Apr 2021 15:53:22 +0100 Subject: [PATCH 60/89] Fix/silence mac build warnings As per Xcode 12.4 you can at least do a warning-free incremental build with these changes. There are still plenty of warnings in a full build (mostly from thirdparty components) but with these changes you can at least develop on mac and see if/when you've added any new warnings when doing incremental builds. --- src/CMakeLists.txt | 1 + src/platform/guimac.mm | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ec39939c..7bc5a7cd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -117,6 +117,7 @@ if(WIN32) ${SPACEWARE_LIBRARIES}) elseif(APPLE) add_compile_options( + -DGL_SILENCE_DEPRECATION -fobjc-arc) list(APPEND platform_SOURCES diff --git a/src/platform/guimac.mm b/src/platform/guimac.mm index b2b07a8b..f9a95fcb 100644 --- a/src/platform/guimac.mm +++ b/src/platform/guimac.mm @@ -286,7 +286,8 @@ public: } void PopUp() override { - [NSMenu popUpContextMenu:nsMenu withEvent:[NSApp currentEvent] forView:nil]; + NSEvent* event = [NSApp currentEvent]; + [NSMenu popUpContextMenu:nsMenu withEvent:event forView:event.window.contentView]; } void Clear() override { From c19bd8cc99dbecfaa9fec5dfe2c455b8856dbddb Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Sat, 14 Aug 2021 11:54:12 +0100 Subject: [PATCH 61/89] Remove unused variable --- src/drawconstraint.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/drawconstraint.cpp b/src/drawconstraint.cpp index 4952d362..249a5429 100644 --- a/src/drawconstraint.cpp +++ b/src/drawconstraint.cpp @@ -1006,7 +1006,6 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); Quaternion q = SK.GetEntity(circle->normal)->NormalGetNum(); Vector n = q.RotationN().WithMagnitude(1); - double r = circle->CircleGetRadiusNum(); Vector ref2; DoEqualRadiusTicks(canvas, hcs, entityA, &ref2); From 645febfcd6f02bde834147c9af7eeea8577a1bc5 Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Sun, 15 Aug 2021 11:22:56 +0100 Subject: [PATCH 62/89] Set OSX minimum supported version --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index bdd36705..38e1bcf7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,11 @@ if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") endif() +if (APPLE) + # Docs say this must be set before the first project() call + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.12" CACHE STRING "macOS minimum supported version") +endif() + # project # NOTE TO PACKAGERS: The embedded git commit hash is critical for rapid bug triage when the builds From 2fb6119de8814179feaeae44194c2c8f8d3f65a7 Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Thu, 12 Aug 2021 12:35:44 +0100 Subject: [PATCH 63/89] Add option for displaying dimensions in feet and inches --- src/graphicswin.cpp | 11 +++++++++++ src/mouse.cpp | 2 +- src/solvespace.cpp | 42 +++++++++++++++++++++++++++++++++++------- src/solvespace.h | 5 +++-- src/ui.h | 2 ++ 5 files changed, 52 insertions(+), 10 deletions(-) diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index 84e83d6f..bae48438 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -98,6 +98,7 @@ const MenuEntry Menu[] = { { 2, N_("Dimensions in &Millimeters"), Command::UNITS_MM, 0, KR, mView }, { 2, N_("Dimensions in M&eters"), Command::UNITS_METERS, 0, KR, mView }, { 2, N_("Dimensions in &Inches"), Command::UNITS_INCHES, 0, KR, mView }, +{ 2, N_("Dimensions in &Feet and Inches"), Command::UNITS_FEET_INCHES, 0, KR, mView }, { 1, NULL, Command::NONE, 0, KN, NULL }, { 1, N_("Show &Toolbar"), Command::SHOW_TOOLBAR, 0, KC, mView }, { 1, N_("Show Property Bro&wser"), Command::SHOW_TEXT_WND, '\t', KC, mView }, @@ -329,6 +330,8 @@ void GraphicsWindow::PopulateMainMenu() { unitsMetersMenuItem = menuItem; } else if(Menu[i].cmd == Command::UNITS_INCHES) { unitsInchesMenuItem = menuItem; + } else if(Menu[i].cmd == Command::UNITS_FEET_INCHES) { + unitsFeetInchesMenuItem = menuItem; } else if(Menu[i].cmd == Command::SEL_WORKPLANE) { inWorkplaneMenuItem = menuItem; } else if(Menu[i].cmd == Command::FREE_IN_3D) { @@ -843,6 +846,12 @@ void GraphicsWindow::MenuView(Command id) { SS.GW.EnsureValidActives(); break; + case Command::UNITS_FEET_INCHES: + SS.viewUnits = Unit::FEET_INCHES; + SS.ScheduleShowTW(); + SS.GW.EnsureValidActives(); + break; + case Command::UNITS_MM: SS.viewUnits = Unit::MM; SS.ScheduleShowTW(); @@ -925,6 +934,7 @@ void GraphicsWindow::EnsureValidActives() { case Unit::MM: case Unit::METERS: case Unit::INCHES: + case Unit::FEET_INCHES: break; default: SS.viewUnits = Unit::MM; @@ -933,6 +943,7 @@ void GraphicsWindow::EnsureValidActives() { unitsMmMenuItem->SetActive(SS.viewUnits == Unit::MM); unitsMetersMenuItem->SetActive(SS.viewUnits == Unit::METERS); unitsInchesMenuItem->SetActive(SS.viewUnits == Unit::INCHES); + unitsFeetInchesMenuItem->SetActive(SS.viewUnits == Unit::FEET_INCHES); if(SS.TW.window) SS.TW.window->SetVisible(SS.GW.showTextWindow); showTextWndMenuItem->SetActive(SS.GW.showTextWindow); diff --git a/src/mouse.cpp b/src/mouse.cpp index a88d34f8..373e6ea2 100644 --- a/src/mouse.cpp +++ b/src/mouse.cpp @@ -1378,7 +1378,7 @@ void GraphicsWindow::EditConstraint(hConstraint constraint) { } else if(c->type == Constraint::Type::ANGLE) { editValue = SS.DegreeToString(value); } else { - editValue = SS.MmToString(value); + editValue = SS.MmToString(value, true); value /= SS.MmPerUnit(); } // If that's not enough to represent it exactly, show the value with as many diff --git a/src/solvespace.cpp b/src/solvespace.cpp index ccea271a..7d63403c 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -315,6 +315,7 @@ void SolveSpaceUI::ScheduleAutosave() { double SolveSpaceUI::MmPerUnit() { switch(viewUnits) { case Unit::INCHES: return 25.4; + case Unit::FEET_INCHES: return 25.4; // The 'unit' is still inches case Unit::METERS: return 1000.0; case Unit::MM: return 1.0; } @@ -323,21 +324,41 @@ double SolveSpaceUI::MmPerUnit() { const char *SolveSpaceUI::UnitName() { switch(viewUnits) { case Unit::INCHES: return "in"; + case Unit::FEET_INCHES: return "in"; case Unit::METERS: return "m"; case Unit::MM: return "mm"; } return ""; } -std::string SolveSpaceUI::MmToString(double v) { +std::string SolveSpaceUI::MmToString(double v, bool editable) { v /= MmPerUnit(); + int feet = 0; + // The syntax 2' 6" for feet and inches is not something we can (currently) + // parse back from a string so if editable is true, we treat FEET_INCHES the + // same as INCHES and just return the unadorned decimal number of inches. + if(viewUnits == Unit::FEET_INCHES && !editable) { + // v is in inches at this point + feet = (int)(v / 12.0); + v = v - (feet * 12.0); + // v is now the remainder in inches + } int digits = UnitDigitsAfterDecimal(); double minimum = 0.5 * pow(10,-digits); - while ((v < minimum) && (v > LENGTH_EPS)) { + while ((feet == 0) && (v < minimum) && (v > LENGTH_EPS)) { digits++; minimum *= 0.1; } - return ssprintf("%.*f", digits, v); + + if(viewUnits == Unit::FEET_INCHES && !editable) { + if(feet != 0) { + return ssprintf("%d' %.*f\"", feet, digits, v); + } else { + return ssprintf("%.*f\"", digits, v); + } + } else { + return ssprintf("%.*f", digits, v); + } } static const char *DimToString(int dim) { switch(dim) { @@ -394,17 +415,22 @@ std::string SolveSpaceUI::MmToStringSI(double v, int dim) { dim = 1; } - v /= pow((viewUnits == Unit::INCHES) ? 25.4 : 1000, dim); + bool inches = (viewUnits == Unit::INCHES) || (viewUnits == Unit::FEET_INCHES); + v /= pow(inches ? 25.4 : 1000, dim); int vdeg = (int)(log10(fabs(v))); std::string unit; if(fabs(v) > 0.0) { int sdeg = 0; std::tie(sdeg, unit) = - (viewUnits == Unit::INCHES) + inches ? SelectSIPrefixInch(vdeg/dim) : SelectSIPrefixMm(vdeg, dim); v /= pow(10.0, sdeg * dim); } + if(viewUnits == Unit::FEET_INCHES && fabs(v) > pow(12.0, dim)) { + unit = "ft"; + v /= pow(12.0, dim); + } int pdeg = (int)ceil(log10(fabs(v) + 1e-10)); return ssprintf("%.*g%s%s%s", pdeg + UnitDigitsAfterDecimal(), v, compact ? "" : " ", unit.c_str(), DimToString(dim)); @@ -434,10 +460,11 @@ int SolveSpaceUI::GetMaxSegments() { return maxSegments; } int SolveSpaceUI::UnitDigitsAfterDecimal() { - return (viewUnits == Unit::INCHES) ? afterDecimalInch : afterDecimalMm; + return (viewUnits == Unit::INCHES || viewUnits == Unit::FEET_INCHES) ? + afterDecimalInch : afterDecimalMm; } void SolveSpaceUI::SetUnitDigitsAfterDecimal(int v) { - if(viewUnits == Unit::INCHES) { + if(viewUnits == Unit::INCHES || viewUnits == Unit::FEET_INCHES) { afterDecimalInch = v; } else { afterDecimalMm = v; @@ -1036,6 +1063,7 @@ void SolveSpaceUI::Clear() { GW.unitsMmMenuItem = NULL; GW.unitsMetersMenuItem = NULL; GW.unitsInchesMenuItem = NULL; + GW.unitsFeetInchesMenuItem = NULL; GW.inWorkplaneMenuItem = NULL; GW.in3dMenuItem = NULL; GW.undoMenuItem = NULL; diff --git a/src/solvespace.h b/src/solvespace.h index d4caab2b..21297712 100644 --- a/src/solvespace.h +++ b/src/solvespace.h @@ -138,7 +138,8 @@ enum class Command : uint32_t; enum class Unit : uint32_t { MM = 0, INCHES, - METERS + METERS, + FEET_INCHES }; template @@ -609,7 +610,7 @@ public: bool useSIPrefixes; int autosaveInterval; // in minutes - std::string MmToString(double v); + std::string MmToString(double v, bool editable=false); std::string MmToStringSI(double v, int dim = 0); std::string DegreeToString(double v); double ExprToMm(Expr *e); diff --git a/src/ui.h b/src/ui.h index ace4ddd8..90cef9f1 100644 --- a/src/ui.h +++ b/src/ui.h @@ -89,6 +89,7 @@ enum class Command : uint32_t { SHOW_TOOLBAR, SHOW_TEXT_WND, UNITS_INCHES, + UNITS_FEET_INCHES, UNITS_MM, UNITS_METERS, FULL_SCREEN, @@ -546,6 +547,7 @@ public: Platform::MenuItemRef unitsMmMenuItem; Platform::MenuItemRef unitsMetersMenuItem; Platform::MenuItemRef unitsInchesMenuItem; + Platform::MenuItemRef unitsFeetInchesMenuItem; Platform::MenuItemRef inWorkplaneMenuItem; Platform::MenuItemRef in3dMenuItem; From 41e3668f891093a859af92e0634d5e320a550725 Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Fri, 13 Aug 2021 13:09:13 +0100 Subject: [PATCH 64/89] Make feet and inches show fractions of an inch, rounded to nearest 1/64 Taking care to round appropriately so you don't end up with things like 35.999 coming out as 2' 12" and similar. --- src/solvespace.cpp | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/solvespace.cpp b/src/solvespace.cpp index 7d63403c..b63c9b52 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -333,32 +333,45 @@ const char *SolveSpaceUI::UnitName() { std::string SolveSpaceUI::MmToString(double v, bool editable) { v /= MmPerUnit(); - int feet = 0; // The syntax 2' 6" for feet and inches is not something we can (currently) // parse back from a string so if editable is true, we treat FEET_INCHES the // same as INCHES and just return the unadorned decimal number of inches. if(viewUnits == Unit::FEET_INCHES && !editable) { - // v is in inches at this point - feet = (int)(v / 12.0); - v = v - (feet * 12.0); - // v is now the remainder in inches + // Now convert v from inches to 64'ths of an inch, to make rounding easier. + v = floor((v + (1.0 / 128.0)) * 64.0); + int feet = (int)(v / (12.0 * 64.0)); + v = v - (feet * 12.0 * 64.0); + // v is now the feet-less remainder in 1/64 inches + int inches = (int)(v / 64.0); + int numerator = (int)(v - ((double)inches * 64.0)); + int denominator = 64; + // Divide down to smallest denominator where the numerator is still a whole number + while ((numerator != 0) && ((numerator & 1) == 0)) { + numerator /= 2; + denominator /= 2; + } + std::ostringstream str; + if(feet != 0) { + str << feet << "' "; + } + // For something like 0.5, show 1/2" rather than 0 1/2" + if(!(feet == 0 && inches == 0 && numerator != 0)) { + str << inches; + } + if(numerator != 0) { + str << " " << numerator << "/" << denominator; + } + str << "\""; + return str.str(); } + int digits = UnitDigitsAfterDecimal(); double minimum = 0.5 * pow(10,-digits); - while ((feet == 0) && (v < minimum) && (v > LENGTH_EPS)) { + while ((v < minimum) && (v > LENGTH_EPS)) { digits++; minimum *= 0.1; } - - if(viewUnits == Unit::FEET_INCHES && !editable) { - if(feet != 0) { - return ssprintf("%d' %.*f\"", feet, digits, v); - } else { - return ssprintf("%.*f\"", digits, v); - } - } else { - return ssprintf("%.*f", digits, v); - } + return ssprintf("%.*f", digits, v); } static const char *DimToString(int dim) { switch(dim) { From 959cf5ba7559c001f066a1417212577bb0a62c6a Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Fri, 13 Aug 2021 13:10:21 +0100 Subject: [PATCH 65/89] Fix MmToString calls that should have editable=true set --- src/confscreen.cpp | 12 ++++++------ src/style.cpp | 2 +- src/textscreens.cpp | 4 ++-- src/view.cpp | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/confscreen.cpp b/src/confscreen.cpp index 4a4b7b23..9c4610b3 100644 --- a/src/confscreen.cpp +++ b/src/confscreen.cpp @@ -64,7 +64,7 @@ void TextWindow::ScreenChangeCameraTangent(int link, uint32_t v) { } void TextWindow::ScreenChangeGridSpacing(int link, uint32_t v) { - SS.TW.ShowEditControl(3, SS.MmToString(SS.gridSpacing)); + SS.TW.ShowEditControl(3, SS.MmToString(SS.gridSpacing, true)); SS.TW.edit.meaning = Edit::GRID_SPACING; } @@ -89,7 +89,7 @@ void TextWindow::ScreenChangeExportScale(int link, uint32_t v) { } void TextWindow::ScreenChangeExportOffset(int link, uint32_t v) { - SS.TW.ShowEditControl(3, SS.MmToString(SS.exportOffset)); + SS.TW.ShowEditControl(3, SS.MmToString(SS.exportOffset, true)); SS.TW.edit.meaning = Edit::EXPORT_OFFSET; } @@ -171,7 +171,7 @@ void TextWindow::ScreenChangeCanvasSize(int link, uint32_t v) { } int col = 13; if(v < 10) col = 11; - SS.TW.ShowEditControl(col, SS.MmToString(d)); + SS.TW.ShowEditControl(col, SS.MmToString(d, true)); SS.TW.edit.meaning = Edit::CANVAS_SIZE; SS.TW.edit.i = v; } @@ -181,7 +181,7 @@ void TextWindow::ScreenChangeGCodeParameter(int link, uint32_t v) { switch(link) { case 'd': SS.TW.edit.meaning = Edit::G_CODE_DEPTH; - buf += SS.MmToString(SS.gCode.depth); + buf += SS.MmToString(SS.gCode.depth, true); break; case 's': @@ -191,12 +191,12 @@ void TextWindow::ScreenChangeGCodeParameter(int link, uint32_t v) { case 'F': SS.TW.edit.meaning = Edit::G_CODE_FEED; - buf += SS.MmToString(SS.gCode.feed); + buf += SS.MmToString(SS.gCode.feed, true); break; case 'P': SS.TW.edit.meaning = Edit::G_CODE_PLUNGE_FEED; - buf += SS.MmToString(SS.gCode.plungeFeed); + buf += SS.MmToString(SS.gCode.plungeFeed, true); break; } SS.TW.ShowEditControl(14, buf); diff --git a/src/style.cpp b/src/style.cpp index 6ca61e56..4349eb36 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -563,7 +563,7 @@ void TextWindow::ScreenChangeStyleMetric(int link, uint32_t v) { if(units == Style::UnitsAs::PIXELS) { edit_value = ssprintf("%.2f", val); } else { - edit_value = SS.MmToString(val); + edit_value = SS.MmToString(val, true); } SS.TW.ShowEditControl(col, edit_value); SS.TW.edit.style = hs; diff --git a/src/textscreens.cpp b/src/textscreens.cpp index ee6d90ea..3474b519 100644 --- a/src/textscreens.cpp +++ b/src/textscreens.cpp @@ -640,7 +640,7 @@ void TextWindow::ScreenStepDimFinish(int link, uint32_t v) { SS.TW.edit.meaning = Edit::STEP_DIM_FINISH; std::string edit_value; if(SS.TW.stepDim.isDistance) { - edit_value = SS.MmToString(SS.TW.stepDim.finish); + edit_value = SS.MmToString(SS.TW.stepDim.finish, true); } else { edit_value = ssprintf("%.3f", SS.TW.stepDim.finish); } @@ -727,7 +727,7 @@ void TextWindow::ScreenChangeTangentArc(int link, uint32_t v) { switch(link) { case 'r': { SS.TW.edit.meaning = Edit::TANGENT_ARC_RADIUS; - SS.TW.ShowEditControl(3, SS.MmToString(SS.tangentArcRadius)); + SS.TW.ShowEditControl(3, SS.MmToString(SS.tangentArcRadius, true)); break; } diff --git a/src/view.cpp b/src/view.cpp index 14d09ba3..9c85ce6b 100644 --- a/src/view.cpp +++ b/src/view.cpp @@ -51,9 +51,9 @@ void TextWindow::ScreenChangeViewToFullScale(int link, uint32_t v) { void TextWindow::ScreenChangeViewOrigin(int link, uint32_t v) { std::string edit_value = ssprintf("%s, %s, %s", - SS.MmToString(-SS.GW.offset.x).c_str(), - SS.MmToString(-SS.GW.offset.y).c_str(), - SS.MmToString(-SS.GW.offset.z).c_str()); + SS.MmToString(-SS.GW.offset.x, true).c_str(), + SS.MmToString(-SS.GW.offset.y, true).c_str(), + SS.MmToString(-SS.GW.offset.z, true).c_str()); SS.TW.edit.meaning = Edit::VIEW_ORIGIN; SS.TW.ShowEditControl(3, edit_value); From e86eb659854f7ccbd0154f11d4c0412153e300de Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Fri, 13 Aug 2021 14:14:55 +0100 Subject: [PATCH 66/89] Update feet and inches format to match architectural convention --- src/solvespace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/solvespace.cpp b/src/solvespace.cpp index b63c9b52..89b4a00d 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -352,7 +352,7 @@ std::string SolveSpaceUI::MmToString(double v, bool editable) { } std::ostringstream str; if(feet != 0) { - str << feet << "' "; + str << feet << "'-"; } // For something like 0.5, show 1/2" rather than 0 1/2" if(!(feet == 0 && inches == 0 && numerator != 0)) { From 3e595002fe701fe024581d43b299e4f5696277ce Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sun, 15 Aug 2021 18:22:12 -0400 Subject: [PATCH 67/89] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bba8def..b6f1f57f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ Constraints: Sketching: +* Added Feet-Inches as a unit of measure. Inputs are still in inches. + But the display shows feet, inches, and fraction of an inch. * Added an optional "pitch" parameter to helix extrusions (in the text window) * Allow use of Point & Normal to define "sketch-in-new-workplane". * Update "Property Browser" live while dragging the sketch. From 5edb2eebf69050c9ae10ca424c55c65bfb106aa0 Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Sun, 4 Apr 2021 14:14:37 +0100 Subject: [PATCH 68/89] Add "Show Exploded View" menu option Where each entity in the active workplane sketch is projected a different amount normal to the workplane, to allow inspection and easier selection of entities that entirely overlap each other and are thus otherwise difficult to see or select. The distance between the exploded "layers" can be controlled in the configuration page. Negative distances mean the layers are projected in the opposite direction, relative to the workplane normal. --- src/confscreen.cpp | 14 +++++ src/drawconstraint.cpp | 120 ++++++++++++++++++++++++++++++++--------- src/drawentity.cpp | 71 +++++++++++++++++++----- src/generate.cpp | 2 + src/graphicswin.cpp | 10 ++++ src/group.cpp | 3 ++ src/sketch.h | 10 +++- src/solvespace.cpp | 2 + src/solvespace.h | 2 + src/ui.h | 4 ++ 10 files changed, 200 insertions(+), 38 deletions(-) diff --git a/src/confscreen.cpp b/src/confscreen.cpp index 9c4610b3..29a43591 100644 --- a/src/confscreen.cpp +++ b/src/confscreen.cpp @@ -68,6 +68,11 @@ void TextWindow::ScreenChangeGridSpacing(int link, uint32_t v) { SS.TW.edit.meaning = Edit::GRID_SPACING; } +void TextWindow::ScreenChangeExplodeDistance(int link, uint32_t v) { + SS.TW.ShowEditControl(3, SS.MmToString(SS.explodeDistance, true)); + SS.TW.edit.meaning = Edit::EXPLODE_DISTANCE; +} + void TextWindow::ScreenChangeDigitsAfterDecimal(int link, uint32_t v) { SS.TW.ShowEditControl(14, ssprintf("%d", SS.UnitDigitsAfterDecimal())); SS.TW.edit.meaning = Edit::DIGITS_AFTER_DECIMAL; @@ -269,6 +274,10 @@ void TextWindow::ShowConfiguration() { Printf(false, "%Ba %s %Fl%Ll%f%D[change]%E", SS.MmToString(SS.gridSpacing).c_str(), &ScreenChangeGridSpacing, 0); + Printf(false, "%Ft explode distance%E"); + Printf(false, "%Ba %s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.explodeDistance).c_str(), + &ScreenChangeExplodeDistance, 0); Printf(false, ""); Printf(false, "%Ft digits after decimal point to show%E"); @@ -459,6 +468,11 @@ bool TextWindow::EditControlDoneForConfiguration(const std::string &s) { SS.GW.Invalidate(); break; } + case Edit::EXPLODE_DISTANCE: { + SS.explodeDistance = min(1e4, max(-1e4, SS.StringToMm(s))); + SS.MarkGroupDirty(SS.GW.activeGroup, true); + break; + } case Edit::DIGITS_AFTER_DECIMAL: { int v = atoi(s.c_str()); if(v < 0 || v > 8) { diff --git a/src/drawconstraint.cpp b/src/drawconstraint.cpp index 249a5429..02aababb 100644 --- a/src/drawconstraint.cpp +++ b/src/drawconstraint.cpp @@ -267,7 +267,7 @@ void Constraint::DoEqualRadiusTicks(Canvas *canvas, Canvas::hStroke hcs, const Camera &camera = canvas->GetCamera(); Entity *circ = SK.GetEntity(he); - Vector center = SK.GetEntity(circ->point[0])->PointGetNum(); + Vector center = SK.GetEntity(circ->point[0])->PointGetDrawNum(); double r = circ->CircleGetRadiusNum(); Quaternion q = circ->Normal()->NormalGetNum(); Vector u = q.RotationU(), v = q.RotationV(); @@ -291,7 +291,8 @@ void Constraint::DoEqualRadiusTicks(Canvas *canvas, Canvas::hStroke hcs, void Constraint::DoArcForAngle(Canvas *canvas, Canvas::hStroke hcs, Vector a0, Vector da, Vector b0, Vector db, - Vector offset, Vector *ref, bool trim) + Vector offset, Vector *ref, bool trim, + Vector explodeOffset) { const Camera &camera = canvas->GetCamera(); double pixels = 1.0 / camera.scale; @@ -305,6 +306,9 @@ void Constraint::DoArcForAngle(Canvas *canvas, Canvas::hStroke hcs, db = db.ProjectVectorInto(workplane); } + a0 = a0.Plus(explodeOffset); + b0 = b0.Plus(explodeOffset); + Vector a1 = a0.Plus(da); Vector b1 = b0.Plus(db); @@ -534,6 +538,15 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, DoProjectedPoint(canvas, hcs, &bp); } + if(ShouldDrawExploded()) { + // Offset A and B by the same offset so the constraint is drawn + // in the plane of one of the exploded points (rather than at an + // angle) + Vector offset = SK.GetEntity(ptA)->ExplodeOffset(); + ap = ap.Plus(offset); + bp = bp.Plus(offset); + } + Vector ref = ((ap.Plus(bp)).ScaledBy(0.5)).Plus(disp.offset); if(refs) refs->push_back(ref); @@ -548,6 +561,19 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, dp = (bp.Minus(ap)), pp = SK.GetEntity(entityA)->VectorGetNum(); + if(ShouldDrawExploded()) { + // explode for whichever point is in the workplane (or the first if both are) + Entity *pt = SK.GetEntity(ptA); + if(pt->group != group) { + pt = SK.GetEntity(ptB); + } + if(pt->group == group) { + Vector offset = pt->ExplodeOffset(); + ap = ap.Plus(offset); + bp = bp.Plus(offset); + } + } + Vector ref = ((ap.Plus(bp)).ScaledBy(0.5)).Plus(disp.offset); if(refs) refs->push_back(ref); @@ -564,7 +590,7 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, case Type::PT_FACE_DISTANCE: case Type::PT_PLANE_DISTANCE: { - Vector pt = SK.GetEntity(ptA)->PointGetNum(); + Vector pt = SK.GetEntity(ptA)->PointGetDrawNum(); Entity *enta = SK.GetEntity(entityA); Vector n, p; if(type == Type::PT_PLANE_DISTANCE) { @@ -590,7 +616,8 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, } case Type::PT_LINE_DISTANCE: { - Vector pt = SK.GetEntity(ptA)->PointGetNum(); + Entity *ptEntity = SK.GetEntity(ptA); + Vector pt = ptEntity->PointGetNum(); Entity *line = SK.GetEntity(entityA); Vector lA = SK.GetEntity(line->point[0])->PointGetNum(); Vector lB = SK.GetEntity(line->point[1])->PointGetNum(); @@ -602,6 +629,19 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, DoProjectedPoint(canvas, hcs, &pt); } + // Only explode if the point and line are in the same group (and that group is a sketch + // with explode enabled) otherwise it's too visually confusing to figure out what the + // correct projections should be. + bool shouldExplode = ShouldDrawExploded() + && ptEntity->group == group + && line->group == group; + if(shouldExplode) { + Vector explodeOffset = ptEntity->ExplodeOffset(); + pt = pt.Plus(explodeOffset); + lA = lA.Plus(explodeOffset); + lB = lB.Plus(explodeOffset); + } + // Find the closest point on the line Vector closest = pt.ClosestPointOnLine(lA, dl); @@ -655,7 +695,7 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, case Type::DIAMETER: { Entity *circle = SK.GetEntity(entityA); - Vector center = SK.GetEntity(circle->point[0])->PointGetNum(); + Vector center = SK.GetEntity(circle->point[0])->PointGetDrawNum(); Quaternion q = SK.GetEntity(circle->normal)->NormalGetNum(); Vector n = q.RotationN().WithMagnitude(1); double r = circle->CircleGetRadiusNum(); @@ -697,7 +737,7 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, Vector r = camera.projRight.ScaledBy((a+1)/camera.scale); Vector d = camera.projUp.ScaledBy((2-a)/camera.scale); for(int i = 0; i < 2; i++) { - Vector p = SK.GetEntity(i == 0 ? ptA : ptB)-> PointGetNum(); + Vector p = SK.GetEntity(i == 0 ? ptA : ptB)->PointGetDrawNum(); if(refs) refs->push_back(p); canvas->DrawQuad(p.Plus (r).Plus (d), p.Plus (r).Minus(d), @@ -715,7 +755,7 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, case Type::PT_ON_FACE: case Type::PT_IN_PLANE: { double s = 8/camera.scale; - Vector p = SK.GetEntity(ptA)->PointGetNum(); + Vector p = SK.GetEntity(ptA)->PointGetDrawNum(); if(refs) refs->push_back(p); Vector r, d; if(type == Type::PT_ON_FACE) { @@ -740,7 +780,7 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, } case Type::WHERE_DRAGGED: { - Vector p = SK.GetEntity(ptA)->PointGetNum(); + Vector p = SK.GetEntity(ptA)->PointGetDrawNum(); if(refs) refs->push_back(p); Vector u = p.Plus(gu.WithMagnitude(8/camera.scale)).Plus( gr.WithMagnitude(8/camera.scale)), @@ -797,10 +837,10 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, } DoArcForAngle(canvas, hcs, a0, da, b0, db, - da.WithMagnitude(40/camera.scale), &ref, /*trim=*/false); + da.WithMagnitude(40/camera.scale), &ref, /*trim=*/false, a->ExplodeOffset()); if(refs) refs->push_back(ref); DoArcForAngle(canvas, hcs, c0, dc, d0, dd, - dc.WithMagnitude(40/camera.scale), &ref, /*trim=*/false); + dc.WithMagnitude(40/camera.scale), &ref, /*trim=*/false, c->ExplodeOffset()); if(refs) refs->push_back(ref); return; @@ -820,7 +860,7 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, } Vector ref; - DoArcForAngle(canvas, hcs, a0, da, b0, db, disp.offset, &ref, /*trim=*/true); + DoArcForAngle(canvas, hcs, a0, da, b0, db, disp.offset, &ref, /*trim=*/true, a->ExplodeOffset()); DoLabel(canvas, hcs, ref, labelPos, gr, gu); if(refs) refs->push_back(ref); return; @@ -855,7 +895,7 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, if(u.Dot(ru) < 0) u = u.ScaledBy(-1); } - Vector p = e->VectorGetRefPoint(); + Vector p = e->VectorGetRefPoint().Plus(e->ExplodeOffset()); Vector s = p.Plus(u).Plus(v); DoLine(canvas, hcs, s, s.Plus(v)); Vector m = s.Plus(v.ScaledBy(0.5)); @@ -873,9 +913,9 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, if(type == Type::ARC_LINE_TANGENT) { Entity *arc = SK.GetEntity(entityA); Entity *norm = SK.GetEntity(arc->normal); - Vector c = SK.GetEntity(arc->point[0])->PointGetNum(); + Vector c = SK.GetEntity(arc->point[0])->PointGetDrawNum(); Vector p = - SK.GetEntity(arc->point[other ? 2 : 1])->PointGetNum(); + SK.GetEntity(arc->point[other ? 2 : 1])->PointGetDrawNum(); Vector r = p.Minus(c); textAt = p.Plus(r.WithMagnitude(14/camera.scale)); u = norm->NormalU(); @@ -896,6 +936,7 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, Entity *cubic = SK.GetEntity(entityA); Vector p = other ? cubic->CubicGetFinishNum() : cubic->CubicGetStartNum(); + p = p.Plus(cubic->ExplodeOffset()); Vector dir = SK.GetEntity(entityB)->VectorGetNum(); Vector out = n.Cross(dir); textAt = p.Plus(out.WithMagnitude(14/camera.scale)); @@ -905,12 +946,12 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, u = wn->NormalU(); v = wn->NormalV(); n = wn->NormalN(); - EntityBase *eA = SK.GetEntity(entityA); + Entity *eA = SK.GetEntity(entityA); // Big pain; we have to get a vector tangent to the curve // at the shared point, which could be from either a cubic // or an arc. if(other) { - textAt = eA->EndpointFinish(); + textAt = eA->EndpointFinish().Plus(eA->ExplodeOffset()); if(eA->type == Entity::Type::CUBIC) { dir = eA->CubicGetFinishTangentNum(); } else { @@ -919,7 +960,7 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, dir = n.Cross(dir); } } else { - textAt = eA->EndpointStart(); + textAt = eA->EndpointStart().Plus(eA->ExplodeOffset()); if(eA->type == Entity::Type::CUBIC) { dir = eA->CubicGetStartTangentNum(); } else { @@ -947,6 +988,10 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, Vector u = (gn.Cross(n)).WithMagnitude(4/camera.scale); Vector p = e->VectorGetRefPoint(); + if(ShouldDrawExploded()) { + p = p.Plus(e->ExplodeOffset()); + } + DoLine(canvas, hcs, p.Plus(u), p.Plus(u).Plus(n)); DoLine(canvas, hcs, p.Minus(u), p.Minus(u).Plus(n)); if(refs) refs->push_back(p.Plus(n.ScaledBy(0.5))); @@ -967,8 +1012,8 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, Entity *line = SK.GetEntity(entityA); Vector ref; DoEqualLenTicks(canvas, hcs, - SK.GetEntity(line->point[0])->PointGetNum(), - SK.GetEntity(line->point[1])->PointGetNum(), + SK.GetEntity(line->point[0])->PointGetDrawNum(), + SK.GetEntity(line->point[1])->PointGetDrawNum(), gn, &ref); if(refs) refs->push_back(ref); DoEqualRadiusTicks(canvas, hcs, entityB, &ref); @@ -990,6 +1035,12 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, DoProjectedPoint(canvas, hcs, &b); } + if(ShouldDrawExploded()) { + Vector offset = e->ExplodeOffset(); + a = a.Plus(offset); + b = b.Plus(offset); + } + Vector ref; DoEqualLenTicks(canvas, hcs, a, b, gn, &ref); if(refs) refs->push_back(ref); @@ -1044,6 +1095,11 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, DoProjectedPoint(canvas, hcs, &a); DoProjectedPoint(canvas, hcs, &b); } + if(ShouldDrawExploded()) { + Vector offset = forLen->ExplodeOffset(); + a = a.Plus(offset); + b = b.Plus(offset); + } Vector refa; DoEqualLenTicks(canvas, hcs, a, b, gn, &refa); if(refs) refs->push_back(refa); @@ -1059,6 +1115,11 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, } Vector closest = pt.ClosestPointOnLine(la, lb.Minus(la)); + if(ShouldDrawExploded()) { + Vector offset = SK.GetEntity(ptA)->ExplodeOffset(); + pt = pt.Plus(offset); + closest = closest.Plus(offset); + } DoLine(canvas, hcs, pt, closest); Vector refb; DoEqualLenTicks(canvas, hcs, pt, closest, gn, &refb); @@ -1081,6 +1142,11 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, } Vector closest = pt.ClosestPointOnLine(la, lb.Minus(la)); + if(ShouldDrawExploded()) { + Vector offset = pte->ExplodeOffset(); + pt = pt.Plus(offset); + closest = closest.Plus(offset); + } DoLine(canvas, hcs, pt, closest); Vector ref; @@ -1110,8 +1176,8 @@ void Constraint::DoLayout(DrawAs how, Canvas *canvas, goto s; } s: - Vector a = SK.GetEntity(ptA)->PointGetNum(); - Vector b = SK.GetEntity(ptB)->PointGetNum(); + Vector a = SK.GetEntity(ptA)->PointGetDrawNum(); + Vector b = SK.GetEntity(ptB)->PointGetDrawNum(); for(int i = 0; i < 2; i++) { Vector tail = (i == 0) ? a : b; @@ -1148,8 +1214,8 @@ s: } // For "at midpoint", this branch is always taken. Entity *e = SK.GetEntity(entityA); - Vector a = SK.GetEntity(e->point[0])->PointGetNum(); - Vector b = SK.GetEntity(e->point[1])->PointGetNum(); + Vector a = SK.GetEntity(e->point[0])->PointGetDrawNum(); + Vector b = SK.GetEntity(e->point[1])->PointGetDrawNum(); Vector m = (a.ScaledBy(0.5)).Plus(b.ScaledBy(0.5)); Vector offset = (a.Minus(b)).Cross(n); offset = offset.WithMagnitude(textHeight); @@ -1173,8 +1239,8 @@ s: r.WithMagnitude(1), u.WithMagnitude(1), hcs); if(refs) refs->push_back(o); } else { - Vector a = SK.GetEntity(ptA)->PointGetNum(); - Vector b = SK.GetEntity(ptB)->PointGetNum(); + Vector a = SK.GetEntity(ptA)->PointGetDrawNum(); + Vector b = SK.GetEntity(ptB)->PointGetDrawNum(); Entity *w = SK.GetEntity(workplane); Vector cu = w->Normal()->NormalU(); @@ -1291,3 +1357,7 @@ bool Constraint::HasLabel() const { return false; } } + +bool Constraint::ShouldDrawExploded() const { + return SK.GetGroup(group)->ShouldDrawExploded(); +} diff --git a/src/drawentity.cpp b/src/drawentity.cpp index 5e1122ad..d0092544 100644 --- a/src/drawentity.cpp +++ b/src/drawentity.cpp @@ -88,7 +88,7 @@ void Entity::GetReferencePoints(std::vector *refs) { case Type::POINT_N_ROT_AXIS_TRANS: case Type::POINT_IN_3D: case Type::POINT_IN_2D: - refs->push_back(PointGetNum()); + refs->push_back(PointGetDrawNum()); break; case Type::NORMAL_N_COPY: @@ -103,12 +103,12 @@ void Entity::GetReferencePoints(std::vector *refs) { case Type::CUBIC_PERIODIC: case Type::TTF_TEXT: case Type::IMAGE: - refs->push_back(SK.GetEntity(point[0])->PointGetNum()); + refs->push_back(SK.GetEntity(point[0])->PointGetDrawNum()); break; case Type::LINE_SEGMENT: { - Vector a = SK.GetEntity(point[0])->PointGetNum(), - b = SK.GetEntity(point[1])->PointGetNum(); + Vector a = SK.GetEntity(point[0])->PointGetDrawNum(), + b = SK.GetEntity(point[1])->PointGetDrawNum(); refs->push_back(b.Plus(a.Minus(b).ScaledBy(0.5))); break; } @@ -466,6 +466,26 @@ void Entity::GenerateBezierCurves(SBezierList *sbl) const { } } +bool Entity::ShouldDrawExploded() const { + return SK.GetGroup(group)->ShouldDrawExploded(); +} + +Vector Entity::ExplodeOffset() const { + if(ShouldDrawExploded() && workplane.v != 0) { + int requestIdx = SK.GetRequest(h.request())->groupRequestIndex; + double offset = SS.explodeDistance * (requestIdx + 1); + return SK.GetEntity(workplane)->Normal()->NormalN().ScaledBy(offset); + } else { + return Vector::From(0, 0, 0); + } +} + +Vector Entity::PointGetDrawNum() const { + // As per EntityBase::PointGetNum but specifically for when drawing/rendering the point + // (and not when solving), so we can potentially draw it somewhere different + return PointGetNum().Plus(ExplodeOffset()); +} + void Entity::Draw(DrawAs how, Canvas *canvas) { if(!(how == DrawAs::HOVERED || how == DrawAs::SELECTED) && !IsVisible()) return; @@ -557,16 +577,17 @@ void Entity::Draw(DrawAs how, Canvas *canvas) { pointStroke.unit = Canvas::Unit::PX; Canvas::hStroke hcsPoint = canvas->GetStroke(pointStroke); + Vector p = PointGetDrawNum(); if(free) { Canvas::Stroke analyzeStroke = Style::Stroke(Style::ANALYZE); analyzeStroke.width = 14.0; analyzeStroke.layer = Canvas::Layer::FRONT; Canvas::hStroke hcsAnalyze = canvas->GetStroke(analyzeStroke); - canvas->DrawPoint(PointGetNum(), hcsAnalyze); + canvas->DrawPoint(p, hcsAnalyze); } - canvas->DrawPoint(PointGetNum(), hcsPoint); + canvas->DrawPoint(p, hcsPoint); return; } @@ -621,7 +642,7 @@ void Entity::Draw(DrawAs how, Canvas *canvas) { tail = camera.projRight.ScaledBy(w/s).Plus( camera.projUp. ScaledBy(h/s)).Minus(camera.offset); } else { - tail = SK.GetEntity(point[0])->PointGetNum(); + tail = SK.GetEntity(point[0])->PointGetDrawNum(); } tail = camera.AlignToPixelGrid(tail); @@ -709,8 +730,32 @@ void Entity::Draw(DrawAs how, Canvas *canvas) { case Type::TTF_TEXT: { // Generate the rational polynomial curves, then piecewise linearize // them, and display those. - if(!canvas->DrawBeziers(*GetOrGenerateBezierCurves(), hcs)) { - canvas->DrawEdges(*GetOrGenerateEdges(), hcs); + // Calculating the draw offset, if necessary. + const bool shouldExplode = ShouldDrawExploded(); + Vector explodeOffset; + SBezierList offsetBeziers = {}; + SBezierList *beziers = GetOrGenerateBezierCurves(); + if(shouldExplode) { + explodeOffset = ExplodeOffset(); + for(const SBezier& b : beziers->l) { + SBezier offset = b.TransformedBy(explodeOffset, Quaternion::IDENTITY, 1.0); + offsetBeziers.l.Add(&offset); + } + beziers = &offsetBeziers; + } + + SEdgeList *edges = nullptr; + SEdgeList offsetEdges = {}; + + if(!canvas->DrawBeziers(*beziers, hcs)) { + edges = GetOrGenerateEdges(); + if(shouldExplode) { + for(const SEdge &e : edges->l) { + offsetEdges.AddEdge(e.a.Plus(explodeOffset), e.b.Plus(explodeOffset), e.auxA, e.auxB, e.tag); + } + edges = &offsetEdges; + } + canvas->DrawEdges(*edges, hcs); } if(type == Type::CIRCLE) { Entity *dist = SK.GetEntity(distance); @@ -720,12 +765,14 @@ void Entity::Draw(DrawAs how, Canvas *canvas) { Canvas::Stroke analyzeStroke = Style::Stroke(Style::ANALYZE); analyzeStroke.layer = Canvas::Layer::FRONT; Canvas::hStroke hcsAnalyze = canvas->GetStroke(analyzeStroke); - if(!canvas->DrawBeziers(*GetOrGenerateBezierCurves(), hcsAnalyze)) { - canvas->DrawEdges(*GetOrGenerateEdges(), hcsAnalyze); + if(!canvas->DrawBeziers(*beziers, hcsAnalyze)) { + canvas->DrawEdges(*edges, hcsAnalyze); } } } } + offsetBeziers.Clear(); + offsetEdges.Clear(); return; } case Type::IMAGE: { @@ -757,7 +804,7 @@ void Entity::Draw(DrawAs how, Canvas *canvas) { Canvas::hFill hf = canvas->GetFill(fill); Vector v[4] = {}; for(int i = 0; i < 4; i++) { - v[i] = SK.GetEntity(point[i])->PointGetNum(); + v[i] = SK.GetEntity(point[i])->PointGetDrawNum(); } Vector iu = v[3].Minus(v[0]); Vector iv = v[1].Minus(v[0]); diff --git a/src/generate.cpp b/src/generate.cpp index fdda9946..ec8f82eb 100644 --- a/src/generate.cpp +++ b/src/generate.cpp @@ -224,9 +224,11 @@ void SolveSpaceUI::GenerateAll(Generate type, bool andFindFree, bool genForBBox) if(PruneGroups(hg)) goto pruned; + int groupRequestIndex = 0; for(auto &req : SK.request) { Request *r = &req; if(r->group != hg) continue; + r->groupRequestIndex = groupRequestIndex++; r->Generate(&(SK.entity), &(SK.param)); } diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index bae48438..17e04dce 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -94,6 +94,7 @@ const MenuEntry Menu[] = { { 1, N_("Show Snap &Grid"), Command::SHOW_GRID, '>', KC, mView }, { 1, N_("Darken Inactive Solids"), Command::DIM_SOLID_MODEL, 0, KC, mView }, { 1, N_("Use &Perspective Projection"), Command::PERSPECTIVE_PROJ, '`', KC, mView }, +{ 1, N_("Show E&xploded View"), Command::EXPLODE_SKETCH, '\\', KC, mView }, { 1, N_("Dimension &Units"), Command::NONE, 0, KN, NULL }, { 2, N_("Dimensions in &Millimeters"), Command::UNITS_MM, 0, KR, mView }, { 2, N_("Dimensions in M&eters"), Command::UNITS_METERS, 0, KR, mView }, @@ -318,6 +319,8 @@ void GraphicsWindow::PopulateMainMenu() { dimSolidModelMenuItem = menuItem; } else if(Menu[i].cmd == Command::PERSPECTIVE_PROJ) { perspectiveProjMenuItem = menuItem; + } else if(Menu[i].cmd == Command::EXPLODE_SKETCH) { + explodeMenuItem = menuItem; } else if(Menu[i].cmd == Command::SHOW_TOOLBAR) { showToolbarMenuItem = menuItem; } else if(Menu[i].cmd == Command::SHOW_TEXT_WND) { @@ -753,6 +756,12 @@ void GraphicsWindow::MenuView(Command id) { } break; + case Command::EXPLODE_SKETCH: + SS.explode = !SS.explode; + SS.GW.EnsureValidActives(); + SS.MarkGroupDirty(SS.GW.activeGroup, true); + break; + case Command::ONTO_WORKPLANE: if(SS.GW.LockedInWorkplane()) { SS.GW.AnimateOntoWorkplane(); @@ -951,6 +960,7 @@ void GraphicsWindow::EnsureValidActives() { showGridMenuItem->SetActive(SS.GW.showSnapGrid); dimSolidModelMenuItem->SetActive(SS.GW.dimSolidModel); perspectiveProjMenuItem->SetActive(SS.usePerspectiveProj); + explodeMenuItem->SetActive(SS.explode); showToolbarMenuItem->SetActive(SS.showToolbar); fullScreenMenuItem->SetActive(SS.GW.window->IsFullScreen()); diff --git a/src/group.cpp b/src/group.cpp index 1fcbdeda..0f5a9e6a 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -1190,3 +1190,6 @@ void Group::CopyEntity(IdList *el, el->Add(&en); } +bool Group::ShouldDrawExploded() const { + return SS.explode && h == SS.GW.activeGroup && type == Type::DRAWING_WORKPLANE && !SS.exportMode; +} diff --git a/src/sketch.h b/src/sketch.h index 9f73a32a..6b58bb8c 100644 --- a/src/sketch.h +++ b/src/sketch.h @@ -326,6 +326,7 @@ public: void DrawPolyError(Canvas *canvas); void DrawFilledPaths(Canvas *canvas); void DrawContourAreaLabels(Canvas *canvas); + bool ShouldDrawExploded() const; SPolygon GetPolygon(); @@ -371,6 +372,7 @@ public: std::string font; Platform::Path file; double aspectRatio; + int groupRequestIndex; static hParam AddParam(ParamList *param, hParam hp); void Generate(EntityList *entity, ParamList *param); @@ -594,6 +596,10 @@ public: beziers.l.Clear(); edges.l.Clear(); } + + bool ShouldDrawExploded() const; + Vector ExplodeOffset() const; + Vector PointGetDrawNum() const; }; class EntReqTable { @@ -763,7 +769,7 @@ public: Vector p0, Vector p1, Vector pt, double salient); void DoArcForAngle(Canvas *canvas, Canvas::hStroke hcs, Vector a0, Vector da, Vector b0, Vector db, - Vector offset, Vector *ref, bool trim); + Vector offset, Vector *ref, bool trim, Vector explodeOffset); void DoArrow(Canvas *canvas, Canvas::hStroke hcs, Vector p, Vector dir, Vector n, double width, double angle, double da); void DoLineWithArrows(Canvas *canvas, Canvas::hStroke hcs, @@ -785,6 +791,8 @@ public: std::string DescriptionString() const; + bool ShouldDrawExploded() const; + static hConstraint AddConstraint(Constraint *c, bool rememberForUndo = true); static void MenuConstrain(Command id); static void DeleteAllConstraintsFor(Constraint::Type type, hEntity entityA, hEntity ptA); diff --git a/src/solvespace.cpp b/src/solvespace.cpp index 89b4a00d..5d6d7b27 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -19,6 +19,7 @@ void SolveSpaceUI::Init() { Platform::SettingsRef settings = Platform::GetSettings(); SS.tangentArcRadius = 10.0; + SS.explodeDistance = 1.0; // Then, load the registry settings. // Default list of colors for the model material @@ -1070,6 +1071,7 @@ void SolveSpaceUI::Clear() { GW.showGridMenuItem = NULL; GW.dimSolidModelMenuItem = NULL; GW.perspectiveProjMenuItem = NULL; + GW.explodeMenuItem = NULL; GW.showToolbarMenuItem = NULL; GW.showTextWndMenuItem = NULL; GW.fullScreenMenuItem = NULL; diff --git a/src/solvespace.h b/src/solvespace.h index 21297712..348a8e66 100644 --- a/src/solvespace.h +++ b/src/solvespace.h @@ -609,6 +609,8 @@ public: int afterDecimalDegree; bool useSIPrefixes; int autosaveInterval; // in minutes + bool explode; + double explodeDistance; std::string MmToString(double v, bool editable=false); std::string MmToStringSI(double v, int dim = 0); diff --git a/src/ui.h b/src/ui.h index 90cef9f1..0700653a 100644 --- a/src/ui.h +++ b/src/ui.h @@ -82,6 +82,7 @@ enum class Command : uint32_t { SHOW_GRID, DIM_SOLID_MODEL, PERSPECTIVE_PROJ, + EXPLODE_SKETCH, ONTO_WORKPLANE, NEAREST_ORTHO, NEAREST_ISO, @@ -319,6 +320,7 @@ public: AUTOSAVE_INTERVAL = 116, LIGHT_AMBIENT = 117, FIND_CONSTRAINT_TIMEOUT = 118, + EXPLODE_DISTANCE = 119, // For TTF text TTF_TEXT = 300, // For the step dimension screen @@ -488,6 +490,7 @@ public: static void ScreenChangeExportMaxSegments(int link, uint32_t v); static void ScreenChangeCameraTangent(int link, uint32_t v); static void ScreenChangeGridSpacing(int link, uint32_t v); + static void ScreenChangeExplodeDistance(int link, uint32_t v); static void ScreenChangeDigitsAfterDecimal(int link, uint32_t v); static void ScreenChangeDigitsAfterDecimalDegree(int link, uint32_t v); static void ScreenChangeUseSIPrefixes(int link, uint32_t v); @@ -540,6 +543,7 @@ public: Platform::MenuItemRef showGridMenuItem; Platform::MenuItemRef dimSolidModelMenuItem; Platform::MenuItemRef perspectiveProjMenuItem; + Platform::MenuItemRef explodeMenuItem; Platform::MenuItemRef showToolbarMenuItem; Platform::MenuItemRef showTextWndMenuItem; Platform::MenuItemRef fullScreenMenuItem; From 0a3504c30a005c53e4f0cb6c8fa608482b90f0e9 Mon Sep 17 00:00:00 2001 From: Koen Schmeets Date: Wed, 18 Aug 2021 12:19:02 +0200 Subject: [PATCH 69/89] CI, NFC: Update libomp installation approach on macOS in the GitHub action (#1094) --- .github/scripts/build-macos.sh | 4 ++-- .github/scripts/install-macos.sh | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/scripts/build-macos.sh b/.github/scripts/build-macos.sh index fae7e27f..3394a8af 100755 --- a/.github/scripts/build-macos.sh +++ b/.github/scripts/build-macos.sh @@ -14,13 +14,13 @@ CMAKE_GENERATOR="Unix Makefiles" CMAKE_PREFIX_PATH="" if [ "$2" = "arm64" ]; then OSX_ARCHITECTURE="arm64" - CMAKE_PREFIX_PATH="/tmp/libomp-arm64/libomp/11.0.1" + CMAKE_PREFIX_PATH=$(find /tmp/libomp-arm64/libomp -depth 1) git apply cmake/libpng-macos-arm64.patch || echo "Could not apply patch, probably already patched..." mkdir build-arm64 || true cd build-arm64 elif [ "$2" = "x86_64" ]; then OSX_ARCHITECTURE="x86_64" - CMAKE_PREFIX_PATH="/tmp/libomp-x86_64/libomp/11.0.1" + CMAKE_PREFIX_PATH=$(find /tmp/libomp-x86_64/libomp -depth 1) mkdir build || true cd build else diff --git a/.github/scripts/install-macos.sh b/.github/scripts/install-macos.sh index c6ec104d..be4b13ac 100755 --- a/.github/scripts/install-macos.sh +++ b/.github/scripts/install-macos.sh @@ -1,10 +1,12 @@ #!/bin/sh -xe if [ "$1" = "ci" ]; then - curl -L https://bintray.com/homebrew/bottles/download_file?file_path=libomp-11.0.1.arm64_big_sur.bottle.tar.gz --output /tmp/libomp-arm64.tar.gz + armloc=$(brew fetch --bottle-tag=arm64_big_sur libomp | grep -i downloaded | grep tar.gz | cut -f2 -d:) + x64loc=$(brew fetch --bottle-tag=big_sur libomp | grep -i downloaded | grep tar.gz | cut -f2 -d:) + cp $armloc /tmp/libomp-arm64.tar.gz mkdir /tmp/libomp-arm64 || true tar -xzvf /tmp/libomp-arm64.tar.gz -C /tmp/libomp-arm64 - curl -L https://bintray.com/homebrew/bottles/download_file?file_path=libomp-11.0.1.big_sur.bottle.tar.gz --output /tmp/libomp-x86_64.tar.gz + cp $x64loc /tmp/libomp-x86_64.tar.gz mkdir /tmp/libomp-x86_64 || true tar -xzvf /tmp/libomp-x86_64.tar.gz -C /tmp/libomp-x86_64 else From 4db3e90b81e75b828f615ddc8e8ab01925d093e9 Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Fri, 20 Aug 2021 18:55:30 +0100 Subject: [PATCH 70/89] Show suppressed groups in gray in the text window --- src/textscreens.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/textscreens.cpp b/src/textscreens.cpp index 3474b519..8a43f3de 100644 --- a/src/textscreens.cpp +++ b/src/textscreens.cpp @@ -129,7 +129,7 @@ void TextWindow::ShowListOfGroups() { "%Ft%s%Fb%D%f%Ll%s%E " "%Fb%s%D%f%Ll%s%E " "%Fp%D%f%s%Ll%s%E " - "%Fl%Ll%D%f%s", + "%Fp%Ll%D%f%s", // Alternate between light and dark backgrounds, for readability backgroundParity ? 'd' : 'a', // Link that activates the group @@ -146,6 +146,7 @@ void TextWindow::ShowListOfGroups() { ok ? ((warn && SS.checkClosedContour) ? "err" : sdof) : "", ok ? "" : "ERR", // Link to a screen that gives more details on the group + g->suppress ? 'g' : 'l', g->h.v, (&TextWindow::ScreenSelectGroup), s.c_str()); if(active) afterActive = true; From b87987922f4a43f5ad2351b6c3973559c3cb9565 Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Sat, 21 Aug 2021 16:27:42 +0100 Subject: [PATCH 71/89] Darken disabled gray to 50% and document it. --- src/textwin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/textwin.cpp b/src/textwin.cpp index 599844cc..d0755b07 100644 --- a/src/textwin.cpp +++ b/src/textwin.cpp @@ -203,7 +203,7 @@ const TextWindow::Color TextWindow::fgColors[] = { { 'r', RGBi( 0, 0, 0) }, // Reverse : black { 'x', RGBi(255, 20, 20) }, // Error : red { 'i', RGBi( 0, 255, 255) }, // Info : cyan - { 'g', RGBi(160, 160, 160) }, + { 'g', RGBi(128, 128, 128) }, // Disabled : gray { 'b', RGBi(200, 200, 200) }, { 0, RGBi( 0, 0, 0) } }; From f47cf65f41442760cfb6120f5b897043d55a0def Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sat, 21 Aug 2021 20:27:47 -0400 Subject: [PATCH 72/89] Update CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6f1f57f..e26f14bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ Constraints: Sketching: +* Gray the group name in the text window for groups with suppressed solid model. +* Add "exploded view" to sketches via "\\" key. Shows sketch elements separated + by a configurable distance perpendicular to the sketch plane. * Added Feet-Inches as a unit of measure. Inputs are still in inches. But the display shows feet, inches, and fraction of an inch. * Added an optional "pitch" parameter to helix extrusions (in the text window) From f71c527e2330b48e49e0b2f089868552f5cca176 Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Sun, 22 Aug 2021 13:53:56 +0100 Subject: [PATCH 73/89] =?UTF-8?q?Add=20a=20"=E2=88=86"=20suffix=20to=20gro?= =?UTF-8?q?ups=20which=20have=20"force=20to=20triangle=20mesh"=20ticked.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/textscreens.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/textscreens.cpp b/src/textscreens.cpp index 8a43f3de..628aff39 100644 --- a/src/textscreens.cpp +++ b/src/textscreens.cpp @@ -123,13 +123,18 @@ void TextWindow::ShowListOfGroups() { sprintf(sdof, "%-3d", dof); } } + std::string suffix; + if(g->forceToMesh) { + suffix = " (∆)"; + } + bool ref = (g->h == Group::HGROUP_REFERENCES); Printf(false, "%Bp%Fd " "%Ft%s%Fb%D%f%Ll%s%E " "%Fb%s%D%f%Ll%s%E " "%Fp%D%f%s%Ll%s%E " - "%Fp%Ll%D%f%s", + "%Fp%Ll%D%f%s%E%s", // Alternate between light and dark backgrounds, for readability backgroundParity ? 'd' : 'a', // Link that activates the group @@ -147,7 +152,8 @@ void TextWindow::ShowListOfGroups() { ok ? "" : "ERR", // Link to a screen that gives more details on the group g->suppress ? 'g' : 'l', - g->h.v, (&TextWindow::ScreenSelectGroup), s.c_str()); + g->h.v, (&TextWindow::ScreenSelectGroup), s.c_str(), + suffix.c_str()); if(active) afterActive = true; backgroundParity = !backgroundParity; From 7e823df94a449cb542599d4d7f880b4a28b043da Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Tue, 24 Aug 2021 20:44:51 +0100 Subject: [PATCH 74/89] Correct which group is forced to mesh when linking an STL file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By making IsForcedToMesh() always return true for STL link groups, rather than trying to set forceToMesh=true during the import phase. STL link groups are now always shown as "model already forced to triangle mesh" in the details screen, but also (unlike when the model is forced to mesh by a parent group) show the '∆' icon in the group list. --- src/group.cpp | 6 +++++- src/importmesh.cpp | 1 - src/sketch.h | 1 + src/textscreens.cpp | 4 ++-- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/group.cpp b/src/group.cpp index 0f5a9e6a..1cb1a1b8 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -404,7 +404,11 @@ bool Group::IsForcedToMeshBySource() const { } bool Group::IsForcedToMesh() const { - return forceToMesh || IsForcedToMeshBySource(); + return forceToMesh || IsTriangleMeshAssembly() || IsForcedToMeshBySource(); +} + +bool Group::IsTriangleMeshAssembly() const { + return type == Type::LINKED && linkFile.Extension() == "stl"; } std::string Group::DescriptionString() { diff --git a/src/importmesh.cpp b/src/importmesh.cpp index 21151753..df9a65bf 100644 --- a/src/importmesh.cpp +++ b/src/importmesh.cpp @@ -171,7 +171,6 @@ bool LinkStl(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s addUnique(verts, tr.b, normal); addUnique(verts, tr.c, normal); } - SK.GetGroup(SS.GW.activeGroup)->forceToMesh = true; dbp("%d verticies", verts.size()); BBox box = {}; diff --git a/src/sketch.h b/src/sketch.h index 6b58bb8c..812375f4 100644 --- a/src/sketch.h +++ b/src/sketch.h @@ -269,6 +269,7 @@ public: void Generate(EntityList *entity, ParamList *param); bool IsSolvedOkay(); void TransformImportedBy(Vector t, Quaternion q); + bool IsTriangleMeshAssembly() const; bool IsForcedToMeshBySource() const; bool IsForcedToMesh() const; // When a request generates entities from entities, and the source diff --git a/src/textscreens.cpp b/src/textscreens.cpp index 628aff39..22553827 100644 --- a/src/textscreens.cpp +++ b/src/textscreens.cpp @@ -124,7 +124,7 @@ void TextWindow::ShowListOfGroups() { } } std::string suffix; - if(g->forceToMesh) { + if(g->forceToMesh || g->IsTriangleMeshAssembly()) { suffix = " (∆)"; } @@ -495,7 +495,7 @@ void TextWindow::ShowGroupInfo() { &TextWindow::ScreenChangeGroupOption, g->visible ? CHECK_TRUE : CHECK_FALSE); - if(!g->IsForcedToMeshBySource()) { + if(!g->IsForcedToMeshBySource() && !g->IsTriangleMeshAssembly()) { Printf(false, " %f%Lf%Fd%s force NURBS surfaces to triangle mesh", &TextWindow::ScreenChangeGroupOption, g->forceToMesh ? CHECK_TRUE : CHECK_FALSE); From 31a709e2c8c24f58c210d17b2ac1a849568ad725 Mon Sep 17 00:00:00 2001 From: tomsci Date: Thu, 26 Aug 2021 13:03:28 +0100 Subject: [PATCH 75/89] mac: Support external quit requests (#1099) By no longer always returning NSTerminateCancel in applicationShouldTerminate. And implement applicationWillTerminate to ensure the cleanup code in SolveSpaceUI::Exit() is always called. --- src/platform/guimac.mm | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/platform/guimac.mm b/src/platform/guimac.mm index f9a95fcb..588d92bf 100644 --- a/src/platform/guimac.mm +++ b/src/platform/guimac.mm @@ -1427,9 +1427,22 @@ void OpenInBrowser(const std::string &url) { - (IBAction)preferences:(id)sender; - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename; - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; + +@property BOOL exiting; + @end @implementation SSApplicationDelegate + +@synthesize exiting; + +- (id)init { + if (self = [super init]) { + self.exiting = false; + } + return self; +} + - (IBAction)preferences:(id)sender { if (!SS.GW.showTextWindow) { SolveSpace::SS.GW.MenuView(SolveSpace::Command::SHOW_TEXT_WND); @@ -1444,12 +1457,27 @@ void OpenInBrowser(const std::string &url) { } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { - [[[NSApp mainWindow] delegate] windowShouldClose:[NSApp mainWindow]]; - return NSTerminateCancel; + if(!SS.unsaved) { + return NSTerminateNow; + } else { + [self performSelectorOnMainThread:@selector(applicationTerminatePrompt) withObject:nil + waitUntilDone:NO modes:@[NSDefaultRunLoopMode, NSModalPanelRunLoopMode]]; + return NSTerminateLater; + } +} + +- (void)applicationWillTerminate:(NSNotification *)notification { + if(!exiting) { + // Prevent the Platform::ExitGui() call from SolveSpaceUI::Exit() + // triggering another terminate + exiting = true; + // Now let SS save settings etc + SS.Exit(); + } } - (void)applicationTerminatePrompt { - SolveSpace::SS.MenuFile(SolveSpace::Command::EXIT); + [NSApp replyToApplicationShouldTerminate:SS.OkayToStartNewFile()]; } @end @@ -1488,8 +1516,10 @@ void RunGui() { } void ExitGui() { - [NSApp setDelegate:nil]; - [NSApp terminate:nil]; + if(!ssDelegate.exiting) { + ssDelegate.exiting = true; + [NSApp terminate:nil]; + } } void ClearGui() {} From e1b0784b31c157922be8a618a4247b26a9fd642d Mon Sep 17 00:00:00 2001 From: tomsci Date: Fri, 27 Aug 2021 00:58:33 +0100 Subject: [PATCH 76/89] mac: Support for pan, zoom and rotate trackpad gestures (#1093) * mac: Support for pan, zoom and rotate trackpad gestures Currently SolveSpace is nearly unusable on a mac if you only have a buttonless trackpad and not a mouse, because there's no way to pan (ie right-click-drag) or rotate (ie middle-click-drag). You can zoom, but only by using two-finger-drag up and down, which ends up getting interpreted as a scrollwheel event. This change makes the app behave much more like any other mac app, by adding 2-finger-drag pan gesture support and pinch-gesture zooming, and 3D rotate using shift-2-finger-drag. I've also added support for the rotate two-finger trackpad gesture, which rotates directly around the screen Z axis (rather than in all 3 dimensions) which is actually something I've found myself wanting to do with the mouse but afaik there's no equivalent way of achieving that. While I was there, I fixed a bugette in convertMouseEvent which was incorrectly translating the NSEvent coordinates, and then fixing up the fact that the sign of the y-coordinate was wrong as a result. Using the convertPoint API correctly means that fixup is not required because convertPoint handles it for you. * Don't do trackpad gestures on anything except the toplevel window * mac: Fix non-functional scrollbar on text window Which has not worked quite right since the last major refactor. * Don't pass right-button drags to the toolbar This improves the behaviour of trackpad pan/rotate on mac which uses simulated right-button events. * Don't pass cmd/ctrl modifier through on trackpad pan/rotate MouseEvents --- src/mouse.cpp | 5 +- src/platform/guimac.mm | 161 ++++++++++++++++++++++++++++++++++++----- 2 files changed, 146 insertions(+), 20 deletions(-) diff --git a/src/mouse.cpp b/src/mouse.cpp index 373e6ea2..5e7cde26 100644 --- a/src/mouse.cpp +++ b/src/mouse.cpp @@ -103,7 +103,10 @@ void GraphicsWindow::MouseMoved(double x, double y, bool leftDown, shiftDown = !shiftDown; } - if(SS.showToolbar) { + // Not passing right-button and middle-button drags to the toolbar avoids + // some cosmetic issues with trackpad pans/rotates implemented with + // simulated right-button drag events causing spurious hover events. + if(SS.showToolbar && !middleDown) { if(ToolbarMouseMoved((int)x, (int)y)) { hover.Clear(); return; diff --git a/src/platform/guimac.mm b/src/platform/guimac.mm index 588d92bf..530e0404 100644 --- a/src/platform/guimac.mm +++ b/src/platform/guimac.mm @@ -359,18 +359,25 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { - (void)didEdit:(NSString *)text; @property double scrollerMin; -@property double scrollerMax; +@property double scrollerSize; +@property double pageSize; + @end @implementation SSView { NSTrackingArea *trackingArea; NSTextField *editor; + double magnificationGestureCurrentZ; + double rotationGestureCurrent; + Point2d trackpadPositionShift; + bool inTrackpadScrollGesture; + Platform::Window::Kind kind; } @synthesize acceptsFirstResponder; -- (id)initWithFrame:(NSRect)frameRect { +- (id)initWithKind:(Platform::Window::Kind)aKind { NSOpenGLPixelFormatAttribute attrs[] = { NSOpenGLPFADoubleBuffer, NSOpenGLPFAColorSize, 24, @@ -378,7 +385,7 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { 0 }; NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]; - if(self = [super initWithFrame:frameRect pixelFormat:pixelFormat]) { + if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0) pixelFormat:pixelFormat]) { self.wantsBestResolutionOpenGLSurface = YES; self.wantsLayer = YES; editor = [[NSTextField alloc] init]; @@ -388,6 +395,18 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { editor.bezeled = NO; editor.target = self; editor.action = @selector(didEdit:); + + inTrackpadScrollGesture = false; + kind = aKind; + if(kind == Platform::Window::Kind::TOPLEVEL) { + NSGestureRecognizer *mag = [[NSMagnificationGestureRecognizer alloc] initWithTarget:self + action:@selector(magnifyGesture:)]; + [self addGestureRecognizer:mag]; + + NSRotationGestureRecognizer* rot = [[NSRotationGestureRecognizer alloc] initWithTarget:self + action:@selector(rotateGesture:)]; + [self addGestureRecognizer:rot]; + } } return self; } @@ -428,9 +447,9 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { - (Platform::MouseEvent)convertMouseEvent:(NSEvent *)nsEvent { Platform::MouseEvent event = {}; - NSPoint nsPoint = [self convertPoint:nsEvent.locationInWindow fromView:self]; + NSPoint nsPoint = [self convertPoint:nsEvent.locationInWindow fromView:nil]; event.x = nsPoint.x; - event.y = self.bounds.size.height - nsPoint.y; + event.y = nsPoint.y; NSUInteger nsFlags = [nsEvent modifierFlags]; if(nsFlags & NSEventModifierFlagShift) event.shiftDown = true; @@ -554,14 +573,57 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { using Platform::MouseEvent; MouseEvent event = [self convertMouseEvent:nsEvent]; + if(nsEvent.subtype == NSEventSubtypeTabletPoint && kind == Platform::Window::Kind::TOPLEVEL) { + // This is how Cocoa represents 2 finger trackpad drag gestures, rather than going via + // NSPanGestureRecognizer which is how you might expect this to work... We complicate this + // further by also handling shift-two-finger-drag to mean rotate. Fortunately we're using + // shift in the same way as right-mouse-button MouseEvent does (to converts a pan to a + // rotate) so we get the rotate support for free. It's a bit ugly having to fake mouse + // events and track the deviation from the actual mouse cursor with trackpadPositionShift, + // but in lieu of an event API that allows us to request a rotate/pan with relative + // coordinates, it's the best we can do. + event.button = MouseEvent::Button::RIGHT; + // Make sure control (actually cmd) isn't passed through, ctrl-right-click-drag has special + // meaning as rotate which we don't want to inadvertently trigger. + event.controlDown = false; + if(nsEvent.scrollingDeltaX == 0 && nsEvent.scrollingDeltaY == 0) { + // Cocoa represents the point where the user lifts their fingers off (and any inertial + // scrolling has finished) by an event with scrollingDeltaX and scrollingDeltaY both 0. + // Sometimes you also get a zero scroll at the start of a two-finger-rotate (probably + // reflecting the internal implementation of that being a cancelled possible pan + // gesture), which is why this conditional is structured the way it is. + if(inTrackpadScrollGesture) { + event.x += trackpadPositionShift.x; + event.y += trackpadPositionShift.y; + event.type = MouseEvent::Type::RELEASE; + receiver->onMouseEvent(event); + inTrackpadScrollGesture = false; + trackpadPositionShift = Point2d::From(0, 0); + } + return; + } else if(!inTrackpadScrollGesture) { + inTrackpadScrollGesture = true; + trackpadPositionShift = Point2d::From(0, 0); + event.type = MouseEvent::Type::PRESS; + receiver->onMouseEvent(event); + // And drop through + } + + trackpadPositionShift.x += nsEvent.scrollingDeltaX; + trackpadPositionShift.y += nsEvent.scrollingDeltaY; + event.type = MouseEvent::Type::MOTION; + event.x += trackpadPositionShift.x; + event.y += trackpadPositionShift.y; + receiver->onMouseEvent(event); + return; + } + event.type = MouseEvent::Type::SCROLL_VERT; bool isPrecise = [nsEvent hasPreciseScrollingDeltas]; event.scrollDelta = [nsEvent scrollingDeltaY] / (isPrecise ? 50 : 5); - if(receiver->onMouseEvent) { - receiver->onMouseEvent(event); - } + receiver->onMouseEvent(event); } - (void)mouseExited:(NSEvent *)nsEvent { @@ -639,6 +701,50 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { [super keyUp:nsEvent]; } +- (void)magnifyGesture:(NSMagnificationGestureRecognizer *)gesture { + // The onSixDofEvent API doesn't allow us to specify the scaling's origin, so for expediency + // we fake out a scrollwheel MouseEvent with a suitably-scaled scrollDelta with a bit of + // absolute-to-relative positioning conversion tracked using magnificationGestureCurrentZ. + + if(gesture.state == NSGestureRecognizerStateBegan) { + magnificationGestureCurrentZ = 0.0; + } + + // Magic number to make gesture.magnification align roughly with what scrollDelta expects + constexpr double kScale = 10.0; + double z = ((double)gesture.magnification * kScale); + double zdelta = z - magnificationGestureCurrentZ; + magnificationGestureCurrentZ = z; + + using Platform::MouseEvent; + MouseEvent event = {}; + event.type = MouseEvent::Type::SCROLL_VERT; + NSPoint nsPoint = [gesture locationInView:self]; + event.x = nsPoint.x; + event.y = nsPoint.y; + event.scrollDelta = zdelta; + if(receiver->onMouseEvent) { + receiver->onMouseEvent(event); + } +} + +- (void)rotateGesture:(NSRotationGestureRecognizer *)gesture { + if(gesture.state == NSGestureRecognizerStateBegan) { + rotationGestureCurrent = 0.0; + } + double rotation = gesture.rotation; + double rotationDelta = rotation - rotationGestureCurrent; + rotationGestureCurrent = rotation; + + using Platform::SixDofEvent; + SixDofEvent event = {}; + event.type = SixDofEvent::Type::MOTION; + event.rotationZ = rotationDelta; + if(receiver->onSixDofEvent) { + receiver->onSixDofEvent(event); + } +} + @synthesize editing; - (void)startEditing:(NSString *)text at:(NSPoint)origin withHeight:(double)fontHeight @@ -699,11 +805,27 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { } @synthesize scrollerMin; -@synthesize scrollerMax; +@synthesize scrollerSize; +@synthesize pageSize; - (void)didScroll:(NSScroller *)sender { + double pos; + switch(sender.hitPart) { + case NSScrollerKnob: + case NSScrollerKnobSlot: + pos = receiver->GetScrollbarPosition(); + break; + case NSScrollerDecrementPage: + pos = receiver->GetScrollbarPosition() - pageSize; + break; + case NSScrollerIncrementPage: + pos = receiver->GetScrollbarPosition() + pageSize; + break; + default: + return; + } + if(receiver->onScrollbarAdjusted) { - double pos = scrollerMin + [sender doubleValue] * (scrollerMax - scrollerMin); receiver->onScrollbarAdjusted(pos); } } @@ -770,7 +892,7 @@ public: NSString *nsToolTip; WindowImplCocoa(Window::Kind kind, std::shared_ptr parentWindow) { - ssView = [[SSView alloc] init]; + ssView = [[SSView alloc] initWithKind:kind]; ssView.translatesAutoresizingMaskIntoConstraints = NO; ssView.receiver = this; @@ -963,21 +1085,22 @@ public: void ConfigureScrollbar(double min, double max, double pageSize) override { ssView.scrollerMin = min; - ssView.scrollerMax = max - pageSize; - [nsScroller setKnobProportion:(pageSize / (ssView.scrollerMax - ssView.scrollerMin))]; + ssView.scrollerSize = max + 1 - min; + ssView.pageSize = pageSize; + nsScroller.knobProportion = pageSize / ssView.scrollerSize; + nsScroller.hidden = pageSize >= ssView.scrollerSize; } double GetScrollbarPosition() override { + // Platform::Window scrollbar positions are in the range [min, max+1 - pageSize] inclusive, + // and Cocoa scrollbars are from 0.0 to 1.0 inclusive, so we have to apply some scaling and + // transforming. (scrollerSize is max+1-min, see ConfigureScrollbar above) return ssView.scrollerMin + - [nsScroller doubleValue] * (ssView.scrollerMax - ssView.scrollerMin); + nsScroller.doubleValue * (ssView.scrollerSize - ssView.pageSize); } void SetScrollbarPosition(double pos) override { - if(pos > ssView.scrollerMax) - pos = ssView.scrollerMax; - if(GetScrollbarPosition() == pos) - return; - [nsScroller setDoubleValue:(pos / (ssView.scrollerMax - ssView.scrollerMin))]; + nsScroller.doubleValue = (pos - ssView.scrollerMin) / ( ssView.scrollerSize - ssView.pageSize); } void Invalidate() override { From 4bf9df23854ed01e1340c6d4d4f7702cbec4479a Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Fri, 27 Aug 2021 19:38:26 -0400 Subject: [PATCH 77/89] Update CHANGELOG.md --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e26f14bc..76eb5283 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ Constraints: Sketching: -* Gray the group name in the text window for groups with suppressed solid model. +* Support for pan, zoom and rotate trackpad gestures on macOS * Add "exploded view" to sketches via "\\" key. Shows sketch elements separated by a configurable distance perpendicular to the sketch plane. * Added Feet-Inches as a unit of measure. Inputs are still in inches. @@ -23,6 +23,8 @@ Sketching: MISC: +* Add a "∆" suffix to groups which have "force to triangle mesh" ticked +* Gray the group name in the text window for groups with suppressed solid model. * Added the ability to Link STL files. * When linking circuit boards (IDF .emn files) show keepout regions as construction entities. From 8cfe1d4bd7feec1e9d4159bbbf2f30324d3826d8 Mon Sep 17 00:00:00 2001 From: tomsci Date: Sat, 28 Aug 2021 21:09:48 +0100 Subject: [PATCH 78/89] mac: Remove spurious view menu items (#1101) Which are either not applicable for SolveSpace (the tabs ones) or are already handled in the platform-independent code (the fullscreen item). --- src/platform/guimac.mm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/platform/guimac.mm b/src/platform/guimac.mm index 530e0404..67d1eb97 100644 --- a/src/platform/guimac.mm +++ b/src/platform/guimac.mm @@ -1621,6 +1621,14 @@ std::vector InitGui(int argc, char **argv) { ssDelegate = [[SSApplicationDelegate alloc] init]; NSApplication.sharedApplication.delegate = ssDelegate; + // Setting this prevents "Show Tab Bar" and "Show All Tabs" items from being + // automagically added to the View menu + NSWindow.allowsAutomaticWindowTabbing = NO; + + // And this prevents the duplicate "Enter Full Screen" menu item, see + // https://stackoverflow.com/questions/52154977/how-to-get-rid-of-enter-full-screen-menu-item + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSFullScreenMenuItemEverywhere"]; + [NSBundle.mainBundle loadNibNamed:@"MainMenu" owner:nil topLevelObjects:nil]; NSArray *languages = NSLocale.preferredLanguages; From 0eab7f783b37fe1601cf7e493e1ec0a0e619a038 Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sun, 29 Aug 2021 13:17:54 -0400 Subject: [PATCH 79/89] move perspective, lighting, and explode distance from configuration screen to view screen. --- src/confscreen.cpp | 49 ------------------------------------------ src/view.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/confscreen.cpp b/src/confscreen.cpp index 29a43591..2eb9534f 100644 --- a/src/confscreen.cpp +++ b/src/confscreen.cpp @@ -9,24 +9,6 @@ #include #endif -void TextWindow::ScreenChangeLightDirection(int link, uint32_t v) { - SS.TW.ShowEditControl(8, ssprintf("%.2f, %.2f, %.2f", CO(SS.lightDir[v]))); - SS.TW.edit.meaning = Edit::LIGHT_DIRECTION; - SS.TW.edit.i = v; -} - -void TextWindow::ScreenChangeLightIntensity(int link, uint32_t v) { - SS.TW.ShowEditControl(31, ssprintf("%.2f", SS.lightIntensity[v])); - SS.TW.edit.meaning = Edit::LIGHT_INTENSITY; - SS.TW.edit.i = v; -} - -void TextWindow::ScreenChangeLightAmbient(int link, uint32_t v) { - SS.TW.ShowEditControl(31, ssprintf("%.2f", SS.ambientIntensity)); - SS.TW.edit.meaning = Edit::LIGHT_AMBIENT; - SS.TW.edit.i = 0; -} - void TextWindow::ScreenChangeColor(int link, uint32_t v) { SS.TW.ShowEditControlWithColorPicker(13, SS.modelColor[v]); @@ -58,21 +40,11 @@ void TextWindow::ScreenChangeExportMaxSegments(int link, uint32_t v) { SS.TW.edit.i = 1; } -void TextWindow::ScreenChangeCameraTangent(int link, uint32_t v) { - SS.TW.ShowEditControl(3, ssprintf("%.3f", 1000*SS.cameraTangent)); - SS.TW.edit.meaning = Edit::CAMERA_TANGENT; -} - void TextWindow::ScreenChangeGridSpacing(int link, uint32_t v) { SS.TW.ShowEditControl(3, SS.MmToString(SS.gridSpacing, true)); SS.TW.edit.meaning = Edit::GRID_SPACING; } -void TextWindow::ScreenChangeExplodeDistance(int link, uint32_t v) { - SS.TW.ShowEditControl(3, SS.MmToString(SS.explodeDistance, true)); - SS.TW.edit.meaning = Edit::EXPLODE_DISTANCE; -} - void TextWindow::ScreenChangeDigitsAfterDecimal(int link, uint32_t v) { SS.TW.ShowEditControl(14, ssprintf("%d", SS.UnitDigitsAfterDecimal())); SS.TW.edit.meaning = Edit::DIGITS_AFTER_DECIMAL; @@ -232,18 +204,6 @@ void TextWindow::ShowConfiguration() { &ScreenChangeColor, i); } - Printf(false, ""); - Printf(false, "%Ft light direction intensity"); - for(i = 0; i < 2; i++) { - Printf(false, "%Bp #%d (%2,%2,%2)%Fl%D%f%Ll[c]%E " - "%2 %Fl%D%f%Ll[c]%E", - (i & 1) ? 'd' : 'a', i, - CO(SS.lightDir[i]), i, &ScreenChangeLightDirection, - SS.lightIntensity[i], i, &ScreenChangeLightIntensity); - } - Printf(false, "%Ba ambient lighting %2 %Fl%f%Ll[c]%E", - SS.ambientIntensity, &ScreenChangeLightAmbient); - Printf(false, ""); Printf(false, "%Ft chord tolerance (in percents)%E"); Printf(false, "%Ba %@ %% %Fl%Ll%f%D[change]%E; %@ mm, %d triangles", @@ -265,19 +225,10 @@ void TextWindow::ShowConfiguration() { SS.exportMaxSegments, &ScreenChangeExportMaxSegments); - Printf(false, ""); - Printf(false, "%Ft perspective factor (0 for parallel)%E"); - Printf(false, "%Ba %# %Fl%Ll%f%D[change]%E", - SS.cameraTangent*1000, - &ScreenChangeCameraTangent, 0); Printf(false, "%Ft snap grid spacing%E"); Printf(false, "%Ba %s %Fl%Ll%f%D[change]%E", SS.MmToString(SS.gridSpacing).c_str(), &ScreenChangeGridSpacing, 0); - Printf(false, "%Ft explode distance%E"); - Printf(false, "%Ba %s %Fl%Ll%f%D[change]%E", - SS.MmToString(SS.explodeDistance).c_str(), - &ScreenChangeExplodeDistance, 0); Printf(false, ""); Printf(false, "%Ft digits after decimal point to show%E"); diff --git a/src/view.cpp b/src/view.cpp index 9c85ce6b..99067bc5 100644 --- a/src/view.cpp +++ b/src/view.cpp @@ -35,8 +35,29 @@ void TextWindow::ShowEditView() { Printf(false, "%Ba %Ftout%E (%3, %3, %3)", CO(n)); Printf(false, ""); - Printf(false, "The perspective may be changed in the"); - Printf(false, "configuration screen."); + Printf(false, "%Ft perspective factor (0 for parallel)%E"); + Printf(false, "%Ba %# %Fl%Ll%f%D[change]%E", + SS.cameraTangent*1000, + &ScreenChangeCameraTangent, 0); + + Printf(false, ""); + Printf(false, "%Ft light direction intensity"); + for(int i = 0; i < 2; i++) { + Printf(false, "%Bp #%d (%2,%2,%2)%Fl%D%f%Ll[c]%E " + "%2 %Fl%D%f%Ll[c]%E", + (i & 1) ? 'd' : 'a', i, + CO(SS.lightDir[i]), i, &ScreenChangeLightDirection, + SS.lightIntensity[i], i, &ScreenChangeLightIntensity); + } + Printf(false, "%Ba ambient lighting %2 %Fl%f%Ll[c]%E", + SS.ambientIntensity, &ScreenChangeLightAmbient); + + Printf(false, ""); + Printf(false, "%Ft explode distance%E"); + Printf(false, "%Ba %s %Fl%Ll%f%D[change]%E", + SS.MmToString(SS.explodeDistance).c_str(), + &ScreenChangeExplodeDistance, 0); + } void TextWindow::ScreenChangeViewScale(int link, uint32_t v) { @@ -66,6 +87,34 @@ void TextWindow::ScreenChangeViewProjection(int link, uint32_t v) { SS.TW.ShowEditControl(10, edit_value); } +void TextWindow::ScreenChangeLightDirection(int link, uint32_t v) { + SS.TW.ShowEditControl(8, ssprintf("%.2f, %.2f, %.2f", CO(SS.lightDir[v]))); + SS.TW.edit.meaning = Edit::LIGHT_DIRECTION; + SS.TW.edit.i = v; +} + +void TextWindow::ScreenChangeLightIntensity(int link, uint32_t v) { + SS.TW.ShowEditControl(31, ssprintf("%.2f", SS.lightIntensity[v])); + SS.TW.edit.meaning = Edit::LIGHT_INTENSITY; + SS.TW.edit.i = v; +} + +void TextWindow::ScreenChangeLightAmbient(int link, uint32_t v) { + SS.TW.ShowEditControl(31, ssprintf("%.2f", SS.ambientIntensity)); + SS.TW.edit.meaning = Edit::LIGHT_AMBIENT; + SS.TW.edit.i = 0; +} + +void TextWindow::ScreenChangeCameraTangent(int link, uint32_t v) { + SS.TW.ShowEditControl(3, ssprintf("%.3f", 1000*SS.cameraTangent)); + SS.TW.edit.meaning = Edit::CAMERA_TANGENT; +} + +void TextWindow::ScreenChangeExplodeDistance(int link, uint32_t v) { + SS.TW.ShowEditControl(3, SS.MmToString(SS.explodeDistance, true)); + SS.TW.edit.meaning = Edit::EXPLODE_DISTANCE; +} + bool TextWindow::EditControlDoneForView(const std::string &s) { switch(edit.meaning) { case Edit::VIEW_SCALE: { From 6bc63e92b0d908aa751ae06063b2ec00fec4cc57 Mon Sep 17 00:00:00 2001 From: Maximilian Federle Date: Mon, 19 Apr 2021 14:48:16 +0200 Subject: [PATCH 80/89] snap: Fetch tags for snap builds in CI & mention stable channel in README The snaps use git describe to determine their grade (stable/devel). Fetch the tags to make this possible. Point users to the official release in the stable channel in README.md. --- .github/workflows/cd.yml | 4 ++++ README.md | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index dde06b80..0d3b975c 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -118,6 +118,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - name: Fetch Tags + run: git fetch --force --tags - name: Set Up Source run: rsync --filter=":- .gitignore" -r ./ pkg/snap/solvespace-snap-src - name: Build Snap @@ -149,6 +151,8 @@ jobs: with: image: tonistiigi/binfmt@sha256:df15403e06a03c2f461c1f7938b171fda34a5849eb63a70e2a2109ed5a778bde - uses: actions/checkout@v2 + - name: Fetch Tags + run: git fetch --force --tags - name: Set Up Source run: rsync --filter=":- .gitignore" -r ./ pkg/snap/solvespace-snap-src - name: Build Snap diff --git a/README.md b/README.md index 9b6cb225..b3c40947 100644 --- a/README.md +++ b/README.md @@ -37,16 +37,19 @@ the SolveSpace maintainers for each stable release. ### Via Snap Store -Builds from master are automatically released to the `edge` channel in the Snap Store. Those packages contain the latest improvements, but receive less testing than release builds. +Official releases can be installed from the `stable` channel. -Future official releases will appear in the `stable` channel. +Builds from master are automatically released to the `edge` channel in the Snap Store. Those packages contain the latest improvements, but receive less testing than release builds. [![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/solvespace) Or install from a terminal: ``` -snap install --edge solvespace +# for the latest stable release: +snap install solvespace +# for the bleeding edge builds from master: +snap install solvespace --edge ``` ### Via third-party binary packages From 4afa8101736f0aa883a1fbb13fb82f771f532188 Mon Sep 17 00:00:00 2001 From: andesfreedesign <81501376+andesfreedesign@users.noreply.github.com> Date: Fri, 17 Sep 2021 16:15:56 -0300 Subject: [PATCH 81/89] Add Spanish / Argentina translation --- res/locales/es_AR.po | 2177 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2177 insertions(+) create mode 100644 res/locales/es_AR.po diff --git a/res/locales/es_AR.po b/res/locales/es_AR.po new file mode 100644 index 00000000..82fd1b90 --- /dev/null +++ b/res/locales/es_AR.po @@ -0,0 +1,2177 @@ +# Spanish/Argentina translations for SolveSpace package. +# Copyright (C) 2017 the SolveSpace authors +# This file is distributed under the same license as the SolveSpace package. +# Maxi , 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: SolveSpace 3.0\n" +"Report-Msgid-Bugs-To: whitequark@whitequark.org\n" +"POT-Creation-Date: 2021-09-17 \n" +"PO-Revision-Date: 2021-09-17 \n" +"Last-Translator: andesfreedesign@gmail.com\n" +"Language-Team: AndesFreeDesign\n" +"Language: es_AR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: clipboard.cpp:310 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"Cortar, pegar y copiar trabajo\n" +"solo en un plano de trabajo.\n" +"Activar uno con Croquis-> En Plano de trabajo" + +#: clipboard.cpp:327 +msgid "Clipboard is empty; nothing to paste." +msgstr "El portapapeles está vacío; nada que pegar." + +#: clipboard.cpp:374 +msgid "Number of copies to paste must be at least one." +msgstr "El número de copias para pegar debe ser al menos una." + +#: clipboard.cpp:390 textscreens.cpp:783 +msgid "Scale cannot be zero." +msgstr "La escala no puede ser cero." + +#: clipboard.cpp:432 +msgid "Select one point to define origin of rotation." +msgstr "Seleccione un punto para definir el origen de la rotación." + +#: clipboard.cpp:444 +msgid "Select two points to define translation vector." +msgstr "Seleccione dos puntos para definir el vector de traslación." + +#: clipboard.cpp:454 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "" +"No se especificó ninguna transformación. Todas las copias estarán ubicadas en el mismo lugar." + +#: clipboard.cpp:458 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "Demasiados elementos para pegar; divida esto en partes más pequeñas." + +#: clipboard.cpp:463 +msgid "No workplane active." +msgstr "Ningún plano de trabajo activo." + +#: confscreen.cpp:418 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Formato incorrecto: especifique las coordenadas como x, y, z" + +#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +msgid "Bad format: specify color as r, g, b" +msgstr "Formato incorrecto: especifique color como r, g, b" + +#: confscreen.cpp:454 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"El factor de perspectiva no tendrá ningún efecto hasta que habilite Ver -> Usar" +"Proyección Perspectiva." + +#: confscreen.cpp:467 confscreen.cpp:477 +#, c-format +msgid "Specify between 0 and %d digits after the decimal." +msgstr "Especifique entre 0 y %d dígitos después del decimal." + +#: confscreen.cpp:489 +msgid "Export scale must not be zero!" +msgstr "¡La escala de exportación no debe ser cero!" + +#: confscreen.cpp:501 +msgid "Cutter radius offset must not be negative!" +msgstr "¡El desfase del radio de corte no debe ser negativo!" + +#: confscreen.cpp:555 +msgid "Bad value: autosave interval should be positive" +msgstr "" +"Valor incorrecto: el intervalo de autoguardado debe ser positivo" + +#: confscreen.cpp:558 +msgid "Bad format: specify interval in integral minutes" +msgstr "" +"Formato incorrecto: especifique el intervalo en minutos integrales" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "ps-coincidente" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "p-p-distancia" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "p-línea-distancia" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "p-plano-distancia" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "p-cara-distancia" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "proy-p-p-distancia" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "p-en-plano" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "p-sobre-línea" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "p-sobre-cara" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "igual-longitud" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "igual-longitud-y-p-línea-dist" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "igual-p-línea-distancias" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "longitud-radio" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "length-difference" +msgstr "longitud-diferencia" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "symmetric" +msgstr "simetría" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "simetría-h" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "simetría-v" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "simetría-línea" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "en-puntoMedio" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "horizontal" +msgstr "horizontal" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "vertical" +msgstr "vertical" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "diameter" +msgstr "diámetro" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "p-sobre-círculo" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "misma-orientación" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "angle" +msgstr "ángulo" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "parallel" +msgstr "paralela" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "arco-línea-tangente" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "cúbica-línea-tangente" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "curva-curva-tangente" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "perpendicular" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "igual-radio" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "igual-ángulo" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "igual-línea-long-arco-long" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "fijación" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "comment" +msgstr "comentario" + +#: constraint.cpp:140 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"El arco tangente y la línea deben compartir un punto final. Restringirlos con " +"Restringir -> En el punto antes de restringir la tangente." + +#: constraint.cpp:158 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"La tangente cúbica y la línea deben compartir un punto final. Restringirlos con " +"Restringir -> En el punto antes de restringir la tangente." + +#: constraint.cpp:183 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"Las curvas deben compartir un punto final. Restringirlos con " +"Restringir -> En el punto antes de restringir la tangente." + +#: constraint.cpp:231 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"Mala selección para la restricción de distancia / diámetro. Esta restricción puede aplicarse " +"a:\n" +"\n" +" * dos puntos (distancia entre puntos) \n" +" * un segmento de línea (longitud) \n" +" * dos puntos y un segmento de línea o normal (distancia proyectada) \n" +" * un plano de trabajo y un punto (distancia mínima) \n" +" * un segmento de línea y un punto (distancia mínima) \n" +" * una cara plana y un punto (distancia mínima) \n" +" * un círculo o un arco (diámetro) \n" + +#: constraint.cpp:284 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and a plane face (point on face)\n" +msgstr "" +"Mala selección para una restricción de punto / curva / plano. Esta restricción puede" +"aplicar a: \n" +"\n" +" * dos puntos (puntos coincidentes) \n" +" * un punto y un plano de trabajo (punto en el plano) \n" +" * un punto y un segmento de línea (punto en la línea) \n" +" * un punto y un círculo o arco (punto en la curva) \n" +" * un punto y una cara plana (punto en la cara) \n" + +#: constraint.cpp:346 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +" * two circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"Mala selección para restricción de igualdad longitud / radio. Esta restricción puede " +"aplicar a:\n" +"\n" +" * dos segmentos de línea (igual longitud)\n" +" * dos segmentos de línea y dos puntos (distancias de línea-punto iguales)\n" +" * un segmento de línea y dos puntos (distancias punto-línea iguales)\n" +" * un segmento de línea, y un punto y un segmento de línea (distancia punto-línea " +"igual a la longitud)\n" +" * cuatro segmentos de línea o normales (ángulo igual entre A,B y C,D)\n" +" * tres segmentos de línea o normales (ángulo igual entre A,B y B,C)\n" +" * 2 círculos o arcos (igual radio)\n" +" * un segmento de línea y un arco (la longitud del segmento de línea es igual a la longitud del arco)\n" + +#: constraint.cpp:385 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +msgstr "" +"Mala selección por restricción de la relación de longitud. Esta restricción se puede aplicar a:\n" +"\n" +" * dos segmentos de línea\n" + +#: constraint.cpp:402 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +msgstr "" +"Mala selección por restricción de diferencia de longitud. Esta restricción puede aplicar " +"a:\n" +"\n" +" * dos segmentos de línea\n" + +#: constraint.cpp:428 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"Mala selección para una restricción de punto medio. Esta restricción se puede aplicar a:\n" +"\n" +" * un segmento de línea y un punto (punto en el punto medio)\n" +" * un segmento de línea y un plano de trabajo (punto medio de la línea en el plano)\n" + +#: constraint.cpp:486 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Mala selección por restricción simétrica. Esta restricción se puede aplicar a:\n" +"\n" +" * dos puntos o un segmento de línea (simétrico con respecto al eje de coordenadas del " +"plano de trabajo)\n" +" * segmento de línea, y dos puntos o un segmento de línea (simétrico con respecto al segmento " +"de línea)\n" +" * plano de trabajo, y dos puntos o un segmento de recta (simétrico sobre " +"plano de trabajo)\n" + +#: constraint.cpp:500 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"Un plano de trabajo debe estar activo al restringir simétrico sin un plano de " +"simetría explícito." + +#: constraint.cpp:530 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"Active un plano de trabajo (con Croquis -> En plano de trabajo) antes de aplicar una " +"restricción horizontal o vertical." + +#: constraint.cpp:543 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two points\n" +" * a line segment\n" +msgstr "" +"Mala selección por restricción horizontal / vertical. Esta restricción puede " +"aplicar a:\n" +"\n" +" * dos puntos\n" +" * un segmento de línea\n" + +#: constraint.cpp:564 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"Mala selección para la misma restricción de orientación. Esta restricción puede aplicarse " +"a:\n" +"\n" +" * dos normales\n" + +#: constraint.cpp:614 +msgid "Must select an angle constraint." +msgstr "Debe seleccionar una restricción de ángulo." + +#: constraint.cpp:627 +msgid "Must select a constraint with associated label." +msgstr "Debe seleccionar una restricción con etiqueta asociada." + +#: constraint.cpp:638 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Mala selección por restricción de ángulo. Esta restricción se puede aplicar a:\n" +"\n" +" * dos segmentos de línea\n" +" * un segmento de linea y una normal\n" +" * dos normales\n" + +#: constraint.cpp:701 +msgid "Curve-curve tangency must apply in workplane." +msgstr "La tangencia curva-curva debe aplicarse en el plano de trabajo." + +#: constraint.cpp:711 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments (parallel)\n" +" * a line segment and a normal (parallel)\n" +" * two normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"Mala selección para restricción de paralelo / tangente. Esta restricción puede aplicarse " +"a:\n" +"\n" +" * dos segmentos de línea (paralelos)\n" +" * un segmento de línea y una normal (paralelas)\n" +" * dos normales (paralelas)\n" +" * dos segmentos de línea, arcos, o beziers, que comparten un punto final (tangente)\n" + +#: constraint.cpp:729 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Mala selección por restricción perpendicular. Esta restricción se puede aplicar a:\n" +"\n" +" * dos segmentos de línea\n" +" * un segmento de línea y una normal\n" +" * dos normales\n" + +#: constraint.cpp:744 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"Mala selección para el punto de bloqueo donde se arrastró la restricción. Esta restricción puede " +"aplicar a:\n" +"\n" +" * un punto\n" + +#: constraint.cpp:755 +msgid "click center of comment text" +msgstr "clic en el centro del texto del comentario" + +#: export.cpp:19 +msgid "" +"No solid model present; draw one with extrudes and revolves, or use Export " +"2d View to export bare lines and curves." +msgstr "" +"No hay un modelo sólido presente; dibuje uno con extrusiones y revoluciones, o use Exportar " +"Vista 2d para exportar líneas y curvas desnudas." + +#: export.cpp:61 +msgid "" +"Bad selection for export section. Please select:\n" +"\n" +" * nothing, with an active workplane (workplane is section plane)\n" +" * a face (section plane through face)\n" +" * a point and two line segments (plane through point and parallel to " +"lines)\n" +msgstr "" +"Mala selección para la sección de exportación. Por favor seleccione:\n" +"\n" +" * nada, con un plano de trabajo activo (el plano de trabajo es un plano de sección)\n" +" * una cara (plano de sección a través de la cara)\n" +" * un punto y dos segmentos de línea (plano que pasa por el punto y paralelo a las " +"líneas)\n" + +#: export.cpp:822 +msgid "Active group mesh is empty; nothing to export." +msgstr "La malla del grupo activo está vacía; nada para exportar." + +#: exportvector.cpp:337 +msgid "freehand lines were replaced with continuous lines" +msgstr "Las líneas a mano alzada fueron reemplazadas por líneas continuas." + +#: exportvector.cpp:339 +msgid "zigzag lines were replaced with continuous lines" +msgstr "Las líneas en zigzag fueron reemplazadas por líneas continuas." + +#: exportvector.cpp:593 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" +"Algunos aspectos del dibujo no tienen equivalente DXF y no se exportaron:\n" + +#: exportvector.cpp:839 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"El tamaño de la página PDF supera las 5080mm x 5080mm; " +"muchos usuarios pueden rechazar este archivo." + +#: file.cpp:44 group.cpp:91 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "croquis-en-plano" + +#: file.cpp:62 +msgctxt "group-name" +msgid "#references" +msgstr "#referencias" + +#: file.cpp:552 +msgid "The file is empty. It may be corrupt." +msgstr "El archivo esta vacío. Puede estar corrupto." + +#: file.cpp:557 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Datos no reconocidos en el archivo. Este archivo puede estar dañado o ser de una versión más reciente " +" del programa." + +#: file.cpp:867 +msgctxt "title" +msgid "Missing File" +msgstr "Archivo perdido" + +#: file.cpp:868 +#, c-format +msgctxt "dialog" +msgid "The linked file “%s” is not present." +msgstr "El archivo vinculado “%s” no esta presente." + +#: file.cpp:870 +msgctxt "dialog" +msgid "" +"Do you want to locate it manually?\n" +"\n" +"If you decline, any geometry that depends on the missing file will be " +"permanently removed." +msgstr "" +"¿Quieres localizarlo manualmente?\n" +"\n" +"Si lo rechaza, cualquier geometría que dependa del archivo faltante " +"se eliminará permanentemente." + +#: file.cpp:873 +msgctxt "button" +msgid "&Yes" +msgstr "&Si" + +#: file.cpp:875 +msgctxt "button" +msgid "&No" +msgstr "&No" + +#: file.cpp:877 solvespace.cpp:569 +msgctxt "button" +msgid "&Cancel" +msgstr "&Cancelar" + +#: graphicswin.cpp:41 +msgid "&File" +msgstr "&Archivo" + +#: graphicswin.cpp:42 +msgid "&New" +msgstr "&Nuevo" + +#: graphicswin.cpp:43 +msgid "&Open..." +msgstr "&Abrir..." + +#: graphicswin.cpp:44 +msgid "Open &Recent" +msgstr "Abrir &Reciente" + +#: graphicswin.cpp:45 +msgid "&Save" +msgstr "&Guardar" + +#: graphicswin.cpp:46 +msgid "Save &As..." +msgstr "Guardar &Como..." + +#: graphicswin.cpp:48 +msgid "Export &Image..." +msgstr "Exportar &Imagen..." + +#: graphicswin.cpp:49 +msgid "Export 2d &View..." +msgstr "Exportar 2d &Vista..." + +#: graphicswin.cpp:50 +msgid "Export 2d &Section..." +msgstr "Exportar 2d &Corte..." + +#: graphicswin.cpp:51 +msgid "Export 3d &Wireframe..." +msgstr "Exportar 3d &Estructura alámbrica..." + +#: graphicswin.cpp:52 +msgid "Export Triangle &Mesh..." +msgstr "Exportar Triángulo &Malla..." + +#: graphicswin.cpp:53 +msgid "Export &Surfaces..." +msgstr "Exportar &Superficies..." + +#: graphicswin.cpp:54 +msgid "Im&port..." +msgstr "Im&portar..." + +#: graphicswin.cpp:57 +msgid "E&xit" +msgstr "S&alir" + +#: graphicswin.cpp:60 +msgid "&Edit" +msgstr "&Editar" + +#: graphicswin.cpp:61 +msgid "&Undo" +msgstr "&Deshacer" + +#: graphicswin.cpp:62 +msgid "&Redo" +msgstr "&Rehacer" + +#: graphicswin.cpp:63 +msgid "Re&generate All" +msgstr "Re&generar Todo" + +#: graphicswin.cpp:65 +msgid "Snap Selection to &Grid" +msgstr "Selección Enganche a &Cuadrícula" + +#: graphicswin.cpp:66 +msgid "Rotate Imported &90°" +msgstr "Rotar importado a &90°" + +#: graphicswin.cpp:68 +msgid "Cu&t" +msgstr "Cor&tar" + +#: graphicswin.cpp:69 +msgid "&Copy" +msgstr "&Copiar" + +#: graphicswin.cpp:70 +msgid "&Paste" +msgstr "&Pegar" + +#: graphicswin.cpp:71 +msgid "Paste &Transformed..." +msgstr "Pegar &Тransformar..." + +#: graphicswin.cpp:72 +msgid "&Delete" +msgstr "&Borrar" + +#: graphicswin.cpp:74 +msgid "Select &Edge Chain" +msgstr "Seleccionar Cadena de &Aristas" + +#: graphicswin.cpp:75 +msgid "Select &All" +msgstr "Seleccionar &Todo" + +#: graphicswin.cpp:76 +msgid "&Unselect All" +msgstr "&Deseleccionar Todo" + +#: graphicswin.cpp:78 +msgid "&Line Styles..." +msgstr "Estilos de Línea..." + +#: graphicswin.cpp:79 +msgid "&View Projection..." +msgstr "&Ver Proyección..." + +#: graphicswin.cpp:81 +msgid "Con&figuration..." +msgstr "Con&figuración..." + +#: graphicswin.cpp:84 +msgid "&View" +msgstr "&Vista" + +#: graphicswin.cpp:85 +msgid "Zoom &In" +msgstr "Acer&car" + +#: graphicswin.cpp:86 +msgid "Zoom &Out" +msgstr "Ale&jar" + +#: graphicswin.cpp:87 +msgid "Zoom To &Fit" +msgstr " Enfoque para ajustar" + +#: graphicswin.cpp:89 +msgid "Align View to &Workplane" +msgstr "Alinear Vista a &Plano de trabajo" + +#: graphicswin.cpp:90 +msgid "Nearest &Ortho View" +msgstr "Vista &Ortogonal mas cercana" + +#: graphicswin.cpp:91 +msgid "Nearest &Isometric View" +msgstr "Vista &Isometrica mas cercana" + +#: graphicswin.cpp:92 +msgid "&Center View At Point" +msgstr "&Vista Central en Punto" + +#: graphicswin.cpp:94 +msgid "Show Snap &Grid" +msgstr "Mostrar Enganches &Cuadrícula" + +#: graphicswin.cpp:95 +msgid "Darken Inactive Solids" +msgstr "Oscurecer Sólidos Inactivos" + +#: graphicswin.cpp:96 +msgid "Use &Perspective Projection" +msgstr "Usar Proyección &Perspectiva" + +#: graphicswin.cpp:97 +msgid "Dimension &Units" +msgstr "&Unidades de Cota" + +#: graphicswin.cpp:98 +msgid "Dimensions in &Millimeters" +msgstr "Cotas en &Milímetros" + +#: graphicswin.cpp:99 +msgid "Dimensions in M&eters" +msgstr "Cotas en M&etros" + +#: graphicswin.cpp:100 +msgid "Dimensions in &Inches" +msgstr "Cotas en &Pulgadas" + +#: graphicswin.cpp:102 +msgid "Show &Toolbar" +msgstr "Mostrar &Barra de herramientas" + +#: graphicswin.cpp:103 +msgid "Show Property Bro&wser" +msgstr "Mostrar Nave&gador de Propiedades" + +#: graphicswin.cpp:105 +msgid "&Full Screen" +msgstr "&Pantalla Completa" + +#: graphicswin.cpp:107 +msgid "&New Group" +msgstr "&Nuevo Grupo" + +#: graphicswin.cpp:108 +msgid "Sketch In &3d" +msgstr "Сroquis En &3d" + +#: graphicswin.cpp:109 +msgid "Sketch In New &Workplane" +msgstr "Сroquis En Nuevo &Plano de trabajo" + +#: graphicswin.cpp:111 +msgid "Step &Translating" +msgstr "Paso &Traslación" + +#: graphicswin.cpp:112 +msgid "Step &Rotating" +msgstr "Paso &Giratorio" + +#: graphicswin.cpp:114 +msgid "E&xtrude" +msgstr "E&xtrusión" + +#: graphicswin.cpp:115 +msgid "&Helix" +msgstr "&Hélice" + +#: graphicswin.cpp:116 +msgid "&Lathe" +msgstr "&Torno" + +#: graphicswin.cpp:117 +msgid "Re&volve" +msgstr "Re&volución" + +#: graphicswin.cpp:119 +msgid "Link / Assemble..." +msgstr "Enlace / Ensamblar..." + +#: graphicswin.cpp:120 +msgid "Link Recent" +msgstr "Enlace Reciente" + +#: graphicswin.cpp:122 +msgid "&Sketch" +msgstr "&Croquis" + +#: graphicswin.cpp:123 +msgid "In &Workplane" +msgstr "En &Plano de trabajo" + +#: graphicswin.cpp:124 +msgid "Anywhere In &3d" +msgstr "En cualquier lugar en &3d" + +#: graphicswin.cpp:126 +msgid "Datum &Point" +msgstr "Referencia &Punto" + +#: graphicswin.cpp:127 +msgid "&Workplane" +msgstr "&Plano de trabajo" + +#: graphicswin.cpp:129 +msgid "Line &Segment" +msgstr "Línea &Segmento" + +#: graphicswin.cpp:130 +msgid "C&onstruction Line Segment" +msgstr "S&egmento de Línea de Construcción" + +#: graphicswin.cpp:131 +msgid "&Rectangle" +msgstr "&Rectángulo" + +#: graphicswin.cpp:132 +msgid "&Circle" +msgstr "&Círculo" + +#: graphicswin.cpp:133 +msgid "&Arc of a Circle" +msgstr "&Arco de un Círculo" + +#: graphicswin.cpp:134 +msgid "&Bezier Cubic Spline" +msgstr "&Spline Cúbico de Bezier" + +#: graphicswin.cpp:136 +msgid "&Text in TrueType Font" +msgstr "&Texto en Fuente TrueType" + +#: graphicswin.cpp:137 +msgid "&Image" +msgstr "&Imagen" + +#: graphicswin.cpp:139 +msgid "To&ggle Construction" +msgstr "Al&ternar Construcción" + +#: graphicswin.cpp:140 +msgid "Tangent &Arc at Point" +msgstr "Tangente &Arco en el Punto" + +#: graphicswin.cpp:141 +msgid "Split Curves at &Intersection" +msgstr "Dividir Curvas en &Intersección" + +#: graphicswin.cpp:143 +msgid "&Constrain" +msgstr "&Restricción" + +#: graphicswin.cpp:144 +msgid "&Distance / Diameter" +msgstr "&Distancia / Diámetro" + +#: graphicswin.cpp:145 +msgid "Re&ference Dimension" +msgstr "Co&ta de Referencia" + +#: graphicswin.cpp:146 +msgid "A&ngle" +msgstr "Á&ngulo" + +#: graphicswin.cpp:147 +msgid "Reference An&gle" +msgstr "Ángulo de Re&ferencia" + +#: graphicswin.cpp:148 +msgid "Other S&upplementary Angle" +msgstr "Otro Á&ngulo Suplementario" + +#: graphicswin.cpp:149 +msgid "Toggle R&eference Dim" +msgstr "Alternar C&ota Referencia" + +#: graphicswin.cpp:151 +msgid "&Horizontal" +msgstr "&Horizontal" + +#: graphicswin.cpp:152 +msgid "&Vertical" +msgstr "&Vertical" + +#: graphicswin.cpp:154 +msgid "&On Point / Curve / Plane" +msgstr "&Sobre Punto / Curva / Plano" + +#: graphicswin.cpp:155 +msgid "E&qual Length / Radius / Angle" +msgstr "I&gual Longitud / Radio / Ángulo" + +#: graphicswin.cpp:156 +msgid "Length Ra&tio" +msgstr "Relación Lo&ngitud" + +#: graphicswin.cpp:157 +msgid "Length Diff&erence" +msgstr "Diferencia Long&itud" + +#: graphicswin.cpp:158 +msgid "At &Midpoint" +msgstr "En &PuntoMedio" + +#: graphicswin.cpp:159 +msgid "S&ymmetric" +msgstr "S&imetría" + +#: graphicswin.cpp:160 +msgid "Para&llel / Tangent" +msgstr "Para&lela / Tangente" + +#: graphicswin.cpp:161 +msgid "&Perpendicular" +msgstr "&Perpendicular" + +#: graphicswin.cpp:162 +msgid "Same Orient&ation" +msgstr "Misma Orient&ación" + +#: graphicswin.cpp:163 +msgid "Lock Point Where &Dragged" +msgstr "Punto de Bloqueo Donde &Arrastrado" + +#: graphicswin.cpp:165 +msgid "Comment" +msgstr "Comentario" + +#: graphicswin.cpp:167 +msgid "&Analyze" +msgstr "&Analizar" + +#: graphicswin.cpp:168 +msgid "Measure &Volume" +msgstr "Medición &Volumen" + +#: graphicswin.cpp:169 +msgid "Measure A&rea" +msgstr "Medición Á&rea" + +#: graphicswin.cpp:170 +msgid "Measure &Perimeter" +msgstr "Medición &Perímetro" + +#: graphicswin.cpp:171 +msgid "Show &Interfering Parts" +msgstr "Mostrar &Piezas que Interfieren" + +#: graphicswin.cpp:172 +msgid "Show &Naked Edges" +msgstr "Mostrar &Aristas Desnudas" + +#: graphicswin.cpp:173 +msgid "Show &Center of Mass" +msgstr "Mostrar &Centro de Masa" + +#: graphicswin.cpp:175 +msgid "Show &Underconstrained Points" +msgstr "Mostrar &Puntos Subrestringidos" + +#: graphicswin.cpp:177 +msgid "&Trace Point" +msgstr "&Punto de Rastro" + +#: graphicswin.cpp:178 +msgid "&Stop Tracing..." +msgstr "&Dejar de rastrear..." + +#: graphicswin.cpp:179 +msgid "Step &Dimension..." +msgstr "Cota &Paso..." + +#: graphicswin.cpp:181 +msgid "&Help" +msgstr "&Ayuda" + +#: graphicswin.cpp:182 +msgid "&Language" +msgstr "&Lenguaje" + +#: graphicswin.cpp:183 +msgid "&Website / Manual" +msgstr "&Sitio Web / Manual" + +#: graphicswin.cpp:185 +msgid "&About" +msgstr "&Acerca" + +#: graphicswin.cpp:355 +msgid "(no recent files)" +msgstr "(no hay archivos recientes)" + +#: graphicswin.cpp:363 +#, c-format +msgid "File '%s' does not exist." +msgstr "El archivo '%s' no existe." + +#: graphicswin.cpp:725 +msgid "No workplane is active, so the grid will not appear." +msgstr "No hay ningún plano de trabajo activo, por lo que la cuadrícula no aparecerá." + +#: graphicswin.cpp:740 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"El factor de perspectiva se establece en cero, por lo que la vista siempre será una proyección " +"paralela.\n" +"\n" +"Para una proyección en perspectiva, modifique el factor de perspectiva en la pantalla de configuración. " +" Un valor de alrededor de 0,3 es típico." + +#: graphicswin.cpp:819 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" +"Seleccione un punto; este punto se convertirá en el centro de la vista en pantalla." + +#: graphicswin.cpp:1114 +msgid "No additional entities share endpoints with the selected entities." +msgstr "Ninguna entidad adicional comparte puntos finales con las entidades seleccionadas." + +#: graphicswin.cpp:1132 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"Para usar este comando, seleccione un punto u otra entidad de una parte vinculada, o " +"convertir un grupo de enlaces en el grupo activo." + +#: graphicswin.cpp:1155 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"No hay ningún plano de trabajo activo. Activar un plano de trabajo (con Croquis -> En plano de trabajo) " +"para definir el plano para el enganche a la cuadrícula." + +#: graphicswin.cpp:1162 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"No se pueden enganchar estos elementos a la cuadrícula; seleccionar puntos, comentarios de texto o restricciones " +"con una etiqueta. Para enganchar una línea, seleccione sus puntos finales." + +#: graphicswin.cpp:1247 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "No se seleccionó ningún plano de trabajo. Activando el plano de trabajo predeterminado para este grupo." + +#: graphicswin.cpp:1250 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"No se selecciona ningún plano de trabajo y el grupo activo no tiene un " +"plano de trabajo. Intente seleccionar un plano de trabajo o activar un croquis-en-nuevo-" +"grupo de plano de trabajo." + +#: graphicswin.cpp:1271 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Mala selección de arco tangente en el punto. Seleccione un solo punto o no seleccione " +"nada para configurar los parámetros del arco." + +#: graphicswin.cpp:1282 +msgid "click point on arc (draws anti-clockwise)" +msgstr "clic en el punto en el arco (dibuja en sentido antihorario)" + +#: graphicswin.cpp:1283 +msgid "click to place datum point" +msgstr "clic para colocar el punto de referencia" + +#: graphicswin.cpp:1284 +msgid "click first point of line segment" +msgstr "clic en el primer punto del segmento de línea" + +#: graphicswin.cpp:1286 +msgid "click first point of construction line segment" +msgstr "clic en el primer punto del segmento de línea de construcción" + +#: graphicswin.cpp:1287 +msgid "click first point of cubic segment" +msgstr "clic en el primer punto del segmento cúbico" + +#: graphicswin.cpp:1288 +msgid "click center of circle" +msgstr "clic en el centro del círculo" + +#: graphicswin.cpp:1289 +msgid "click origin of workplane" +msgstr "clic en origen del plano de trabajo" + +#: graphicswin.cpp:1290 +msgid "click one corner of rectangle" +msgstr "clic en una esquina del rectángulo" + +#: graphicswin.cpp:1291 +msgid "click top left of text" +msgstr "clic en la parte superior izquierda del texto" + +#: graphicswin.cpp:1297 +msgid "click top left of image" +msgstr "clic en la parte superior izquierda de la imagen" + +#: graphicswin.cpp:1309 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"No se seleccionaron entidades. Seleccione entidades antes de intentar alternar su " +"estado de construcción." + +#: group.cpp:86 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "croquis-en-3d" + +#: group.cpp:142 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"Mala selección para un nuevo croquis en el plano de trabajo. Este grupo se puede crear con:\n" +"\n" +" * un punto (a través del punto, ortogonal a los ejes de coordenadas)\n" +" * un punto y dos segmentos de línea (a través del punto, paralelo a " +"líneas)\n" +" * un plano de trabajo (copia de un plano de trabajo)\n" + +#: group.cpp:154 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Active un plano de trabajo (Croquis -> En plano de trabajo) antes de extruir. El croquis " +"se extruirá normal al plano de trabajo." + +#: group.cpp:163 +msgctxt "group-name" +msgid "extrude" +msgstr "extruir" + +#: group.cpp:168 +msgid "Lathe operation can only be applied to planar sketches." +msgstr "La operación de torno solo se puede aplicar a croquis planos." + +#: group.cpp:179 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Mala selección para el nuevo grupo de torno. Este grupo se puede crear con:\n" +"\n" +" * un punto y un segmento de línea o normal (revolucionado alrededor de un eje paralelo " +"a la línea / normal, a través del punto)\n" +" * un segmento de línea (revolucionado sobre un segmento de línea)\n" + +#: group.cpp:189 +msgctxt "group-name" +msgid "lathe" +msgstr "torno" + +#: group.cpp:194 +msgid "Revolve operation can only be applied to planar sketches." +msgstr "La operación de revolución solo se puede aplicar a croquis planos." + +#: group.cpp:205 +msgid "" +"Bad selection for new revolve group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Mala selección para el nuevo grupo de revolución. Este grupo se puede crear con:\n" +"\n" +" * un punto y un segmento de línea o normal (revolucionado alrededor de un eje paralelo " +"a la línea / normal, a través del punto)\n" +" * un segmento de línea (revolucionado sobre un segmento de línea)\n" + +#: group.cpp:217 +msgctxt "group-name" +msgid "revolve" +msgstr "revolución" + +#: group.cpp:222 +msgid "Helix operation can only be applied to planar sketches." +msgstr "La operación de hélice solo se puede aplicar a croquis planos." + +#: group.cpp:233 +msgid "" +"Bad selection for new helix group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Mala selección para el nuevo grupo de hélice. Este grupo se puede crear con:\n" +"\n" +" * un punto y un segmento de recta o normal (girado alrededor de un eje paralelo " +"a la línea / normal, a través del punto)\n" +" * un segmento de línea (girado sobre un segmento de línea)\n" + +#: group.cpp:245 +msgctxt "group-name" +msgid "helix" +msgstr "hélice" + +#: group.cpp:258e +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"Mala selección para nueva rotación. Este grupo se puede crear con:\n" +"\n" +" * un punto, mientras está bloqueado en el plano de trabajo (girar en el plano, sobre ese " +"punto)\n" +" * un punto y una línea o una normal (rotar alrededor de un eje a través de un " +"punto y paralela a la línea / normal)\n" + +#: group.cpp:271 +msgctxt "group-name" +msgid "rotate" +msgstr "rotar" + +#: group.cpp:282 +msgctxt "group-name" +msgid "translate" +msgstr "trasladar" + +#: group.cpp:400 +msgid "(unnamed)" +msgstr "(sin nombre)" + +#: groupmesh.cpp:709 +msgid "not closed contour, or not all same style!" +msgstr "¡Contorno no cerrado, o no todos del mismo estilo!" + +#: groupmesh.cpp:722 +msgid "points not all coplanar!" +msgstr "¡No todos los puntos son coplanares!" + +#: groupmesh.cpp:724 +msgid "contour is self-intersecting!" +msgstr "¡El contorno se intersecta a sí mismo!" + +#: groupmesh.cpp:726 +msgid "zero-length edge!" +msgstr "¡arista de longitud cero!" + +#: modify.cpp:254 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "Debe estar dibujando en el plano de trabajo para crear un arco tangente." + +#: modify.cpp:301 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"Para crear un arco tangente, seleccione un punto donde dos líneas que no sean de construcción o " +"los círculos de este grupo y el plano de trabajo se unen." + +#: modify.cpp:388 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"No pude redondear esta esquina. Pruebe con un radio más pequeño o intente crear la " +"geometría deseada a mano con restricciones de tangencia." + +#: modify.cpp:597 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "No se pudo dividir esta entidad; solo líneas, círculos o cúbicos." + +#: modify.cpp:624 +msgid "Must be sketching in workplane to split." +msgstr "Debe estar dibujando en el plano de trabajo para dividir." + +#: modify.cpp:631 +msgid "" +"Select two entities that intersect each other (e.g. two lines/circles/arcs " +"or a line/circle/arc and a point)." +msgstr "" +"Seleccione dos entidades que se crucen entre sí (por ejemplo, dos líneas / círculos / arcos " +"o una línea / círculo / arco y un punto)." + +#: modify.cpp:736 +msgid "Can't split; no intersection found." +msgstr "No se puede dividir; no se encontró ninguna intersección." + +#: mouse.cpp:559 +msgid "Assign to Style" +msgstr "Asignar a Estilo" + +#: mouse.cpp:575 +msgid "No Style" +msgstr "Sin Estilo" + +#: mouse.cpp:578 +msgid "Newly Created Custom Style..." +msgstr "Estilo Personalizado Recién Creado..." + +#: mouse.cpp:585 +msgid "Group Info" +msgstr "Información de Grupo" + +#: mouse.cpp:605 +msgid "Style Info" +msgstr "Información de Estilo" + +#: mouse.cpp:625 +msgid "Select Edge Chain" +msgstr "Seleccionar Cadena de Arista" + +#: mouse.cpp:631 +msgid "Toggle Reference Dimension" +msgstr "Alternar Cota de Referencia" + +#: mouse.cpp:637 +msgid "Other Supplementary Angle" +msgstr "Otro Ángulo Suplementario" + +#: mouse.cpp:642 +msgid "Snap to Grid" +msgstr "Enganchar a la cuadrícula" + +#: mouse.cpp:651 +msgid "Remove Spline Point" +msgstr "Remover Punto de Spline" + +#: mouse.cpp:686 +msgid "Add Spline Point" +msgstr "Agregar Punto de Spline" + +#: mouse.cpp:690 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "No se puede agregar un punto de spline: se alcanzó el número máximo de puntos." + +#: mouse.cpp:715 +msgid "Toggle Construction" +msgstr "Alternar Construcción" + +#: mouse.cpp:730 +msgid "Delete Point-Coincident Constraint" +msgstr "Eliminar restricción de punto-coincidente" + +#: mouse.cpp:749 +msgid "Cut" +msgstr "Cortar" + +#: mouse.cpp:751 +msgid "Copy" +msgstr "Copiar" + +#: mouse.cpp:755 +msgid "Select All" +msgstr "Seleccionar Todo " + +#: mouse.cpp:760 +msgid "Paste" +msgstr "Pegar" + +#: mouse.cpp:762 +msgid "Paste Transformed..." +msgstr "Pegar Transformado ..." + +#: mouse.cpp:767 +msgid "Delete" +msgstr "Eliminar" + +#: mouse.cpp:770 +msgid "Unselect All" +msgstr "Deseleccionar Todo" + +#: mouse.cpp:777 +msgid "Unselect Hovered" +msgstr "Deselección Flotante" + +#: mouse.cpp:786 +msgid "Zoom to Fit" +msgstr "Zoom para ajustar" + +#: mouse.cpp:988 mouse.cpp:1275 +msgid "click next point of line, or press Esc" +msgstr "clic en el siguiente punto de la línea o presione Esc" + +#: mouse.cpp:994 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"No se puede dibujar un rectángulo en 3d; primero, active un plano de trabajo con Croquis -> En " +"Plano de trabajo." + +#: mouse.cpp:1028 +msgid "click to place other corner of rectangle" +msgstr "clic para colocar la otra esquina del rectángulo" + +#: mouse.cpp:1048 +msgid "click to set radius" +msgstr "clic para establecer el radio" + +#: mouse.cpp:1053 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"No se puede dibujar un arco en 3d; primero, active un plano de trabajo con Croquis -> En " +"Plano de trabajo." + +#: mouse.cpp:1072 +msgid "click to place point" +msgstr "clic para colocar el punto" + +#: mouse.cpp:1088 +msgid "click next point of cubic, or press Esc" +msgstr "clic en el siguiente punto del cúbico, o presione Esc" + +#: mouse.cpp:1093 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"Dibujando en un plano de trabajo ya; croquis en 3d antes de crear un nuevo plano de trabajo." + +#: mouse.cpp:1109 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"No se puede dibujar texto en 3D; primero, active un plano de trabajo con Croquis -> En " +"Plano de trabajo." + +#: mouse.cpp:1126 +msgid "click to place bottom right of text" +msgstr "clic para colocar la parte inferior derecha del texto" + +#: mouse.cpp:1132 +msgid "" +"Can't draw image in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"No se puede dibujar una imagen en 3D; primero, active un plano de trabajo con Croquis -> En " +"Plano de Trabajo." + +#: mouse.cpp:1159 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NUEVO COMENTARIO -- DOBLE-CLIC PARA EDITAR" + +#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +msgctxt "file-type" +msgid "SolveSpace models" +msgstr "SolveSpace modelos" + +#: platform/gui.cpp:90 +msgctxt "file-type" +msgid "IDF circuit board" +msgstr "placa circuito IDF" + +#: platform/gui.cpp:94 +msgctxt "file-type" +msgid "PNG image" +msgstr "imagen PNG" + +#: platform/gui.cpp:98 +msgctxt "file-type" +msgid "STL mesh" +msgstr "STL malla" + +#: platform/gui.cpp:99 +msgctxt "file-type" +msgid "Wavefront OBJ mesh" +msgstr "Wavefront OBJ malla" + +#: platform/gui.cpp:100 +msgctxt "file-type" +msgid "Three.js-compatible mesh, with viewer" +msgstr "Three.js-malla compatible, con visor" + +#: platform/gui.cpp:101 +msgctxt "file-type" +msgid "Three.js-compatible mesh, mesh only" +msgstr "Three.js-malla compatible, solo malla" + +#: platform/gui.cpp:102 +msgctxt "file-type" +msgid "VRML text file" +msgstr "Archivo texto VRML" + +#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +msgctxt "file-type" +msgid "STEP file" +msgstr "Archivo STEP" + +#: platform/gui.cpp:110 +msgctxt "file-type" +msgid "PDF file" +msgstr "Archivo PDF" + +#: platform/gui.cpp:111 +msgctxt "file-type" +msgid "Encapsulated PostScript" +msgstr "Encapsulado PostScript" + +#: platform/gui.cpp:112 +msgctxt "file-type" +msgid "Scalable Vector Graphics" +msgstr "Gráficos Vectoriales Escalables" + +#: platform/gui.cpp:114 platform/gui.cpp:121 +msgctxt "file-type" +msgid "DXF file (AutoCAD 2007)" +msgstr "Archivo DXF (AutoCAD 2007)" + +#: platform/gui.cpp:115 +msgctxt "file-type" +msgid "HPGL file" +msgstr "Archivo HPGL" + +#: platform/gui.cpp:116 +msgctxt "file-type" +msgid "G Code" +msgstr "G Code" + +#: platform/gui.cpp:125 +msgctxt "file-type" +msgid "AutoCAD DXF and DWG files" +msgstr "Archivos AutoCAD DXF y DWG" + +#: platform/gui.cpp:129 +msgctxt "file-type" +msgid "Comma-separated values" +msgstr "Valores separados por comas" + +#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +msgid "untitled" +msgstr "sin título" + +#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 +#: platform/guiwin.cpp:1582 +msgctxt "title" +msgid "Save File" +msgstr "Guardar Archivo" + +#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 +#: platform/guiwin.cpp:1584 +msgctxt "title" +msgid "Open File" +msgstr "Abrir Archivo" + +#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +msgctxt "button" +msgid "_Cancel" +msgstr "_Cancelar" + +#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +msgctxt "button" +msgid "_Save" +msgstr "_Guardar" + +#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +msgctxt "button" +msgid "_Open" +msgstr "_Abrir" + +#: solvespace.cpp:169 +msgctxt "title" +msgid "Autosave Available" +msgstr "Autoguardado Disponible" + +#: solvespace.cpp:170 +msgctxt "dialog" +msgid "An autosave file is available for this sketch." +msgstr "Un archivo de autoguardado está disponible para este croquis." + +#: solvespace.cpp:171 +msgctxt "dialog" +msgid "Do you want to load the autosave file instead?" +msgstr "¿Desea cargar el archivo de autoguardado en su lugar?" + +#: solvespace.cpp:172 +msgctxt "button" +msgid "&Load autosave" +msgstr "&Cargar autoguardado" + +#: solvespace.cpp:174 +msgctxt "button" +msgid "Do&n't Load" +msgstr "No Cargar" + +#: solvespace.cpp:557 +msgctxt "title" +msgid "Modified File" +msgstr "Archivo Modificado" + +#: solvespace.cpp:559 +#, c-format +msgctxt "dialog" +msgid "Do you want to save the changes you made to the sketch “%s”?" +msgstr "¿Desea guardar los cambios que realizó en el croquis “%s”?" + +#: solvespace.cpp:562 +msgctxt "dialog" +msgid "Do you want to save the changes you made to the new sketch?" +msgstr "¿Desea guardar los cambios que realizó en el nuevo croquis?" + +#: solvespace.cpp:565 +msgctxt "dialog" +msgid "Your changes will be lost if you don't save them." +msgstr "Sus cambios se perderán si no los guarda." + +#: solvespace.cpp:566 +msgctxt "button" +msgid "&Save" +msgstr "&Guardar" + +#: solvespace.cpp:568 +msgctxt "button" +msgid "Do&n't Save" +msgstr "No& Guardar" + +#: solvespace.cpp:589 +msgctxt "title" +msgid "(new sketch)" +msgstr "(nuevo croquis)" + +#: solvespace.cpp:596 +msgctxt "title" +msgid "Property Browser" +msgstr "Explorador de Propiedades" + +#: solvespace.cpp:658 +msgid "" +"Constraints are currently shown, and will be exported in the toolpath. This " +"is probably not what you want; hide them by clicking the link at the top of " +"the text window." +msgstr "" +"Las restricciones se muestran actualmente y se exportarán en la trayectoria." +"Probablemente esto no sea lo que quieres; ocultarlos haciendo clic en el enlace en la parte superior de " +"la ventana de texto." + +#: solvespace.cpp:730 +#, c-format +msgid "" +"Can't identify file type from file extension of filename '%s'; try .dxf or ." +"dwg." +msgstr "" +"No se puede identificar el tipo de archivo a partir de la extensión del nombre del archivo '%s'; intente .dxf o ." +"dwg." + +#: solvespace.cpp:778 +msgid "Constraint must have a label, and must not be a reference dimension." +msgstr "La restricción debe tener una etiqueta y no debe ser una cota de referencia." + +#: solvespace.cpp:782 +msgid "Bad selection for step dimension; select a constraint." +msgstr "Mala selección para la cota del paso; seleccione una restricción." + +#: solvespace.cpp:806 +msgid "The assembly does not interfere, good." +msgstr "El ensamble no interfiere, bien." + +#: solvespace.cpp:822 +#, c-format +msgid "" +"The volume of the solid model is:\n" +"\n" +" %s" +msgstr "" +"El volumen del modelo sólido es:\n" +"\n" +" %s" + +#: solvespace.cpp:831 +#, c-format +msgid "" +"\n" +"The volume of current group mesh is:\n" +"\n" +" %s" +msgstr "" +"\n" +"El volumen de la malla del grupo actual es:\n" +"\n" +" %s" + +#: solvespace.cpp:836 +msgid "" +"\n" +"\n" +"Curved surfaces have been approximated as triangles.\n" +"This introduces error, typically of around 1%." +msgstr "" +"\n" +"\n" +"Las superficies curvas se han aproximado como triángulos.\n" +"Esto introduce un error, normalmente alrededor del 1%." + +#: solvespace.cpp:851 +#, c-format +msgid "" +"The surface area of the selected faces is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"El área de la superficie de las caras seleccionadas es:\n" +"\n" +" %s\n" +"\n" +"Las curvas se han aproximado como lineales por partes.\n" +"Esto introduce un error, normalmente alrededor del 1%%." + +#: solvespace.cpp:860 +msgid "" +"This group does not contain a correctly-formed 2d closed area. It is open, " +"not coplanar, or self-intersecting." +msgstr "" +"Este grupo no contiene un área cerrada 2d correctamente formada. Está abierta, " +"no coplanares, ni auto-intersectantes." + +#: solvespace.cpp:872 +#, c-format +msgid "" +"The area of the region sketched in this group is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"El área de la región croquizada en este grupo es:\n" +"\n" +" %s\n" +"\n" +"Las curvas se han aproximado como lineales por partes.\n" +"Esto introduce un error, normalmente alrededor del 1%%." + +#: solvespace.cpp:892 +#, c-format +msgid "" +"The total length of the selected entities is:\n" +"\n" +" %s\n" +"\n" +"Curves have been approximated as piecewise linear.\n" +"This introduces error, typically of around 1%%." +msgstr "" +"La longitud total de las entidades seleccionadas es:\n" +"\n" +" %s\n" +"\n" +"Las curvas se han aproximado como lineales por partes.\n" +"Esto introduce un error, normalmente alrededor del 1%%." + +#: solvespace.cpp:898 +msgid "Bad selection for perimeter; select line segments, arcs, and curves." +msgstr "Mala selección de perímetro; seleccione segmentos de línea, arcos y curvas." + +#: solvespace.cpp:914 +msgid "Bad selection for trace; select a single point." +msgstr "Mala selección de rastreo; seleccione un solo punto." + +#: solvespace.cpp:941 +#, c-format +msgid "Couldn't write to '%s'" +msgstr "No pude escribir a '%s'" + +#: solvespace.cpp:971 +msgid "The mesh is self-intersecting (NOT okay, invalid)." +msgstr "La malla se intersecta a si misma (NO está bien, no es válida)." + +#: solvespace.cpp:972 +msgid "The mesh is not self-intersecting (okay, valid)." +msgstr "La malla no se intersecta (está bien, es válida)." + +#: solvespace.cpp:974 +msgid "The mesh has naked edges (NOT okay, invalid)." +msgstr "La malla tiene bordes desnudos (NO está bien, no es válida)." + +#: solvespace.cpp:975 +msgid "The mesh is watertight (okay, valid)." +msgstr "La malla es estanca (está bien, es válida)." + +#: solvespace.cpp:978 +#, c-format +msgid "" +"\n" +"\n" +"The model contains %d triangles, from %d surfaces." +msgstr "" +"\n" +"\n" +"El modelo contiene %d triángulos, desde %d superficies." + +#: solvespace.cpp:982 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"Zero problematic edges, good.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"Cero aristas problemáticas, bien.%s" + +#: solvespace.cpp:985 +#, c-format +msgid "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d problematic edges, bad.%s" +msgstr "" +"%s\n" +"\n" +"%s\n" +"\n" +"%d aristas problemáticas, mal.%s" + +#: solvespace.cpp:998 +#, c-format +msgid "" +"This is SolveSpace version %s.\n" +"\n" +"For more information, see http://solvespace.com/\n" +"\n" +"SolveSpace is free software: you are free to modify\n" +"and/or redistribute it under the terms of the GNU\n" +"General Public License (GPL) version 3 or later.\n" +"\n" +"There is NO WARRANTY, to the extent permitted by\n" +"law. For details, visit http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues and other authors.\n" +msgstr "" +"Esta es la versión de SolveSpace %s.\n" +"\n" +"Para más información, ver http://solvespace.com/\n" +"\n" +"SolveSpace es software libre: eres libre de modificarlo\n" +"y/o redistribuirlo bajo los términos de la GNU\n" +"Licencia Pública General (GPL) version 3 o posterior.\n" +"\n" +"NO HAY GARANTÍA, en la medida permitida por\n" +"ley. Para detalles, visita http://gnu.org/licenses/\n" +"\n" +"© 2008-%d Jonathan Westhues y otros autores.\n" + +#: style.cpp:166 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"No se puede asignar estilo a una entidad derivada de otra entidad;; intente " +"asignar un estilo al padre de esta entidad." + +#: style.cpp:665 +msgid "Style name cannot be empty" +msgstr "El nombre del estilo no puede estar vacío" + +#: textscreens.cpp:741 +msgid "Can't repeat fewer than 1 time." +msgstr "No se puede repetir menos de 1 vez." + +#: textscreens.cpp:745 +msgid "Can't repeat more than 999 times." +msgstr "No se puede repetir más de 999 veces." + +#: textscreens.cpp:770 +msgid "Group name cannot be empty" +msgstr "El nombre del grupo no puede estar vacío" + +#: textscreens.cpp:813 +msgid "Opacity must be between zero and one." +msgstr "La opacidad debe estar entre cero y uno." + +#: textscreens.cpp:848 +msgid "Radius cannot be zero or negative." +msgstr "El radio no puede ser cero o negativo." + +#: toolbar.cpp:18 +msgid "Sketch line segment" +msgstr "Croquizar segmento de línea" + +#: toolbar.cpp:20 +msgid "Sketch rectangle" +msgstr "Croquizar rectángulo" + +#: toolbar.cpp:22 +msgid "Sketch circle" +msgstr "Croquizar círculo" + +#: toolbar.cpp:24 +msgid "Sketch arc of a circle" +msgstr "Croquizar arco de un círculo" + +#: toolbar.cpp:26 +msgid "Sketch curves from text in a TrueType font" +msgstr "Croquizar curvas desde texto en fuente TrueType" + +#: toolbar.cpp:28 +msgid "Sketch image from a file" +msgstr "Croquizar imagen desde un archivo" + +#: toolbar.cpp:30 +msgid "Create tangent arc at selected point" +msgstr "Crear arco tangente en el punto seleccionado" + +#: toolbar.cpp:32 +msgid "Sketch cubic Bezier spline" +msgstr "Croquizar spline de Bezier cúbico" + +#: toolbar.cpp:34 +msgid "Sketch datum point" +msgstr "Croquizar punto de referencia" + +#: toolbar.cpp:36 +msgid "Toggle construction" +msgstr "Alternar construcción" + +#: toolbar.cpp:38 +msgid "Split lines / curves where they intersect" +msgstr "Dividir líneas / curvas donde se intersectan" + +#: toolbar.cpp:42 +msgid "Constrain distance / diameter / length" +msgstr "Restringir distancia / diámetro / longitud" + +#: toolbar.cpp:44 +msgid "Constrain angle" +msgstr "Restringir ángulo" + +#: toolbar.cpp:46 +msgid "Constrain to be horizontal" +msgstr "Restringir para ser horizontal" + +#: toolbar.cpp:48 +msgid "Constrain to be vertical" +msgstr "Restringir para ser vertical" + +#: toolbar.cpp:50 +msgid "Constrain to be parallel or tangent" +msgstr "Restringir para ser paralela o tangente" + +#: toolbar.cpp:52 +msgid "Constrain to be perpendicular" +msgstr "Restringir para ser perpendicular" + +#: toolbar.cpp:54 +msgid "Constrain point on line / curve / plane / point" +msgstr "Restringir punto en línea / curva / plano / punto" + +#: toolbar.cpp:56 +msgid "Constrain symmetric" +msgstr "Restringir simétrico" + +#: toolbar.cpp:58 +msgid "Constrain equal length / radius / angle" +msgstr "Restringir igualdad longitud / radio / ángulo" + +#: toolbar.cpp:60 +msgid "Constrain normals in same orientation" +msgstr "Restringir normales en la misma orientación" + +#: toolbar.cpp:62 +msgid "Other supplementary angle" +msgstr "Otro ángulo suplementario" + +#: toolbar.cpp:64 +msgid "Toggle reference dimension" +msgstr "Alternar cota de referencia" + +#: toolbar.cpp:68 +msgid "New group extruding active sketch" +msgstr "Nuevo grupo de extrusión de croquis activo" + +#: toolbar.cpp:70 +msgid "New group rotating active sketch" +msgstr "Nuevo croquis activo giratorio de grupo" + +#: toolbar.cpp:72 +msgid "New group helix from active sketch" +msgstr "Nueva hélice de grupo a partir del croquis activo" + +#: toolbar.cpp:74 +msgid "New group revolve active sketch" +msgstr "Nuevo croquis activo de revolución de grupo" + +#: toolbar.cpp:76 +msgid "New group step and repeat rotating" +msgstr "Nuevo paso de grupo y rotación repetida" + +#: toolbar.cpp:78 +msgid "New group step and repeat translating" +msgstr "Nuevo paso de grupo y traslación repetida" + +#: toolbar.cpp:80 +msgid "New group in new workplane (thru given entities)" +msgstr "Nuevo grupo en nuevo plano de trabajo (a través de entidades dadas)" + +#: toolbar.cpp:82 +msgid "New group in 3d" +msgstr "Nuevo grupo en 3d" + +#: toolbar.cpp:84 +msgid "New group linking / assembling file" +msgstr "Nuevo enlace de grupo / archivo de ensamble" + +#: toolbar.cpp:88 +msgid "Nearest isometric view" +msgstr "Vista isométrica más cercana" + +#: toolbar.cpp:90 +msgid "Align view to active workplane" +msgstr "Alinear vista al plano de trabajo activo" + +#: util.cpp:165 +msgctxt "title" +msgid "Error" +msgstr "Error" + +#: util.cpp:165 +msgctxt "title" +msgid "Message" +msgstr "Mensaje" + +#: util.cpp:170 +msgctxt "button" +msgid "&OK" +msgstr "&Aceptar" + +#: view.cpp:78 +msgid "Scale cannot be zero or negative." +msgstr "La escala no debe ser cero o negativa." + +#: view.cpp:90 view.cpp:99 +msgid "Bad format: specify x, y, z" +msgstr "Formato incorrecto: especifica x, y, z" + +#~ msgctxt "file-type" +#~ msgid "Q3D Object file" +#~ msgstr "Archivo Objeto Q3D" From bb1938903b1d4ff7de78d11e13919490f19657fa Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sun, 26 Sep 2021 16:27:22 -0400 Subject: [PATCH 82/89] update pot file and locales.txt and CMakeLists.txt for spanish. --- res/CMakeLists.txt | 1 + res/locales.txt | 1 + res/locales/de_DE.po | 700 +++++++++++++++++-------------- res/locales/en_US.po | 748 +++++++++++++++++++--------------- res/locales/es_AR.po | 951 ++++++++++++++++++++++++------------------- res/locales/fr_FR.po | 700 +++++++++++++++++-------------- res/locales/ru_RU.po | 704 ++++++++++++++++++-------------- res/locales/tr_TR.po | 699 +++++++++++++++++-------------- res/locales/uk_UA.po | 649 +++++++++++++++-------------- res/locales/zh_CN.po | 692 +++++++++++++++++-------------- res/messages.pot | 659 ++++++++++++++++-------------- 11 files changed, 3578 insertions(+), 2926 deletions(-) diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt index 3b4216c1..7303c6f7 100644 --- a/res/CMakeLists.txt +++ b/res/CMakeLists.txt @@ -266,6 +266,7 @@ add_resources( locales/en_US.po locales/fr_FR.po locales/uk_UA.po + locales/es_AR.po locales/tr_TR.po locales/ru_RU.po locales/zh_CN.po diff --git a/res/locales.txt b/res/locales.txt index daedc309..d94e2c04 100644 --- a/res/locales.txt +++ b/res/locales.txt @@ -3,6 +3,7 @@ de-DE,0407,Deutsch en-US,0409,English (US) fr-FR,040C,Français +es-AR,2C0A,español (AR) ru-RU,0419,Русский tr-TR,041F,Türkçe uk-UA,0422,Українська diff --git a/res/locales/de_DE.po b/res/locales/de_DE.po index bbd3fcda..4a5ccb57 100644 --- a/res/locales/de_DE.po +++ b/res/locales/de_DE.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2021-02-01 15:45+0200\n" +"POT-Creation-Date: 2021-09-26 16:25-0400\n" "PO-Revision-Date: 2018-07-19 06:55+0000\n" "Last-Translator: Reini Urban \n" "Language-Team: none\n" @@ -17,7 +17,7 @@ msgstr "" "X-Generator: Zanata 4.5.0\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: clipboard.cpp:310 +#: clipboard.cpp:309 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -28,27 +28,27 @@ msgstr "" "\n" "Aktivieren Sie eine mit Skizze -> In Arbeitsebene" -#: clipboard.cpp:327 +#: clipboard.cpp:326 msgid "Clipboard is empty; nothing to paste." msgstr "Zwischenablage ist leer; es gibt nichts einzufügen." -#: clipboard.cpp:374 +#: clipboard.cpp:373 msgid "Number of copies to paste must be at least one." msgstr "Die Anzahl der einzufügenden Kopien muss mind. 1 sein." -#: clipboard.cpp:390 textscreens.cpp:783 +#: clipboard.cpp:389 textscreens.cpp:827 msgid "Scale cannot be zero." msgstr "Maßstab kann nicht Null sein." -#: clipboard.cpp:432 +#: clipboard.cpp:431 msgid "Select one point to define origin of rotation." msgstr "Wählen Sie einen Punkt, um den Drehmittelpunkt zu definieren." -#: clipboard.cpp:444 +#: clipboard.cpp:443 msgid "Select two points to define translation vector." msgstr "Wählen Sie zwei Punkte, um den Verschiebungsvektor zu definieren." -#: clipboard.cpp:454 +#: clipboard.cpp:453 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." @@ -56,25 +56,25 @@ msgstr "" "Die Transformation ist die Identität. Alle Kopien werden deckungsgleich " "übereinanderliegen." -#: clipboard.cpp:458 +#: clipboard.cpp:457 msgid "Too many items to paste; split this into smaller pastes." msgstr "" "Zuviele Objekte zum Einfügen; teilen Sie diese in kleinere " "Einfügeoperationen auf." -#: clipboard.cpp:463 +#: clipboard.cpp:462 msgid "No workplane active." msgstr "Es ist keine Arbeitsebene aktiv." -#: confscreen.cpp:418 +#: confscreen.cpp:376 msgid "Bad format: specify coordinates as x, y, z" msgstr "Ungültiges Format: geben Sie Koordinaten als x, y, z an" -#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858 msgid "Bad format: specify color as r, g, b" msgstr "Ungültiges Format: geben Sie Farben als r, g, b an" -#: confscreen.cpp:454 +#: confscreen.cpp:412 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." @@ -82,25 +82,25 @@ msgstr "" "Der Perspektivfaktor wird sich nicht auswirken, bis Sie Ansicht -> " "Perspektive Projektion aktivieren." -#: confscreen.cpp:467 confscreen.cpp:477 +#: confscreen.cpp:430 confscreen.cpp:440 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "Geben Sie 0 bis %d Ziffern nach dem Dezimalzeichen an." -#: confscreen.cpp:489 +#: confscreen.cpp:452 msgid "Export scale must not be zero!" msgstr "Der Exportmaßstab darf nicht Null sein!" -#: confscreen.cpp:501 +#: confscreen.cpp:464 msgid "Cutter radius offset must not be negative!" msgstr "Der Werkzeugradialabstand darf nicht negativ sein!" -#: confscreen.cpp:555 +#: confscreen.cpp:518 msgid "Bad value: autosave interval should be positive" msgstr "" "Ungültiger Wert: Interval für automatisches Speichern muss positiv sein" -#: confscreen.cpp:558 +#: confscreen.cpp:521 msgid "Bad format: specify interval in integral minutes" msgstr "Ungültiges Format: geben Sie das Interval in ganzen Minuten an" @@ -171,115 +171,135 @@ msgstr "Längenverhältnis" #: constraint.cpp:25 msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" msgid "length-difference" msgstr "Längendifferenz" -#: constraint.cpp:26 +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "" + +#: constraint.cpp:30 msgctxt "constr-name" msgid "symmetric" msgstr "Symmetrisch" -#: constraint.cpp:27 +#: constraint.cpp:31 msgctxt "constr-name" msgid "symmetric-h" msgstr "Symmetrisch-H" -#: constraint.cpp:28 +#: constraint.cpp:32 msgctxt "constr-name" msgid "symmetric-v" msgstr "Symmetrisch-V" -#: constraint.cpp:29 +#: constraint.cpp:33 msgctxt "constr-name" msgid "symmetric-line" msgstr "Symmetrisch-Linie" -#: constraint.cpp:30 +#: constraint.cpp:34 msgctxt "constr-name" msgid "at-midpoint" msgstr "auf-Mittelpunkt" -#: constraint.cpp:31 +#: constraint.cpp:35 msgctxt "constr-name" msgid "horizontal" msgstr "Horizontal" -#: constraint.cpp:32 +#: constraint.cpp:36 msgctxt "constr-name" msgid "vertical" msgstr "Vertikal" -#: constraint.cpp:33 +#: constraint.cpp:37 msgctxt "constr-name" msgid "diameter" msgstr "Durchmesser" -#: constraint.cpp:34 +#: constraint.cpp:38 msgctxt "constr-name" msgid "pt-on-circle" msgstr "Pkt-auf-Kreis" -#: constraint.cpp:35 +#: constraint.cpp:39 msgctxt "constr-name" msgid "same-orientation" msgstr "gl-Orientierung" -#: constraint.cpp:36 +#: constraint.cpp:40 msgctxt "constr-name" msgid "angle" msgstr "Winkel" -#: constraint.cpp:37 +#: constraint.cpp:41 msgctxt "constr-name" msgid "parallel" msgstr "Parallel" -#: constraint.cpp:38 +#: constraint.cpp:42 msgctxt "constr-name" msgid "arc-line-tangent" msgstr "Bogen-Linie-Tangente" -#: constraint.cpp:39 +#: constraint.cpp:43 msgctxt "constr-name" msgid "cubic-line-tangent" msgstr "Kub-Linie-Tangente" -#: constraint.cpp:40 +#: constraint.cpp:44 msgctxt "constr-name" msgid "curve-curve-tangent" msgstr "Kurve-Kurve-Tangente" -#: constraint.cpp:41 +#: constraint.cpp:45 msgctxt "constr-name" msgid "perpendicular" msgstr "Rechtwinklig" -#: constraint.cpp:42 +#: constraint.cpp:46 msgctxt "constr-name" msgid "eq-radius" msgstr "gl-Radius" -#: constraint.cpp:43 +#: constraint.cpp:47 msgctxt "constr-name" msgid "eq-angle" msgstr "gl-Winkel" -#: constraint.cpp:44 +#: constraint.cpp:48 msgctxt "constr-name" msgid "eq-line-len-arc-len" msgstr "gl-Linie-Länge-Bogen-Länge" -#: constraint.cpp:45 +#: constraint.cpp:49 msgctxt "constr-name" msgid "lock-where-dragged" msgstr "Fix-an-Position" -#: constraint.cpp:46 +#: constraint.cpp:50 msgctxt "constr-name" msgid "comment" msgstr "Kommentar" -#: constraint.cpp:140 +#: constraint.cpp:144 msgid "" "The tangent arc and line segment must share an endpoint. Constrain them with " "Constrain -> On Point before constraining tangent." @@ -288,7 +308,7 @@ msgstr "" "haben. Schränken Sie mit \"Einschränkung / Auf Punkt\" ein, bevor Sie die " "Tangente einschränken. -> Sc" -#: constraint.cpp:158 +#: constraint.cpp:163 msgid "" "The tangent cubic and line segment must share an endpoint. Constrain them " "with Constrain -> On Point before constraining tangent." @@ -297,7 +317,7 @@ msgstr "" "haben. Schränken Sie mit \"Einschränkung / Auf Punkt\" ein, bevor Sie die " "Tangente einschränken. -> Sc" -#: constraint.cpp:183 +#: constraint.cpp:189 msgid "" "The curves must share an endpoint. Constrain them with Constrain -> On Point " "before constraining tangent." @@ -305,7 +325,7 @@ msgstr "" "Die Kurven müssen einen gemeinsamen Endpunkt haben. Schränken Sie mit " "\"Einschränkung / Auf Punkt\" ein, bevor Sie die Tangente einschränken. -> Sc" -#: constraint.cpp:231 +#: constraint.cpp:238 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -329,7 +349,7 @@ msgstr "" " * eine Seitenfläche und ein Punkt [minimaler Abstand]\n" " * ein Kreis oder ein Bogen [Durchmesser]\n" -#: constraint.cpp:284 +#: constraint.cpp:291 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -349,7 +369,7 @@ msgstr "" " * einen Punkt und einen Kreis oder Bogen [Punkt auf Kurve]\n" " * einen Punkt und eine Seitenfläche [Punkt auf Fläche]\n" -#: constraint.cpp:346 +#: constraint.cpp:353 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -380,30 +400,26 @@ msgstr "" " * ein Liniensegment und ein Bogen [Länge des Liniensegments gleich " "Bogenlänge]\n" -#: constraint.cpp:385 +#: constraint.cpp:407 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"Ungültige Auswahl für Einschränkung \"Längenverhältnis\". Diese " -"Einschränkung ist anwendbar auf:\n" -"\n" -" * zwei Liniensegmente\n" -#: constraint.cpp:402 +#: constraint.cpp:441 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"Ungültige Auswahl für Einschränkung \"Längendifferenz\". Diese Einschränkung " -"ist anwendbar auf:\n" -"\n" -" * zwei Liniensegmente\n" -#: constraint.cpp:428 +#: constraint.cpp:472 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -417,7 +433,7 @@ msgstr "" " * ein Liniensegment und eine Arbeitsebene [Mittelpunkt der Linie auf " "Ebene]\n" -#: constraint.cpp:486 +#: constraint.cpp:530 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -438,7 +454,7 @@ msgstr "" " * eine Arbeitsebene und zwei Punkte oder ein Liniensegment [symmetrisch " "zu Arbeitsebene]\n" -#: constraint.cpp:500 +#: constraint.cpp:545 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." @@ -446,7 +462,7 @@ msgstr "" "Eine Arbeitsebene muss aktiv sein, um die Symmetrie ohne explizite " "Symmetrieebene einzuschränken." -#: constraint.cpp:530 +#: constraint.cpp:579 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." @@ -454,7 +470,7 @@ msgstr "" "Aktivieren Sie eine Arbeitsebene (mit Skizze -> In Arbeitsebene), bevor Sie " "horizontal oder vertikal einschränken." -#: constraint.cpp:543 +#: constraint.cpp:592 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -468,7 +484,7 @@ msgstr "" " * zwei Punkte\n" " * ein Liniensegment\n" -#: constraint.cpp:564 +#: constraint.cpp:613 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -480,15 +496,15 @@ msgstr "" "\n" " * zwei Normale\n" -#: constraint.cpp:614 +#: constraint.cpp:663 msgid "Must select an angle constraint." msgstr "Sie müssen einen eingeschränkten Winkel auswählen." -#: constraint.cpp:627 +#: constraint.cpp:676 msgid "Must select a constraint with associated label." msgstr "Sie müssen eine Einschränkung mit zugeordneter Kennzeichnung angeben." -#: constraint.cpp:638 +#: constraint.cpp:687 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -503,12 +519,12 @@ msgstr "" " * ein Liniensegment und eine Normale\n" " * zwei Normale\n" -#: constraint.cpp:701 +#: constraint.cpp:754 msgid "Curve-curve tangency must apply in workplane." msgstr "" "Die Kurven-Kurven-Tangente muss in der Arbeitsebene eingeschränkt werden." -#: constraint.cpp:711 +#: constraint.cpp:766 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -527,7 +543,7 @@ msgstr "" " * zwei Liniensegmente, Bögen oder Beziers mit gemeinsamem Endpunkt " "[Tangente]\n" -#: constraint.cpp:729 +#: constraint.cpp:784 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -542,7 +558,7 @@ msgstr "" " * ein Liniensegment und eine Normale\n" " * zwei Normale\n" -#: constraint.cpp:744 +#: constraint.cpp:799 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -554,7 +570,11 @@ msgstr "" "\n" " * einen Punkt\n" -#: constraint.cpp:755 +#: constraint.cpp:813 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NEUER KOMMENTAR -- DOPPELKLICKEN ZUM BEARBEITEN" + +#: constraint.cpp:818 msgid "click center of comment text" msgstr "Klicken Sie auf die Mitte des Kommentartextes" @@ -583,26 +603,26 @@ msgstr "" " * einen Punkt und zwei Liniensegmente [Schnittebene durch Punkt und " "parallel zu Linien]\n" -#: export.cpp:822 +#: export.cpp:818 msgid "Active group mesh is empty; nothing to export." msgstr "Das Netz der aktiven Gruppe ist leer; es gibt nichts zu exportieren." -#: exportvector.cpp:337 +#: exportvector.cpp:336 msgid "freehand lines were replaced with continuous lines" msgstr "Freihandlinien wurden mit durchgehenden Linien ersetzt" -#: exportvector.cpp:339 +#: exportvector.cpp:338 msgid "zigzag lines were replaced with continuous lines" msgstr "Zickzacklinien wurden mit durchgehenden Linien ersetzt" -#: exportvector.cpp:593 +#: exportvector.cpp:592 msgid "" "Some aspects of the drawing have no DXF equivalent and were not exported:\n" msgstr "" "Teile der Zeichnung haben keine Entsprechung in DXF und wurden nicht " "exportiert:\n" -#: exportvector.cpp:839 +#: exportvector.cpp:838 msgid "" "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." msgstr "" @@ -619,11 +639,11 @@ msgctxt "group-name" msgid "#references" msgstr "#Referenzen" -#: file.cpp:552 +#: file.cpp:550 msgid "The file is empty. It may be corrupt." msgstr "Die Datei ist leer. Es kann beschädigt sein." -#: file.cpp:557 +#: file.cpp:555 msgid "" "Unrecognized data in file. This file may be corrupt, or from a newer version " "of the program." @@ -664,7 +684,7 @@ msgctxt "button" msgid "&No" msgstr "&Nein" -#: file.cpp:877 solvespace.cpp:569 +#: file.cpp:877 solvespace.cpp:610 msgctxt "button" msgid "&Cancel" msgstr "&Abbrechen" @@ -838,296 +858,304 @@ msgid "Use &Perspective Projection" msgstr "Perspektivische Projektion" #: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "" + +#: graphicswin.cpp:98 msgid "Dimension &Units" msgstr "Maßeinheit" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in &Millimeters" msgstr "Maße in Millimeter" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in M&eters" msgstr "Masse in M&etern" -#: graphicswin.cpp:100 +#: graphicswin.cpp:101 msgid "Dimensions in &Inches" msgstr "Maße in Zoll" #: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "" + +#: graphicswin.cpp:104 msgid "Show &Toolbar" msgstr "Werkzeugleiste anzeigen" -#: graphicswin.cpp:103 +#: graphicswin.cpp:105 msgid "Show Property Bro&wser" msgstr "Attributbrowser anzeigen" -#: graphicswin.cpp:105 +#: graphicswin.cpp:107 msgid "&Full Screen" msgstr "Vollbildschirm" -#: graphicswin.cpp:107 +#: graphicswin.cpp:109 msgid "&New Group" msgstr "Neue Gruppe" -#: graphicswin.cpp:108 +#: graphicswin.cpp:110 msgid "Sketch In &3d" msgstr "In 3D skizzieren" -#: graphicswin.cpp:109 +#: graphicswin.cpp:111 msgid "Sketch In New &Workplane" msgstr "In neuer Arbeitsebene skizzieren" -#: graphicswin.cpp:111 +#: graphicswin.cpp:113 msgid "Step &Translating" msgstr "Kopieren und verschieben" -#: graphicswin.cpp:112 +#: graphicswin.cpp:114 msgid "Step &Rotating" msgstr "Kopieren und drehen" -#: graphicswin.cpp:114 +#: graphicswin.cpp:116 msgid "E&xtrude" msgstr "E&xtrudieren" -#: graphicswin.cpp:115 +#: graphicswin.cpp:117 msgid "&Helix" msgstr "&Helix" -#: graphicswin.cpp:116 +#: graphicswin.cpp:118 msgid "&Lathe" msgstr "R&otieren" -#: graphicswin.cpp:117 +#: graphicswin.cpp:119 msgid "Re&volve" msgstr "D&rehen" -#: graphicswin.cpp:119 +#: graphicswin.cpp:121 msgid "Link / Assemble..." msgstr "Verknüpfen / Zusammensetzen" -#: graphicswin.cpp:120 +#: graphicswin.cpp:122 msgid "Link Recent" msgstr "Letzte verknüpfen" -#: graphicswin.cpp:122 +#: graphicswin.cpp:124 msgid "&Sketch" msgstr "&Skizze" -#: graphicswin.cpp:123 +#: graphicswin.cpp:125 msgid "In &Workplane" msgstr "In Arbeitsebene" -#: graphicswin.cpp:124 +#: graphicswin.cpp:126 msgid "Anywhere In &3d" msgstr "Im 3D-Raum" -#: graphicswin.cpp:126 +#: graphicswin.cpp:128 msgid "Datum &Point" msgstr "Bezugspunkt" -#: graphicswin.cpp:127 +#: graphicswin.cpp:129 msgid "&Workplane" msgstr "Arbeits&ebene" -#: graphicswin.cpp:129 +#: graphicswin.cpp:131 msgid "Line &Segment" msgstr "&Linie" -#: graphicswin.cpp:130 +#: graphicswin.cpp:132 msgid "C&onstruction Line Segment" msgstr "K&onstruktionslinie" -#: graphicswin.cpp:131 +#: graphicswin.cpp:133 msgid "&Rectangle" msgstr "&Rechteck" -#: graphicswin.cpp:132 +#: graphicswin.cpp:134 msgid "&Circle" msgstr "&Kreis" -#: graphicswin.cpp:133 +#: graphicswin.cpp:135 msgid "&Arc of a Circle" msgstr "Kreisbogen" -#: graphicswin.cpp:134 +#: graphicswin.cpp:136 msgid "&Bezier Cubic Spline" msgstr "Kubischer &Bezier-Spline" -#: graphicswin.cpp:136 +#: graphicswin.cpp:138 msgid "&Text in TrueType Font" msgstr "&Text in Truetype-Font" -#: graphicswin.cpp:137 +#: graphicswin.cpp:139 msgid "&Image" msgstr "B&ild" -#: graphicswin.cpp:139 +#: graphicswin.cpp:141 msgid "To&ggle Construction" msgstr "Konstruktionselement an/aus" -#: graphicswin.cpp:140 +#: graphicswin.cpp:142 msgid "Tangent &Arc at Point" msgstr "Bogentangente an Punkt" -#: graphicswin.cpp:141 +#: graphicswin.cpp:143 msgid "Split Curves at &Intersection" msgstr "Kurven im Schnittpunkt trennen" -#: graphicswin.cpp:143 +#: graphicswin.cpp:145 msgid "&Constrain" msgstr "&Einschränkung" -#: graphicswin.cpp:144 +#: graphicswin.cpp:146 msgid "&Distance / Diameter" msgstr "Abstand / Durchmesser" -#: graphicswin.cpp:145 +#: graphicswin.cpp:147 msgid "Re&ference Dimension" msgstr "Referenzangabe" -#: graphicswin.cpp:146 +#: graphicswin.cpp:148 msgid "A&ngle" msgstr "Winkel" -#: graphicswin.cpp:147 +#: graphicswin.cpp:149 msgid "Reference An&gle" msgstr "Referenzwinkel" -#: graphicswin.cpp:148 +#: graphicswin.cpp:150 msgid "Other S&upplementary Angle" msgstr "Komplementärwinkel" -#: graphicswin.cpp:149 +#: graphicswin.cpp:151 msgid "Toggle R&eference Dim" msgstr "Referenzangabe ein/aus" -#: graphicswin.cpp:151 +#: graphicswin.cpp:153 msgid "&Horizontal" msgstr "Horizontal" -#: graphicswin.cpp:152 +#: graphicswin.cpp:154 msgid "&Vertical" msgstr "&Vertikal" -#: graphicswin.cpp:154 +#: graphicswin.cpp:156 msgid "&On Point / Curve / Plane" msgstr "Auf Punkt / Kurve / Ebene" -#: graphicswin.cpp:155 +#: graphicswin.cpp:157 msgid "E&qual Length / Radius / Angle" msgstr "Gleicher Abstand / Radius / Winkel" -#: graphicswin.cpp:156 -msgid "Length Ra&tio" -msgstr "Längenverhältnis" - -#: graphicswin.cpp:157 -msgid "Length Diff&erence" -msgstr "Längendifferenz" - #: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "" + +#: graphicswin.cpp:160 msgid "At &Midpoint" msgstr "Auf &Mittelpunkt" -#: graphicswin.cpp:159 +#: graphicswin.cpp:161 msgid "S&ymmetric" msgstr "Symmetrisch" -#: graphicswin.cpp:160 +#: graphicswin.cpp:162 msgid "Para&llel / Tangent" msgstr "Paral&llel / Tangente" -#: graphicswin.cpp:161 +#: graphicswin.cpp:163 msgid "&Perpendicular" msgstr "Rechtwinklig" -#: graphicswin.cpp:162 +#: graphicswin.cpp:164 msgid "Same Orient&ation" msgstr "Gleiche Orientierung" -#: graphicswin.cpp:163 +#: graphicswin.cpp:165 msgid "Lock Point Where &Dragged" msgstr "Punkt an Position fixieren" -#: graphicswin.cpp:165 +#: graphicswin.cpp:167 msgid "Comment" msgstr "Kommentar" -#: graphicswin.cpp:167 +#: graphicswin.cpp:169 msgid "&Analyze" msgstr "&Analyse" -#: graphicswin.cpp:168 +#: graphicswin.cpp:170 msgid "Measure &Volume" msgstr "&Volumen bestimmen" -#: graphicswin.cpp:169 +#: graphicswin.cpp:171 msgid "Measure A&rea" msgstr "Fläche bestimmen" -#: graphicswin.cpp:170 +#: graphicswin.cpp:172 msgid "Measure &Perimeter" msgstr "Umfang bestimmen" -#: graphicswin.cpp:171 +#: graphicswin.cpp:173 msgid "Show &Interfering Parts" msgstr "Überlagernde Teile anzeigen" -#: graphicswin.cpp:172 +#: graphicswin.cpp:174 msgid "Show &Naked Edges" msgstr "Freiliegende Kanten anzeigen" -#: graphicswin.cpp:173 +#: graphicswin.cpp:175 msgid "Show &Center of Mass" msgstr "Massenmittelpunkt anzeigen" -#: graphicswin.cpp:175 +#: graphicswin.cpp:177 msgid "Show &Underconstrained Points" msgstr "&Unterbeschränkte Punkte anzeigen" -#: graphicswin.cpp:177 +#: graphicswin.cpp:179 msgid "&Trace Point" msgstr "Punkt nachzeichnen" -#: graphicswin.cpp:178 +#: graphicswin.cpp:180 msgid "&Stop Tracing..." msgstr "Nachzeichnen beenden" -#: graphicswin.cpp:179 +#: graphicswin.cpp:181 msgid "Step &Dimension..." msgstr "Schrittgröße…" -#: graphicswin.cpp:181 +#: graphicswin.cpp:183 msgid "&Help" msgstr "&Hilfe" -#: graphicswin.cpp:182 +#: graphicswin.cpp:184 msgid "&Language" msgstr "Sprache" -#: graphicswin.cpp:183 +#: graphicswin.cpp:185 msgid "&Website / Manual" msgstr "&Website / Anleitung" -#: graphicswin.cpp:185 +#: graphicswin.cpp:187 msgid "&About" msgstr "Über" -#: graphicswin.cpp:355 +#: graphicswin.cpp:361 msgid "(no recent files)" msgstr "(keine vorhergehenden Dateien)" -#: graphicswin.cpp:363 +#: graphicswin.cpp:369 #, c-format msgid "File '%s' does not exist." msgstr "Datei '%s' existiert nicht." -#: graphicswin.cpp:725 +#: graphicswin.cpp:736 msgid "No workplane is active, so the grid will not appear." msgstr "" "Das Raster wird nicht angezeigt, weil keine Arbeitsebene ausgewählt ist." -#: graphicswin.cpp:740 +#: graphicswin.cpp:751 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1141,20 +1169,20 @@ msgstr "" "Ändern Sie den Faktor für die Perspektivprojektion in der " "Konfigurationsmaske. Ein typischer Wert ist ca. 0,3." -#: graphicswin.cpp:819 +#: graphicswin.cpp:836 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" "Wählen Sie einen Punkt aus; dieser Punkt wird im Mittelpunkt der " "Bildschirmansicht sein." -#: graphicswin.cpp:1114 +#: graphicswin.cpp:1136 msgid "No additional entities share endpoints with the selected entities." msgstr "" "Die ausgewählten Objekte teilen keine gemeinsamen Endpunkte mit anderen " "Objekten." -#: graphicswin.cpp:1132 +#: graphicswin.cpp:1154 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." @@ -1162,7 +1190,7 @@ msgstr "" "Für diesen Befehl wählen Sie einen Punkt oder ein anderes Objekt von einem " "verknüpften Teil aus, oder aktivieren Sie eine verknüpfte Gruppe." -#: graphicswin.cpp:1155 +#: graphicswin.cpp:1177 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." @@ -1171,7 +1199,7 @@ msgstr "" "(mit Skizze -> In Arbeitsebene), um die Ebene für das Gitterraster zu " "definieren." -#: graphicswin.cpp:1162 +#: graphicswin.cpp:1184 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." @@ -1180,13 +1208,13 @@ msgstr "" "für Punkte, Textkommentare, oder Einschränkungen mit einer Bezeichnung. Um " "eine Linie auf das Raster auszurichten, wählen Sie deren Endpunkte aus." -#: graphicswin.cpp:1247 +#: graphicswin.cpp:1269 msgid "No workplane selected. Activating default workplane for this group." msgstr "" "Es wurde keine Arbeitsebene ausgewählt. Die Standard-Arbeitsebene für diese " "Gruppe wird aktiviert." -#: graphicswin.cpp:1250 +#: graphicswin.cpp:1272 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" @@ -1196,7 +1224,7 @@ msgstr "" "standardmäßige Arbeitsebene. Wählen Sie eine Arbeitsebene aus, oder " "erstellen Sie eine Gruppe in einer neuen Arbeitsebene." -#: graphicswin.cpp:1271 +#: graphicswin.cpp:1293 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." @@ -1204,48 +1232,48 @@ msgstr "" "Ungültige Auswahl für Bogentangente an Punkt. Wählen Sie einen einzelnen " "Punkt. Um die Bogenparameter anzugeben, wählen Sie nichts aus." -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1304 msgid "click point on arc (draws anti-clockwise)" msgstr "" "Erstellen Sie einen Punkt auf dem Bogen (zeichnet im Gegenuhrzeigersinn)" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1305 msgid "click to place datum point" msgstr "Klicken Sie, um einen Bezugspunkt zu platzieren" -#: graphicswin.cpp:1284 +#: graphicswin.cpp:1306 msgid "click first point of line segment" msgstr "Klicken Sie auf den ersten Punkt des Liniensegments" -#: graphicswin.cpp:1286 +#: graphicswin.cpp:1308 msgid "click first point of construction line segment" msgstr "Klicken Sie auf den ersten Punkt der Konstruktionslinie" -#: graphicswin.cpp:1287 +#: graphicswin.cpp:1309 msgid "click first point of cubic segment" msgstr "Klicken Sie auf den ersten Punkt der kubischen Linie" -#: graphicswin.cpp:1288 +#: graphicswin.cpp:1310 msgid "click center of circle" msgstr "Klicken Sie auf den Kreismittelpunkt" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1311 msgid "click origin of workplane" msgstr "Klicken Sie auf den Ursprungspunkt der Arbeitsebene" -#: graphicswin.cpp:1290 +#: graphicswin.cpp:1312 msgid "click one corner of rectangle" msgstr "Klicken Sie auf eine Ecke des Rechtecks" -#: graphicswin.cpp:1291 +#: graphicswin.cpp:1313 msgid "click top left of text" msgstr "Klicken Sie auf die obere linke Ecke des Texts" -#: graphicswin.cpp:1297 +#: graphicswin.cpp:1319 msgid "click top left of image" msgstr "Klicken Sie auf die obere linke Ecke des Bilds" -#: graphicswin.cpp:1309 +#: graphicswin.cpp:1345 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1258,24 +1286,18 @@ msgctxt "group-name" msgid "sketch-in-3d" msgstr "Skizze-in-3D" -#: group.cpp:142 +#: group.cpp:150 msgid "" "Bad selection for new sketch in workplane. This group can be created with:\n" "\n" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, parallel to the " "lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" msgstr "" -"Ungültige Auswahl für Skizze in neuer Arbeitsebene. Diese Gruppe kann " -"erstellt werden mit:\n" -"\n" -" * einem Punkt (durch den Punkt, orthogonal zu den Koordinatenachsen)\n" -" * einem Punkt und zwei Liniensegmenten (durch den Punkt, parallel zu den " -"Linien)\n" -" * einer Arbeitsebene (Kopie der Arbeitsebene)\n" -#: group.cpp:154 +#: group.cpp:166 msgid "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " "will be extruded normal to the workplane." @@ -1283,16 +1305,16 @@ msgstr "" "Aktivieren Sie vor der Extrusion eine Arbeitsebene (mit Skizze -> In " "Arbeitsebene). Die Skizze wird senkrecht zur Arbeitsebene extrudiert" -#: group.cpp:163 +#: group.cpp:175 msgctxt "group-name" msgid "extrude" msgstr "Extrusion" -#: group.cpp:168 +#: group.cpp:180 msgid "Lathe operation can only be applied to planar sketches." msgstr "Rotieren kann nur mit planaren Skizzen ausgeführt werden." -#: group.cpp:179 +#: group.cpp:191 msgid "" "Bad selection for new lathe group. This group can be created with:\n" "\n" @@ -1307,16 +1329,16 @@ msgstr "" "eine Achse parallel zur Linie/Normalen, durch den Punkt)\n" " * einem Liniensegment (Drehung um das Liniensegment)\n" -#: group.cpp:189 +#: group.cpp:201 msgctxt "group-name" msgid "lathe" msgstr "Drehung" -#: group.cpp:194 +#: group.cpp:206 msgid "Revolve operation can only be applied to planar sketches." msgstr "Revolve kann nur mit planaren Skizzen ausgeführt werden." -#: group.cpp:205 +#: group.cpp:217 msgid "" "Bad selection for new revolve group. This group can be created with:\n" "\n" @@ -1331,16 +1353,16 @@ msgstr "" "Achse parallel zu Linie / Normale, durch Punkt)\n" " * einem Liniensegment (gedreht um Liniensegment)\n" -#: group.cpp:217 +#: group.cpp:229 msgctxt "group-name" msgid "revolve" msgstr "Revolve" -#: group.cpp:222 +#: group.cpp:234 msgid "Helix operation can only be applied to planar sketches." msgstr "Helix kann nur mit planaren Skizzen ausgeführt werden." -#: group.cpp:233 +#: group.cpp:245 msgid "" "Bad selection for new helix group. This group can be created with:\n" "\n" @@ -1355,12 +1377,12 @@ msgstr "" "Achse parallel zu Linie / Normale, durch Punkt)\n" " * einem Liniensegment (gedreht um Liniensegment)\n" -#: group.cpp:245 +#: group.cpp:257 msgctxt "group-name" msgid "helix" msgstr "Helix" -#: group.cpp:258 +#: group.cpp:270 msgid "" "Bad selection for new rotation. This group can be created with:\n" "\n" @@ -1376,41 +1398,41 @@ msgstr "" " * einem Punkt und einer Linie oder einer Normale (gedreht um eine Achse " "durch den Punkt, parallel zur Linie / Normale)\n" -#: group.cpp:271 +#: group.cpp:283 msgctxt "group-name" msgid "rotate" msgstr "Drehen" -#: group.cpp:282 +#: group.cpp:294 msgctxt "group-name" msgid "translate" msgstr "Versetzen" -#: group.cpp:400 +#: group.cpp:416 msgid "(unnamed)" msgstr "unbenannt" -#: groupmesh.cpp:709 +#: groupmesh.cpp:707 msgid "not closed contour, or not all same style!" msgstr "Kontur nicht geschlossen, oder kein einheitlicher Linientyp!" -#: groupmesh.cpp:722 +#: groupmesh.cpp:720 msgid "points not all coplanar!" msgstr "Punkte sind nicht alle koplanar!" -#: groupmesh.cpp:724 +#: groupmesh.cpp:722 msgid "contour is self-intersecting!" msgstr "Kontur überschneidet sich selbst!" -#: groupmesh.cpp:726 +#: groupmesh.cpp:724 msgid "zero-length edge!" msgstr "Kante mit Länge Null!" -#: modify.cpp:254 +#: modify.cpp:252 msgid "Must be sketching in workplane to create tangent arc." msgstr "Eine Bogentangente kann nur in einer Arbeitsebene erstellt werden." -#: modify.cpp:301 +#: modify.cpp:299 msgid "" "To create a tangent arc, select a point where two non-construction lines or " "circles in this group and workplane join." @@ -1419,7 +1441,7 @@ msgstr "" "nicht-Konstruktionslinien oder -kreise in dieser Gruppe und Arbeitsebene " "treffen. " -#: modify.cpp:388 +#: modify.cpp:386 msgid "" "Couldn't round this corner. Try a smaller radius, or try creating the " "desired geometry by hand with tangency constraints." @@ -1428,17 +1450,17 @@ msgstr "" "Radius, oder erstellen Sie die gewünschte Geometrie von Hand mit \"Tangente" "\"-Einschränkungen." -#: modify.cpp:597 +#: modify.cpp:595 msgid "Couldn't split this entity; lines, circles, or cubics only." msgstr "" "Dieses Objekt konnte nicht geteilt werden. Dies geht nur für Linien, Kreise " "oder kubische Splines." -#: modify.cpp:624 +#: modify.cpp:622 msgid "Must be sketching in workplane to split." msgstr "Trennen ist nur in einer Arbeitsebene möglich." -#: modify.cpp:631 +#: modify.cpp:629 msgid "" "Select two entities that intersect each other (e.g. two lines/circles/arcs " "or a line/circle/arc and a point)." @@ -1446,109 +1468,109 @@ msgstr "" "Wählen Sie zwei Objekte aus, die sich schneiden (z.B. zwei Linien/Kreise/" "Bögen, oder eine Linie/Kreis/Bogen und ein Punkt)." -#: modify.cpp:736 +#: modify.cpp:734 msgid "Can't split; no intersection found." msgstr "Trennen nicht möglich; keine Überschneidung gefunden." -#: mouse.cpp:559 +#: mouse.cpp:557 msgid "Assign to Style" msgstr "Linientyp zuordnen" -#: mouse.cpp:575 +#: mouse.cpp:573 msgid "No Style" msgstr "Kein Linientyp" -#: mouse.cpp:578 +#: mouse.cpp:576 msgid "Newly Created Custom Style..." msgstr "Neu erstellter benutzerdefinierter Linientyp…" -#: mouse.cpp:585 +#: mouse.cpp:583 msgid "Group Info" msgstr "Info zu Gruppe" -#: mouse.cpp:605 +#: mouse.cpp:603 msgid "Style Info" msgstr "Info zu Linientyp" -#: mouse.cpp:625 +#: mouse.cpp:623 msgid "Select Edge Chain" msgstr "Kantenverlauf auswählen" -#: mouse.cpp:631 +#: mouse.cpp:629 msgid "Toggle Reference Dimension" msgstr "Von/zu Referenzangabe wechseln" -#: mouse.cpp:637 +#: mouse.cpp:635 msgid "Other Supplementary Angle" msgstr "Anderer Komplementärwinkel" -#: mouse.cpp:642 +#: mouse.cpp:640 msgid "Snap to Grid" msgstr "Auf Raster ausrichten" -#: mouse.cpp:651 +#: mouse.cpp:649 msgid "Remove Spline Point" msgstr "Spline-Punkt löschen" -#: mouse.cpp:686 +#: mouse.cpp:684 msgid "Add Spline Point" msgstr "Spline-Punkt hinzufügen" -#: mouse.cpp:690 +#: mouse.cpp:688 msgid "Cannot add spline point: maximum number of points reached." msgstr "" "Spline-Punkt kann nicht hinzugefügt werden: maximale Anzahl der Punkte " "erreicht." -#: mouse.cpp:715 +#: mouse.cpp:713 msgid "Toggle Construction" msgstr "Konstruktionselement an/aus" -#: mouse.cpp:730 +#: mouse.cpp:729 msgid "Delete Point-Coincident Constraint" msgstr "Einschränkung \"Punkte deckungsgleich\" löschen" -#: mouse.cpp:749 +#: mouse.cpp:747 msgid "Cut" msgstr "Ausschneiden" -#: mouse.cpp:751 +#: mouse.cpp:749 msgid "Copy" msgstr "Kopieren" -#: mouse.cpp:755 +#: mouse.cpp:753 msgid "Select All" msgstr "Alle auswählen" -#: mouse.cpp:760 +#: mouse.cpp:758 msgid "Paste" msgstr "Einfügen" -#: mouse.cpp:762 +#: mouse.cpp:760 msgid "Paste Transformed..." msgstr "Einfügen und transformieren…" -#: mouse.cpp:767 +#: mouse.cpp:765 msgid "Delete" msgstr "Löschen" -#: mouse.cpp:770 +#: mouse.cpp:768 msgid "Unselect All" msgstr "Alle deselektieren" -#: mouse.cpp:777 +#: mouse.cpp:775 msgid "Unselect Hovered" msgstr "Aktive deselektieren" -#: mouse.cpp:786 +#: mouse.cpp:784 msgid "Zoom to Fit" msgstr "Zoom an Bildschirm anpassen" -#: mouse.cpp:988 mouse.cpp:1275 +#: mouse.cpp:986 mouse.cpp:1274 msgid "click next point of line, or press Esc" msgstr "Klicken Sie auf den nächsten Punkt der Linie, oder drücken Sie Esc" -#: mouse.cpp:994 +#: mouse.cpp:992 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1556,15 +1578,15 @@ msgstr "" "Ein Rechteck kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " "Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." -#: mouse.cpp:1028 +#: mouse.cpp:1026 msgid "click to place other corner of rectangle" msgstr "Klicken Sie auf die gegenüberliegende Ecke des Rechtecks" -#: mouse.cpp:1048 +#: mouse.cpp:1047 msgid "click to set radius" msgstr "Klicken Sie, um den Radius festzulegen" -#: mouse.cpp:1053 +#: mouse.cpp:1052 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1572,23 +1594,23 @@ msgstr "" "Ein Kreisbogen kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " "Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." -#: mouse.cpp:1072 +#: mouse.cpp:1071 msgid "click to place point" msgstr "Klicken Sie, um einen Punkt zu platzieren" -#: mouse.cpp:1088 +#: mouse.cpp:1087 msgid "click next point of cubic, or press Esc" msgstr "" "Klicken Sie auf den nächsten Punkt der kubischen Linie, oder drücken Sie Esc" -#: mouse.cpp:1093 +#: mouse.cpp:1092 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" "Eine Arbeitsebene ist bereits aktiv. Skizzieren Sie in 3D, bevor Sie eine " "neue Arbeitsebene erstellen." -#: mouse.cpp:1109 +#: mouse.cpp:1108 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1596,11 +1618,11 @@ msgstr "" "Text kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " "Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." -#: mouse.cpp:1126 +#: mouse.cpp:1125 msgid "click to place bottom right of text" msgstr "Klicken Sie auf die untere rechte Ecke des Texts" -#: mouse.cpp:1132 +#: mouse.cpp:1131 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1608,194 +1630,200 @@ msgstr "" "Das Bild kann nicht in 3D erstellt werden. Aktivieren Sie zuerst eine " "Arbeitsebene mit \"Skizze -> In Arbeitsebene\"." -#: mouse.cpp:1159 -msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -msgstr "NEUER KOMMENTAR -- DOPPELKLICKEN ZUM BEARBEITEN" - -#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552 msgctxt "file-type" msgid "SolveSpace models" msgstr "SolveSpace-Modelle" -#: platform/gui.cpp:90 +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "" + +#: platform/gui.cpp:91 msgctxt "file-type" msgid "IDF circuit board" msgstr "IDF Leiterplatte" -#: platform/gui.cpp:94 +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "" + +#: platform/gui.cpp:96 msgctxt "file-type" msgid "PNG image" msgstr "PNG-Datei" -#: platform/gui.cpp:98 +#: platform/gui.cpp:100 msgctxt "file-type" msgid "STL mesh" msgstr "STL-Netz" -#: platform/gui.cpp:99 +#: platform/gui.cpp:101 msgctxt "file-type" msgid "Wavefront OBJ mesh" msgstr "Wavefront OBJ-Netz" -#: platform/gui.cpp:100 +#: platform/gui.cpp:102 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" msgstr "Three.js-kompatibles Netz, mit Ansicht" -#: platform/gui.cpp:101 +#: platform/gui.cpp:103 msgctxt "file-type" msgid "Three.js-compatible mesh, mesh only" msgstr "Three.js-kompatibles Netz, nur Netz" -#: platform/gui.cpp:102 +#: platform/gui.cpp:104 msgctxt "file-type" msgid "VRML text file" msgstr "VRML Textdatei" -#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 msgctxt "file-type" msgid "STEP file" msgstr "STEP-Datei" -#: platform/gui.cpp:110 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "PDF file" msgstr "PDF-Datei" -#: platform/gui.cpp:111 +#: platform/gui.cpp:113 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "Eingebettetes Postscript" -#: platform/gui.cpp:112 +#: platform/gui.cpp:114 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "Skalierbare Vektorgrafik" -#: platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:116 platform/gui.cpp:123 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "DXF-Datei (AutoCAD 2007)" -#: platform/gui.cpp:115 +#: platform/gui.cpp:117 msgctxt "file-type" msgid "HPGL file" msgstr "HPGL-Datei" -#: platform/gui.cpp:116 +#: platform/gui.cpp:118 msgctxt "file-type" msgid "G Code" msgstr "G-Code" -#: platform/gui.cpp:125 +#: platform/gui.cpp:127 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "AutoCAD DXF- und DWG-Dateien" -#: platform/gui.cpp:129 +#: platform/gui.cpp:131 msgctxt "file-type" msgid "Comma-separated values" msgstr "Werte durch Komma getrennt (CSV)" -#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641 msgid "untitled" msgstr "unbenannt" -#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 -#: platform/guiwin.cpp:1582 +#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445 +#: platform/guiwin.cpp:1639 msgctxt "title" msgid "Save File" msgstr "Datei speichern" -#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 -#: platform/guiwin.cpp:1584 +#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428 +#: platform/guiwin.cpp:1645 msgctxt "title" msgid "Open File" msgstr "Datei öffnen" -#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418 msgctxt "button" msgid "_Cancel" msgstr "_Abbrechen" -#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416 msgctxt "button" msgid "_Save" msgstr "_Speichern" -#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417 msgctxt "button" msgid "_Open" msgstr "_Öffnen" -#: solvespace.cpp:169 +#: solvespace.cpp:170 msgctxt "title" msgid "Autosave Available" msgstr "Automatische Sicherungsdatei verfügbar" -#: solvespace.cpp:170 +#: solvespace.cpp:171 msgctxt "dialog" msgid "An autosave file is available for this sketch." msgstr "Eine automatische Sicherung ist für diese Skizze verfügbar." -#: solvespace.cpp:171 +#: solvespace.cpp:172 msgctxt "dialog" msgid "Do you want to load the autosave file instead?" msgstr "Wollen Sie die automatische Sicherungsdatei stattdessen laden?" -#: solvespace.cpp:172 +#: solvespace.cpp:173 msgctxt "button" msgid "&Load autosave" msgstr "AutoDatei &öffnen" -#: solvespace.cpp:174 +#: solvespace.cpp:175 msgctxt "button" msgid "Do&n't Load" msgstr "&Nicht laden" -#: solvespace.cpp:557 +#: solvespace.cpp:598 msgctxt "title" msgid "Modified File" msgstr "Geänderte Datei" -#: solvespace.cpp:559 +#: solvespace.cpp:600 #, c-format msgctxt "dialog" msgid "Do you want to save the changes you made to the sketch “%s”?" msgstr "Wollen Sie die Änderungen an der Skizze “%s” sichern?" -#: solvespace.cpp:562 +#: solvespace.cpp:603 msgctxt "dialog" msgid "Do you want to save the changes you made to the new sketch?" msgstr "Wollen Sie die Änderungen an der Skizze sichern?" -#: solvespace.cpp:565 +#: solvespace.cpp:606 msgctxt "dialog" msgid "Your changes will be lost if you don't save them." msgstr "Ihre Änderungen werden verworfen, wenn sie nicht abgespeichert werden." -#: solvespace.cpp:566 +#: solvespace.cpp:607 msgctxt "button" msgid "&Save" msgstr "&Sichern" -#: solvespace.cpp:568 +#: solvespace.cpp:609 msgctxt "button" msgid "Do&n't Save" msgstr "&Verwerfen" # solvespace.cpp:557 -#: solvespace.cpp:589 +#: solvespace.cpp:630 msgctxt "title" msgid "(new sketch)" msgstr "(Neue Skizze)" -#: solvespace.cpp:596 +#: solvespace.cpp:637 msgctxt "title" msgid "Property Browser" msgstr "Attribut-Browser" -#: solvespace.cpp:658 +#: solvespace.cpp:699 msgid "" "Constraints are currently shown, and will be exported in the toolpath. This " "is probably not what you want; hide them by clicking the link at the top of " @@ -1805,7 +1833,7 @@ msgstr "" "wahrscheinlich nicht. Verstecken Sie sie in dem auf den Link oben im " "Textfenster klicken." -#: solvespace.cpp:730 +#: solvespace.cpp:771 #, c-format msgid "" "Can't identify file type from file extension of filename '%s'; try .dxf or ." @@ -1814,23 +1842,23 @@ msgstr "" "Kann den Dateityp der Datei '%s' nicht auf Grund der Dateierweiterung " "erkennen. Versuchen Sie .dxf oder .dwg." -#: solvespace.cpp:778 +#: solvespace.cpp:823 msgid "Constraint must have a label, and must not be a reference dimension." msgstr "" "Die Einschränkung muss einen Namen haben, und darf keine " "Referenzdimensionierung sein." -#: solvespace.cpp:782 +#: solvespace.cpp:827 msgid "Bad selection for step dimension; select a constraint." msgstr "" "Falsche Auswahl für die Schrittdimensionierung. Wählen Sie eine " "Einschränkung." -#: solvespace.cpp:806 +#: solvespace.cpp:851 msgid "The assembly does not interfere, good." msgstr "Der Zusammenbau funktioniert, gut." -#: solvespace.cpp:822 +#: solvespace.cpp:867 #, c-format msgid "" "The volume of the solid model is:\n" @@ -1841,7 +1869,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:831 +#: solvespace.cpp:876 #, c-format msgid "" "\n" @@ -1854,7 +1882,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:836 +#: solvespace.cpp:881 msgid "" "\n" "\n" @@ -1866,7 +1894,7 @@ msgstr "" "Gekrümmte Flächen wurden als Dreiecksnetz angenähert.\n" "Das verursacht Fehler, typischerweise um 1%." -#: solvespace.cpp:851 +#: solvespace.cpp:896 #, c-format msgid "" "The surface area of the selected faces is:\n" @@ -1883,7 +1911,7 @@ msgstr "" "Kurven wurden als gerade Linienstücke angenähert.\n" "Das verursacht Fehler, typischerweise um 1%%." -#: solvespace.cpp:860 +#: solvespace.cpp:905 msgid "" "This group does not contain a correctly-formed 2d closed area. It is open, " "not coplanar, or self-intersecting." @@ -1891,7 +1919,7 @@ msgstr "" "Diese Gruppe beinhaltet keine korrekt geschlossene 2D Fläche. Sie ist offen, " "nicht koplanar, oder überschneidet sich selbst." -#: solvespace.cpp:872 +#: solvespace.cpp:917 #, c-format msgid "" "The area of the region sketched in this group is:\n" @@ -1908,7 +1936,7 @@ msgstr "" "Kurven wurden als gerade Linienstücke angenähert.\n" "Das verursacht Fehler, typischerweise um 1%%." -#: solvespace.cpp:892 +#: solvespace.cpp:937 #, c-format msgid "" "The total length of the selected entities is:\n" @@ -1925,36 +1953,36 @@ msgstr "" "Kurven wurden als gerade Linienstücke angenähert.\n" "Das verursacht Fehler, typischerweise um 1%%." -#: solvespace.cpp:898 +#: solvespace.cpp:943 msgid "Bad selection for perimeter; select line segments, arcs, and curves." msgstr "Falsche Auswahl für Umfang. Wähle Liniensegmente, Bögen und Kurven." -#: solvespace.cpp:914 +#: solvespace.cpp:959 msgid "Bad selection for trace; select a single point." msgstr "Falsche Auswahl für Punkt nachzeichnen. Wähle einen einzelnen Punkt." -#: solvespace.cpp:941 +#: solvespace.cpp:986 #, c-format msgid "Couldn't write to '%s'" msgstr "Konnte '%s' nicht schreiben" -#: solvespace.cpp:971 +#: solvespace.cpp:1016 msgid "The mesh is self-intersecting (NOT okay, invalid)." msgstr "Das Netz schneidet sich selbst: Falsch, ungültig." -#: solvespace.cpp:972 +#: solvespace.cpp:1017 msgid "The mesh is not self-intersecting (okay, valid)." msgstr "Das Netz schneidet sich nicht: Gut, gültig." -#: solvespace.cpp:974 +#: solvespace.cpp:1019 msgid "The mesh has naked edges (NOT okay, invalid)." msgstr "Das Netz hat lose Kanten: Falsch, ungültig." -#: solvespace.cpp:975 +#: solvespace.cpp:1020 msgid "The mesh is watertight (okay, valid)." msgstr "Das Netz hat keine lose Kanten: Gut, gültig." -#: solvespace.cpp:978 +#: solvespace.cpp:1023 #, c-format msgid "" "\n" @@ -1965,7 +1993,7 @@ msgstr "" "\n" "Das Modell hat %d Dreiecke, von %d Flächen." -#: solvespace.cpp:982 +#: solvespace.cpp:1027 #, c-format msgid "" "%s\n" @@ -1980,7 +2008,7 @@ msgstr "" "\n" "Keine problematischen Kanten, gut.%s" -#: solvespace.cpp:985 +#: solvespace.cpp:1030 #, c-format msgid "" "%s\n" @@ -1995,7 +2023,7 @@ msgstr "" "\n" "%d problematische Kanten, schlecht.%s" -#: solvespace.cpp:998 +#: solvespace.cpp:1043 #, c-format msgid "" "This is SolveSpace version %s.\n" @@ -2025,7 +2053,7 @@ msgstr "" "\n" "© 2008-%d Jonathan Westhues und andere.\n" -#: style.cpp:166 +#: style.cpp:185 msgid "" "Can't assign style to an entity that's derived from another entity; try " "assigning a style to this entity's parent." @@ -2034,27 +2062,27 @@ msgstr "" "Objekt abgeleitet wurde. Versuchen Sie, dem übergeordneten Objekt einen Typ " "zuzuordnen." -#: style.cpp:665 +#: style.cpp:735 msgid "Style name cannot be empty" msgstr "Name des Linientyps kann nicht leer sein." -#: textscreens.cpp:741 +#: textscreens.cpp:785 msgid "Can't repeat fewer than 1 time." msgstr "Nicht weniger als 1 Wiederholung möglich." -#: textscreens.cpp:745 +#: textscreens.cpp:789 msgid "Can't repeat more than 999 times." msgstr "Nicht mehr als 999 Wiederholungen möglich." -#: textscreens.cpp:770 +#: textscreens.cpp:814 msgid "Group name cannot be empty" msgstr "Der Name der Gruppe darf nicht leer sein." -#: textscreens.cpp:813 +#: textscreens.cpp:866 msgid "Opacity must be between zero and one." msgstr "Durchsichtigkeit muss zwischen Null und Eins sein." -#: textscreens.cpp:848 +#: textscreens.cpp:901 msgid "Radius cannot be zero or negative." msgstr "Radius darf nicht null oder negativ sein." @@ -2210,14 +2238,58 @@ msgctxt "button" msgid "&OK" msgstr "&OK" -#: view.cpp:78 +#: view.cpp:127 msgid "Scale cannot be zero or negative." msgstr "Der Maßstab kann nicht Null oder negativ sein." -#: view.cpp:90 view.cpp:99 +#: view.cpp:139 view.cpp:148 msgid "Bad format: specify x, y, z" msgstr "Ungültiges Format: geben Sie x, y, z ein" +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Einschränkung \"Längenverhältnis\". Diese " +#~ "Einschränkung ist anwendbar auf:\n" +#~ "\n" +#~ " * zwei Liniensegmente\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Einschränkung \"Längendifferenz\". Diese " +#~ "Einschränkung ist anwendbar auf:\n" +#~ "\n" +#~ " * zwei Liniensegmente\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "Längenverhältnis" + +#~ msgid "Length Diff&erence" +#~ msgstr "Längendifferenz" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "Ungültige Auswahl für Skizze in neuer Arbeitsebene. Diese Gruppe kann " +#~ "erstellt werden mit:\n" +#~ "\n" +#~ " * einem Punkt (durch den Punkt, orthogonal zu den Koordinatenachsen)\n" +#~ " * einem Punkt und zwei Liniensegmenten (durch den Punkt, parallel zu " +#~ "den Linien)\n" +#~ " * einer Arbeitsebene (Kopie der Arbeitsebene)\n" + #~ msgctxt "file-type" #~ msgid "Q3D Object file" #~ msgstr "Q3D Objektdatei" diff --git a/res/locales/en_US.po b/res/locales/en_US.po index 27f02444..385d8d76 100644 --- a/res/locales/en_US.po +++ b/res/locales/en_US.po @@ -2,12 +2,12 @@ # Copyright (C) 2017 the SolveSpace authors # This file is distributed under the same license as the SolveSpace package. # Automatically generated, 2017. -# +# msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2021-02-01 15:45+0200\n" +"POT-Creation-Date: 2021-09-26 16:25-0400\n" "PO-Revision-Date: 2017-01-05 10:30+0000\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: clipboard.cpp:310 +#: clipboard.cpp:309 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -27,27 +27,27 @@ msgstr "" "\n" "Activate one with Sketch -> In Workplane." -#: clipboard.cpp:327 +#: clipboard.cpp:326 msgid "Clipboard is empty; nothing to paste." msgstr "Clipboard is empty; nothing to paste." -#: clipboard.cpp:374 +#: clipboard.cpp:373 msgid "Number of copies to paste must be at least one." msgstr "Number of copies to paste must be at least one." -#: clipboard.cpp:390 textscreens.cpp:783 +#: clipboard.cpp:389 textscreens.cpp:827 msgid "Scale cannot be zero." msgstr "Scale cannot be zero." -#: clipboard.cpp:432 +#: clipboard.cpp:431 msgid "Select one point to define origin of rotation." msgstr "Select one point to define origin of rotation." -#: clipboard.cpp:444 +#: clipboard.cpp:443 msgid "Select two points to define translation vector." msgstr "Select two points to define translation vector." -#: clipboard.cpp:454 +#: clipboard.cpp:453 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." @@ -55,23 +55,23 @@ msgstr "" "Transformation is identity. So all copies will be exactly on top of each " "other." -#: clipboard.cpp:458 +#: clipboard.cpp:457 msgid "Too many items to paste; split this into smaller pastes." msgstr "Too many items to paste; split this into smaller pastes." -#: clipboard.cpp:463 +#: clipboard.cpp:462 msgid "No workplane active." msgstr "No workplane active." -#: confscreen.cpp:418 +#: confscreen.cpp:376 msgid "Bad format: specify coordinates as x, y, z" msgstr "Bad format: specify coordinates as x, y, z" -#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858 msgid "Bad format: specify color as r, g, b" msgstr "Bad format: specify color as r, g, b" -#: confscreen.cpp:454 +#: confscreen.cpp:412 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." @@ -79,24 +79,24 @@ msgstr "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." -#: confscreen.cpp:467 confscreen.cpp:477 +#: confscreen.cpp:430 confscreen.cpp:440 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "Specify between 0 and %d digits after the decimal." -#: confscreen.cpp:489 +#: confscreen.cpp:452 msgid "Export scale must not be zero!" msgstr "Export scale must not be zero!" -#: confscreen.cpp:501 +#: confscreen.cpp:464 msgid "Cutter radius offset must not be negative!" msgstr "Cutter radius offset must not be negative!" -#: confscreen.cpp:555 +#: confscreen.cpp:518 msgid "Bad value: autosave interval should be positive" msgstr "Bad value: autosave interval should be positive" -#: confscreen.cpp:558 +#: confscreen.cpp:521 msgid "Bad format: specify interval in integral minutes" msgstr "Bad format: specify interval in integral minutes" @@ -167,115 +167,135 @@ msgstr "length-ratio" #: constraint.cpp:25 msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "arc-arc-length-ratio" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "arc-line-length-ratio" + +#: constraint.cpp:27 +msgctxt "constr-name" msgid "length-difference" msgstr "length-difference" -#: constraint.cpp:26 +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "arc-arc-len-difference" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "arc-line-len-difference" + +#: constraint.cpp:30 msgctxt "constr-name" msgid "symmetric" msgstr "symmetric" -#: constraint.cpp:27 +#: constraint.cpp:31 msgctxt "constr-name" msgid "symmetric-h" msgstr "symmetric-h" -#: constraint.cpp:28 +#: constraint.cpp:32 msgctxt "constr-name" msgid "symmetric-v" msgstr "symmetric-v" -#: constraint.cpp:29 +#: constraint.cpp:33 msgctxt "constr-name" msgid "symmetric-line" msgstr "symmetric-line" -#: constraint.cpp:30 +#: constraint.cpp:34 msgctxt "constr-name" msgid "at-midpoint" msgstr "at-midpoint" -#: constraint.cpp:31 +#: constraint.cpp:35 msgctxt "constr-name" msgid "horizontal" msgstr "horizontal" -#: constraint.cpp:32 +#: constraint.cpp:36 msgctxt "constr-name" msgid "vertical" msgstr "vertical" -#: constraint.cpp:33 +#: constraint.cpp:37 msgctxt "constr-name" msgid "diameter" msgstr "diameter" -#: constraint.cpp:34 +#: constraint.cpp:38 msgctxt "constr-name" msgid "pt-on-circle" msgstr "pt-on-circle" -#: constraint.cpp:35 +#: constraint.cpp:39 msgctxt "constr-name" msgid "same-orientation" msgstr "same-orientation" -#: constraint.cpp:36 +#: constraint.cpp:40 msgctxt "constr-name" msgid "angle" msgstr "angle" -#: constraint.cpp:37 +#: constraint.cpp:41 msgctxt "constr-name" msgid "parallel" msgstr "parallel" -#: constraint.cpp:38 +#: constraint.cpp:42 msgctxt "constr-name" msgid "arc-line-tangent" msgstr "arc-line-tangent" -#: constraint.cpp:39 +#: constraint.cpp:43 msgctxt "constr-name" msgid "cubic-line-tangent" msgstr "cubic-line-tangent" -#: constraint.cpp:40 +#: constraint.cpp:44 msgctxt "constr-name" msgid "curve-curve-tangent" msgstr "curve-curve-tangent" -#: constraint.cpp:41 +#: constraint.cpp:45 msgctxt "constr-name" msgid "perpendicular" msgstr "perpendicular" -#: constraint.cpp:42 +#: constraint.cpp:46 msgctxt "constr-name" msgid "eq-radius" msgstr "eq-radius" -#: constraint.cpp:43 +#: constraint.cpp:47 msgctxt "constr-name" msgid "eq-angle" msgstr "eq-angle" -#: constraint.cpp:44 +#: constraint.cpp:48 msgctxt "constr-name" msgid "eq-line-len-arc-len" msgstr "eq-line-len-arc-len" -#: constraint.cpp:45 +#: constraint.cpp:49 msgctxt "constr-name" msgid "lock-where-dragged" msgstr "lock-where-dragged" -#: constraint.cpp:46 +#: constraint.cpp:50 msgctxt "constr-name" msgid "comment" msgstr "comment" -#: constraint.cpp:140 +#: constraint.cpp:144 msgid "" "The tangent arc and line segment must share an endpoint. Constrain them with " "Constrain -> On Point before constraining tangent." @@ -283,7 +303,7 @@ msgstr "" "The tangent arc and line segment must share an endpoint. Constrain them with " "Constrain -> On Point before constraining tangent." -#: constraint.cpp:158 +#: constraint.cpp:163 msgid "" "The tangent cubic and line segment must share an endpoint. Constrain them " "with Constrain -> On Point before constraining tangent." @@ -291,7 +311,7 @@ msgstr "" "The tangent cubic and line segment must share an endpoint. Constrain them " "with Constrain -> On Point before constraining tangent." -#: constraint.cpp:183 +#: constraint.cpp:189 msgid "" "The curves must share an endpoint. Constrain them with Constrain -> On Point " "before constraining tangent." @@ -299,7 +319,7 @@ msgstr "" "The curves must share an endpoint. Constrain them with Constrain -> On Point " "before constraining tangent." -#: constraint.cpp:231 +#: constraint.cpp:238 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -323,7 +343,7 @@ msgstr "" " * a plane face and a point (minimum distance)\n" " * a circle or an arc (diameter)\n" -#: constraint.cpp:284 +#: constraint.cpp:291 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -343,7 +363,7 @@ msgstr "" " * a point and a circle or arc (point on curve)\n" " * a point and a plane face (point on face)\n" -#: constraint.cpp:346 +#: constraint.cpp:353 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -371,29 +391,37 @@ msgstr "" " * two circles or arcs (equal radius)\n" " * a line segment and an arc (line segment length equals arc length)\n" -#: constraint.cpp:385 +#: constraint.cpp:407 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" -#: constraint.cpp:402 +#: constraint.cpp:441 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" -#: constraint.cpp:428 +#: constraint.cpp:472 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -405,43 +433,43 @@ msgstr "" " * a line segment and a point (point at midpoint)\n" " * a line segment and a workplane (line's midpoint on plane)\n" -#: constraint.cpp:486 -msgid "" -"Bad selection for symmetric constraint. This constraint can apply to:\n" -"\n" -" * two points or a line segment (symmetric about workplane's coordinate " -"axis)\n" -" * line segment, and two points or a line segment (symmetric about line " -"segment)\n" -" * workplane, and two points or a line segment (symmetric about " -"workplane)\n" -msgstr "" -"Bad selection for symmetric constraint. This constraint can apply to:\n" -"\n" -" * two points or a line segment (symmetric about workplane's coordinate " -"axis)\n" -" * line segment, and two points or a line segment (symmetric about line " -"segment)\n" -" * workplane, and two points or a line segment (symmetric about " -"workplane)\n" - -#: constraint.cpp:500 -msgid "" -"A workplane must be active when constraining symmetric without an explicit " -"symmetry plane." -msgstr "" -"A workplane must be active when constraining symmetric without an explicit " -"symmetry plane." - #: constraint.cpp:530 msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" + +#: constraint.cpp:545 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." + +#: constraint.cpp:579 +msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." msgstr "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." -#: constraint.cpp:543 +#: constraint.cpp:592 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -455,7 +483,7 @@ msgstr "" " * two points\n" " * a line segment\n" -#: constraint.cpp:564 +#: constraint.cpp:613 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -467,15 +495,15 @@ msgstr "" "\n" " * two normals\n" -#: constraint.cpp:614 +#: constraint.cpp:663 msgid "Must select an angle constraint." msgstr "Must select an angle constraint." -#: constraint.cpp:627 +#: constraint.cpp:676 msgid "Must select a constraint with associated label." msgstr "Must select a constraint with associated label." -#: constraint.cpp:638 +#: constraint.cpp:687 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -489,11 +517,11 @@ msgstr "" " * a line segment and a normal\n" " * two normals\n" -#: constraint.cpp:701 +#: constraint.cpp:754 msgid "Curve-curve tangency must apply in workplane." msgstr "Curve-curve tangency must apply in workplane." -#: constraint.cpp:711 +#: constraint.cpp:766 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -511,7 +539,7 @@ msgstr "" " * two normals (parallel)\n" " * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" -#: constraint.cpp:729 +#: constraint.cpp:784 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -525,7 +553,7 @@ msgstr "" " * a line segment and a normal\n" " * two normals\n" -#: constraint.cpp:744 +#: constraint.cpp:799 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -537,7 +565,11 @@ msgstr "" "\n" " * a point\n" -#: constraint.cpp:755 +#: constraint.cpp:813 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NEW COMMENT -- DOUBLE-CLICK TO EDIT" + +#: constraint.cpp:818 msgid "click center of comment text" msgstr "click center of comment text" @@ -565,25 +597,25 @@ msgstr "" " * a point and two line segments (plane through point and parallel to " "lines)\n" -#: export.cpp:822 +#: export.cpp:818 msgid "Active group mesh is empty; nothing to export." msgstr "Active group mesh is empty; nothing to export." -#: exportvector.cpp:337 +#: exportvector.cpp:336 msgid "freehand lines were replaced with continuous lines" msgstr "freehand lines were replaced with continuous lines" -#: exportvector.cpp:339 +#: exportvector.cpp:338 msgid "zigzag lines were replaced with continuous lines" msgstr "zigzag lines were replaced with continuous lines" -#: exportvector.cpp:593 +#: exportvector.cpp:592 msgid "" "Some aspects of the drawing have no DXF equivalent and were not exported:\n" msgstr "" "Some aspects of the drawing have no DXF equivalent and were not exported:\n" -#: exportvector.cpp:839 +#: exportvector.cpp:838 msgid "" "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." msgstr "" @@ -599,11 +631,11 @@ msgctxt "group-name" msgid "#references" msgstr "#references" -#: file.cpp:552 +#: file.cpp:550 msgid "The file is empty. It may be corrupt." msgstr "The file is empty. It may be corrupt." -#: file.cpp:557 +#: file.cpp:555 msgid "" "Unrecognized data in file. This file may be corrupt, or from a newer version " "of the program." @@ -645,7 +677,7 @@ msgctxt "button" msgid "&No" msgstr "&No" -#: file.cpp:877 solvespace.cpp:569 +#: file.cpp:877 solvespace.cpp:610 msgctxt "button" msgid "&Cancel" msgstr "&Cancel" @@ -819,295 +851,303 @@ msgid "Use &Perspective Projection" msgstr "Use &Perspective Projection" #: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "Show E&xploded View" + +#: graphicswin.cpp:98 msgid "Dimension &Units" msgstr "Dimension &Units" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in &Millimeters" msgstr "Dimensions in &Millimeters" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in M&eters" msgstr "Dimensions in M&eters" -#: graphicswin.cpp:100 +#: graphicswin.cpp:101 msgid "Dimensions in &Inches" msgstr "Dimensions in &Inches" #: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "Dimensions in &Feet and Inches" + +#: graphicswin.cpp:104 msgid "Show &Toolbar" msgstr "Show &Toolbar" -#: graphicswin.cpp:103 +#: graphicswin.cpp:105 msgid "Show Property Bro&wser" msgstr "Show Property Bro&wser" -#: graphicswin.cpp:105 +#: graphicswin.cpp:107 msgid "&Full Screen" msgstr "&Full Screen" -#: graphicswin.cpp:107 +#: graphicswin.cpp:109 msgid "&New Group" msgstr "&New Group" -#: graphicswin.cpp:108 +#: graphicswin.cpp:110 msgid "Sketch In &3d" msgstr "Sketch In &3d" -#: graphicswin.cpp:109 +#: graphicswin.cpp:111 msgid "Sketch In New &Workplane" msgstr "Sketch In New &Workplane" -#: graphicswin.cpp:111 +#: graphicswin.cpp:113 msgid "Step &Translating" msgstr "Step &Translating" -#: graphicswin.cpp:112 +#: graphicswin.cpp:114 msgid "Step &Rotating" msgstr "Step &Rotating" -#: graphicswin.cpp:114 +#: graphicswin.cpp:116 msgid "E&xtrude" msgstr "E&xtrude" -#: graphicswin.cpp:115 +#: graphicswin.cpp:117 msgid "&Helix" msgstr "&Helix" -#: graphicswin.cpp:116 +#: graphicswin.cpp:118 msgid "&Lathe" msgstr "&Lathe" -#: graphicswin.cpp:117 +#: graphicswin.cpp:119 msgid "Re&volve" msgstr "Re&volve" -#: graphicswin.cpp:119 +#: graphicswin.cpp:121 msgid "Link / Assemble..." msgstr "Link / Assemble..." -#: graphicswin.cpp:120 +#: graphicswin.cpp:122 msgid "Link Recent" msgstr "Link Recent" -#: graphicswin.cpp:122 +#: graphicswin.cpp:124 msgid "&Sketch" msgstr "&Sketch" -#: graphicswin.cpp:123 +#: graphicswin.cpp:125 msgid "In &Workplane" msgstr "In &Workplane" -#: graphicswin.cpp:124 +#: graphicswin.cpp:126 msgid "Anywhere In &3d" msgstr "Anywhere In &3d" -#: graphicswin.cpp:126 +#: graphicswin.cpp:128 msgid "Datum &Point" msgstr "Datum &Point" -#: graphicswin.cpp:127 +#: graphicswin.cpp:129 msgid "&Workplane" msgstr "&Workplane" -#: graphicswin.cpp:129 +#: graphicswin.cpp:131 msgid "Line &Segment" msgstr "Line &Segment" -#: graphicswin.cpp:130 +#: graphicswin.cpp:132 msgid "C&onstruction Line Segment" msgstr "C&onstruction Line Segment" -#: graphicswin.cpp:131 +#: graphicswin.cpp:133 msgid "&Rectangle" msgstr "&Rectangle" -#: graphicswin.cpp:132 +#: graphicswin.cpp:134 msgid "&Circle" msgstr "&Circle" -#: graphicswin.cpp:133 +#: graphicswin.cpp:135 msgid "&Arc of a Circle" msgstr "&Arc of a Circle" -#: graphicswin.cpp:134 +#: graphicswin.cpp:136 msgid "&Bezier Cubic Spline" msgstr "&Bezier Cubic Spline" -#: graphicswin.cpp:136 +#: graphicswin.cpp:138 msgid "&Text in TrueType Font" msgstr "&Text in TrueType Font" -#: graphicswin.cpp:137 +#: graphicswin.cpp:139 msgid "&Image" msgstr "&Image" -#: graphicswin.cpp:139 +#: graphicswin.cpp:141 msgid "To&ggle Construction" msgstr "To&ggle Construction" -#: graphicswin.cpp:140 +#: graphicswin.cpp:142 msgid "Tangent &Arc at Point" msgstr "Tangent &Arc at Point" -#: graphicswin.cpp:141 +#: graphicswin.cpp:143 msgid "Split Curves at &Intersection" msgstr "Split Curves at &Intersection" -#: graphicswin.cpp:143 +#: graphicswin.cpp:145 msgid "&Constrain" msgstr "&Constrain" -#: graphicswin.cpp:144 +#: graphicswin.cpp:146 msgid "&Distance / Diameter" msgstr "&Distance / Diameter" -#: graphicswin.cpp:145 +#: graphicswin.cpp:147 msgid "Re&ference Dimension" msgstr "Re&ference Dimension" -#: graphicswin.cpp:146 +#: graphicswin.cpp:148 msgid "A&ngle" msgstr "A&ngle" -#: graphicswin.cpp:147 +#: graphicswin.cpp:149 msgid "Reference An&gle" msgstr "Reference An&gle" -#: graphicswin.cpp:148 +#: graphicswin.cpp:150 msgid "Other S&upplementary Angle" msgstr "Other S&upplementary Angle" -#: graphicswin.cpp:149 +#: graphicswin.cpp:151 msgid "Toggle R&eference Dim" msgstr "Toggle R&eference Dim" -#: graphicswin.cpp:151 +#: graphicswin.cpp:153 msgid "&Horizontal" msgstr "&Horizontal" -#: graphicswin.cpp:152 +#: graphicswin.cpp:154 msgid "&Vertical" msgstr "&Vertical" -#: graphicswin.cpp:154 +#: graphicswin.cpp:156 msgid "&On Point / Curve / Plane" msgstr "&On Point / Curve / Plane" -#: graphicswin.cpp:155 +#: graphicswin.cpp:157 msgid "E&qual Length / Radius / Angle" msgstr "E&qual Length / Radius / Angle" -#: graphicswin.cpp:156 -msgid "Length Ra&tio" -msgstr "Length Ra&tio" - -#: graphicswin.cpp:157 -msgid "Length Diff&erence" -msgstr "Length Diff&erence" - #: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "Length / Arc Ra&tio" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "Length / Arc Diff&erence" + +#: graphicswin.cpp:160 msgid "At &Midpoint" msgstr "At &Midpoint" -#: graphicswin.cpp:159 +#: graphicswin.cpp:161 msgid "S&ymmetric" msgstr "S&ymmetric" -#: graphicswin.cpp:160 +#: graphicswin.cpp:162 msgid "Para&llel / Tangent" msgstr "Para&llel / Tangent" -#: graphicswin.cpp:161 +#: graphicswin.cpp:163 msgid "&Perpendicular" msgstr "&Perpendicular" -#: graphicswin.cpp:162 +#: graphicswin.cpp:164 msgid "Same Orient&ation" msgstr "Same Orient&ation" -#: graphicswin.cpp:163 +#: graphicswin.cpp:165 msgid "Lock Point Where &Dragged" msgstr "Lock Point Where &Dragged" -#: graphicswin.cpp:165 +#: graphicswin.cpp:167 msgid "Comment" msgstr "Comment" -#: graphicswin.cpp:167 +#: graphicswin.cpp:169 msgid "&Analyze" msgstr "&Analyze" -#: graphicswin.cpp:168 +#: graphicswin.cpp:170 msgid "Measure &Volume" msgstr "Measure &Volume" -#: graphicswin.cpp:169 +#: graphicswin.cpp:171 msgid "Measure A&rea" msgstr "Measure A&rea" -#: graphicswin.cpp:170 +#: graphicswin.cpp:172 msgid "Measure &Perimeter" msgstr "Measure &Perimeter" -#: graphicswin.cpp:171 +#: graphicswin.cpp:173 msgid "Show &Interfering Parts" msgstr "Show &Interfering Parts" -#: graphicswin.cpp:172 +#: graphicswin.cpp:174 msgid "Show &Naked Edges" msgstr "Show &Naked Edges" -#: graphicswin.cpp:173 +#: graphicswin.cpp:175 msgid "Show &Center of Mass" msgstr "Show &Center of Mass" -#: graphicswin.cpp:175 +#: graphicswin.cpp:177 msgid "Show &Underconstrained Points" msgstr "Show &Underconstrained Points" -#: graphicswin.cpp:177 +#: graphicswin.cpp:179 msgid "&Trace Point" msgstr "&Trace Point" -#: graphicswin.cpp:178 +#: graphicswin.cpp:180 msgid "&Stop Tracing..." msgstr "&Stop Tracing..." -#: graphicswin.cpp:179 +#: graphicswin.cpp:181 msgid "Step &Dimension..." msgstr "Step &Dimension..." -#: graphicswin.cpp:181 +#: graphicswin.cpp:183 msgid "&Help" msgstr "&Help" -#: graphicswin.cpp:182 +#: graphicswin.cpp:184 msgid "&Language" msgstr "&Language" -#: graphicswin.cpp:183 +#: graphicswin.cpp:185 msgid "&Website / Manual" msgstr "&Website / Manual" -#: graphicswin.cpp:185 +#: graphicswin.cpp:187 msgid "&About" msgstr "&About" -#: graphicswin.cpp:355 +#: graphicswin.cpp:361 msgid "(no recent files)" msgstr "(no recent files)" -#: graphicswin.cpp:363 +#: graphicswin.cpp:369 #, c-format msgid "File '%s' does not exist." msgstr "File '%s' does not exist." -#: graphicswin.cpp:725 +#: graphicswin.cpp:736 msgid "No workplane is active, so the grid will not appear." msgstr "No workplane is active, so the grid will not appear." -#: graphicswin.cpp:740 +#: graphicswin.cpp:751 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1121,17 +1161,17 @@ msgstr "" "For a perspective projection, modify the perspective factor in the " "configuration screen. A value around 0.3 is typical." -#: graphicswin.cpp:819 +#: graphicswin.cpp:836 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" "Select a point; this point will become the center of the view on screen." -#: graphicswin.cpp:1114 +#: graphicswin.cpp:1136 msgid "No additional entities share endpoints with the selected entities." msgstr "No additional entities share endpoints with the selected entities." -#: graphicswin.cpp:1132 +#: graphicswin.cpp:1154 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." @@ -1139,7 +1179,7 @@ msgstr "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." -#: graphicswin.cpp:1155 +#: graphicswin.cpp:1177 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." @@ -1147,7 +1187,7 @@ msgstr "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." -#: graphicswin.cpp:1162 +#: graphicswin.cpp:1184 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." @@ -1155,11 +1195,11 @@ msgstr "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." -#: graphicswin.cpp:1247 +#: graphicswin.cpp:1269 msgid "No workplane selected. Activating default workplane for this group." msgstr "No workplane selected. Activating default workplane for this group." -#: graphicswin.cpp:1250 +#: graphicswin.cpp:1272 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" @@ -1169,7 +1209,7 @@ msgstr "" "workplane. Try selecting a workplane, or activating a sketch-in-new-" "workplane group." -#: graphicswin.cpp:1271 +#: graphicswin.cpp:1293 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." @@ -1177,47 +1217,47 @@ msgstr "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1304 msgid "click point on arc (draws anti-clockwise)" msgstr "click point on arc (draws anti-clockwise)" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1305 msgid "click to place datum point" msgstr "click to place datum point" -#: graphicswin.cpp:1284 +#: graphicswin.cpp:1306 msgid "click first point of line segment" msgstr "click first point of line segment" -#: graphicswin.cpp:1286 +#: graphicswin.cpp:1308 msgid "click first point of construction line segment" msgstr "click first point of construction line segment" -#: graphicswin.cpp:1287 +#: graphicswin.cpp:1309 msgid "click first point of cubic segment" msgstr "click first point of cubic segment" -#: graphicswin.cpp:1288 +#: graphicswin.cpp:1310 msgid "click center of circle" msgstr "click center of circle" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1311 msgid "click origin of workplane" msgstr "click origin of workplane" -#: graphicswin.cpp:1290 +#: graphicswin.cpp:1312 msgid "click one corner of rectangle" msgstr "click one corner of rectangle" -#: graphicswin.cpp:1291 +#: graphicswin.cpp:1313 msgid "click top left of text" msgstr "click top left of text" -#: graphicswin.cpp:1297 +#: graphicswin.cpp:1319 msgid "click top left of image" msgstr "click top left of image" -#: graphicswin.cpp:1309 +#: graphicswin.cpp:1345 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1230,13 +1270,14 @@ msgctxt "group-name" msgid "sketch-in-3d" msgstr "sketch-in-3d" -#: group.cpp:142 +#: group.cpp:150 msgid "" "Bad selection for new sketch in workplane. This group can be created with:\n" "\n" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, parallel to the " "lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" msgstr "" "Bad selection for new sketch in workplane. This group can be created with:\n" @@ -1244,9 +1285,10 @@ msgstr "" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, parallel to the " "lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" -#: group.cpp:154 +#: group.cpp:166 msgid "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " "will be extruded normal to the workplane." @@ -1254,16 +1296,16 @@ msgstr "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " "will be extruded normal to the workplane." -#: group.cpp:163 +#: group.cpp:175 msgctxt "group-name" msgid "extrude" msgstr "extrude" -#: group.cpp:168 +#: group.cpp:180 msgid "Lathe operation can only be applied to planar sketches." msgstr "Lathe operation can only be applied to planar sketches." -#: group.cpp:179 +#: group.cpp:191 msgid "" "Bad selection for new lathe group. This group can be created with:\n" "\n" @@ -1277,16 +1319,16 @@ msgstr "" "to line / normal, through point)\n" " * a line segment (revolved about line segment)\n" -#: group.cpp:189 +#: group.cpp:201 msgctxt "group-name" msgid "lathe" msgstr "lathe" -#: group.cpp:194 +#: group.cpp:206 msgid "Revolve operation can only be applied to planar sketches." msgstr "Revolve operation can only be applied to planar sketches." -#: group.cpp:205 +#: group.cpp:217 msgid "" "Bad selection for new revolve group. This group can be created with:\n" "\n" @@ -1300,16 +1342,16 @@ msgstr "" "to line / normal, through point)\n" " * a line segment (revolved about line segment)\n" -#: group.cpp:217 +#: group.cpp:229 msgctxt "group-name" msgid "revolve" msgstr "revolve" -#: group.cpp:222 +#: group.cpp:234 msgid "Helix operation can only be applied to planar sketches." msgstr "Helix operation can only be applied to planar sketches." -#: group.cpp:233 +#: group.cpp:245 msgid "" "Bad selection for new helix group. This group can be created with:\n" "\n" @@ -1323,12 +1365,12 @@ msgstr "" "to line / normal, through point)\n" " * a line segment (revolved about line segment)\n" -#: group.cpp:245 +#: group.cpp:257 msgctxt "group-name" msgid "helix" msgstr "helix" -#: group.cpp:258 +#: group.cpp:270 msgid "" "Bad selection for new rotation. This group can be created with:\n" "\n" @@ -1344,41 +1386,41 @@ msgstr "" " * a point and a line or a normal (rotate about an axis through the " "point, and parallel to line / normal)\n" -#: group.cpp:271 +#: group.cpp:283 msgctxt "group-name" msgid "rotate" msgstr "rotate" -#: group.cpp:282 +#: group.cpp:294 msgctxt "group-name" msgid "translate" msgstr "translate" -#: group.cpp:400 +#: group.cpp:416 msgid "(unnamed)" msgstr "(unnamed)" -#: groupmesh.cpp:709 +#: groupmesh.cpp:707 msgid "not closed contour, or not all same style!" msgstr "not closed contour, or not all same style!" -#: groupmesh.cpp:722 +#: groupmesh.cpp:720 msgid "points not all coplanar!" msgstr "points not all coplanar!" -#: groupmesh.cpp:724 +#: groupmesh.cpp:722 msgid "contour is self-intersecting!" msgstr "contour is self-intersecting!" -#: groupmesh.cpp:726 +#: groupmesh.cpp:724 msgid "zero-length edge!" msgstr "zero-length edge!" -#: modify.cpp:254 +#: modify.cpp:252 msgid "Must be sketching in workplane to create tangent arc." msgstr "Must be sketching in workplane to create tangent arc." -#: modify.cpp:301 +#: modify.cpp:299 msgid "" "To create a tangent arc, select a point where two non-construction lines or " "circles in this group and workplane join." @@ -1386,7 +1428,7 @@ msgstr "" "To create a tangent arc, select a point where two non-construction lines or " "circles in this group and workplane join." -#: modify.cpp:388 +#: modify.cpp:386 msgid "" "Couldn't round this corner. Try a smaller radius, or try creating the " "desired geometry by hand with tangency constraints." @@ -1394,15 +1436,15 @@ msgstr "" "Couldn't round this corner. Try a smaller radius, or try creating the " "desired geometry by hand with tangency constraints." -#: modify.cpp:597 +#: modify.cpp:595 msgid "Couldn't split this entity; lines, circles, or cubics only." msgstr "Couldn't split this entity; lines, circles, or cubics only." -#: modify.cpp:624 +#: modify.cpp:622 msgid "Must be sketching in workplane to split." msgstr "Must be sketching in workplane to split." -#: modify.cpp:631 +#: modify.cpp:629 msgid "" "Select two entities that intersect each other (e.g. two lines/circles/arcs " "or a line/circle/arc and a point)." @@ -1410,107 +1452,107 @@ msgstr "" "Select two entities that intersect each other (e.g. two lines/circles/arcs " "or a line/circle/arc and a point)." -#: modify.cpp:736 +#: modify.cpp:734 msgid "Can't split; no intersection found." msgstr "Can't split; no intersection found." -#: mouse.cpp:559 +#: mouse.cpp:557 msgid "Assign to Style" msgstr "Assign to Style" -#: mouse.cpp:575 +#: mouse.cpp:573 msgid "No Style" msgstr "No Style" -#: mouse.cpp:578 +#: mouse.cpp:576 msgid "Newly Created Custom Style..." msgstr "Newly Created Custom Style..." -#: mouse.cpp:585 +#: mouse.cpp:583 msgid "Group Info" msgstr "Group Info" -#: mouse.cpp:605 +#: mouse.cpp:603 msgid "Style Info" msgstr "Style Info" -#: mouse.cpp:625 +#: mouse.cpp:623 msgid "Select Edge Chain" msgstr "Select Edge Chain" -#: mouse.cpp:631 +#: mouse.cpp:629 msgid "Toggle Reference Dimension" msgstr "Toggle Reference Dimension" -#: mouse.cpp:637 +#: mouse.cpp:635 msgid "Other Supplementary Angle" msgstr "Other Supplementary Angle" -#: mouse.cpp:642 +#: mouse.cpp:640 msgid "Snap to Grid" msgstr "Snap to Grid" -#: mouse.cpp:651 +#: mouse.cpp:649 msgid "Remove Spline Point" msgstr "Remove Spline Point" -#: mouse.cpp:686 +#: mouse.cpp:684 msgid "Add Spline Point" msgstr "Add Spline Point" -#: mouse.cpp:690 +#: mouse.cpp:688 msgid "Cannot add spline point: maximum number of points reached." msgstr "Cannot add spline point: maximum number of points reached." -#: mouse.cpp:715 +#: mouse.cpp:713 msgid "Toggle Construction" msgstr "Toggle Construction" -#: mouse.cpp:730 +#: mouse.cpp:729 msgid "Delete Point-Coincident Constraint" msgstr "Delete Point-Coincident Constraint" -#: mouse.cpp:749 +#: mouse.cpp:747 msgid "Cut" msgstr "Cut" -#: mouse.cpp:751 +#: mouse.cpp:749 msgid "Copy" msgstr "Copy" -#: mouse.cpp:755 +#: mouse.cpp:753 msgid "Select All" msgstr "Select All" -#: mouse.cpp:760 +#: mouse.cpp:758 msgid "Paste" msgstr "Paste" -#: mouse.cpp:762 +#: mouse.cpp:760 msgid "Paste Transformed..." msgstr "Paste Transformed..." -#: mouse.cpp:767 +#: mouse.cpp:765 msgid "Delete" msgstr "Delete" -#: mouse.cpp:770 +#: mouse.cpp:768 msgid "Unselect All" msgstr "Unselect All" -#: mouse.cpp:777 +#: mouse.cpp:775 msgid "Unselect Hovered" msgstr "Unselect Hovered" -#: mouse.cpp:786 +#: mouse.cpp:784 msgid "Zoom to Fit" msgstr "Zoom to Fit" -#: mouse.cpp:988 mouse.cpp:1275 +#: mouse.cpp:986 mouse.cpp:1274 msgid "click next point of line, or press Esc" msgstr "click next point of line, or press Esc" -#: mouse.cpp:994 +#: mouse.cpp:992 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1518,15 +1560,15 @@ msgstr "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." -#: mouse.cpp:1028 +#: mouse.cpp:1026 msgid "click to place other corner of rectangle" msgstr "click to place other corner of rectangle" -#: mouse.cpp:1048 +#: mouse.cpp:1047 msgid "click to set radius" msgstr "click to set radius" -#: mouse.cpp:1053 +#: mouse.cpp:1052 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1534,21 +1576,21 @@ msgstr "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." -#: mouse.cpp:1072 +#: mouse.cpp:1071 msgid "click to place point" msgstr "click to place point" -#: mouse.cpp:1088 +#: mouse.cpp:1087 msgid "click next point of cubic, or press Esc" msgstr "click next point of cubic, or press Esc" -#: mouse.cpp:1093 +#: mouse.cpp:1092 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" "Sketching in a workplane already; sketch in 3d before creating new workplane." -#: mouse.cpp:1109 +#: mouse.cpp:1108 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1556,11 +1598,11 @@ msgstr "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." -#: mouse.cpp:1126 +#: mouse.cpp:1125 msgid "click to place bottom right of text" msgstr "click to place bottom right of text" -#: mouse.cpp:1132 +#: mouse.cpp:1131 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1568,193 +1610,199 @@ msgstr "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." -#: mouse.cpp:1159 -msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -msgstr "NEW COMMENT -- DOUBLE-CLICK TO EDIT" - -#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552 msgctxt "file-type" msgid "SolveSpace models" msgstr "SolveSpace models" -#: platform/gui.cpp:90 +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "ALL" + +#: platform/gui.cpp:91 msgctxt "file-type" msgid "IDF circuit board" msgstr "IDF circuit board" -#: platform/gui.cpp:94 +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "STL triangle mesh" + +#: platform/gui.cpp:96 msgctxt "file-type" msgid "PNG image" msgstr "PNG image" -#: platform/gui.cpp:98 +#: platform/gui.cpp:100 msgctxt "file-type" msgid "STL mesh" msgstr "STL mesh" -#: platform/gui.cpp:99 +#: platform/gui.cpp:101 msgctxt "file-type" msgid "Wavefront OBJ mesh" msgstr "Wavefront OBJ mesh" -#: platform/gui.cpp:100 +#: platform/gui.cpp:102 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" msgstr "Three.js-compatible mesh, with viewer" -#: platform/gui.cpp:101 +#: platform/gui.cpp:103 msgctxt "file-type" msgid "Three.js-compatible mesh, mesh only" msgstr "Three.js-compatible mesh, mesh only" -#: platform/gui.cpp:102 +#: platform/gui.cpp:104 msgctxt "file-type" msgid "VRML text file" msgstr "VRML text file" -#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 msgctxt "file-type" msgid "STEP file" msgstr "STEP file" -#: platform/gui.cpp:110 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "PDF file" msgstr "PDF file" -#: platform/gui.cpp:111 +#: platform/gui.cpp:113 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "Encapsulated PostScript" -#: platform/gui.cpp:112 +#: platform/gui.cpp:114 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "Scalable Vector Graphics" -#: platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:116 platform/gui.cpp:123 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "DXF file (AutoCAD 2007)" -#: platform/gui.cpp:115 +#: platform/gui.cpp:117 msgctxt "file-type" msgid "HPGL file" msgstr "HPGL file" -#: platform/gui.cpp:116 +#: platform/gui.cpp:118 msgctxt "file-type" msgid "G Code" msgstr "G Code" -#: platform/gui.cpp:125 +#: platform/gui.cpp:127 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "AutoCAD DXF and DWG files" -#: platform/gui.cpp:129 +#: platform/gui.cpp:131 msgctxt "file-type" msgid "Comma-separated values" msgstr "Comma-separated values" -#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641 msgid "untitled" msgstr "untitled" -#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 -#: platform/guiwin.cpp:1582 +#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445 +#: platform/guiwin.cpp:1639 msgctxt "title" msgid "Save File" msgstr "Save File" -#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 -#: platform/guiwin.cpp:1584 +#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428 +#: platform/guiwin.cpp:1645 msgctxt "title" msgid "Open File" msgstr "Open File" -#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418 msgctxt "button" msgid "_Cancel" msgstr "_Cancel" -#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416 msgctxt "button" msgid "_Save" msgstr "_Save" -#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417 msgctxt "button" msgid "_Open" msgstr "_Open" -#: solvespace.cpp:169 +#: solvespace.cpp:170 msgctxt "title" msgid "Autosave Available" msgstr "Autosave Available" -#: solvespace.cpp:170 +#: solvespace.cpp:171 msgctxt "dialog" msgid "An autosave file is available for this sketch." msgstr "An autosave file is available for this sketch." -#: solvespace.cpp:171 +#: solvespace.cpp:172 msgctxt "dialog" msgid "Do you want to load the autosave file instead?" msgstr "Do you want to load the autosave file instead?" -#: solvespace.cpp:172 +#: solvespace.cpp:173 msgctxt "button" msgid "&Load autosave" msgstr "&Load autosave" -#: solvespace.cpp:174 +#: solvespace.cpp:175 msgctxt "button" msgid "Do&n't Load" msgstr "Do&n't Load" -#: solvespace.cpp:557 +#: solvespace.cpp:598 msgctxt "title" msgid "Modified File" msgstr "Modified File" -#: solvespace.cpp:559 +#: solvespace.cpp:600 #, c-format msgctxt "dialog" msgid "Do you want to save the changes you made to the sketch “%s”?" msgstr "Do you want to save the changes you made to the sketch “%s”?" -#: solvespace.cpp:562 +#: solvespace.cpp:603 msgctxt "dialog" msgid "Do you want to save the changes you made to the new sketch?" msgstr "Do you want to save the changes you made to the new sketch?" -#: solvespace.cpp:565 +#: solvespace.cpp:606 msgctxt "dialog" msgid "Your changes will be lost if you don't save them." msgstr "Your changes will be lost if you don't save them." -#: solvespace.cpp:566 +#: solvespace.cpp:607 msgctxt "button" msgid "&Save" msgstr "&Save" -#: solvespace.cpp:568 +#: solvespace.cpp:609 msgctxt "button" msgid "Do&n't Save" msgstr "Do&n't Save" -#: solvespace.cpp:589 +#: solvespace.cpp:630 msgctxt "title" msgid "(new sketch)" msgstr "(new sketch)" -#: solvespace.cpp:596 +#: solvespace.cpp:637 msgctxt "title" msgid "Property Browser" msgstr "Property Browser" -#: solvespace.cpp:658 +#: solvespace.cpp:699 msgid "" "Constraints are currently shown, and will be exported in the toolpath. This " "is probably not what you want; hide them by clicking the link at the top of " @@ -1764,7 +1812,7 @@ msgstr "" "is probably not what you want; hide them by clicking the link at the top of " "the text window." -#: solvespace.cpp:730 +#: solvespace.cpp:771 #, c-format msgid "" "Can't identify file type from file extension of filename '%s'; try .dxf or ." @@ -1773,19 +1821,19 @@ msgstr "" "Can't identify file type from file extension of filename '%s'; try .dxf or ." "dwg." -#: solvespace.cpp:778 +#: solvespace.cpp:823 msgid "Constraint must have a label, and must not be a reference dimension." msgstr "Constraint must have a label, and must not be a reference dimension." -#: solvespace.cpp:782 +#: solvespace.cpp:827 msgid "Bad selection for step dimension; select a constraint." msgstr "Bad selection for step dimension; select a constraint." -#: solvespace.cpp:806 +#: solvespace.cpp:851 msgid "The assembly does not interfere, good." msgstr "The assembly does not interfere, good." -#: solvespace.cpp:822 +#: solvespace.cpp:867 #, c-format msgid "" "The volume of the solid model is:\n" @@ -1796,7 +1844,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:831 +#: solvespace.cpp:876 #, c-format msgid "" "\n" @@ -1809,7 +1857,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:836 +#: solvespace.cpp:881 msgid "" "\n" "\n" @@ -1821,7 +1869,7 @@ msgstr "" "Curved surfaces have been approximated as triangles.\n" "This introduces error, typically of around 1%." -#: solvespace.cpp:851 +#: solvespace.cpp:896 #, c-format msgid "" "The surface area of the selected faces is:\n" @@ -1838,7 +1886,7 @@ msgstr "" "Curves have been approximated as piecewise linear.\n" "This introduces error, typically of around 1%%." -#: solvespace.cpp:860 +#: solvespace.cpp:905 msgid "" "This group does not contain a correctly-formed 2d closed area. It is open, " "not coplanar, or self-intersecting." @@ -1846,7 +1894,7 @@ msgstr "" "This group does not contain a correctly-formed 2d closed area. It is open, " "not coplanar, or self-intersecting." -#: solvespace.cpp:872 +#: solvespace.cpp:917 #, c-format msgid "" "The area of the region sketched in this group is:\n" @@ -1863,7 +1911,7 @@ msgstr "" "Curves have been approximated as piecewise linear.\n" "This introduces error, typically of around 1%%." -#: solvespace.cpp:892 +#: solvespace.cpp:937 #, c-format msgid "" "The total length of the selected entities is:\n" @@ -1880,36 +1928,36 @@ msgstr "" "Curves have been approximated as piecewise linear.\n" "This introduces error, typically of around 1%%." -#: solvespace.cpp:898 +#: solvespace.cpp:943 msgid "Bad selection for perimeter; select line segments, arcs, and curves." msgstr "Bad selection for perimeter; select line segments, arcs, and curves." -#: solvespace.cpp:914 +#: solvespace.cpp:959 msgid "Bad selection for trace; select a single point." msgstr "Bad selection for trace; select a single point." -#: solvespace.cpp:941 +#: solvespace.cpp:986 #, c-format msgid "Couldn't write to '%s'" msgstr "Couldn't write to '%s'" -#: solvespace.cpp:971 +#: solvespace.cpp:1016 msgid "The mesh is self-intersecting (NOT okay, invalid)." msgstr "The mesh is self-intersecting (NOT okay, invalid)." -#: solvespace.cpp:972 +#: solvespace.cpp:1017 msgid "The mesh is not self-intersecting (okay, valid)." msgstr "The mesh is not self-intersecting (okay, valid)." -#: solvespace.cpp:974 +#: solvespace.cpp:1019 msgid "The mesh has naked edges (NOT okay, invalid)." msgstr "The mesh has naked edges (NOT okay, invalid)." -#: solvespace.cpp:975 +#: solvespace.cpp:1020 msgid "The mesh is watertight (okay, valid)." msgstr "The mesh is watertight (okay, valid)." -#: solvespace.cpp:978 +#: solvespace.cpp:1023 #, c-format msgid "" "\n" @@ -1920,7 +1968,7 @@ msgstr "" "\n" "The model contains %d triangles, from %d surfaces." -#: solvespace.cpp:982 +#: solvespace.cpp:1027 #, c-format msgid "" "%s\n" @@ -1935,7 +1983,7 @@ msgstr "" "\n" "Zero problematic edges, good.%s" -#: solvespace.cpp:985 +#: solvespace.cpp:1030 #, c-format msgid "" "%s\n" @@ -1950,7 +1998,7 @@ msgstr "" "\n" "%d problematic edges, bad.%s" -#: solvespace.cpp:998 +#: solvespace.cpp:1043 #, c-format msgid "" "This is SolveSpace version %s.\n" @@ -1979,7 +2027,7 @@ msgstr "" "\n" "© 2008-%d Jonathan Westhues and other authors.\n" -#: style.cpp:166 +#: style.cpp:185 msgid "" "Can't assign style to an entity that's derived from another entity; try " "assigning a style to this entity's parent." @@ -1987,27 +2035,27 @@ msgstr "" "Can't assign style to an entity that's derived from another entity; try " "assigning a style to this entity's parent." -#: style.cpp:665 +#: style.cpp:735 msgid "Style name cannot be empty" msgstr "Style name cannot be empty" -#: textscreens.cpp:741 +#: textscreens.cpp:785 msgid "Can't repeat fewer than 1 time." msgstr "Can't repeat fewer than 1 time." -#: textscreens.cpp:745 +#: textscreens.cpp:789 msgid "Can't repeat more than 999 times." msgstr "Can't repeat more than 999 times." -#: textscreens.cpp:770 +#: textscreens.cpp:814 msgid "Group name cannot be empty" msgstr "Group name cannot be empty" -#: textscreens.cpp:813 +#: textscreens.cpp:866 msgid "Opacity must be between zero and one." msgstr "Opacity must be between zero and one." -#: textscreens.cpp:848 +#: textscreens.cpp:901 msgid "Radius cannot be zero or negative." msgstr "Radius cannot be zero or negative." @@ -2162,14 +2210,64 @@ msgctxt "button" msgid "&OK" msgstr "&OK" -#: view.cpp:78 +#: view.cpp:127 msgid "Scale cannot be zero or negative." msgstr "Scale cannot be zero or negative." -#: view.cpp:90 view.cpp:99 +#: view.cpp:139 view.cpp:148 msgid "Bad format: specify x, y, z" msgstr "Bad format: specify x, y, z" +#~ msgid "&Mirror" +#~ msgstr "&Mirror" + +#~ msgctxt "group-name" +#~ msgid "mirror" +#~ msgstr "mirror" + +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "Length Ra&tio" + +#~ msgid "Length Diff&erence" +#~ msgstr "Length Diff&erence" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" + #~ msgctxt "file-type" #~ msgid "Q3D Object file" #~ msgstr "Q3D Object file" diff --git a/res/locales/es_AR.po b/res/locales/es_AR.po index 82fd1b90..74638f0a 100644 --- a/res/locales/es_AR.po +++ b/res/locales/es_AR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2021-09-17 \n" +"POT-Creation-Date: 2021-09-26 16:25-0400\n" "PO-Revision-Date: 2021-09-17 \n" "Last-Translator: andesfreedesign@gmail.com\n" "Language-Team: AndesFreeDesign\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: clipboard.cpp:310 +#: clipboard.cpp:309 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -27,79 +27,78 @@ msgstr "" "solo en un plano de trabajo.\n" "Activar uno con Croquis-> En Plano de trabajo" -#: clipboard.cpp:327 +#: clipboard.cpp:326 msgid "Clipboard is empty; nothing to paste." msgstr "El portapapeles está vacío; nada que pegar." -#: clipboard.cpp:374 +#: clipboard.cpp:373 msgid "Number of copies to paste must be at least one." msgstr "El número de copias para pegar debe ser al menos una." -#: clipboard.cpp:390 textscreens.cpp:783 +#: clipboard.cpp:389 textscreens.cpp:827 msgid "Scale cannot be zero." msgstr "La escala no puede ser cero." -#: clipboard.cpp:432 +#: clipboard.cpp:431 msgid "Select one point to define origin of rotation." msgstr "Seleccione un punto para definir el origen de la rotación." -#: clipboard.cpp:444 +#: clipboard.cpp:443 msgid "Select two points to define translation vector." msgstr "Seleccione dos puntos para definir el vector de traslación." -#: clipboard.cpp:454 +#: clipboard.cpp:453 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." msgstr "" -"No se especificó ninguna transformación. Todas las copias estarán ubicadas en el mismo lugar." +"No se especificó ninguna transformación. Todas las copias estarán ubicadas " +"en el mismo lugar." -#: clipboard.cpp:458 +#: clipboard.cpp:457 msgid "Too many items to paste; split this into smaller pastes." msgstr "Demasiados elementos para pegar; divida esto en partes más pequeñas." -#: clipboard.cpp:463 +#: clipboard.cpp:462 msgid "No workplane active." msgstr "Ningún plano de trabajo activo." -#: confscreen.cpp:418 +#: confscreen.cpp:376 msgid "Bad format: specify coordinates as x, y, z" msgstr "Formato incorrecto: especifique las coordenadas como x, y, z" -#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858 msgid "Bad format: specify color as r, g, b" msgstr "Formato incorrecto: especifique color como r, g, b" -#: confscreen.cpp:454 +#: confscreen.cpp:412 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." msgstr "" -"El factor de perspectiva no tendrá ningún efecto hasta que habilite Ver -> Usar" -"Proyección Perspectiva." +"El factor de perspectiva no tendrá ningún efecto hasta que habilite Ver -> " +"UsarProyección Perspectiva." -#: confscreen.cpp:467 confscreen.cpp:477 +#: confscreen.cpp:430 confscreen.cpp:440 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "Especifique entre 0 y %d dígitos después del decimal." -#: confscreen.cpp:489 +#: confscreen.cpp:452 msgid "Export scale must not be zero!" msgstr "¡La escala de exportación no debe ser cero!" -#: confscreen.cpp:501 +#: confscreen.cpp:464 msgid "Cutter radius offset must not be negative!" msgstr "¡El desfase del radio de corte no debe ser negativo!" -#: confscreen.cpp:555 +#: confscreen.cpp:518 msgid "Bad value: autosave interval should be positive" -msgstr "" -"Valor incorrecto: el intervalo de autoguardado debe ser positivo" +msgstr "Valor incorrecto: el intervalo de autoguardado debe ser positivo" -#: confscreen.cpp:558 +#: confscreen.cpp:521 msgid "Bad format: specify interval in integral minutes" -msgstr "" -"Formato incorrecto: especifique el intervalo en minutos integrales" +msgstr "Formato incorrecto: especifique el intervalo en minutos integrales" #: constraint.cpp:12 msgctxt "constr-name" @@ -168,139 +167,159 @@ msgstr "longitud-radio" #: constraint.cpp:25 msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" msgid "length-difference" msgstr "longitud-diferencia" -#: constraint.cpp:26 +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "" + +#: constraint.cpp:30 msgctxt "constr-name" msgid "symmetric" msgstr "simetría" -#: constraint.cpp:27 +#: constraint.cpp:31 msgctxt "constr-name" msgid "symmetric-h" msgstr "simetría-h" -#: constraint.cpp:28 +#: constraint.cpp:32 msgctxt "constr-name" msgid "symmetric-v" msgstr "simetría-v" -#: constraint.cpp:29 +#: constraint.cpp:33 msgctxt "constr-name" msgid "symmetric-line" msgstr "simetría-línea" -#: constraint.cpp:30 +#: constraint.cpp:34 msgctxt "constr-name" msgid "at-midpoint" msgstr "en-puntoMedio" -#: constraint.cpp:31 +#: constraint.cpp:35 msgctxt "constr-name" msgid "horizontal" msgstr "horizontal" -#: constraint.cpp:32 +#: constraint.cpp:36 msgctxt "constr-name" msgid "vertical" msgstr "vertical" -#: constraint.cpp:33 +#: constraint.cpp:37 msgctxt "constr-name" msgid "diameter" msgstr "diámetro" -#: constraint.cpp:34 +#: constraint.cpp:38 msgctxt "constr-name" msgid "pt-on-circle" msgstr "p-sobre-círculo" -#: constraint.cpp:35 +#: constraint.cpp:39 msgctxt "constr-name" msgid "same-orientation" msgstr "misma-orientación" -#: constraint.cpp:36 +#: constraint.cpp:40 msgctxt "constr-name" msgid "angle" msgstr "ángulo" -#: constraint.cpp:37 +#: constraint.cpp:41 msgctxt "constr-name" msgid "parallel" msgstr "paralela" -#: constraint.cpp:38 +#: constraint.cpp:42 msgctxt "constr-name" msgid "arc-line-tangent" msgstr "arco-línea-tangente" -#: constraint.cpp:39 +#: constraint.cpp:43 msgctxt "constr-name" msgid "cubic-line-tangent" msgstr "cúbica-línea-tangente" -#: constraint.cpp:40 +#: constraint.cpp:44 msgctxt "constr-name" msgid "curve-curve-tangent" msgstr "curva-curva-tangente" -#: constraint.cpp:41 +#: constraint.cpp:45 msgctxt "constr-name" msgid "perpendicular" msgstr "perpendicular" -#: constraint.cpp:42 +#: constraint.cpp:46 msgctxt "constr-name" msgid "eq-radius" msgstr "igual-radio" -#: constraint.cpp:43 +#: constraint.cpp:47 msgctxt "constr-name" msgid "eq-angle" msgstr "igual-ángulo" -#: constraint.cpp:44 +#: constraint.cpp:48 msgctxt "constr-name" msgid "eq-line-len-arc-len" msgstr "igual-línea-long-arco-long" -#: constraint.cpp:45 +#: constraint.cpp:49 msgctxt "constr-name" msgid "lock-where-dragged" msgstr "fijación" -#: constraint.cpp:46 +#: constraint.cpp:50 msgctxt "constr-name" msgid "comment" msgstr "comentario" -#: constraint.cpp:140 +#: constraint.cpp:144 msgid "" "The tangent arc and line segment must share an endpoint. Constrain them with " "Constrain -> On Point before constraining tangent." msgstr "" -"El arco tangente y la línea deben compartir un punto final. Restringirlos con " -"Restringir -> En el punto antes de restringir la tangente." +"El arco tangente y la línea deben compartir un punto final. Restringirlos " +"con Restringir -> En el punto antes de restringir la tangente." -#: constraint.cpp:158 +#: constraint.cpp:163 msgid "" "The tangent cubic and line segment must share an endpoint. Constrain them " "with Constrain -> On Point before constraining tangent." msgstr "" -"La tangente cúbica y la línea deben compartir un punto final. Restringirlos con " -"Restringir -> En el punto antes de restringir la tangente." +"La tangente cúbica y la línea deben compartir un punto final. Restringirlos " +"con Restringir -> En el punto antes de restringir la tangente." -#: constraint.cpp:183 +#: constraint.cpp:189 msgid "" "The curves must share an endpoint. Constrain them with Constrain -> On Point " "before constraining tangent." msgstr "" -"Las curvas deben compartir un punto final. Restringirlos con " -"Restringir -> En el punto antes de restringir la tangente." +"Las curvas deben compartir un punto final. Restringirlos con Restringir -> " +"En el punto antes de restringir la tangente." -#: constraint.cpp:231 +#: constraint.cpp:238 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -313,8 +332,8 @@ msgid "" " * a plane face and a point (minimum distance)\n" " * a circle or an arc (diameter)\n" msgstr "" -"Mala selección para la restricción de distancia / diámetro. Esta restricción puede aplicarse " -"a:\n" +"Mala selección para la restricción de distancia / diámetro. Esta restricción " +"puede aplicarse a:\n" "\n" " * dos puntos (distancia entre puntos) \n" " * un segmento de línea (longitud) \n" @@ -324,7 +343,7 @@ msgstr "" " * una cara plana y un punto (distancia mínima) \n" " * un círculo o un arco (diámetro) \n" -#: constraint.cpp:284 +#: constraint.cpp:291 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -335,8 +354,8 @@ msgid "" " * a point and a circle or arc (point on curve)\n" " * a point and a plane face (point on face)\n" msgstr "" -"Mala selección para una restricción de punto / curva / plano. Esta restricción puede" -"aplicar a: \n" +"Mala selección para una restricción de punto / curva / plano. Esta " +"restricción puedeaplicar a: \n" "\n" " * dos puntos (puntos coincidentes) \n" " * un punto y un plano de trabajo (punto en el plano) \n" @@ -344,7 +363,7 @@ msgstr "" " * un punto y un círculo o arco (punto en la curva) \n" " * un punto y una cara plana (punto en la cara) \n" -#: constraint.cpp:346 +#: constraint.cpp:353 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -359,54 +378,55 @@ msgid "" " * two circles or arcs (equal radius)\n" " * a line segment and an arc (line segment length equals arc length)\n" msgstr "" -"Mala selección para restricción de igualdad longitud / radio. Esta restricción puede " -"aplicar a:\n" +"Mala selección para restricción de igualdad longitud / radio. Esta " +"restricción puede aplicar a:\n" "\n" " * dos segmentos de línea (igual longitud)\n" -" * dos segmentos de línea y dos puntos (distancias de línea-punto iguales)\n" +" * dos segmentos de línea y dos puntos (distancias de línea-punto " +"iguales)\n" " * un segmento de línea y dos puntos (distancias punto-línea iguales)\n" -" * un segmento de línea, y un punto y un segmento de línea (distancia punto-línea " -"igual a la longitud)\n" +" * un segmento de línea, y un punto y un segmento de línea (distancia " +"punto-línea igual a la longitud)\n" " * cuatro segmentos de línea o normales (ángulo igual entre A,B y C,D)\n" " * tres segmentos de línea o normales (ángulo igual entre A,B y B,C)\n" " * 2 círculos o arcos (igual radio)\n" -" * un segmento de línea y un arco (la longitud del segmento de línea es igual a la longitud del arco)\n" +" * un segmento de línea y un arco (la longitud del segmento de línea es " +"igual a la longitud del arco)\n" -#: constraint.cpp:385 +#: constraint.cpp:407 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"Mala selección por restricción de la relación de longitud. Esta restricción se puede aplicar a:\n" -"\n" -" * dos segmentos de línea\n" -#: constraint.cpp:402 +#: constraint.cpp:441 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"Mala selección por restricción de diferencia de longitud. Esta restricción puede aplicar " -"a:\n" -"\n" -" * dos segmentos de línea\n" -#: constraint.cpp:428 +#: constraint.cpp:472 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" " * a line segment and a point (point at midpoint)\n" " * a line segment and a workplane (line's midpoint on plane)\n" msgstr "" -"Mala selección para una restricción de punto medio. Esta restricción se puede aplicar a:\n" +"Mala selección para una restricción de punto medio. Esta restricción se " +"puede aplicar a:\n" "\n" " * un segmento de línea y un punto (punto en el punto medio)\n" -" * un segmento de línea y un plano de trabajo (punto medio de la línea en el plano)\n" +" * un segmento de línea y un plano de trabajo (punto medio de la línea en " +"el plano)\n" -#: constraint.cpp:486 +#: constraint.cpp:530 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -417,32 +437,33 @@ msgid "" " * workplane, and two points or a line segment (symmetric about " "workplane)\n" msgstr "" -"Mala selección por restricción simétrica. Esta restricción se puede aplicar a:\n" +"Mala selección por restricción simétrica. Esta restricción se puede aplicar " +"a:\n" "\n" -" * dos puntos o un segmento de línea (simétrico con respecto al eje de coordenadas del " -"plano de trabajo)\n" -" * segmento de línea, y dos puntos o un segmento de línea (simétrico con respecto al segmento " -"de línea)\n" +" * dos puntos o un segmento de línea (simétrico con respecto al eje de " +"coordenadas del plano de trabajo)\n" +" * segmento de línea, y dos puntos o un segmento de línea (simétrico con " +"respecto al segmento de línea)\n" " * plano de trabajo, y dos puntos o un segmento de recta (simétrico sobre " "plano de trabajo)\n" -#: constraint.cpp:500 +#: constraint.cpp:545 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." msgstr "" -"Un plano de trabajo debe estar activo al restringir simétrico sin un plano de " -"simetría explícito." +"Un plano de trabajo debe estar activo al restringir simétrico sin un plano " +"de simetría explícito." -#: constraint.cpp:530 +#: constraint.cpp:579 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." msgstr "" -"Active un plano de trabajo (con Croquis -> En plano de trabajo) antes de aplicar una " -"restricción horizontal o vertical." +"Active un plano de trabajo (con Croquis -> En plano de trabajo) antes de " +"aplicar una restricción horizontal o vertical." -#: constraint.cpp:543 +#: constraint.cpp:592 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -456,27 +477,27 @@ msgstr "" " * dos puntos\n" " * un segmento de línea\n" -#: constraint.cpp:564 +#: constraint.cpp:613 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" "\n" " * two normals\n" msgstr "" -"Mala selección para la misma restricción de orientación. Esta restricción puede aplicarse " -"a:\n" +"Mala selección para la misma restricción de orientación. Esta restricción " +"puede aplicarse a:\n" "\n" " * dos normales\n" -#: constraint.cpp:614 +#: constraint.cpp:663 msgid "Must select an angle constraint." msgstr "Debe seleccionar una restricción de ángulo." -#: constraint.cpp:627 +#: constraint.cpp:676 msgid "Must select a constraint with associated label." msgstr "Debe seleccionar una restricción con etiqueta asociada." -#: constraint.cpp:638 +#: constraint.cpp:687 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -484,17 +505,18 @@ msgid "" " * a line segment and a normal\n" " * two normals\n" msgstr "" -"Mala selección por restricción de ángulo. Esta restricción se puede aplicar a:\n" +"Mala selección por restricción de ángulo. Esta restricción se puede aplicar " +"a:\n" "\n" " * dos segmentos de línea\n" " * un segmento de linea y una normal\n" " * dos normales\n" -#: constraint.cpp:701 +#: constraint.cpp:754 msgid "Curve-curve tangency must apply in workplane." msgstr "La tangencia curva-curva debe aplicarse en el plano de trabajo." -#: constraint.cpp:711 +#: constraint.cpp:766 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -504,15 +526,16 @@ msgid "" " * two normals (parallel)\n" " * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" msgstr "" -"Mala selección para restricción de paralelo / tangente. Esta restricción puede aplicarse " -"a:\n" +"Mala selección para restricción de paralelo / tangente. Esta restricción " +"puede aplicarse a:\n" "\n" " * dos segmentos de línea (paralelos)\n" " * un segmento de línea y una normal (paralelas)\n" " * dos normales (paralelas)\n" -" * dos segmentos de línea, arcos, o beziers, que comparten un punto final (tangente)\n" +" * dos segmentos de línea, arcos, o beziers, que comparten un punto final " +"(tangente)\n" -#: constraint.cpp:729 +#: constraint.cpp:784 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -520,25 +543,30 @@ msgid "" " * a line segment and a normal\n" " * two normals\n" msgstr "" -"Mala selección por restricción perpendicular. Esta restricción se puede aplicar a:\n" +"Mala selección por restricción perpendicular. Esta restricción se puede " +"aplicar a:\n" "\n" " * dos segmentos de línea\n" " * un segmento de línea y una normal\n" " * dos normales\n" -#: constraint.cpp:744 +#: constraint.cpp:799 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" "\n" " * a point\n" msgstr "" -"Mala selección para el punto de bloqueo donde se arrastró la restricción. Esta restricción puede " -"aplicar a:\n" +"Mala selección para el punto de bloqueo donde se arrastró la restricción. " +"Esta restricción puede aplicar a:\n" "\n" " * un punto\n" -#: constraint.cpp:755 +#: constraint.cpp:813 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NUEVO COMENTARIO -- DOBLE-CLIC PARA EDITAR" + +#: constraint.cpp:818 msgid "click center of comment text" msgstr "clic en el centro del texto del comentario" @@ -547,8 +575,8 @@ msgid "" "No solid model present; draw one with extrudes and revolves, or use Export " "2d View to export bare lines and curves." msgstr "" -"No hay un modelo sólido presente; dibuje uno con extrusiones y revoluciones, o use Exportar " -"Vista 2d para exportar líneas y curvas desnudas." +"No hay un modelo sólido presente; dibuje uno con extrusiones y revoluciones, " +"o use Exportar Vista 2d para exportar líneas y curvas desnudas." #: export.cpp:61 msgid "" @@ -561,35 +589,36 @@ msgid "" msgstr "" "Mala selección para la sección de exportación. Por favor seleccione:\n" "\n" -" * nada, con un plano de trabajo activo (el plano de trabajo es un plano de sección)\n" +" * nada, con un plano de trabajo activo (el plano de trabajo es un plano " +"de sección)\n" " * una cara (plano de sección a través de la cara)\n" -" * un punto y dos segmentos de línea (plano que pasa por el punto y paralelo a las " -"líneas)\n" +" * un punto y dos segmentos de línea (plano que pasa por el punto y " +"paralelo a las líneas)\n" -#: export.cpp:822 +#: export.cpp:818 msgid "Active group mesh is empty; nothing to export." msgstr "La malla del grupo activo está vacía; nada para exportar." -#: exportvector.cpp:337 +#: exportvector.cpp:336 msgid "freehand lines were replaced with continuous lines" msgstr "Las líneas a mano alzada fueron reemplazadas por líneas continuas." -#: exportvector.cpp:339 +#: exportvector.cpp:338 msgid "zigzag lines were replaced with continuous lines" msgstr "Las líneas en zigzag fueron reemplazadas por líneas continuas." -#: exportvector.cpp:593 +#: exportvector.cpp:592 msgid "" "Some aspects of the drawing have no DXF equivalent and were not exported:\n" msgstr "" "Algunos aspectos del dibujo no tienen equivalente DXF y no se exportaron:\n" -#: exportvector.cpp:839 +#: exportvector.cpp:838 msgid "" "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." msgstr "" -"El tamaño de la página PDF supera las 5080mm x 5080mm; " -"muchos usuarios pueden rechazar este archivo." +"El tamaño de la página PDF supera las 5080mm x 5080mm; muchos usuarios " +"pueden rechazar este archivo." #: file.cpp:44 group.cpp:91 msgctxt "group-name" @@ -601,17 +630,17 @@ msgctxt "group-name" msgid "#references" msgstr "#referencias" -#: file.cpp:552 +#: file.cpp:550 msgid "The file is empty. It may be corrupt." msgstr "El archivo esta vacío. Puede estar corrupto." -#: file.cpp:557 +#: file.cpp:555 msgid "" "Unrecognized data in file. This file may be corrupt, or from a newer version " "of the program." msgstr "" -"Datos no reconocidos en el archivo. Este archivo puede estar dañado o ser de una versión más reciente " -" del programa." +"Datos no reconocidos en el archivo. Este archivo puede estar dañado o ser de " +"una versión más reciente del programa." #: file.cpp:867 msgctxt "title" @@ -634,8 +663,8 @@ msgid "" msgstr "" "¿Quieres localizarlo manualmente?\n" "\n" -"Si lo rechaza, cualquier geometría que dependa del archivo faltante " -"se eliminará permanentemente." +"Si lo rechaza, cualquier geometría que dependa del archivo faltante se " +"eliminará permanentemente." #: file.cpp:873 msgctxt "button" @@ -647,7 +676,7 @@ msgctxt "button" msgid "&No" msgstr "&No" -#: file.cpp:877 solvespace.cpp:569 +#: file.cpp:877 solvespace.cpp:610 msgctxt "button" msgid "&Cancel" msgstr "&Cancelar" @@ -821,295 +850,304 @@ msgid "Use &Perspective Projection" msgstr "Usar Proyección &Perspectiva" #: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "" + +#: graphicswin.cpp:98 msgid "Dimension &Units" msgstr "&Unidades de Cota" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in &Millimeters" msgstr "Cotas en &Milímetros" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in M&eters" msgstr "Cotas en M&etros" -#: graphicswin.cpp:100 +#: graphicswin.cpp:101 msgid "Dimensions in &Inches" msgstr "Cotas en &Pulgadas" #: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "" + +#: graphicswin.cpp:104 msgid "Show &Toolbar" msgstr "Mostrar &Barra de herramientas" -#: graphicswin.cpp:103 +#: graphicswin.cpp:105 msgid "Show Property Bro&wser" msgstr "Mostrar Nave&gador de Propiedades" -#: graphicswin.cpp:105 +#: graphicswin.cpp:107 msgid "&Full Screen" msgstr "&Pantalla Completa" -#: graphicswin.cpp:107 +#: graphicswin.cpp:109 msgid "&New Group" msgstr "&Nuevo Grupo" -#: graphicswin.cpp:108 +#: graphicswin.cpp:110 msgid "Sketch In &3d" msgstr "Сroquis En &3d" -#: graphicswin.cpp:109 +#: graphicswin.cpp:111 msgid "Sketch In New &Workplane" msgstr "Сroquis En Nuevo &Plano de trabajo" -#: graphicswin.cpp:111 +#: graphicswin.cpp:113 msgid "Step &Translating" msgstr "Paso &Traslación" -#: graphicswin.cpp:112 +#: graphicswin.cpp:114 msgid "Step &Rotating" msgstr "Paso &Giratorio" -#: graphicswin.cpp:114 +#: graphicswin.cpp:116 msgid "E&xtrude" msgstr "E&xtrusión" -#: graphicswin.cpp:115 +#: graphicswin.cpp:117 msgid "&Helix" msgstr "&Hélice" -#: graphicswin.cpp:116 +#: graphicswin.cpp:118 msgid "&Lathe" msgstr "&Torno" -#: graphicswin.cpp:117 +#: graphicswin.cpp:119 msgid "Re&volve" msgstr "Re&volución" -#: graphicswin.cpp:119 +#: graphicswin.cpp:121 msgid "Link / Assemble..." msgstr "Enlace / Ensamblar..." -#: graphicswin.cpp:120 +#: graphicswin.cpp:122 msgid "Link Recent" msgstr "Enlace Reciente" -#: graphicswin.cpp:122 +#: graphicswin.cpp:124 msgid "&Sketch" msgstr "&Croquis" -#: graphicswin.cpp:123 +#: graphicswin.cpp:125 msgid "In &Workplane" msgstr "En &Plano de trabajo" -#: graphicswin.cpp:124 +#: graphicswin.cpp:126 msgid "Anywhere In &3d" msgstr "En cualquier lugar en &3d" -#: graphicswin.cpp:126 +#: graphicswin.cpp:128 msgid "Datum &Point" msgstr "Referencia &Punto" -#: graphicswin.cpp:127 +#: graphicswin.cpp:129 msgid "&Workplane" msgstr "&Plano de trabajo" -#: graphicswin.cpp:129 +#: graphicswin.cpp:131 msgid "Line &Segment" msgstr "Línea &Segmento" -#: graphicswin.cpp:130 +#: graphicswin.cpp:132 msgid "C&onstruction Line Segment" msgstr "S&egmento de Línea de Construcción" -#: graphicswin.cpp:131 +#: graphicswin.cpp:133 msgid "&Rectangle" msgstr "&Rectángulo" -#: graphicswin.cpp:132 +#: graphicswin.cpp:134 msgid "&Circle" msgstr "&Círculo" -#: graphicswin.cpp:133 +#: graphicswin.cpp:135 msgid "&Arc of a Circle" msgstr "&Arco de un Círculo" -#: graphicswin.cpp:134 +#: graphicswin.cpp:136 msgid "&Bezier Cubic Spline" msgstr "&Spline Cúbico de Bezier" -#: graphicswin.cpp:136 +#: graphicswin.cpp:138 msgid "&Text in TrueType Font" msgstr "&Texto en Fuente TrueType" -#: graphicswin.cpp:137 +#: graphicswin.cpp:139 msgid "&Image" msgstr "&Imagen" -#: graphicswin.cpp:139 +#: graphicswin.cpp:141 msgid "To&ggle Construction" msgstr "Al&ternar Construcción" -#: graphicswin.cpp:140 +#: graphicswin.cpp:142 msgid "Tangent &Arc at Point" msgstr "Tangente &Arco en el Punto" -#: graphicswin.cpp:141 +#: graphicswin.cpp:143 msgid "Split Curves at &Intersection" msgstr "Dividir Curvas en &Intersección" -#: graphicswin.cpp:143 +#: graphicswin.cpp:145 msgid "&Constrain" msgstr "&Restricción" -#: graphicswin.cpp:144 +#: graphicswin.cpp:146 msgid "&Distance / Diameter" msgstr "&Distancia / Diámetro" -#: graphicswin.cpp:145 +#: graphicswin.cpp:147 msgid "Re&ference Dimension" msgstr "Co&ta de Referencia" -#: graphicswin.cpp:146 +#: graphicswin.cpp:148 msgid "A&ngle" msgstr "Á&ngulo" -#: graphicswin.cpp:147 +#: graphicswin.cpp:149 msgid "Reference An&gle" msgstr "Ángulo de Re&ferencia" -#: graphicswin.cpp:148 +#: graphicswin.cpp:150 msgid "Other S&upplementary Angle" msgstr "Otro Á&ngulo Suplementario" -#: graphicswin.cpp:149 +#: graphicswin.cpp:151 msgid "Toggle R&eference Dim" msgstr "Alternar C&ota Referencia" -#: graphicswin.cpp:151 +#: graphicswin.cpp:153 msgid "&Horizontal" msgstr "&Horizontal" -#: graphicswin.cpp:152 +#: graphicswin.cpp:154 msgid "&Vertical" msgstr "&Vertical" -#: graphicswin.cpp:154 +#: graphicswin.cpp:156 msgid "&On Point / Curve / Plane" msgstr "&Sobre Punto / Curva / Plano" -#: graphicswin.cpp:155 +#: graphicswin.cpp:157 msgid "E&qual Length / Radius / Angle" msgstr "I&gual Longitud / Radio / Ángulo" -#: graphicswin.cpp:156 -msgid "Length Ra&tio" -msgstr "Relación Lo&ngitud" - -#: graphicswin.cpp:157 -msgid "Length Diff&erence" -msgstr "Diferencia Long&itud" - #: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "" + +#: graphicswin.cpp:160 msgid "At &Midpoint" msgstr "En &PuntoMedio" -#: graphicswin.cpp:159 +#: graphicswin.cpp:161 msgid "S&ymmetric" msgstr "S&imetría" -#: graphicswin.cpp:160 +#: graphicswin.cpp:162 msgid "Para&llel / Tangent" msgstr "Para&lela / Tangente" -#: graphicswin.cpp:161 +#: graphicswin.cpp:163 msgid "&Perpendicular" msgstr "&Perpendicular" -#: graphicswin.cpp:162 +#: graphicswin.cpp:164 msgid "Same Orient&ation" msgstr "Misma Orient&ación" -#: graphicswin.cpp:163 +#: graphicswin.cpp:165 msgid "Lock Point Where &Dragged" msgstr "Punto de Bloqueo Donde &Arrastrado" -#: graphicswin.cpp:165 +#: graphicswin.cpp:167 msgid "Comment" msgstr "Comentario" -#: graphicswin.cpp:167 +#: graphicswin.cpp:169 msgid "&Analyze" msgstr "&Analizar" -#: graphicswin.cpp:168 +#: graphicswin.cpp:170 msgid "Measure &Volume" msgstr "Medición &Volumen" -#: graphicswin.cpp:169 +#: graphicswin.cpp:171 msgid "Measure A&rea" msgstr "Medición Á&rea" -#: graphicswin.cpp:170 +#: graphicswin.cpp:172 msgid "Measure &Perimeter" msgstr "Medición &Perímetro" -#: graphicswin.cpp:171 +#: graphicswin.cpp:173 msgid "Show &Interfering Parts" msgstr "Mostrar &Piezas que Interfieren" -#: graphicswin.cpp:172 +#: graphicswin.cpp:174 msgid "Show &Naked Edges" msgstr "Mostrar &Aristas Desnudas" -#: graphicswin.cpp:173 +#: graphicswin.cpp:175 msgid "Show &Center of Mass" msgstr "Mostrar &Centro de Masa" -#: graphicswin.cpp:175 +#: graphicswin.cpp:177 msgid "Show &Underconstrained Points" msgstr "Mostrar &Puntos Subrestringidos" -#: graphicswin.cpp:177 +#: graphicswin.cpp:179 msgid "&Trace Point" msgstr "&Punto de Rastro" -#: graphicswin.cpp:178 +#: graphicswin.cpp:180 msgid "&Stop Tracing..." msgstr "&Dejar de rastrear..." -#: graphicswin.cpp:179 +#: graphicswin.cpp:181 msgid "Step &Dimension..." msgstr "Cota &Paso..." -#: graphicswin.cpp:181 +#: graphicswin.cpp:183 msgid "&Help" msgstr "&Ayuda" -#: graphicswin.cpp:182 +#: graphicswin.cpp:184 msgid "&Language" msgstr "&Lenguaje" -#: graphicswin.cpp:183 +#: graphicswin.cpp:185 msgid "&Website / Manual" msgstr "&Sitio Web / Manual" -#: graphicswin.cpp:185 +#: graphicswin.cpp:187 msgid "&About" msgstr "&Acerca" -#: graphicswin.cpp:355 +#: graphicswin.cpp:361 msgid "(no recent files)" msgstr "(no hay archivos recientes)" -#: graphicswin.cpp:363 +#: graphicswin.cpp:369 #, c-format msgid "File '%s' does not exist." msgstr "El archivo '%s' no existe." -#: graphicswin.cpp:725 +#: graphicswin.cpp:736 msgid "No workplane is active, so the grid will not appear." -msgstr "No hay ningún plano de trabajo activo, por lo que la cuadrícula no aparecerá." +msgstr "" +"No hay ningún plano de trabajo activo, por lo que la cuadrícula no aparecerá." -#: graphicswin.cpp:740 +#: graphicswin.cpp:751 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1117,155 +1155,157 @@ msgid "" "For a perspective projection, modify the perspective factor in the " "configuration screen. A value around 0.3 is typical." msgstr "" -"El factor de perspectiva se establece en cero, por lo que la vista siempre será una proyección " -"paralela.\n" +"El factor de perspectiva se establece en cero, por lo que la vista siempre " +"será una proyección paralela.\n" "\n" -"Para una proyección en perspectiva, modifique el factor de perspectiva en la pantalla de configuración. " -" Un valor de alrededor de 0,3 es típico." +"Para una proyección en perspectiva, modifique el factor de perspectiva en la " +"pantalla de configuración. Un valor de alrededor de 0,3 es típico." -#: graphicswin.cpp:819 +#: graphicswin.cpp:836 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" -"Seleccione un punto; este punto se convertirá en el centro de la vista en pantalla." +"Seleccione un punto; este punto se convertirá en el centro de la vista en " +"pantalla." -#: graphicswin.cpp:1114 +#: graphicswin.cpp:1136 msgid "No additional entities share endpoints with the selected entities." -msgstr "Ninguna entidad adicional comparte puntos finales con las entidades seleccionadas." +msgstr "" +"Ninguna entidad adicional comparte puntos finales con las entidades " +"seleccionadas." -#: graphicswin.cpp:1132 +#: graphicswin.cpp:1154 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." msgstr "" -"Para usar este comando, seleccione un punto u otra entidad de una parte vinculada, o " -"convertir un grupo de enlaces en el grupo activo." +"Para usar este comando, seleccione un punto u otra entidad de una parte " +"vinculada, o convertir un grupo de enlaces en el grupo activo." -#: graphicswin.cpp:1155 +#: graphicswin.cpp:1177 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." msgstr "" -"No hay ningún plano de trabajo activo. Activar un plano de trabajo (con Croquis -> En plano de trabajo) " -"para definir el plano para el enganche a la cuadrícula." +"No hay ningún plano de trabajo activo. Activar un plano de trabajo (con " +"Croquis -> En plano de trabajo) para definir el plano para el enganche a la " +"cuadrícula." -#: graphicswin.cpp:1162 +#: graphicswin.cpp:1184 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." msgstr "" -"No se pueden enganchar estos elementos a la cuadrícula; seleccionar puntos, comentarios de texto o restricciones " -"con una etiqueta. Para enganchar una línea, seleccione sus puntos finales." +"No se pueden enganchar estos elementos a la cuadrícula; seleccionar puntos, " +"comentarios de texto o restricciones con una etiqueta. Para enganchar una " +"línea, seleccione sus puntos finales." -#: graphicswin.cpp:1247 +#: graphicswin.cpp:1269 msgid "No workplane selected. Activating default workplane for this group." -msgstr "No se seleccionó ningún plano de trabajo. Activando el plano de trabajo predeterminado para este grupo." +msgstr "" +"No se seleccionó ningún plano de trabajo. Activando el plano de trabajo " +"predeterminado para este grupo." -#: graphicswin.cpp:1250 +#: graphicswin.cpp:1272 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" "workplane group." msgstr "" -"No se selecciona ningún plano de trabajo y el grupo activo no tiene un " -"plano de trabajo. Intente seleccionar un plano de trabajo o activar un croquis-en-nuevo-" -"grupo de plano de trabajo." +"No se selecciona ningún plano de trabajo y el grupo activo no tiene un plano " +"de trabajo. Intente seleccionar un plano de trabajo o activar un croquis-en-" +"nuevo-grupo de plano de trabajo." -#: graphicswin.cpp:1271 +#: graphicswin.cpp:1293 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." msgstr "" -"Mala selección de arco tangente en el punto. Seleccione un solo punto o no seleccione " -"nada para configurar los parámetros del arco." +"Mala selección de arco tangente en el punto. Seleccione un solo punto o no " +"seleccione nada para configurar los parámetros del arco." -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1304 msgid "click point on arc (draws anti-clockwise)" msgstr "clic en el punto en el arco (dibuja en sentido antihorario)" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1305 msgid "click to place datum point" msgstr "clic para colocar el punto de referencia" -#: graphicswin.cpp:1284 +#: graphicswin.cpp:1306 msgid "click first point of line segment" msgstr "clic en el primer punto del segmento de línea" -#: graphicswin.cpp:1286 +#: graphicswin.cpp:1308 msgid "click first point of construction line segment" msgstr "clic en el primer punto del segmento de línea de construcción" -#: graphicswin.cpp:1287 +#: graphicswin.cpp:1309 msgid "click first point of cubic segment" msgstr "clic en el primer punto del segmento cúbico" -#: graphicswin.cpp:1288 +#: graphicswin.cpp:1310 msgid "click center of circle" msgstr "clic en el centro del círculo" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1311 msgid "click origin of workplane" msgstr "clic en origen del plano de trabajo" -#: graphicswin.cpp:1290 +#: graphicswin.cpp:1312 msgid "click one corner of rectangle" msgstr "clic en una esquina del rectángulo" -#: graphicswin.cpp:1291 +#: graphicswin.cpp:1313 msgid "click top left of text" msgstr "clic en la parte superior izquierda del texto" -#: graphicswin.cpp:1297 +#: graphicswin.cpp:1319 msgid "click top left of image" msgstr "clic en la parte superior izquierda de la imagen" -#: graphicswin.cpp:1309 +#: graphicswin.cpp:1345 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." msgstr "" -"No se seleccionaron entidades. Seleccione entidades antes de intentar alternar su " -"estado de construcción." +"No se seleccionaron entidades. Seleccione entidades antes de intentar " +"alternar su estado de construcción." #: group.cpp:86 msgctxt "group-name" msgid "sketch-in-3d" msgstr "croquis-en-3d" -#: group.cpp:142 +#: group.cpp:150 msgid "" "Bad selection for new sketch in workplane. This group can be created with:\n" "\n" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, parallel to the " "lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" msgstr "" -"Mala selección para un nuevo croquis en el plano de trabajo. Este grupo se puede crear con:\n" -"\n" -" * un punto (a través del punto, ortogonal a los ejes de coordenadas)\n" -" * un punto y dos segmentos de línea (a través del punto, paralelo a " -"líneas)\n" -" * un plano de trabajo (copia de un plano de trabajo)\n" -#: group.cpp:154 +#: group.cpp:166 msgid "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " "will be extruded normal to the workplane." msgstr "" -"Active un plano de trabajo (Croquis -> En plano de trabajo) antes de extruir. El croquis " -"se extruirá normal al plano de trabajo." +"Active un plano de trabajo (Croquis -> En plano de trabajo) antes de " +"extruir. El croquis se extruirá normal al plano de trabajo." -#: group.cpp:163 +#: group.cpp:175 msgctxt "group-name" msgid "extrude" msgstr "extruir" -#: group.cpp:168 +#: group.cpp:180 msgid "Lathe operation can only be applied to planar sketches." msgstr "La operación de torno solo se puede aplicar a croquis planos." -#: group.cpp:179 +#: group.cpp:191 msgid "" "Bad selection for new lathe group. This group can be created with:\n" "\n" @@ -1275,20 +1315,20 @@ msgid "" msgstr "" "Mala selección para el nuevo grupo de torno. Este grupo se puede crear con:\n" "\n" -" * un punto y un segmento de línea o normal (revolucionado alrededor de un eje paralelo " -"a la línea / normal, a través del punto)\n" +" * un punto y un segmento de línea o normal (revolucionado alrededor de " +"un eje paralelo a la línea / normal, a través del punto)\n" " * un segmento de línea (revolucionado sobre un segmento de línea)\n" -#: group.cpp:189 +#: group.cpp:201 msgctxt "group-name" msgid "lathe" msgstr "torno" -#: group.cpp:194 +#: group.cpp:206 msgid "Revolve operation can only be applied to planar sketches." msgstr "La operación de revolución solo se puede aplicar a croquis planos." -#: group.cpp:205 +#: group.cpp:217 msgid "" "Bad selection for new revolve group. This group can be created with:\n" "\n" @@ -1296,22 +1336,23 @@ msgid "" "to line / normal, through point)\n" " * a line segment (revolved about line segment)\n" msgstr "" -"Mala selección para el nuevo grupo de revolución. Este grupo se puede crear con:\n" +"Mala selección para el nuevo grupo de revolución. Este grupo se puede crear " +"con:\n" "\n" -" * un punto y un segmento de línea o normal (revolucionado alrededor de un eje paralelo " -"a la línea / normal, a través del punto)\n" +" * un punto y un segmento de línea o normal (revolucionado alrededor de " +"un eje paralelo a la línea / normal, a través del punto)\n" " * un segmento de línea (revolucionado sobre un segmento de línea)\n" -#: group.cpp:217 +#: group.cpp:229 msgctxt "group-name" msgid "revolve" msgstr "revolución" -#: group.cpp:222 +#: group.cpp:234 msgid "Helix operation can only be applied to planar sketches." msgstr "La operación de hélice solo se puede aplicar a croquis planos." -#: group.cpp:233 +#: group.cpp:245 msgid "" "Bad selection for new helix group. This group can be created with:\n" "\n" @@ -1319,18 +1360,19 @@ msgid "" "to line / normal, through point)\n" " * a line segment (revolved about line segment)\n" msgstr "" -"Mala selección para el nuevo grupo de hélice. Este grupo se puede crear con:\n" +"Mala selección para el nuevo grupo de hélice. Este grupo se puede crear " +"con:\n" "\n" -" * un punto y un segmento de recta o normal (girado alrededor de un eje paralelo " -"a la línea / normal, a través del punto)\n" +" * un punto y un segmento de recta o normal (girado alrededor de un eje " +"paralelo a la línea / normal, a través del punto)\n" " * un segmento de línea (girado sobre un segmento de línea)\n" -#: group.cpp:245 +#: group.cpp:257 msgctxt "group-name" msgid "helix" msgstr "hélice" -#: group.cpp:258e +#: group.cpp:270 msgid "" "Bad selection for new rotation. This group can be created with:\n" "\n" @@ -1341,453 +1383,465 @@ msgid "" msgstr "" "Mala selección para nueva rotación. Este grupo se puede crear con:\n" "\n" -" * un punto, mientras está bloqueado en el plano de trabajo (girar en el plano, sobre ese " -"punto)\n" -" * un punto y una línea o una normal (rotar alrededor de un eje a través de un " -"punto y paralela a la línea / normal)\n" +" * un punto, mientras está bloqueado en el plano de trabajo (girar en el " +"plano, sobre ese punto)\n" +" * un punto y una línea o una normal (rotar alrededor de un eje a través " +"de un punto y paralela a la línea / normal)\n" -#: group.cpp:271 +#: group.cpp:283 msgctxt "group-name" msgid "rotate" msgstr "rotar" -#: group.cpp:282 +#: group.cpp:294 msgctxt "group-name" msgid "translate" msgstr "trasladar" -#: group.cpp:400 +#: group.cpp:416 msgid "(unnamed)" msgstr "(sin nombre)" -#: groupmesh.cpp:709 +#: groupmesh.cpp:707 msgid "not closed contour, or not all same style!" msgstr "¡Contorno no cerrado, o no todos del mismo estilo!" -#: groupmesh.cpp:722 +#: groupmesh.cpp:720 msgid "points not all coplanar!" msgstr "¡No todos los puntos son coplanares!" -#: groupmesh.cpp:724 +#: groupmesh.cpp:722 msgid "contour is self-intersecting!" msgstr "¡El contorno se intersecta a sí mismo!" -#: groupmesh.cpp:726 +#: groupmesh.cpp:724 msgid "zero-length edge!" msgstr "¡arista de longitud cero!" -#: modify.cpp:254 +#: modify.cpp:252 msgid "Must be sketching in workplane to create tangent arc." -msgstr "Debe estar dibujando en el plano de trabajo para crear un arco tangente." +msgstr "" +"Debe estar dibujando en el plano de trabajo para crear un arco tangente." -#: modify.cpp:301 +#: modify.cpp:299 msgid "" "To create a tangent arc, select a point where two non-construction lines or " "circles in this group and workplane join." msgstr "" -"Para crear un arco tangente, seleccione un punto donde dos líneas que no sean de construcción o " -"los círculos de este grupo y el plano de trabajo se unen." +"Para crear un arco tangente, seleccione un punto donde dos líneas que no " +"sean de construcción o los círculos de este grupo y el plano de trabajo se " +"unen." -#: modify.cpp:388 +#: modify.cpp:386 msgid "" "Couldn't round this corner. Try a smaller radius, or try creating the " "desired geometry by hand with tangency constraints." msgstr "" -"No pude redondear esta esquina. Pruebe con un radio más pequeño o intente crear la " -"geometría deseada a mano con restricciones de tangencia." +"No pude redondear esta esquina. Pruebe con un radio más pequeño o intente " +"crear la geometría deseada a mano con restricciones de tangencia." -#: modify.cpp:597 +#: modify.cpp:595 msgid "Couldn't split this entity; lines, circles, or cubics only." msgstr "No se pudo dividir esta entidad; solo líneas, círculos o cúbicos." -#: modify.cpp:624 +#: modify.cpp:622 msgid "Must be sketching in workplane to split." msgstr "Debe estar dibujando en el plano de trabajo para dividir." -#: modify.cpp:631 +#: modify.cpp:629 msgid "" "Select two entities that intersect each other (e.g. two lines/circles/arcs " "or a line/circle/arc and a point)." msgstr "" -"Seleccione dos entidades que se crucen entre sí (por ejemplo, dos líneas / círculos / arcos " -"o una línea / círculo / arco y un punto)." +"Seleccione dos entidades que se crucen entre sí (por ejemplo, dos líneas / " +"círculos / arcos o una línea / círculo / arco y un punto)." -#: modify.cpp:736 +#: modify.cpp:734 msgid "Can't split; no intersection found." msgstr "No se puede dividir; no se encontró ninguna intersección." -#: mouse.cpp:559 +#: mouse.cpp:557 msgid "Assign to Style" msgstr "Asignar a Estilo" -#: mouse.cpp:575 +#: mouse.cpp:573 msgid "No Style" msgstr "Sin Estilo" -#: mouse.cpp:578 +#: mouse.cpp:576 msgid "Newly Created Custom Style..." msgstr "Estilo Personalizado Recién Creado..." -#: mouse.cpp:585 +#: mouse.cpp:583 msgid "Group Info" msgstr "Información de Grupo" -#: mouse.cpp:605 +#: mouse.cpp:603 msgid "Style Info" msgstr "Información de Estilo" -#: mouse.cpp:625 +#: mouse.cpp:623 msgid "Select Edge Chain" msgstr "Seleccionar Cadena de Arista" -#: mouse.cpp:631 +#: mouse.cpp:629 msgid "Toggle Reference Dimension" msgstr "Alternar Cota de Referencia" -#: mouse.cpp:637 +#: mouse.cpp:635 msgid "Other Supplementary Angle" msgstr "Otro Ángulo Suplementario" -#: mouse.cpp:642 +#: mouse.cpp:640 msgid "Snap to Grid" msgstr "Enganchar a la cuadrícula" -#: mouse.cpp:651 +#: mouse.cpp:649 msgid "Remove Spline Point" msgstr "Remover Punto de Spline" -#: mouse.cpp:686 +#: mouse.cpp:684 msgid "Add Spline Point" msgstr "Agregar Punto de Spline" -#: mouse.cpp:690 +#: mouse.cpp:688 msgid "Cannot add spline point: maximum number of points reached." -msgstr "No se puede agregar un punto de spline: se alcanzó el número máximo de puntos." +msgstr "" +"No se puede agregar un punto de spline: se alcanzó el número máximo de " +"puntos." -#: mouse.cpp:715 +#: mouse.cpp:713 msgid "Toggle Construction" msgstr "Alternar Construcción" -#: mouse.cpp:730 +#: mouse.cpp:729 msgid "Delete Point-Coincident Constraint" msgstr "Eliminar restricción de punto-coincidente" -#: mouse.cpp:749 +#: mouse.cpp:747 msgid "Cut" msgstr "Cortar" -#: mouse.cpp:751 +#: mouse.cpp:749 msgid "Copy" msgstr "Copiar" -#: mouse.cpp:755 +#: mouse.cpp:753 msgid "Select All" msgstr "Seleccionar Todo " -#: mouse.cpp:760 +#: mouse.cpp:758 msgid "Paste" msgstr "Pegar" -#: mouse.cpp:762 +#: mouse.cpp:760 msgid "Paste Transformed..." msgstr "Pegar Transformado ..." -#: mouse.cpp:767 +#: mouse.cpp:765 msgid "Delete" msgstr "Eliminar" -#: mouse.cpp:770 +#: mouse.cpp:768 msgid "Unselect All" msgstr "Deseleccionar Todo" -#: mouse.cpp:777 +#: mouse.cpp:775 msgid "Unselect Hovered" msgstr "Deselección Flotante" -#: mouse.cpp:786 +#: mouse.cpp:784 msgid "Zoom to Fit" msgstr "Zoom para ajustar" -#: mouse.cpp:988 mouse.cpp:1275 +#: mouse.cpp:986 mouse.cpp:1274 msgid "click next point of line, or press Esc" msgstr "clic en el siguiente punto de la línea o presione Esc" -#: mouse.cpp:994 +#: mouse.cpp:992 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -"No se puede dibujar un rectángulo en 3d; primero, active un plano de trabajo con Croquis -> En " -"Plano de trabajo." +"No se puede dibujar un rectángulo en 3d; primero, active un plano de trabajo " +"con Croquis -> En Plano de trabajo." -#: mouse.cpp:1028 +#: mouse.cpp:1026 msgid "click to place other corner of rectangle" msgstr "clic para colocar la otra esquina del rectángulo" -#: mouse.cpp:1048 +#: mouse.cpp:1047 msgid "click to set radius" msgstr "clic para establecer el radio" -#: mouse.cpp:1053 +#: mouse.cpp:1052 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -"No se puede dibujar un arco en 3d; primero, active un plano de trabajo con Croquis -> En " -"Plano de trabajo." +"No se puede dibujar un arco en 3d; primero, active un plano de trabajo con " +"Croquis -> En Plano de trabajo." -#: mouse.cpp:1072 +#: mouse.cpp:1071 msgid "click to place point" msgstr "clic para colocar el punto" -#: mouse.cpp:1088 +#: mouse.cpp:1087 msgid "click next point of cubic, or press Esc" msgstr "clic en el siguiente punto del cúbico, o presione Esc" -#: mouse.cpp:1093 +#: mouse.cpp:1092 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" -"Dibujando en un plano de trabajo ya; croquis en 3d antes de crear un nuevo plano de trabajo." +"Dibujando en un plano de trabajo ya; croquis en 3d antes de crear un nuevo " +"plano de trabajo." -#: mouse.cpp:1109 +#: mouse.cpp:1108 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -"No se puede dibujar texto en 3D; primero, active un plano de trabajo con Croquis -> En " -"Plano de trabajo." +"No se puede dibujar texto en 3D; primero, active un plano de trabajo con " +"Croquis -> En Plano de trabajo." -#: mouse.cpp:1126 +#: mouse.cpp:1125 msgid "click to place bottom right of text" msgstr "clic para colocar la parte inferior derecha del texto" -#: mouse.cpp:1132 +#: mouse.cpp:1131 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -"No se puede dibujar una imagen en 3D; primero, active un plano de trabajo con Croquis -> En " -"Plano de Trabajo." +"No se puede dibujar una imagen en 3D; primero, active un plano de trabajo " +"con Croquis -> En Plano de Trabajo." -#: mouse.cpp:1159 -msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -msgstr "NUEVO COMENTARIO -- DOBLE-CLIC PARA EDITAR" - -#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552 msgctxt "file-type" msgid "SolveSpace models" msgstr "SolveSpace modelos" -#: platform/gui.cpp:90 +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "" + +#: platform/gui.cpp:91 msgctxt "file-type" msgid "IDF circuit board" msgstr "placa circuito IDF" -#: platform/gui.cpp:94 +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "" + +#: platform/gui.cpp:96 msgctxt "file-type" msgid "PNG image" msgstr "imagen PNG" -#: platform/gui.cpp:98 +#: platform/gui.cpp:100 msgctxt "file-type" msgid "STL mesh" msgstr "STL malla" -#: platform/gui.cpp:99 +#: platform/gui.cpp:101 msgctxt "file-type" msgid "Wavefront OBJ mesh" msgstr "Wavefront OBJ malla" -#: platform/gui.cpp:100 +#: platform/gui.cpp:102 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" msgstr "Three.js-malla compatible, con visor" -#: platform/gui.cpp:101 +#: platform/gui.cpp:103 msgctxt "file-type" msgid "Three.js-compatible mesh, mesh only" msgstr "Three.js-malla compatible, solo malla" -#: platform/gui.cpp:102 +#: platform/gui.cpp:104 msgctxt "file-type" msgid "VRML text file" msgstr "Archivo texto VRML" -#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 msgctxt "file-type" msgid "STEP file" msgstr "Archivo STEP" -#: platform/gui.cpp:110 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "PDF file" msgstr "Archivo PDF" -#: platform/gui.cpp:111 +#: platform/gui.cpp:113 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "Encapsulado PostScript" -#: platform/gui.cpp:112 +#: platform/gui.cpp:114 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "Gráficos Vectoriales Escalables" -#: platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:116 platform/gui.cpp:123 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "Archivo DXF (AutoCAD 2007)" -#: platform/gui.cpp:115 +#: platform/gui.cpp:117 msgctxt "file-type" msgid "HPGL file" msgstr "Archivo HPGL" -#: platform/gui.cpp:116 +#: platform/gui.cpp:118 msgctxt "file-type" msgid "G Code" msgstr "G Code" -#: platform/gui.cpp:125 +#: platform/gui.cpp:127 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "Archivos AutoCAD DXF y DWG" -#: platform/gui.cpp:129 +#: platform/gui.cpp:131 msgctxt "file-type" msgid "Comma-separated values" msgstr "Valores separados por comas" -#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641 msgid "untitled" msgstr "sin título" -#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 -#: platform/guiwin.cpp:1582 +#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445 +#: platform/guiwin.cpp:1639 msgctxt "title" msgid "Save File" msgstr "Guardar Archivo" -#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 -#: platform/guiwin.cpp:1584 +#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428 +#: platform/guiwin.cpp:1645 msgctxt "title" msgid "Open File" msgstr "Abrir Archivo" -#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418 msgctxt "button" msgid "_Cancel" msgstr "_Cancelar" -#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416 msgctxt "button" msgid "_Save" msgstr "_Guardar" -#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417 msgctxt "button" msgid "_Open" msgstr "_Abrir" -#: solvespace.cpp:169 +#: solvespace.cpp:170 msgctxt "title" msgid "Autosave Available" msgstr "Autoguardado Disponible" -#: solvespace.cpp:170 +#: solvespace.cpp:171 msgctxt "dialog" msgid "An autosave file is available for this sketch." msgstr "Un archivo de autoguardado está disponible para este croquis." -#: solvespace.cpp:171 +#: solvespace.cpp:172 msgctxt "dialog" msgid "Do you want to load the autosave file instead?" msgstr "¿Desea cargar el archivo de autoguardado en su lugar?" -#: solvespace.cpp:172 +#: solvespace.cpp:173 msgctxt "button" msgid "&Load autosave" msgstr "&Cargar autoguardado" -#: solvespace.cpp:174 +#: solvespace.cpp:175 msgctxt "button" msgid "Do&n't Load" msgstr "No Cargar" -#: solvespace.cpp:557 +#: solvespace.cpp:598 msgctxt "title" msgid "Modified File" msgstr "Archivo Modificado" -#: solvespace.cpp:559 +#: solvespace.cpp:600 #, c-format msgctxt "dialog" msgid "Do you want to save the changes you made to the sketch “%s”?" msgstr "¿Desea guardar los cambios que realizó en el croquis “%s”?" -#: solvespace.cpp:562 +#: solvespace.cpp:603 msgctxt "dialog" msgid "Do you want to save the changes you made to the new sketch?" msgstr "¿Desea guardar los cambios que realizó en el nuevo croquis?" -#: solvespace.cpp:565 +#: solvespace.cpp:606 msgctxt "dialog" msgid "Your changes will be lost if you don't save them." msgstr "Sus cambios se perderán si no los guarda." -#: solvespace.cpp:566 +#: solvespace.cpp:607 msgctxt "button" msgid "&Save" msgstr "&Guardar" -#: solvespace.cpp:568 +#: solvespace.cpp:609 msgctxt "button" msgid "Do&n't Save" msgstr "No& Guardar" -#: solvespace.cpp:589 +#: solvespace.cpp:630 msgctxt "title" msgid "(new sketch)" msgstr "(nuevo croquis)" -#: solvespace.cpp:596 +#: solvespace.cpp:637 msgctxt "title" msgid "Property Browser" msgstr "Explorador de Propiedades" -#: solvespace.cpp:658 +#: solvespace.cpp:699 msgid "" "Constraints are currently shown, and will be exported in the toolpath. This " "is probably not what you want; hide them by clicking the link at the top of " "the text window." msgstr "" "Las restricciones se muestran actualmente y se exportarán en la trayectoria." -"Probablemente esto no sea lo que quieres; ocultarlos haciendo clic en el enlace en la parte superior de " -"la ventana de texto." +"Probablemente esto no sea lo que quieres; ocultarlos haciendo clic en el " +"enlace en la parte superior de la ventana de texto." -#: solvespace.cpp:730 +#: solvespace.cpp:771 #, c-format msgid "" "Can't identify file type from file extension of filename '%s'; try .dxf or ." "dwg." msgstr "" -"No se puede identificar el tipo de archivo a partir de la extensión del nombre del archivo '%s'; intente .dxf o ." -"dwg." +"No se puede identificar el tipo de archivo a partir de la extensión del " +"nombre del archivo '%s'; intente .dxf o .dwg." -#: solvespace.cpp:778 +#: solvespace.cpp:823 msgid "Constraint must have a label, and must not be a reference dimension." -msgstr "La restricción debe tener una etiqueta y no debe ser una cota de referencia." +msgstr "" +"La restricción debe tener una etiqueta y no debe ser una cota de referencia." -#: solvespace.cpp:782 +#: solvespace.cpp:827 msgid "Bad selection for step dimension; select a constraint." msgstr "Mala selección para la cota del paso; seleccione una restricción." -#: solvespace.cpp:806 +#: solvespace.cpp:851 msgid "The assembly does not interfere, good." msgstr "El ensamble no interfiere, bien." -#: solvespace.cpp:822 +#: solvespace.cpp:867 #, c-format msgid "" "The volume of the solid model is:\n" @@ -1798,7 +1852,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:831 +#: solvespace.cpp:876 #, c-format msgid "" "\n" @@ -1811,7 +1865,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:836 +#: solvespace.cpp:881 msgid "" "\n" "\n" @@ -1823,7 +1877,7 @@ msgstr "" "Las superficies curvas se han aproximado como triángulos.\n" "Esto introduce un error, normalmente alrededor del 1%." -#: solvespace.cpp:851 +#: solvespace.cpp:896 #, c-format msgid "" "The surface area of the selected faces is:\n" @@ -1840,15 +1894,15 @@ msgstr "" "Las curvas se han aproximado como lineales por partes.\n" "Esto introduce un error, normalmente alrededor del 1%%." -#: solvespace.cpp:860 +#: solvespace.cpp:905 msgid "" "This group does not contain a correctly-formed 2d closed area. It is open, " "not coplanar, or self-intersecting." msgstr "" -"Este grupo no contiene un área cerrada 2d correctamente formada. Está abierta, " -"no coplanares, ni auto-intersectantes." +"Este grupo no contiene un área cerrada 2d correctamente formada. Está " +"abierta, no coplanares, ni auto-intersectantes." -#: solvespace.cpp:872 +#: solvespace.cpp:917 #, c-format msgid "" "The area of the region sketched in this group is:\n" @@ -1865,7 +1919,7 @@ msgstr "" "Las curvas se han aproximado como lineales por partes.\n" "Esto introduce un error, normalmente alrededor del 1%%." -#: solvespace.cpp:892 +#: solvespace.cpp:937 #, c-format msgid "" "The total length of the selected entities is:\n" @@ -1882,36 +1936,37 @@ msgstr "" "Las curvas se han aproximado como lineales por partes.\n" "Esto introduce un error, normalmente alrededor del 1%%." -#: solvespace.cpp:898 +#: solvespace.cpp:943 msgid "Bad selection for perimeter; select line segments, arcs, and curves." -msgstr "Mala selección de perímetro; seleccione segmentos de línea, arcos y curvas." +msgstr "" +"Mala selección de perímetro; seleccione segmentos de línea, arcos y curvas." -#: solvespace.cpp:914 +#: solvespace.cpp:959 msgid "Bad selection for trace; select a single point." msgstr "Mala selección de rastreo; seleccione un solo punto." -#: solvespace.cpp:941 +#: solvespace.cpp:986 #, c-format msgid "Couldn't write to '%s'" msgstr "No pude escribir a '%s'" -#: solvespace.cpp:971 +#: solvespace.cpp:1016 msgid "The mesh is self-intersecting (NOT okay, invalid)." msgstr "La malla se intersecta a si misma (NO está bien, no es válida)." -#: solvespace.cpp:972 +#: solvespace.cpp:1017 msgid "The mesh is not self-intersecting (okay, valid)." msgstr "La malla no se intersecta (está bien, es válida)." -#: solvespace.cpp:974 +#: solvespace.cpp:1019 msgid "The mesh has naked edges (NOT okay, invalid)." msgstr "La malla tiene bordes desnudos (NO está bien, no es válida)." -#: solvespace.cpp:975 +#: solvespace.cpp:1020 msgid "The mesh is watertight (okay, valid)." msgstr "La malla es estanca (está bien, es válida)." -#: solvespace.cpp:978 +#: solvespace.cpp:1023 #, c-format msgid "" "\n" @@ -1922,7 +1977,7 @@ msgstr "" "\n" "El modelo contiene %d triángulos, desde %d superficies." -#: solvespace.cpp:982 +#: solvespace.cpp:1027 #, c-format msgid "" "%s\n" @@ -1937,7 +1992,7 @@ msgstr "" "\n" "Cero aristas problemáticas, bien.%s" -#: solvespace.cpp:985 +#: solvespace.cpp:1030 #, c-format msgid "" "%s\n" @@ -1952,7 +2007,7 @@ msgstr "" "\n" "%d aristas problemáticas, mal.%s" -#: solvespace.cpp:998 +#: solvespace.cpp:1043 #, c-format msgid "" "This is SolveSpace version %s.\n" @@ -1981,7 +2036,7 @@ msgstr "" "\n" "© 2008-%d Jonathan Westhues y otros autores.\n" -#: style.cpp:166 +#: style.cpp:185 msgid "" "Can't assign style to an entity that's derived from another entity; try " "assigning a style to this entity's parent." @@ -1989,27 +2044,27 @@ msgstr "" "No se puede asignar estilo a una entidad derivada de otra entidad;; intente " "asignar un estilo al padre de esta entidad." -#: style.cpp:665 +#: style.cpp:735 msgid "Style name cannot be empty" msgstr "El nombre del estilo no puede estar vacío" -#: textscreens.cpp:741 +#: textscreens.cpp:785 msgid "Can't repeat fewer than 1 time." msgstr "No se puede repetir menos de 1 vez." -#: textscreens.cpp:745 +#: textscreens.cpp:789 msgid "Can't repeat more than 999 times." msgstr "No se puede repetir más de 999 veces." -#: textscreens.cpp:770 +#: textscreens.cpp:814 msgid "Group name cannot be empty" msgstr "El nombre del grupo no puede estar vacío" -#: textscreens.cpp:813 +#: textscreens.cpp:866 msgid "Opacity must be between zero and one." msgstr "La opacidad debe estar entre cero y uno." -#: textscreens.cpp:848 +#: textscreens.cpp:901 msgid "Radius cannot be zero or negative." msgstr "El radio no puede ser cero o negativo." @@ -2164,14 +2219,58 @@ msgctxt "button" msgid "&OK" msgstr "&Aceptar" -#: view.cpp:78 +#: view.cpp:127 msgid "Scale cannot be zero or negative." msgstr "La escala no debe ser cero o negativa." -#: view.cpp:90 view.cpp:99 +#: view.cpp:139 view.cpp:148 msgid "Bad format: specify x, y, z" msgstr "Formato incorrecto: especifica x, y, z" +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Mala selección por restricción de la relación de longitud. Esta " +#~ "restricción se puede aplicar a:\n" +#~ "\n" +#~ " * dos segmentos de línea\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Mala selección por restricción de diferencia de longitud. Esta " +#~ "restricción puede aplicar a:\n" +#~ "\n" +#~ " * dos segmentos de línea\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "Relación Lo&ngitud" + +#~ msgid "Length Diff&erence" +#~ msgstr "Diferencia Long&itud" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "Mala selección para un nuevo croquis en el plano de trabajo. Este grupo " +#~ "se puede crear con:\n" +#~ "\n" +#~ " * un punto (a través del punto, ortogonal a los ejes de coordenadas)\n" +#~ " * un punto y dos segmentos de línea (a través del punto, paralelo a " +#~ "líneas)\n" +#~ " * un plano de trabajo (copia de un plano de trabajo)\n" + #~ msgctxt "file-type" #~ msgid "Q3D Object file" #~ msgstr "Archivo Objeto Q3D" diff --git a/res/locales/fr_FR.po b/res/locales/fr_FR.po index 50c30201..6b5845a7 100644 --- a/res/locales/fr_FR.po +++ b/res/locales/fr_FR.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2021-02-01 15:45+0200\n" +"POT-Creation-Date: 2021-09-26 16:25-0400\n" "PO-Revision-Date: 2018-07-14 06:12+0000\n" "Last-Translator: whitequark \n" "Language-Team: none\n" @@ -17,7 +17,7 @@ msgstr "" "X-Generator: Zanata 4.4.5\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: clipboard.cpp:310 +#: clipboard.cpp:309 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -27,27 +27,27 @@ msgstr "" "\n" "Activez un plan avec \"Dessin -> Dans plan de travail\"." -#: clipboard.cpp:327 +#: clipboard.cpp:326 msgid "Clipboard is empty; nothing to paste." msgstr "Presse papier vide; rien à coller." -#: clipboard.cpp:374 +#: clipboard.cpp:373 msgid "Number of copies to paste must be at least one." msgstr "Le nombre de copies à coller doit être d'au moins un." -#: clipboard.cpp:390 textscreens.cpp:783 +#: clipboard.cpp:389 textscreens.cpp:827 msgid "Scale cannot be zero." msgstr "L'échelle ne peut pas être zéro." -#: clipboard.cpp:432 +#: clipboard.cpp:431 msgid "Select one point to define origin of rotation." msgstr "Sélectionnez un point pour définir l'origine de la rotation." -#: clipboard.cpp:444 +#: clipboard.cpp:443 msgid "Select two points to define translation vector." msgstr "Sélectionnez deux points pour définir le vecteur de translation." -#: clipboard.cpp:454 +#: clipboard.cpp:453 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." @@ -55,23 +55,23 @@ msgstr "" "Transformation identique. Donc, toutes les copies seront exactement les unes " "au-dessus des autres." -#: clipboard.cpp:458 +#: clipboard.cpp:457 msgid "Too many items to paste; split this into smaller pastes." msgstr "Trop d'éléments à coller; Divisez-les en plus petits groupes." -#: clipboard.cpp:463 +#: clipboard.cpp:462 msgid "No workplane active." msgstr "Pas d'espace de travail actif." -#: confscreen.cpp:418 +#: confscreen.cpp:376 msgid "Bad format: specify coordinates as x, y, z" msgstr "Mauvais format: spécifiez les coordonnées comme x, y, z" -#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858 msgid "Bad format: specify color as r, g, b" msgstr "Mauvais format; spécifiez la couleur comme r, v, b" -#: confscreen.cpp:454 +#: confscreen.cpp:412 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." @@ -79,26 +79,26 @@ msgstr "" "Le facteur de perspective n'aura aucun effet tant que vous n'aurez pas " "activé \"Affichage -> Utiliser la projection de perspective\"." -#: confscreen.cpp:467 confscreen.cpp:477 +#: confscreen.cpp:430 confscreen.cpp:440 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "" -#: confscreen.cpp:489 +#: confscreen.cpp:452 msgid "Export scale must not be zero!" msgstr "L'échelle d'export ne doit pas être zéro!" -#: confscreen.cpp:501 +#: confscreen.cpp:464 msgid "Cutter radius offset must not be negative!" msgstr "Le décalage du rayon de coupe ne doit pas être négatif!" -#: confscreen.cpp:555 +#: confscreen.cpp:518 msgid "Bad value: autosave interval should be positive" msgstr "" "Mauvaise valeur: l'intervalle d'enregistrement automatique devrait être " "positif" -#: confscreen.cpp:558 +#: confscreen.cpp:521 msgid "Bad format: specify interval in integral minutes" msgstr "Mauvais format: spécifiez un nombre entier de minutes" @@ -169,115 +169,135 @@ msgstr "longueur-ratio" #: constraint.cpp:25 msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" msgid "length-difference" msgstr "longueur-difference" -#: constraint.cpp:26 +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "" + +#: constraint.cpp:30 msgctxt "constr-name" msgid "symmetric" msgstr "symétrique" -#: constraint.cpp:27 +#: constraint.cpp:31 msgctxt "constr-name" msgid "symmetric-h" msgstr "symétrique-h" -#: constraint.cpp:28 +#: constraint.cpp:32 msgctxt "constr-name" msgid "symmetric-v" msgstr "symétrique-v" -#: constraint.cpp:29 +#: constraint.cpp:33 msgctxt "constr-name" msgid "symmetric-line" msgstr "symétrique-ligne" -#: constraint.cpp:30 +#: constraint.cpp:34 msgctxt "constr-name" msgid "at-midpoint" msgstr "au-point-milieu" -#: constraint.cpp:31 +#: constraint.cpp:35 msgctxt "constr-name" msgid "horizontal" msgstr "horizontal" -#: constraint.cpp:32 +#: constraint.cpp:36 msgctxt "constr-name" msgid "vertical" msgstr "vertical" -#: constraint.cpp:33 +#: constraint.cpp:37 msgctxt "constr-name" msgid "diameter" msgstr "diamètre" -#: constraint.cpp:34 +#: constraint.cpp:38 msgctxt "constr-name" msgid "pt-on-circle" msgstr "pt-sur-cercle" -#: constraint.cpp:35 +#: constraint.cpp:39 msgctxt "constr-name" msgid "same-orientation" msgstr "même-orientation" -#: constraint.cpp:36 +#: constraint.cpp:40 msgctxt "constr-name" msgid "angle" msgstr "angle" -#: constraint.cpp:37 +#: constraint.cpp:41 msgctxt "constr-name" msgid "parallel" msgstr "parallèle" -#: constraint.cpp:38 +#: constraint.cpp:42 msgctxt "constr-name" msgid "arc-line-tangent" msgstr "arc-ligne-tangente" -#: constraint.cpp:39 +#: constraint.cpp:43 msgctxt "constr-name" msgid "cubic-line-tangent" msgstr "cubique-ligne-tangente" -#: constraint.cpp:40 +#: constraint.cpp:44 msgctxt "constr-name" msgid "curve-curve-tangent" msgstr "courbe-courbe-tangente" -#: constraint.cpp:41 +#: constraint.cpp:45 msgctxt "constr-name" msgid "perpendicular" msgstr "perpendiculaire" -#: constraint.cpp:42 +#: constraint.cpp:46 msgctxt "constr-name" msgid "eq-radius" msgstr "eg-rayon" -#: constraint.cpp:43 +#: constraint.cpp:47 msgctxt "constr-name" msgid "eq-angle" msgstr "eg-angle" -#: constraint.cpp:44 +#: constraint.cpp:48 msgctxt "constr-name" msgid "eq-line-len-arc-len" msgstr "eg-ligne-long-arc-long" -#: constraint.cpp:45 +#: constraint.cpp:49 msgctxt "constr-name" msgid "lock-where-dragged" msgstr "verrouillé-où-déplacé" -#: constraint.cpp:46 +#: constraint.cpp:50 msgctxt "constr-name" msgid "comment" msgstr "commentaire" -#: constraint.cpp:140 +#: constraint.cpp:144 msgid "" "The tangent arc and line segment must share an endpoint. Constrain them with " "Constrain -> On Point before constraining tangent." @@ -286,7 +306,7 @@ msgstr "" "Contraignez-les avec \"Contrainte -> Sur point avant de contraindre la " "tangente\"." -#: constraint.cpp:158 +#: constraint.cpp:163 msgid "" "The tangent cubic and line segment must share an endpoint. Constrain them " "with Constrain -> On Point before constraining tangent." @@ -295,7 +315,7 @@ msgstr "" "Contraignez-les avec \"Contrainte -> Sur point avant de contraindre la " "tangente\"." -#: constraint.cpp:183 +#: constraint.cpp:189 msgid "" "The curves must share an endpoint. Constrain them with Constrain -> On Point " "before constraining tangent." @@ -303,7 +323,7 @@ msgstr "" "Les courbes doivent partager un point final. Contraignez-les avec " "\"Contrainte -> Sur point avant de contraindre la tangente\"." -#: constraint.cpp:231 +#: constraint.cpp:238 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -327,7 +347,7 @@ msgstr "" "    * Une face plane et un point (distance minimale)\n" "    * Un cercle ou un arc (diamètre)\n" -#: constraint.cpp:284 +#: constraint.cpp:291 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -347,7 +367,7 @@ msgstr "" "    * Un point et un cercle ou un arc (point sur courbe)\n" "    * Un point et une face plane (point sur une face)\n" -#: constraint.cpp:346 +#: constraint.cpp:353 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -378,30 +398,26 @@ msgstr "" "    * Un segment de ligne et un arc (la longueur de segment de ligne est " "égale à la longueur d'arc)\n" -#: constraint.cpp:385 +#: constraint.cpp:407 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"Mauvaise sélection pour la contrainte du rapport de longueur. Cette " -"contrainte peut s'appliquer à:\n" -"\n" -"    * Deux segments de ligne\n" -#: constraint.cpp:402 +#: constraint.cpp:441 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"Mauvaise sélection pour la contrainte de différence de longueur. Cette " -"contrainte peut s'appliquer à:\n" -"\n" -"    * Deux segments de ligne\n" -#: constraint.cpp:428 +#: constraint.cpp:472 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -414,7 +430,7 @@ msgstr "" "    * Un segment de ligne et un point (point au milieu)\n" "    * Un segment de ligne et un plan de travail (point médian dans le plan)\n" -#: constraint.cpp:486 +#: constraint.cpp:530 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -435,7 +451,7 @@ msgstr "" "    * Plan de travail, et deux points ou un segment de ligne (symétrique au " "plan de travail)\n" -#: constraint.cpp:500 +#: constraint.cpp:545 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." @@ -443,7 +459,7 @@ msgstr "" "Un plan de travail doit être actif lors d'une contrainte de symétrie sans " "plan de symétrie explicite." -#: constraint.cpp:530 +#: constraint.cpp:579 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." @@ -451,7 +467,7 @@ msgstr "" "Activez un plan de travail (avec Dessin -> Dans plan de travail) avant " "d'appliquer une contrainte horizontale ou verticale." -#: constraint.cpp:543 +#: constraint.cpp:592 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -465,7 +481,7 @@ msgstr "" "    * deux points\n" "    * Un segment de ligne\n" -#: constraint.cpp:564 +#: constraint.cpp:613 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -477,15 +493,15 @@ msgstr "" "\n" " * Deux normales\n" -#: constraint.cpp:614 +#: constraint.cpp:663 msgid "Must select an angle constraint." msgstr "Vous devez sélectionner une contrainte d'angle." -#: constraint.cpp:627 +#: constraint.cpp:676 msgid "Must select a constraint with associated label." msgstr "Vous devez sélectionner une contrainte avec une étiquette associée." -#: constraint.cpp:638 +#: constraint.cpp:687 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -500,11 +516,11 @@ msgstr "" "    * Un segment de ligne et une normale\n" "    * Deux normales\n" -#: constraint.cpp:701 +#: constraint.cpp:754 msgid "Curve-curve tangency must apply in workplane." msgstr "Courbe-Courbe tangence doit s'appliquer dans le plan de travail." -#: constraint.cpp:711 +#: constraint.cpp:766 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -523,7 +539,7 @@ msgstr "" "    * Deux segments de ligne, des arcs ou des Béziers, qui partagent un " "point final (tangent)\n" -#: constraint.cpp:729 +#: constraint.cpp:784 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -538,7 +554,7 @@ msgstr "" "    * Un segment de ligne et une normale\n" "    * Deux normales\n" -#: constraint.cpp:744 +#: constraint.cpp:799 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -550,7 +566,11 @@ msgstr "" "\n" "    * un point\n" -#: constraint.cpp:755 +#: constraint.cpp:813 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NOUVEAU COMMENTAIRE - DOUBLE-CLIQUE POUR EDITER" + +#: constraint.cpp:818 msgid "click center of comment text" msgstr "cliquez le centre du texte de commentaire" @@ -580,26 +600,26 @@ msgstr "" "    * Un point et deux segments de ligne (plan au-travers d'un point et " "parallèle aux lignes)\n" -#: export.cpp:822 +#: export.cpp:818 msgid "Active group mesh is empty; nothing to export." msgstr "Le maillage du groupe actif est vide; Rien à exporter." -#: exportvector.cpp:337 +#: exportvector.cpp:336 msgid "freehand lines were replaced with continuous lines" msgstr "les lignes à main levée ont été remplacées par des lignes continues" -#: exportvector.cpp:339 +#: exportvector.cpp:338 msgid "zigzag lines were replaced with continuous lines" msgstr "les lignes en zigzag ont été remplacées par des lignes continues" -#: exportvector.cpp:593 +#: exportvector.cpp:592 msgid "" "Some aspects of the drawing have no DXF equivalent and were not exported:\n" msgstr "" "Certains aspects du dessin n'ont pas d'équivalent DXF et n'ont pas été " "exportés:\n" -#: exportvector.cpp:839 +#: exportvector.cpp:838 msgid "" "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." msgstr "" @@ -616,11 +636,11 @@ msgctxt "group-name" msgid "#references" msgstr "#références" -#: file.cpp:552 +#: file.cpp:550 msgid "The file is empty. It may be corrupt." msgstr "" -#: file.cpp:557 +#: file.cpp:555 msgid "" "Unrecognized data in file. This file may be corrupt, or from a newer version " "of the program." @@ -658,7 +678,7 @@ msgctxt "button" msgid "&No" msgstr "" -#: file.cpp:877 solvespace.cpp:569 +#: file.cpp:877 solvespace.cpp:610 msgctxt "button" msgid "&Cancel" msgstr "" @@ -832,295 +852,303 @@ msgid "Use &Perspective Projection" msgstr "Utiliser la vue en &Perspective" #: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "" + +#: graphicswin.cpp:98 msgid "Dimension &Units" msgstr "&Unités de dimensions" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in &Millimeters" msgstr "Dimensions en &Millimètres" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in M&eters" msgstr "Dimensions en &Mètres" -#: graphicswin.cpp:100 +#: graphicswin.cpp:101 msgid "Dimensions in &Inches" msgstr "Dimensions en &Pouces" #: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "" + +#: graphicswin.cpp:104 msgid "Show &Toolbar" msgstr "Affichage &Barre d'outils" -#: graphicswin.cpp:103 +#: graphicswin.cpp:105 msgid "Show Property Bro&wser" msgstr "Affichage du &Navigateur de Propriété" -#: graphicswin.cpp:105 +#: graphicswin.cpp:107 msgid "&Full Screen" msgstr "&Plein Ecran" -#: graphicswin.cpp:107 +#: graphicswin.cpp:109 msgid "&New Group" msgstr "&Nouveau Groupe" -#: graphicswin.cpp:108 +#: graphicswin.cpp:110 msgid "Sketch In &3d" msgstr "Dessin en &3d" -#: graphicswin.cpp:109 +#: graphicswin.cpp:111 msgid "Sketch In New &Workplane" msgstr "Dessin dans un nouveau &Plan de travail" -#: graphicswin.cpp:111 +#: graphicswin.cpp:113 msgid "Step &Translating" msgstr "Espacement &Linéaire" -#: graphicswin.cpp:112 +#: graphicswin.cpp:114 msgid "Step &Rotating" msgstr "Espacement &Circulaire" -#: graphicswin.cpp:114 +#: graphicswin.cpp:116 msgid "E&xtrude" msgstr "E&xtruder" -#: graphicswin.cpp:115 +#: graphicswin.cpp:117 msgid "&Helix" msgstr "&Helix" -#: graphicswin.cpp:116 +#: graphicswin.cpp:118 msgid "&Lathe" msgstr "&Lathe" -#: graphicswin.cpp:117 +#: graphicswin.cpp:119 msgid "Re&volve" msgstr "Ré&volution" -#: graphicswin.cpp:119 +#: graphicswin.cpp:121 msgid "Link / Assemble..." msgstr "Lié / Assembler..." -#: graphicswin.cpp:120 +#: graphicswin.cpp:122 msgid "Link Recent" msgstr "Lié Récent" -#: graphicswin.cpp:122 +#: graphicswin.cpp:124 msgid "&Sketch" msgstr "&Dessin" -#: graphicswin.cpp:123 +#: graphicswin.cpp:125 msgid "In &Workplane" msgstr "Dans le &Plan de travail" -#: graphicswin.cpp:124 +#: graphicswin.cpp:126 msgid "Anywhere In &3d" msgstr "N'importe où dans la &3d" -#: graphicswin.cpp:126 +#: graphicswin.cpp:128 msgid "Datum &Point" msgstr "&Point" -#: graphicswin.cpp:127 +#: graphicswin.cpp:129 msgid "&Workplane" msgstr "&Plan de travail" -#: graphicswin.cpp:129 +#: graphicswin.cpp:131 msgid "Line &Segment" msgstr "Ligne - &Polyligne" -#: graphicswin.cpp:130 +#: graphicswin.cpp:132 msgid "C&onstruction Line Segment" msgstr "Ligne de C&onstruction" -#: graphicswin.cpp:131 +#: graphicswin.cpp:133 msgid "&Rectangle" msgstr "&Rectangle" -#: graphicswin.cpp:132 +#: graphicswin.cpp:134 msgid "&Circle" msgstr "&Cercle" -#: graphicswin.cpp:133 +#: graphicswin.cpp:135 msgid "&Arc of a Circle" msgstr "&Arc de Cercle" -#: graphicswin.cpp:134 +#: graphicswin.cpp:136 msgid "&Bezier Cubic Spline" msgstr "Spline Cubique de &Beziers" -#: graphicswin.cpp:136 +#: graphicswin.cpp:138 msgid "&Text in TrueType Font" msgstr "&Texte en Police TrueType" -#: graphicswin.cpp:137 +#: graphicswin.cpp:139 msgid "&Image" msgstr "&Image" -#: graphicswin.cpp:139 +#: graphicswin.cpp:141 msgid "To&ggle Construction" msgstr "&Basculer en mode \"Construction\"" -#: graphicswin.cpp:140 +#: graphicswin.cpp:142 msgid "Tangent &Arc at Point" msgstr "&Arc Tangent au Point" -#: graphicswin.cpp:141 +#: graphicswin.cpp:143 msgid "Split Curves at &Intersection" msgstr "Diviser les Courbes à l'&Intersection" -#: graphicswin.cpp:143 +#: graphicswin.cpp:145 msgid "&Constrain" msgstr "&Constraintes" -#: graphicswin.cpp:144 +#: graphicswin.cpp:146 msgid "&Distance / Diameter" msgstr "&Distance / Diamètre" -#: graphicswin.cpp:145 +#: graphicswin.cpp:147 msgid "Re&ference Dimension" msgstr "Dimension Maîtresse / Indicative" -#: graphicswin.cpp:146 +#: graphicswin.cpp:148 msgid "A&ngle" msgstr "A&ngle" -#: graphicswin.cpp:147 +#: graphicswin.cpp:149 msgid "Reference An&gle" msgstr "An&gle Maître / Indicatif" -#: graphicswin.cpp:148 +#: graphicswin.cpp:150 msgid "Other S&upplementary Angle" msgstr "Autre angle S&upplémentaire" -#: graphicswin.cpp:149 +#: graphicswin.cpp:151 msgid "Toggle R&eference Dim" msgstr "Basculer cote Maîtresse / cote Indicative" -#: graphicswin.cpp:151 +#: graphicswin.cpp:153 msgid "&Horizontal" msgstr "&Horizontal" -#: graphicswin.cpp:152 +#: graphicswin.cpp:154 msgid "&Vertical" msgstr "&Vertical" -#: graphicswin.cpp:154 +#: graphicswin.cpp:156 msgid "&On Point / Curve / Plane" msgstr "&Sur Point / Courbe / Plan" -#: graphicswin.cpp:155 +#: graphicswin.cpp:157 msgid "E&qual Length / Radius / Angle" msgstr "&Egale Longueur / Rayon / Angle" -#: graphicswin.cpp:156 -msgid "Length Ra&tio" -msgstr "R&apport de Longueur" - -#: graphicswin.cpp:157 -msgid "Length Diff&erence" -msgstr "D&ifférence de Longueur" - #: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "" + +#: graphicswin.cpp:160 msgid "At &Midpoint" msgstr "Au &Milieu" -#: graphicswin.cpp:159 +#: graphicswin.cpp:161 msgid "S&ymmetric" msgstr "&Symétrique" -#: graphicswin.cpp:160 +#: graphicswin.cpp:162 msgid "Para&llel / Tangent" msgstr "Para&llèle / Tangent" -#: graphicswin.cpp:161 +#: graphicswin.cpp:163 msgid "&Perpendicular" msgstr "&Perpendiculaire" -#: graphicswin.cpp:162 +#: graphicswin.cpp:164 msgid "Same Orient&ation" msgstr "Même Orient&ation" -#: graphicswin.cpp:163 +#: graphicswin.cpp:165 msgid "Lock Point Where &Dragged" msgstr "Accrocher le point à l'&Emplacement" -#: graphicswin.cpp:165 +#: graphicswin.cpp:167 msgid "Comment" msgstr "Commentaire" -#: graphicswin.cpp:167 +#: graphicswin.cpp:169 msgid "&Analyze" msgstr "&Analyse" -#: graphicswin.cpp:168 +#: graphicswin.cpp:170 msgid "Measure &Volume" msgstr "Mesure &Volume" -#: graphicswin.cpp:169 +#: graphicswin.cpp:171 msgid "Measure A&rea" msgstr "Mesure &Aire" -#: graphicswin.cpp:170 +#: graphicswin.cpp:172 msgid "Measure &Perimeter" msgstr "Mesure &Périmètre" -#: graphicswin.cpp:171 +#: graphicswin.cpp:173 msgid "Show &Interfering Parts" msgstr "Montrer les Pièces &Interférentes" -#: graphicswin.cpp:172 +#: graphicswin.cpp:174 msgid "Show &Naked Edges" msgstr "Montrer les Arêtes &Nues" -#: graphicswin.cpp:173 +#: graphicswin.cpp:175 msgid "Show &Center of Mass" msgstr "Montrer le &Centre de Gravité" -#: graphicswin.cpp:175 +#: graphicswin.cpp:177 msgid "Show &Underconstrained Points" msgstr "Montrer les &sous-contraintes Points" -#: graphicswin.cpp:177 +#: graphicswin.cpp:179 msgid "&Trace Point" msgstr "&Tracer Point" -#: graphicswin.cpp:178 +#: graphicswin.cpp:180 msgid "&Stop Tracing..." msgstr "&Arrêt Tracé..." -#: graphicswin.cpp:179 +#: graphicswin.cpp:181 msgid "Step &Dimension..." msgstr "Espacement &Dimension..." -#: graphicswin.cpp:181 +#: graphicswin.cpp:183 msgid "&Help" msgstr "&Aide" -#: graphicswin.cpp:182 +#: graphicswin.cpp:184 msgid "&Language" msgstr "&Langue" -#: graphicswin.cpp:183 +#: graphicswin.cpp:185 msgid "&Website / Manual" msgstr "&Site web / Manuel" -#: graphicswin.cpp:185 +#: graphicswin.cpp:187 msgid "&About" msgstr "&A propos" -#: graphicswin.cpp:355 +#: graphicswin.cpp:361 msgid "(no recent files)" msgstr "(pas de fichier récent)" -#: graphicswin.cpp:363 +#: graphicswin.cpp:369 #, c-format msgid "File '%s' does not exist." msgstr "" -#: graphicswin.cpp:725 +#: graphicswin.cpp:736 msgid "No workplane is active, so the grid will not appear." msgstr "Pas de plan de travail actif, donc la grille ne va pas apparaître." -#: graphicswin.cpp:740 +#: graphicswin.cpp:751 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1134,19 +1162,19 @@ msgstr "" "Pour une projection en perspective, modifiez le facteur de perspective dans " "l'écran de configuration. Une valeur d'environ 0,3 est typique." -#: graphicswin.cpp:819 +#: graphicswin.cpp:836 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" "Sélectionnez un point. Ce point deviendra le centre de la vue à l'écran." -#: graphicswin.cpp:1114 +#: graphicswin.cpp:1136 msgid "No additional entities share endpoints with the selected entities." msgstr "" "Aucune entité supplémentaire ne partage des points d'extrémité avec les " "entités sélectionnées." -#: graphicswin.cpp:1132 +#: graphicswin.cpp:1154 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." @@ -1154,7 +1182,7 @@ msgstr "" "Pour utiliser cette commande, sélectionnez un point ou une autre entité à " "partir d'une pièce liée ou créez un groupe de liens dans le groupe actif." -#: graphicswin.cpp:1155 +#: graphicswin.cpp:1177 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." @@ -1162,7 +1190,7 @@ msgstr "" "Aucun plan de travail n'est actif. Activez un plan de travail (avec Dessin -" "> Dans plan de travail) pour définir le plan pour la grille d'accrochage." -#: graphicswin.cpp:1162 +#: graphicswin.cpp:1184 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." @@ -1171,13 +1199,13 @@ msgstr "" "des textes de commentaires ou des contraintes avec une étiquette. Pour " "accrocher une ligne, sélectionnez ses points d'extrémité." -#: graphicswin.cpp:1247 +#: graphicswin.cpp:1269 msgid "No workplane selected. Activating default workplane for this group." msgstr "" "Aucun plan de travail sélectionné. Activation du plan de travail par défaut " "pour ce groupe." -#: graphicswin.cpp:1250 +#: graphicswin.cpp:1272 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" @@ -1187,7 +1215,7 @@ msgstr "" "de travail par défaut. Essayez de sélectionner un plan de travail ou " "d'activer un groupe de \"Dessin dans nouveau plan travail\"." -#: graphicswin.cpp:1271 +#: graphicswin.cpp:1293 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." @@ -1195,49 +1223,49 @@ msgstr "" "Mauvaise sélection pour l'arc tangent au point. Sélectionnez un seul point, " "ou ne sélectionnez rien pour configurer les paramètres de l'arc." -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1304 msgid "click point on arc (draws anti-clockwise)" msgstr "" "cliquez un point sur l'arc (dessine dans le sens inverse des aiguilles d'une " "montre)" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1305 msgid "click to place datum point" msgstr "cliquez pour placer un point" -#: graphicswin.cpp:1284 +#: graphicswin.cpp:1306 msgid "click first point of line segment" msgstr "cliquez le premier point du segment de ligne" -#: graphicswin.cpp:1286 +#: graphicswin.cpp:1308 msgid "click first point of construction line segment" msgstr "cliquez le premier point de la ligne de construction" -#: graphicswin.cpp:1287 +#: graphicswin.cpp:1309 msgid "click first point of cubic segment" msgstr "cliquez le premier point du segment cubique" -#: graphicswin.cpp:1288 +#: graphicswin.cpp:1310 msgid "click center of circle" msgstr "cliquez pour placer le centre du cercle" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1311 msgid "click origin of workplane" msgstr "cliquez pour placer l'origine du plan de travail" -#: graphicswin.cpp:1290 +#: graphicswin.cpp:1312 msgid "click one corner of rectangle" msgstr "cliquez un coin du rectangle" -#: graphicswin.cpp:1291 +#: graphicswin.cpp:1313 msgid "click top left of text" msgstr "cliquez le haut à gauche du texte" -#: graphicswin.cpp:1297 +#: graphicswin.cpp:1319 msgid "click top left of image" msgstr "cliquez le haut à gauche de l'image" -#: graphicswin.cpp:1309 +#: graphicswin.cpp:1345 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1250,24 +1278,18 @@ msgctxt "group-name" msgid "sketch-in-3d" msgstr "dessin-en-3d" -#: group.cpp:142 +#: group.cpp:150 msgid "" "Bad selection for new sketch in workplane. This group can be created with:\n" "\n" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, parallel to the " "lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" msgstr "" -"Mauvaise sélection pour un nouveau dessin dans le plan de travail. Ce groupe " -"peut être créé avec:\n" -"\n" -"    * Un point (par le point, orthogonal aux axes de coordonnées)\n" -"    * Un point et deux segments de ligne (par le point, parallèle aux " -"lignes)\n" -"    * Un plan de travail (copie du plan de travail)\n" -#: group.cpp:154 +#: group.cpp:166 msgid "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " "will be extruded normal to the workplane." @@ -1275,16 +1297,16 @@ msgstr "" "Activez un plan de travail (Dessin -> Dans plan de travail) avant " "l'extrusion. Le croquis sera extrudé normalement au plan de travail." -#: group.cpp:163 +#: group.cpp:175 msgctxt "group-name" msgid "extrude" msgstr "extruder" -#: group.cpp:168 +#: group.cpp:180 msgid "Lathe operation can only be applied to planar sketches." msgstr "" -#: group.cpp:179 +#: group.cpp:191 msgid "" "Bad selection for new lathe group. This group can be created with:\n" "\n" @@ -1299,16 +1321,16 @@ msgstr "" "parallèle à la ligne / point normal, par le point)\n" "    * Un segment de ligne (révolution sur le segment de ligne)\n" -#: group.cpp:189 +#: group.cpp:201 msgctxt "group-name" msgid "lathe" msgstr "révolution" -#: group.cpp:194 +#: group.cpp:206 msgid "Revolve operation can only be applied to planar sketches." msgstr "" -#: group.cpp:205 +#: group.cpp:217 msgid "" "Bad selection for new revolve group. This group can be created with:\n" "\n" @@ -1317,16 +1339,16 @@ msgid "" " * a line segment (revolved about line segment)\n" msgstr "" -#: group.cpp:217 +#: group.cpp:229 msgctxt "group-name" msgid "revolve" msgstr "" -#: group.cpp:222 +#: group.cpp:234 msgid "Helix operation can only be applied to planar sketches." msgstr "" -#: group.cpp:233 +#: group.cpp:245 msgid "" "Bad selection for new helix group. This group can be created with:\n" "\n" @@ -1335,12 +1357,12 @@ msgid "" " * a line segment (revolved about line segment)\n" msgstr "" -#: group.cpp:245 +#: group.cpp:257 msgctxt "group-name" msgid "helix" msgstr "" -#: group.cpp:258 +#: group.cpp:270 msgid "" "Bad selection for new rotation. This group can be created with:\n" "\n" @@ -1357,41 +1379,41 @@ msgstr "" "    * Un point et une ligne ou une normale (tourner autour d'un axe par le " "point et parallèle à la ligne / normale)\n" -#: group.cpp:271 +#: group.cpp:283 msgctxt "group-name" msgid "rotate" msgstr "rotation" -#: group.cpp:282 +#: group.cpp:294 msgctxt "group-name" msgid "translate" msgstr "translation" -#: group.cpp:400 +#: group.cpp:416 msgid "(unnamed)" msgstr "(sans nom)" -#: groupmesh.cpp:709 +#: groupmesh.cpp:707 msgid "not closed contour, or not all same style!" msgstr "contour non fermé ou tout n'est pas du même style!" -#: groupmesh.cpp:722 +#: groupmesh.cpp:720 msgid "points not all coplanar!" msgstr "les points ne sont pas tous coplanaires!" -#: groupmesh.cpp:724 +#: groupmesh.cpp:722 msgid "contour is self-intersecting!" msgstr "le contour s'entrecroise!" -#: groupmesh.cpp:726 +#: groupmesh.cpp:724 msgid "zero-length edge!" msgstr "arête de longueur nulle!" -#: modify.cpp:254 +#: modify.cpp:252 msgid "Must be sketching in workplane to create tangent arc." msgstr "Vous devez dessiner dans un plan pour créer un arc tangent." -#: modify.cpp:301 +#: modify.cpp:299 msgid "" "To create a tangent arc, select a point where two non-construction lines or " "circles in this group and workplane join." @@ -1399,7 +1421,7 @@ msgstr "" "Pour créer un arc tangent, sélectionnez un point où deux lignes (pas de " "construction) ou cercles de ce groupe et de ce plan se joignent." -#: modify.cpp:388 +#: modify.cpp:386 msgid "" "Couldn't round this corner. Try a smaller radius, or try creating the " "desired geometry by hand with tangency constraints." @@ -1407,123 +1429,123 @@ msgstr "" "Impossible d'arrondir ce coin. Essayez un rayon plus petit, ou essayez de " "créer la géométrie souhaitée à la main avec des contraintes tangentielles." -#: modify.cpp:597 +#: modify.cpp:595 msgid "Couldn't split this entity; lines, circles, or cubics only." msgstr "" "Impossible de diviser cette entité; Lignes, cercles ou cubiques uniquement." -#: modify.cpp:624 +#: modify.cpp:622 msgid "Must be sketching in workplane to split." msgstr "Vous devez dessiner dans un plan de travail pour diviser." -#: modify.cpp:631 +#: modify.cpp:629 msgid "" "Select two entities that intersect each other (e.g. two lines/circles/arcs " "or a line/circle/arc and a point)." msgstr "" -#: modify.cpp:736 +#: modify.cpp:734 msgid "Can't split; no intersection found." msgstr "Impossible de diviser; pas d'intersection trouvée." -#: mouse.cpp:559 +#: mouse.cpp:557 msgid "Assign to Style" msgstr "Appliquer au style" -#: mouse.cpp:575 +#: mouse.cpp:573 msgid "No Style" msgstr "Pas de style" -#: mouse.cpp:578 +#: mouse.cpp:576 msgid "Newly Created Custom Style..." msgstr "Style personnalisé nouvellement créé ..." -#: mouse.cpp:585 +#: mouse.cpp:583 msgid "Group Info" msgstr "Info Groupe" -#: mouse.cpp:605 +#: mouse.cpp:603 msgid "Style Info" msgstr "Info Style" -#: mouse.cpp:625 +#: mouse.cpp:623 msgid "Select Edge Chain" msgstr "Sélection Chaîne d'arêtes" -#: mouse.cpp:631 +#: mouse.cpp:629 msgid "Toggle Reference Dimension" msgstr "Basculer cote maîtresse / cote indicative" -#: mouse.cpp:637 +#: mouse.cpp:635 msgid "Other Supplementary Angle" msgstr "Autre angle supplémentaire" -#: mouse.cpp:642 +#: mouse.cpp:640 msgid "Snap to Grid" msgstr "Accrocher à la grille" -#: mouse.cpp:651 +#: mouse.cpp:649 msgid "Remove Spline Point" msgstr "Effacer le point de la Spline" -#: mouse.cpp:686 +#: mouse.cpp:684 msgid "Add Spline Point" msgstr "Ajouter un point à la Spline" -#: mouse.cpp:690 +#: mouse.cpp:688 msgid "Cannot add spline point: maximum number of points reached." msgstr "" "Impossible d'ajouter le point spline: nombre maximum de points atteints." -#: mouse.cpp:715 +#: mouse.cpp:713 msgid "Toggle Construction" msgstr "Basculer en mode \"construction\"." -#: mouse.cpp:730 +#: mouse.cpp:729 msgid "Delete Point-Coincident Constraint" msgstr "Effacer la contraint Point-Coïncident" -#: mouse.cpp:749 +#: mouse.cpp:747 msgid "Cut" msgstr "Couper" -#: mouse.cpp:751 +#: mouse.cpp:749 msgid "Copy" msgstr "Copier" -#: mouse.cpp:755 +#: mouse.cpp:753 msgid "Select All" msgstr "Sélectionner tout" -#: mouse.cpp:760 +#: mouse.cpp:758 msgid "Paste" msgstr "Coller" -#: mouse.cpp:762 +#: mouse.cpp:760 msgid "Paste Transformed..." msgstr "Coller transformé..." -#: mouse.cpp:767 +#: mouse.cpp:765 msgid "Delete" msgstr "Effacer" -#: mouse.cpp:770 +#: mouse.cpp:768 msgid "Unselect All" msgstr "Désélectionner tout" -#: mouse.cpp:777 +#: mouse.cpp:775 msgid "Unselect Hovered" msgstr "Désélectionner survolé" -#: mouse.cpp:786 +#: mouse.cpp:784 msgid "Zoom to Fit" msgstr "Zoom pour ajuster" -#: mouse.cpp:988 mouse.cpp:1275 +#: mouse.cpp:986 mouse.cpp:1274 msgid "click next point of line, or press Esc" msgstr "cliquez pou le prochain point de ligne or appuyez sur Esc" -#: mouse.cpp:994 +#: mouse.cpp:992 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1531,15 +1553,15 @@ msgstr "" "Impossible de dessiner un rectangle en 3d; D'abord, activez un plan de " "travail avec \"Dessin -> Dans plan de travail\"." -#: mouse.cpp:1028 +#: mouse.cpp:1026 msgid "click to place other corner of rectangle" msgstr "cliquez pour placer un autre coin de rectangle" -#: mouse.cpp:1048 +#: mouse.cpp:1047 msgid "click to set radius" msgstr "cliquez pour ajuster le rayon" -#: mouse.cpp:1053 +#: mouse.cpp:1052 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1547,22 +1569,22 @@ msgstr "" "Ne peut pas dessiner l'arc en 3d; D'abord, activez un plan de travail avec " "\"Dessin -> Dans plan de travail\"." -#: mouse.cpp:1072 +#: mouse.cpp:1071 msgid "click to place point" msgstr "cliquez pour placer un point" -#: mouse.cpp:1088 +#: mouse.cpp:1087 msgid "click next point of cubic, or press Esc" msgstr "cliquez le prochain point cubique ou appuyez sur Esc" -#: mouse.cpp:1093 +#: mouse.cpp:1092 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" "Vous dessinez déjà dans un plan de travail; Sélectionner \"Dessiner en 3d\" " "avant de créer un nouveau plan de travail." -#: mouse.cpp:1109 +#: mouse.cpp:1108 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1570,11 +1592,11 @@ msgstr "" "Impossible de dessiner du texte en 3d; D'abord, activer un plan de travail " "avec \"Dessin -> Dans plan de travail\"." -#: mouse.cpp:1126 +#: mouse.cpp:1125 msgid "click to place bottom right of text" msgstr "" -#: mouse.cpp:1132 +#: mouse.cpp:1131 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1582,219 +1604,225 @@ msgstr "" "Impossible de dessiner l'image en 3d; D'abord, activez un plan de travail " "avec \"Dessin -> Dans plan de travail\"." -#: mouse.cpp:1159 -msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -msgstr "NOUVEAU COMMENTAIRE - DOUBLE-CLIQUE POUR EDITER" - -#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552 msgctxt "file-type" msgid "SolveSpace models" msgstr "" -#: platform/gui.cpp:90 +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "" + +#: platform/gui.cpp:91 msgctxt "file-type" msgid "IDF circuit board" msgstr "" -#: platform/gui.cpp:94 +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "" + +#: platform/gui.cpp:96 msgctxt "file-type" msgid "PNG image" msgstr "" -#: platform/gui.cpp:98 +#: platform/gui.cpp:100 msgctxt "file-type" msgid "STL mesh" msgstr "" -#: platform/gui.cpp:99 +#: platform/gui.cpp:101 msgctxt "file-type" msgid "Wavefront OBJ mesh" msgstr "" -#: platform/gui.cpp:100 +#: platform/gui.cpp:102 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" msgstr "" -#: platform/gui.cpp:101 +#: platform/gui.cpp:103 msgctxt "file-type" msgid "Three.js-compatible mesh, mesh only" msgstr "" -#: platform/gui.cpp:102 +#: platform/gui.cpp:104 msgctxt "file-type" msgid "VRML text file" msgstr "" -#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 msgctxt "file-type" msgid "STEP file" msgstr "" -#: platform/gui.cpp:110 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "PDF file" msgstr "" -#: platform/gui.cpp:111 +#: platform/gui.cpp:113 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "" -#: platform/gui.cpp:112 +#: platform/gui.cpp:114 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "" -#: platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:116 platform/gui.cpp:123 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "" -#: platform/gui.cpp:115 +#: platform/gui.cpp:117 msgctxt "file-type" msgid "HPGL file" msgstr "" -#: platform/gui.cpp:116 +#: platform/gui.cpp:118 msgctxt "file-type" msgid "G Code" msgstr "" -#: platform/gui.cpp:125 +#: platform/gui.cpp:127 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "" -#: platform/gui.cpp:129 +#: platform/gui.cpp:131 msgctxt "file-type" msgid "Comma-separated values" msgstr "" -#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641 msgid "untitled" msgstr "sans nom" -#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 -#: platform/guiwin.cpp:1582 +#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445 +#: platform/guiwin.cpp:1639 msgctxt "title" msgid "Save File" msgstr "Sauver fichier" -#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 -#: platform/guiwin.cpp:1584 +#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428 +#: platform/guiwin.cpp:1645 msgctxt "title" msgid "Open File" msgstr "Ouvrir Fichier" -#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418 msgctxt "button" msgid "_Cancel" msgstr "_Annuler" -#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416 msgctxt "button" msgid "_Save" msgstr "_Sauver" -#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417 msgctxt "button" msgid "_Open" msgstr "" -#: solvespace.cpp:169 +#: solvespace.cpp:170 msgctxt "title" msgid "Autosave Available" msgstr "Sauvegarde automatique existante" -#: solvespace.cpp:170 +#: solvespace.cpp:171 msgctxt "dialog" msgid "An autosave file is available for this sketch." msgstr "" -#: solvespace.cpp:171 +#: solvespace.cpp:172 msgctxt "dialog" msgid "Do you want to load the autosave file instead?" msgstr "" -#: solvespace.cpp:172 +#: solvespace.cpp:173 msgctxt "button" msgid "&Load autosave" msgstr "" -#: solvespace.cpp:174 +#: solvespace.cpp:175 msgctxt "button" msgid "Do&n't Load" msgstr "" -#: solvespace.cpp:557 +#: solvespace.cpp:598 msgctxt "title" msgid "Modified File" msgstr "Fichier modifié" -#: solvespace.cpp:559 +#: solvespace.cpp:600 #, c-format msgctxt "dialog" msgid "Do you want to save the changes you made to the sketch “%s”?" msgstr "" -#: solvespace.cpp:562 +#: solvespace.cpp:603 msgctxt "dialog" msgid "Do you want to save the changes you made to the new sketch?" msgstr "" -#: solvespace.cpp:565 +#: solvespace.cpp:606 msgctxt "dialog" msgid "Your changes will be lost if you don't save them." msgstr "" -#: solvespace.cpp:566 +#: solvespace.cpp:607 msgctxt "button" msgid "&Save" msgstr "" -#: solvespace.cpp:568 +#: solvespace.cpp:609 msgctxt "button" msgid "Do&n't Save" msgstr "" -#: solvespace.cpp:589 +#: solvespace.cpp:630 msgctxt "title" msgid "(new sketch)" msgstr "(nouveau dessin)" -#: solvespace.cpp:596 +#: solvespace.cpp:637 msgctxt "title" msgid "Property Browser" msgstr "Navigateur de propriété" -#: solvespace.cpp:658 +#: solvespace.cpp:699 msgid "" "Constraints are currently shown, and will be exported in the toolpath. This " "is probably not what you want; hide them by clicking the link at the top of " "the text window." msgstr "" -#: solvespace.cpp:730 +#: solvespace.cpp:771 #, c-format msgid "" "Can't identify file type from file extension of filename '%s'; try .dxf or ." "dwg." msgstr "" -#: solvespace.cpp:778 +#: solvespace.cpp:823 msgid "Constraint must have a label, and must not be a reference dimension." msgstr "" -#: solvespace.cpp:782 +#: solvespace.cpp:827 msgid "Bad selection for step dimension; select a constraint." msgstr "" -#: solvespace.cpp:806 +#: solvespace.cpp:851 msgid "The assembly does not interfere, good." msgstr "" -#: solvespace.cpp:822 +#: solvespace.cpp:867 #, c-format msgid "" "The volume of the solid model is:\n" @@ -1802,7 +1830,7 @@ msgid "" " %s" msgstr "" -#: solvespace.cpp:831 +#: solvespace.cpp:876 #, c-format msgid "" "\n" @@ -1811,7 +1839,7 @@ msgid "" " %s" msgstr "" -#: solvespace.cpp:836 +#: solvespace.cpp:881 msgid "" "\n" "\n" @@ -1819,7 +1847,7 @@ msgid "" "This introduces error, typically of around 1%." msgstr "" -#: solvespace.cpp:851 +#: solvespace.cpp:896 #, c-format msgid "" "The surface area of the selected faces is:\n" @@ -1830,13 +1858,13 @@ msgid "" "This introduces error, typically of around 1%%." msgstr "" -#: solvespace.cpp:860 +#: solvespace.cpp:905 msgid "" "This group does not contain a correctly-formed 2d closed area. It is open, " "not coplanar, or self-intersecting." msgstr "" -#: solvespace.cpp:872 +#: solvespace.cpp:917 #, c-format msgid "" "The area of the region sketched in this group is:\n" @@ -1847,7 +1875,7 @@ msgid "" "This introduces error, typically of around 1%%." msgstr "" -#: solvespace.cpp:892 +#: solvespace.cpp:937 #, c-format msgid "" "The total length of the selected entities is:\n" @@ -1858,36 +1886,36 @@ msgid "" "This introduces error, typically of around 1%%." msgstr "" -#: solvespace.cpp:898 +#: solvespace.cpp:943 msgid "Bad selection for perimeter; select line segments, arcs, and curves." msgstr "" -#: solvespace.cpp:914 +#: solvespace.cpp:959 msgid "Bad selection for trace; select a single point." msgstr "" -#: solvespace.cpp:941 +#: solvespace.cpp:986 #, c-format msgid "Couldn't write to '%s'" msgstr "" -#: solvespace.cpp:971 +#: solvespace.cpp:1016 msgid "The mesh is self-intersecting (NOT okay, invalid)." msgstr "" -#: solvespace.cpp:972 +#: solvespace.cpp:1017 msgid "The mesh is not self-intersecting (okay, valid)." msgstr "" -#: solvespace.cpp:974 +#: solvespace.cpp:1019 msgid "The mesh has naked edges (NOT okay, invalid)." msgstr "" -#: solvespace.cpp:975 +#: solvespace.cpp:1020 msgid "The mesh is watertight (okay, valid)." msgstr "" -#: solvespace.cpp:978 +#: solvespace.cpp:1023 #, c-format msgid "" "\n" @@ -1895,7 +1923,7 @@ msgid "" "The model contains %d triangles, from %d surfaces." msgstr "" -#: solvespace.cpp:982 +#: solvespace.cpp:1027 #, c-format msgid "" "%s\n" @@ -1905,7 +1933,7 @@ msgid "" "Zero problematic edges, good.%s" msgstr "" -#: solvespace.cpp:985 +#: solvespace.cpp:1030 #, c-format msgid "" "%s\n" @@ -1915,7 +1943,7 @@ msgid "" "%d problematic edges, bad.%s" msgstr "" -#: solvespace.cpp:998 +#: solvespace.cpp:1043 #, c-format msgid "" "This is SolveSpace version %s.\n" @@ -1932,7 +1960,7 @@ msgid "" "© 2008-%d Jonathan Westhues and other authors.\n" msgstr "" -#: style.cpp:166 +#: style.cpp:185 msgid "" "Can't assign style to an entity that's derived from another entity; try " "assigning a style to this entity's parent." @@ -1940,27 +1968,27 @@ msgstr "" "Impossible d'attribuer le style à une entité dérivée d'une autre entité; " "Essayez d'attribuer un style au parent de cette entité." -#: style.cpp:665 +#: style.cpp:735 msgid "Style name cannot be empty" msgstr "Le nom d'un style ne peut pas être vide" -#: textscreens.cpp:741 +#: textscreens.cpp:785 msgid "Can't repeat fewer than 1 time." msgstr "Je ne peux pas répéter moins de 1 fois." -#: textscreens.cpp:745 +#: textscreens.cpp:789 msgid "Can't repeat more than 999 times." msgstr "Je ne peux pas répéter plus de 999 fois." -#: textscreens.cpp:770 +#: textscreens.cpp:814 msgid "Group name cannot be empty" msgstr "Un nom de groupe ne peut pas être vide" -#: textscreens.cpp:813 +#: textscreens.cpp:866 msgid "Opacity must be between zero and one." msgstr "L'opacité doit être entre 0 et 1." -#: textscreens.cpp:848 +#: textscreens.cpp:901 msgid "Radius cannot be zero or negative." msgstr "Le rayon ne peut pas être zéro ou négatif." @@ -2116,14 +2144,58 @@ msgctxt "button" msgid "&OK" msgstr "" -#: view.cpp:78 +#: view.cpp:127 msgid "Scale cannot be zero or negative." msgstr "L'échelle ne peut pas être zéro ou négative." -#: view.cpp:90 view.cpp:99 +#: view.cpp:139 view.cpp:148 msgid "Bad format: specify x, y, z" msgstr "Mauvais format: Spécifiez x, y, z" +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Mauvaise sélection pour la contrainte du rapport de longueur. Cette " +#~ "contrainte peut s'appliquer à:\n" +#~ "\n" +#~ "    * Deux segments de ligne\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Mauvaise sélection pour la contrainte de différence de longueur. Cette " +#~ "contrainte peut s'appliquer à:\n" +#~ "\n" +#~ "    * Deux segments de ligne\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "R&apport de Longueur" + +#~ msgid "Length Diff&erence" +#~ msgstr "D&ifférence de Longueur" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "Mauvaise sélection pour un nouveau dessin dans le plan de travail. Ce " +#~ "groupe peut être créé avec:\n" +#~ "\n" +#~ "    * Un point (par le point, orthogonal aux axes de coordonnées)\n" +#~ "    * Un point et deux segments de ligne (par le point, parallèle aux " +#~ "lignes)\n" +#~ "    * Un plan de travail (copie du plan de travail)\n" + #~ msgid "Specify between 0 and 8 digits after the decimal." #~ msgstr "Spécifiez entre 0 et 8 chiffres après la virgule." diff --git a/res/locales/ru_RU.po b/res/locales/ru_RU.po index 42a3fa3a..6ffc7f89 100644 --- a/res/locales/ru_RU.po +++ b/res/locales/ru_RU.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2021-02-01 15:45+0200\n" +"POT-Creation-Date: 2021-09-26 16:25-0400\n" "PO-Revision-Date: 2021-01-22 18:50+0700\n" "Last-Translator: evilspirit@evilspirit.org\n" "Language-Team: EvilSpirit\n" @@ -17,7 +17,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.2\n" -#: clipboard.cpp:310 +#: clipboard.cpp:309 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -27,50 +27,50 @@ msgstr "" "можно только находясь в рабочей плоскости.\n" "Активируйте рабочую плоскость через Эскиз->В Рабочей Плоскости" -#: clipboard.cpp:327 +#: clipboard.cpp:326 msgid "Clipboard is empty; nothing to paste." msgstr "Буфер обмена пуст; нечего вставлять." -#: clipboard.cpp:374 +#: clipboard.cpp:373 msgid "Number of copies to paste must be at least one." msgstr "Укажите в поле 'количество' хотя бы одну копию для вставки." -#: clipboard.cpp:390 textscreens.cpp:783 +#: clipboard.cpp:389 textscreens.cpp:827 msgid "Scale cannot be zero." msgstr "Масштабный коэффициент не может быть нулевым." -#: clipboard.cpp:432 +#: clipboard.cpp:431 msgid "Select one point to define origin of rotation." msgstr "Выберите одну точку в качестве центра вращения." -#: clipboard.cpp:444 +#: clipboard.cpp:443 msgid "Select two points to define translation vector." msgstr "Выберите две точки, чтобы задать вектор смещения." -#: clipboard.cpp:454 +#: clipboard.cpp:453 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." msgstr "" "Трансформация не задана. Все копии будут расположены в одном и том же месте." -#: clipboard.cpp:458 +#: clipboard.cpp:457 msgid "Too many items to paste; split this into smaller pastes." msgstr "Слишком много элементов для вставки; разбейте на несколько частей." -#: clipboard.cpp:463 +#: clipboard.cpp:462 msgid "No workplane active." msgstr "Рабочая плоскость не активна" -#: confscreen.cpp:418 +#: confscreen.cpp:376 msgid "Bad format: specify coordinates as x, y, z" msgstr "Неверный формат: введите координаты как x, y, z" -#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858 msgid "Bad format: specify color as r, g, b" msgstr "Неверный формат: введите цвет как r, g, b" -#: confscreen.cpp:454 +#: confscreen.cpp:412 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." @@ -78,25 +78,25 @@ msgstr "" "Коэффициент перспективы не будет иметь эффект, пока вы не включите Вид-" ">Перспективная Проекция." -#: confscreen.cpp:467 confscreen.cpp:477 +#: confscreen.cpp:430 confscreen.cpp:440 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "Введите число от 0 до %d." -#: confscreen.cpp:489 +#: confscreen.cpp:452 msgid "Export scale must not be zero!" msgstr "Масштабный коэффициент не может быть нулевым!" -#: confscreen.cpp:501 +#: confscreen.cpp:464 msgid "Cutter radius offset must not be negative!" msgstr "Радиус режущего инструмента не может быть отрицательным!" -#: confscreen.cpp:555 +#: confscreen.cpp:518 msgid "Bad value: autosave interval should be positive" msgstr "" "Неверное значение: интервал автосохранения должен быть положительным числом" -#: confscreen.cpp:558 +#: confscreen.cpp:521 msgid "Bad format: specify interval in integral minutes" msgstr "" "Неверный формат: введите целое число, чтобы задать интервал автосохранения" @@ -168,115 +168,135 @@ msgstr "отношение-длин" #: constraint.cpp:25 msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" msgid "length-difference" msgstr "разность-длин" -#: constraint.cpp:26 +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "" + +#: constraint.cpp:30 msgctxt "constr-name" msgid "symmetric" msgstr "симметричность" -#: constraint.cpp:27 +#: constraint.cpp:31 msgctxt "constr-name" msgid "symmetric-h" msgstr "симметричность-гориз" -#: constraint.cpp:28 +#: constraint.cpp:32 msgctxt "constr-name" msgid "symmetric-v" msgstr "симметричность-верт" -#: constraint.cpp:29 +#: constraint.cpp:33 msgctxt "constr-name" msgid "symmetric-line" msgstr "симметричность-по-оси" -#: constraint.cpp:30 +#: constraint.cpp:34 msgctxt "constr-name" msgid "at-midpoint" msgstr "на-середине" -#: constraint.cpp:31 +#: constraint.cpp:35 msgctxt "constr-name" msgid "horizontal" msgstr "горизонтальность" -#: constraint.cpp:32 +#: constraint.cpp:36 msgctxt "constr-name" msgid "vertical" msgstr "вертикальность" -#: constraint.cpp:33 +#: constraint.cpp:37 msgctxt "constr-name" msgid "diameter" msgstr "диаметр" -#: constraint.cpp:34 +#: constraint.cpp:38 msgctxt "constr-name" msgid "pt-on-circle" msgstr "тчк-на-окружности" -#: constraint.cpp:35 +#: constraint.cpp:39 msgctxt "constr-name" msgid "same-orientation" msgstr "идентичная-ориентация" -#: constraint.cpp:36 +#: constraint.cpp:40 msgctxt "constr-name" msgid "angle" msgstr "угол" -#: constraint.cpp:37 +#: constraint.cpp:41 msgctxt "constr-name" msgid "parallel" msgstr "параллельность" -#: constraint.cpp:38 +#: constraint.cpp:42 msgctxt "constr-name" msgid "arc-line-tangent" msgstr "кас-дуга-линия" -#: constraint.cpp:39 +#: constraint.cpp:43 msgctxt "constr-name" msgid "cubic-line-tangent" msgstr "кас-сплайн-линия" -#: constraint.cpp:40 +#: constraint.cpp:44 msgctxt "constr-name" msgid "curve-curve-tangent" msgstr "кас-кривых" -#: constraint.cpp:41 +#: constraint.cpp:45 msgctxt "constr-name" msgid "perpendicular" msgstr "перпендикулярность" -#: constraint.cpp:42 +#: constraint.cpp:46 msgctxt "constr-name" msgid "eq-radius" msgstr "равенство-радиусов" -#: constraint.cpp:43 +#: constraint.cpp:47 msgctxt "constr-name" msgid "eq-angle" msgstr "равенство-углов" -#: constraint.cpp:44 +#: constraint.cpp:48 msgctxt "constr-name" msgid "eq-line-len-arc-len" msgstr "равен-длины-линии-длины-дуги" -#: constraint.cpp:45 +#: constraint.cpp:49 msgctxt "constr-name" msgid "lock-where-dragged" msgstr "фиксация" -#: constraint.cpp:46 +#: constraint.cpp:50 msgctxt "constr-name" msgid "comment" msgstr "комментарий" -#: constraint.cpp:140 +#: constraint.cpp:144 msgid "" "The tangent arc and line segment must share an endpoint. Constrain them with " "Constrain -> On Point before constraining tangent." @@ -285,7 +305,7 @@ msgstr "" "'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " "касательности." -#: constraint.cpp:158 +#: constraint.cpp:163 msgid "" "The tangent cubic and line segment must share an endpoint. Constrain them " "with Constrain -> On Point before constraining tangent." @@ -294,7 +314,7 @@ msgstr "" "'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " "касательности." -#: constraint.cpp:183 +#: constraint.cpp:189 msgid "" "The curves must share an endpoint. Constrain them with Constrain -> On Point " "before constraining tangent." @@ -303,7 +323,7 @@ msgstr "" "'Ограничения -> Точка на Примитиве' перед тем, как применять ограничение " "касательности." -#: constraint.cpp:231 +#: constraint.cpp:238 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -328,7 +348,7 @@ msgstr "" " * грань и точку (расстояние от точки до плоскости грани)\n" " * окружность или дугу (диаметр / радиус)\n" -#: constraint.cpp:284 +#: constraint.cpp:291 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -348,7 +368,7 @@ msgstr "" " * точку и окружность / дугу / сплайн (точка на кривой)\n" " * точку и грань (точка на грани)\n" -#: constraint.cpp:346 +#: constraint.cpp:353 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -376,30 +396,26 @@ msgstr "" " * две окружности / дуги (равенство радиусов)\n" " * отрезок и дугу (равенство длины отрезка и длины дуги)\n" -#: constraint.cpp:385 +#: constraint.cpp:407 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"Неправильное выделение для ограничения 'отношение длин'.\n" -"Ограничение может принимать в качестве выделения следующие примитивы:\n" -"\n" -" * два отрезка\n" -#: constraint.cpp:402 +#: constraint.cpp:441 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"Неправильное выделение для ограничения 'разница длин'.\n" -"Ограничение может принимать в качестве выделения следующие примитивы:\n" -"\n" -" * два отрезка\n" -#: constraint.cpp:428 +#: constraint.cpp:472 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -412,7 +428,7 @@ msgstr "" " * точку и отрезок (точка на середине отрезка)\n" " * отрезок и рабочую плоскость (середина отрезка на плоскости)\n" -#: constraint.cpp:486 +#: constraint.cpp:530 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -432,7 +448,7 @@ msgstr "" " * рабочую плоскость и две точки / отрезок (симметричность относительно " "рабочей плоскости\n" -#: constraint.cpp:500 +#: constraint.cpp:545 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." @@ -440,7 +456,7 @@ msgstr "" "Рабочая плоскость должна быть активна для того, чтобы создать\n" "ограничение симметричности без явного указания плоскости симметрии." -#: constraint.cpp:530 +#: constraint.cpp:579 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." @@ -448,7 +464,7 @@ msgstr "" "Рабочая плоскость должна быть активирована (Эскиз -> В рабочей плоскости)\n" "перед тем, как накладывать ограничения горизонтальности / вертикальности." -#: constraint.cpp:543 +#: constraint.cpp:592 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -462,7 +478,7 @@ msgstr "" " * две точки\n" " * отрезок\n" -#: constraint.cpp:564 +#: constraint.cpp:613 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -474,18 +490,18 @@ msgstr "" "\n" " * два координатных базиса('нормали')\n" -#: constraint.cpp:614 +#: constraint.cpp:663 msgid "Must select an angle constraint." msgstr "" "Переключатся между смежными углами можно только выбрав ограничение угла." -#: constraint.cpp:627 +#: constraint.cpp:676 msgid "Must select a constraint with associated label." msgstr "" "Переключать режим 'размера для справок' возможно только для ограничений, " "имеющих размерное значение." -#: constraint.cpp:638 +#: constraint.cpp:687 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -500,12 +516,12 @@ msgstr "" " * отрезок и координатный базис (нормаль)\n" " * два координатных базиса (нормали)\n" -#: constraint.cpp:701 +#: constraint.cpp:754 msgid "Curve-curve tangency must apply in workplane." msgstr "" "Ограничение касательности может быть наложено только в рабочей плоскости." -#: constraint.cpp:711 +#: constraint.cpp:766 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -524,7 +540,7 @@ msgstr "" " * два отрезка, две дуги или два сплайна, соединенных крайними точками " "(касательность)\n" -#: constraint.cpp:729 +#: constraint.cpp:784 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -539,7 +555,7 @@ msgstr "" " * отрезок и координатный базис (нормаль)\n" " * два координатных базиса (нормали)\n" -#: constraint.cpp:744 +#: constraint.cpp:799 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -551,7 +567,11 @@ msgstr "" "\n" " * точку\n" -#: constraint.cpp:755 +#: constraint.cpp:813 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "КОММЕНТАРИЙ -- ДВОЙНОЙ ЩЕЛЧОК ДЛЯ РЕДАКТИРОВАНИЯ" + +#: constraint.cpp:818 msgid "click center of comment text" msgstr "кликните мышью там, где будет расположен текстовый комментарий" @@ -579,26 +599,26 @@ msgstr "" " * точку и два отрезка (сечение плоскостью, заданной двумя отрезками, " "построенной через указанную точку)\n" -#: export.cpp:822 +#: export.cpp:818 msgid "Active group mesh is empty; nothing to export." msgstr "Активная группа не содержит тел; нечего экспортировать." -#: exportvector.cpp:337 +#: exportvector.cpp:336 msgid "freehand lines were replaced with continuous lines" msgstr "Стили линии 'от руки' были заменены сплошными линиями" -#: exportvector.cpp:339 +#: exportvector.cpp:338 msgid "zigzag lines were replaced with continuous lines" msgstr "Стили линии 'зиг-заг' были заменены сплошными линиями" -#: exportvector.cpp:593 +#: exportvector.cpp:592 msgid "" "Some aspects of the drawing have no DXF equivalent and were not exported:\n" msgstr "" "Некоторые элементы чертежа не имеют аналогов в DXF-представлении и не были " "экспортированы:\n" -#: exportvector.cpp:839 +#: exportvector.cpp:838 msgid "" "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." msgstr "" @@ -615,11 +635,11 @@ msgctxt "group-name" msgid "#references" msgstr "система-координат" -#: file.cpp:552 +#: file.cpp:550 msgid "The file is empty. It may be corrupt." msgstr "Файл пуст. Возможно он поврежден." -#: file.cpp:557 +#: file.cpp:555 msgid "" "Unrecognized data in file. This file may be corrupt, or from a newer version " "of the program." @@ -660,7 +680,7 @@ msgctxt "button" msgid "&No" msgstr "Нет" -#: file.cpp:877 solvespace.cpp:569 +#: file.cpp:877 solvespace.cpp:610 msgctxt "button" msgid "&Cancel" msgstr "Отменить" @@ -834,295 +854,303 @@ msgid "Use &Perspective Projection" msgstr "Перспективная Прое&кция" #: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "" + +#: graphicswin.cpp:98 msgid "Dimension &Units" msgstr "Единицы Измерения" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in &Millimeters" msgstr "Размеры в Ми&ллиметрах" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in M&eters" msgstr "Размеры в Метрах" -#: graphicswin.cpp:100 +#: graphicswin.cpp:101 msgid "Dimensions in &Inches" msgstr "Размеры в Дю&ймах" #: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "" + +#: graphicswin.cpp:104 msgid "Show &Toolbar" msgstr "Показывать Па&нель Инструментов" -#: graphicswin.cpp:103 +#: graphicswin.cpp:105 msgid "Show Property Bro&wser" msgstr "Показывать Брау&зер" -#: graphicswin.cpp:105 +#: graphicswin.cpp:107 msgid "&Full Screen" msgstr "Полно&экранный Режим" -#: graphicswin.cpp:107 +#: graphicswin.cpp:109 msgid "&New Group" msgstr "&Группа" -#: graphicswin.cpp:108 +#: graphicswin.cpp:110 msgid "Sketch In &3d" msgstr "Создать Эскиз в &3d" -#: graphicswin.cpp:109 +#: graphicswin.cpp:111 msgid "Sketch In New &Workplane" msgstr "Создать Эскиз в Новой &Рабочей Плоскости" -#: graphicswin.cpp:111 +#: graphicswin.cpp:113 msgid "Step &Translating" msgstr "&Линейный Массив" -#: graphicswin.cpp:112 +#: graphicswin.cpp:114 msgid "Step &Rotating" msgstr "&Круговой Массив" -#: graphicswin.cpp:114 +#: graphicswin.cpp:116 msgid "E&xtrude" msgstr "Тело &Выдавливания" -#: graphicswin.cpp:115 +#: graphicswin.cpp:117 msgid "&Helix" msgstr "Тело Винтовое" -#: graphicswin.cpp:116 +#: graphicswin.cpp:118 msgid "&Lathe" msgstr "Тело В&ращения" -#: graphicswin.cpp:117 +#: graphicswin.cpp:119 msgid "Re&volve" msgstr "Тело В&ращения" -#: graphicswin.cpp:119 +#: graphicswin.cpp:121 msgid "Link / Assemble..." msgstr "&Импорт Детали / Сборка..." -#: graphicswin.cpp:120 +#: graphicswin.cpp:122 msgid "Link Recent" msgstr "Последние &Детали" -#: graphicswin.cpp:122 +#: graphicswin.cpp:124 msgid "&Sketch" msgstr "&Эскиз" -#: graphicswin.cpp:123 +#: graphicswin.cpp:125 msgid "In &Workplane" msgstr "В &Рабочей Плоскости" -#: graphicswin.cpp:124 +#: graphicswin.cpp:126 msgid "Anywhere In &3d" msgstr "Режим &3d" -#: graphicswin.cpp:126 +#: graphicswin.cpp:128 msgid "Datum &Point" msgstr "Опорная &Точка" -#: graphicswin.cpp:127 +#: graphicswin.cpp:129 msgid "&Workplane" msgstr "Рабочая &Плоскость" -#: graphicswin.cpp:129 +#: graphicswin.cpp:131 msgid "Line &Segment" msgstr "&Отрезок" -#: graphicswin.cpp:130 +#: graphicswin.cpp:132 msgid "C&onstruction Line Segment" msgstr "&Вспомогательный Отрезок" -#: graphicswin.cpp:131 +#: graphicswin.cpp:133 msgid "&Rectangle" msgstr "Прямоу&гольник" -#: graphicswin.cpp:132 +#: graphicswin.cpp:134 msgid "&Circle" msgstr "О&кружность" -#: graphicswin.cpp:133 +#: graphicswin.cpp:135 msgid "&Arc of a Circle" msgstr "Д&уга Окружности" -#: graphicswin.cpp:134 +#: graphicswin.cpp:136 msgid "&Bezier Cubic Spline" msgstr "Кубический &Сплайн Безье" -#: graphicswin.cpp:136 +#: graphicswin.cpp:138 msgid "&Text in TrueType Font" msgstr "Т&екст TrueType" -#: graphicswin.cpp:137 +#: graphicswin.cpp:139 msgid "&Image" msgstr "И&зображение" -#: graphicswin.cpp:139 +#: graphicswin.cpp:141 msgid "To&ggle Construction" msgstr "Переключить Режим Вс&помогательных Построений" -#: graphicswin.cpp:140 +#: graphicswin.cpp:142 msgid "Tangent &Arc at Point" msgstr "Кас&ательная в Точке" -#: graphicswin.cpp:141 +#: graphicswin.cpp:143 msgid "Split Curves at &Intersection" msgstr "Ра&збить Кривые Пересечением" -#: graphicswin.cpp:143 +#: graphicswin.cpp:145 msgid "&Constrain" msgstr "&Ограничения" -#: graphicswin.cpp:144 +#: graphicswin.cpp:146 msgid "&Distance / Diameter" msgstr "&Расстояние / Диаметр" -#: graphicswin.cpp:145 +#: graphicswin.cpp:147 msgid "Re&ference Dimension" msgstr "&Справочный Размер" -#: graphicswin.cpp:146 +#: graphicswin.cpp:148 msgid "A&ngle" msgstr "&Угол" -#: graphicswin.cpp:147 +#: graphicswin.cpp:149 msgid "Reference An&gle" msgstr "С&правочный Угол" -#: graphicswin.cpp:148 +#: graphicswin.cpp:150 msgid "Other S&upplementary Angle" msgstr "Переключить Сме&жный Угол" -#: graphicswin.cpp:149 +#: graphicswin.cpp:151 msgid "Toggle R&eference Dim" msgstr "Переключить Режим Размера Для Спра&вок" -#: graphicswin.cpp:151 +#: graphicswin.cpp:153 msgid "&Horizontal" msgstr "&Горизонтальность" -#: graphicswin.cpp:152 +#: graphicswin.cpp:154 msgid "&Vertical" msgstr "&Вертикальность" -#: graphicswin.cpp:154 +#: graphicswin.cpp:156 msgid "&On Point / Curve / Plane" msgstr "&Точка на Примитиве" -#: graphicswin.cpp:155 +#: graphicswin.cpp:157 msgid "E&qual Length / Radius / Angle" msgstr "&Равенство Длин / Радиусов / Углов" -#: graphicswin.cpp:156 -msgid "Length Ra&tio" -msgstr "Отно&шение Длин" - -#: graphicswin.cpp:157 -msgid "Length Diff&erence" -msgstr "Ра&зница Длин" - #: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "" + +#: graphicswin.cpp:160 msgid "At &Midpoint" msgstr "&На Середине" -#: graphicswin.cpp:159 +#: graphicswin.cpp:161 msgid "S&ymmetric" msgstr "С&имметричность" -#: graphicswin.cpp:160 +#: graphicswin.cpp:162 msgid "Para&llel / Tangent" msgstr "Пара&ллельность / Касательность" -#: graphicswin.cpp:161 +#: graphicswin.cpp:163 msgid "&Perpendicular" msgstr "Перпендикул&ярность" -#: graphicswin.cpp:162 +#: graphicswin.cpp:164 msgid "Same Orient&ation" msgstr "Идентичная &Ориентация" -#: graphicswin.cpp:163 +#: graphicswin.cpp:165 msgid "Lock Point Where &Dragged" msgstr "За&фиксировать" -#: graphicswin.cpp:165 +#: graphicswin.cpp:167 msgid "Comment" msgstr "Текстовый &Комментарий" -#: graphicswin.cpp:167 +#: graphicswin.cpp:169 msgid "&Analyze" msgstr "&Анализ" -#: graphicswin.cpp:168 +#: graphicswin.cpp:170 msgid "Measure &Volume" msgstr "Измерить &Объем" -#: graphicswin.cpp:169 +#: graphicswin.cpp:171 msgid "Measure A&rea" msgstr "Измерить П&лощадь" -#: graphicswin.cpp:170 +#: graphicswin.cpp:172 msgid "Measure &Perimeter" msgstr "Измерить П&ериметр" -#: graphicswin.cpp:171 +#: graphicswin.cpp:173 msgid "Show &Interfering Parts" msgstr "Показать Пе&ресекающиеся Детали" -#: graphicswin.cpp:172 +#: graphicswin.cpp:174 msgid "Show &Naked Edges" msgstr "Показать Про&блемные Ребра" -#: graphicswin.cpp:173 +#: graphicswin.cpp:175 msgid "Show &Center of Mass" msgstr "Показать Центр Масс" -#: graphicswin.cpp:175 +#: graphicswin.cpp:177 msgid "Show &Underconstrained Points" msgstr "Показать Свободные Точки" -#: graphicswin.cpp:177 +#: graphicswin.cpp:179 msgid "&Trace Point" msgstr "Включить &Трассировку Точки" -#: graphicswin.cpp:178 +#: graphicswin.cpp:180 msgid "&Stop Tracing..." msgstr "Остановить Тра&ссировку..." -#: graphicswin.cpp:179 +#: graphicswin.cpp:181 msgid "Step &Dimension..." msgstr "Плавное Из&менение Размера..." -#: graphicswin.cpp:181 +#: graphicswin.cpp:183 msgid "&Help" msgstr "&Помощь" -#: graphicswin.cpp:182 +#: graphicswin.cpp:184 msgid "&Language" msgstr "&Язык" -#: graphicswin.cpp:183 +#: graphicswin.cpp:185 msgid "&Website / Manual" msgstr "Вебсайт / &Справка" -#: graphicswin.cpp:185 +#: graphicswin.cpp:187 msgid "&About" msgstr "О &Программе" -#: graphicswin.cpp:355 +#: graphicswin.cpp:361 msgid "(no recent files)" msgstr "(пусто)" -#: graphicswin.cpp:363 +#: graphicswin.cpp:369 #, c-format msgid "File '%s' does not exist." msgstr "Файл '%s' не существует." -#: graphicswin.cpp:725 +#: graphicswin.cpp:736 msgid "No workplane is active, so the grid will not appear." msgstr "Сетку не будет видно, пока рабочая плоскость не активирована." -#: graphicswin.cpp:740 +#: graphicswin.cpp:751 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1136,16 +1164,16 @@ msgstr "" "перспективы на конфигурационной странице браузера.\n" "Значение по умолчанию 0.3." -#: graphicswin.cpp:819 +#: graphicswin.cpp:836 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "Выделите точку. Вид будет отцентрован по этой точке." -#: graphicswin.cpp:1114 +#: graphicswin.cpp:1136 msgid "No additional entities share endpoints with the selected entities." msgstr "Нет дополнительных объектов, соединенных с выбранными примитивами." -#: graphicswin.cpp:1132 +#: graphicswin.cpp:1154 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." @@ -1154,7 +1182,7 @@ msgstr "" "принадлежащий импортированной детали или активируйте группу импортированной " "детали." -#: graphicswin.cpp:1155 +#: graphicswin.cpp:1177 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." @@ -1162,7 +1190,7 @@ msgstr "" "Рабочая плоскость не активна. Активируйте ее через Эскиз -> В Рабочей " "Плоскости чтобы определить плоскость для сетки." -#: graphicswin.cpp:1162 +#: graphicswin.cpp:1184 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." @@ -1171,13 +1199,13 @@ msgstr "" "текстовые комментарии или ограничения с размерными значениями. Чтобы " "привязать отрезок или другой примитив, выбирайте его точки." -#: graphicswin.cpp:1247 +#: graphicswin.cpp:1269 msgid "No workplane selected. Activating default workplane for this group." msgstr "" "Рабочая плоскость не активна. Активирована рабочая плоскость по умолчанию " "для данной группы." -#: graphicswin.cpp:1250 +#: graphicswin.cpp:1272 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" @@ -1187,7 +1215,7 @@ msgstr "" "по умолчанию. Попробуйте выделить рабочую плоскость или создать новую с " "помощью Группа -> Создать Эскиз в Новой Рабочей Плоскости." -#: graphicswin.cpp:1271 +#: graphicswin.cpp:1293 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." @@ -1196,54 +1224,54 @@ msgstr "" "точку, либо запустите команду без выделения, чтобы перейти к окну настроек " "этой команды." -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1304 msgid "click point on arc (draws anti-clockwise)" msgstr "" "кликните мышью там, где хотите создать дугу окружности (дуга будет " "нарисована против часовой стрелки)" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1305 msgid "click to place datum point" msgstr "кликните мышью там, где хотите создать опорную точку" -#: graphicswin.cpp:1284 +#: graphicswin.cpp:1306 msgid "click first point of line segment" msgstr "кликните мышью там, где хотите создать первую точку отрезка" -#: graphicswin.cpp:1286 +#: graphicswin.cpp:1308 msgid "click first point of construction line segment" msgstr "" "кликните мышью там, где хотите создать первую точку вспомогательного отрезка" -#: graphicswin.cpp:1287 +#: graphicswin.cpp:1309 msgid "click first point of cubic segment" msgstr "" "кликните мышью там, где хотите создать первую точку кубического сплайна Безье" -#: graphicswin.cpp:1288 +#: graphicswin.cpp:1310 msgid "click center of circle" msgstr "кликните мышью там, где будет находиться центр окружности" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1311 msgid "click origin of workplane" msgstr "" "кликните мышью там, где будет находиться точка, через которую будет " "построена рабочая плоскость" -#: graphicswin.cpp:1290 +#: graphicswin.cpp:1312 msgid "click one corner of rectangle" msgstr "кликните мышью там, где будет находиться один из углов прямоугольника" -#: graphicswin.cpp:1291 +#: graphicswin.cpp:1313 msgid "click top left of text" msgstr "кликните мышью там, где хотите создать текст" -#: graphicswin.cpp:1297 +#: graphicswin.cpp:1319 msgid "click top left of image" msgstr "" "кликните мышью там, где будет расположен левый верхний угол изображения" -#: graphicswin.cpp:1309 +#: graphicswin.cpp:1345 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1256,26 +1284,18 @@ msgctxt "group-name" msgid "sketch-in-3d" msgstr "эскиз-в-3d" -#: group.cpp:142 +#: group.cpp:150 msgid "" "Bad selection for new sketch in workplane. This group can be created with:\n" "\n" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, parallel to the " "lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" msgstr "" -"Неправильное выделение для создания эскиза.\n" -"Группа может быть создана, используя в качестве выделения следующие " -"примитивы:\n" -"\n" -" * точку (рабочая плоскость, ориентированная к ближайшему виду, " -"проходящая через точку)\n" -" * точку и два отрезка (рабочая плоскость, проходящая через точку и " -"параллельная отрезкам)\n" -" * рабочую плоскость (копия рабочей плоскости)\n" -#: group.cpp:154 +#: group.cpp:166 msgid "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " "will be extruded normal to the workplane." @@ -1283,18 +1303,18 @@ msgstr "" "Выберите рабочую плоскость (Эскиз -> В Рабочей Плоскости) перед созданием " "группы выдавливания. Эскиз будет выдавлен по нормали к рабочей плоскости." -#: group.cpp:163 +#: group.cpp:175 msgctxt "group-name" msgid "extrude" msgstr "тело-выдавливания" -#: group.cpp:168 +#: group.cpp:180 msgid "Lathe operation can only be applied to planar sketches." msgstr "" "Операция создания тела вращения может быть применена только к плоским " "эскизам." -#: group.cpp:179 +#: group.cpp:191 msgid "" "Bad selection for new lathe group. This group can be created with:\n" "\n" @@ -1311,18 +1331,18 @@ msgstr "" " * отрезок (тело вращения вокруг оси, проходящей через отрезок)\n" "\n" -#: group.cpp:189 +#: group.cpp:201 msgctxt "group-name" msgid "lathe" msgstr "тело-вращения" -#: group.cpp:194 +#: group.cpp:206 msgid "Revolve operation can only be applied to planar sketches." msgstr "" "Операция создания тела вращения может быть применена только к плоским " "эскизам." -#: group.cpp:205 +#: group.cpp:217 msgid "" "Bad selection for new revolve group. This group can be created with:\n" "\n" @@ -1339,18 +1359,18 @@ msgstr "" " * отрезок (тело вращения вокруг оси, проходящей через отрезок)\n" "\n" -#: group.cpp:217 +#: group.cpp:229 msgctxt "group-name" msgid "revolve" msgstr "тело-вращения" -#: group.cpp:222 +#: group.cpp:234 msgid "Helix operation can only be applied to planar sketches." msgstr "" "Операция создания винтового тела может быть применена только к плоским " "эскизам." -#: group.cpp:233 +#: group.cpp:245 msgid "" "Bad selection for new helix group. This group can be created with:\n" "\n" @@ -1367,12 +1387,12 @@ msgstr "" "точку)\n" " * отрезок (вращение вокруг отрезка)\n" -#: group.cpp:245 +#: group.cpp:257 msgctxt "group-name" msgid "helix" msgstr "тело-винтовое" -#: group.cpp:258 +#: group.cpp:270 msgid "" "Bad selection for new rotation. This group can be created with:\n" "\n" @@ -1391,43 +1411,43 @@ msgstr "" "проходящей через точку и параллельной отрезку / нормали)\n" "\n" -#: group.cpp:271 +#: group.cpp:283 msgctxt "group-name" msgid "rotate" msgstr "круговой-массив" -#: group.cpp:282 +#: group.cpp:294 msgctxt "group-name" msgid "translate" msgstr "линейный-массив" -#: group.cpp:400 +#: group.cpp:416 msgid "(unnamed)" msgstr "(без имени)" -#: groupmesh.cpp:709 +#: groupmesh.cpp:707 msgid "not closed contour, or not all same style!" msgstr "незамкнутый контур или несовпадение стилей!" -#: groupmesh.cpp:722 +#: groupmesh.cpp:720 msgid "points not all coplanar!" msgstr "не все точки лежат в одной плоскости!" -#: groupmesh.cpp:724 +#: groupmesh.cpp:722 msgid "contour is self-intersecting!" msgstr "контур имеет самопересечения!" -#: groupmesh.cpp:726 +#: groupmesh.cpp:724 msgid "zero-length edge!" msgstr "вырожденный отрезок!" -#: modify.cpp:254 +#: modify.cpp:252 msgid "Must be sketching in workplane to create tangent arc." msgstr "" "Скругления эскиза можно создавать только когда рабочая плоскость " "активирована." -#: modify.cpp:301 +#: modify.cpp:299 msgid "" "To create a tangent arc, select a point where two non-construction lines or " "circles in this group and workplane join." @@ -1435,7 +1455,7 @@ msgstr "" "Чтобы создать скругление эскиза, выберите точку, где соединяются два " "примитива, не принадлежащих к вспомогательной геометрии." -#: modify.cpp:388 +#: modify.cpp:386 msgid "" "Couldn't round this corner. Try a smaller radius, or try creating the " "desired geometry by hand with tangency constraints." @@ -1443,18 +1463,18 @@ msgstr "" "Невозможно скруглить угол. Попробуйте радиус поменьше или создайте требуемую " "геометрию с помощью Ограничения -> Параллельность / Касательность." -#: modify.cpp:597 +#: modify.cpp:595 msgid "Couldn't split this entity; lines, circles, or cubics only." msgstr "" "Невозможно разделить такие примитивы. Выберите линии, окружности или " "кубические сплайны." -#: modify.cpp:624 +#: modify.cpp:622 msgid "Must be sketching in workplane to split." msgstr "" "Пересечение примитивов работает только когда рабочая плоскость активна." -#: modify.cpp:631 +#: modify.cpp:629 msgid "" "Select two entities that intersect each other (e.g. two lines/circles/arcs " "or a line/circle/arc and a point)." @@ -1462,349 +1482,355 @@ msgstr "" "Выберите два пересекающихся примитива (два отрезка/окружности/дуги или " "отрезок/окружность/дугу и точку)" -#: modify.cpp:736 +#: modify.cpp:734 msgid "Can't split; no intersection found." msgstr "Невозможно разделить пересекаемые примитивы: пересечений нет." -#: mouse.cpp:559 +#: mouse.cpp:557 msgid "Assign to Style" msgstr "Применить Стиль" -#: mouse.cpp:575 +#: mouse.cpp:573 msgid "No Style" msgstr "Стиль по Умолчанию" -#: mouse.cpp:578 +#: mouse.cpp:576 msgid "Newly Created Custom Style..." msgstr "Создать Новый Стиль..." -#: mouse.cpp:585 +#: mouse.cpp:583 msgid "Group Info" msgstr "Настройки Группы" -#: mouse.cpp:605 +#: mouse.cpp:603 msgid "Style Info" msgstr "Настройки Стиля" -#: mouse.cpp:625 +#: mouse.cpp:623 msgid "Select Edge Chain" msgstr "Выделить Последовательность Примитивов" -#: mouse.cpp:631 +#: mouse.cpp:629 msgid "Toggle Reference Dimension" msgstr "Переключить Режим Размера Для Справок" -#: mouse.cpp:637 +#: mouse.cpp:635 msgid "Other Supplementary Angle" msgstr "Переключить Смежный Угол" -#: mouse.cpp:642 +#: mouse.cpp:640 msgid "Snap to Grid" msgstr "Привязать к Сетке" -#: mouse.cpp:651 +#: mouse.cpp:649 msgid "Remove Spline Point" msgstr "Удалить Точку Сплайна" -#: mouse.cpp:686 +#: mouse.cpp:684 msgid "Add Spline Point" msgstr "Добавить Точку Сплайна" -#: mouse.cpp:690 +#: mouse.cpp:688 msgid "Cannot add spline point: maximum number of points reached." msgstr "" "Невозможно добавить точку сплайна: достигнуто ограничение максимального " "количества точек для сплайна." -#: mouse.cpp:715 +#: mouse.cpp:713 msgid "Toggle Construction" msgstr "Переключить Режим 'Дополнительные Построения'." -#: mouse.cpp:730 +#: mouse.cpp:729 msgid "Delete Point-Coincident Constraint" msgstr "Удалить Ограничение Совпадения Точек" -#: mouse.cpp:749 +#: mouse.cpp:747 msgid "Cut" msgstr "Вырезать" -#: mouse.cpp:751 +#: mouse.cpp:749 msgid "Copy" msgstr "Копировать" -#: mouse.cpp:755 +#: mouse.cpp:753 msgid "Select All" msgstr "Выделить Все" -#: mouse.cpp:760 +#: mouse.cpp:758 msgid "Paste" msgstr "Вставить" -#: mouse.cpp:762 +#: mouse.cpp:760 msgid "Paste Transformed..." msgstr "Вставить с Трансформацией..." -#: mouse.cpp:767 +#: mouse.cpp:765 msgid "Delete" msgstr "Удалить" -#: mouse.cpp:770 +#: mouse.cpp:768 msgid "Unselect All" msgstr "Сбросить Выделение" -#: mouse.cpp:777 +#: mouse.cpp:775 msgid "Unselect Hovered" msgstr "Снять Выделение с Выбранного" -#: mouse.cpp:786 +#: mouse.cpp:784 msgid "Zoom to Fit" msgstr "Показать Все" -#: mouse.cpp:988 mouse.cpp:1275 +#: mouse.cpp:986 mouse.cpp:1274 msgid "click next point of line, or press Esc" msgstr "кликните мышью там, где хотите расположить следующую точку" -#: mouse.cpp:994 +#: mouse.cpp:992 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" "Невозможно начертить прямоугольник, когда рабочая плоскость не активна." -#: mouse.cpp:1028 +#: mouse.cpp:1026 msgid "click to place other corner of rectangle" msgstr "кликните мышью там, где хотите расположить другой угол прямоугольника" -#: mouse.cpp:1048 +#: mouse.cpp:1047 msgid "click to set radius" msgstr "кликните, чтобы задать радиус" -#: mouse.cpp:1053 +#: mouse.cpp:1052 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "Невозможно создать дугу, когда нет активной рабочей плоскости." -#: mouse.cpp:1072 +#: mouse.cpp:1071 msgid "click to place point" msgstr "кликните мышью там, где хотите создать точку" -#: mouse.cpp:1088 +#: mouse.cpp:1087 msgid "click next point of cubic, or press Esc" msgstr "" "кликните мышью там, где хотите создать следующую точку сплайна или нажмите " "Esc для завершения операции." -#: mouse.cpp:1093 +#: mouse.cpp:1092 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" "Рабочая плоскость уже активна. Перейдите в режим 3d перед созданием новой " "рабочей плоскости." -#: mouse.cpp:1109 +#: mouse.cpp:1108 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "Невозможно создать текст, когда нет активной рабочей плоскости." -#: mouse.cpp:1126 +#: mouse.cpp:1125 msgid "click to place bottom right of text" msgstr "кликните, чтобы расположить правый нижний угол текста" -#: mouse.cpp:1132 +#: mouse.cpp:1131 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "Невозможно создать изображение. Активируйте рабочую плоскость." -#: mouse.cpp:1159 -msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -msgstr "КОММЕНТАРИЙ -- ДВОЙНОЙ ЩЕЛЧОК ДЛЯ РЕДАКТИРОВАНИЯ" - -#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552 msgctxt "file-type" msgid "SolveSpace models" msgstr "проекты SolveSpace" -#: platform/gui.cpp:90 +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "" + +#: platform/gui.cpp:91 msgctxt "file-type" msgid "IDF circuit board" msgstr "IDF печатная плата" -#: platform/gui.cpp:94 +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "" + +#: platform/gui.cpp:96 msgctxt "file-type" msgid "PNG image" msgstr "PNG изображение" -#: platform/gui.cpp:98 +#: platform/gui.cpp:100 msgctxt "file-type" msgid "STL mesh" msgstr "STL полигональная сетка" -#: platform/gui.cpp:99 +#: platform/gui.cpp:101 msgctxt "file-type" msgid "Wavefront OBJ mesh" msgstr "Wavefront OBJ полигональная сетка" -#: platform/gui.cpp:100 +#: platform/gui.cpp:102 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" msgstr "Three.js-совместимая полигональная сетка с просмторщиком" -#: platform/gui.cpp:101 +#: platform/gui.cpp:103 msgctxt "file-type" msgid "Three.js-compatible mesh, mesh only" msgstr "Three.js-совместимая полигональная сетка" -#: platform/gui.cpp:102 +#: platform/gui.cpp:104 msgctxt "file-type" msgid "VRML text file" msgstr "VRML файл" -#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 msgctxt "file-type" msgid "STEP file" msgstr "STEP файл" -#: platform/gui.cpp:110 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "PDF file" msgstr "PDF документ" -#: platform/gui.cpp:111 +#: platform/gui.cpp:113 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "Encapsulated PostScript" -#: platform/gui.cpp:112 +#: platform/gui.cpp:114 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "SVG изображение" -#: platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:116 platform/gui.cpp:123 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "DXF файл (AutoCAD 2007)" -#: platform/gui.cpp:115 +#: platform/gui.cpp:117 msgctxt "file-type" msgid "HPGL file" msgstr "HPGL файл" -#: platform/gui.cpp:116 +#: platform/gui.cpp:118 msgctxt "file-type" msgid "G Code" msgstr "G Code" -#: platform/gui.cpp:125 +#: platform/gui.cpp:127 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "AutoCAD DXF и DWG файлы" -#: platform/gui.cpp:129 +#: platform/gui.cpp:131 msgctxt "file-type" msgid "Comma-separated values" msgstr "CSV файлы (значения, разделенные запятой)" -#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641 msgid "untitled" msgstr "без имени" -#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 -#: platform/guiwin.cpp:1582 +#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445 +#: platform/guiwin.cpp:1639 msgctxt "title" msgid "Save File" msgstr "Сохранить Файл" -#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 -#: platform/guiwin.cpp:1584 +#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428 +#: platform/guiwin.cpp:1645 msgctxt "title" msgid "Open File" msgstr "Открыть Файл" -#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418 msgctxt "button" msgid "_Cancel" msgstr "Отменить" -#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416 msgctxt "button" msgid "_Save" msgstr "Сохранить" -#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417 msgctxt "button" msgid "_Open" msgstr "_Открыть" -#: solvespace.cpp:169 +#: solvespace.cpp:170 msgctxt "title" msgid "Autosave Available" msgstr "Автосохранение Доступно" -#: solvespace.cpp:170 +#: solvespace.cpp:171 msgctxt "dialog" msgid "An autosave file is available for this sketch." msgstr "Автоматически сохраненный файл доступен для данного проекта." -#: solvespace.cpp:171 +#: solvespace.cpp:172 msgctxt "dialog" msgid "Do you want to load the autosave file instead?" msgstr "Хотите загрузить автосохраненный файл вместо исходного?" -#: solvespace.cpp:172 +#: solvespace.cpp:173 msgctxt "button" msgid "&Load autosave" msgstr "&Загрузить Автосохранение" -#: solvespace.cpp:174 +#: solvespace.cpp:175 msgctxt "button" msgid "Do&n't Load" msgstr "&Не Загружать" -#: solvespace.cpp:557 +#: solvespace.cpp:598 msgctxt "title" msgid "Modified File" msgstr "Измененный Файл" -#: solvespace.cpp:559 +#: solvespace.cpp:600 #, c-format msgctxt "dialog" msgid "Do you want to save the changes you made to the sketch “%s”?" msgstr "Сохранить изменения, сделанные в файле “%s”?" -#: solvespace.cpp:562 +#: solvespace.cpp:603 msgctxt "dialog" msgid "Do you want to save the changes you made to the new sketch?" msgstr "Сохранить изменения, сделанные в новом проекте?" -#: solvespace.cpp:565 +#: solvespace.cpp:606 msgctxt "dialog" msgid "Your changes will be lost if you don't save them." msgstr "Изменения будут утеряны, если их не сохранить." -#: solvespace.cpp:566 +#: solvespace.cpp:607 msgctxt "button" msgid "&Save" msgstr "&Сохранить" -#: solvespace.cpp:568 +#: solvespace.cpp:609 msgctxt "button" msgid "Do&n't Save" msgstr "&Не Сохранять" -#: solvespace.cpp:589 +#: solvespace.cpp:630 msgctxt "title" msgid "(new sketch)" msgstr "(новый проект)" -#: solvespace.cpp:596 +#: solvespace.cpp:637 msgctxt "title" msgid "Property Browser" msgstr "Браузер" -#: solvespace.cpp:658 +#: solvespace.cpp:699 msgid "" "Constraints are currently shown, and will be exported in the toolpath. This " "is probably not what you want; hide them by clicking the link at the top of " @@ -1814,7 +1840,7 @@ msgstr "" "это не то, что требуется, если так, необходимо спрятать их, нажав ссылку " "вверху окна Браузера." -#: solvespace.cpp:730 +#: solvespace.cpp:771 #, c-format msgid "" "Can't identify file type from file extension of filename '%s'; try .dxf or ." @@ -1823,21 +1849,21 @@ msgstr "" "Неподдерживаемый тип файла '%s'; Поддерживаются файлы с расширением .dxf и ." "dwg." -#: solvespace.cpp:778 +#: solvespace.cpp:823 msgid "Constraint must have a label, and must not be a reference dimension." msgstr "У ограничения должно быть значение и оно не должно быть справочным." -#: solvespace.cpp:782 +#: solvespace.cpp:827 msgid "Bad selection for step dimension; select a constraint." msgstr "" "Неправильное выделение для операции изменения значения с заданным шагом; " "необходимо выбрать ограничение со значением." -#: solvespace.cpp:806 +#: solvespace.cpp:851 msgid "The assembly does not interfere, good." msgstr "Сборка не содержит пересечения деталей - это хорошо." -#: solvespace.cpp:822 +#: solvespace.cpp:867 #, c-format msgid "" "The volume of the solid model is:\n" @@ -1848,7 +1874,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:831 +#: solvespace.cpp:876 #, c-format msgid "" "\n" @@ -1861,7 +1887,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:836 +#: solvespace.cpp:881 msgid "" "\n" "\n" @@ -1873,7 +1899,7 @@ msgstr "" "Кривые аппроксимированы кусочно-линейными функциями.\n" "Это приводит к ошибке в расчетах, обычно в пределах 1%." -#: solvespace.cpp:851 +#: solvespace.cpp:896 #, c-format msgid "" "The surface area of the selected faces is:\n" @@ -1890,7 +1916,7 @@ msgstr "" "Кривые аппроксимированы кусочно-линейными функциями.\n" "Это приводит к ошибке в расчетах, обычно в пределах 1%%." -#: solvespace.cpp:860 +#: solvespace.cpp:905 msgid "" "This group does not contain a correctly-formed 2d closed area. It is open, " "not coplanar, or self-intersecting." @@ -1898,7 +1924,7 @@ msgstr "" "Эта группа не содержит замкнутых областей. В ней нет замкнутых контуров, " "примитивы не лежат в одной плоскости или самопересекаются." -#: solvespace.cpp:872 +#: solvespace.cpp:917 #, c-format msgid "" "The area of the region sketched in this group is:\n" @@ -1915,7 +1941,7 @@ msgstr "" "Кривые аппроксимированы кусочно-линейными функциями.\n" "Это приводит к ошибке в расчетах, обычно в пределах 1%%." -#: solvespace.cpp:892 +#: solvespace.cpp:937 #, c-format msgid "" "The total length of the selected entities is:\n" @@ -1932,38 +1958,38 @@ msgstr "" "Кривые аппроксимированы кусочно-линейными функциями.\n" "Это приводит к ошибке в расчетах, обычно в пределах 1%%." -#: solvespace.cpp:898 +#: solvespace.cpp:943 msgid "Bad selection for perimeter; select line segments, arcs, and curves." msgstr "" "Неправильное выделение для расчета периметра; необходимо выбирать только " "отрезки, дуги и кривые в качестве исходных данных" -#: solvespace.cpp:914 +#: solvespace.cpp:959 msgid "Bad selection for trace; select a single point." msgstr "Неправильное выделение для трассировки; необходимо выбрать одну точку." -#: solvespace.cpp:941 +#: solvespace.cpp:986 #, c-format msgid "Couldn't write to '%s'" msgstr "Невозможно записать в '%s'" -#: solvespace.cpp:971 +#: solvespace.cpp:1016 msgid "The mesh is self-intersecting (NOT okay, invalid)." msgstr "Полигональная стека содержит самопересечения (это плохо)" -#: solvespace.cpp:972 +#: solvespace.cpp:1017 msgid "The mesh is not self-intersecting (okay, valid)." msgstr "Полигональная стека не содержит самопересечений (это хорошо)" -#: solvespace.cpp:974 +#: solvespace.cpp:1019 msgid "The mesh has naked edges (NOT okay, invalid)." msgstr "Полигональная сетка содержит \"оголенные\" ребра (это плохо)" -#: solvespace.cpp:975 +#: solvespace.cpp:1020 msgid "The mesh is watertight (okay, valid)." msgstr "Полигональная сетка герметична (это хорошо)" -#: solvespace.cpp:978 +#: solvespace.cpp:1023 #, c-format msgid "" "\n" @@ -1974,7 +2000,7 @@ msgstr "" "\n" "Модель содержит %d треугольников, содержащихся в %d поверхностях." -#: solvespace.cpp:982 +#: solvespace.cpp:1027 #, c-format msgid "" "%s\n" @@ -1989,7 +2015,7 @@ msgstr "" "\n" "Нет проблемных ребер - это хорошо.%s" -#: solvespace.cpp:985 +#: solvespace.cpp:1030 #, c-format msgid "" "%s\n" @@ -2004,7 +2030,7 @@ msgstr "" "\n" "%d найдены проблемные ребра - это плохо.%s" -#: solvespace.cpp:998 +#: solvespace.cpp:1043 #, c-format msgid "" "This is SolveSpace version %s.\n" @@ -2035,7 +2061,7 @@ msgstr "" "\n" "© 2008-%d Джонатан Вэстью и другие авторы.\n" -#: style.cpp:166 +#: style.cpp:185 msgid "" "Can't assign style to an entity that's derived from another entity; try " "assigning a style to this entity's parent." @@ -2043,27 +2069,27 @@ msgstr "" "Невозможно применить стиль к примитиву, который произошел от другого " "примитива. Попробуйте применить стиль к исходному примитиву." -#: style.cpp:665 +#: style.cpp:735 msgid "Style name cannot be empty" msgstr "Имя стиля не может быть пустым." -#: textscreens.cpp:741 +#: textscreens.cpp:785 msgid "Can't repeat fewer than 1 time." msgstr "Невозможно сделать повторение меньше, чем 1 раз." -#: textscreens.cpp:745 +#: textscreens.cpp:789 msgid "Can't repeat more than 999 times." msgstr "Невозможно сделать повтор больше, чем 999 раз." -#: textscreens.cpp:770 +#: textscreens.cpp:814 msgid "Group name cannot be empty" msgstr "Имя группы не может быть пустым." -#: textscreens.cpp:813 +#: textscreens.cpp:866 msgid "Opacity must be between zero and one." msgstr "Прозрачность должна быть числом от нуля до единицы." -#: textscreens.cpp:848 +#: textscreens.cpp:901 msgid "Radius cannot be zero or negative." msgstr "Радиус не может быть нулевым или отрицательным." @@ -2218,14 +2244,60 @@ msgctxt "button" msgid "&OK" msgstr "ХОРОШО" -#: view.cpp:78 +#: view.cpp:127 msgid "Scale cannot be zero or negative." msgstr "Масштабный коэффициент не может быть нулевым или отрицательным." -#: view.cpp:90 view.cpp:99 +#: view.cpp:139 view.cpp:148 msgid "Bad format: specify x, y, z" msgstr "Неверный формат: введите данные как x, y, z" +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Неправильное выделение для ограничения 'отношение длин'.\n" +#~ "Ограничение может принимать в качестве выделения следующие примитивы:\n" +#~ "\n" +#~ " * два отрезка\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Неправильное выделение для ограничения 'разница длин'.\n" +#~ "Ограничение может принимать в качестве выделения следующие примитивы:\n" +#~ "\n" +#~ " * два отрезка\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "Отно&шение Длин" + +#~ msgid "Length Diff&erence" +#~ msgstr "Ра&зница Длин" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "Неправильное выделение для создания эскиза.\n" +#~ "Группа может быть создана, используя в качестве выделения следующие " +#~ "примитивы:\n" +#~ "\n" +#~ " * точку (рабочая плоскость, ориентированная к ближайшему виду, " +#~ "проходящая через точку)\n" +#~ " * точку и два отрезка (рабочая плоскость, проходящая через точку и " +#~ "параллельная отрезкам)\n" +#~ " * рабочую плоскость (копия рабочей плоскости)\n" + #~ msgid "Specify between 0 and 8 digits after the decimal." #~ msgstr "Введите число от 0 до 8." diff --git a/res/locales/tr_TR.po b/res/locales/tr_TR.po index 9e46b0dd..de82270f 100644 --- a/res/locales/tr_TR.po +++ b/res/locales/tr_TR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2021-02-01 15:45+0200\n" +"POT-Creation-Date: 2021-09-26 16:25-0400\n" "PO-Revision-Date: 2021-03-09 22:58+0300\n" "Last-Translator: Mustafa Halil GÖRENTAŞ \n" "Language-Team: app4soft\n" @@ -19,7 +19,7 @@ msgstr "" "X-Generator: Poedit 2.4.2\n" "X-Poedit-SourceCharset: UTF-8\n" -#: clipboard.cpp:310 +#: clipboard.cpp:309 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -29,49 +29,49 @@ msgstr "" "\n" "Çizim -> Çalışma Düzleminde menüsü ile bir düzlemi etkinleştirin." -#: clipboard.cpp:327 +#: clipboard.cpp:326 msgid "Clipboard is empty; nothing to paste." msgstr "Pano boş; yapıştırılacak bir şey yok." -#: clipboard.cpp:374 +#: clipboard.cpp:373 msgid "Number of copies to paste must be at least one." msgstr "Yapıştırılacak kopya sayısı en az bir olmalıdır." -#: clipboard.cpp:390 textscreens.cpp:783 +#: clipboard.cpp:389 textscreens.cpp:827 msgid "Scale cannot be zero." msgstr "Ölçek sıfır olamaz." -#: clipboard.cpp:432 +#: clipboard.cpp:431 msgid "Select one point to define origin of rotation." msgstr "Dönüşün başlangıç noktasını tanımlamak için bir nokta seçin." -#: clipboard.cpp:444 +#: clipboard.cpp:443 msgid "Select two points to define translation vector." msgstr "Öteleme vektörünü tanımlamak için iki nokta seçin." -#: clipboard.cpp:454 +#: clipboard.cpp:453 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." msgstr "Dönüşüm özdeştir. Yani tüm kopyalar tam olarak üst üste gelecek." -#: clipboard.cpp:458 +#: clipboard.cpp:457 msgid "Too many items to paste; split this into smaller pastes." msgstr "Yapıştırılamayacak kadar çok öğe; bunu daha küçük yapıştımalara bölün." -#: clipboard.cpp:463 +#: clipboard.cpp:462 msgid "No workplane active." msgstr "Etkin Çalışma Düzlemi yok." -#: confscreen.cpp:418 +#: confscreen.cpp:376 msgid "Bad format: specify coordinates as x, y, z" msgstr "Hatalı biçim: koordinatları x, y, z olarak belirtin" -#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858 msgid "Bad format: specify color as r, g, b" msgstr "Hatalı biçim: rengi r, g, b olarak belirtin" -#: confscreen.cpp:454 +#: confscreen.cpp:412 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." @@ -79,24 +79,24 @@ msgstr "" "Görünüm -> Perspektif Projeksiyonu Kullan'ı etkinleştirene kadar perspektif " "çarpanının hiçbir etkisi olmayacaktır." -#: confscreen.cpp:467 confscreen.cpp:477 +#: confscreen.cpp:430 confscreen.cpp:440 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "Ondalık basamak sonra 0 ile %d arasında basamak belirtin." -#: confscreen.cpp:489 +#: confscreen.cpp:452 msgid "Export scale must not be zero!" msgstr "Dışa aktarma ölçeği sıfır olmamalıdır!" -#: confscreen.cpp:501 +#: confscreen.cpp:464 msgid "Cutter radius offset must not be negative!" msgstr "Kesici yarıçap ofseti negatif olmamalıdır!" -#: confscreen.cpp:555 +#: confscreen.cpp:518 msgid "Bad value: autosave interval should be positive" msgstr "Hatalı değer: otomatik kaydetme süresi pozitif olmalıdır" -#: confscreen.cpp:558 +#: confscreen.cpp:521 msgid "Bad format: specify interval in integral minutes" msgstr "Hatalı biçim: süre aralığını dakika cinsinden belirtin" @@ -167,115 +167,135 @@ msgstr "uzunluk-oranı" #: constraint.cpp:25 msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" msgid "length-difference" msgstr "uzunluk-farkı" -#: constraint.cpp:26 +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "" + +#: constraint.cpp:30 msgctxt "constr-name" msgid "symmetric" msgstr "simetrik" -#: constraint.cpp:27 +#: constraint.cpp:31 msgctxt "constr-name" msgid "symmetric-h" msgstr "simetrik-y" -#: constraint.cpp:28 +#: constraint.cpp:32 msgctxt "constr-name" msgid "symmetric-v" msgstr "simetrik-d" -#: constraint.cpp:29 +#: constraint.cpp:33 msgctxt "constr-name" msgid "symmetric-line" msgstr "simetrik-çizgi" -#: constraint.cpp:30 +#: constraint.cpp:34 msgctxt "constr-name" msgid "at-midpoint" msgstr "orta noktada" -#: constraint.cpp:31 +#: constraint.cpp:35 msgctxt "constr-name" msgid "horizontal" msgstr "yatay" -#: constraint.cpp:32 +#: constraint.cpp:36 msgctxt "constr-name" msgid "vertical" msgstr "dikey" -#: constraint.cpp:33 +#: constraint.cpp:37 msgctxt "constr-name" msgid "diameter" msgstr "çap" -#: constraint.cpp:34 +#: constraint.cpp:38 msgctxt "constr-name" msgid "pt-on-circle" msgstr "nkt-çemberde" -#: constraint.cpp:35 +#: constraint.cpp:39 msgctxt "constr-name" msgid "same-orientation" msgstr "aynı-yön" -#: constraint.cpp:36 +#: constraint.cpp:40 msgctxt "constr-name" msgid "angle" msgstr "açı" -#: constraint.cpp:37 +#: constraint.cpp:41 msgctxt "constr-name" msgid "parallel" msgstr "paralel" -#: constraint.cpp:38 +#: constraint.cpp:42 msgctxt "constr-name" msgid "arc-line-tangent" msgstr "yay-çizgi-teğet" -#: constraint.cpp:39 +#: constraint.cpp:43 msgctxt "constr-name" msgid "cubic-line-tangent" msgstr "kubik-çizgi-teğet" -#: constraint.cpp:40 +#: constraint.cpp:44 msgctxt "constr-name" msgid "curve-curve-tangent" msgstr "eğri-eğri-teğet" -#: constraint.cpp:41 +#: constraint.cpp:45 msgctxt "constr-name" msgid "perpendicular" msgstr "dik" -#: constraint.cpp:42 +#: constraint.cpp:46 msgctxt "constr-name" msgid "eq-radius" msgstr "eş-yarıçap" -#: constraint.cpp:43 +#: constraint.cpp:47 msgctxt "constr-name" msgid "eq-angle" msgstr "eş-açı" -#: constraint.cpp:44 +#: constraint.cpp:48 msgctxt "constr-name" msgid "eq-line-len-arc-len" msgstr "eş-çizgi-uzn-yay-uzn" -#: constraint.cpp:45 +#: constraint.cpp:49 msgctxt "constr-name" msgid "lock-where-dragged" msgstr "sürüklendiği-yerde-kilitli" -#: constraint.cpp:46 +#: constraint.cpp:50 msgctxt "constr-name" msgid "comment" msgstr "yorum" -#: constraint.cpp:140 +#: constraint.cpp:144 msgid "" "The tangent arc and line segment must share an endpoint. Constrain them with " "Constrain -> On Point before constraining tangent." @@ -283,7 +303,7 @@ msgstr "" "Teğet, yay ve çizgi parçası bir uç noktayı paylaşmalıdır. Teğeti " "sınırlandırmadan önce bunları Sınırlandır -> Noktada ile sınırlandırın." -#: constraint.cpp:158 +#: constraint.cpp:163 msgid "" "The tangent cubic and line segment must share an endpoint. Constrain them " "with Constrain -> On Point before constraining tangent." @@ -291,7 +311,7 @@ msgstr "" "Teğet kübik ve çizgi parçası bir uç noktayı paylaşmalıdır. Teğeti " "sınırlandırmadan önce onları Sınırlandır -> Noktada ile sınırlandırın." -#: constraint.cpp:183 +#: constraint.cpp:189 msgid "" "The curves must share an endpoint. Constrain them with Constrain -> On Point " "before constraining tangent." @@ -299,7 +319,7 @@ msgstr "" "Eğriler bir uç noktayı paylaşmalıdır. Teğeti sınırlandırmadan önce onları " "Sınırlandır -> Noktada ile sınırlandırın." -#: constraint.cpp:231 +#: constraint.cpp:238 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -323,7 +343,7 @@ msgstr "" " * bir düzlem yüzeyi ve bir nokta (minimum mesafe)\n" " * bir daire veya yay (çap)\n" -#: constraint.cpp:284 +#: constraint.cpp:291 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -343,7 +363,7 @@ msgstr "" " * bir nokta ve bir daire veya yay (eğri üzerinde nokta)\n" " * bir nokta ve bir düzlem yüzeyi (yüzeyin üzerine gelin)\n" -#: constraint.cpp:346 +#: constraint.cpp:353 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -372,30 +392,26 @@ msgstr "" " * bir çizgi parçası ve bir yay (çizgi parçası uzunluğu yay uzunluğuna " "eşittir)\n" -#: constraint.cpp:385 +#: constraint.cpp:407 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"Uzunluk oranı sınırlandırması için hatalı seçim. Bu sınırlandırma şunlara " -"uygulanabilir:\n" -"\n" -" * iki çizgi parçası\n" -#: constraint.cpp:402 +#: constraint.cpp:441 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"Uzunluk farkı sınırlandırması için hatalı seçim. Bu sınırlandırma şunlara " -"uygulanabilir:\n" -"\n" -" * iki çizgi parçası\n" -#: constraint.cpp:428 +#: constraint.cpp:472 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -409,7 +425,7 @@ msgstr "" " * bir çizgi parçası ve bir çalışma düzlemi (düzlemdeki çizginin orta " "noktası)\n" -#: constraint.cpp:486 +#: constraint.cpp:530 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -430,7 +446,7 @@ msgstr "" " * çalışma düzlemi ve iki nokta veya bir çizgi parçası (çalışma düzlemi " "etrafında simetrik)\n" -#: constraint.cpp:500 +#: constraint.cpp:545 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." @@ -438,7 +454,7 @@ msgstr "" "Açık bir simetri düzlemi olmadan simetriyi sınırlandırırken bir çalışma " "düzlemi etkin olmalıdır." -#: constraint.cpp:530 +#: constraint.cpp:579 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." @@ -446,7 +462,7 @@ msgstr "" "Yatay veya dikey bir sınırlandırma uygulamadan önce bir çalışma düzlemini " "(Çizim -> Çalışma Düzleminde menüsü) etkinleştirin." -#: constraint.cpp:543 +#: constraint.cpp:592 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -460,7 +476,7 @@ msgstr "" " * iki nokta\n" " * bir çizgi parçası\n" -#: constraint.cpp:564 +#: constraint.cpp:613 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -472,15 +488,15 @@ msgstr "" "\n" " * iki normal\n" -#: constraint.cpp:614 +#: constraint.cpp:663 msgid "Must select an angle constraint." msgstr "Bir açı sınırlaması seçilmelidir." -#: constraint.cpp:627 +#: constraint.cpp:676 msgid "Must select a constraint with associated label." msgstr "İlişkili etikete sahip bir sınırlama seçilmelidir." -#: constraint.cpp:638 +#: constraint.cpp:687 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -494,11 +510,11 @@ msgstr "" " * bir çizgi parçası ve normal\n" " * iki normal\n" -#: constraint.cpp:701 +#: constraint.cpp:754 msgid "Curve-curve tangency must apply in workplane." msgstr "Eğri-eğri teğetliği çalışma düzlemine uygulanmalıdır." -#: constraint.cpp:711 +#: constraint.cpp:766 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -517,7 +533,7 @@ msgstr "" " * bir uç noktayı paylaşan(teğet) iki çizgi parçası, yay veya " "bezier'ler\n" -#: constraint.cpp:729 +#: constraint.cpp:784 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -531,7 +547,7 @@ msgstr "" " * bir çizgi parçası ve normal\n" " * iki normal\n" -#: constraint.cpp:744 +#: constraint.cpp:799 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -543,7 +559,11 @@ msgstr "" "\n" "* bir nokta\n" -#: constraint.cpp:755 +#: constraint.cpp:813 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "YENİ YORUM - DÜZENLEMEK İÇİN ÇİFT TIKLAYIN" + +#: constraint.cpp:818 msgid "click center of comment text" msgstr "yorum metninin merkezine tıklayın" @@ -573,24 +593,24 @@ msgstr "" " * bir nokta ve iki çizgi parçası (nokta boyunca düzlem ve çizgilere " "paralel)\n" -#: export.cpp:822 +#: export.cpp:818 msgid "Active group mesh is empty; nothing to export." msgstr "Etkin Mesh grubu boş; dışa aktarılacak bir şey yok." -#: exportvector.cpp:337 +#: exportvector.cpp:336 msgid "freehand lines were replaced with continuous lines" msgstr "serbest çizgiler, sürekli çizgilerle değiştirildi" -#: exportvector.cpp:339 +#: exportvector.cpp:338 msgid "zigzag lines were replaced with continuous lines" msgstr "zikzak çizgiler sürekli çizgilerle değiştirildi" -#: exportvector.cpp:593 +#: exportvector.cpp:592 msgid "" "Some aspects of the drawing have no DXF equivalent and were not exported:\n" msgstr "Çizimin bazı yönlerinin DXF eşdeğeri yoktur ve dışa aktarılmamıştır:\n" -#: exportvector.cpp:839 +#: exportvector.cpp:838 msgid "" "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." msgstr "" @@ -607,11 +627,11 @@ msgctxt "group-name" msgid "#references" msgstr "#referanslar" -#: file.cpp:552 +#: file.cpp:550 msgid "The file is empty. It may be corrupt." msgstr "Dosya boş. Bozuk olabilir." -#: file.cpp:557 +#: file.cpp:555 msgid "" "Unrecognized data in file. This file may be corrupt, or from a newer version " "of the program." @@ -653,7 +673,7 @@ msgctxt "button" msgid "&No" msgstr "&Hayır" -#: file.cpp:877 solvespace.cpp:569 +#: file.cpp:877 solvespace.cpp:610 msgctxt "button" msgid "&Cancel" msgstr "&İptal" @@ -827,295 +847,303 @@ msgid "Use &Perspective Projection" msgstr "&Perspektif Projeksiyonu Kullanın" #: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "" + +#: graphicswin.cpp:98 msgid "Dimension &Units" msgstr "Ölçü &Birimleri" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in &Millimeters" msgstr "&Milimetre cinsinden ölçü" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in M&eters" msgstr "M&etre cinsinden ölçü" -#: graphicswin.cpp:100 +#: graphicswin.cpp:101 msgid "Dimensions in &Inches" msgstr "&İnç cinsinden ölçü" #: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "" + +#: graphicswin.cpp:104 msgid "Show &Toolbar" msgstr "&Araç Çubuğunu Göster" -#: graphicswin.cpp:103 +#: graphicswin.cpp:105 msgid "Show Property Bro&wser" msgstr "&Özellik Tarayıcısını Göster" -#: graphicswin.cpp:105 +#: graphicswin.cpp:107 msgid "&Full Screen" msgstr "&Tam Ekran" -#: graphicswin.cpp:107 +#: graphicswin.cpp:109 msgid "&New Group" msgstr "Yeni &Grup" -#: graphicswin.cpp:108 +#: graphicswin.cpp:110 msgid "Sketch In &3d" msgstr "&3d'de Çizim Yap" -#: graphicswin.cpp:109 +#: graphicswin.cpp:111 msgid "Sketch In New &Workplane" msgstr "&Yeni Çalışma Düzleminde Çizim Yap" -#: graphicswin.cpp:111 +#: graphicswin.cpp:113 msgid "Step &Translating" msgstr "Adım &Ötele" -#: graphicswin.cpp:112 +#: graphicswin.cpp:114 msgid "Step &Rotating" msgstr "Adım &Döndür" -#: graphicswin.cpp:114 +#: graphicswin.cpp:116 msgid "E&xtrude" msgstr "&Katıla" -#: graphicswin.cpp:115 +#: graphicswin.cpp:117 msgid "&Helix" msgstr "&Helis" -#: graphicswin.cpp:116 +#: graphicswin.cpp:118 msgid "&Lathe" msgstr "&Çark" -#: graphicswin.cpp:117 +#: graphicswin.cpp:119 msgid "Re&volve" msgstr "Dö&ndür" -#: graphicswin.cpp:119 +#: graphicswin.cpp:121 msgid "Link / Assemble..." msgstr "Bağla / Montajla..." -#: graphicswin.cpp:120 +#: graphicswin.cpp:122 msgid "Link Recent" msgstr "Son Erişilenden Bağla" -#: graphicswin.cpp:122 +#: graphicswin.cpp:124 msgid "&Sketch" msgstr "&Çizim" -#: graphicswin.cpp:123 +#: graphicswin.cpp:125 msgid "In &Workplane" msgstr "Ç&alışma Düzleminde" -#: graphicswin.cpp:124 +#: graphicswin.cpp:126 msgid "Anywhere In &3d" msgstr "&3d'de Herhangi Bir Yerde" -#: graphicswin.cpp:126 +#: graphicswin.cpp:128 msgid "Datum &Point" msgstr "Referasn &Noktası" -#: graphicswin.cpp:127 +#: graphicswin.cpp:129 msgid "&Workplane" msgstr "Ça&lışma Düzlemi" -#: graphicswin.cpp:129 +#: graphicswin.cpp:131 msgid "Line &Segment" msgstr "Çizgi &Parçası" -#: graphicswin.cpp:130 +#: graphicswin.cpp:132 msgid "C&onstruction Line Segment" msgstr "&Yapı Çizgisi Parçası" -#: graphicswin.cpp:131 +#: graphicswin.cpp:133 msgid "&Rectangle" msgstr "&Dikdörtgen" -#: graphicswin.cpp:132 +#: graphicswin.cpp:134 msgid "&Circle" msgstr "&Çember" -#: graphicswin.cpp:133 +#: graphicswin.cpp:135 msgid "&Arc of a Circle" msgstr "Çember &Yayı" -#: graphicswin.cpp:134 +#: graphicswin.cpp:136 msgid "&Bezier Cubic Spline" msgstr "Bezier Kübik &Eğri" -#: graphicswin.cpp:136 +#: graphicswin.cpp:138 msgid "&Text in TrueType Font" msgstr "TrueType Yazı Tipinde &Metin" -#: graphicswin.cpp:137 +#: graphicswin.cpp:139 msgid "&Image" msgstr "&Resim" -#: graphicswin.cpp:139 +#: graphicswin.cpp:141 msgid "To&ggle Construction" msgstr "Yap&ıyı Değiştir" -#: graphicswin.cpp:140 +#: graphicswin.cpp:142 msgid "Tangent &Arc at Point" msgstr "Noktada &Teğet Yay" -#: graphicswin.cpp:141 +#: graphicswin.cpp:143 msgid "Split Curves at &Intersection" msgstr "Kesişim yerinde Eğrileri &Böl" -#: graphicswin.cpp:143 +#: graphicswin.cpp:145 msgid "&Constrain" msgstr "&Sınırlandır" -#: graphicswin.cpp:144 +#: graphicswin.cpp:146 msgid "&Distance / Diameter" msgstr "&Mesafe / Çap" -#: graphicswin.cpp:145 +#: graphicswin.cpp:147 msgid "Re&ference Dimension" msgstr "&Referans Ölçü" -#: graphicswin.cpp:146 +#: graphicswin.cpp:148 msgid "A&ngle" msgstr "&Açı" -#: graphicswin.cpp:147 +#: graphicswin.cpp:149 msgid "Reference An&gle" msgstr "Referans A&çı" -#: graphicswin.cpp:148 +#: graphicswin.cpp:150 msgid "Other S&upplementary Angle" msgstr "Diğer &Bütünler Açı" -#: graphicswin.cpp:149 +#: graphicswin.cpp:151 msgid "Toggle R&eference Dim" msgstr "Ölçüyü Re&ferans Yap / Yapma" -#: graphicswin.cpp:151 +#: graphicswin.cpp:153 msgid "&Horizontal" msgstr "&Yatay" -#: graphicswin.cpp:152 +#: graphicswin.cpp:154 msgid "&Vertical" msgstr "&Dikey" -#: graphicswin.cpp:154 +#: graphicswin.cpp:156 msgid "&On Point / Curve / Plane" msgstr "&Noktada / Eğride / Düzlemde" -#: graphicswin.cpp:155 +#: graphicswin.cpp:157 msgid "E&qual Length / Radius / Angle" msgstr "&Eşit Uzunluk / Yarıçap / Açı" -#: graphicswin.cpp:156 -msgid "Length Ra&tio" -msgstr "&Uzunluk Oranı" - -#: graphicswin.cpp:157 -msgid "Length Diff&erence" -msgstr "U&zunluk Farkı" - #: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "" + +#: graphicswin.cpp:160 msgid "At &Midpoint" msgstr "&Orta Noktada" -#: graphicswin.cpp:159 +#: graphicswin.cpp:161 msgid "S&ymmetric" msgstr "&Simetrik" -#: graphicswin.cpp:160 +#: graphicswin.cpp:162 msgid "Para&llel / Tangent" msgstr "&Paralel / Teğet" -#: graphicswin.cpp:161 +#: graphicswin.cpp:163 msgid "&Perpendicular" msgstr "D&ik" -#: graphicswin.cpp:162 +#: graphicswin.cpp:164 msgid "Same Orient&ation" msgstr "Aynı &Yön" -#: graphicswin.cpp:163 +#: graphicswin.cpp:165 msgid "Lock Point Where &Dragged" msgstr "Sürüklendiği Yerde Noktayı &Kilitle" -#: graphicswin.cpp:165 +#: graphicswin.cpp:167 msgid "Comment" msgstr "Y&orum" -#: graphicswin.cpp:167 +#: graphicswin.cpp:169 msgid "&Analyze" msgstr "&Analiz Et" -#: graphicswin.cpp:168 +#: graphicswin.cpp:170 msgid "Measure &Volume" msgstr "&Hacmi Ölçün" -#: graphicswin.cpp:169 +#: graphicswin.cpp:171 msgid "Measure A&rea" msgstr "&Alanı Ölçün" -#: graphicswin.cpp:170 +#: graphicswin.cpp:172 msgid "Measure &Perimeter" msgstr "&Çevre Uzunluğunu Ölçün" -#: graphicswin.cpp:171 +#: graphicswin.cpp:173 msgid "Show &Interfering Parts" msgstr "&Engelleyen Parçaları Göster" -#: graphicswin.cpp:172 +#: graphicswin.cpp:174 msgid "Show &Naked Edges" msgstr "A&çık Kenarları Göster" -#: graphicswin.cpp:173 +#: graphicswin.cpp:175 msgid "Show &Center of Mass" msgstr "&Kütle Merkezini Göster" -#: graphicswin.cpp:175 +#: graphicswin.cpp:177 msgid "Show &Underconstrained Points" msgstr "&Sınırlanmamış Noktaları Göster" -#: graphicswin.cpp:177 +#: graphicswin.cpp:179 msgid "&Trace Point" msgstr "&Noktayı İzle" -#: graphicswin.cpp:178 +#: graphicswin.cpp:180 msgid "&Stop Tracing..." msgstr "&İzlemeyi &Durdur..." -#: graphicswin.cpp:179 +#: graphicswin.cpp:181 msgid "Step &Dimension..." msgstr "Adım &Ölçüsü..." -#: graphicswin.cpp:181 +#: graphicswin.cpp:183 msgid "&Help" msgstr "&Yardım" -#: graphicswin.cpp:182 +#: graphicswin.cpp:184 msgid "&Language" msgstr "&Dil" -#: graphicswin.cpp:183 +#: graphicswin.cpp:185 msgid "&Website / Manual" msgstr "&Web sitesi / Kılavuz" -#: graphicswin.cpp:185 +#: graphicswin.cpp:187 msgid "&About" msgstr "&Hakkında" -#: graphicswin.cpp:355 +#: graphicswin.cpp:361 msgid "(no recent files)" msgstr "(yeni dosyalar yok)" -#: graphicswin.cpp:363 +#: graphicswin.cpp:369 #, c-format msgid "File '%s' does not exist." msgstr "'%s' dosyası mevcut değil." -#: graphicswin.cpp:725 +#: graphicswin.cpp:736 msgid "No workplane is active, so the grid will not appear." msgstr "Etkin çalışma düzlemi yok, bu nedenle ızgara görünmeyecektir." -#: graphicswin.cpp:740 +#: graphicswin.cpp:751 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1129,17 +1157,17 @@ msgstr "" "Perspektif bir projeksiyon için, konfigürasyon ekranındaki perspektif " "çarpanını değiştirin. 0,3 civarında bir değer tipiktir." -#: graphicswin.cpp:819 +#: graphicswin.cpp:836 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" "Bir nokta seçin; bu nokta ekrandaki görüntünün merkezi haline gelecektir." -#: graphicswin.cpp:1114 +#: graphicswin.cpp:1136 msgid "No additional entities share endpoints with the selected entities." msgstr "Hiçbir ek öğe, seçili öğeler ile uç noktaları paylaşmaz." -#: graphicswin.cpp:1132 +#: graphicswin.cpp:1154 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." @@ -1147,7 +1175,7 @@ msgstr "" "Bu komutu kullanmak için, bağlantılı bir parçadan bir nokta veya başka bir " "öğe seçin veya bir bağlantı grubunu etkin grup haline getirin." -#: graphicswin.cpp:1155 +#: graphicswin.cpp:1177 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." @@ -1155,7 +1183,7 @@ msgstr "" "Etkin çalışma düzlemi yok. Tutturma ızgarasının düzlemini tanımlamak için " "bir çalışma düzlemini (Çizim -> Çalışma Düzleminde menüsü ile) etkinleştirin." -#: graphicswin.cpp:1162 +#: graphicswin.cpp:1184 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." @@ -1164,13 +1192,13 @@ msgstr "" "sınırlamaları bir etiketle seçin. Bir çizgiyi tutturmak için uç noktalarını " "seçin." -#: graphicswin.cpp:1247 +#: graphicswin.cpp:1269 msgid "No workplane selected. Activating default workplane for this group." msgstr "" "Çalışma düzlemi seçilmedi. Bu grup için varsayılan çalışma düzlemi " "etkinleştiriliyor." -#: graphicswin.cpp:1250 +#: graphicswin.cpp:1272 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" @@ -1180,7 +1208,7 @@ msgstr "" "düzlemi yoktur. Bir çalışma düzlemi seçmeyi veya yeni çalışma düzleminde " "çizim grubunu etkinleştirmeyi deneyin." -#: graphicswin.cpp:1271 +#: graphicswin.cpp:1293 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." @@ -1188,47 +1216,47 @@ msgstr "" "Noktada teğet yay oluşturmak için hatalı seçim. Tek bir nokta seçin veya yay " "parametrelerini ayarlamak için hiçbir şey seçmeyin." -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1304 msgid "click point on arc (draws anti-clockwise)" msgstr "yayın ilk noktası için tıklayın (saat yönünün tersine çizilir)" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1305 msgid "click to place datum point" msgstr "referans noktasını yerleştirmek için tıklayın" -#: graphicswin.cpp:1284 +#: graphicswin.cpp:1306 msgid "click first point of line segment" msgstr "çizgi parçasının ilk noktası için tıklayın" -#: graphicswin.cpp:1286 +#: graphicswin.cpp:1308 msgid "click first point of construction line segment" msgstr "yapı çizgisinin ilk noktası için tıklayın" -#: graphicswin.cpp:1287 +#: graphicswin.cpp:1309 msgid "click first point of cubic segment" msgstr "kübik segmentin ilk noktası için tıklayın" -#: graphicswin.cpp:1288 +#: graphicswin.cpp:1310 msgid "click center of circle" msgstr "çemberin merkezi için tıklayın" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1311 msgid "click origin of workplane" msgstr "çalışma düzleminin merkezi için tıklayın" -#: graphicswin.cpp:1290 +#: graphicswin.cpp:1312 msgid "click one corner of rectangle" msgstr "dikdörtgenin bir köşesi için tıklayın" -#: graphicswin.cpp:1291 +#: graphicswin.cpp:1313 msgid "click top left of text" msgstr "metnin sol üst köşesi için tıklayın" -#: graphicswin.cpp:1297 +#: graphicswin.cpp:1319 msgid "click top left of image" msgstr "resmin sol üst köşesi için tıklayın" -#: graphicswin.cpp:1309 +#: graphicswin.cpp:1345 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1241,23 +1269,18 @@ msgctxt "group-name" msgid "sketch-in-3d" msgstr "3d-içinde-çizim" -#: group.cpp:142 +#: group.cpp:150 msgid "" "Bad selection for new sketch in workplane. This group can be created with:\n" "\n" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, parallel to the " "lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" msgstr "" -"Çalışma düzleminde yeni taslak çizmek için hatalı seçim. Bu grup şunlarla " -"oluşturulabilir:\n" -"\n" -" * bir nokta (nokta boyunca, eksenleri koordine etmek için ortogonal)\n" -" * bir nokta ve iki çizgi parçası (noktadan, çizgilere paralel)\n" -" * bir çalışma düzlemi (çalışma düzleminin kopyası)\n" -#: group.cpp:154 +#: group.cpp:166 msgid "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " "will be extruded normal to the workplane." @@ -1266,16 +1289,16 @@ msgstr "" "Çalışma Düzleminde menüsü). Çizim, çalışma düzlemine dik olarak " "katılanacaktır." -#: group.cpp:163 +#: group.cpp:175 msgctxt "group-name" msgid "extrude" msgstr "katıla" -#: group.cpp:168 +#: group.cpp:180 msgid "Lathe operation can only be applied to planar sketches." msgstr "Çark işlemi yalnızca düzlemsel çizimlere uygulanabilir." -#: group.cpp:179 +#: group.cpp:191 msgid "" "Bad selection for new lathe group. This group can be created with:\n" "\n" @@ -1289,16 +1312,16 @@ msgstr "" "bir eksen etrafında, nokta boyunca döndürülür )\n" " * bir çizgi parçası (çizgi parçası etrafında döndürülür)\n" -#: group.cpp:189 +#: group.cpp:201 msgctxt "group-name" msgid "lathe" msgstr "çark" -#: group.cpp:194 +#: group.cpp:206 msgid "Revolve operation can only be applied to planar sketches." msgstr "Döndürme işlemi yalnızca düzlemsel çizimlere uygulanabilir." -#: group.cpp:205 +#: group.cpp:217 msgid "" "Bad selection for new revolve group. This group can be created with:\n" "\n" @@ -1312,16 +1335,16 @@ msgstr "" "noktadan geçen bir eksen etrafında döndürülür)\n" " * bir çizgi parçası (çizgi parçası etrafında döndürülür)\n" -#: group.cpp:217 +#: group.cpp:229 msgctxt "group-name" msgid "revolve" msgstr "döndür" -#: group.cpp:222 +#: group.cpp:234 msgid "Helix operation can only be applied to planar sketches." msgstr "Helis işlemi yalnızca düzlemsel çizimlere uygulanabilir." -#: group.cpp:233 +#: group.cpp:245 msgid "" "Bad selection for new helix group. This group can be created with:\n" "\n" @@ -1335,12 +1358,12 @@ msgstr "" "noktadan geçen bir eksen etrafında döndürülür)\n" " * bir çizgi parçası (çizgi parçası etrafında döndürülür)\n" -#: group.cpp:245 +#: group.cpp:257 msgctxt "group-name" msgid "helix" msgstr "helis" -#: group.cpp:258 +#: group.cpp:270 msgid "" "Bad selection for new rotation. This group can be created with:\n" "\n" @@ -1356,41 +1379,41 @@ msgstr "" " * bir nokta ve bir çizgi veya bir normal (nokta boyunca bir eksen " "etrafında ve çizgiye / normale paralel çevirin)\n" -#: group.cpp:271 +#: group.cpp:283 msgctxt "group-name" msgid "rotate" msgstr "çevir" -#: group.cpp:282 +#: group.cpp:294 msgctxt "group-name" msgid "translate" msgstr "ötele" -#: group.cpp:400 +#: group.cpp:416 msgid "(unnamed)" msgstr "(isimsiz)" -#: groupmesh.cpp:709 +#: groupmesh.cpp:707 msgid "not closed contour, or not all same style!" msgstr "kapalı olmayan kontur veya tümü aynı biçimde değil!" -#: groupmesh.cpp:722 +#: groupmesh.cpp:720 msgid "points not all coplanar!" msgstr "noktaların hepsi aynı düzlemde değil!" -#: groupmesh.cpp:724 +#: groupmesh.cpp:722 msgid "contour is self-intersecting!" msgstr "kontur kendisiyle kesişiyor!" -#: groupmesh.cpp:726 +#: groupmesh.cpp:724 msgid "zero-length edge!" msgstr "sıfır-uzunlukta kenar!" -#: modify.cpp:254 +#: modify.cpp:252 msgid "Must be sketching in workplane to create tangent arc." msgstr "Teğet yay oluşturmak için çalışma düzleminde çizim yapılmalıdır." -#: modify.cpp:301 +#: modify.cpp:299 msgid "" "To create a tangent arc, select a point where two non-construction lines or " "circles in this group and workplane join." @@ -1398,7 +1421,7 @@ msgstr "" "Bir teğet yay oluşturmak için, bu gruptaki iki yapı-dışı çizginin veya " "dairenin ve çalışma düzleminin birleştiği bir nokta seçin." -#: modify.cpp:388 +#: modify.cpp:386 msgid "" "Couldn't round this corner. Try a smaller radius, or try creating the " "desired geometry by hand with tangency constraints." @@ -1406,15 +1429,15 @@ msgstr "" "Bu köşe yuvarlatılamadı. Daha küçük bir yarıçap deneyin veya teğet " "sınırlamaları ile istenen geometriyi elle oluşturmayı deneyin." -#: modify.cpp:597 +#: modify.cpp:595 msgid "Couldn't split this entity; lines, circles, or cubics only." msgstr "Bu öğeler bölünemedi; yalnızca çizgiler, çemberler veya küpler." -#: modify.cpp:624 +#: modify.cpp:622 msgid "Must be sketching in workplane to split." msgstr "Bölmek için çalışma düzleminde çizim olmalı." -#: modify.cpp:631 +#: modify.cpp:629 msgid "" "Select two entities that intersect each other (e.g. two lines/circles/arcs " "or a line/circle/arc and a point)." @@ -1422,107 +1445,107 @@ msgstr "" "Birbiriyle kesişen iki öğe seçin (örneğin iki çizgi / çember / yay veya bir " "çizgi / çember / yay ve bir nokta)." -#: modify.cpp:736 +#: modify.cpp:734 msgid "Can't split; no intersection found." msgstr "Bölünemez; kesişim bulunamadı." -#: mouse.cpp:559 +#: mouse.cpp:557 msgid "Assign to Style" msgstr "Biçime Ata" -#: mouse.cpp:575 +#: mouse.cpp:573 msgid "No Style" msgstr "Biçim Yok" -#: mouse.cpp:578 +#: mouse.cpp:576 msgid "Newly Created Custom Style..." msgstr "Yeni Oluşturulan Özel Biçim ..." -#: mouse.cpp:585 +#: mouse.cpp:583 msgid "Group Info" msgstr "Grup Bilgisi" -#: mouse.cpp:605 +#: mouse.cpp:603 msgid "Style Info" msgstr "Biçim Bİlgisi" -#: mouse.cpp:625 +#: mouse.cpp:623 msgid "Select Edge Chain" msgstr "Kenar Zinciri Seçin" -#: mouse.cpp:631 +#: mouse.cpp:629 msgid "Toggle Reference Dimension" msgstr "Ölçü Referansını Değiştir" -#: mouse.cpp:637 +#: mouse.cpp:635 msgid "Other Supplementary Angle" msgstr "Diğer Bütünler Açı" -#: mouse.cpp:642 +#: mouse.cpp:640 msgid "Snap to Grid" msgstr "Izgaraya Tuttur" -#: mouse.cpp:651 +#: mouse.cpp:649 msgid "Remove Spline Point" msgstr "Eğri Noktasını Sil" -#: mouse.cpp:686 +#: mouse.cpp:684 msgid "Add Spline Point" msgstr "Eğri Noktası Ekle" -#: mouse.cpp:690 +#: mouse.cpp:688 msgid "Cannot add spline point: maximum number of points reached." msgstr "Eğri noktası eklenemiyor: en fazla nokta sayısına ulaşıldı." -#: mouse.cpp:715 +#: mouse.cpp:713 msgid "Toggle Construction" msgstr "Yapıyı değiştir" -#: mouse.cpp:730 +#: mouse.cpp:729 msgid "Delete Point-Coincident Constraint" msgstr "Çakışan-Nokta Sınırlamasını Sil" -#: mouse.cpp:749 +#: mouse.cpp:747 msgid "Cut" msgstr "Kes" -#: mouse.cpp:751 +#: mouse.cpp:749 msgid "Copy" msgstr "Kopyala" -#: mouse.cpp:755 +#: mouse.cpp:753 msgid "Select All" msgstr "Tümünü Seç" -#: mouse.cpp:760 +#: mouse.cpp:758 msgid "Paste" msgstr "Yapıştır" -#: mouse.cpp:762 +#: mouse.cpp:760 msgid "Paste Transformed..." msgstr "Dönüştürerek Yapıştır..." -#: mouse.cpp:767 +#: mouse.cpp:765 msgid "Delete" msgstr "Sil" -#: mouse.cpp:770 +#: mouse.cpp:768 msgid "Unselect All" msgstr "Tüm Seçimi Kaldır" -#: mouse.cpp:777 +#: mouse.cpp:775 msgid "Unselect Hovered" msgstr "Fareyle Üzerine Gelinen Seçimi Kaldır" -#: mouse.cpp:786 +#: mouse.cpp:784 msgid "Zoom to Fit" msgstr "Sığdırmak için Yakınlaştır" -#: mouse.cpp:988 mouse.cpp:1275 +#: mouse.cpp:986 mouse.cpp:1274 msgid "click next point of line, or press Esc" msgstr "çizginin sonraki noktası için tıklayın veya Esc tuşuna basın" -#: mouse.cpp:994 +#: mouse.cpp:992 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1530,15 +1553,15 @@ msgstr "" "3d'de dikdörtgen çizilemez; önce Çizim -> Çalışma Düzleminde menüsü ile bir " "çalışma düzlemini etkinleştirin." -#: mouse.cpp:1028 +#: mouse.cpp:1026 msgid "click to place other corner of rectangle" msgstr "dikdörtgenin diğer köşesini yerleştirmek için tıklayın" -#: mouse.cpp:1048 +#: mouse.cpp:1047 msgid "click to set radius" msgstr "yarıçapı ayarlamak için tıklayın" -#: mouse.cpp:1053 +#: mouse.cpp:1052 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1546,22 +1569,22 @@ msgstr "" "3d'de yay çizemez; önce Çizim -> Çalışma Düzleminde menüsü ile bir çalışma " "düzlemini etkinleştirin." -#: mouse.cpp:1072 +#: mouse.cpp:1071 msgid "click to place point" msgstr "noktayı yerleştirmek için tıklayın" -#: mouse.cpp:1088 +#: mouse.cpp:1087 msgid "click next point of cubic, or press Esc" msgstr "sonraki kübik noktayı tıklayın veya Esc tuşuna basın" -#: mouse.cpp:1093 +#: mouse.cpp:1092 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" "Zaten bir çalışma düzleminde çizim yapılıyor; 3d'de çizim yapmadan önce yeni " "çalışma düzlemi oluşturun." -#: mouse.cpp:1109 +#: mouse.cpp:1108 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1569,11 +1592,11 @@ msgstr "" "3d'de metin yazılamaz; önce Çizim -> Çalışma Düzleminde menüsü ile bir " "çalışma düzlemini etkinleştirin." -#: mouse.cpp:1126 +#: mouse.cpp:1125 msgid "click to place bottom right of text" msgstr "metnin sağ alt konumunu yerleştirmek için tıklayın" -#: mouse.cpp:1132 +#: mouse.cpp:1131 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." @@ -1581,193 +1604,199 @@ msgstr "" "3d'de resim eklenemez; önce Çizim -> Çalışma Düzleminde menüsü ile bir " "çalışma düzlemini etkinleştirin." -#: mouse.cpp:1159 -msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -msgstr "YENİ YORUM - DÜZENLEMEK İÇİN ÇİFT TIKLAYIN" - -#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552 msgctxt "file-type" msgid "SolveSpace models" msgstr "SolveSpace Modelleri" -#: platform/gui.cpp:90 +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "" + +#: platform/gui.cpp:91 msgctxt "file-type" msgid "IDF circuit board" msgstr "IDF devre kartı" -#: platform/gui.cpp:94 +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "" + +#: platform/gui.cpp:96 msgctxt "file-type" msgid "PNG image" msgstr "PNG Resmi" -#: platform/gui.cpp:98 +#: platform/gui.cpp:100 msgctxt "file-type" msgid "STL mesh" msgstr "STL mesh" -#: platform/gui.cpp:99 +#: platform/gui.cpp:101 msgctxt "file-type" msgid "Wavefront OBJ mesh" msgstr "Wavefront OBJ mesh" -#: platform/gui.cpp:100 +#: platform/gui.cpp:102 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" msgstr "Görüntüleyicili, Three.js-uyumlu mesh" -#: platform/gui.cpp:101 +#: platform/gui.cpp:103 msgctxt "file-type" msgid "Three.js-compatible mesh, mesh only" msgstr "Three.js-uyumlu mesh, yalnızca mesh" -#: platform/gui.cpp:102 +#: platform/gui.cpp:104 msgctxt "file-type" msgid "VRML text file" msgstr "VRML metin dosyası" -#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 msgctxt "file-type" msgid "STEP file" msgstr "STEP dosyası" -#: platform/gui.cpp:110 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "PDF file" msgstr "PDF dosyası" -#: platform/gui.cpp:111 +#: platform/gui.cpp:113 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "Kapsüllenmiş PostScript" -#: platform/gui.cpp:112 +#: platform/gui.cpp:114 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "Ölçeklenebilir Vektör Grafikleri (SVG)" -#: platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:116 platform/gui.cpp:123 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "DXF dosyası (AutoCAD 2007)" -#: platform/gui.cpp:115 +#: platform/gui.cpp:117 msgctxt "file-type" msgid "HPGL file" msgstr "HPGL dosyası" -#: platform/gui.cpp:116 +#: platform/gui.cpp:118 msgctxt "file-type" msgid "G Code" msgstr "G Kodu" -#: platform/gui.cpp:125 +#: platform/gui.cpp:127 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "AutoCAD DXF ve DWG dosyaları" -#: platform/gui.cpp:129 +#: platform/gui.cpp:131 msgctxt "file-type" msgid "Comma-separated values" msgstr "Virgülle ayrılmış değerler (CSV)" -#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641 msgid "untitled" msgstr "isimsiz" -#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 -#: platform/guiwin.cpp:1582 +#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445 +#: platform/guiwin.cpp:1639 msgctxt "title" msgid "Save File" msgstr "Dosyayı Kaydet" -#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 -#: platform/guiwin.cpp:1584 +#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428 +#: platform/guiwin.cpp:1645 msgctxt "title" msgid "Open File" msgstr "Dosyayı Aç" -#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418 msgctxt "button" msgid "_Cancel" msgstr "_İptal" -#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416 msgctxt "button" msgid "_Save" msgstr "_Kaydet" -#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417 msgctxt "button" msgid "_Open" msgstr "_Aç" -#: solvespace.cpp:169 +#: solvespace.cpp:170 msgctxt "title" msgid "Autosave Available" msgstr "Otomatik Kaydetme Kullanılabilir" -#: solvespace.cpp:170 +#: solvespace.cpp:171 msgctxt "dialog" msgid "An autosave file is available for this sketch." msgstr "Bu çizim için otomatik kaydetme dosyası kullanılabilir." -#: solvespace.cpp:171 +#: solvespace.cpp:172 msgctxt "dialog" msgid "Do you want to load the autosave file instead?" msgstr "Bunun yerine otomatik kaydetme dosyasını yüklemek istiyor musunuz?" -#: solvespace.cpp:172 +#: solvespace.cpp:173 msgctxt "button" msgid "&Load autosave" msgstr "&Otomatik kaydetmeyi yükle" -#: solvespace.cpp:174 +#: solvespace.cpp:175 msgctxt "button" msgid "Do&n't Load" msgstr "&Yükleme" -#: solvespace.cpp:557 +#: solvespace.cpp:598 msgctxt "title" msgid "Modified File" msgstr "Değiştirilen Dosya" -#: solvespace.cpp:559 +#: solvespace.cpp:600 #, c-format msgctxt "dialog" msgid "Do you want to save the changes you made to the sketch “%s”?" msgstr "\"%s\" çiziminde yaptığınız değişiklikleri kaydetmek istiyor musunuz?" -#: solvespace.cpp:562 +#: solvespace.cpp:603 msgctxt "dialog" msgid "Do you want to save the changes you made to the new sketch?" msgstr "Yeni çizimde yaptığınız değişiklikleri kaydetmek istiyor musunuz?" -#: solvespace.cpp:565 +#: solvespace.cpp:606 msgctxt "dialog" msgid "Your changes will be lost if you don't save them." msgstr "Bunları kaydetmezseniz değişiklikleriniz kaybolur." -#: solvespace.cpp:566 +#: solvespace.cpp:607 msgctxt "button" msgid "&Save" msgstr "&Kaydet" -#: solvespace.cpp:568 +#: solvespace.cpp:609 msgctxt "button" msgid "Do&n't Save" msgstr "K&aydetme" -#: solvespace.cpp:589 +#: solvespace.cpp:630 msgctxt "title" msgid "(new sketch)" msgstr "(yeni çizim)" -#: solvespace.cpp:596 +#: solvespace.cpp:637 msgctxt "title" msgid "Property Browser" msgstr "Özellik Tarayıcısı" -#: solvespace.cpp:658 +#: solvespace.cpp:699 msgid "" "Constraints are currently shown, and will be exported in the toolpath. This " "is probably not what you want; hide them by clicking the link at the top of " @@ -1777,7 +1806,7 @@ msgstr "" "Muhtemelen istediğiniz bu değil; metin penceresinin üst kısmındaki " "bağlantıya tıklayarak bunları gizleyin." -#: solvespace.cpp:730 +#: solvespace.cpp:771 #, c-format msgid "" "Can't identify file type from file extension of filename '%s'; try .dxf or ." @@ -1785,21 +1814,21 @@ msgid "" msgstr "" "Dosya türü '%s' dosya uzantısından tanımlanamıyor; .dxf veya .dwg'yi deneyin." -#: solvespace.cpp:778 +#: solvespace.cpp:823 msgid "Constraint must have a label, and must not be a reference dimension." msgstr "Sınırlamanın bir etiketi olmalı ve bir referans ölçüsü olmamalıdır." -#: solvespace.cpp:782 +#: solvespace.cpp:827 msgid "Bad selection for step dimension; select a constraint." msgstr "" "Adım ölçüsü için hatalı seçim; bir nokta boyunca, eksenleri koordine etmek " "için ortogonal seçin." -#: solvespace.cpp:806 +#: solvespace.cpp:851 msgid "The assembly does not interfere, good." msgstr "Montaj engel değil, iyi." -#: solvespace.cpp:822 +#: solvespace.cpp:867 #, c-format msgid "" "The volume of the solid model is:\n" @@ -1810,7 +1839,7 @@ msgstr "" "\n" " % s" -#: solvespace.cpp:831 +#: solvespace.cpp:876 #, c-format msgid "" "\n" @@ -1823,7 +1852,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:836 +#: solvespace.cpp:881 msgid "" "\n" "\n" @@ -1835,7 +1864,7 @@ msgstr "" "Eğri yüzeyler, üçgenler olarak yaklaştırılmıştır.\n" "Bu, tipik olarak yaklaşık 1% hataya neden olur." -#: solvespace.cpp:851 +#: solvespace.cpp:896 #, c-format msgid "" "The surface area of the selected faces is:\n" @@ -1852,7 +1881,7 @@ msgstr "" "Eğriler, parçalı doğrusal olarak yaklaştırıldı.\n" "Bu, tipik olarak yaklaşık 1%% hataya neden olur." -#: solvespace.cpp:860 +#: solvespace.cpp:905 msgid "" "This group does not contain a correctly-formed 2d closed area. It is open, " "not coplanar, or self-intersecting." @@ -1860,7 +1889,7 @@ msgstr "" "Bu grup, doğru biçimlendirilmiş 2d kapalı alan içermiyor. Açık, eş düzlemli " "değil veya kendisiyle kesişiyor." -#: solvespace.cpp:872 +#: solvespace.cpp:917 #, c-format msgid "" "The area of the region sketched in this group is:\n" @@ -1877,7 +1906,7 @@ msgstr "" "Eğriler, parçalı doğrusal olarak yaklaştırıldı.\n" "Bu, tipik olarak yaklaşık 1%% hataya neden olur." -#: solvespace.cpp:892 +#: solvespace.cpp:937 #, c-format msgid "" "The total length of the selected entities is:\n" @@ -1894,38 +1923,38 @@ msgstr "" "Eğriler, parçalı doğrusal olarak yaklaştırıldı.\n" "Bu, tipik olarak yaklaşık 1%% hataya neden olur." -#: solvespace.cpp:898 +#: solvespace.cpp:943 msgid "Bad selection for perimeter; select line segments, arcs, and curves." msgstr "" "Çevre uzunluğu için hatalı seçim; çizgi parçalarını, yayları ve eğrileri " "seçin." -#: solvespace.cpp:914 +#: solvespace.cpp:959 msgid "Bad selection for trace; select a single point." msgstr "İzleme için hatalı seçim; tek bir nokta seçin." -#: solvespace.cpp:941 +#: solvespace.cpp:986 #, c-format msgid "Couldn't write to '%s'" msgstr "\"%s\" ye yazılamadı" -#: solvespace.cpp:971 +#: solvespace.cpp:1016 msgid "The mesh is self-intersecting (NOT okay, invalid)." msgstr "Mesh kendisiyle kesişiyor (TAMAM değil, geçersiz)." -#: solvespace.cpp:972 +#: solvespace.cpp:1017 msgid "The mesh is not self-intersecting (okay, valid)." msgstr "Mesh kendi kendine kesişmiyor (tamam, geçerli)." -#: solvespace.cpp:974 +#: solvespace.cpp:1019 msgid "The mesh has naked edges (NOT okay, invalid)." msgstr "Mesh'in açık kenarları var (tamam DEĞİL, geçersiz)." -#: solvespace.cpp:975 +#: solvespace.cpp:1020 msgid "The mesh is watertight (okay, valid)." msgstr "Mesh çok sıkı (tamam, geçerli)" -#: solvespace.cpp:978 +#: solvespace.cpp:1023 #, c-format msgid "" "\n" @@ -1936,7 +1965,7 @@ msgstr "" "\n" "Model, %d yüzeylerden %d üçgen içerir." -#: solvespace.cpp:982 +#: solvespace.cpp:1027 #, c-format msgid "" "%s\n" @@ -1951,7 +1980,7 @@ msgstr "" "\n" "Sıfır sorunlu kenar, iyi.%s" -#: solvespace.cpp:985 +#: solvespace.cpp:1030 #, c-format msgid "" "%s\n" @@ -1966,7 +1995,7 @@ msgstr "" "\n" "%d sorunlu kenar, kötü.%s" -#: solvespace.cpp:998 +#: solvespace.cpp:1043 #, c-format msgid "" "This is SolveSpace version %s.\n" @@ -1995,7 +2024,7 @@ msgstr "" "\n" "© 2008-% d Jonathan Westhues ve diğer yazarlar.\n" -#: style.cpp:166 +#: style.cpp:185 msgid "" "Can't assign style to an entity that's derived from another entity; try " "assigning a style to this entity's parent." @@ -2003,27 +2032,27 @@ msgstr "" "Başka bir öğeden türetilen bir öğeye biçim atayamazsınız; bu öğenin üst " "öğesine bir biçim atamayı deneyin." -#: style.cpp:665 +#: style.cpp:735 msgid "Style name cannot be empty" msgstr "Biçim adı boş olamaz" -#: textscreens.cpp:741 +#: textscreens.cpp:785 msgid "Can't repeat fewer than 1 time." msgstr "1 defadan az tekrar edilemez." -#: textscreens.cpp:745 +#: textscreens.cpp:789 msgid "Can't repeat more than 999 times." msgstr "999 defadan fazla tekrar edilemez." -#: textscreens.cpp:770 +#: textscreens.cpp:814 msgid "Group name cannot be empty" msgstr "Grup adı boş olamaz" -#: textscreens.cpp:813 +#: textscreens.cpp:866 msgid "Opacity must be between zero and one." msgstr "Şeffaflık değeri sıfır ile bir arasında olmalıdır." -#: textscreens.cpp:848 +#: textscreens.cpp:901 msgid "Radius cannot be zero or negative." msgstr "Yarıçap sıfır veya negatif değer olamaz." @@ -2179,14 +2208,58 @@ msgctxt "button" msgid "&OK" msgstr "&Tamam" -#: view.cpp:78 +#: view.cpp:127 msgid "Scale cannot be zero or negative." msgstr "Ölçek sıfır veya negatif olamaz." -#: view.cpp:90 view.cpp:99 +#: view.cpp:139 view.cpp:148 msgid "Bad format: specify x, y, z" msgstr "Kötü biçim: x, y, z'yi belirtin" +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Uzunluk oranı sınırlandırması için hatalı seçim. Bu sınırlandırma şunlara " +#~ "uygulanabilir:\n" +#~ "\n" +#~ " * iki çizgi parçası\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "Uzunluk farkı sınırlandırması için hatalı seçim. Bu sınırlandırma şunlara " +#~ "uygulanabilir:\n" +#~ "\n" +#~ " * iki çizgi parçası\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "&Uzunluk Oranı" + +#~ msgid "Length Diff&erence" +#~ msgstr "U&zunluk Farkı" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "Çalışma düzleminde yeni taslak çizmek için hatalı seçim. Bu grup şunlarla " +#~ "oluşturulabilir:\n" +#~ "\n" +#~ " * bir nokta (nokta boyunca, eksenleri koordine etmek için " +#~ "ortogonal)\n" +#~ " * bir nokta ve iki çizgi parçası (noktadan, çizgilere paralel)\n" +#~ " * bir çalışma düzlemi (çalışma düzleminin kopyası)\n" + #~ msgctxt "file-type" #~ msgid "Q3D Object file" #~ msgstr "Q3D Object file" diff --git a/res/locales/uk_UA.po b/res/locales/uk_UA.po index e71069a9..8192a6b6 100644 --- a/res/locales/uk_UA.po +++ b/res/locales/uk_UA.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" -"Report-Msgid-Bugs-To: https://github.com/solvespace/solvespace/issues\n" -"POT-Creation-Date: 2021-02-01 15:45+0200\n" +"Report-Msgid-Bugs-To: whitequark@whitequark.org\n" +"POT-Creation-Date: 2021-09-26 16:25-0400\n" "PO-Revision-Date: 2021-04-14 01:42+0300\n" "Last-Translator: https://github.com/Symbian9\n" "Language-Team: app4soft\n" @@ -17,7 +17,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.2\n" -#: clipboard.cpp:310 +#: clipboard.cpp:309 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -27,50 +27,50 @@ msgstr "" "\n" "Активуйте одну через Креслення -> У площині." -#: clipboard.cpp:327 +#: clipboard.cpp:326 msgid "Clipboard is empty; nothing to paste." msgstr "Буфер обміну порожній; немає чого вставляти." -#: clipboard.cpp:374 +#: clipboard.cpp:373 msgid "Number of copies to paste must be at least one." msgstr "Кількість копій для вставки має бути не менше одної." -#: clipboard.cpp:390 textscreens.cpp:783 +#: clipboard.cpp:389 textscreens.cpp:827 msgid "Scale cannot be zero." msgstr "Масштаб не може бути нульовим." -#: clipboard.cpp:432 +#: clipboard.cpp:431 msgid "Select one point to define origin of rotation." msgstr "Оберіть одну точку для визначення центру обертання." -#: clipboard.cpp:444 +#: clipboard.cpp:443 msgid "Select two points to define translation vector." msgstr "Оберіть дві точки для визначення вектору розміщення." -#: clipboard.cpp:454 +#: clipboard.cpp:453 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." msgstr "" -#: clipboard.cpp:458 +#: clipboard.cpp:457 #, fuzzy msgid "Too many items to paste; split this into smaller pastes." msgstr "Забагато об'єктів для вставки; рзділіть копіювання на кілька етапів." -#: clipboard.cpp:463 +#: clipboard.cpp:462 msgid "No workplane active." msgstr "Немає активної площини." -#: confscreen.cpp:418 +#: confscreen.cpp:376 msgid "Bad format: specify coordinates as x, y, z" msgstr "Некоректний формат: визначте координати X, Y, Z" -#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858 msgid "Bad format: specify color as r, g, b" msgstr "Некоректний формат: визначте колір як R, G, B" -#: confscreen.cpp:454 +#: confscreen.cpp:412 #, fuzzy msgid "" "The perspective factor will have no effect until you enable View -> Use " @@ -79,24 +79,24 @@ msgstr "" "Значення перспективи не матиме ефекту допоки не ввімкнено Вигляд -> " "Використовувати Перспективну проєкцію." -#: confscreen.cpp:467 confscreen.cpp:477 +#: confscreen.cpp:430 confscreen.cpp:440 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "Визначте кількість десяткових знаків від 0 до %d." -#: confscreen.cpp:489 +#: confscreen.cpp:452 msgid "Export scale must not be zero!" msgstr "Масштаб експорту не може бути нульовим!" -#: confscreen.cpp:501 +#: confscreen.cpp:464 msgid "Cutter radius offset must not be negative!" msgstr "Радіус відступу різання не може бути від'ємним!" -#: confscreen.cpp:555 +#: confscreen.cpp:518 msgid "Bad value: autosave interval should be positive" msgstr "Некоректне значення: інтервал автозбереження має бути додатнім" -#: confscreen.cpp:558 +#: confscreen.cpp:521 #, fuzzy msgid "Bad format: specify interval in integral minutes" msgstr "Некоректний формат: визначте цілим числом інтервал у хвилинах" @@ -168,133 +168,153 @@ msgstr "пропорція-довжин" #: constraint.cpp:25 msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" msgid "length-difference" msgstr "різниця-довжин" -#: constraint.cpp:26 +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "" + +#: constraint.cpp:30 msgctxt "constr-name" msgid "symmetric" msgstr "симетрія" -#: constraint.cpp:27 +#: constraint.cpp:31 msgctxt "constr-name" msgid "symmetric-h" msgstr "симетрія-вертикально" -#: constraint.cpp:28 +#: constraint.cpp:32 msgctxt "constr-name" msgid "symmetric-v" msgstr "симетрія-горизонтально" -#: constraint.cpp:29 +#: constraint.cpp:33 msgctxt "constr-name" msgid "symmetric-line" msgstr "симетрія-відносно-лінії" -#: constraint.cpp:30 +#: constraint.cpp:34 msgctxt "constr-name" msgid "at-midpoint" msgstr "на-середині" -#: constraint.cpp:31 +#: constraint.cpp:35 msgctxt "constr-name" msgid "horizontal" msgstr "горизонталь" -#: constraint.cpp:32 +#: constraint.cpp:36 msgctxt "constr-name" msgid "vertical" msgstr "вертикаль" -#: constraint.cpp:33 +#: constraint.cpp:37 msgctxt "constr-name" msgid "diameter" msgstr "діаметр" -#: constraint.cpp:34 +#: constraint.cpp:38 msgctxt "constr-name" msgid "pt-on-circle" msgstr "тчк-на-колі" -#: constraint.cpp:35 +#: constraint.cpp:39 msgctxt "constr-name" msgid "same-orientation" msgstr "співнаправленість" -#: constraint.cpp:36 +#: constraint.cpp:40 msgctxt "constr-name" msgid "angle" msgstr "кут" -#: constraint.cpp:37 +#: constraint.cpp:41 msgctxt "constr-name" msgid "parallel" msgstr "паралель" -#: constraint.cpp:38 +#: constraint.cpp:42 msgctxt "constr-name" msgid "arc-line-tangent" msgstr "дотичні-дуга-лінія" -#: constraint.cpp:39 +#: constraint.cpp:43 msgctxt "constr-name" msgid "cubic-line-tangent" msgstr "дотичні-сплайн-лінія" -#: constraint.cpp:40 +#: constraint.cpp:44 msgctxt "constr-name" msgid "curve-curve-tangent" msgstr "дотичні-крива-крива" -#: constraint.cpp:41 +#: constraint.cpp:45 msgctxt "constr-name" msgid "perpendicular" msgstr "перпендикуляр" -#: constraint.cpp:42 +#: constraint.cpp:46 msgctxt "constr-name" msgid "eq-radius" msgstr "рівнозначні-радіуси" -#: constraint.cpp:43 +#: constraint.cpp:47 msgctxt "constr-name" msgid "eq-angle" msgstr "рівнозначні-кути" -#: constraint.cpp:44 +#: constraint.cpp:48 msgctxt "constr-name" msgid "eq-line-len-arc-len" msgstr "рівнозначні-лінія-дуга" -#: constraint.cpp:45 +#: constraint.cpp:49 msgctxt "constr-name" msgid "lock-where-dragged" msgstr "фіксоване-положення" -#: constraint.cpp:46 +#: constraint.cpp:50 msgctxt "constr-name" msgid "comment" msgstr "коментар" -#: constraint.cpp:140 +#: constraint.cpp:144 msgid "" "The tangent arc and line segment must share an endpoint. Constrain them with " "Constrain -> On Point before constraining tangent." msgstr "" -#: constraint.cpp:158 +#: constraint.cpp:163 msgid "" "The tangent cubic and line segment must share an endpoint. Constrain them " "with Constrain -> On Point before constraining tangent." msgstr "" -#: constraint.cpp:183 +#: constraint.cpp:189 msgid "" "The curves must share an endpoint. Constrain them with Constrain -> On Point " "before constraining tangent." msgstr "" -#: constraint.cpp:231 +#: constraint.cpp:238 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -308,7 +328,7 @@ msgid "" " * a circle or an arc (diameter)\n" msgstr "" -#: constraint.cpp:284 +#: constraint.cpp:291 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -320,7 +340,7 @@ msgid "" " * a point and a plane face (point on face)\n" msgstr "" -#: constraint.cpp:346 +#: constraint.cpp:353 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -336,22 +356,26 @@ msgid "" " * a line segment and an arc (line segment length equals arc length)\n" msgstr "" -#: constraint.cpp:385 +#: constraint.cpp:407 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -#: constraint.cpp:402 +#: constraint.cpp:441 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -#: constraint.cpp:428 +#: constraint.cpp:472 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -359,7 +383,7 @@ msgid "" " * a line segment and a workplane (line's midpoint on plane)\n" msgstr "" -#: constraint.cpp:486 +#: constraint.cpp:530 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -371,19 +395,19 @@ msgid "" "workplane)\n" msgstr "" -#: constraint.cpp:500 +#: constraint.cpp:545 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." msgstr "" -#: constraint.cpp:530 +#: constraint.cpp:579 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." msgstr "" -#: constraint.cpp:543 +#: constraint.cpp:592 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -392,7 +416,7 @@ msgid "" " * a line segment\n" msgstr "" -#: constraint.cpp:564 +#: constraint.cpp:613 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -400,16 +424,16 @@ msgid "" " * two normals\n" msgstr "" -#: constraint.cpp:614 +#: constraint.cpp:663 #, fuzzy msgid "Must select an angle constraint." msgstr "Необхідно обрати кут." -#: constraint.cpp:627 +#: constraint.cpp:676 msgid "Must select a constraint with associated label." msgstr "Необхідно обрати обмежувач з відповідною міткою." -#: constraint.cpp:638 +#: constraint.cpp:687 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -418,11 +442,11 @@ msgid "" " * two normals\n" msgstr "" -#: constraint.cpp:701 +#: constraint.cpp:754 msgid "Curve-curve tangency must apply in workplane." msgstr "" -#: constraint.cpp:711 +#: constraint.cpp:766 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -433,7 +457,7 @@ msgid "" " * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" msgstr "" -#: constraint.cpp:729 +#: constraint.cpp:784 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -442,7 +466,7 @@ msgid "" " * two normals\n" msgstr "" -#: constraint.cpp:744 +#: constraint.cpp:799 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -450,7 +474,11 @@ msgid "" " * a point\n" msgstr "" -#: constraint.cpp:755 +#: constraint.cpp:813 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "КОМЕНТАР -- ДВІЧІ КЛІКНІТЬ ДЛЯ РЕДАГУВАННЯ" + +#: constraint.cpp:818 msgid "click center of comment text" msgstr "клікніть в місце де буде центр коментаря" @@ -473,26 +501,26 @@ msgid "" "lines)\n" msgstr "" -#: export.cpp:822 +#: export.cpp:818 msgid "Active group mesh is empty; nothing to export." msgstr "Активна група не містить меш; немає чого експортувати." -#: exportvector.cpp:337 +#: exportvector.cpp:336 msgid "freehand lines were replaced with continuous lines" msgstr "" -#: exportvector.cpp:339 +#: exportvector.cpp:338 msgid "zigzag lines were replaced with continuous lines" msgstr "" -#: exportvector.cpp:593 +#: exportvector.cpp:592 msgid "" "Some aspects of the drawing have no DXF equivalent and were not exported:\n" msgstr "" "Деякі аспекти креслення на мають відповідників у форматі DXF і не будуть " "експортовані:\n" -#: exportvector.cpp:839 +#: exportvector.cpp:838 msgid "" "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." msgstr "" @@ -509,11 +537,11 @@ msgctxt "group-name" msgid "#references" msgstr "#базові-площини" -#: file.cpp:552 +#: file.cpp:550 msgid "The file is empty. It may be corrupt." msgstr "Файл порожній. Він може бути пошкодженим." -#: file.cpp:557 +#: file.cpp:555 msgid "" "Unrecognized data in file. This file may be corrupt, or from a newer version " "of the program." @@ -551,7 +579,7 @@ msgctxt "button" msgid "&No" msgstr "&Ні" -#: file.cpp:877 solvespace.cpp:569 +#: file.cpp:877 solvespace.cpp:610 msgctxt "button" msgid "&Cancel" msgstr "&Відмінити" @@ -725,295 +753,303 @@ msgid "Use &Perspective Projection" msgstr "Використовувати &Перспективну Проекцію" #: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "" + +#: graphicswin.cpp:98 msgid "Dimension &Units" msgstr "Розмірні &Одиниці" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in &Millimeters" msgstr "Розміри у &Міліметрах" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in M&eters" msgstr "Розміри у &Метрах" -#: graphicswin.cpp:100 +#: graphicswin.cpp:101 msgid "Dimensions in &Inches" msgstr "Розміри у &Дюймах" #: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "" + +#: graphicswin.cpp:104 msgid "Show &Toolbar" msgstr "Показати Панель &Інструментів" -#: graphicswin.cpp:103 +#: graphicswin.cpp:105 msgid "Show Property Bro&wser" msgstr "Показати Вікно Власти&востей" -#: graphicswin.cpp:105 +#: graphicswin.cpp:107 msgid "&Full Screen" msgstr "&Повний Екран" -#: graphicswin.cpp:107 +#: graphicswin.cpp:109 msgid "&New Group" msgstr "&Нова Група" -#: graphicswin.cpp:108 +#: graphicswin.cpp:110 msgid "Sketch In &3d" msgstr "Креслення у &3D" -#: graphicswin.cpp:109 +#: graphicswin.cpp:111 msgid "Sketch In New &Workplane" msgstr "Креслення у Новій &Площині" -#: graphicswin.cpp:111 +#: graphicswin.cpp:113 msgid "Step &Translating" msgstr "Покрокове &Переміщення" -#: graphicswin.cpp:112 +#: graphicswin.cpp:114 msgid "Step &Rotating" msgstr "Покрокове &Обертання" -#: graphicswin.cpp:114 +#: graphicswin.cpp:116 msgid "E&xtrude" msgstr "Ви&давити" -#: graphicswin.cpp:115 +#: graphicswin.cpp:117 msgid "&Helix" msgstr "&Спіраль" -#: graphicswin.cpp:116 +#: graphicswin.cpp:118 msgid "&Lathe" msgstr "&Виточити" -#: graphicswin.cpp:117 +#: graphicswin.cpp:119 msgid "Re&volve" msgstr "&Обертати" -#: graphicswin.cpp:119 +#: graphicswin.cpp:121 msgid "Link / Assemble..." msgstr "Приєднати / Зібрати..." -#: graphicswin.cpp:120 +#: graphicswin.cpp:122 msgid "Link Recent" msgstr "Приєднати Нещодавні" -#: graphicswin.cpp:122 +#: graphicswin.cpp:124 msgid "&Sketch" msgstr "&Креслення" -#: graphicswin.cpp:123 +#: graphicswin.cpp:125 msgid "In &Workplane" msgstr "У Робочій &Площині" -#: graphicswin.cpp:124 +#: graphicswin.cpp:126 msgid "Anywhere In &3d" msgstr "Будь-де в &3D" -#: graphicswin.cpp:126 +#: graphicswin.cpp:128 msgid "Datum &Point" msgstr "Опорна &Точка" -#: graphicswin.cpp:127 +#: graphicswin.cpp:129 msgid "&Workplane" msgstr "Робоча &Площина" -#: graphicswin.cpp:129 +#: graphicswin.cpp:131 msgid "Line &Segment" msgstr "&Відрізок Прямої" -#: graphicswin.cpp:130 +#: graphicswin.cpp:132 msgid "C&onstruction Line Segment" msgstr "Контсрук&ційний Відрізок Прямої" -#: graphicswin.cpp:131 +#: graphicswin.cpp:133 msgid "&Rectangle" msgstr "&Прямокутник" -#: graphicswin.cpp:132 +#: graphicswin.cpp:134 msgid "&Circle" msgstr "&Коло" -#: graphicswin.cpp:133 +#: graphicswin.cpp:135 msgid "&Arc of a Circle" msgstr "&Дуга Кола" -#: graphicswin.cpp:134 +#: graphicswin.cpp:136 msgid "&Bezier Cubic Spline" msgstr "Кубічний Сплайн &Без'є" -#: graphicswin.cpp:136 +#: graphicswin.cpp:138 msgid "&Text in TrueType Font" msgstr "&Текст із TrueType Шрифтом" -#: graphicswin.cpp:137 +#: graphicswin.cpp:139 msgid "&Image" msgstr "&Зображення" -#: graphicswin.cpp:139 +#: graphicswin.cpp:141 msgid "To&ggle Construction" msgstr "Пере&мкнути Конструктивність" -#: graphicswin.cpp:140 +#: graphicswin.cpp:142 msgid "Tangent &Arc at Point" msgstr "Дотична &Дуга на Точці" -#: graphicswin.cpp:141 +#: graphicswin.cpp:143 msgid "Split Curves at &Intersection" msgstr "Розрізати Криві на &Перетині" -#: graphicswin.cpp:143 +#: graphicswin.cpp:145 msgid "&Constrain" msgstr "&Обмежити" -#: graphicswin.cpp:144 +#: graphicswin.cpp:146 msgid "&Distance / Diameter" msgstr "&Відстань / Діаметр" -#: graphicswin.cpp:145 +#: graphicswin.cpp:147 msgid "Re&ference Dimension" msgstr "Від&носний Розмір" -#: graphicswin.cpp:146 +#: graphicswin.cpp:148 msgid "A&ngle" msgstr "К&ут" -#: graphicswin.cpp:147 +#: graphicswin.cpp:149 msgid "Reference An&gle" msgstr "Відносний К&ут" -#: graphicswin.cpp:148 +#: graphicswin.cpp:150 msgid "Other S&upplementary Angle" msgstr "Інший Су&міжний Кут" -#: graphicswin.cpp:149 +#: graphicswin.cpp:151 msgid "Toggle R&eference Dim" msgstr "Перемкнути Від&носність Розмірів" -#: graphicswin.cpp:151 +#: graphicswin.cpp:153 msgid "&Horizontal" msgstr "&Горизонтально" -#: graphicswin.cpp:152 +#: graphicswin.cpp:154 msgid "&Vertical" msgstr "&Вертикально" -#: graphicswin.cpp:154 +#: graphicswin.cpp:156 msgid "&On Point / Curve / Plane" msgstr "&На точці / Кривій / Площині" -#: graphicswin.cpp:155 +#: graphicswin.cpp:157 msgid "E&qual Length / Radius / Angle" msgstr "Рі&вні Довжина / Радіус / Кут" -#: graphicswin.cpp:156 -msgid "Length Ra&tio" -msgstr "Про&порція Довжин" - -#: graphicswin.cpp:157 -msgid "Length Diff&erence" -msgstr "Рі&зниця Довжин" - #: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "" + +#: graphicswin.cpp:160 msgid "At &Midpoint" msgstr "До &Середини" -#: graphicswin.cpp:159 +#: graphicswin.cpp:161 msgid "S&ymmetric" msgstr "Си&метрично" -#: graphicswin.cpp:160 +#: graphicswin.cpp:162 msgid "Para&llel / Tangent" msgstr "Пара&лельно / Дотична" -#: graphicswin.cpp:161 +#: graphicswin.cpp:163 msgid "&Perpendicular" msgstr "&Препендикулярно" -#: graphicswin.cpp:162 +#: graphicswin.cpp:164 msgid "Same Orient&ation" msgstr "Однакова Орієн&тація" -#: graphicswin.cpp:163 +#: graphicswin.cpp:165 msgid "Lock Point Where &Dragged" msgstr "Фіксувати Точку Після &Переміщення" -#: graphicswin.cpp:165 +#: graphicswin.cpp:167 msgid "Comment" msgstr "Коментар" -#: graphicswin.cpp:167 +#: graphicswin.cpp:169 msgid "&Analyze" msgstr "&Аналізувати" -#: graphicswin.cpp:168 +#: graphicswin.cpp:170 msgid "Measure &Volume" msgstr "Обрахувати &Об'єм" -#: graphicswin.cpp:169 +#: graphicswin.cpp:171 msgid "Measure A&rea" msgstr "Обрахувати Пл&ощу" -#: graphicswin.cpp:170 +#: graphicswin.cpp:172 msgid "Measure &Perimeter" msgstr "Обрахувати &Периметр" -#: graphicswin.cpp:171 +#: graphicswin.cpp:173 msgid "Show &Interfering Parts" msgstr "Показати &Дотичні Частини" -#: graphicswin.cpp:172 +#: graphicswin.cpp:174 msgid "Show &Naked Edges" msgstr "Показати &Приховані Ребра" -#: graphicswin.cpp:173 +#: graphicswin.cpp:175 msgid "Show &Center of Mass" msgstr "Показати &Центр Масс" -#: graphicswin.cpp:175 +#: graphicswin.cpp:177 msgid "Show &Underconstrained Points" msgstr "Показати &Надмірно Обмежені Точки" -#: graphicswin.cpp:177 +#: graphicswin.cpp:179 msgid "&Trace Point" msgstr "&Трасувати Точку" -#: graphicswin.cpp:178 +#: graphicswin.cpp:180 msgid "&Stop Tracing..." msgstr "&Зупити Трасування..." -#: graphicswin.cpp:179 +#: graphicswin.cpp:181 msgid "Step &Dimension..." msgstr "Прорахувати &Розмір..." -#: graphicswin.cpp:181 +#: graphicswin.cpp:183 msgid "&Help" msgstr "&Довідка" -#: graphicswin.cpp:182 +#: graphicswin.cpp:184 msgid "&Language" msgstr "&Мова" -#: graphicswin.cpp:183 +#: graphicswin.cpp:185 msgid "&Website / Manual" msgstr "&Вебсайт / Посібник" -#: graphicswin.cpp:185 +#: graphicswin.cpp:187 msgid "&About" msgstr "&Про програму" -#: graphicswin.cpp:355 +#: graphicswin.cpp:361 msgid "(no recent files)" msgstr "(нємає нещодавніх файлів)" -#: graphicswin.cpp:363 +#: graphicswin.cpp:369 #, c-format msgid "File '%s' does not exist." msgstr "Файл '%s' відсутній." -#: graphicswin.cpp:725 +#: graphicswin.cpp:736 msgid "No workplane is active, so the grid will not appear." msgstr "Відсутня активна площина - сітка не відображатиметься." -#: graphicswin.cpp:740 +#: graphicswin.cpp:751 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1022,91 +1058,91 @@ msgid "" "configuration screen. A value around 0.3 is typical." msgstr "" -#: graphicswin.cpp:819 +#: graphicswin.cpp:836 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" -#: graphicswin.cpp:1114 +#: graphicswin.cpp:1136 msgid "No additional entities share endpoints with the selected entities." msgstr "" -#: graphicswin.cpp:1132 +#: graphicswin.cpp:1154 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." msgstr "" -#: graphicswin.cpp:1155 +#: graphicswin.cpp:1177 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." msgstr "" -#: graphicswin.cpp:1162 +#: graphicswin.cpp:1184 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." msgstr "" -#: graphicswin.cpp:1247 +#: graphicswin.cpp:1269 msgid "No workplane selected. Activating default workplane for this group." msgstr "" -#: graphicswin.cpp:1250 +#: graphicswin.cpp:1272 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" "workplane group." msgstr "" -#: graphicswin.cpp:1271 +#: graphicswin.cpp:1293 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." msgstr "" -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1304 msgid "click point on arc (draws anti-clockwise)" msgstr "" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1305 msgid "click to place datum point" msgstr "клікніть для встановлення вихідної точки" -#: graphicswin.cpp:1284 +#: graphicswin.cpp:1306 msgid "click first point of line segment" msgstr "клікніть першу точку прямої лінії" -#: graphicswin.cpp:1286 +#: graphicswin.cpp:1308 msgid "click first point of construction line segment" msgstr "клікніть першу точку конструктивної прямої лінії" -#: graphicswin.cpp:1287 +#: graphicswin.cpp:1309 msgid "click first point of cubic segment" msgstr "клікніть першу точку кривої" -#: graphicswin.cpp:1288 +#: graphicswin.cpp:1310 msgid "click center of circle" msgstr "клікніть в місце де буде центр коментаря" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1311 msgid "click origin of workplane" msgstr "клікніть в центр відліку площини" -#: graphicswin.cpp:1290 +#: graphicswin.cpp:1312 msgid "click one corner of rectangle" msgstr "клікніть для встановлення першого кута прямокутника" -#: graphicswin.cpp:1291 +#: graphicswin.cpp:1313 msgid "click top left of text" msgstr "клікніть для встановлення верхньої лівої межі тексту" -#: graphicswin.cpp:1297 +#: graphicswin.cpp:1319 msgid "click top left of image" msgstr "клікніть для встановлення верхньої лівої межі зображення" -#: graphicswin.cpp:1309 +#: graphicswin.cpp:1345 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1117,17 +1153,18 @@ msgctxt "group-name" msgid "sketch-in-3d" msgstr "ескіз-в-3D" -#: group.cpp:142 +#: group.cpp:150 msgid "" "Bad selection for new sketch in workplane. This group can be created with:\n" "\n" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, parallel to the " "lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" msgstr "" -#: group.cpp:154 +#: group.cpp:166 msgid "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " "will be extruded normal to the workplane." @@ -1135,16 +1172,16 @@ msgstr "" "Активуйте робочу площину ( Ескіз -> У Площині) перед екструдуванням. Ескіз " "буде екструдовано перпендикулярно до робочої площини." -#: group.cpp:163 +#: group.cpp:175 msgctxt "group-name" msgid "extrude" msgstr "видавлювання" -#: group.cpp:168 +#: group.cpp:180 msgid "Lathe operation can only be applied to planar sketches." msgstr "" -#: group.cpp:179 +#: group.cpp:191 msgid "" "Bad selection for new lathe group. This group can be created with:\n" "\n" @@ -1153,16 +1190,16 @@ msgid "" " * a line segment (revolved about line segment)\n" msgstr "" -#: group.cpp:189 +#: group.cpp:201 msgctxt "group-name" msgid "lathe" msgstr "проточування" -#: group.cpp:194 +#: group.cpp:206 msgid "Revolve operation can only be applied to planar sketches." msgstr "" -#: group.cpp:205 +#: group.cpp:217 msgid "" "Bad selection for new revolve group. This group can be created with:\n" "\n" @@ -1171,16 +1208,16 @@ msgid "" " * a line segment (revolved about line segment)\n" msgstr "" -#: group.cpp:217 +#: group.cpp:229 msgctxt "group-name" msgid "revolve" msgstr "прокручування" -#: group.cpp:222 +#: group.cpp:234 msgid "Helix operation can only be applied to planar sketches." msgstr "Спіраль може бути створена лише на основі площинного ескізу." -#: group.cpp:233 +#: group.cpp:245 msgid "" "Bad selection for new helix group. This group can be created with:\n" "\n" @@ -1189,12 +1226,12 @@ msgid "" " * a line segment (revolved about line segment)\n" msgstr "" -#: group.cpp:245 +#: group.cpp:257 msgctxt "group-name" msgid "helix" msgstr "спіраль" -#: group.cpp:258 +#: group.cpp:270 msgid "" "Bad selection for new rotation. This group can be created with:\n" "\n" @@ -1204,430 +1241,436 @@ msgid "" "point, and parallel to line / normal)\n" msgstr "" -#: group.cpp:271 +#: group.cpp:283 msgctxt "group-name" msgid "rotate" msgstr "крутіння" -#: group.cpp:282 +#: group.cpp:294 msgctxt "group-name" msgid "translate" msgstr "перекладання" -#: group.cpp:400 +#: group.cpp:416 msgid "(unnamed)" msgstr "(безіменне)" -#: groupmesh.cpp:709 +#: groupmesh.cpp:707 msgid "not closed contour, or not all same style!" msgstr "не замкнений контур або не все в єдиному стилі!" -#: groupmesh.cpp:722 +#: groupmesh.cpp:720 msgid "points not all coplanar!" msgstr "" -#: groupmesh.cpp:724 +#: groupmesh.cpp:722 msgid "contour is self-intersecting!" msgstr "контур самоперетинається!" -#: groupmesh.cpp:726 +#: groupmesh.cpp:724 msgid "zero-length edge!" msgstr "ребро нульової довжини!" -#: modify.cpp:254 +#: modify.cpp:252 msgid "Must be sketching in workplane to create tangent arc." msgstr "" -#: modify.cpp:301 +#: modify.cpp:299 msgid "" "To create a tangent arc, select a point where two non-construction lines or " "circles in this group and workplane join." msgstr "" -#: modify.cpp:388 +#: modify.cpp:386 msgid "" "Couldn't round this corner. Try a smaller radius, or try creating the " "desired geometry by hand with tangency constraints." msgstr "" -#: modify.cpp:597 +#: modify.cpp:595 msgid "Couldn't split this entity; lines, circles, or cubics only." msgstr "" -#: modify.cpp:624 +#: modify.cpp:622 #, fuzzy msgid "Must be sketching in workplane to split." msgstr "Має бути накреслений у робочій площині для розділеня." -#: modify.cpp:631 +#: modify.cpp:629 msgid "" "Select two entities that intersect each other (e.g. two lines/circles/arcs " "or a line/circle/arc and a point)." msgstr "" -#: modify.cpp:736 +#: modify.cpp:734 msgid "Can't split; no intersection found." msgstr "Неможливо розділити; відсутній перетин." -#: mouse.cpp:559 +#: mouse.cpp:557 msgid "Assign to Style" msgstr "Встановити Стиль" -#: mouse.cpp:575 +#: mouse.cpp:573 msgid "No Style" msgstr "Без Стилю" -#: mouse.cpp:578 +#: mouse.cpp:576 msgid "Newly Created Custom Style..." msgstr "Створити Користувацький Стиль..." -#: mouse.cpp:585 +#: mouse.cpp:583 msgid "Group Info" msgstr "Параметри Групи" -#: mouse.cpp:605 +#: mouse.cpp:603 msgid "Style Info" msgstr "Параметри Стилю" -#: mouse.cpp:625 +#: mouse.cpp:623 msgid "Select Edge Chain" msgstr "Виділити Ланцюг Ребер" -#: mouse.cpp:631 +#: mouse.cpp:629 msgid "Toggle Reference Dimension" msgstr "Перемкнути Відносність Розміру" -#: mouse.cpp:637 +#: mouse.cpp:635 msgid "Other Supplementary Angle" msgstr "Інший Суміжний Кут" -#: mouse.cpp:642 +#: mouse.cpp:640 msgid "Snap to Grid" msgstr "Прикріпити до Сітки" -#: mouse.cpp:651 +#: mouse.cpp:649 msgid "Remove Spline Point" msgstr "Видалити Точку Сплайну" -#: mouse.cpp:686 +#: mouse.cpp:684 msgid "Add Spline Point" msgstr "Додати Точку Сплайну" -#: mouse.cpp:690 +#: mouse.cpp:688 msgid "Cannot add spline point: maximum number of points reached." msgstr "" "Неможливо додати точку сплайна: перевищено максимальну кількість точок." -#: mouse.cpp:715 +#: mouse.cpp:713 msgid "Toggle Construction" msgstr "Пермкнути Конструктивність" -#: mouse.cpp:730 +#: mouse.cpp:729 msgid "Delete Point-Coincident Constraint" msgstr "Роз'єднати З'єднання Точок" -#: mouse.cpp:749 +#: mouse.cpp:747 msgid "Cut" msgstr "Вирізати" -#: mouse.cpp:751 +#: mouse.cpp:749 msgid "Copy" msgstr "Копіювати" -#: mouse.cpp:755 +#: mouse.cpp:753 msgid "Select All" msgstr "Виділити Усе" -#: mouse.cpp:760 +#: mouse.cpp:758 msgid "Paste" msgstr "Вставити" -#: mouse.cpp:762 +#: mouse.cpp:760 msgid "Paste Transformed..." msgstr "Вставити Трансформованим..." -#: mouse.cpp:767 +#: mouse.cpp:765 msgid "Delete" msgstr "Видалити" -#: mouse.cpp:770 +#: mouse.cpp:768 msgid "Unselect All" msgstr "Зняти Виділення з Усього" -#: mouse.cpp:777 +#: mouse.cpp:775 msgid "Unselect Hovered" msgstr "Зняти Виділення з Наведеного" -#: mouse.cpp:786 +#: mouse.cpp:784 msgid "Zoom to Fit" msgstr "Умістити на Екрані" -#: mouse.cpp:988 mouse.cpp:1275 +#: mouse.cpp:986 mouse.cpp:1274 msgid "click next point of line, or press Esc" msgstr "клікніть наступну точку лінії або натисніть Esc" -#: mouse.cpp:994 +#: mouse.cpp:992 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -#: mouse.cpp:1028 +#: mouse.cpp:1026 msgid "click to place other corner of rectangle" msgstr "клікніть для встановлення іншого кута прямокутника" -#: mouse.cpp:1048 +#: mouse.cpp:1047 msgid "click to set radius" msgstr "клікніть для визначення радіусу" -#: mouse.cpp:1053 +#: mouse.cpp:1052 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -#: mouse.cpp:1072 +#: mouse.cpp:1071 msgid "click to place point" msgstr "клікніть для встановлення точки" -#: mouse.cpp:1088 +#: mouse.cpp:1087 msgid "click next point of cubic, or press Esc" msgstr "клікніть наступну точку кривої або натисніть Esc" -#: mouse.cpp:1093 +#: mouse.cpp:1092 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" -#: mouse.cpp:1109 +#: mouse.cpp:1108 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -#: mouse.cpp:1126 +#: mouse.cpp:1125 msgid "click to place bottom right of text" msgstr "клікніть для встановлення нижньої правої межі тексту" -#: mouse.cpp:1132 +#: mouse.cpp:1131 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "" -#: mouse.cpp:1159 -msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -msgstr "КОМЕНТАР -- ДВІЧІ КЛІКНІТЬ ДЛЯ РЕДАГУВАННЯ" - -#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552 msgctxt "file-type" msgid "SolveSpace models" msgstr "SolveSpace модель" -#: platform/gui.cpp:90 +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "" + +#: platform/gui.cpp:91 msgctxt "file-type" msgid "IDF circuit board" msgstr "IDF друкована плата" -#: platform/gui.cpp:94 +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "" + +#: platform/gui.cpp:96 msgctxt "file-type" msgid "PNG image" msgstr "PNG зображення" -#: platform/gui.cpp:98 +#: platform/gui.cpp:100 msgctxt "file-type" msgid "STL mesh" msgstr "STL меш" -#: platform/gui.cpp:99 +#: platform/gui.cpp:101 msgctxt "file-type" msgid "Wavefront OBJ mesh" msgstr "Wavefront OBJ меш" -#: platform/gui.cpp:100 +#: platform/gui.cpp:102 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" msgstr "Three.js-сумісний меш, з переглядачем" -#: platform/gui.cpp:101 +#: platform/gui.cpp:103 msgctxt "file-type" msgid "Three.js-compatible mesh, mesh only" msgstr "Three.js-сумісний меш, лише меш" -#: platform/gui.cpp:102 +#: platform/gui.cpp:104 msgctxt "file-type" msgid "VRML text file" msgstr "VRML меш, текстовий формат" -#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 msgctxt "file-type" msgid "STEP file" msgstr "STEP файл" -#: platform/gui.cpp:110 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "PDF file" msgstr "PDF файл" -#: platform/gui.cpp:111 +#: platform/gui.cpp:113 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "Encapsulated PostScript" -#: platform/gui.cpp:112 +#: platform/gui.cpp:114 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "Scalable Vector Graphics, векторний формат" -#: platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:116 platform/gui.cpp:123 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "DXF файл (AutoCAD 2007)" -#: platform/gui.cpp:115 +#: platform/gui.cpp:117 msgctxt "file-type" msgid "HPGL file" msgstr "HPGL файл" -#: platform/gui.cpp:116 +#: platform/gui.cpp:118 msgctxt "file-type" msgid "G Code" msgstr "G Code" -#: platform/gui.cpp:125 +#: platform/gui.cpp:127 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "AutoCAD DXF та DWG файли" -#: platform/gui.cpp:129 +#: platform/gui.cpp:131 msgctxt "file-type" msgid "Comma-separated values" msgstr "Comma-separated values" -#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641 msgid "untitled" msgstr "без імені" -#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 -#: platform/guiwin.cpp:1582 +#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445 +#: platform/guiwin.cpp:1639 msgctxt "title" msgid "Save File" msgstr "Зберегти Файл" -#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 -#: platform/guiwin.cpp:1584 +#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428 +#: platform/guiwin.cpp:1645 msgctxt "title" msgid "Open File" msgstr "Відкрити Файл" -#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418 msgctxt "button" msgid "_Cancel" msgstr "_Скасувати" -#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416 msgctxt "button" msgid "_Save" msgstr "_Зберегти" -#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417 msgctxt "button" msgid "_Open" msgstr "_Відкрити" -#: solvespace.cpp:169 +#: solvespace.cpp:170 msgctxt "title" msgid "Autosave Available" msgstr "Наявні автозбереження" -#: solvespace.cpp:170 +#: solvespace.cpp:171 msgctxt "dialog" msgid "An autosave file is available for this sketch." msgstr "Наявні автозбереження для цього креслення." -#: solvespace.cpp:171 +#: solvespace.cpp:172 msgctxt "dialog" msgid "Do you want to load the autosave file instead?" msgstr "Завантажити файл автозбереження?" -#: solvespace.cpp:172 +#: solvespace.cpp:173 msgctxt "button" msgid "&Load autosave" msgstr "&Завантажити автозбереження" -#: solvespace.cpp:174 +#: solvespace.cpp:175 msgctxt "button" msgid "Do&n't Load" msgstr "&Не Завантажувати" -#: solvespace.cpp:557 +#: solvespace.cpp:598 msgctxt "title" msgid "Modified File" msgstr "Файл Змінено" -#: solvespace.cpp:559 +#: solvespace.cpp:600 #, c-format msgctxt "dialog" msgid "Do you want to save the changes you made to the sketch “%s”?" msgstr "Чи хочете ви зберегти зміни зроблені вами у ескізі “%s”?" -#: solvespace.cpp:562 +#: solvespace.cpp:603 msgctxt "dialog" msgid "Do you want to save the changes you made to the new sketch?" msgstr "Чи хочете ви зберегти зміни зроблені вами у новому ескізі?" -#: solvespace.cpp:565 +#: solvespace.cpp:606 msgctxt "dialog" msgid "Your changes will be lost if you don't save them." msgstr "Ваші зміни буде втрачено якщо ви не збережете їх." -#: solvespace.cpp:566 +#: solvespace.cpp:607 msgctxt "button" msgid "&Save" msgstr "&Зберегти" -#: solvespace.cpp:568 +#: solvespace.cpp:609 msgctxt "button" msgid "Do&n't Save" msgstr "&Не Зберігати" -#: solvespace.cpp:589 +#: solvespace.cpp:630 msgctxt "title" msgid "(new sketch)" msgstr "(нове креслення)" -#: solvespace.cpp:596 +#: solvespace.cpp:637 msgctxt "title" msgid "Property Browser" msgstr "Браузер Властивостей" -#: solvespace.cpp:658 +#: solvespace.cpp:699 msgid "" "Constraints are currently shown, and will be exported in the toolpath. This " "is probably not what you want; hide them by clicking the link at the top of " "the text window." msgstr "" -#: solvespace.cpp:730 +#: solvespace.cpp:771 #, c-format msgid "" "Can't identify file type from file extension of filename '%s'; try .dxf or ." "dwg." msgstr "" -#: solvespace.cpp:778 +#: solvespace.cpp:823 msgid "Constraint must have a label, and must not be a reference dimension." msgstr "Обмежувач має містити мітку і бути не відносним розміром." -#: solvespace.cpp:782 +#: solvespace.cpp:827 msgid "Bad selection for step dimension; select a constraint." msgstr "Поганий вибір для крокової зміни розміру; оберіть обмежувач." -#: solvespace.cpp:806 +#: solvespace.cpp:851 msgid "The assembly does not interfere, good." msgstr "" -#: solvespace.cpp:822 +#: solvespace.cpp:867 #, c-format msgid "" "The volume of the solid model is:\n" @@ -1638,7 +1681,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:831 +#: solvespace.cpp:876 #, c-format msgid "" "\n" @@ -1651,7 +1694,7 @@ msgstr "" "\n" " %s" -#: solvespace.cpp:836 +#: solvespace.cpp:881 msgid "" "\n" "\n" @@ -1659,7 +1702,7 @@ msgid "" "This introduces error, typically of around 1%." msgstr "" -#: solvespace.cpp:851 +#: solvespace.cpp:896 #, c-format msgid "" "The surface area of the selected faces is:\n" @@ -1670,7 +1713,7 @@ msgid "" "This introduces error, typically of around 1%%." msgstr "" -#: solvespace.cpp:860 +#: solvespace.cpp:905 msgid "" "This group does not contain a correctly-formed 2d closed area. It is open, " "not coplanar, or self-intersecting." @@ -1678,7 +1721,7 @@ msgstr "" "Ця група не місить коректно сформованого замкненої 2D площини. Вона " "відкрита, не компланарна, або ж самоперетинається." -#: solvespace.cpp:872 +#: solvespace.cpp:917 #, c-format msgid "" "The area of the region sketched in this group is:\n" @@ -1695,7 +1738,7 @@ msgstr "" "Криві наближено до ламаних ліній.\n" "Це вносить похибку, зазвичай близько 1%%." -#: solvespace.cpp:892 +#: solvespace.cpp:937 #, c-format msgid "" "The total length of the selected entities is:\n" @@ -1712,36 +1755,36 @@ msgstr "" "Криві наближено до ламаних ліній.\n" "Це вносить похибку, зазвичай близько 1%%." -#: solvespace.cpp:898 +#: solvespace.cpp:943 msgid "Bad selection for perimeter; select line segments, arcs, and curves." msgstr "Поганий вибір для периметру; оберіть відрізки, дуги та криві." -#: solvespace.cpp:914 +#: solvespace.cpp:959 msgid "Bad selection for trace; select a single point." msgstr "Поганий вибір для вістежування шляху; оберіть одну точку." -#: solvespace.cpp:941 +#: solvespace.cpp:986 #, c-format msgid "Couldn't write to '%s'" msgstr "Неможливо записати у '%s'" -#: solvespace.cpp:971 +#: solvespace.cpp:1016 msgid "The mesh is self-intersecting (NOT okay, invalid)." msgstr "Меш самоперетинається (НЕ добре, недійсний)." -#: solvespace.cpp:972 +#: solvespace.cpp:1017 msgid "The mesh is not self-intersecting (okay, valid)." msgstr "Меш самоперетинається (добре, дійсний)." -#: solvespace.cpp:974 +#: solvespace.cpp:1019 msgid "The mesh has naked edges (NOT okay, invalid)." msgstr "Меш містить оголені ребра (НЕ добре, недійсний)." -#: solvespace.cpp:975 +#: solvespace.cpp:1020 msgid "The mesh is watertight (okay, valid)." msgstr "Меш водонепроникний (добре, дійсний)." -#: solvespace.cpp:978 +#: solvespace.cpp:1023 #, c-format msgid "" "\n" @@ -1749,7 +1792,7 @@ msgid "" "The model contains %d triangles, from %d surfaces." msgstr "" -#: solvespace.cpp:982 +#: solvespace.cpp:1027 #, c-format msgid "" "%s\n" @@ -1764,7 +1807,7 @@ msgstr "" "\n" "Відсутні проблемні ребра, добре.%s" -#: solvespace.cpp:985 +#: solvespace.cpp:1030 #, c-format msgid "" "%s\n" @@ -1779,7 +1822,7 @@ msgstr "" "\n" "%d проблемних ребер, погано.%s" -#: solvespace.cpp:998 +#: solvespace.cpp:1043 #, c-format msgid "" "This is SolveSpace version %s.\n" @@ -1808,7 +1851,7 @@ msgstr "" "\n" "© 2008-%d Jonathan Westhues та інші автори.\n" -#: style.cpp:166 +#: style.cpp:185 msgid "" "Can't assign style to an entity that's derived from another entity; try " "assigning a style to this entity's parent." @@ -1816,27 +1859,27 @@ msgstr "" "Неможливо призначити стиль елементу який походить від іншого елемента; " "спробуйте призначити стиль батьківському елементу." -#: style.cpp:665 +#: style.cpp:735 msgid "Style name cannot be empty" msgstr "Стиль не може містити порожнє ім'я" -#: textscreens.cpp:741 +#: textscreens.cpp:785 msgid "Can't repeat fewer than 1 time." msgstr "Не можливо повторити менше 1 разу." -#: textscreens.cpp:745 +#: textscreens.cpp:789 msgid "Can't repeat more than 999 times." msgstr "Не можливо повторити понад 999 разів." -#: textscreens.cpp:770 +#: textscreens.cpp:814 msgid "Group name cannot be empty" msgstr "Група не може містити порожнє ім'я" -#: textscreens.cpp:813 +#: textscreens.cpp:866 msgid "Opacity must be between zero and one." msgstr "Непрозорість має бути між 0 та 1." -#: textscreens.cpp:848 +#: textscreens.cpp:901 msgid "Radius cannot be zero or negative." msgstr "Радіус не може бути нульовим чи від'ємним." @@ -1991,14 +2034,20 @@ msgctxt "button" msgid "&OK" msgstr "&OK" -#: view.cpp:78 +#: view.cpp:127 msgid "Scale cannot be zero or negative." msgstr "Масштаб не може бути нульовим чи від'ємним." -#: view.cpp:90 view.cpp:99 +#: view.cpp:139 view.cpp:148 msgid "Bad format: specify x, y, z" msgstr "Некоректний формат: визначте X, Y, Z" +#~ msgid "Length Ra&tio" +#~ msgstr "Про&порція Довжин" + +#~ msgid "Length Diff&erence" +#~ msgstr "Рі&зниця Довжин" + #~ msgid "Show Degrees of &Freedom" #~ msgstr "Показати Степені &Свободи" diff --git a/res/locales/zh_CN.po b/res/locales/zh_CN.po index 6cc88cdd..7768124e 100644 --- a/res/locales/zh_CN.po +++ b/res/locales/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2021-02-01 15:45+0200\n" +"POT-Creation-Date: 2021-09-26 16:25-0400\n" "PO-Revision-Date: 2021-04-03 13:10-0400\n" "Last-Translator: lomatus@163.com\n" "Language-Team: none\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.2\n" -#: clipboard.cpp:310 +#: clipboard.cpp:309 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" @@ -27,72 +27,72 @@ msgstr "" "\n" "使用\"工作平面中的草图 -+\"激活一个。" -#: clipboard.cpp:327 +#: clipboard.cpp:326 msgid "Clipboard is empty; nothing to paste." msgstr "剪贴板为空;没有要粘贴的内容。" -#: clipboard.cpp:374 +#: clipboard.cpp:373 msgid "Number of copies to paste must be at least one." msgstr "要粘贴的副本数必须至少为 1 个。" -#: clipboard.cpp:390 textscreens.cpp:783 +#: clipboard.cpp:389 textscreens.cpp:827 msgid "Scale cannot be zero." msgstr "缩放不能为零。" -#: clipboard.cpp:432 +#: clipboard.cpp:431 msgid "Select one point to define origin of rotation." msgstr "选择一个点以定义旋转原点。" -#: clipboard.cpp:444 +#: clipboard.cpp:443 msgid "Select two points to define translation vector." msgstr "选择两个点来定义转换向量。" -#: clipboard.cpp:454 +#: clipboard.cpp:453 msgid "" "Transformation is identity. So all copies will be exactly on top of each " "other." msgstr "转换就是标识,因此所有的复制在彼此之上。" -#: clipboard.cpp:458 +#: clipboard.cpp:457 msgid "Too many items to paste; split this into smaller pastes." msgstr "要粘贴的项目太多; 请把他们拆分。" -#: clipboard.cpp:463 +#: clipboard.cpp:462 msgid "No workplane active." msgstr "没有工作平面处于活动状态。" -#: confscreen.cpp:418 +#: confscreen.cpp:376 msgid "Bad format: specify coordinates as x, y, z" msgstr "格式错误:将坐标指定为 x、y、z" -#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858 msgid "Bad format: specify color as r, g, b" msgstr "格式错误:将颜色指定为 r、g、b" -#: confscreen.cpp:454 +#: confscreen.cpp:412 msgid "" "The perspective factor will have no effect until you enable View -> Use " "Perspective Projection." msgstr "在启用\"视图 -= 使用透视投影\"之前,透视因子将不起作用。" -#: confscreen.cpp:467 confscreen.cpp:477 +#: confscreen.cpp:430 confscreen.cpp:440 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "在十进制之后指定 0 和 %d 数字之间。" -#: confscreen.cpp:489 +#: confscreen.cpp:452 msgid "Export scale must not be zero!" msgstr "输出比例不能为零!" -#: confscreen.cpp:501 +#: confscreen.cpp:464 msgid "Cutter radius offset must not be negative!" msgstr "刀具半径偏移不能为负数!" -#: confscreen.cpp:555 +#: confscreen.cpp:518 msgid "Bad value: autosave interval should be positive" msgstr "坏值:自动保存间隔应为正" -#: confscreen.cpp:558 +#: confscreen.cpp:521 msgid "Bad format: specify interval in integral minutes" msgstr "格式错误:以整数分钟为单位指定间隔" @@ -163,134 +163,154 @@ msgstr "长度比率" #: constraint.cpp:25 msgctxt "constr-name" +msgid "arc-arc-length-ratio" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "arc-line-length-ratio" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" msgid "length-difference" msgstr "长度不同" -#: constraint.cpp:26 +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "arc-arc-len-difference" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "arc-line-len-difference" +msgstr "" + +#: constraint.cpp:30 msgctxt "constr-name" msgid "symmetric" msgstr "对称的" -#: constraint.cpp:27 +#: constraint.cpp:31 msgctxt "constr-name" msgid "symmetric-h" msgstr "水平对称" -#: constraint.cpp:28 +#: constraint.cpp:32 msgctxt "constr-name" msgid "symmetric-v" msgstr "纵向对称" -#: constraint.cpp:29 +#: constraint.cpp:33 msgctxt "constr-name" msgid "symmetric-line" msgstr "线对称" -#: constraint.cpp:30 +#: constraint.cpp:34 msgctxt "constr-name" msgid "at-midpoint" msgstr "在中点" -#: constraint.cpp:31 +#: constraint.cpp:35 msgctxt "constr-name" msgid "horizontal" msgstr "水平约束" -#: constraint.cpp:32 +#: constraint.cpp:36 msgctxt "constr-name" msgid "vertical" msgstr "垂直约束" -#: constraint.cpp:33 +#: constraint.cpp:37 msgctxt "constr-name" msgid "diameter" msgstr "直径约束" -#: constraint.cpp:34 +#: constraint.cpp:38 msgctxt "constr-name" msgid "pt-on-circle" msgstr "圆点约束" -#: constraint.cpp:35 +#: constraint.cpp:39 msgctxt "constr-name" msgid "same-orientation" msgstr "相同原点" -#: constraint.cpp:36 +#: constraint.cpp:40 msgctxt "constr-name" msgid "angle" msgstr "角度约束" -#: constraint.cpp:37 +#: constraint.cpp:41 msgctxt "constr-name" msgid "parallel" msgstr "平行约束" -#: constraint.cpp:38 +#: constraint.cpp:42 msgctxt "constr-name" msgid "arc-line-tangent" msgstr "弧切线" -#: constraint.cpp:39 +#: constraint.cpp:43 msgctxt "constr-name" msgid "cubic-line-tangent" msgstr "立方体切线" -#: constraint.cpp:40 +#: constraint.cpp:44 msgctxt "constr-name" msgid "curve-curve-tangent" msgstr "曲线间切线" -#: constraint.cpp:41 +#: constraint.cpp:45 msgctxt "constr-name" msgid "perpendicular" msgstr "垂直约束" -#: constraint.cpp:42 +#: constraint.cpp:46 msgctxt "constr-name" msgid "eq-radius" msgstr "等于半径" -#: constraint.cpp:43 +#: constraint.cpp:47 msgctxt "constr-name" msgid "eq-angle" msgstr "等于角度" -#: constraint.cpp:44 +#: constraint.cpp:48 msgctxt "constr-name" msgid "eq-line-len-arc-len" msgstr "等于线长或弧长" -#: constraint.cpp:45 +#: constraint.cpp:49 msgctxt "constr-name" msgid "lock-where-dragged" msgstr "锁定位置" -#: constraint.cpp:46 +#: constraint.cpp:50 msgctxt "constr-name" msgid "comment" msgstr "备注" -#: constraint.cpp:140 +#: constraint.cpp:144 msgid "" "The tangent arc and line segment must share an endpoint. Constrain them with " "Constrain -> On Point before constraining tangent." msgstr "切线弧和线段必须共享一个端点。在约束切线之前,使用约束 -= 点约束它们。" -#: constraint.cpp:158 +#: constraint.cpp:163 msgid "" "The tangent cubic and line segment must share an endpoint. Constrain them " "with Constrain -> On Point before constraining tangent." msgstr "" "切线立方段和线段必须共享终结点。在约束切线之前,使用约束 -= 点约束它们。" -#: constraint.cpp:183 +#: constraint.cpp:189 msgid "" "The curves must share an endpoint. Constrain them with Constrain -> On Point " "before constraining tangent." msgstr "曲线必须共享一个终结点。在约束切线之前,使用约束 -= 点约束它们。" -#: constraint.cpp:231 +#: constraint.cpp:238 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply " "to:\n" @@ -313,7 +333,7 @@ msgstr "" " * 平面面和点(最小距离)\n" " * 圆或弧(直径)\n" -#: constraint.cpp:284 +#: constraint.cpp:291 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can " "apply to:\n" @@ -332,7 +352,7 @@ msgstr "" " * 一个点和一个圆或圆(曲线上的点)\n" " * 点和平面面(点在脸上)\n" -#: constraint.cpp:346 +#: constraint.cpp:353 msgid "" "Bad selection for equal length / radius constraint. This constraint can " "apply to:\n" @@ -358,28 +378,26 @@ msgstr "" " * 两个圆或圆(相等半径)\n" " * 线段和圆弧(线段长度等于弧长)\n" -#: constraint.cpp:385 +#: constraint.cpp:407 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"长度比率约束的选择错误。此约束可应用于:\n" -"\n" -"* 两个线段\n" -#: constraint.cpp:402 +#: constraint.cpp:441 msgid "" "Bad selection for length difference constraint. This constraint can apply " "to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -"长度差异约束的选择错误。此约束可应用于:\n" -"\n" -"* 两个线段\n" -#: constraint.cpp:428 +#: constraint.cpp:472 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -391,7 +409,7 @@ msgstr "" "* 线段和点(点在中点)\n" " * 线段和工作平面(平面上的线中点)\n" -#: constraint.cpp:486 +#: constraint.cpp:530 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -408,19 +426,19 @@ msgstr "" " * 线段,和两个点或线段(对称的线段)\n" " * 工作平面和两个点或线段(工作平面对称)\n" -#: constraint.cpp:500 +#: constraint.cpp:545 msgid "" "A workplane must be active when constraining symmetric without an explicit " "symmetry plane." msgstr "在没有显式对称平面约束对称时,工作平面必须处于活动状态。" -#: constraint.cpp:530 +#: constraint.cpp:579 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a " "horizontal or vertical constraint." msgstr "在应用水平或垂直约束之前,激活工作平面(使用草图 -= 在工作平面中)。" -#: constraint.cpp:543 +#: constraint.cpp:592 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can " "apply to:\n" @@ -433,7 +451,7 @@ msgstr "" "• 两点\n" " • 线段\n" -#: constraint.cpp:564 +#: constraint.cpp:613 msgid "" "Bad selection for same orientation constraint. This constraint can apply " "to:\n" @@ -444,15 +462,15 @@ msgstr "" "\n" "• 两个法线\n" -#: constraint.cpp:614 +#: constraint.cpp:663 msgid "Must select an angle constraint." msgstr "必须选择角度约束。" -#: constraint.cpp:627 +#: constraint.cpp:676 msgid "Must select a constraint with associated label." msgstr "必须选择具有关联标签的约束。" -#: constraint.cpp:638 +#: constraint.cpp:687 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -466,11 +484,11 @@ msgstr "" " * 线段和法线\n" " • 两个法线\n" -#: constraint.cpp:701 +#: constraint.cpp:754 msgid "Curve-curve tangency must apply in workplane." msgstr "曲线曲线切线必须应用于工作平面。" -#: constraint.cpp:711 +#: constraint.cpp:766 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply " "to:\n" @@ -487,7 +505,7 @@ msgstr "" " * 两个法线(平行)\n" " * 共享端点的两条线段、弧线或贝塞尔(切线)\n" -#: constraint.cpp:729 +#: constraint.cpp:784 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -501,7 +519,7 @@ msgstr "" " * 线段和法线\n" " • 两个法线\n" -#: constraint.cpp:744 +#: constraint.cpp:799 msgid "" "Bad selection for lock point where dragged constraint. This constraint can " "apply to:\n" @@ -512,7 +530,11 @@ msgstr "" "\n" "• 一点\n" -#: constraint.cpp:755 +#: constraint.cpp:813 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "新备注 - 双击编辑" + +#: constraint.cpp:818 msgid "click center of comment text" msgstr "单击注释文本的中心" @@ -538,24 +560,24 @@ msgstr "" " * 脸(通过面的剖面)\n" " * 一个点和两个线段(平面穿过点和平行线)\n" -#: export.cpp:822 +#: export.cpp:818 msgid "Active group mesh is empty; nothing to export." msgstr "活动组网格为空;没有要导出的。" -#: exportvector.cpp:337 +#: exportvector.cpp:336 msgid "freehand lines were replaced with continuous lines" msgstr "徒手线替换为连续线" -#: exportvector.cpp:339 +#: exportvector.cpp:338 msgid "zigzag lines were replaced with continuous lines" msgstr "锯齿线替换为连续线" -#: exportvector.cpp:593 +#: exportvector.cpp:592 msgid "" "Some aspects of the drawing have no DXF equivalent and were not exported:\n" msgstr "绘图的某些方面没有 DXF 等效项,并且未导出:\n" -#: exportvector.cpp:839 +#: exportvector.cpp:838 msgid "" "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." msgstr "PDF 页面大小超过 200 英寸或 200 英寸;许多查看器可能会拒绝此文件。" @@ -570,11 +592,11 @@ msgctxt "group-name" msgid "#references" msgstr "#参考" -#: file.cpp:552 +#: file.cpp:550 msgid "The file is empty. It may be corrupt." msgstr "" -#: file.cpp:557 +#: file.cpp:555 msgid "" "Unrecognized data in file. This file may be corrupt, or from a newer version " "of the program." @@ -610,7 +632,7 @@ msgctxt "button" msgid "&No" msgstr "否(&N)" -#: file.cpp:877 solvespace.cpp:569 +#: file.cpp:877 solvespace.cpp:610 msgctxt "button" msgid "&Cancel" msgstr "取消(&C)" @@ -784,295 +806,303 @@ msgid "Use &Perspective Projection" msgstr "使用远景透视(&P)" #: graphicswin.cpp:97 +msgid "Show E&xploded View" +msgstr "" + +#: graphicswin.cpp:98 msgid "Dimension &Units" msgstr "标注单位(&U)" -#: graphicswin.cpp:98 +#: graphicswin.cpp:99 msgid "Dimensions in &Millimeters" msgstr "标注单位 mm (&M)" -#: graphicswin.cpp:99 +#: graphicswin.cpp:100 msgid "Dimensions in M&eters" msgstr "标注单位m (&E)" -#: graphicswin.cpp:100 +#: graphicswin.cpp:101 msgid "Dimensions in &Inches" msgstr "标准单位英寸 (&I)" #: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "" + +#: graphicswin.cpp:104 msgid "Show &Toolbar" msgstr "显示工具条(&T)" -#: graphicswin.cpp:103 +#: graphicswin.cpp:105 msgid "Show Property Bro&wser" msgstr "显示属性浏览器(&W)" -#: graphicswin.cpp:105 +#: graphicswin.cpp:107 msgid "&Full Screen" msgstr "全屏(&F)" -#: graphicswin.cpp:107 +#: graphicswin.cpp:109 msgid "&New Group" msgstr "新组合(&N)" -#: graphicswin.cpp:108 +#: graphicswin.cpp:110 msgid "Sketch In &3d" msgstr "在三维内绘制(&3)" -#: graphicswin.cpp:109 +#: graphicswin.cpp:111 msgid "Sketch In New &Workplane" msgstr "在新工作面绘制(&W)" -#: graphicswin.cpp:111 +#: graphicswin.cpp:113 msgid "Step &Translating" msgstr "移动(&T)" -#: graphicswin.cpp:112 +#: graphicswin.cpp:114 msgid "Step &Rotating" msgstr "旋转(&R)" -#: graphicswin.cpp:114 +#: graphicswin.cpp:116 msgid "E&xtrude" msgstr "挤出(&E)" -#: graphicswin.cpp:115 +#: graphicswin.cpp:117 msgid "&Helix" msgstr "螺旋(&H)" -#: graphicswin.cpp:116 +#: graphicswin.cpp:118 msgid "&Lathe" msgstr "扫略(&L)" -#: graphicswin.cpp:117 +#: graphicswin.cpp:119 msgid "Re&volve" msgstr "旋转(&V)" -#: graphicswin.cpp:119 +#: graphicswin.cpp:121 msgid "Link / Assemble..." msgstr "链接/装配..." -#: graphicswin.cpp:120 +#: graphicswin.cpp:122 msgid "Link Recent" msgstr "连接最近文件" -#: graphicswin.cpp:122 +#: graphicswin.cpp:124 msgid "&Sketch" msgstr "绘图(&S)" -#: graphicswin.cpp:123 +#: graphicswin.cpp:125 msgid "In &Workplane" msgstr "在工作平面(&W)" -#: graphicswin.cpp:124 +#: graphicswin.cpp:126 msgid "Anywhere In &3d" msgstr "在3D的任何位置(&3)" -#: graphicswin.cpp:126 +#: graphicswin.cpp:128 msgid "Datum &Point" msgstr "基准点(&P)" -#: graphicswin.cpp:127 +#: graphicswin.cpp:129 msgid "&Workplane" msgstr "工作面(&W)" -#: graphicswin.cpp:129 +#: graphicswin.cpp:131 msgid "Line &Segment" msgstr "线段(&S)" -#: graphicswin.cpp:130 +#: graphicswin.cpp:132 msgid "C&onstruction Line Segment" msgstr "构造线段(&C)" -#: graphicswin.cpp:131 +#: graphicswin.cpp:133 msgid "&Rectangle" msgstr "矩形(&R)" -#: graphicswin.cpp:132 +#: graphicswin.cpp:134 msgid "&Circle" msgstr "圆线(&C)" -#: graphicswin.cpp:133 +#: graphicswin.cpp:135 msgid "&Arc of a Circle" msgstr "圆弧(&A)" -#: graphicswin.cpp:134 +#: graphicswin.cpp:136 msgid "&Bezier Cubic Spline" msgstr "立方体线的贝塞尔曲线(&B)" -#: graphicswin.cpp:136 +#: graphicswin.cpp:138 msgid "&Text in TrueType Font" msgstr "TrueTyoe字体文字(&T)" -#: graphicswin.cpp:137 +#: graphicswin.cpp:139 msgid "&Image" msgstr "图片(&I)" -#: graphicswin.cpp:139 +#: graphicswin.cpp:141 msgid "To&ggle Construction" msgstr "切换构造(&G)" -#: graphicswin.cpp:140 +#: graphicswin.cpp:142 msgid "Tangent &Arc at Point" msgstr "弧线切线点(&A)" -#: graphicswin.cpp:141 +#: graphicswin.cpp:143 msgid "Split Curves at &Intersection" msgstr "在交叉处拆分曲线(&I)" -#: graphicswin.cpp:143 +#: graphicswin.cpp:145 msgid "&Constrain" msgstr "约束(&C)" -#: graphicswin.cpp:144 +#: graphicswin.cpp:146 msgid "&Distance / Diameter" msgstr "距离/直径(&D)" -#: graphicswin.cpp:145 +#: graphicswin.cpp:147 msgid "Re&ference Dimension" msgstr "参考标注(&F)" -#: graphicswin.cpp:146 +#: graphicswin.cpp:148 msgid "A&ngle" msgstr "角度(&A)" -#: graphicswin.cpp:147 +#: graphicswin.cpp:149 msgid "Reference An&gle" msgstr "参考角度(&G)" -#: graphicswin.cpp:148 +#: graphicswin.cpp:150 msgid "Other S&upplementary Angle" msgstr "其它增补角度(&U)" -#: graphicswin.cpp:149 +#: graphicswin.cpp:151 msgid "Toggle R&eference Dim" msgstr "切换参考标注(&E)" -#: graphicswin.cpp:151 +#: graphicswin.cpp:153 msgid "&Horizontal" msgstr "水平约束(&H)" -#: graphicswin.cpp:152 +#: graphicswin.cpp:154 msgid "&Vertical" msgstr "垂直约束(&V)" -#: graphicswin.cpp:154 +#: graphicswin.cpp:156 msgid "&On Point / Curve / Plane" msgstr "在点线面(&O)" -#: graphicswin.cpp:155 +#: graphicswin.cpp:157 msgid "E&qual Length / Radius / Angle" msgstr "等于/长度/半径/角度(&Q)" -#: graphicswin.cpp:156 -msgid "Length Ra&tio" -msgstr "长度比例(&T)" - -#: graphicswin.cpp:157 -msgid "Length Diff&erence" -msgstr "长度偏差(&E)" - #: graphicswin.cpp:158 +msgid "Length / Arc Ra&tio" +msgstr "" + +#: graphicswin.cpp:159 +msgid "Length / Arc Diff&erence" +msgstr "" + +#: graphicswin.cpp:160 msgid "At &Midpoint" msgstr "在中点(&M)" -#: graphicswin.cpp:159 +#: graphicswin.cpp:161 msgid "S&ymmetric" msgstr "对称(&Y)" -#: graphicswin.cpp:160 +#: graphicswin.cpp:162 msgid "Para&llel / Tangent" msgstr "水平/切线(&L)" -#: graphicswin.cpp:161 +#: graphicswin.cpp:163 msgid "&Perpendicular" msgstr "垂直的(&P)" -#: graphicswin.cpp:162 +#: graphicswin.cpp:164 msgid "Same Orient&ation" msgstr "相同方向(&A)" -#: graphicswin.cpp:163 +#: graphicswin.cpp:165 msgid "Lock Point Where &Dragged" msgstr "锁定点位置(&D)" -#: graphicswin.cpp:165 +#: graphicswin.cpp:167 msgid "Comment" msgstr "备注" -#: graphicswin.cpp:167 +#: graphicswin.cpp:169 msgid "&Analyze" msgstr "分析(&A)" -#: graphicswin.cpp:168 +#: graphicswin.cpp:170 msgid "Measure &Volume" msgstr "测量体积(&V)" -#: graphicswin.cpp:169 +#: graphicswin.cpp:171 msgid "Measure A&rea" msgstr "测量面积(&R)" -#: graphicswin.cpp:170 +#: graphicswin.cpp:172 msgid "Measure &Perimeter" msgstr "测量周长(&P)" -#: graphicswin.cpp:171 +#: graphicswin.cpp:173 msgid "Show &Interfering Parts" msgstr "显示干涉零件(&I)" -#: graphicswin.cpp:172 +#: graphicswin.cpp:174 msgid "Show &Naked Edges" msgstr "显示孤立边(&N)" -#: graphicswin.cpp:173 +#: graphicswin.cpp:175 msgid "Show &Center of Mass" msgstr "显示中心(&C)" -#: graphicswin.cpp:175 +#: graphicswin.cpp:177 msgid "Show &Underconstrained Points" msgstr "显示无效约束点(&U)" -#: graphicswin.cpp:177 +#: graphicswin.cpp:179 msgid "&Trace Point" msgstr "跟踪点(&T)" -#: graphicswin.cpp:178 +#: graphicswin.cpp:180 msgid "&Stop Tracing..." msgstr "停止跟踪(&S)" -#: graphicswin.cpp:179 +#: graphicswin.cpp:181 msgid "Step &Dimension..." msgstr "逐步标注(&D)" -#: graphicswin.cpp:181 +#: graphicswin.cpp:183 msgid "&Help" msgstr "帮助(&H)" -#: graphicswin.cpp:182 +#: graphicswin.cpp:184 msgid "&Language" msgstr "语言(&L)" -#: graphicswin.cpp:183 +#: graphicswin.cpp:185 msgid "&Website / Manual" msgstr "网页/手册(&W)" -#: graphicswin.cpp:185 +#: graphicswin.cpp:187 msgid "&About" msgstr "关于(&A)" -#: graphicswin.cpp:355 +#: graphicswin.cpp:361 msgid "(no recent files)" msgstr "(无文件)" -#: graphicswin.cpp:363 +#: graphicswin.cpp:369 #, c-format msgid "File '%s' does not exist." msgstr "文件不存在: \"%s\"。" -#: graphicswin.cpp:725 +#: graphicswin.cpp:736 msgid "No workplane is active, so the grid will not appear." msgstr "没有激活的工作面,因此无法显示轴网。" -#: graphicswin.cpp:740 +#: graphicswin.cpp:751 msgid "" "The perspective factor is set to zero, so the view will always be a parallel " "projection.\n" @@ -1081,91 +1111,91 @@ msgid "" "configuration screen. A value around 0.3 is typical." msgstr "" -#: graphicswin.cpp:819 +#: graphicswin.cpp:836 msgid "" "Select a point; this point will become the center of the view on screen." msgstr "" -#: graphicswin.cpp:1114 +#: graphicswin.cpp:1136 msgid "No additional entities share endpoints with the selected entities." msgstr "" -#: graphicswin.cpp:1132 +#: graphicswin.cpp:1154 msgid "" "To use this command, select a point or other entity from an linked part, or " "make a link group the active group." msgstr "" -#: graphicswin.cpp:1155 +#: graphicswin.cpp:1177 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) " "to define the plane for the snap grid." msgstr "" -#: graphicswin.cpp:1162 +#: graphicswin.cpp:1184 msgid "" "Can't snap these items to grid; select points, text comments, or constraints " "with a label. To snap a line, select its endpoints." msgstr "" -#: graphicswin.cpp:1247 +#: graphicswin.cpp:1269 msgid "No workplane selected. Activating default workplane for this group." msgstr "" -#: graphicswin.cpp:1250 +#: graphicswin.cpp:1272 msgid "" "No workplane is selected, and the active group does not have a default " "workplane. Try selecting a workplane, or activating a sketch-in-new-" "workplane group." msgstr "" -#: graphicswin.cpp:1271 +#: graphicswin.cpp:1293 msgid "" "Bad selection for tangent arc at point. Select a single point, or select " "nothing to set up arc parameters." msgstr "" -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1304 msgid "click point on arc (draws anti-clockwise)" msgstr "点击弧线的点(逆时针方向绘制)" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1305 msgid "click to place datum point" msgstr "点击放置基准点" -#: graphicswin.cpp:1284 +#: graphicswin.cpp:1306 msgid "click first point of line segment" msgstr "点击线条的起点" -#: graphicswin.cpp:1286 +#: graphicswin.cpp:1308 msgid "click first point of construction line segment" msgstr "点击构造线的起点" -#: graphicswin.cpp:1287 +#: graphicswin.cpp:1309 msgid "click first point of cubic segment" msgstr "点击立方体的起点" -#: graphicswin.cpp:1288 +#: graphicswin.cpp:1310 msgid "click center of circle" msgstr "点击圆弧的中心" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1311 msgid "click origin of workplane" msgstr "点击工作面的原点" -#: graphicswin.cpp:1290 +#: graphicswin.cpp:1312 msgid "click one corner of rectangle" msgstr "点击一个矩形倒角" -#: graphicswin.cpp:1291 +#: graphicswin.cpp:1313 msgid "click top left of text" msgstr "点击文字左上角" -#: graphicswin.cpp:1297 +#: graphicswin.cpp:1319 msgid "click top left of image" msgstr "点击图片左上角" -#: graphicswin.cpp:1309 +#: graphicswin.cpp:1345 msgid "" "No entities are selected. Select entities before trying to toggle their " "construction state." @@ -1176,37 +1206,33 @@ msgctxt "group-name" msgid "sketch-in-3d" msgstr "3D草图" -#: group.cpp:142 +#: group.cpp:150 msgid "" "Bad selection for new sketch in workplane. This group can be created with:\n" "\n" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, parallel to the " "lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" msgstr "" -"在新工作面内绘图选择失败,该组可以使用:\n" -"\n" -" * 一个点(通过该点,正交至坐标轴)\n" -" * 一个点和二个线段(通过点,绘制平行线至线段)\n" -" * 一个工作面(复制工作面)\n" -#: group.cpp:154 +#: group.cpp:166 msgid "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " "will be extruded normal to the workplane." msgstr "挤出前先激活工作面(草图->在工作面),该草图将由工作面的法线方向挤出。" -#: group.cpp:163 +#: group.cpp:175 msgctxt "group-name" msgid "extrude" msgstr "挤出" -#: group.cpp:168 +#: group.cpp:180 msgid "Lathe operation can only be applied to planar sketches." msgstr "扫略操作仅可用于二维草图。" -#: group.cpp:179 +#: group.cpp:191 msgid "" "Bad selection for new lathe group. This group can be created with:\n" "\n" @@ -1219,16 +1245,16 @@ msgstr "" " * 一个点和一个线段或法线(围绕坐标轴至线或法线的平行线,通过点)\n" " * 一个线段(围绕线段)\n" -#: group.cpp:189 +#: group.cpp:201 msgctxt "group-name" msgid "lathe" msgstr "扫略" -#: group.cpp:194 +#: group.cpp:206 msgid "Revolve operation can only be applied to planar sketches." msgstr "" -#: group.cpp:205 +#: group.cpp:217 msgid "" "Bad selection for new revolve group. This group can be created with:\n" "\n" @@ -1237,16 +1263,16 @@ msgid "" " * a line segment (revolved about line segment)\n" msgstr "" -#: group.cpp:217 +#: group.cpp:229 msgctxt "group-name" msgid "revolve" msgstr "旋转" -#: group.cpp:222 +#: group.cpp:234 msgid "Helix operation can only be applied to planar sketches." msgstr "" -#: group.cpp:233 +#: group.cpp:245 msgid "" "Bad selection for new helix group. This group can be created with:\n" "\n" @@ -1255,12 +1281,12 @@ msgid "" " * a line segment (revolved about line segment)\n" msgstr "" -#: group.cpp:245 +#: group.cpp:257 msgctxt "group-name" msgid "helix" msgstr "螺旋" -#: group.cpp:258 +#: group.cpp:270 msgid "" "Bad selection for new rotation. This group can be created with:\n" "\n" @@ -1270,428 +1296,434 @@ msgid "" "point, and parallel to line / normal)\n" msgstr "" -#: group.cpp:271 +#: group.cpp:283 msgctxt "group-name" msgid "rotate" msgstr "旋转" -#: group.cpp:282 +#: group.cpp:294 msgctxt "group-name" msgid "translate" msgstr "移动" -#: group.cpp:400 +#: group.cpp:416 msgid "(unnamed)" msgstr "(未命名)" -#: groupmesh.cpp:709 +#: groupmesh.cpp:707 msgid "not closed contour, or not all same style!" msgstr "未闭合轮廓 , 或样式不一致!" -#: groupmesh.cpp:722 +#: groupmesh.cpp:720 msgid "points not all coplanar!" msgstr "点不在相同平面!" -#: groupmesh.cpp:724 +#: groupmesh.cpp:722 msgid "contour is self-intersecting!" msgstr "轮廓自相交!" -#: groupmesh.cpp:726 +#: groupmesh.cpp:724 msgid "zero-length edge!" msgstr "边缘长度为零!" -#: modify.cpp:254 +#: modify.cpp:252 msgid "Must be sketching in workplane to create tangent arc." msgstr "" -#: modify.cpp:301 +#: modify.cpp:299 msgid "" "To create a tangent arc, select a point where two non-construction lines or " "circles in this group and workplane join." msgstr "" -#: modify.cpp:388 +#: modify.cpp:386 msgid "" "Couldn't round this corner. Try a smaller radius, or try creating the " "desired geometry by hand with tangency constraints." msgstr "" -#: modify.cpp:597 +#: modify.cpp:595 msgid "Couldn't split this entity; lines, circles, or cubics only." msgstr "" -#: modify.cpp:624 +#: modify.cpp:622 msgid "Must be sketching in workplane to split." msgstr "" -#: modify.cpp:631 +#: modify.cpp:629 msgid "" "Select two entities that intersect each other (e.g. two lines/circles/arcs " "or a line/circle/arc and a point)." msgstr "" -#: modify.cpp:736 +#: modify.cpp:734 msgid "Can't split; no intersection found." msgstr "无法拆分;未发现较差点。" -#: mouse.cpp:559 +#: mouse.cpp:557 msgid "Assign to Style" msgstr "指定样式" -#: mouse.cpp:575 +#: mouse.cpp:573 msgid "No Style" msgstr "无样式" -#: mouse.cpp:578 +#: mouse.cpp:576 msgid "Newly Created Custom Style..." msgstr "新组样式。" -#: mouse.cpp:585 +#: mouse.cpp:583 msgid "Group Info" msgstr "组信息" -#: mouse.cpp:605 +#: mouse.cpp:603 msgid "Style Info" msgstr "样式信息" -#: mouse.cpp:625 +#: mouse.cpp:623 msgid "Select Edge Chain" msgstr "选择边缘链" -#: mouse.cpp:631 +#: mouse.cpp:629 msgid "Toggle Reference Dimension" msgstr "切换参考标注" -#: mouse.cpp:637 +#: mouse.cpp:635 msgid "Other Supplementary Angle" msgstr "其它补充角度" -#: mouse.cpp:642 +#: mouse.cpp:640 msgid "Snap to Grid" msgstr "捕捉至轴网" -#: mouse.cpp:651 +#: mouse.cpp:649 msgid "Remove Spline Point" msgstr "删除样条线的点" -#: mouse.cpp:686 +#: mouse.cpp:684 msgid "Add Spline Point" msgstr "增加样条线的点" -#: mouse.cpp:690 +#: mouse.cpp:688 msgid "Cannot add spline point: maximum number of points reached." msgstr "无法增加样条线点:超过最大限制。" -#: mouse.cpp:715 +#: mouse.cpp:713 msgid "Toggle Construction" msgstr "切换构造" -#: mouse.cpp:730 +#: mouse.cpp:729 msgid "Delete Point-Coincident Constraint" msgstr "删除点一致约束" -#: mouse.cpp:749 +#: mouse.cpp:747 msgid "Cut" msgstr "剪切" -#: mouse.cpp:751 +#: mouse.cpp:749 msgid "Copy" msgstr "复制" -#: mouse.cpp:755 +#: mouse.cpp:753 msgid "Select All" msgstr "全选" -#: mouse.cpp:760 +#: mouse.cpp:758 msgid "Paste" msgstr "粘贴" -#: mouse.cpp:762 +#: mouse.cpp:760 msgid "Paste Transformed..." msgstr "粘贴移动的..." -#: mouse.cpp:767 +#: mouse.cpp:765 msgid "Delete" msgstr "删除" -#: mouse.cpp:770 +#: mouse.cpp:768 msgid "Unselect All" msgstr "取消全选" -#: mouse.cpp:777 +#: mouse.cpp:775 msgid "Unselect Hovered" msgstr "取消覆盖区域的全选" -#: mouse.cpp:786 +#: mouse.cpp:784 msgid "Zoom to Fit" msgstr "自动缩放" -#: mouse.cpp:988 mouse.cpp:1275 +#: mouse.cpp:986 mouse.cpp:1274 msgid "click next point of line, or press Esc" msgstr "点击下一个点或取消(ESC)" -#: mouse.cpp:994 +#: mouse.cpp:992 msgid "" "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "无法在3D内绘制矩形; 首先,激活工作面,草图->在工作面。" -#: mouse.cpp:1028 +#: mouse.cpp:1026 msgid "click to place other corner of rectangle" msgstr "点击放置其它矩形倒角" -#: mouse.cpp:1048 +#: mouse.cpp:1047 msgid "click to set radius" msgstr "点击设置半径" -#: mouse.cpp:1053 +#: mouse.cpp:1052 msgid "" "Can't draw arc in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "无法在3D空间内绘制弧线,可使用 草图->在工作面 激活工作面。" -#: mouse.cpp:1072 +#: mouse.cpp:1071 msgid "click to place point" msgstr "点击放置点" -#: mouse.cpp:1088 +#: mouse.cpp:1087 msgid "click next point of cubic, or press Esc" msgstr "点击下一个点或取消(ESC)" -#: mouse.cpp:1093 +#: mouse.cpp:1092 msgid "" "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "已经在工作面绘制;在新建工作面前在三维空间绘制。" -#: mouse.cpp:1109 +#: mouse.cpp:1108 msgid "" "Can't draw text in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "无法在三维空间内绘制文字,可使用 草图->在工作面 激活工作面。" -#: mouse.cpp:1126 +#: mouse.cpp:1125 msgid "click to place bottom right of text" msgstr "点击文字的右下角放置" -#: mouse.cpp:1132 +#: mouse.cpp:1131 msgid "" "Can't draw image in 3d; first, activate a workplane with Sketch -> In " "Workplane." msgstr "无法在三维空间内绘制图片,可使用 草图->在工作面 激活工作面。" -#: mouse.cpp:1159 -msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -msgstr "新备注 - 双击编辑" - -#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552 msgctxt "file-type" msgid "SolveSpace models" msgstr "SolveSpace模型" -#: platform/gui.cpp:90 +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "" + +#: platform/gui.cpp:91 msgctxt "file-type" msgid "IDF circuit board" msgstr "" -#: platform/gui.cpp:94 +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "" + +#: platform/gui.cpp:96 msgctxt "file-type" msgid "PNG image" msgstr "PNG图片" -#: platform/gui.cpp:98 +#: platform/gui.cpp:100 msgctxt "file-type" msgid "STL mesh" msgstr "STL网格" -#: platform/gui.cpp:99 +#: platform/gui.cpp:101 msgctxt "file-type" msgid "Wavefront OBJ mesh" msgstr "Wavefront OBJ网格" -#: platform/gui.cpp:100 +#: platform/gui.cpp:102 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" msgstr "Three.js-网格及查看视图" -#: platform/gui.cpp:101 +#: platform/gui.cpp:103 msgctxt "file-type" msgid "Three.js-compatible mesh, mesh only" msgstr "Three.js-仅网格" -#: platform/gui.cpp:102 +#: platform/gui.cpp:104 msgctxt "file-type" msgid "VRML text file" msgstr "VRML文本文件" -#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 msgctxt "file-type" msgid "STEP file" msgstr "STEP文件" -#: platform/gui.cpp:110 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "PDF file" msgstr "PDF文件" -#: platform/gui.cpp:111 +#: platform/gui.cpp:113 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "封装好的PostScript" -#: platform/gui.cpp:112 +#: platform/gui.cpp:114 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "SVG矢量图" -#: platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:116 platform/gui.cpp:123 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "DXF文件(AutoCAD 2007)" -#: platform/gui.cpp:115 +#: platform/gui.cpp:117 msgctxt "file-type" msgid "HPGL file" msgstr "HPGL文件" -#: platform/gui.cpp:116 +#: platform/gui.cpp:118 msgctxt "file-type" msgid "G Code" msgstr "G Code" -#: platform/gui.cpp:125 +#: platform/gui.cpp:127 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "AutoCAD DXF/DWG文件" -#: platform/gui.cpp:129 +#: platform/gui.cpp:131 msgctxt "file-type" msgid "Comma-separated values" msgstr "逗号分隔数据" -#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641 msgid "untitled" msgstr "未命名" -#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 -#: platform/guiwin.cpp:1582 +#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445 +#: platform/guiwin.cpp:1639 msgctxt "title" msgid "Save File" msgstr "保存文件" -#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 -#: platform/guiwin.cpp:1584 +#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428 +#: platform/guiwin.cpp:1645 msgctxt "title" msgid "Open File" msgstr "打开文件" -#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418 msgctxt "button" msgid "_Cancel" msgstr "取消_C" -#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416 msgctxt "button" msgid "_Save" msgstr "保存_S" -#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417 msgctxt "button" msgid "_Open" msgstr "打开_O" -#: solvespace.cpp:169 +#: solvespace.cpp:170 msgctxt "title" msgid "Autosave Available" msgstr "" -#: solvespace.cpp:170 +#: solvespace.cpp:171 msgctxt "dialog" msgid "An autosave file is available for this sketch." msgstr "" -#: solvespace.cpp:171 +#: solvespace.cpp:172 msgctxt "dialog" msgid "Do you want to load the autosave file instead?" msgstr "" -#: solvespace.cpp:172 +#: solvespace.cpp:173 msgctxt "button" msgid "&Load autosave" msgstr "" -#: solvespace.cpp:174 +#: solvespace.cpp:175 msgctxt "button" msgid "Do&n't Load" msgstr "" -#: solvespace.cpp:557 +#: solvespace.cpp:598 msgctxt "title" msgid "Modified File" msgstr "" -#: solvespace.cpp:559 +#: solvespace.cpp:600 #, c-format msgctxt "dialog" msgid "Do you want to save the changes you made to the sketch “%s”?" msgstr "" -#: solvespace.cpp:562 +#: solvespace.cpp:603 msgctxt "dialog" msgid "Do you want to save the changes you made to the new sketch?" msgstr "" -#: solvespace.cpp:565 +#: solvespace.cpp:606 msgctxt "dialog" msgid "Your changes will be lost if you don't save them." msgstr "" -#: solvespace.cpp:566 +#: solvespace.cpp:607 msgctxt "button" msgid "&Save" msgstr "" -#: solvespace.cpp:568 +#: solvespace.cpp:609 msgctxt "button" msgid "Do&n't Save" msgstr "" -#: solvespace.cpp:589 +#: solvespace.cpp:630 msgctxt "title" msgid "(new sketch)" msgstr "" -#: solvespace.cpp:596 +#: solvespace.cpp:637 msgctxt "title" msgid "Property Browser" msgstr "" -#: solvespace.cpp:658 +#: solvespace.cpp:699 msgid "" "Constraints are currently shown, and will be exported in the toolpath. This " "is probably not what you want; hide them by clicking the link at the top of " "the text window." msgstr "" -#: solvespace.cpp:730 +#: solvespace.cpp:771 #, c-format msgid "" "Can't identify file type from file extension of filename '%s'; try .dxf or ." "dwg." msgstr "" -#: solvespace.cpp:778 +#: solvespace.cpp:823 msgid "Constraint must have a label, and must not be a reference dimension." msgstr "" -#: solvespace.cpp:782 +#: solvespace.cpp:827 msgid "Bad selection for step dimension; select a constraint." msgstr "" -#: solvespace.cpp:806 +#: solvespace.cpp:851 msgid "The assembly does not interfere, good." msgstr "" -#: solvespace.cpp:822 +#: solvespace.cpp:867 #, c-format msgid "" "The volume of the solid model is:\n" @@ -1699,7 +1731,7 @@ msgid "" " %s" msgstr "" -#: solvespace.cpp:831 +#: solvespace.cpp:876 #, c-format msgid "" "\n" @@ -1708,7 +1740,7 @@ msgid "" " %s" msgstr "" -#: solvespace.cpp:836 +#: solvespace.cpp:881 msgid "" "\n" "\n" @@ -1716,7 +1748,7 @@ msgid "" "This introduces error, typically of around 1%." msgstr "" -#: solvespace.cpp:851 +#: solvespace.cpp:896 #, c-format msgid "" "The surface area of the selected faces is:\n" @@ -1727,13 +1759,13 @@ msgid "" "This introduces error, typically of around 1%%." msgstr "" -#: solvespace.cpp:860 +#: solvespace.cpp:905 msgid "" "This group does not contain a correctly-formed 2d closed area. It is open, " "not coplanar, or self-intersecting." msgstr "" -#: solvespace.cpp:872 +#: solvespace.cpp:917 #, c-format msgid "" "The area of the region sketched in this group is:\n" @@ -1744,7 +1776,7 @@ msgid "" "This introduces error, typically of around 1%%." msgstr "" -#: solvespace.cpp:892 +#: solvespace.cpp:937 #, c-format msgid "" "The total length of the selected entities is:\n" @@ -1755,36 +1787,36 @@ msgid "" "This introduces error, typically of around 1%%." msgstr "" -#: solvespace.cpp:898 +#: solvespace.cpp:943 msgid "Bad selection for perimeter; select line segments, arcs, and curves." msgstr "" -#: solvespace.cpp:914 +#: solvespace.cpp:959 msgid "Bad selection for trace; select a single point." msgstr "" -#: solvespace.cpp:941 +#: solvespace.cpp:986 #, c-format msgid "Couldn't write to '%s'" msgstr "" -#: solvespace.cpp:971 +#: solvespace.cpp:1016 msgid "The mesh is self-intersecting (NOT okay, invalid)." msgstr "" -#: solvespace.cpp:972 +#: solvespace.cpp:1017 msgid "The mesh is not self-intersecting (okay, valid)." msgstr "" -#: solvespace.cpp:974 +#: solvespace.cpp:1019 msgid "The mesh has naked edges (NOT okay, invalid)." msgstr "" -#: solvespace.cpp:975 +#: solvespace.cpp:1020 msgid "The mesh is watertight (okay, valid)." msgstr "" -#: solvespace.cpp:978 +#: solvespace.cpp:1023 #, c-format msgid "" "\n" @@ -1792,7 +1824,7 @@ msgid "" "The model contains %d triangles, from %d surfaces." msgstr "" -#: solvespace.cpp:982 +#: solvespace.cpp:1027 #, c-format msgid "" "%s\n" @@ -1802,7 +1834,7 @@ msgid "" "Zero problematic edges, good.%s" msgstr "" -#: solvespace.cpp:985 +#: solvespace.cpp:1030 #, c-format msgid "" "%s\n" @@ -1812,7 +1844,7 @@ msgid "" "%d problematic edges, bad.%s" msgstr "" -#: solvespace.cpp:998 +#: solvespace.cpp:1043 #, c-format msgid "" "This is SolveSpace version %s.\n" @@ -1829,33 +1861,33 @@ msgid "" "© 2008-%d Jonathan Westhues and other authors.\n" msgstr "" -#: style.cpp:166 +#: style.cpp:185 msgid "" "Can't assign style to an entity that's derived from another entity; try " "assigning a style to this entity's parent." msgstr "无法将样式分配给派生自其他实体的实体;尝试将样式分配给此实体的父级。" -#: style.cpp:665 +#: style.cpp:735 msgid "Style name cannot be empty" msgstr "样式名称不能为空" -#: textscreens.cpp:741 +#: textscreens.cpp:785 msgid "Can't repeat fewer than 1 time." msgstr "不能重复少于 1 次。" -#: textscreens.cpp:745 +#: textscreens.cpp:789 msgid "Can't repeat more than 999 times." msgstr "重复不超过 999 次。" -#: textscreens.cpp:770 +#: textscreens.cpp:814 msgid "Group name cannot be empty" msgstr "组名称不能为空" -#: textscreens.cpp:813 +#: textscreens.cpp:866 msgid "Opacity must be between zero and one." msgstr "不透明度必须在零和 1 之间。" -#: textscreens.cpp:848 +#: textscreens.cpp:901 msgid "Radius cannot be zero or negative." msgstr "半径偏移不能为负数。" @@ -2010,14 +2042,54 @@ msgctxt "button" msgid "&OK" msgstr "&OK" -#: view.cpp:78 +#: view.cpp:127 msgid "Scale cannot be zero or negative." msgstr "缩放不能为零。" -#: view.cpp:90 view.cpp:99 +#: view.cpp:139 view.cpp:148 msgid "Bad format: specify x, y, z" msgstr "格式错误: 需指定 x, y, z" +#~ msgid "" +#~ "Bad selection for length ratio constraint. This constraint can apply to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "长度比率约束的选择错误。此约束可应用于:\n" +#~ "\n" +#~ "* 两个线段\n" + +#~ msgid "" +#~ "Bad selection for length difference constraint. This constraint can apply " +#~ "to:\n" +#~ "\n" +#~ " * two line segments\n" +#~ msgstr "" +#~ "长度差异约束的选择错误。此约束可应用于:\n" +#~ "\n" +#~ "* 两个线段\n" + +#~ msgid "Length Ra&tio" +#~ msgstr "长度比例(&T)" + +#~ msgid "Length Diff&erence" +#~ msgstr "长度偏差(&E)" + +#~ msgid "" +#~ "Bad selection for new sketch in workplane. This group can be created " +#~ "with:\n" +#~ "\n" +#~ " * a point (through the point, orthogonal to coordinate axes)\n" +#~ " * a point and two line segments (through the point, parallel to the " +#~ "lines)\n" +#~ " * a workplane (copy of the workplane)\n" +#~ msgstr "" +#~ "在新工作面内绘图选择失败,该组可以使用:\n" +#~ "\n" +#~ " * 一个点(通过该点,正交至坐标轴)\n" +#~ " * 一个点和二个线段(通过点,绘制平行线至线段)\n" +#~ " * 一个工作面(复制工作面)\n" + #~ msgctxt "file-type" #~ msgid "Q3D Object file" #~ msgstr "Q3D对象文件" diff --git a/res/messages.pot b/res/messages.pot index 534faa40..25a6c1cf 100644 --- a/res/messages.pot +++ b/res/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2021-02-01 15:45+0200\n" +"POT-Creation-Date: 2021-09-26 16:25-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,76 +17,76 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: clipboard.cpp:310 +#: clipboard.cpp:309 msgid "" "Cut, paste, and copy work only in a workplane.\n" "\n" "Activate one with Sketch -> In Workplane." msgstr "" -#: clipboard.cpp:327 +#: clipboard.cpp:326 msgid "Clipboard is empty; nothing to paste." msgstr "" -#: clipboard.cpp:374 +#: clipboard.cpp:373 msgid "Number of copies to paste must be at least one." msgstr "" -#: clipboard.cpp:390 textscreens.cpp:783 +#: clipboard.cpp:389 textscreens.cpp:827 msgid "Scale cannot be zero." msgstr "" -#: clipboard.cpp:432 +#: clipboard.cpp:431 msgid "Select one point to define origin of rotation." msgstr "" -#: clipboard.cpp:444 +#: clipboard.cpp:443 msgid "Select two points to define translation vector." msgstr "" -#: clipboard.cpp:454 +#: clipboard.cpp:453 msgid "Transformation is identity. So all copies will be exactly on top of each other." msgstr "" -#: clipboard.cpp:458 +#: clipboard.cpp:457 msgid "Too many items to paste; split this into smaller pastes." msgstr "" -#: clipboard.cpp:463 +#: clipboard.cpp:462 msgid "No workplane active." msgstr "" -#: confscreen.cpp:418 +#: confscreen.cpp:376 msgid "Bad format: specify coordinates as x, y, z" msgstr "" -#: confscreen.cpp:428 style.cpp:659 textscreens.cpp:805 +#: confscreen.cpp:386 style.cpp:729 textscreens.cpp:858 msgid "Bad format: specify color as r, g, b" msgstr "" -#: confscreen.cpp:454 +#: confscreen.cpp:412 msgid "" "The perspective factor will have no effect until you enable View -> Use Perspective Projection." msgstr "" -#: confscreen.cpp:467 confscreen.cpp:477 +#: confscreen.cpp:430 confscreen.cpp:440 #, c-format msgid "Specify between 0 and %d digits after the decimal." msgstr "" -#: confscreen.cpp:489 +#: confscreen.cpp:452 msgid "Export scale must not be zero!" msgstr "" -#: confscreen.cpp:501 +#: confscreen.cpp:464 msgid "Cutter radius offset must not be negative!" msgstr "" -#: confscreen.cpp:555 +#: confscreen.cpp:518 msgid "Bad value: autosave interval should be positive" msgstr "" -#: confscreen.cpp:558 +#: confscreen.cpp:521 msgid "Bad format: specify interval in integral minutes" msgstr "" @@ -157,133 +157,153 @@ msgstr "" #: constraint.cpp:25 msgctxt "constr-name" -msgid "length-difference" +msgid "arc-arc-length-ratio" msgstr "" #: constraint.cpp:26 msgctxt "constr-name" -msgid "symmetric" +msgid "arc-line-length-ratio" msgstr "" #: constraint.cpp:27 msgctxt "constr-name" -msgid "symmetric-h" +msgid "length-difference" msgstr "" #: constraint.cpp:28 msgctxt "constr-name" -msgid "symmetric-v" +msgid "arc-arc-len-difference" msgstr "" #: constraint.cpp:29 msgctxt "constr-name" -msgid "symmetric-line" +msgid "arc-line-len-difference" msgstr "" #: constraint.cpp:30 msgctxt "constr-name" -msgid "at-midpoint" +msgid "symmetric" msgstr "" #: constraint.cpp:31 msgctxt "constr-name" -msgid "horizontal" +msgid "symmetric-h" msgstr "" #: constraint.cpp:32 msgctxt "constr-name" -msgid "vertical" +msgid "symmetric-v" msgstr "" #: constraint.cpp:33 msgctxt "constr-name" -msgid "diameter" +msgid "symmetric-line" msgstr "" #: constraint.cpp:34 msgctxt "constr-name" -msgid "pt-on-circle" +msgid "at-midpoint" msgstr "" #: constraint.cpp:35 msgctxt "constr-name" -msgid "same-orientation" +msgid "horizontal" msgstr "" #: constraint.cpp:36 msgctxt "constr-name" -msgid "angle" +msgid "vertical" msgstr "" #: constraint.cpp:37 msgctxt "constr-name" -msgid "parallel" +msgid "diameter" msgstr "" #: constraint.cpp:38 msgctxt "constr-name" -msgid "arc-line-tangent" +msgid "pt-on-circle" msgstr "" #: constraint.cpp:39 msgctxt "constr-name" -msgid "cubic-line-tangent" +msgid "same-orientation" msgstr "" #: constraint.cpp:40 msgctxt "constr-name" -msgid "curve-curve-tangent" +msgid "angle" msgstr "" #: constraint.cpp:41 msgctxt "constr-name" -msgid "perpendicular" +msgid "parallel" msgstr "" #: constraint.cpp:42 msgctxt "constr-name" -msgid "eq-radius" +msgid "arc-line-tangent" msgstr "" #: constraint.cpp:43 msgctxt "constr-name" -msgid "eq-angle" +msgid "cubic-line-tangent" msgstr "" #: constraint.cpp:44 msgctxt "constr-name" -msgid "eq-line-len-arc-len" +msgid "curve-curve-tangent" msgstr "" #: constraint.cpp:45 msgctxt "constr-name" -msgid "lock-where-dragged" +msgid "perpendicular" msgstr "" #: constraint.cpp:46 msgctxt "constr-name" +msgid "eq-radius" +msgstr "" + +#: constraint.cpp:47 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "" + +#: constraint.cpp:48 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "" + +#: constraint.cpp:49 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "" + +#: constraint.cpp:50 +msgctxt "constr-name" msgid "comment" msgstr "" -#: constraint.cpp:140 +#: constraint.cpp:144 msgid "" "The tangent arc and line segment must share an endpoint. Constrain them with Constrain -> On " "Point before constraining tangent." msgstr "" -#: constraint.cpp:158 +#: constraint.cpp:163 msgid "" "The tangent cubic and line segment must share an endpoint. Constrain them with Constrain -> On " "Point before constraining tangent." msgstr "" -#: constraint.cpp:183 +#: constraint.cpp:189 msgid "" "The curves must share an endpoint. Constrain them with Constrain -> On Point before constraining " "tangent." msgstr "" -#: constraint.cpp:231 +#: constraint.cpp:238 msgid "" "Bad selection for distance / diameter constraint. This constraint can apply to:\n" "\n" @@ -296,7 +316,7 @@ msgid "" " * a circle or an arc (diameter)\n" msgstr "" -#: constraint.cpp:284 +#: constraint.cpp:291 msgid "" "Bad selection for on point / curve / plane constraint. This constraint can apply to:\n" "\n" @@ -307,7 +327,7 @@ msgid "" " * a point and a plane face (point on face)\n" msgstr "" -#: constraint.cpp:346 +#: constraint.cpp:353 msgid "" "Bad selection for equal length / radius constraint. This constraint can apply to:\n" "\n" @@ -321,21 +341,25 @@ msgid "" " * a line segment and an arc (line segment length equals arc length)\n" msgstr "" -#: constraint.cpp:385 +#: constraint.cpp:407 msgid "" "Bad selection for length ratio constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -#: constraint.cpp:402 +#: constraint.cpp:441 msgid "" "Bad selection for length difference constraint. This constraint can apply to:\n" "\n" " * two line segments\n" +" * two arcs\n" +" * one arc and one line segment\n" msgstr "" -#: constraint.cpp:428 +#: constraint.cpp:472 msgid "" "Bad selection for at midpoint constraint. This constraint can apply to:\n" "\n" @@ -343,7 +367,7 @@ msgid "" " * a line segment and a workplane (line's midpoint on plane)\n" msgstr "" -#: constraint.cpp:486 +#: constraint.cpp:530 msgid "" "Bad selection for symmetric constraint. This constraint can apply to:\n" "\n" @@ -352,17 +376,17 @@ msgid "" " * workplane, and two points or a line segment (symmetric about workplane)\n" msgstr "" -#: constraint.cpp:500 +#: constraint.cpp:545 msgid "A workplane must be active when constraining symmetric without an explicit symmetry plane." msgstr "" -#: constraint.cpp:530 +#: constraint.cpp:579 msgid "" "Activate a workplane (with Sketch -> In Workplane) before applying a horizontal or vertical " "constraint." msgstr "" -#: constraint.cpp:543 +#: constraint.cpp:592 msgid "" "Bad selection for horizontal / vertical constraint. This constraint can apply to:\n" "\n" @@ -370,22 +394,22 @@ msgid "" " * a line segment\n" msgstr "" -#: constraint.cpp:564 +#: constraint.cpp:613 msgid "" "Bad selection for same orientation constraint. This constraint can apply to:\n" "\n" " * two normals\n" msgstr "" -#: constraint.cpp:614 +#: constraint.cpp:663 msgid "Must select an angle constraint." msgstr "" -#: constraint.cpp:627 +#: constraint.cpp:676 msgid "Must select a constraint with associated label." msgstr "" -#: constraint.cpp:638 +#: constraint.cpp:687 msgid "" "Bad selection for angle constraint. This constraint can apply to:\n" "\n" @@ -394,11 +418,11 @@ msgid "" " * two normals\n" msgstr "" -#: constraint.cpp:701 +#: constraint.cpp:754 msgid "Curve-curve tangency must apply in workplane." msgstr "" -#: constraint.cpp:711 +#: constraint.cpp:766 msgid "" "Bad selection for parallel / tangent constraint. This constraint can apply to:\n" "\n" @@ -408,7 +432,7 @@ msgid "" " * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" msgstr "" -#: constraint.cpp:729 +#: constraint.cpp:784 msgid "" "Bad selection for perpendicular constraint. This constraint can apply to:\n" "\n" @@ -417,14 +441,18 @@ msgid "" " * two normals\n" msgstr "" -#: constraint.cpp:744 +#: constraint.cpp:799 msgid "" "Bad selection for lock point where dragged constraint. This constraint can apply to:\n" "\n" " * a point\n" msgstr "" -#: constraint.cpp:755 +#: constraint.cpp:813 mouse.cpp:1158 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "" + +#: constraint.cpp:818 msgid "click center of comment text" msgstr "" @@ -443,23 +471,23 @@ msgid "" " * a point and two line segments (plane through point and parallel to lines)\n" msgstr "" -#: export.cpp:822 +#: export.cpp:818 msgid "Active group mesh is empty; nothing to export." msgstr "" -#: exportvector.cpp:337 +#: exportvector.cpp:336 msgid "freehand lines were replaced with continuous lines" msgstr "" -#: exportvector.cpp:339 +#: exportvector.cpp:338 msgid "zigzag lines were replaced with continuous lines" msgstr "" -#: exportvector.cpp:593 +#: exportvector.cpp:592 msgid "Some aspects of the drawing have no DXF equivalent and were not exported:\n" msgstr "" -#: exportvector.cpp:839 +#: exportvector.cpp:838 msgid "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." msgstr "" @@ -473,11 +501,11 @@ msgctxt "group-name" msgid "#references" msgstr "" -#: file.cpp:552 +#: file.cpp:550 msgid "The file is empty. It may be corrupt." msgstr "" -#: file.cpp:557 +#: file.cpp:555 msgid "Unrecognized data in file. This file may be corrupt, or from a newer version of the program." msgstr "" @@ -510,7 +538,7 @@ msgctxt "button" msgid "&No" msgstr "" -#: file.cpp:877 solvespace.cpp:569 +#: file.cpp:877 solvespace.cpp:610 msgctxt "button" msgid "&Cancel" msgstr "" @@ -684,295 +712,303 @@ msgid "Use &Perspective Projection" msgstr "" #: graphicswin.cpp:97 -msgid "Dimension &Units" +msgid "Show E&xploded View" msgstr "" #: graphicswin.cpp:98 -msgid "Dimensions in &Millimeters" +msgid "Dimension &Units" msgstr "" #: graphicswin.cpp:99 -msgid "Dimensions in M&eters" +msgid "Dimensions in &Millimeters" msgstr "" #: graphicswin.cpp:100 +msgid "Dimensions in M&eters" +msgstr "" + +#: graphicswin.cpp:101 msgid "Dimensions in &Inches" msgstr "" #: graphicswin.cpp:102 +msgid "Dimensions in &Feet and Inches" +msgstr "" + +#: graphicswin.cpp:104 msgid "Show &Toolbar" msgstr "" -#: graphicswin.cpp:103 +#: graphicswin.cpp:105 msgid "Show Property Bro&wser" msgstr "" -#: graphicswin.cpp:105 +#: graphicswin.cpp:107 msgid "&Full Screen" msgstr "" -#: graphicswin.cpp:107 +#: graphicswin.cpp:109 msgid "&New Group" msgstr "" -#: graphicswin.cpp:108 +#: graphicswin.cpp:110 msgid "Sketch In &3d" msgstr "" -#: graphicswin.cpp:109 +#: graphicswin.cpp:111 msgid "Sketch In New &Workplane" msgstr "" -#: graphicswin.cpp:111 +#: graphicswin.cpp:113 msgid "Step &Translating" msgstr "" -#: graphicswin.cpp:112 +#: graphicswin.cpp:114 msgid "Step &Rotating" msgstr "" -#: graphicswin.cpp:114 +#: graphicswin.cpp:116 msgid "E&xtrude" msgstr "" -#: graphicswin.cpp:115 +#: graphicswin.cpp:117 msgid "&Helix" msgstr "" -#: graphicswin.cpp:116 +#: graphicswin.cpp:118 msgid "&Lathe" msgstr "" -#: graphicswin.cpp:117 +#: graphicswin.cpp:119 msgid "Re&volve" msgstr "" -#: graphicswin.cpp:119 +#: graphicswin.cpp:121 msgid "Link / Assemble..." msgstr "" -#: graphicswin.cpp:120 +#: graphicswin.cpp:122 msgid "Link Recent" msgstr "" -#: graphicswin.cpp:122 +#: graphicswin.cpp:124 msgid "&Sketch" msgstr "" -#: graphicswin.cpp:123 +#: graphicswin.cpp:125 msgid "In &Workplane" msgstr "" -#: graphicswin.cpp:124 +#: graphicswin.cpp:126 msgid "Anywhere In &3d" msgstr "" -#: graphicswin.cpp:126 +#: graphicswin.cpp:128 msgid "Datum &Point" msgstr "" -#: graphicswin.cpp:127 +#: graphicswin.cpp:129 msgid "&Workplane" msgstr "" -#: graphicswin.cpp:129 +#: graphicswin.cpp:131 msgid "Line &Segment" msgstr "" -#: graphicswin.cpp:130 +#: graphicswin.cpp:132 msgid "C&onstruction Line Segment" msgstr "" -#: graphicswin.cpp:131 +#: graphicswin.cpp:133 msgid "&Rectangle" msgstr "" -#: graphicswin.cpp:132 +#: graphicswin.cpp:134 msgid "&Circle" msgstr "" -#: graphicswin.cpp:133 +#: graphicswin.cpp:135 msgid "&Arc of a Circle" msgstr "" -#: graphicswin.cpp:134 +#: graphicswin.cpp:136 msgid "&Bezier Cubic Spline" msgstr "" -#: graphicswin.cpp:136 +#: graphicswin.cpp:138 msgid "&Text in TrueType Font" msgstr "" -#: graphicswin.cpp:137 +#: graphicswin.cpp:139 msgid "&Image" msgstr "" -#: graphicswin.cpp:139 +#: graphicswin.cpp:141 msgid "To&ggle Construction" msgstr "" -#: graphicswin.cpp:140 +#: graphicswin.cpp:142 msgid "Tangent &Arc at Point" msgstr "" -#: graphicswin.cpp:141 +#: graphicswin.cpp:143 msgid "Split Curves at &Intersection" msgstr "" -#: graphicswin.cpp:143 +#: graphicswin.cpp:145 msgid "&Constrain" msgstr "" -#: graphicswin.cpp:144 +#: graphicswin.cpp:146 msgid "&Distance / Diameter" msgstr "" -#: graphicswin.cpp:145 +#: graphicswin.cpp:147 msgid "Re&ference Dimension" msgstr "" -#: graphicswin.cpp:146 +#: graphicswin.cpp:148 msgid "A&ngle" msgstr "" -#: graphicswin.cpp:147 +#: graphicswin.cpp:149 msgid "Reference An&gle" msgstr "" -#: graphicswin.cpp:148 +#: graphicswin.cpp:150 msgid "Other S&upplementary Angle" msgstr "" -#: graphicswin.cpp:149 +#: graphicswin.cpp:151 msgid "Toggle R&eference Dim" msgstr "" -#: graphicswin.cpp:151 +#: graphicswin.cpp:153 msgid "&Horizontal" msgstr "" -#: graphicswin.cpp:152 +#: graphicswin.cpp:154 msgid "&Vertical" msgstr "" -#: graphicswin.cpp:154 +#: graphicswin.cpp:156 msgid "&On Point / Curve / Plane" msgstr "" -#: graphicswin.cpp:155 +#: graphicswin.cpp:157 msgid "E&qual Length / Radius / Angle" msgstr "" -#: graphicswin.cpp:156 -msgid "Length Ra&tio" -msgstr "" - -#: graphicswin.cpp:157 -msgid "Length Diff&erence" -msgstr "" - #: graphicswin.cpp:158 -msgid "At &Midpoint" +msgid "Length / Arc Ra&tio" msgstr "" #: graphicswin.cpp:159 -msgid "S&ymmetric" +msgid "Length / Arc Diff&erence" msgstr "" #: graphicswin.cpp:160 -msgid "Para&llel / Tangent" +msgid "At &Midpoint" msgstr "" #: graphicswin.cpp:161 -msgid "&Perpendicular" +msgid "S&ymmetric" msgstr "" #: graphicswin.cpp:162 -msgid "Same Orient&ation" +msgid "Para&llel / Tangent" msgstr "" #: graphicswin.cpp:163 -msgid "Lock Point Where &Dragged" +msgid "&Perpendicular" +msgstr "" + +#: graphicswin.cpp:164 +msgid "Same Orient&ation" msgstr "" #: graphicswin.cpp:165 -msgid "Comment" +msgid "Lock Point Where &Dragged" msgstr "" #: graphicswin.cpp:167 -msgid "&Analyze" -msgstr "" - -#: graphicswin.cpp:168 -msgid "Measure &Volume" +msgid "Comment" msgstr "" #: graphicswin.cpp:169 -msgid "Measure A&rea" +msgid "&Analyze" msgstr "" #: graphicswin.cpp:170 -msgid "Measure &Perimeter" +msgid "Measure &Volume" msgstr "" #: graphicswin.cpp:171 -msgid "Show &Interfering Parts" +msgid "Measure A&rea" msgstr "" #: graphicswin.cpp:172 -msgid "Show &Naked Edges" +msgid "Measure &Perimeter" msgstr "" #: graphicswin.cpp:173 -msgid "Show &Center of Mass" +msgid "Show &Interfering Parts" +msgstr "" + +#: graphicswin.cpp:174 +msgid "Show &Naked Edges" msgstr "" #: graphicswin.cpp:175 -msgid "Show &Underconstrained Points" +msgid "Show &Center of Mass" msgstr "" #: graphicswin.cpp:177 -msgid "&Trace Point" -msgstr "" - -#: graphicswin.cpp:178 -msgid "&Stop Tracing..." +msgid "Show &Underconstrained Points" msgstr "" #: graphicswin.cpp:179 -msgid "Step &Dimension..." +msgid "&Trace Point" +msgstr "" + +#: graphicswin.cpp:180 +msgid "&Stop Tracing..." msgstr "" #: graphicswin.cpp:181 -msgid "&Help" -msgstr "" - -#: graphicswin.cpp:182 -msgid "&Language" +msgid "Step &Dimension..." msgstr "" #: graphicswin.cpp:183 -msgid "&Website / Manual" +msgid "&Help" +msgstr "" + +#: graphicswin.cpp:184 +msgid "&Language" msgstr "" #: graphicswin.cpp:185 +msgid "&Website / Manual" +msgstr "" + +#: graphicswin.cpp:187 msgid "&About" msgstr "" -#: graphicswin.cpp:355 +#: graphicswin.cpp:361 msgid "(no recent files)" msgstr "" -#: graphicswin.cpp:363 +#: graphicswin.cpp:369 #, c-format msgid "File '%s' does not exist." msgstr "" -#: graphicswin.cpp:725 +#: graphicswin.cpp:736 msgid "No workplane is active, so the grid will not appear." msgstr "" -#: graphicswin.cpp:740 +#: graphicswin.cpp:751 msgid "" "The perspective factor is set to zero, so the view will always be a parallel projection.\n" "\n" @@ -980,89 +1016,89 @@ msgid "" "around 0.3 is typical." msgstr "" -#: graphicswin.cpp:819 +#: graphicswin.cpp:836 msgid "Select a point; this point will become the center of the view on screen." msgstr "" -#: graphicswin.cpp:1114 +#: graphicswin.cpp:1136 msgid "No additional entities share endpoints with the selected entities." msgstr "" -#: graphicswin.cpp:1132 +#: graphicswin.cpp:1154 msgid "" "To use this command, select a point or other entity from an linked part, or make a link group the " "active group." msgstr "" -#: graphicswin.cpp:1155 +#: graphicswin.cpp:1177 msgid "" "No workplane is active. Activate a workplane (with Sketch -> In Workplane) to define the plane " "for the snap grid." msgstr "" -#: graphicswin.cpp:1162 +#: graphicswin.cpp:1184 msgid "" "Can't snap these items to grid; select points, text comments, or constraints with a label. To " "snap a line, select its endpoints." msgstr "" -#: graphicswin.cpp:1247 +#: graphicswin.cpp:1269 msgid "No workplane selected. Activating default workplane for this group." msgstr "" -#: graphicswin.cpp:1250 +#: graphicswin.cpp:1272 msgid "" "No workplane is selected, and the active group does not have a default workplane. Try selecting a " "workplane, or activating a sketch-in-new-workplane group." msgstr "" -#: graphicswin.cpp:1271 +#: graphicswin.cpp:1293 msgid "" "Bad selection for tangent arc at point. Select a single point, or select nothing to set up arc " "parameters." msgstr "" -#: graphicswin.cpp:1282 +#: graphicswin.cpp:1304 msgid "click point on arc (draws anti-clockwise)" msgstr "" -#: graphicswin.cpp:1283 +#: graphicswin.cpp:1305 msgid "click to place datum point" msgstr "" -#: graphicswin.cpp:1284 +#: graphicswin.cpp:1306 msgid "click first point of line segment" msgstr "" -#: graphicswin.cpp:1286 +#: graphicswin.cpp:1308 msgid "click first point of construction line segment" msgstr "" -#: graphicswin.cpp:1287 +#: graphicswin.cpp:1309 msgid "click first point of cubic segment" msgstr "" -#: graphicswin.cpp:1288 +#: graphicswin.cpp:1310 msgid "click center of circle" msgstr "" -#: graphicswin.cpp:1289 +#: graphicswin.cpp:1311 msgid "click origin of workplane" msgstr "" -#: graphicswin.cpp:1290 +#: graphicswin.cpp:1312 msgid "click one corner of rectangle" msgstr "" -#: graphicswin.cpp:1291 +#: graphicswin.cpp:1313 msgid "click top left of text" msgstr "" -#: graphicswin.cpp:1297 +#: graphicswin.cpp:1319 msgid "click top left of image" msgstr "" -#: graphicswin.cpp:1309 +#: graphicswin.cpp:1345 msgid "No entities are selected. Select entities before trying to toggle their construction state." msgstr "" @@ -1071,31 +1107,32 @@ msgctxt "group-name" msgid "sketch-in-3d" msgstr "" -#: group.cpp:142 +#: group.cpp:150 msgid "" "Bad selection for new sketch in workplane. This group can be created with:\n" "\n" " * a point (through the point, orthogonal to coordinate axes)\n" " * a point and two line segments (through the point, parallel to the lines)\n" +" * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" msgstr "" -#: group.cpp:154 +#: group.cpp:166 msgid "" "Activate a workplane (Sketch -> In Workplane) before extruding. The sketch will be extruded " "normal to the workplane." msgstr "" -#: group.cpp:163 +#: group.cpp:175 msgctxt "group-name" msgid "extrude" msgstr "" -#: group.cpp:168 +#: group.cpp:180 msgid "Lathe operation can only be applied to planar sketches." msgstr "" -#: group.cpp:179 +#: group.cpp:191 msgid "" "Bad selection for new lathe group. This group can be created with:\n" "\n" @@ -1104,16 +1141,16 @@ msgid "" " * a line segment (revolved about line segment)\n" msgstr "" -#: group.cpp:189 +#: group.cpp:201 msgctxt "group-name" msgid "lathe" msgstr "" -#: group.cpp:194 +#: group.cpp:206 msgid "Revolve operation can only be applied to planar sketches." msgstr "" -#: group.cpp:205 +#: group.cpp:217 msgid "" "Bad selection for new revolve group. This group can be created with:\n" "\n" @@ -1122,16 +1159,16 @@ msgid "" " * a line segment (revolved about line segment)\n" msgstr "" -#: group.cpp:217 +#: group.cpp:229 msgctxt "group-name" msgid "revolve" msgstr "" -#: group.cpp:222 +#: group.cpp:234 msgid "Helix operation can only be applied to planar sketches." msgstr "" -#: group.cpp:233 +#: group.cpp:245 msgid "" "Bad selection for new helix group. This group can be created with:\n" "\n" @@ -1140,12 +1177,12 @@ msgid "" " * a line segment (revolved about line segment)\n" msgstr "" -#: group.cpp:245 +#: group.cpp:257 msgctxt "group-name" msgid "helix" msgstr "" -#: group.cpp:258 +#: group.cpp:270 msgid "" "Bad selection for new rotation. This group can be created with:\n" "\n" @@ -1154,416 +1191,422 @@ msgid "" "line / normal)\n" msgstr "" -#: group.cpp:271 +#: group.cpp:283 msgctxt "group-name" msgid "rotate" msgstr "" -#: group.cpp:282 +#: group.cpp:294 msgctxt "group-name" msgid "translate" msgstr "" -#: group.cpp:400 +#: group.cpp:416 msgid "(unnamed)" msgstr "" -#: groupmesh.cpp:709 +#: groupmesh.cpp:707 msgid "not closed contour, or not all same style!" msgstr "" -#: groupmesh.cpp:722 +#: groupmesh.cpp:720 msgid "points not all coplanar!" msgstr "" -#: groupmesh.cpp:724 +#: groupmesh.cpp:722 msgid "contour is self-intersecting!" msgstr "" -#: groupmesh.cpp:726 +#: groupmesh.cpp:724 msgid "zero-length edge!" msgstr "" -#: modify.cpp:254 +#: modify.cpp:252 msgid "Must be sketching in workplane to create tangent arc." msgstr "" -#: modify.cpp:301 +#: modify.cpp:299 msgid "" "To create a tangent arc, select a point where two non-construction lines or circles in this group " "and workplane join." msgstr "" -#: modify.cpp:388 +#: modify.cpp:386 msgid "" "Couldn't round this corner. Try a smaller radius, or try creating the desired geometry by hand " "with tangency constraints." msgstr "" -#: modify.cpp:597 +#: modify.cpp:595 msgid "Couldn't split this entity; lines, circles, or cubics only." msgstr "" -#: modify.cpp:624 +#: modify.cpp:622 msgid "Must be sketching in workplane to split." msgstr "" -#: modify.cpp:631 +#: modify.cpp:629 msgid "" "Select two entities that intersect each other (e.g. two lines/circles/arcs or a line/circle/arc " "and a point)." msgstr "" -#: modify.cpp:736 +#: modify.cpp:734 msgid "Can't split; no intersection found." msgstr "" -#: mouse.cpp:559 +#: mouse.cpp:557 msgid "Assign to Style" msgstr "" -#: mouse.cpp:575 +#: mouse.cpp:573 msgid "No Style" msgstr "" -#: mouse.cpp:578 +#: mouse.cpp:576 msgid "Newly Created Custom Style..." msgstr "" -#: mouse.cpp:585 +#: mouse.cpp:583 msgid "Group Info" msgstr "" -#: mouse.cpp:605 +#: mouse.cpp:603 msgid "Style Info" msgstr "" -#: mouse.cpp:625 +#: mouse.cpp:623 msgid "Select Edge Chain" msgstr "" -#: mouse.cpp:631 +#: mouse.cpp:629 msgid "Toggle Reference Dimension" msgstr "" -#: mouse.cpp:637 +#: mouse.cpp:635 msgid "Other Supplementary Angle" msgstr "" -#: mouse.cpp:642 +#: mouse.cpp:640 msgid "Snap to Grid" msgstr "" -#: mouse.cpp:651 +#: mouse.cpp:649 msgid "Remove Spline Point" msgstr "" -#: mouse.cpp:686 +#: mouse.cpp:684 msgid "Add Spline Point" msgstr "" -#: mouse.cpp:690 +#: mouse.cpp:688 msgid "Cannot add spline point: maximum number of points reached." msgstr "" -#: mouse.cpp:715 +#: mouse.cpp:713 msgid "Toggle Construction" msgstr "" -#: mouse.cpp:730 +#: mouse.cpp:729 msgid "Delete Point-Coincident Constraint" msgstr "" -#: mouse.cpp:749 +#: mouse.cpp:747 msgid "Cut" msgstr "" -#: mouse.cpp:751 +#: mouse.cpp:749 msgid "Copy" msgstr "" -#: mouse.cpp:755 +#: mouse.cpp:753 msgid "Select All" msgstr "" -#: mouse.cpp:760 +#: mouse.cpp:758 msgid "Paste" msgstr "" -#: mouse.cpp:762 +#: mouse.cpp:760 msgid "Paste Transformed..." msgstr "" -#: mouse.cpp:767 +#: mouse.cpp:765 msgid "Delete" msgstr "" -#: mouse.cpp:770 +#: mouse.cpp:768 msgid "Unselect All" msgstr "" -#: mouse.cpp:777 +#: mouse.cpp:775 msgid "Unselect Hovered" msgstr "" -#: mouse.cpp:786 +#: mouse.cpp:784 msgid "Zoom to Fit" msgstr "" -#: mouse.cpp:988 mouse.cpp:1275 +#: mouse.cpp:986 mouse.cpp:1274 msgid "click next point of line, or press Esc" msgstr "" -#: mouse.cpp:994 +#: mouse.cpp:992 msgid "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In Workplane." msgstr "" -#: mouse.cpp:1028 +#: mouse.cpp:1026 msgid "click to place other corner of rectangle" msgstr "" -#: mouse.cpp:1048 +#: mouse.cpp:1047 msgid "click to set radius" msgstr "" -#: mouse.cpp:1053 +#: mouse.cpp:1052 msgid "Can't draw arc in 3d; first, activate a workplane with Sketch -> In Workplane." msgstr "" -#: mouse.cpp:1072 +#: mouse.cpp:1071 msgid "click to place point" msgstr "" -#: mouse.cpp:1088 +#: mouse.cpp:1087 msgid "click next point of cubic, or press Esc" msgstr "" -#: mouse.cpp:1093 +#: mouse.cpp:1092 msgid "Sketching in a workplane already; sketch in 3d before creating new workplane." msgstr "" -#: mouse.cpp:1109 +#: mouse.cpp:1108 msgid "Can't draw text in 3d; first, activate a workplane with Sketch -> In Workplane." msgstr "" -#: mouse.cpp:1126 +#: mouse.cpp:1125 msgid "click to place bottom right of text" msgstr "" -#: mouse.cpp:1132 +#: mouse.cpp:1131 msgid "Can't draw image in 3d; first, activate a workplane with Sketch -> In Workplane." msgstr "" -#: mouse.cpp:1159 -msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" -msgstr "" - -#: platform/gui.cpp:85 platform/gui.cpp:89 solvespace.cpp:511 +#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:552 msgctxt "file-type" msgid "SolveSpace models" msgstr "" -#: platform/gui.cpp:90 +#: platform/gui.cpp:89 +msgctxt "file-type" +msgid "ALL" +msgstr "" + +#: platform/gui.cpp:91 msgctxt "file-type" msgid "IDF circuit board" msgstr "" -#: platform/gui.cpp:94 +#: platform/gui.cpp:92 +msgctxt "file-type" +msgid "STL triangle mesh" +msgstr "" + +#: platform/gui.cpp:96 msgctxt "file-type" msgid "PNG image" msgstr "" -#: platform/gui.cpp:98 +#: platform/gui.cpp:100 msgctxt "file-type" msgid "STL mesh" msgstr "" -#: platform/gui.cpp:99 +#: platform/gui.cpp:101 msgctxt "file-type" msgid "Wavefront OBJ mesh" msgstr "" -#: platform/gui.cpp:100 +#: platform/gui.cpp:102 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" msgstr "" -#: platform/gui.cpp:101 +#: platform/gui.cpp:103 msgctxt "file-type" msgid "Three.js-compatible mesh, mesh only" msgstr "" -#: platform/gui.cpp:102 +#: platform/gui.cpp:104 msgctxt "file-type" msgid "VRML text file" msgstr "" -#: platform/gui.cpp:106 platform/gui.cpp:113 platform/gui.cpp:120 +#: platform/gui.cpp:108 platform/gui.cpp:115 platform/gui.cpp:122 msgctxt "file-type" msgid "STEP file" msgstr "" -#: platform/gui.cpp:110 +#: platform/gui.cpp:112 msgctxt "file-type" msgid "PDF file" msgstr "" -#: platform/gui.cpp:111 +#: platform/gui.cpp:113 msgctxt "file-type" msgid "Encapsulated PostScript" msgstr "" -#: platform/gui.cpp:112 +#: platform/gui.cpp:114 msgctxt "file-type" msgid "Scalable Vector Graphics" msgstr "" -#: platform/gui.cpp:114 platform/gui.cpp:121 +#: platform/gui.cpp:116 platform/gui.cpp:123 msgctxt "file-type" msgid "DXF file (AutoCAD 2007)" msgstr "" -#: platform/gui.cpp:115 +#: platform/gui.cpp:117 msgctxt "file-type" msgid "HPGL file" msgstr "" -#: platform/gui.cpp:116 +#: platform/gui.cpp:118 msgctxt "file-type" msgid "G Code" msgstr "" -#: platform/gui.cpp:125 +#: platform/gui.cpp:127 msgctxt "file-type" msgid "AutoCAD DXF and DWG files" msgstr "" -#: platform/gui.cpp:129 +#: platform/gui.cpp:131 msgctxt "file-type" msgid "Comma-separated values" msgstr "" -#: platform/guigtk.cpp:1324 platform/guimac.mm:1363 platform/guiwin.cpp:1639 +#: platform/guigtk.cpp:1367 platform/guimac.mm:1487 platform/guiwin.cpp:1641 msgid "untitled" msgstr "" -#: platform/guigtk.cpp:1335 platform/guigtk.cpp:1368 platform/guimac.mm:1321 -#: platform/guiwin.cpp:1582 +#: platform/guigtk.cpp:1378 platform/guigtk.cpp:1411 platform/guimac.mm:1445 +#: platform/guiwin.cpp:1639 msgctxt "title" msgid "Save File" msgstr "" -#: platform/guigtk.cpp:1336 platform/guigtk.cpp:1369 platform/guimac.mm:1304 -#: platform/guiwin.cpp:1584 +#: platform/guigtk.cpp:1379 platform/guigtk.cpp:1412 platform/guimac.mm:1428 +#: platform/guiwin.cpp:1645 msgctxt "title" msgid "Open File" msgstr "" -#: platform/guigtk.cpp:1339 platform/guigtk.cpp:1375 +#: platform/guigtk.cpp:1382 platform/guigtk.cpp:1418 msgctxt "button" msgid "_Cancel" msgstr "" -#: platform/guigtk.cpp:1340 platform/guigtk.cpp:1373 +#: platform/guigtk.cpp:1383 platform/guigtk.cpp:1416 msgctxt "button" msgid "_Save" msgstr "" -#: platform/guigtk.cpp:1341 platform/guigtk.cpp:1374 +#: platform/guigtk.cpp:1384 platform/guigtk.cpp:1417 msgctxt "button" msgid "_Open" msgstr "" -#: solvespace.cpp:169 +#: solvespace.cpp:170 msgctxt "title" msgid "Autosave Available" msgstr "" -#: solvespace.cpp:170 +#: solvespace.cpp:171 msgctxt "dialog" msgid "An autosave file is available for this sketch." msgstr "" -#: solvespace.cpp:171 +#: solvespace.cpp:172 msgctxt "dialog" msgid "Do you want to load the autosave file instead?" msgstr "" -#: solvespace.cpp:172 +#: solvespace.cpp:173 msgctxt "button" msgid "&Load autosave" msgstr "" -#: solvespace.cpp:174 +#: solvespace.cpp:175 msgctxt "button" msgid "Do&n't Load" msgstr "" -#: solvespace.cpp:557 +#: solvespace.cpp:598 msgctxt "title" msgid "Modified File" msgstr "" -#: solvespace.cpp:559 +#: solvespace.cpp:600 #, c-format msgctxt "dialog" msgid "Do you want to save the changes you made to the sketch “%s”?" msgstr "" -#: solvespace.cpp:562 +#: solvespace.cpp:603 msgctxt "dialog" msgid "Do you want to save the changes you made to the new sketch?" msgstr "" -#: solvespace.cpp:565 +#: solvespace.cpp:606 msgctxt "dialog" msgid "Your changes will be lost if you don't save them." msgstr "" -#: solvespace.cpp:566 +#: solvespace.cpp:607 msgctxt "button" msgid "&Save" msgstr "" -#: solvespace.cpp:568 +#: solvespace.cpp:609 msgctxt "button" msgid "Do&n't Save" msgstr "" -#: solvespace.cpp:589 +#: solvespace.cpp:630 msgctxt "title" msgid "(new sketch)" msgstr "" -#: solvespace.cpp:596 +#: solvespace.cpp:637 msgctxt "title" msgid "Property Browser" msgstr "" -#: solvespace.cpp:658 +#: solvespace.cpp:699 msgid "" "Constraints are currently shown, and will be exported in the toolpath. This is probably not what " "you want; hide them by clicking the link at the top of the text window." msgstr "" -#: solvespace.cpp:730 +#: solvespace.cpp:771 #, c-format msgid "Can't identify file type from file extension of filename '%s'; try .dxf or .dwg." msgstr "" -#: solvespace.cpp:778 +#: solvespace.cpp:823 msgid "Constraint must have a label, and must not be a reference dimension." msgstr "" -#: solvespace.cpp:782 +#: solvespace.cpp:827 msgid "Bad selection for step dimension; select a constraint." msgstr "" -#: solvespace.cpp:806 +#: solvespace.cpp:851 msgid "The assembly does not interfere, good." msgstr "" -#: solvespace.cpp:822 +#: solvespace.cpp:867 #, c-format msgid "" "The volume of the solid model is:\n" @@ -1571,7 +1614,7 @@ msgid "" " %s" msgstr "" -#: solvespace.cpp:831 +#: solvespace.cpp:876 #, c-format msgid "" "\n" @@ -1580,7 +1623,7 @@ msgid "" " %s" msgstr "" -#: solvespace.cpp:836 +#: solvespace.cpp:881 msgid "" "\n" "\n" @@ -1588,7 +1631,7 @@ msgid "" "This introduces error, typically of around 1%." msgstr "" -#: solvespace.cpp:851 +#: solvespace.cpp:896 #, c-format msgid "" "The surface area of the selected faces is:\n" @@ -1599,13 +1642,13 @@ msgid "" "This introduces error, typically of around 1%%." msgstr "" -#: solvespace.cpp:860 +#: solvespace.cpp:905 msgid "" "This group does not contain a correctly-formed 2d closed area. It is open, not coplanar, or self-" "intersecting." msgstr "" -#: solvespace.cpp:872 +#: solvespace.cpp:917 #, c-format msgid "" "The area of the region sketched in this group is:\n" @@ -1616,7 +1659,7 @@ msgid "" "This introduces error, typically of around 1%%." msgstr "" -#: solvespace.cpp:892 +#: solvespace.cpp:937 #, c-format msgid "" "The total length of the selected entities is:\n" @@ -1627,36 +1670,36 @@ msgid "" "This introduces error, typically of around 1%%." msgstr "" -#: solvespace.cpp:898 +#: solvespace.cpp:943 msgid "Bad selection for perimeter; select line segments, arcs, and curves." msgstr "" -#: solvespace.cpp:914 +#: solvespace.cpp:959 msgid "Bad selection for trace; select a single point." msgstr "" -#: solvespace.cpp:941 +#: solvespace.cpp:986 #, c-format msgid "Couldn't write to '%s'" msgstr "" -#: solvespace.cpp:971 +#: solvespace.cpp:1016 msgid "The mesh is self-intersecting (NOT okay, invalid)." msgstr "" -#: solvespace.cpp:972 +#: solvespace.cpp:1017 msgid "The mesh is not self-intersecting (okay, valid)." msgstr "" -#: solvespace.cpp:974 +#: solvespace.cpp:1019 msgid "The mesh has naked edges (NOT okay, invalid)." msgstr "" -#: solvespace.cpp:975 +#: solvespace.cpp:1020 msgid "The mesh is watertight (okay, valid)." msgstr "" -#: solvespace.cpp:978 +#: solvespace.cpp:1023 #, c-format msgid "" "\n" @@ -1664,7 +1707,7 @@ msgid "" "The model contains %d triangles, from %d surfaces." msgstr "" -#: solvespace.cpp:982 +#: solvespace.cpp:1027 #, c-format msgid "" "%s\n" @@ -1674,7 +1717,7 @@ msgid "" "Zero problematic edges, good.%s" msgstr "" -#: solvespace.cpp:985 +#: solvespace.cpp:1030 #, c-format msgid "" "%s\n" @@ -1684,7 +1727,7 @@ msgid "" "%d problematic edges, bad.%s" msgstr "" -#: solvespace.cpp:998 +#: solvespace.cpp:1043 #, c-format msgid "" "This is SolveSpace version %s.\n" @@ -1701,33 +1744,33 @@ msgid "" "© 2008-%d Jonathan Westhues and other authors.\n" msgstr "" -#: style.cpp:166 +#: style.cpp:185 msgid "" "Can't assign style to an entity that's derived from another entity; try assigning a style to this " "entity's parent." msgstr "" -#: style.cpp:665 +#: style.cpp:735 msgid "Style name cannot be empty" msgstr "" -#: textscreens.cpp:741 +#: textscreens.cpp:785 msgid "Can't repeat fewer than 1 time." msgstr "" -#: textscreens.cpp:745 +#: textscreens.cpp:789 msgid "Can't repeat more than 999 times." msgstr "" -#: textscreens.cpp:770 +#: textscreens.cpp:814 msgid "Group name cannot be empty" msgstr "" -#: textscreens.cpp:813 +#: textscreens.cpp:866 msgid "Opacity must be between zero and one." msgstr "" -#: textscreens.cpp:848 +#: textscreens.cpp:901 msgid "Radius cannot be zero or negative." msgstr "" @@ -1882,10 +1925,10 @@ msgctxt "button" msgid "&OK" msgstr "" -#: view.cpp:78 +#: view.cpp:127 msgid "Scale cannot be zero or negative." msgstr "" -#: view.cpp:90 view.cpp:99 +#: view.cpp:139 view.cpp:148 msgid "Bad format: specify x, y, z" msgstr "" From 2cd0ee4b3352c8fb68921399790d0545ad9b26bf Mon Sep 17 00:00:00 2001 From: OlesyaGerasimenko <53296253+OlesyaGerasimenko@users.noreply.github.com> Date: Mon, 4 Oct 2021 16:42:01 +0300 Subject: [PATCH 83/89] Update Russian translation --- res/locales/ru_RU.po | 71 ++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 25 deletions(-) diff --git a/res/locales/ru_RU.po b/res/locales/ru_RU.po index 6ffc7f89..d688a75c 100644 --- a/res/locales/ru_RU.po +++ b/res/locales/ru_RU.po @@ -2,20 +2,21 @@ # Copyright (C) 2017 the SolveSpace authors # This file is distributed under the same license as the SolveSpace package. # EvilSpirit , 2017. +# Olesya Gerasimenko , 2021. msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" "POT-Creation-Date: 2021-09-26 16:25-0400\n" -"PO-Revision-Date: 2021-01-22 18:50+0700\n" -"Last-Translator: evilspirit@evilspirit.org\n" -"Language-Team: EvilSpirit\n" +"PO-Revision-Date: 2021-10-04 15:33+0300\n" +"Last-Translator: Olesya Gerasimenko \n" +"Language-Team: Basealt Translation Team\n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Lokalize 21.08.1\n" #: clipboard.cpp:309 msgid "" @@ -169,12 +170,12 @@ msgstr "отношение-длин" #: constraint.cpp:25 msgctxt "constr-name" msgid "arc-arc-length-ratio" -msgstr "" +msgstr "отношение-длин-дуга-дуга" #: constraint.cpp:26 msgctxt "constr-name" msgid "arc-line-length-ratio" -msgstr "" +msgstr "отношение-длин-дуга-отрезок" #: constraint.cpp:27 msgctxt "constr-name" @@ -184,12 +185,12 @@ msgstr "разность-длин" #: constraint.cpp:28 msgctxt "constr-name" msgid "arc-arc-len-difference" -msgstr "" +msgstr "разность-длин-дуга-дуга" #: constraint.cpp:29 msgctxt "constr-name" msgid "arc-line-len-difference" -msgstr "" +msgstr "разность-длин-дуга-отрезок" #: constraint.cpp:30 msgctxt "constr-name" @@ -404,6 +405,12 @@ msgid "" " * two arcs\n" " * one arc and one line segment\n" msgstr "" +"Неправильное выделение для ограничения 'отношение длин'. Ограничение может" +" принимать в качестве выделения следующие примитивы:\n" +"\n" +" * два отрезка\n" +" * две дуги\n" +" * дугу и отрезок\n" #: constraint.cpp:441 msgid "" @@ -414,6 +421,12 @@ msgid "" " * two arcs\n" " * one arc and one line segment\n" msgstr "" +"Неправильное выделение для ограничения 'разность длин'. Ограничение может" +" принимать в качестве выделения следующие примитивы:\n" +"\n" +" * два отрезка\n" +" * две дуги\n" +" * дугу и отрезок\n" #: constraint.cpp:472 msgid "" @@ -485,7 +498,7 @@ msgid "" "\n" " * two normals\n" msgstr "" -"Неправильное выделение для ограничения \"идентичная ориентация\".\n" +"Неправильное выделение для ограничения 'идентичная ориентация'.\n" "Ограничение может принимать в качестве выделения следующие примитивы:\n" "\n" " * два координатных базиса('нормали')\n" @@ -562,7 +575,7 @@ msgid "" "\n" " * a point\n" msgstr "" -"Неправильное выделение для ограничения 'Фиксация'.\n" +"Неправильное выделение для ограничения 'фиксация'.\n" "Ограничение может принимать в качестве выделения следующие примитивы:\n" "\n" " * точку\n" @@ -803,7 +816,7 @@ msgstr "Стили Линий..." #: graphicswin.cpp:79 msgid "&View Projection..." -msgstr "&View Прое&кция..." +msgstr "&Проекция вида..." #: graphicswin.cpp:81 msgid "Con&figuration..." @@ -855,7 +868,7 @@ msgstr "Перспективная Прое&кция" #: graphicswin.cpp:97 msgid "Show E&xploded View" -msgstr "" +msgstr "Показать &Развернутый Вид" #: graphicswin.cpp:98 msgid "Dimension &Units" @@ -875,7 +888,7 @@ msgstr "Размеры в Дю&ймах" #: graphicswin.cpp:102 msgid "Dimensions in &Feet and Inches" -msgstr "" +msgstr "Размеры в &Футах и дюймах" #: graphicswin.cpp:104 msgid "Show &Toolbar" @@ -1043,11 +1056,11 @@ msgstr "&Равенство Длин / Радиусов / Углов" #: graphicswin.cpp:158 msgid "Length / Arc Ra&tio" -msgstr "" +msgstr "&Отношение длин (дуга)" #: graphicswin.cpp:159 msgid "Length / Arc Diff&erence" -msgstr "" +msgstr "Р&азность длин (дуга)" #: graphicswin.cpp:160 msgid "At &Midpoint" @@ -1179,7 +1192,7 @@ msgid "" "make a link group the active group." msgstr "" "Чтобы использовать эту команду, выделите точку или другой примитив, " -"принадлежащий импортированной детали или активируйте группу импортированной " +"принадлежащий импортированной детали, или активируйте группу импортированной " "детали." #: graphicswin.cpp:1177 @@ -1294,6 +1307,14 @@ msgid "" " * a point and a normal (through the point, orthogonal to the normal)\n" " * a workplane (copy of the workplane)\n" msgstr "" +"Неправильное выделение для создания эскиза в рабочей плоскости. Группа может" +" быть создана, используя в качестве выделения следующие " +"примитивы:\n" +"\n" +" * точку (через точку, ортогонально осям координат)\n" +" * точку и два отрезка (через точку, параллельно отрезкам)\n" +" * точку и нормаль (через точку, ортогонально нормали)\n" +" * рабочую плоскость (копию рабочей плоскости)\n" #: group.cpp:166 msgid "" @@ -1326,7 +1347,7 @@ msgstr "" "Группа может быть создана, используя в качестве выделения следующие " "примитивы:\n" "\n" -" * точку и отрезок / координатных базис (нормаль) (тело вращения вокруг " +" * точку и отрезок / координатный базис (нормаль) (тело вращения вокруг " "оси, проходящей через точку и параллельной отрезку / нормали)\n" " * отрезок (тело вращения вокруг оси, проходящей через отрезок)\n" "\n" @@ -1354,7 +1375,7 @@ msgstr "" "Группа может быть создана, используя в качестве выделения следующие " "примитивы:\n" "\n" -" * точку и отрезок / координатных базис (нормаль) (тело вращения вокруг " +" * точку и отрезок / координатный базис (нормаль) (тело вращения вокруг " "оси, проходящей через точку и параллельной отрезку / нормали)\n" " * отрезок (тело вращения вокруг оси, проходящей через отрезок)\n" "\n" @@ -1407,7 +1428,7 @@ msgstr "" "\n" " * точку при активной рабочей плоскости (вращение в плоскости вокруг " "выбранной точки)\n" -" * точку и отрезок / координатных базис (нормаль) (вращение вокруг оси, " +" * точку и отрезок / координатный базис (нормаль) (вращение вокруг оси, " "проходящей через точку и параллельной отрезку / нормали)\n" "\n" @@ -1646,7 +1667,7 @@ msgstr "проекты SolveSpace" #: platform/gui.cpp:89 msgctxt "file-type" msgid "ALL" -msgstr "" +msgstr "ВСЕ" #: platform/gui.cpp:91 msgctxt "file-type" @@ -1656,7 +1677,7 @@ msgstr "IDF печатная плата" #: platform/gui.cpp:92 msgctxt "file-type" msgid "STL triangle mesh" -msgstr "" +msgstr "STL треугольная сетка" #: platform/gui.cpp:96 msgctxt "file-type" @@ -1676,7 +1697,7 @@ msgstr "Wavefront OBJ полигональная сетка" #: platform/gui.cpp:102 msgctxt "file-type" msgid "Three.js-compatible mesh, with viewer" -msgstr "Three.js-совместимая полигональная сетка с просмторщиком" +msgstr "Three.js-совместимая полигональная сетка с просмотрщиком" #: platform/gui.cpp:103 msgctxt "file-type" @@ -1846,7 +1867,7 @@ msgid "" "Can't identify file type from file extension of filename '%s'; try .dxf or ." "dwg." msgstr "" -"Неподдерживаемый тип файла '%s'; Поддерживаются файлы с расширением .dxf и ." +"Неподдерживаемый тип файла '%s'. Поддерживаются файлы с расширением .dxf и ." "dwg." #: solvespace.cpp:823 @@ -1975,11 +1996,11 @@ msgstr "Невозможно записать в '%s'" #: solvespace.cpp:1016 msgid "The mesh is self-intersecting (NOT okay, invalid)." -msgstr "Полигональная стека содержит самопересечения (это плохо)" +msgstr "Полигональная сетка содержит самопересечения (это плохо)" #: solvespace.cpp:1017 msgid "The mesh is not self-intersecting (okay, valid)." -msgstr "Полигональная стека не содержит самопересечений (это хорошо)" +msgstr "Полигональная сетка не содержит самопересечений (это хорошо)" #: solvespace.cpp:1019 msgid "The mesh has naked edges (NOT okay, invalid)." From a45e84a2ff7ac307ebe9af1ef6648a377399305c Mon Sep 17 00:00:00 2001 From: MX_Master Date: Wed, 13 Oct 2021 23:16:55 +0600 Subject: [PATCH 84/89] + safe height gcode parameter --- src/confscreen.cpp | 10 ++++++++++ src/exportvector.cpp | 6 +++--- src/solvespace.cpp | 3 ++- src/solvespace.h | 1 + src/ui.h | 15 ++++++++------- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/confscreen.cpp b/src/confscreen.cpp index 2eb9534f..1e2e82a6 100644 --- a/src/confscreen.cpp +++ b/src/confscreen.cpp @@ -161,6 +161,11 @@ void TextWindow::ScreenChangeGCodeParameter(int link, uint32_t v) { buf += SS.MmToString(SS.gCode.depth, true); break; + case 'h': + SS.TW.edit.meaning = Edit::G_CODE_SAFE_HEIGHT; + buf += SS.MmToString(SS.gCode.safeHeight, true); + break; + case 's': SS.TW.edit.meaning = Edit::G_CODE_PASSES; buf += std::to_string(SS.gCode.passes); @@ -492,6 +497,11 @@ bool TextWindow::EditControlDoneForConfiguration(const std::string &s) { if(e) SS.gCode.depth = (float)SS.ExprToMm(e); break; } + case Edit::G_CODE_SAFE_HEIGHT: { + Expr *e = Expr::From(s, /*popUpError=*/true); + if(e) SS.gCode.safeHeight = (float)SS.ExprToMm(e); + break; + } case Edit::G_CODE_PASSES: { Expr *e = Expr::From(s, /*popUpError=*/true); if(e) SS.gCode.passes = (int)(e->Eval()); diff --git a/src/exportvector.cpp b/src/exportvector.cpp index 5a3c5d36..55abac68 100644 --- a/src/exportvector.cpp +++ b/src/exportvector.cpp @@ -1102,7 +1102,7 @@ void SvgFileWriter::StartFile() { fprintf(f, "stroke-dasharray:%s;\r\n", patternStr.c_str()); } if(s->filled) { - fprintf(f, "fill:#%02x%02x%02x;\r\n", fillRgb.red, fillRgb.green, fillRgb.blue); + fprintf(f, "fill:#%02x%02x%02x;\r\n", fillRgb.red, fillRgb.green, fillRgb.blue); } else { fprintf(f, "fill:none;\r\n"); @@ -1308,9 +1308,9 @@ void GCodeFileWriter::FinishAndCloseFile() { SS.MmToString(pt->p.x).c_str(), SS.MmToString(pt->p.y).c_str(), SS.MmToString(SS.gCode.feed).c_str()); } - // Move up to a clearance plane 5mm above the work. + // Move up to a clearance plane above the work. fprintf(f, "G00 Z%s\r\n", - SS.MmToString(SS.gCode.depth < 0 ? +5 : -5).c_str()); + SS.MmToString(SS.gCode.safeHeight).c_str()); } } diff --git a/src/solvespace.cpp b/src/solvespace.cpp index 5d6d7b27..78768871 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -105,6 +105,7 @@ void SolveSpaceUI::Init() { exportCanvas.dy = settings->ThawFloat("ExportCanvas_Dy", 5.0); // Extra parameters when exporting G code gCode.depth = settings->ThawFloat("GCode_Depth", 10.0); + gCode.safeHeight = settings->ThawFloat("GCode_SafeHeight", 5.0); gCode.passes = settings->ThawInt("GCode_Passes", 1); gCode.feed = settings->ThawFloat("GCode_Feed", 10.0); gCode.plungeFeed = settings->ThawFloat("GCode_PlungeFeed", 10.0); @@ -413,7 +414,7 @@ static std::pair SelectSIPrefixMm(int ord, int dim) { default: dbp ("dimensions over 3 not supported"); break; - } + } return {0, "m"}; } static std::pair SelectSIPrefixInch(int deg) { diff --git a/src/solvespace.h b/src/solvespace.h index 348a8e66..8a922167 100644 --- a/src/solvespace.h +++ b/src/solvespace.h @@ -598,6 +598,7 @@ public: } exportCanvas; struct { double depth; + double safeHeight; int passes; double feed; double plungeFeed; diff --git a/src/ui.h b/src/ui.h index 0700653a..21b00cd4 100644 --- a/src/ui.h +++ b/src/ui.h @@ -314,13 +314,14 @@ public: EXPORT_OFFSET = 110, CANVAS_SIZE = 111, G_CODE_DEPTH = 112, - G_CODE_PASSES = 113, - G_CODE_FEED = 114, - G_CODE_PLUNGE_FEED = 115, - AUTOSAVE_INTERVAL = 116, - LIGHT_AMBIENT = 117, - FIND_CONSTRAINT_TIMEOUT = 118, - EXPLODE_DISTANCE = 119, + G_CODE_SAFE_HEIGHT = 113, + G_CODE_PASSES = 114, + G_CODE_FEED = 115, + G_CODE_PLUNGE_FEED = 116, + AUTOSAVE_INTERVAL = 117, + LIGHT_AMBIENT = 118, + FIND_CONSTRAINT_TIMEOUT = 119, + EXPLODE_DISTANCE = 120, // For TTF text TTF_TEXT = 300, // For the step dimension screen From 267c002975a9ae6683ea3612b209266c9aa606c2 Mon Sep 17 00:00:00 2001 From: Simon Wells Date: Sat, 23 Oct 2021 00:38:37 +1300 Subject: [PATCH 85/89] modify the spaceware code to also work on wayland use the recommended compile-time and run-time checks for x11 and wayland --- src/platform/guigtk.cpp | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/platform/guigtk.cpp b/src/platform/guigtk.cpp index 46a7df35..6afb9c72 100644 --- a/src/platform/guigtk.cpp +++ b/src/platform/guigtk.cpp @@ -33,7 +33,12 @@ #if defined(HAVE_SPACEWARE) # include -# include +# if defined(GDK_WINDOWING_X11) +# include +# endif +# if defined(GDK_WINDOWING_WAYLAND) +# include +# endif # if GTK_CHECK_VERSION(3, 20, 0) # include # else @@ -1047,7 +1052,7 @@ WindowRef CreateWindow(Window::Kind kind, WindowRef parentWindow) { void Open3DConnexion() {} void Close3DConnexion() {} -#if defined(HAVE_SPACEWARE) && defined(GDK_WINDOWING_X11) +#if defined(HAVE_SPACEWARE) && (defined(GDK_WINDOWING_X11) || defined(GDK_WINDOWING_WAYLAND)) static void ProcessSpnavEvent(WindowImplGtk *window, const spnav_event &spnavEvent, bool shiftDown, bool controlDown) { switch(spnavEvent.type) { case SPNAV_EVENT_MOTION: { @@ -1129,17 +1134,26 @@ void Request3DConnexionEventsForWindow(WindowRef window) { std::static_pointer_cast(window); Glib::RefPtr gdkWindow = windowImpl->gtkWindow.get_window(); - if(!GDK_IS_X11_DISPLAY(gdkWindow->get_display()->gobj())) { - return; +#if defined(GDK_WINDOWING_X11) + if(GDK_IS_X11_DISPLAY(gdkWindow->get_display()->gobj())) { + if(spnav_x11_open(gdk_x11_get_default_xdisplay(), + gdk_x11_window_get_xid(gdkWindow->gobj())) != -1) { + gdkWindow->add_filter(GdkSpnavFilter, windowImpl.get()); + } else if(spnav_open() != -1) { + g_io_add_watch(g_io_channel_unix_new(spnav_fd()), G_IO_IN, + ConsumeSpnavQueue, windowImpl.get()); + } } +#endif +#if defined(GDK_WINDOWING_WAYLAND) + if(GDK_IS_WAYLAND_DISPLAY(gdkWindow->get_display()->gobj())) { + if(spnav_open() != -1) { + g_io_add_watch(g_io_channel_unix_new(spnav_fd()), G_IO_IN, + ConsumeSpnavQueue, windowImpl.get()); + } + } +#endif - if(spnav_x11_open(gdk_x11_get_default_xdisplay(), - gdk_x11_window_get_xid(gdkWindow->gobj())) != -1) { - gdkWindow->add_filter(GdkSpnavFilter, windowImpl.get()); - } else if(spnav_open() != -1) { - g_io_add_watch(g_io_channel_unix_new(spnav_fd()), G_IO_IN, - ConsumeSpnavQueue, windowImpl.get()); - } } #else void Request3DConnexionEventsForWindow(WindowRef window) {} From 2a722c16b810f9de3ca1d4fa6f4ecaf7761f59e2 Mon Sep 17 00:00:00 2001 From: Simon Wells Date: Sun, 24 Oct 2021 13:29:51 +1300 Subject: [PATCH 86/89] add gdk.h for GDK_WINDOWING_ defines --- src/platform/guigtk.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/platform/guigtk.cpp b/src/platform/guigtk.cpp index 6afb9c72..1a11582e 100644 --- a/src/platform/guigtk.cpp +++ b/src/platform/guigtk.cpp @@ -33,6 +33,7 @@ #if defined(HAVE_SPACEWARE) # include +# include # if defined(GDK_WINDOWING_X11) # include # endif From eb17248bd5180ad7b121c20f2c6f775ecfcfaad4 Mon Sep 17 00:00:00 2001 From: Maximilian Federle Date: Fri, 29 Oct 2021 21:06:42 +0200 Subject: [PATCH 87/89] CI: Replace edge releases with links to artifacts Re-creating the edge release for every push to master creates many superfluous release notifications. Stop creating those releases and provide users with direct links to the workflow artifacts instead via the nightly.link GitHub app (https://github.com/apps/nightly-link). Fixes #1103 --- .github/workflows/cd.yml | 42 +++------------------------------------- README.md | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 39 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 0d3b975c..abfaba33 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -176,40 +176,10 @@ jobs: snap: ${{ steps.build.outputs.snap }} release: edge,beta - update_edge_release: - name: Update Edge Release - needs: [build_release_windows, build_release_windows_openmp, build_release_macos] - if: github.event_name == 'push' && !cancelled() - runs-on: ubuntu-latest - outputs: - upload_url: ${{ steps.create_release.outputs.upload_url }} - steps: - - name: Delete Old Edge Release - uses: dev-drprasad/delete-tag-and-release@v0.2.0 - with: - delete_release: true - tag_name: edge - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Wait - shell: bash - run: sleep 60 - - name: Create New Edge Release - id: create_release - uses: softprops/action-gh-release@35d938cf01f60fbe522917c81be1e892074f6ad6 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: edge - name: Edge - prerelease: true - draft: false - body: ${{ github.event.head_commit.message }} - upload_release_assets: name: Upload Release Assets - needs: [build_release_windows, build_release_windows_openmp, build_release_macos, update_edge_release] - if: "!cancelled()" + needs: [build_release_windows, build_release_windows_openmp, build_release_macos] + if: "!cancelled() && github.event_name == 'release'" runs-on: ubuntu-latest steps: - name: Download All Workflow Artifacts @@ -217,15 +187,9 @@ jobs: - name: Get Release Upload URL id: get_upload_url env: - event_name: ${{ github.event_name }} event: ${{ toJson(github.event) }} - edge_upload_url: ${{ needs.update_edge_release.outputs.upload_url }} run: | - if [ "$event_name" = "release" ]; then - upload_url=$(echo "$event" | jq -r ".release.upload_url") - else - upload_url="$edge_upload_url" - fi + upload_url=$(echo "$event" | jq -r ".release.upload_url") echo "::set-output name=upload_url::$upload_url" echo "Upload URL: $upload_url" - name: Upload solvespace.exe diff --git a/README.md b/README.md index b3c40947..e9a9d38d 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,20 @@ and cannot guarantee their functionality. [notesalexp]: https://notesalexp.org/packages/en/source/solvespace/ +### Via automated edge builds + +> :warning: **Edge builds might be unstable or contain severe bugs!** +> They are intended for experienced users to test new features or verify bugfixes. + +Cutting edge builds from the latest master commit are available as zip archives from the +following links: + +- [macOS](https://nightly.link/solvespace/solvespace/workflows/cd/master/macos.zip) +- [Windows](https://nightly.link/solvespace/solvespace/workflows/cd/master/windows.zip) +- [Windows with OpenMP enabled](https://nightly.link/solvespace/solvespace/workflows/cd/master/windows-openmp.zip) + +Extract the downloaded archive and install or execute the contained file as is appropriate for your platform. + ### Via source code See below. From df3ef2ab0e805b3500803607aa33e8152f11b048 Mon Sep 17 00:00:00 2001 From: ruevs Date: Thu, 4 Nov 2021 17:52:25 +0200 Subject: [PATCH 88/89] GUI: Flexible vertical space above the toolbar If the main window is not high enough allow the default 32 pixel padding between the menu bar and the toolbar to shrink down to zero. This allows the main window height to be a minimum of 688 pixels (on Windows 10) so it is possible to capture 720P video tutorials. Fixes #1130 --- src/graphicswin.cpp | 2 +- src/toolbar.cpp | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index 17e04dce..cac542ae 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -430,7 +430,7 @@ void GraphicsWindow::Init() { using namespace std::placeholders; // Do this first, so that if it causes an onRender event we don't try to paint without // a canvas. - window->SetMinContentSize(720, 670); + window->SetMinContentSize(720, /*ToolbarDrawOrHitTest 636*/ 32 * 18 + 3 * 16 + 8 + 4); window->onClose = std::bind(&SolveSpaceUI::MenuFile, Command::EXIT); window->onRender = std::bind(&GraphicsWindow::Paint, this); window->onKeyboardEvent = std::bind(&GraphicsWindow::KeyboardEvent, this, _1); diff --git a/src/toolbar.cpp b/src/toolbar.cpp index bf6b59c5..74764883 100644 --- a/src/toolbar.cpp +++ b/src/toolbar.cpp @@ -153,11 +153,18 @@ bool GraphicsWindow::ToolbarDrawOrHitTest(int mx, int my, UiCanvas *canvas, double width, height; window->GetContentSize(&width, &height); - int x = 17, y = (int)(height - 52); + int x = 17, y = (int)(height - 21); // 20 is the menu bar height - // When changing these values, also change the asReference drawing code in drawentity.cpp. + // When changing these values, also change the asReference drawing code in drawentity.cpp + // as well as the "window->SetMinContentSize(720, 636);" in graphicswin.cpp int fudge = 8; - int h = 32*18 + 3*16 + fudge; + int h = 32*18 + 3*16 + fudge; // Toolbar height = 18 icons * 32 pixels + 3 dividers * 16 pixels + fudge + + if(h < y) { + // If there is enough vertical space leave up to 32 pixels between the menu bar and the toolbar. + y -= ((y - h) < 32) ? y - h : 32; + } + int aleft = 0, aright = 66, atop = y+16+fudge/2, abot = y+16-h; bool withinToolbar = From 85f6ec414492d07b512fdfc6f97559ec11ebb36c Mon Sep 17 00:00:00 2001 From: phkahler <14852918+phkahler@users.noreply.github.com> Date: Sat, 20 Nov 2021 16:13:03 -0500 Subject: [PATCH 89/89] fix STL linking issue. Model was disappearing after the link group. --- src/file.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/file.cpp b/src/file.cpp index c8989728..0b5806c0 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -909,6 +909,8 @@ try_again: return false; } } + if(g.IsTriangleMeshAssembly()) + g.forceToMesh = true; } else if(linkMap.count(g.linkFile) == 0) { dbp("Missing file for group: %s", g.name.c_str()); // The file was moved; prompt the user for its new location.

VtZ|}{BQ#~RsQKK?2yClCU{0@?|A04| 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