From 9e7afb5fb5334f42f24f24df8a625ef6c8d7cb7b Mon Sep 17 00:00:00 2001 From: peri4 Date: Tue, 14 Mar 2023 17:39:44 +0300 Subject: [PATCH] many small fixes, RU lang --- CMakeLists.txt | 2 +- src/core/lang/qglengine_core_en.ts | 4 + src/core/lang/qglengine_core_ru.ts | 4 + src/core/lang/update.bat | 2 + src/core/qglengine_core.qrc | 2 + src/core/scene/glscene.cpp | 7 +- src/core/scene/glscene.h | 2 +- src/icons/go-down.png | Bin 0 -> 26722 bytes src/icons/go-up.png | Bin 0 -> 27896 bytes src/widgets/lang/qglengine_widgets_en.ts | 651 ++++++++++++++++++++++ src/widgets/lang/qglengine_widgets_ru.ts | 655 +++++++++++++++++++++++ src/widgets/lang/update.bat | 2 + src/widgets/object_editor.cpp | 9 +- src/widgets/object_editor.h | 1 + src/widgets/primitiveeditor.ui | 2 +- src/widgets/scene_tree.cpp | 42 +- src/widgets/scene_tree.h | 2 + src/widgets/scene_tree.ui | 29 +- 18 files changed, 1397 insertions(+), 19 deletions(-) create mode 100644 src/core/lang/qglengine_core_en.ts create mode 100644 src/core/lang/qglengine_core_ru.ts create mode 100644 src/core/lang/update.bat create mode 100644 src/icons/go-down.png create mode 100644 src/icons/go-up.png create mode 100644 src/widgets/lang/qglengine_widgets_en.ts create mode 100644 src/widgets/lang/qglengine_widgets_ru.ts create mode 100644 src/widgets/lang/update.bat diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e9a404..8cc2529 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,7 +42,7 @@ else() add_subdirectory(src) shstk_copy_to_parent() - shstk_install(qglengine FALSE "" "${QGLEngine_VERSION_FILE}") + shstk_install(qglengine FALSE "" "${QGLEngine_VERSION_FILE}") file(GLOB CMAKES "cmake/*.cmake" "cmake/*.in") install(FILES ${CMAKES} DESTINATION ${CMAKE_ROOT}/Modules) diff --git a/src/core/lang/qglengine_core_en.ts b/src/core/lang/qglengine_core_en.ts new file mode 100644 index 0000000..bc6d6e7 --- /dev/null +++ b/src/core/lang/qglengine_core_en.ts @@ -0,0 +1,4 @@ + + + + diff --git a/src/core/lang/qglengine_core_ru.ts b/src/core/lang/qglengine_core_ru.ts new file mode 100644 index 0000000..f62cf2e --- /dev/null +++ b/src/core/lang/qglengine_core_ru.ts @@ -0,0 +1,4 @@ + + + + diff --git a/src/core/lang/update.bat b/src/core/lang/update.bat new file mode 100644 index 0000000..36cb300 --- /dev/null +++ b/src/core/lang/update.bat @@ -0,0 +1,2 @@ +lupdate ../ -no-obsolete -ts qglengine_core_ru.ts +lupdate ../ -no-obsolete -ts qglengine_core_en.ts diff --git a/src/core/qglengine_core.qrc b/src/core/qglengine_core.qrc index 52a6abf..85ff74a 100644 --- a/src/core/qglengine_core.qrc +++ b/src/core/qglengine_core.qrc @@ -26,6 +26,8 @@ ../icons/edit-paste.png ../icons/go-jump.png ../icons/go-top.png + ../icons/go-up.png + ../icons/go-down.png ../icons/layer-visible-on.png ../icons/layer-visible-off.png ../icons/light-+.png diff --git a/src/core/scene/glscene.cpp b/src/core/scene/glscene.cpp index cc1d58f..a3969da 100644 --- a/src/core/scene/glscene.cpp +++ b/src/core/scene/glscene.cpp @@ -53,12 +53,13 @@ Scene * Scene::clone() { } -void Scene::addObject(ObjectBase * o) { +void Scene::addObject(ObjectBase * o, ObjectBase * parent) { + if (!parent) parent = root_; ObjectBaseList aol = o->children(true); attachObject(o); foreach(ObjectBase * c, aol) attachObject(c); - root_->addChild(o); + parent->addChild(o); tree_changed = tree_struct_changed = true; } @@ -104,6 +105,7 @@ void Scene::clear() { geometries.clear(); materials.clear(); emit __destroyed(); + if (destroying) return; emit treeChanged(); } @@ -150,6 +152,7 @@ void Scene::removeObjectInternal(ObjectBase * o, ObjectBase * where) { void Scene::emitSelectionChanged() { + if (destroying) return; selected_top.clear(); foreach(ObjectBase * o, selected_) { ObjectBase * po = o->selectedParent(); diff --git a/src/core/scene/glscene.h b/src/core/scene/glscene.h index dc4f39e..6a1475c 100644 --- a/src/core/scene/glscene.h +++ b/src/core/scene/glscene.h @@ -56,7 +56,7 @@ public: /// Add object \"o\" to scene and take its ownership /// All materials and geometries used by \"o\" tree /// copied into this scene - void addObject(ObjectBase * o); + void addObject(ObjectBase * o, ObjectBase * parent = nullptr); void addScene(const Scene * s); void assignFrom(const Scene * s); diff --git a/src/icons/go-down.png b/src/icons/go-down.png new file mode 100644 index 0000000000000000000000000000000000000000..680ac2d8254b44865e16fd797f87136c22d15c56 GIT binary patch literal 26722 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 literal 0 HcmV?d00001 diff --git a/src/icons/go-up.png b/src/icons/go-up.png new file mode 100644 index 0000000000000000000000000000000000000000..5e8f7dd51cfc43d5a074208779fcd58789f164c3 GIT binary patch literal 27896 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 literal 0 HcmV?d00001 diff --git a/src/widgets/lang/qglengine_widgets_en.ts b/src/widgets/lang/qglengine_widgets_en.ts new file mode 100644 index 0000000..c92757a --- /dev/null +++ b/src/widgets/lang/qglengine_widgets_en.ts @@ -0,0 +1,651 @@ + + + + + MaterialEditor + + Glass + + + + Transparency + + + + Reflectivity + + + + IOF + + + + Dispersion + + + + Reflection map + + + + Front: + + + + Back: + + + + Left: + + + + Right: + + + + Top: + + + + Bottom: + + + + X + + + + ^ + + + + load from directory + + + + Diffuse + + + + Normal + + + + Metalness + + + + Roughness + + + + Emission + + + + Relief + + + + + MaterialMapEditor + + title: + + + + Map + + + + Amount: + + + + Offset: + + + + Scale X: + + + + Scale Y: + + + + Invert R + + + + Invert G + + + + Invert B + + + + + MaterialsEditor + + Unset + + + + Assign + + + + Add + + + + Delete + + + + Rename ... + + + + Clone + + + + + ObjectEditor + + [No selected] + + + + Position + + + + X: + + + + Y: + + + + Z: + + + + Rotation + + + + ° + + + + Scale + + + + Texture + + + + SX: + + + + R: + + + + SY: + + + + Receive shadows + + + + Cast shadows + + + + Accept fog + + + + Visible + + + + Accept light + + + + Color: + + + + Aim distance: + + + + Light + + + + Type: + + + + Omni + + + + Cone + + + + Directional + + + + Intensity: + + + + Decay ^0: + + + + Decay ^1: + + + + Decay ^2: + + + + Size: + + + + Angle: + + + + - + + + + Camera + + + + Depth start: + + + + FOV: + + + + Roll: + + + + Mirror Y + + + + Mirror X + + + + Map + + + + [%1 objects] + + + + + PrimitiveEditor + + Form + + + + Width: + + + + Length: + + + + Segments W: + + + + Segments L: + + + + Segments H: + + + + Radius 1: + + + + Radius 2: + + + + Angle: + + + + ° + + + + Segments: + + + + Segments 2: + + + + Color: + + + + Flip normals + + + + Add + + + + Height: + + + + + PropertyEditor + + Property + + + + Value + + + + + SceneTree + + Filter: + + + + Expand tree + + + + Collapse tree + + + + Name + + + + Vis + + + + Material + + + + Focus + + + + Remove + + + + Clone + + + + Group + + + + Select parent + + + + Select by mesh + + + + Select by material + + + + Add node + + + + Add light + + + + Add camera + + + + Nodes + + + + Meshes + + + + Lights + + + + Cameras + + + + Transfer transform to children + + + + Active camera + + + + Default camera + + + + Move to parent + + + + %1 objects, %2 hide by filter + + + + + TexturesEditor + + Search pathes: + + + + Add + + + + Delete + + + + Clear + + + + Used files: + + + + 0 + + + + Reload + + + + Missed files: + + + + Select search path + + + + + ViewEditor + + Draw mode: + + + + Point + + + + Wireframe + + + + Solid + + + + Gamma: + + + + Env HDR: + + + + Camera light + + + + Service mode + + + + FXAA + + + + Auto exposure + + + + VSync + + + + Soft shadows + + + + Soft shadow samples: + + + + Soft shadow quality: + + + + Camera + + + + Orbit + + + + FOV: + + + + Depth start: + + + + Halos + + + + Hover: + + + + Selection: + + + + Fog + + + + Density: + + + + Decay: + + + + Color: + + + + Map sizes + + + + Textures: + + + + Shadows: + + + + diff --git a/src/widgets/lang/qglengine_widgets_ru.ts b/src/widgets/lang/qglengine_widgets_ru.ts new file mode 100644 index 0000000..54852b7 --- /dev/null +++ b/src/widgets/lang/qglengine_widgets_ru.ts @@ -0,0 +1,655 @@ + + + + + MaterialEditor + + Glass + + + + Transparency + Прозрачность + + + Reflectivity + Отражение + + + IOF + + + + Dispersion + + + + Reflection map + Карта отражения + + + Front: + + + + Back: + + + + Left: + + + + Right: + + + + Top: + + + + Bottom: + + + + X + + + + ^ + + + + load from directory + + + + Diffuse + Альбедо + + + Normal + Нормали + + + Metalness + Металичность + + + Roughness + Шероховатость + + + Emission + Самосвечение + + + Relief + Рельеф + + + + MaterialMapEditor + + title: + + + + Map + Текстура + + + Amount: + Множитель: + + + Offset: + Смещение: + + + Scale X: + Масштаб X: + + + Scale Y: + Масштаб Y: + + + Invert R + Обратить R + + + Invert G + Обратить G + + + Invert B + Обратить B + + + + MaterialsEditor + + Unset + Сбросить + + + Assign + Назначить + + + Add + Добавить + + + Delete + Удалить + + + Rename ... + Переименовать ... + + + Clone + Клонировать + + + + ObjectEditor + + [No selected] + [Нет выделения] + + + Position + Положение + + + X: + + + + Y: + + + + Z: + + + + Rotation + Вращение + + + ° + + + + Scale + Масштаб + + + Texture + Текстура + + + SX: + + + + R: + + + + SY: + + + + Receive shadows + Принимать тени + + + Cast shadows + Создавать тени + + + Accept fog + Принимать туман + + + Visible + Видимость + + + Accept light + Принимать освещение + + + Color: + Цвет: + + + Aim distance: + Расстояние прицела: + + + Light + Светильник + + + Type: + Тип: + + + Omni + Точечный + + + Cone + Конический + + + Directional + Направленый + + + Intensity: + Интенсивность: + + + Decay ^0: + Затухание ^0: + + + Decay ^1: + Затухание ^1: + + + Decay ^2: + Затухание ^2: + + + Size: + Размер: + + + Angle: + Угол: + + + - + + + + Camera + Камера + + + Depth start: + Начало глубины: + + + FOV: + + + + Roll: + Наклон: + + + Mirror Y + Отразить Y + + + Mirror X + Отразить X + + + Map + Текстура + + + [%1 objects] + [%1 объектов] + + + + PrimitiveEditor + + Form + + + + Width: + Ширина: + + + Length: + Длина: + + + Height + Высота: + + + Segments W: + Сегментов Ш: + + + Segments L: + Сегментов Д: + + + Segments H: + Сегментов В: + + + Radius 1: + Радиус 1: + + + Radius 2: + Радиус 2: + + + Angle: + Угол: + + + ° + + + + Segments: + Сегментов: + + + Segments 2: + Сегментов 2: + + + Color: + Цвет: + + + Flip normals + Обратить нормали + + + Add + Добавить + + + Height: + Высота: + + + + PropertyEditor + + Property + Свойство + + + Value + Значение + + + + SceneTree + + Filter: + Поиск: + + + Expand tree + Развернуть дерево + + + Collapse tree + Свернуть дерево + + + Name + Имя + + + Vis + Вид + + + Material + Материал + + + Focus + Фокус + + + Remove + Удалить + + + Clone + Клонировать + + + Group + Группировать + + + Select parent + Выбрать родителя + + + Select by mesh + Выбрать по геометрии + + + Select by material + Выбрать по материалу + + + Add node + Добавить узел + + + Add light + Добавить светильник + + + Add camera + Добавить камеру + + + Nodes + Узлы + + + Meshes + Геометрии + + + Lights + Светильники + + + Cameras + Камеры + + + Transfer transform to children + Перенести преобразования на детей + + + Active camera + Активировать камеру + + + Default camera + Камера по умолчанию + + + Move to parent + Перенести к родителю + + + %1 objects, %2 hide by filter + %1 объектов, %2 скрыто поиском + + + + TexturesEditor + + Search pathes: + Пути поиска: + + + Add + Добавить + + + Delete + Удалить + + + Clear + Очистить + + + Used files: + Используемые файлы: + + + 0 + + + + Reload + Перезагрузить + + + Missed files: + Не найдено файлов: + + + Select search path + Выбор пути поиска + + + + ViewEditor + + Draw mode: + Режим отрисовки: + + + Point + Точки + + + Wireframe + Линии + + + Solid + Сплошной + + + Gamma: + Гамма: + + + Env HDR: + + + + Camera light + Камерный свет + + + Service mode + Служебный режим + + + FXAA + + + + Auto exposure + Автоэкспозиция + + + VSync + + + + Soft shadows + Мягкие тени + + + Soft shadow samples: + Мягкие тени, точек: + + + Soft shadow quality: + Мягкие тени, качество: + + + Camera + Камера + + + Orbit + Обращение + + + FOV: + + + + Depth start: + Начало глубины: + + + Halos + Свечения + + + Hover: + Наведение: + + + Selection: + Выделение: + + + Fog + Туман + + + Density: + Плотность: + + + Decay: + Затухание: + + + Color: + Цвет: + + + Map sizes + Размер карт + + + Textures: + Текстуры: + + + Shadows: + Тени: + + + diff --git a/src/widgets/lang/update.bat b/src/widgets/lang/update.bat new file mode 100644 index 0000000..b7a61c2 --- /dev/null +++ b/src/widgets/lang/update.bat @@ -0,0 +1,2 @@ +lupdate ../ -ts qglengine_widgets_ru.ts +lupdate ../ -ts qglengine_widgets_en.ts diff --git a/src/widgets/object_editor.cpp b/src/widgets/object_editor.cpp index 1e8da24..053653c 100644 --- a/src/widgets/object_editor.cpp +++ b/src/widgets/object_editor.cpp @@ -95,14 +95,19 @@ void ObjectEditor::selectionChanged() { ignore_next = false; return; } - ui->scrollArea->setEnabled(false); - if (!view) return; + if (!view) { + ui->scrollArea->setEnabled(false); + return; + } ObjectBaseList sol = view->selectedObjects(true); if (sol.isEmpty()) { ui->labelTitle->setText(tr("[No selected]")); + ui->scrollArea->setEnabled(false); return; } ui->scrollArea->setEnabled(true); + if (prev_sol == sol) return; + prev_sol = sol; if (sol.size() == 1) { setObject(sol[0]); ui->scrollArea->verticalScrollBar()->setValue(vpos); diff --git a/src/widgets/object_editor.h b/src/widgets/object_editor.h index 19aa747..376477d 100644 --- a/src/widgets/object_editor.h +++ b/src/widgets/object_editor.h @@ -41,6 +41,7 @@ protected: Ui::ObjectEditor * ui; QGLView * view; + ObjectBaseList prev_sol; bool active, ignore_next; private slots: diff --git a/src/widgets/primitiveeditor.ui b/src/widgets/primitiveeditor.ui index fa0bbb1..0c1d68f 100644 --- a/src/widgets/primitiveeditor.ui +++ b/src/widgets/primitiveeditor.ui @@ -120,7 +120,7 @@ - Height + Height: diff --git a/src/widgets/scene_tree.cpp b/src/widgets/scene_tree.cpp index 99f59f0..f5843e0 100644 --- a/src/widgets/scene_tree.cpp +++ b/src/widgets/scene_tree.cpp @@ -109,8 +109,9 @@ QList SceneTree::actionsAdd() { QList SceneTree::actionsSelection() { QList ret; ret << ui->actionFocus << newSeparator() << ui->actionGroup << ui->actionClone << newSeparator() << ui->actionSelect_parent - << ui->actionSelect_by_mesh << ui->actionSelect_by_material << newSeparator() << ui->actionTransfer_transform_to_children - << newSeparator() << ui->actionActive_camera << ui->actionDefault_camera << newSeparator() << ui->actionRemove; + << ui->actionSelect_by_mesh << ui->actionSelect_by_material << newSeparator() << ui->actionMove_to_parent + << ui->actionTransfer_transform_to_children << newSeparator() << ui->actionActive_camera << ui->actionDefault_camera + << newSeparator() << ui->actionRemove; return ret; } @@ -194,6 +195,19 @@ ObjectBase * SceneTree::itemObject(QTreeWidgetItem * item) const { } +ObjectBase * SceneTree::insertTarget() const { + auto sil = ui->treeObjects->selectedItems(); + QSet parents; + for (auto * i: sil) { + auto * p = itemObject(i); + if (p) p = p->parent(); + if (p) parents << p; + } + if (parents.size() != 1) return nullptr; + return parents.values()[0]; +} + + int SceneTree::itemType(QTreeWidgetItem * item) const { if (!item) return otNode; return item->data(cName, irType).toInt(); @@ -291,6 +305,7 @@ void SceneTree::checkActions() { ui->actionClone->setEnabled(has_1); ui->actionGroup->setEnabled(has_m); ui->actionTransfer_transform_to_children->setEnabled(has_1); + ui->actionMove_to_parent->setEnabled(has_1); ui->actionSelect_parent->setEnabled(has_1); ui->actionSelect_by_mesh->setEnabled(has_mesh); ui->actionSelect_by_material->setEnabled(has_mesh); @@ -378,7 +393,8 @@ void SceneTree::on_treeObjects_itemMoved(QTreeWidgetItem * item, QTreeWidgetItem void SceneTree::on_actionAdd_node_triggered() { if (!view) return; ObjectBase * no = new ObjectBase(); - view->scene()->addObject(no); + no->setName("node"); + view->scene()->addObject(no, insertTarget()); view->scene()->selectObject(no); } @@ -386,7 +402,8 @@ void SceneTree::on_actionAdd_node_triggered() { void SceneTree::on_actionAdd_light_triggered() { if (!view) return; ObjectBase * no = new Light(); - view->scene()->addObject(no); + no->setName("light"); + view->scene()->addObject(no, insertTarget()); view->scene()->selectObject(no); } @@ -394,7 +411,8 @@ void SceneTree::on_actionAdd_light_triggered() { void SceneTree::on_actionAdd_camera_triggered() { if (!view) return; ObjectBase * no = new Camera(); - view->scene()->addObject(no); + no->setName("camera"); + view->scene()->addObject(no, insertTarget()); view->scene()->selectObject(no); } @@ -434,6 +452,20 @@ void SceneTree::on_actionTransfer_transform_to_children_triggered() { } +void SceneTree::on_actionMove_to_parent_triggered() { + if (!view) return; + ObjectBaseList sol = view->scene()->selectedObjects(true); + foreach(ObjectBase * o, sol) { + auto * old_p = o->parent(); + if (!old_p) continue; + auto * new_p = old_p->parent(); + if (!new_p) continue; + old_p->removeChild(o); + new_p->addChild(o); + } +} + + void SceneTree::on_actionActive_camera_triggered() { if (!view) return; ObjectBase * o = view->scene()->selectedObject(); diff --git a/src/widgets/scene_tree.h b/src/widgets/scene_tree.h index 42f1d93..c792bb1 100644 --- a/src/widgets/scene_tree.h +++ b/src/widgets/scene_tree.h @@ -48,6 +48,7 @@ private: void restoreExpanded(QTreeWidgetItem * ti); void makeObjetTree(ObjectBase * o, QTreeWidgetItem * ti); ObjectBase * itemObject(QTreeWidgetItem * item) const; + ObjectBase * insertTarget() const; int itemType(QTreeWidgetItem * item) const; bool filterTree(QTreeWidgetItem * ti, const QString & filter, int types); void checkActions(); @@ -74,6 +75,7 @@ private slots: void on_actionClone_triggered(); void on_actionGroup_triggered(); void on_actionTransfer_transform_to_children_triggered(); + void on_actionMove_to_parent_triggered(); void on_actionActive_camera_triggered(); void on_actionDefault_camera_triggered(); diff --git a/src/widgets/scene_tree.ui b/src/widgets/scene_tree.ui index 162aba3..238752a 100644 --- a/src/widgets/scene_tree.ui +++ b/src/widgets/scene_tree.ui @@ -107,6 +107,9 @@ false + + 250 + Name @@ -127,7 +130,7 @@ - + :/icons/type-camera.png:/icons/type-camera.png @@ -172,7 +175,7 @@ - + :/icons/type-geo.png:/icons/type-geo.png @@ -232,7 +235,7 @@ true - + :/icons/type-geo.png:/icons/type-geo.png @@ -244,7 +247,7 @@ true - + :/icons/type-light.png:/icons/type-light.png @@ -256,7 +259,7 @@ true - + :/icons/type-camera.png:/icons/type-camera.png @@ -270,7 +273,7 @@ - + :/icons/type-camera.png:/icons/type-camera.png @@ -279,13 +282,22 @@ - + :/icons/type-camera.png:/icons/type-camera.png Default camera + + + + :/icons/go-up.png:/icons/go-up.png + + + Move to parent + + @@ -301,6 +313,9 @@ + + +