many small fixes, RU lang

This commit is contained in:
2023-03-14 17:39:44 +03:00
parent 34976b8865
commit 9e7afb5fb5
18 changed files with 1397 additions and 19 deletions

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
</TS>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru_RU">
</TS>

2
src/core/lang/update.bat Normal file
View File

@@ -0,0 +1,2 @@
lupdate ../ -no-obsolete -ts qglengine_core_ru.ts
lupdate ../ -no-obsolete -ts qglengine_core_en.ts

View File

@@ -26,6 +26,8 @@
<file>../icons/edit-paste.png</file>
<file>../icons/go-jump.png</file>
<file>../icons/go-top.png</file>
<file>../icons/go-up.png</file>
<file>../icons/go-down.png</file>
<file>../icons/layer-visible-on.png</file>
<file>../icons/layer-visible-off.png</file>
<file>../icons/light-+.png</file>

View File

@@ -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();

View File

@@ -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);

BIN
src/icons/go-down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
src/icons/go-up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -0,0 +1,651 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context>
<name>MaterialEditor</name>
<message>
<source>Glass</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transparency</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reflectivity</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>IOF</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dispersion</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reflection map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Front:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Back:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Top:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bottom:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>^</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>load from directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Diffuse</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Metalness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Roughness</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Emission</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Relief</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaterialMapEditor</name>
<message>
<source>title:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Amount:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Scale X:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Scale Y:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Invert R</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Invert G</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Invert B</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MaterialsEditor</name>
<message>
<source>Unset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Assign</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rename ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clone</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ObjectEditor</name>
<message>
<source>[No selected]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Position</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Y:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Z:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rotation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>°</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Scale</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Texture</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SX:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>R:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SY:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Receive shadows</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cast shadows</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Accept fog</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Visible</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Accept light</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Aim distance:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Light</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Type:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Omni</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cone</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Directional</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Intensity:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Decay ^0:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Decay ^1:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Decay ^2:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Size:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Angle:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> - </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Camera</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Depth start:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>FOV:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Roll:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mirror Y</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mirror X</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[%1 objects]</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PrimitiveEditor</name>
<message>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Length:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Segments W:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Segments L:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Segments H:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Radius 1:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Radius 2:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Angle:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>°</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Segments:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Segments 2:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Flip normals</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Height:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PropertyEditor</name>
<message>
<source>Property</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Value</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SceneTree</name>
<message>
<source>Filter:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Expand tree</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Collapse tree</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Material</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Focus</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clone</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Group</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select parent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select by mesh</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select by material</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add node</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add light</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add camera</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nodes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Meshes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Lights</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cameras</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transfer transform to children</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Active camera</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default camera</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Move to parent</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 objects, %2 hide by filter</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TexturesEditor</name>
<message>
<source>Search pathes:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Used files:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reload</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Missed files:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select search path</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ViewEditor</name>
<message>
<source>Draw mode:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Point</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wireframe</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Solid</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Gamma:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Env HDR:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Camera light</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Service mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>FXAA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto exposure</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>VSync</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Soft shadows</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Soft shadow samples:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Soft shadow quality:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Camera</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Orbit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>FOV:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Depth start:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Halos</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hover:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Selection:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fog</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Density:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Decay:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map sizes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Textures:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Shadows:</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@@ -0,0 +1,655 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru_RU">
<context>
<name>MaterialEditor</name>
<message>
<source>Glass</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transparency</source>
<translation>Прозрачность</translation>
</message>
<message>
<source>Reflectivity</source>
<translation>Отражение</translation>
</message>
<message>
<source>IOF</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dispersion</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reflection map</source>
<translation>Карта отражения</translation>
</message>
<message>
<source>Front:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Back:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Top:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bottom:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>^</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>load from directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Diffuse</source>
<translation>Альбедо</translation>
</message>
<message>
<source>Normal</source>
<translation>Нормали</translation>
</message>
<message>
<source>Metalness</source>
<translation>Металичность</translation>
</message>
<message>
<source>Roughness</source>
<translation>Шероховатость</translation>
</message>
<message>
<source>Emission</source>
<translation>Самосвечение</translation>
</message>
<message>
<source>Relief</source>
<translation>Рельеф</translation>
</message>
</context>
<context>
<name>MaterialMapEditor</name>
<message>
<source>title:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map</source>
<translation>Текстура</translation>
</message>
<message>
<source>Amount:</source>
<translation>Множитель:</translation>
</message>
<message>
<source>Offset:</source>
<translation>Смещение:</translation>
</message>
<message>
<source>Scale X:</source>
<translation>Масштаб X:</translation>
</message>
<message>
<source>Scale Y:</source>
<translation>Масштаб Y:</translation>
</message>
<message>
<source>Invert R</source>
<translation>Обратить R</translation>
</message>
<message>
<source>Invert G</source>
<translation>Обратить G</translation>
</message>
<message>
<source>Invert B</source>
<translation>Обратить B</translation>
</message>
</context>
<context>
<name>MaterialsEditor</name>
<message>
<source>Unset</source>
<translation>Сбросить</translation>
</message>
<message>
<source>Assign</source>
<translation>Назначить</translation>
</message>
<message>
<source>Add</source>
<translation>Добавить</translation>
</message>
<message>
<source>Delete</source>
<translation>Удалить</translation>
</message>
<message>
<source>Rename ...</source>
<translation>Переименовать ...</translation>
</message>
<message>
<source>Clone</source>
<translation>Клонировать</translation>
</message>
</context>
<context>
<name>ObjectEditor</name>
<message>
<source>[No selected]</source>
<translation>[Нет выделения]</translation>
</message>
<message>
<source>Position</source>
<translation>Положение</translation>
</message>
<message>
<source>X:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Y:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Z:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rotation</source>
<translation>Вращение</translation>
</message>
<message>
<source>°</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Scale</source>
<translation>Масштаб</translation>
</message>
<message>
<source>Texture</source>
<translation>Текстура</translation>
</message>
<message>
<source>SX:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>R:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SY:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Receive shadows</source>
<translation>Принимать тени</translation>
</message>
<message>
<source>Cast shadows</source>
<translation>Создавать тени</translation>
</message>
<message>
<source>Accept fog</source>
<translation>Принимать туман</translation>
</message>
<message>
<source>Visible</source>
<translation>Видимость</translation>
</message>
<message>
<source>Accept light</source>
<translation>Принимать освещение</translation>
</message>
<message>
<source>Color:</source>
<translation>Цвет:</translation>
</message>
<message>
<source>Aim distance:</source>
<translation>Расстояние прицела:</translation>
</message>
<message>
<source>Light</source>
<translation>Светильник</translation>
</message>
<message>
<source>Type:</source>
<translation>Тип:</translation>
</message>
<message>
<source>Omni</source>
<translation>Точечный</translation>
</message>
<message>
<source>Cone</source>
<translation>Конический</translation>
</message>
<message>
<source>Directional</source>
<translation>Направленый</translation>
</message>
<message>
<source>Intensity:</source>
<translation>Интенсивность:</translation>
</message>
<message>
<source>Decay ^0:</source>
<translation>Затухание ^0:</translation>
</message>
<message>
<source>Decay ^1:</source>
<translation>Затухание ^1:</translation>
</message>
<message>
<source>Decay ^2:</source>
<translation>Затухание ^2:</translation>
</message>
<message>
<source>Size:</source>
<translation>Размер:</translation>
</message>
<message>
<source>Angle:</source>
<translation>Угол:</translation>
</message>
<message>
<source> - </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Camera</source>
<translation>Камера</translation>
</message>
<message>
<source>Depth start:</source>
<translation>Начало глубины:</translation>
</message>
<message>
<source>FOV:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Roll:</source>
<translation>Наклон:</translation>
</message>
<message>
<source>Mirror Y</source>
<translation>Отразить Y</translation>
</message>
<message>
<source>Mirror X</source>
<translation>Отразить X</translation>
</message>
<message>
<source>Map</source>
<translation>Текстура</translation>
</message>
<message>
<source>[%1 objects]</source>
<translation>[%1 объектов]</translation>
</message>
</context>
<context>
<name>PrimitiveEditor</name>
<message>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Width:</source>
<translation>Ширина:</translation>
</message>
<message>
<source>Length:</source>
<translation>Длина:</translation>
</message>
<message>
<source>Height</source>
<translation type="vanished">Высота:</translation>
</message>
<message>
<source>Segments W:</source>
<translation>Сегментов Ш:</translation>
</message>
<message>
<source>Segments L:</source>
<translation>Сегментов Д:</translation>
</message>
<message>
<source>Segments H:</source>
<translation>Сегментов В:</translation>
</message>
<message>
<source>Radius 1:</source>
<translation>Радиус 1:</translation>
</message>
<message>
<source>Radius 2:</source>
<translation>Радиус 2:</translation>
</message>
<message>
<source>Angle:</source>
<translation>Угол:</translation>
</message>
<message>
<source>°</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Segments:</source>
<translation>Сегментов:</translation>
</message>
<message>
<source>Segments 2:</source>
<translation>Сегментов 2:</translation>
</message>
<message>
<source>Color:</source>
<translation>Цвет:</translation>
</message>
<message>
<source>Flip normals</source>
<translation>Обратить нормали</translation>
</message>
<message>
<source>Add</source>
<translation>Добавить</translation>
</message>
<message>
<source>Height:</source>
<translation>Высота:</translation>
</message>
</context>
<context>
<name>PropertyEditor</name>
<message>
<source>Property</source>
<translation>Свойство</translation>
</message>
<message>
<source>Value</source>
<translation>Значение</translation>
</message>
</context>
<context>
<name>SceneTree</name>
<message>
<source>Filter:</source>
<translation>Поиск:</translation>
</message>
<message>
<source>Expand tree</source>
<translation>Развернуть дерево</translation>
</message>
<message>
<source>Collapse tree</source>
<translation>Свернуть дерево</translation>
</message>
<message>
<source>Name</source>
<translation>Имя</translation>
</message>
<message>
<source>Vis</source>
<translation>Вид</translation>
</message>
<message>
<source>Material</source>
<translation>Материал</translation>
</message>
<message>
<source>Focus</source>
<translation>Фокус</translation>
</message>
<message>
<source>Remove</source>
<translation>Удалить</translation>
</message>
<message>
<source>Clone</source>
<translation>Клонировать</translation>
</message>
<message>
<source>Group</source>
<translation>Группировать</translation>
</message>
<message>
<source>Select parent</source>
<translation>Выбрать родителя</translation>
</message>
<message>
<source>Select by mesh</source>
<translation>Выбрать по геометрии</translation>
</message>
<message>
<source>Select by material</source>
<translation>Выбрать по материалу</translation>
</message>
<message>
<source>Add node</source>
<translation>Добавить узел</translation>
</message>
<message>
<source>Add light</source>
<translation>Добавить светильник</translation>
</message>
<message>
<source>Add camera</source>
<translation>Добавить камеру</translation>
</message>
<message>
<source>Nodes</source>
<translation>Узлы</translation>
</message>
<message>
<source>Meshes</source>
<translation>Геометрии</translation>
</message>
<message>
<source>Lights</source>
<translation>Светильники</translation>
</message>
<message>
<source>Cameras</source>
<translation>Камеры</translation>
</message>
<message>
<source>Transfer transform to children</source>
<translation>Перенести преобразования на детей</translation>
</message>
<message>
<source>Active camera</source>
<translation>Активировать камеру</translation>
</message>
<message>
<source>Default camera</source>
<translation>Камера по умолчанию</translation>
</message>
<message>
<source>Move to parent</source>
<translation>Перенести к родителю</translation>
</message>
<message>
<source>%1 objects, %2 hide by filter</source>
<translation>%1 объектов, %2 скрыто поиском</translation>
</message>
</context>
<context>
<name>TexturesEditor</name>
<message>
<source>Search pathes:</source>
<translation>Пути поиска:</translation>
</message>
<message>
<source>Add</source>
<translation>Добавить</translation>
</message>
<message>
<source>Delete</source>
<translation>Удалить</translation>
</message>
<message>
<source>Clear</source>
<translation>Очистить</translation>
</message>
<message>
<source>Used files:</source>
<translation>Используемые файлы:</translation>
</message>
<message>
<source>0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reload</source>
<translation>Перезагрузить</translation>
</message>
<message>
<source>Missed files:</source>
<translation>Не найдено файлов:</translation>
</message>
<message>
<source>Select search path</source>
<translation>Выбор пути поиска</translation>
</message>
</context>
<context>
<name>ViewEditor</name>
<message>
<source>Draw mode:</source>
<translation>Режим отрисовки:</translation>
</message>
<message>
<source>Point</source>
<translation>Точки</translation>
</message>
<message>
<source>Wireframe</source>
<translation>Линии</translation>
</message>
<message>
<source>Solid</source>
<translation>Сплошной</translation>
</message>
<message>
<source>Gamma:</source>
<translation>Гамма:</translation>
</message>
<message>
<source>Env HDR:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Camera light</source>
<translation>Камерный свет</translation>
</message>
<message>
<source>Service mode</source>
<translation>Служебный режим</translation>
</message>
<message>
<source>FXAA</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto exposure</source>
<translation>Автоэкспозиция</translation>
</message>
<message>
<source>VSync</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Soft shadows</source>
<translation>Мягкие тени</translation>
</message>
<message>
<source>Soft shadow samples:</source>
<translation>Мягкие тени, точек:</translation>
</message>
<message>
<source>Soft shadow quality:</source>
<translation>Мягкие тени, качество:</translation>
</message>
<message>
<source>Camera</source>
<translation>Камера</translation>
</message>
<message>
<source>Orbit</source>
<translation>Обращение</translation>
</message>
<message>
<source>FOV:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Depth start:</source>
<translation>Начало глубины:</translation>
</message>
<message>
<source>Halos</source>
<translation>Свечения</translation>
</message>
<message>
<source>Hover:</source>
<translation>Наведение:</translation>
</message>
<message>
<source>Selection:</source>
<translation>Выделение:</translation>
</message>
<message>
<source>Fog</source>
<translation>Туман</translation>
</message>
<message>
<source>Density:</source>
<translation>Плотность:</translation>
</message>
<message>
<source>Decay:</source>
<translation>Затухание:</translation>
</message>
<message>
<source>Color:</source>
<translation>Цвет:</translation>
</message>
<message>
<source>Map sizes</source>
<translation>Размер карт</translation>
</message>
<message>
<source>Textures:</source>
<translation>Текстуры:</translation>
</message>
<message>
<source>Shadows:</source>
<translation>Тени:</translation>
</message>
</context>
</TS>

View File

@@ -0,0 +1,2 @@
lupdate ../ -ts qglengine_widgets_ru.ts
lupdate ../ -ts qglengine_widgets_en.ts

View File

@@ -95,14 +95,19 @@ void ObjectEditor::selectionChanged() {
ignore_next = false;
return;
}
if (!view) {
ui->scrollArea->setEnabled(false);
if (!view) return;
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);

View File

@@ -41,6 +41,7 @@ protected:
Ui::ObjectEditor * ui;
QGLView * view;
ObjectBaseList prev_sol;
bool active, ignore_next;
private slots:

View File

@@ -120,7 +120,7 @@
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Height</string>
<string>Height:</string>
</property>
</widget>
</item>

View File

@@ -109,8 +109,9 @@ QList<QAction *> SceneTree::actionsAdd() {
QList<QAction *> SceneTree::actionsSelection() {
QList<QAction *> 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<ObjectBase *> 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();

View File

@@ -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();

View File

@@ -107,6 +107,9 @@
<property name="expandsOnDoubleClick">
<bool>false</bool>
</property>
<attribute name="headerDefaultSectionSize">
<number>250</number>
</attribute>
<column>
<property name="text">
<string>Name</string>
@@ -127,7 +130,7 @@
</layout>
<action name="actionFocus">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<iconset resource="../../../qad/libs/qglview/qglview.qrc">
<normaloff>:/icons/type-camera.png</normaloff>:/icons/type-camera.png</iconset>
</property>
<property name="text">
@@ -172,7 +175,7 @@
</action>
<action name="actionSelect_by_mesh">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<iconset resource="../../../qad/libs/qglview/qglview.qrc">
<normaloff>:/icons/type-geo.png</normaloff>:/icons/type-geo.png</iconset>
</property>
<property name="text">
@@ -232,7 +235,7 @@
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<iconset resource="../../../qad/libs/qglview/qglview.qrc">
<normaloff>:/icons/type-geo.png</normaloff>:/icons/type-geo.png</iconset>
</property>
<property name="text">
@@ -244,7 +247,7 @@
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<iconset resource="../../../qad/libs/qglview/qglview.qrc">
<normaloff>:/icons/type-light.png</normaloff>:/icons/type-light.png</iconset>
</property>
<property name="text">
@@ -256,7 +259,7 @@
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<iconset resource="../../../qad/libs/qglview/qglview.qrc">
<normaloff>:/icons/type-camera.png</normaloff>:/icons/type-camera.png</iconset>
</property>
<property name="text">
@@ -270,7 +273,7 @@
</action>
<action name="actionActive_camera">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<iconset resource="../../../qad/libs/qglview/qglview.qrc">
<normaloff>:/icons/type-camera.png</normaloff>:/icons/type-camera.png</iconset>
</property>
<property name="text">
@@ -279,13 +282,22 @@
</action>
<action name="actionDefault_camera">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<iconset resource="../../../qad/libs/qglview/qglview.qrc">
<normaloff>:/icons/type-camera.png</normaloff>:/icons/type-camera.png</iconset>
</property>
<property name="text">
<string>Default camera</string>
</property>
</action>
<action name="actionMove_to_parent">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<normaloff>:/icons/go-up.png</normaloff>:/icons/go-up.png</iconset>
</property>
<property name="text">
<string>Move to parent</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
@@ -301,6 +313,9 @@
</customwidgets>
<resources>
<include location="../../../qad/libs/application/qad_application.qrc"/>
<include location="../../../qad/libs/blockview/qad_blockview.qrc"/>
<include location="../../../qad/libs/qglview/qglview.qrc"/>
<include location="../core/qglengine_core.qrc"/>
<include location="widgets.qrc"/>
</resources>
<connections>