Merge branch 'solvespace:master' into keep-split-entities

pull/1426/head^2
jkrei0 2024-05-24 20:52:08 -04:00 committed by GitHub
commit 9650a28af8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
21 changed files with 328 additions and 116 deletions

View File

@ -1,8 +1,8 @@
#!/bin/sh -xe
if [ "$1" = "ci" ]; then
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:)
armloc=$(brew fetch --bottle-tag=arm64_ventura libomp | grep -i downloaded | grep tar.gz | cut -f2 -d:)
x64loc=$(brew fetch --bottle-tag=ventura 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

View File

@ -58,34 +58,29 @@ hdiutil create -srcfolder "${app}" "${dmg}"
# sign the .dmg
codesign -s "${MACOS_DEVELOPER_ID}" --timestamp --options runtime -f --deep "${dmg}"
# notarize and store request uuid in variable
notarize_uuid=$(xcrun altool --notarize-app --primary-bundle-id "${bundle_id}" --username "${MACOS_APPSTORE_USERNAME}" --password "${MACOS_APPSTORE_APP_PASSWORD}" --file "${dmg}" | grep RequestUUID | awk '{print $3'})
if ! command -v xcrun >/dev/null || ! xcrun --find notarytool >/dev/null; then
echo "Notarytool is not present in the system. Notarization has failed."
exit 1
fi
echo $notarize_uuid
# Submit the package for notarization
notarization_output=$(
xcrun notarytool submit "${dmg}" \
--apple-id "hello@koenschmeets.nl" \
--password "${MACOS_APPSTORE_APP_PASSWORD}" \
--team-id "8X77K9NDG3" \
--wait 2>&1)
# wait a bit so we don't get errors during checking
sleep 10
success=0
for (( ; ; ))
do
echo "Checking progress..."
progress=$(xcrun altool --notarization-info "${notarize_uuid}" -u "${MACOS_APPSTORE_USERNAME}" -p "${MACOS_APPSTORE_APP_PASSWORD}" 2>&1)
# echo "${progress}"
if [ $? -ne 0 ] || [[ "${progress}" =~ "Invalid" ]] ; then
echo "Error with notarization. Exiting"
break
fi
if [[ "${progress}" =~ "success" ]]; then
success=1
break
else
echo "Not completed yet. Sleeping for 10 seconds"
fi
sleep 10
done
if [ $? -eq 0 ]; then
# Extract the operation ID from the output
operation_id=$(echo "$notarization_output" | awk '/RequestUUID/ {print $NF}')
echo "Notarization submitted. Operation ID: $operation_id"
exit 0
else
echo "Notarization failed. Error: $notarization_output"
exit 1
fi
fi
# staple
xcrun stapler staple "${dmg}"

View File

@ -114,36 +114,36 @@ jobs:
name: macos
path: build/bin/SolveSpace.dmg
deploy_snap_amd64:
needs: [test_ubuntu, test_windows, test_macos]
name: Deploy AMD64 Snap
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
uses: snapcore/action-build@v1
id: build
with:
path: pkg/snap
- name: Upload & Release to Edge
if: github.event_name == 'push'
uses: snapcore/action-publish@v1
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPSTORE_LOGIN }}
with:
snap: ${{ steps.build.outputs.snap }}
release: edge
- name: Upload & Release to Beta + Edge
if: github.event_name == 'release'
uses: snapcore/action-publish@v1
with:
store_login: ${{ secrets.SNAPSTORE_LOGIN }}
snap: ${{ steps.build.outputs.snap }}
release: edge,beta
# deploy_snap_amd64:
# needs: [test_ubuntu, test_windows, test_macos]
# name: Deploy AMD64 Snap
# 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
# uses: snapcore/action-build@v1
# id: build
# with:
# path: pkg/snap
# - name: Upload & Release to Edge
# if: github.event_name == 'push'
# uses: snapcore/action-publish@v1
# env:
# SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPSTORE_LOGIN }}
# with:
# snap: ${{ steps.build.outputs.snap }}
# release: edge
# - name: Upload & Release to Beta + Edge
# if: github.event_name == 'release'
# uses: snapcore/action-publish@v1
# with:
# store_login: ${{ secrets.SNAPSTORE_LOGIN }}
# snap: ${{ steps.build.outputs.snap }}
# release: edge,beta
upload_release_assets:
name: Upload Release Assets

View File

@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>${PROJECT_VERSION}</string>
<key>NSHumanReadableCopyright</key>
<string>© 2008-2023 Jonathan Westhues and other authors</string>
<string>© 2008-2024 Jonathan Westhues and other authors</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSMainNibFile</key>

View File

@ -10,7 +10,7 @@ set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE)
# FIXME(emscripten): Suppress non-c-typedef-for-linkage warnings in solvespace.h
add_compile_options(-Wno-non-c-typedef-for-linkage)
add_link_options(-s EXPORTED_RUNTIME_METHODS=[allocate])
# Enable optimization. Workaround for "too many locals" error when runs on browser.
if(CMAKE_BUILD_TYPE STREQUAL Release)

View File

@ -27,6 +27,8 @@ apps:
desktop: solvespace.desktop
extensions: [gnome]
plugs: [opengl, unity7, home, removable-media, gsettings, network]
environment:
GTK_USE_PORTAL: "0"
cli:
command: usr/bin/solvespace-cli
extensions: [gnome]

View File

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: SolveSpace 3.0\n"
"Report-Msgid-Bugs-To: phkahler@gmail.com\n"
"POT-Creation-Date: 2023-01-20 16:45+0200\n"
"PO-Revision-Date: 2021-04-14 01:42+0300\n"
"PO-Revision-Date: 2024-01-02 18:47+0200\n"
"Last-Translator: https://github.com/Symbian9\n"
"Language-Team: app4soft\n"
"Language: uk_UA\n"
@ -15,7 +15,7 @@ msgstr ""
"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: Poedit 3.4.1\n"
#: clipboard.cpp:309
msgid ""
@ -51,12 +51,12 @@ msgstr "Оберіть дві точки для визначення векто
msgid ""
"Transformation is identity. So all copies will be exactly on top of each "
"other."
msgstr ""
msgstr "Трансформація ідентична, тому усі копії будуть точно одна на одній."
#: clipboard.cpp:457
#, fuzzy
msgid "Too many items to paste; split this into smaller pastes."
msgstr "Забагато об'єктів для вставки; рзділіть копіювання на кілька етапів."
msgstr ""
"Забагато об'єктів для вставки; розділіть копіювання на кілька менших етапів."
#: clipboard.cpp:462
msgid "No workplane active."
@ -64,20 +64,19 @@ msgstr "Немає активної площини."
#: confscreen.cpp:381
msgid "Bad format: specify coordinates as x, y, z"
msgstr "Некоректний формат: визначте координати X, Y, Z"
msgstr "Некоректний формат: визначте координати як X, Y, Z"
#: confscreen.cpp:391 style.cpp:729 textscreens.cpp:863
msgid "Bad format: specify color as r, g, b"
msgstr "Некоректний формат: визначте колір як R, G, B"
#: confscreen.cpp:417
#, fuzzy
msgid ""
"The perspective factor will have no effect until you enable View -> Use "
"Perspective Projection."
msgstr ""
"Значення перспективи не матиме ефекту допоки не ввімкнено Вигляд -> "
"Використовувати Перспективну проєкцію."
"Використовувати Перспективну Проєкцію."
#: confscreen.cpp:435 confscreen.cpp:445
#, c-format
@ -97,9 +96,8 @@ msgid "Bad value: autosave interval should be positive"
msgstr "Некоректне значення: інтервал автозбереження має бути додатнім"
#: confscreen.cpp:531
#, fuzzy
msgid "Bad format: specify interval in integral minutes"
msgstr "Некоректний формат: визначте цілим числом інтервал у хвилинах"
msgstr "Некоректний формат: визначте інтервал цілим числом у хвилинах"
#: constraint.cpp:12
msgctxt "constr-name"
@ -129,7 +127,7 @@ msgstr "відстань-тчк-грань"
#: constraint.cpp:17
msgctxt "constr-name"
msgid "proj-pt-pt-distance"
msgstr "проєційна-відстань-тчк-тчк"
msgstr "проєкційна-відстань-тчк-тчк"
#: constraint.cpp:18
msgctxt "constr-name"
@ -169,12 +167,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 +182,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"
@ -239,7 +237,7 @@ msgstr "тчк-на-колі"
#: constraint.cpp:39
msgctxt "constr-name"
msgid "same-orientation"
msgstr "співнаправленість"
msgstr "співнапрямленість"
#: constraint.cpp:40
msgctxt "constr-name"
@ -301,18 +299,24 @@ msgid ""
"The tangent arc and line segment must share an endpoint. Constrain them with "
"Constrain -> On Point before constraining tangent."
msgstr ""
"Дотичні дуга та лінія повинні мати спільну кінцеву точку. Використайте "
"Обмежити -> На точці перед застосуванням дотичного обмеження."
#: 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:189
msgid ""
"The curves must share an endpoint. Constrain them with Constrain -> On Point "
"before constraining tangent."
msgstr ""
"Дотичні дуги повинні мати спільну кінцеву точку. Використайте Обмежити -> На "
"точці перед застосуванням дотичного обмеження."
#: constraint.cpp:240
msgid ""
@ -327,6 +331,17 @@ msgid ""
" * a plane face and a point (minimum distance)\n"
" * a circle or an arc (diameter)\n"
msgstr ""
"Поганий вибір для обмеження за Відстанню / Діаметром. Це обмеження можна "
"застосувати до:\n"
"\n"
" * двох точок (відстань між точками)\n"
" * відрізку прямої (довжина)\n"
" * двох точок та відрізку прямої чи нормалі (відстань між проєкціями "
"точок)\n"
" * робочої площини та точки (найменша відстань)\n"
" * відрізку прямої та точки (найменша відстань)\n"
" * грані та точки (найменша відстань)\n"
" * кола або дуги (діаметр)\n"
#: constraint.cpp:303
msgid ""
@ -339,6 +354,14 @@ msgid ""
" * a point and a circle or arc (point on curve)\n"
" * a point and one to three plane faces (point on face(s))\n"
msgstr ""
"Поганий вибір для обмеження На Точці / Кривій / Площині. Це обмеження можна "
"застосувати до:\n"
"\n"
" * двох або більше точок (точки збігаються)\n"
" * точки та площини (точка лежить в площині)\n"
" * точки та відрізку прямої (точка лежить на прямій)\n"
" * точки та кола чи дуги (точка лежить на дузі)\n"
" * точки та від одієї до трьох граней (точка лежить на грані(ях))\n"
#: constraint.cpp:364
msgid ""
@ -353,6 +376,17 @@ msgid ""
" * two or more circles or arcs (equal radius)\n"
" * a line segment and an arc (line segment length equals arc length)\n"
msgstr ""
"Поганий вибір для обмеження Рівні Довжина / Радіус. Це обмеження можна "
"застосувати до:\n"
"\n"
" * двох або більше відрізків прямої (рівні довжини)\n"
" * двох відрізків та двох точок (рівні відстані від точок до відповідних "
"відрізків)\n"
" * відрізка та двох точок (рівні відстані від точок до відрізка)\n"
" * відрізка, точки, та другого відрізка (відстань від точки до другого "
"відрізка дорівнює першому)\n"
" * двох або більше кіл чи дуг (рівні радіуси)\n"
" * відрізку та дуги (довжина відрізку дорівнює довжині дуги) \n"
#: constraint.cpp:417
msgid ""
@ -362,6 +396,12 @@ msgid ""
" * two arcs\n"
" * one arc and one line segment\n"
msgstr ""
"Поганий вибір для обмеження Пропорція Довжин. Це обмеження можна застосувати "
"до:\n"
"\n"
" * двох відрізків прямої\n"
" * двох дуг\n"
" * дуги та відрізка прямої\n"
#: constraint.cpp:452
msgid ""
@ -372,6 +412,12 @@ msgid ""
" * two arcs\n"
" * one arc and one line segment\n"
msgstr ""
"Поганий вибір для обмеження Різниця Довжин. Це обмеження можна застосувати "
"до:\n"
"\n"
" * двох відрізків\n"
" * двох дуг\n"
" * відрізка та дуги\n"
#: constraint.cpp:487
msgid ""
@ -380,6 +426,10 @@ msgid ""
" * a line segment and a point (point at midpoint)\n"
" * a line segment and a workplane (line's midpoint on plane)\n"
msgstr ""
"Поганий вибір для обмеження До Середини. Це обмеження можна застосувати до:\n"
"\n"
" * відрізка та точки (точка на середині відрізку)\n"
" * відрізка та робочої площини (середина відрізку лежить в площині)\n"
#: constraint.cpp:545
msgid ""
@ -392,18 +442,31 @@ msgid ""
" * workplane, and two points or a line segment (symmetric about "
"workplane)\n"
msgstr ""
"Поганий вибір для обмеження за симетрією. Це обмеження можна застосувати "
"до:\n"
"\n"
" * двох точок або відрізку прямої (симетрія відносно початку координат "
"робочої площини)\n"
" * відрізка та двох точок або іншого відрізка (симетрія відносно "
"відрізка)\n"
" * робочої площини та двох точок або відрізка (симетрія відносно робочої "
"площини)\n"
#: constraint.cpp:560
msgid ""
"A workplane must be active when constraining symmetric without an explicit "
"symmetry plane."
msgstr ""
"Робоча площина має бути активною коли використовується обмеження за "
"симетрією без явного вибору площини."
#: constraint.cpp:600
msgid ""
"Activate a workplane (with Sketch -> In Workplane) before applying a "
"horizontal or vertical constraint."
msgstr ""
"Активуйте площину (в Креслення -> У Робочій Площині) перед застосуванням "
"обмеження Горизонтально або Вертикально."
#: constraint.cpp:616
msgid ""
@ -413,6 +476,11 @@ msgid ""
" * two or more points\n"
" * one or more line segments\n"
msgstr ""
"Поганий вибір для обмеження Горизонтально / Вертикально. Це обмеження можна "
"застосувати до:\n"
"\n"
" * двох або більше точок\n"
" * одного або більше відрізків\n"
#: constraint.cpp:634
msgid ""
@ -421,9 +489,12 @@ msgid ""
"\n"
" * two normals\n"
msgstr ""
"Поганий вибір для обмеження Однакова Орієнтація. Це обмеження можна "
"застосувати до:\n"
"\n"
" * двох перпендикулярів\n"
#: constraint.cpp:685
#, fuzzy
msgid "Must select an angle constraint."
msgstr "Необхідно обрати кут."
@ -444,10 +515,20 @@ msgid ""
" * 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"
msgstr ""
"Поганий вибір для обмеження за Кутом. Це обмеження можна застосувати до:\n"
"\n"
"Кута між:\n"
" * двома відрізками\n"
" * відрізком та перпендикуляром\n"
" * двома перпендикулярами\n"
"\n"
"Рівних кутів між:\n"
" * чотирма відрізками чи перпендикулярами (рівні кути між А,Б та В,Г)\n"
" * трьома відрізками чи перпендикулярами (рівні кути між А,Б та Б,В)\n"
#: constraint.cpp:805
msgid "Curve-curve tangency must apply in workplane."
msgstr ""
msgstr "Обмеження дотичності дуг має відбуватися у робочій площині."
#: constraint.cpp:818
msgid ""
@ -460,6 +541,16 @@ msgid ""
" * two or more normals (parallel)\n"
" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n"
msgstr ""
"Поганий вибір для обмеження Паралельно / Дотична. Це обмеження можна "
"застосувати до:\n"
"\n"
" * двох граней\n"
" * двох або більше відрізків (паралельні)\n"
" * одного або більше відрізка та одного або більше перпендикуляра "
"(паралельні)\n"
" * двох або більше перпендикулярів (паралельні)\n"
" * двох відрізків, дуг, чи кривих Безьє, що мають спільну кінцеву "
"точку(дотичні)\n"
#: constraint.cpp:843
msgid ""
@ -470,6 +561,13 @@ msgid ""
" * a line segment and a normal\n"
" * two normals\n"
msgstr ""
"Поганий вибір для обмеження Перпендикулярно. Це обмеження можна застосувати "
"до:\n"
"\n"
" * двох граней\n"
" * двох відрізків\n"
" * відрізка та перпендикуляра\n"
" * двох перпендикулярів\n"
#: constraint.cpp:860
msgid ""
@ -478,6 +576,10 @@ msgid ""
"\n"
" * a point\n"
msgstr ""
"Поганий вибір для обмеження Фіксувати Точку Після Переміщення. Це обмеження "
"можна застосувати до:\n"
"\n"
" * точки\n"
#: constraint.cpp:875 mouse.cpp:1158
msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT"
@ -492,9 +594,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 Вигляд\" для "
"еспорту лише ліній та кривих."
"Вісутня об'ємна модель; створіть модель за допомогою екструдування та "
"обертання або скористайтеся функцією \"Експортувати 2D Вигляд\" для еспорту "
"лише ліній та кривих."
#: export.cpp:61
msgid ""
@ -505,18 +607,25 @@ msgid ""
" * a point and two line segments (plane through point and parallel to "
"lines)\n"
msgstr ""
"Поганий вибір для експорту розрізу. Будьласка, оберіть:\n"
"\n"
" * нічого, з активною робочою площиною (робоча площина буде площиною "
"розрізу)\n"
" * грань (площина розрізу через грань)\n"
" * точку та два відрізки (площина розрізу через точку та паралельно "
"відрізкам)\n"
#: export.cpp:818
msgid "Active group mesh is empty; nothing to export."
msgstr "Активна група не містить меш; немає чого експортувати."
msgstr "Активна група не містить сітку; немає чого експортувати."
#: exportvector.cpp:336
msgid "freehand lines were replaced with continuous lines"
msgstr ""
msgstr "довільні лінії було замінено на неперервні відрізки"
#: exportvector.cpp:338
msgid "zigzag lines were replaced with continuous lines"
msgstr ""
msgstr "zigzag лінії було замінено на неперервні відрізки"
#: exportvector.cpp:592
msgid ""
@ -573,6 +682,9 @@ msgid ""
"If you decline, any geometry that depends on the missing file will be "
"permanently removed."
msgstr ""
"Шукати файл вручну?\n"
"\n"
"При відмові, уся геометрія, що залежить від втраченого файлу буде видалена."
#: file.cpp:873
msgctxt "button"
@ -759,7 +871,7 @@ msgstr "Використовувати &Перспективну Проекці
#: graphicswin.cpp:97
msgid "Show E&xploded View"
msgstr ""
msgstr "Показати С&кладальне Креслення"
#: graphicswin.cpp:98
msgid "Dimension &Units"
@ -779,7 +891,7 @@ msgstr "Розміри у &Дюймах"
#: graphicswin.cpp:102
msgid "Dimensions in &Feet and Inches"
msgstr ""
msgstr "Розміри в &Футах та Дюймах"
#: graphicswin.cpp:104
msgid "Show &Toolbar"
@ -915,7 +1027,7 @@ msgstr "Від&носний Розмір"
#: graphicswin.cpp:148
msgid "A&ngle / Equal Angle"
msgstr ""
msgstr "К&ут / Рівний Кут"
#: graphicswin.cpp:149
msgid "Reference An&gle"
@ -943,15 +1055,15 @@ msgstr "&На точці / Кривій / Площині"
#: graphicswin.cpp:157
msgid "E&qual Length / Radius"
msgstr ""
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"
@ -1039,7 +1151,7 @@ msgstr "&Вебсайт / Посібник"
#: graphicswin.cpp:186
msgid "&Go to GitHub commit"
msgstr ""
msgstr "&До коміту на GitHub"
#: graphicswin.cpp:188
msgid "&About"
@ -1066,37 +1178,47 @@ msgid ""
"For a perspective projection, modify the perspective factor in the "
"configuration screen. A value around 0.3 is typical."
msgstr ""
"Встановлено нульовий коефіцієнт перспективи, тому відображення завжди буде "
"паралельною проєкцією."
#: graphicswin.cpp:878
msgid ""
"Select a point; this point will become the center of the view on screen."
msgstr ""
msgstr "Оберіть точку. Ця точка стане центром відображення на екрані."
#: graphicswin.cpp:1178
msgid "No additional entities share endpoints with the selected entities."
msgstr ""
msgstr "Жодні сутності не мають спільних кінцевих точок з обраними сутностями."
#: graphicswin.cpp:1196
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:1219
msgid ""
"No workplane is active. Activate a workplane (with Sketch -> In Workplane) "
"to define the plane for the snap grid."
msgstr ""
"Жодної активної площини. Активуйте площину (в Креслення -> У Робочій "
"Площині) щоб визначити площину для сітки."
#: graphicswin.cpp:1226
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:1311
msgid "No workplane selected. Activating default workplane for this group."
msgstr ""
"Жодної робочої площини не обрано. Активую площину за замовченням для цієї "
"групи."
#: graphicswin.cpp:1314
msgid ""
@ -1104,16 +1226,21 @@ msgid ""
"workplane. Try selecting a workplane, or activating a sketch-in-new-"
"workplane group."
msgstr ""
"Жодної робочої площини не обрано, і активна група не має площини за "
"замовченням. Спробуйте обрати площину, або активувати групу Креслення У "
"Робочій Площині"
#: graphicswin.cpp:1335
msgid ""
"Bad selection for tangent arc at point. Select a single point, or select "
"nothing to set up arc parameters."
msgstr ""
"Поганий вибір для дотичної дуги у точці. Оберіть одну точку, або оберіть "
"нічого щоб налаштувати дугу."
#: graphicswin.cpp:1346
msgid "click point on arc (draws anti-clockwise)"
msgstr ""
msgstr "клікніть для встановлення точки дуги (проти годинникової стрілки)"
#: graphicswin.cpp:1347
msgid "click to place datum point"
@ -1155,7 +1282,7 @@ msgstr "клікніть для встановлення верхньої лів
msgid ""
"No entities are selected. Select entities before trying to toggle their "
"construction state."
msgstr ""
msgstr "Жодної сутності не обрано. Оберіть сутності для перключення їх стану."
#: group.cpp:86
msgctxt "group-name"
@ -1172,6 +1299,13 @@ 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:170
msgid ""
@ -1189,6 +1323,7 @@ msgstr "видавлювання"
#: group.cpp:184
msgid "Lathe operation can only be applied to planar sketches."
msgstr ""
"Операція виточування може бути застосована тільки для пласких креслень."
#: group.cpp:195
msgid ""
@ -1198,6 +1333,11 @@ msgid ""
"to line / normal, through point)\n"
" * a line segment (revolved about line segment)\n"
msgstr ""
"Поганий вибір для нової групи проточування. Ця група може бути створена з:\n"
"\n"
" * точки та відрізка або перпендикуляра (обертається крізь точку навколо "
"осі, паралельної до відрізку / перпендикуляру)\n"
" * відрізка (обертається навколо відрізка)\n"
#: group.cpp:205
msgctxt "group-name"
@ -1207,6 +1347,7 @@ msgstr "проточування"
#: group.cpp:210
msgid "Revolve operation can only be applied to planar sketches."
msgstr ""
"Операція прокручування може бути застосована тільки для пласких креслень."
#: group.cpp:221
msgid ""
@ -1216,6 +1357,11 @@ msgid ""
"to line / normal, through point)\n"
" * a line segment (revolved about line segment)\n"
msgstr ""
"Поганий вибір для нової групи прокручування. Ця група може бути створена з:\n"
"\n"
" * точки та відрізка або перпендикуляра (обертається крізь точку навколо "
"осі, паралельної до відрізку / перпендикуляру)\n"
" * відрізка (обертається навколо відрізка)\n"
#: group.cpp:233
msgctxt "group-name"
@ -1234,6 +1380,11 @@ msgid ""
"to line / normal, through point)\n"
" * a line segment (revolved about line segment)\n"
msgstr ""
"Поганий вибір для нової групи проточування. Ця група може бути створена з:\n"
"\n"
" * точки та відрізка або перпендикуляра (обертається крізь точку навколо "
"осі, паралельної до відрізку / перпендикуляру)\n"
" * відрізка (обертається навколо відрізка)\n"
#: group.cpp:261
msgctxt "group-name"
@ -1249,6 +1400,12 @@ msgid ""
" * a point and a line or a normal (rotate about an axis through the "
"point, and parallel to line / normal)\n"
msgstr ""
"Поганий вибір для нової групи проточування. Ця група може бути створена з:\n"
"\n"
" * точки, доки закріплено в робочій площині (обертається в площині, "
"навколо цієї точки)\n"
" * точки та відрізка чи перпендикуляря (обертається навколо осі, що "
"проходить крізь цю точку, і паралельна до відрізку / перпендикуляру)\n"
#: group.cpp:287
msgctxt "group-name"
@ -1270,7 +1427,7 @@ msgstr "не замкнений контур або не все в єдином
#: groupmesh.cpp:723
msgid "points not all coplanar!"
msgstr ""
msgstr "не всі точки знаходяться в одній площині!"
#: groupmesh.cpp:725
msgid "contour is self-intersecting!"
@ -1282,38 +1439,48 @@ msgstr "ребро нульової довжини!"
#: importmesh.cpp:136
msgid "Text-formated STL files are not currently supported"
msgstr ""
msgstr "Файли STL з текстовим форматуванням наразі не підтримуються"
#: modify.cpp:252
msgid "Must be sketching in workplane to create tangent arc."
msgstr ""
"Для створення дотичної дуги має бути обраний режим креслення в робочій "
"площині."
#: 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: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:595
msgid "Couldn't split this entity; lines, circles, or cubics only."
msgstr ""
"Неможливо розділити цей об'єкт. Дозволено тільки для відрізків, кіл(дуг), чи "
"сплайнів."
#: modify.cpp:622
#, fuzzy
msgid "Must be sketching in workplane to split."
msgstr "Має бути накреслений у робочій площині для розділеня."
msgstr ""
"Креслення має відбуватися у робочій площині для використання розділення."
#: 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:734
msgid "Can't split; no intersection found."
@ -1421,6 +1588,8 @@ msgid ""
"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In "
"Workplane."
msgstr ""
"Неможливо накреслити прямокутник у 3d; спочатку активуйте робочу площину в "
"Креслення -> У Робочій Площині."
#: mouse.cpp:1026
msgid "click to place other corner of rectangle"
@ -1435,6 +1604,8 @@ msgid ""
"Can't draw arc in 3d; first, activate a workplane with Sketch -> In "
"Workplane."
msgstr ""
"Неможливо накреслити дугу у 3d; спочатку активуйте робочу площину в "
"Креслення -> У Робочій Площині."
#: mouse.cpp:1071
msgid "click to place point"
@ -1448,12 +1619,16 @@ msgstr "клікніть наступну точку кривої або нат
msgid ""
"Sketching in a workplane already; sketch in 3d before creating new workplane."
msgstr ""
"Вже обрано креслення у робочій площині; поверніться у креслення будь-ду в 3D "
"для створення нової робочої площини."
#: mouse.cpp:1108
msgid ""
"Can't draw text in 3d; first, activate a workplane with Sketch -> In "
"Workplane."
msgstr ""
"Неможливо накреслити текст у 3д; спочатку активуйте робочу площину в "
"Креслення -> У Робочій Площині."
#: mouse.cpp:1125
msgid "click to place bottom right of text"
@ -1464,16 +1639,18 @@ msgid ""
"Can't draw image in 3d; first, activate a workplane with Sketch -> In "
"Workplane."
msgstr ""
"Неможливо накреслити зображення у 3д; спочатку активуйте робочу площину в "
"Креслення -> У Робочій Площині."
#: platform/gui.cpp:85 platform/gui.cpp:90 solvespace.cpp:565
msgctxt "file-type"
msgid "SolveSpace models"
msgstr "SolveSpace модель"
msgstr "SolveSpace модел"
#: platform/gui.cpp:89
msgctxt "file-type"
msgid "ALL"
msgstr ""
msgstr "УСІ"
#: platform/gui.cpp:91
msgctxt "file-type"
@ -1483,7 +1660,7 @@ msgstr "IDF друкована плата"
#: platform/gui.cpp:92
msgctxt "file-type"
msgid "STL triangle mesh"
msgstr ""
msgstr "STL трикутникова сітка"
#: platform/gui.cpp:96
msgctxt "file-type"
@ -1493,7 +1670,7 @@ msgstr "PNG зображення"
#: platform/gui.cpp:100
msgctxt "file-type"
msgid "STL mesh"
msgstr "STL меш"
msgstr "STL сітка"
#: platform/gui.cpp:101
msgctxt "file-type"
@ -1663,6 +1840,9 @@ msgid ""
"is probably not what you want; hide them by clicking the link at the top of "
"the text window."
msgstr ""
"Зараз обмеження відображаються, і будуть експортовані в шлях інструменту. "
"Скоріш за все, це не те, чого ви домагаєтеся; cховайте їх клікнувши на "
"посилання над текстовим вікном."
#: solvespace.cpp:812
#, c-format
@ -1670,6 +1850,7 @@ msgid ""
"Can't identify file type from file extension of filename '%s'; try .dxf or ."
"dwg."
msgstr ""
"Неможливо визначити тип файлу з розширення '%s'; спробуйте .dxf чи .dwg."
#: solvespace.cpp:864
msgid "Constraint must have a label, and must not be a reference dimension."
@ -1681,7 +1862,7 @@ msgstr "Поганий вибір для крокової зміни розмі
#: solvespace.cpp:892
msgid "The assembly does not interfere, good."
msgstr ""
msgstr "Збірка не перетинається, очман."
#: solvespace.cpp:908
#, c-format
@ -1714,6 +1895,10 @@ msgid ""
"Curved surfaces have been approximated as triangles.\n"
"This introduces error, typically of around 1%."
msgstr ""
"\n"
"\n"
"Скруглені поверхні були апроксимовані до трикутників.\n"
"Це створює похибку, зазвичай біля 1%."
#: solvespace.cpp:937
#, c-format
@ -1725,6 +1910,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:946
msgid ""
@ -1804,6 +1995,9 @@ msgid ""
"\n"
"The model contains %d triangles, from %d surfaces."
msgstr ""
"\n"
"\n"
"Модель складається з %d трикутників, що розташовані на %d поверхнях."
#: solvespace.cpp:1068
#, c-format

View File

@ -18,7 +18,7 @@ BEGIN
VALUE "FileVersion", "${PROJECT_VERSION}~${solvespace_GIT_HASH}"
VALUE "OriginalFilename", "solvespace.exe"
VALUE "InternalName", "solvespace"
VALUE "LegalCopyright", "(c) 2008-2023 Jonathan Westhues and other authors"
VALUE "LegalCopyright", "(c) 2008-2024 Jonathan Westhues and other authors"
END
END

View File

@ -249,8 +249,10 @@ void GraphicsWindow::PasteClipboard(Vector trans, double theta, double scale) {
case Constraint::Type::COMMENT:
c.disp.offset = c.disp.offset.Plus(trans);
break;
case Constraint::Type::PT_PT_DISTANCE:
case Constraint::Type::PT_LINE_DISTANCE:
c.valA *= scale;
break;
case Constraint::Type::PT_PT_DISTANCE:
case Constraint::Type::PROJ_PT_DISTANCE:
case Constraint::Type::DIAMETER:
c.valA *= fabs(scale);

View File

@ -70,6 +70,10 @@ void TextWindow::ScreenChangeExportOffset(int link, uint32_t v) {
SS.TW.edit.meaning = Edit::EXPORT_OFFSET;
}
void TextWindow::ScreenChangeArcDimDefault(int link, uint32_t v) {
SS.arcDimDefaultDiameter = !SS.arcDimDefaultDiameter;
}
void TextWindow::ScreenChangeFixExportColors(int link, uint32_t v) {
SS.fixExportColors = !SS.fixExportColors;
}
@ -344,6 +348,9 @@ void TextWindow::ShowConfiguration() {
Printf(false, " %Fd%f%Ll%s edit newly added dimensions%E",
&ScreenChangeImmediatelyEditDimension,
SS.immediatelyEditDimension ? CHECK_TRUE : CHECK_FALSE);
Printf(false, " %Fd%f%Ll%s arc default is diameter%E",
&ScreenChangeArcDimDefault,
SS.arcDimDefaultDiameter ? CHECK_TRUE : CHECK_FALSE);
Printf(false, "");
Printf(false, "%Ft autosave interval (in minutes)%E");
Printf(false, "%Ba %d %Fl%Ll%f[change]%E",

View File

@ -236,6 +236,12 @@ void Constraint::MenuConstrain(Command id) {
} else if(gs.circlesOrArcs == 1 && gs.n == 1) {
c.type = Type::DIAMETER;
c.entityA = gs.entity[0];
Entity* arc = SK.GetEntity(gs.entity[0]);
if ((arc->type == EntityBase::Type::ARC_OF_CIRCLE)
&& (!SS.arcDimDefaultDiameter))
{
c.other = true;
}
} else {
Error(_("Bad selection for distance / diameter constraint. This "
"constraint can apply to:\n\n"

View File

@ -241,7 +241,7 @@ void GraphicsWindow::SelectByMarquee() {
}
//-----------------------------------------------------------------------------
// Sort the selection according to various critieria: the entities and
// Sort the selection according to various criteria: the entities and
// constraints separately, counts of certain types of entities (circles,
// lines, etc.), and so on.
//-----------------------------------------------------------------------------

View File

@ -16,7 +16,7 @@ void SMesh::AddTriangle(STriMeta meta, Vector n, Vector a, Vector b, Vector c) {
Vector ab = b.Minus(a), bc = c.Minus(b);
Vector np = ab.Cross(bc);
if(np.Magnitude() < 1e-10) {
// ugh; gl sometimes tesselates to collinear triangles
// ugh; gl sometimes tessellates to collinear triangles
return;
}
if(np.Dot(n) > 0) {

View File

@ -1270,7 +1270,7 @@ MessageDialogRef CreateMessageDialog(WindowRef parentWindow) {
// File dialogs
//-----------------------------------------------------------------------------
// In emscripten psuedo filesystem, all userdata will be stored in this directory.
// In emscripten pseudo filesystem, all userdata will be stored in this directory.
static std::string basePathInFilesystem = "/data/";

View File

@ -130,7 +130,7 @@ class FileManagerUI {
dialog.appendChild(filelist);
const dummyfilelistitem = document.createElement('li');
dummyfilelistitem.textContent = "(No file in psuedo filesystem)";
dummyfilelistitem.textContent = "(No file in pseudo filesystem)";
filelist.appendChild(dummyfilelistitem);
if (this.__isOpenDialog) {
@ -341,7 +341,7 @@ class FileManagerUI {
const files = this.__getFileEntries_recurse(this.__basePathInFilesystem);
if (files.length < 1) {
const dummyfilelistitem = document.createElement('li');
dummyfilelistitem.textContent = "(No file in psuedo filesystem)";
dummyfilelistitem.textContent = "(No file in pseudo filesystem)";
this.__filelistElement.appendChild(dummyfilelistitem);
} else {

View File

@ -423,7 +423,7 @@ window.addEventListener('keyup', function(event) {
});
// FIXME(emscripten): Should be implemnted in guihtmlcpp ?
// FIXME(emscripten): Should be implemented in guihtmlcpp ?
class FileUploadHelper {
constructor() {
this.modalRoot = document.createElement("div");
@ -583,7 +583,7 @@ function createFileUploadHelperInstance() {
return new FileUploadHelper();
}
// FIXME(emscripten): Should be implemnted in guihtmlcpp ?
// FIXME(emscripten): Should be implemented in guihtmlcpp ?
class FileDownloadHelper {
constructor() {
this.modalRoot = document.createElement("div");

View File

@ -69,6 +69,8 @@ void SolveSpaceUI::Init() {
exportScale = settings->ThawFloat("ExportScale", 1.0);
// Export offset (cutter radius comp)
exportOffset = settings->ThawFloat("ExportOffset", 0.0);
// Dimensions on arcs default to diameter vs radius
arcDimDefaultDiameter = settings->ThawBool("ArcDimDefaultDiameter", false);
// Rewrite exported colors close to white into black (assuming white bg)
fixExportColors = settings->ThawBool("FixExportColors", true);
// Export background color
@ -250,6 +252,8 @@ void SolveSpaceUI::Exit() {
settings->FreezeFloat("ExportScale", exportScale);
// Export offset (cutter radius comp)
settings->FreezeFloat("ExportOffset", exportOffset);
// Rewrite the default arc dimension setting
settings->FreezeBool("ArcDimDefaultDiameter", arcDimDefaultDiameter);
// Rewrite exported colors close to white into black (assuming white bg)
settings->FreezeBool("FixExportColors", fixExportColors);
// Export background color
@ -1099,7 +1103,7 @@ void SolveSpaceUI::MenuHelp(Command id) {
"law. For details, visit http://gnu.org/licenses/\n"
"\n"
"© 2008-%d Jonathan Westhues and other authors.\n"),
PACKAGE_VERSION, 2023);
PACKAGE_VERSION, 2024);
break;
case Command::GITHUB:

View File

@ -573,6 +573,7 @@ public:
double gridSpacing;
double exportScale;
double exportOffset;
bool arcDimDefaultDiameter;
bool fixExportColors;
bool exportBackgroundColor;
bool drawBackFaces;

View File

@ -530,7 +530,7 @@ bool SShell::ClassifyEdge(Class *indir, Class *outdir,
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)
// Edge-on-face (unless edge-on-edge above superseded)
Point2d pin, pout;
srf.ClosestPointTo(p.Plus(edge_n_in), &pin, /*mustConverge=*/false);
srf.ClosestPointTo(p.Plus(edge_n_out), &pout, /*mustConverge=*/false);

View File

@ -442,6 +442,7 @@ public:
static void ScreenShowEditView(int link, uint32_t v);
static void ScreenGoToWebsite(int link, uint32_t v);
static void ScreenChangeArcDimDefault(int link, uint32_t v);
static void ScreenChangeFixExportColors(int link, uint32_t v);
static void ScreenChangeExportBackgroundColor(int link, uint32_t v);
static void ScreenChangeBackFaces(int link, uint32_t v);

View File

@ -1,5 +1,5 @@
//-----------------------------------------------------------------------------
// The View menu, stuff to snap to certain special vews of the model, and to
// The View menu, stuff to snap to certain special views of the model, and to
// display our current view of the model to the user.
//
// Copyright 2008-2013 Jonathan Westhues.