diff --git a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake index e0e35978f2..64cb23c9bd 100644 --- a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake +++ b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake @@ -108,7 +108,6 @@ macro(InitializeFreeCADBuildOptions) option(BUILD_DRAFT "Build the FreeCAD draft module" ON) option(BUILD_DRAWING "Build the FreeCAD drawing module" OFF) option(BUILD_IDF "Build the FreeCAD idf module" ON) - option(BUILD_IMAGE "Build the FreeCAD image module" ON) option(BUILD_IMPORT "Build the FreeCAD import module" ON) option(BUILD_INSPECTION "Build the FreeCAD inspection module" ON) option(BUILD_JTREADER "Build the FreeCAD jt reader module" OFF) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index ef0e383782..d5f9ac7ec6 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -94,6 +94,7 @@ #include "FeaturePython.h" #include "GeoFeature.h" #include "GeoFeatureGroupExtension.h" +#include "ImagePlane.h" #include "InventorObject.h" #include "Link.h" #include "LinkBaseExtensionPy.h" @@ -2053,12 +2054,13 @@ void Application::initTypes() App::DocumentObjectGroup ::init(); App::DocumentObjectGroupPython ::init(); App::DocumentObjectFileIncluded::init(); + App::ImagePlane ::init(); App::InventorObject ::init(); App::VRMLObject ::init(); App::Annotation ::init(); App::AnnotationLabel ::init(); App::MeasureDistance ::init(); - App ::MaterialObject ::init(); + App::MaterialObject ::init(); App::MaterialObjectPython ::init(); App::TextDocument ::init(); App::Placement ::init(); diff --git a/src/App/CMakeLists.txt b/src/App/CMakeLists.txt index e4b096aedd..1190eff4bc 100644 --- a/src/App/CMakeLists.txt +++ b/src/App/CMakeLists.txt @@ -147,6 +147,7 @@ SET(Document_CPP_SRCS GeoFeature.cpp GeoFeatureGroupExtensionPyImp.cpp GeoFeatureGroupExtension.cpp + ImagePlane.cpp OriginGroupExtensionPyImp.cpp OriginGroupExtension.cpp PartPyImp.cpp @@ -192,6 +193,7 @@ SET(Document_HPP_SRCS FeatureTest.h GeoFeature.h GeoFeatureGroupExtension.h + ImagePlane.h OriginGroupExtension.h Part.h Origin.h diff --git a/src/Mod/Image/App/ImagePlane.cpp b/src/App/ImagePlane.cpp similarity index 77% rename from src/Mod/Image/App/ImagePlane.cpp rename to src/App/ImagePlane.cpp index 9883241d6b..e60f7200f8 100644 --- a/src/Mod/Image/App/ImagePlane.cpp +++ b/src/App/ImagePlane.cpp @@ -25,19 +25,36 @@ #include "ImagePlane.h" -using namespace Image; using namespace App; -PROPERTY_SOURCE(Image::ImagePlane, App::GeoFeature) +PROPERTY_SOURCE(App::ImagePlane, App::GeoFeature) ImagePlane::ImagePlane() + : XPixelsPerMeter{1000.0} + , YPixelsPerMeter{1000.0} { ADD_PROPERTY_TYPE( ImageFile,(nullptr) , "ImagePlane",Prop_None,"File of the image"); ADD_PROPERTY_TYPE( XSize, (100), "ImagePlane",Prop_None,"Size of a pixel in X"); ADD_PROPERTY_TYPE( YSize, (100), "ImagePlane",Prop_None,"Size of a pixel in Y"); } -ImagePlane::~ImagePlane() +int ImagePlane::getXSizeInPixel() { + return int(XSize.getValue() * XPixelsPerMeter / 1000); +} + +int ImagePlane::getYSizeInPixel() +{ + return int(YSize.getValue() * YPixelsPerMeter / 1000); +} + +void ImagePlane::setXSizeInPixel(int value) +{ + XSize.setValue(double(value) * 1000.0 / XPixelsPerMeter); +} + +void ImagePlane::setYSizeInPixel(int value) +{ + YSize.setValue(double(value) * 1000.0 / YPixelsPerMeter); } diff --git a/src/Mod/Image/App/ImagePlane.h b/src/App/ImagePlane.h similarity index 78% rename from src/Mod/Image/App/ImagePlane.h rename to src/App/ImagePlane.h index 49ba554439..0a83ca4302 100644 --- a/src/Mod/Image/App/ImagePlane.h +++ b/src/App/ImagePlane.h @@ -20,37 +20,44 @@ * * ***************************************************************************/ -#ifndef Image_ImagePlane_H -#define Image_ImagePlane_H +#ifndef App_ImagePlane_H +#define App_ImagePlane_H #include #include #include -#include -namespace Image +namespace App { -class ImageExport ImagePlane : public App::GeoFeature +class AppExport ImagePlane : public App::GeoFeature { - PROPERTY_HEADER_WITH_OVERRIDE(Image::ImagePlane); + PROPERTY_HEADER_WITH_OVERRIDE(App::ImagePlane); public: /// Constructor ImagePlane(); - ~ImagePlane() override; + ~ImagePlane() override = default; App::PropertyFileIncluded ImageFile; App::PropertyLength XSize; App::PropertyLength YSize; + int getXSizeInPixel(); + int getYSizeInPixel(); + void setXSizeInPixel(int); + void setYSizeInPixel(int); + + double XPixelsPerMeter; + double YPixelsPerMeter; + /// returns the type name of the ViewProvider const char* getViewProviderName() const override { - return "ImageGui::ViewProviderImagePlane"; + return "Gui::ViewProviderImagePlane"; } }; -} //namespace Image +} //namespace App -#endif // Image_ImagePlane_H +#endif // App_ImagePlane_H diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index b3685d4a35..6eae1e1cdf 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -29,6 +29,7 @@ # include # include # include +# include # include # include # include @@ -101,6 +102,7 @@ #include "ViewProviderGeoFeatureGroup.h" #include "ViewProviderGeometryObject.h" #include "ViewProviderGroupExtension.h" +#include "ViewProviderImagePlane.h" #include "ViewProviderInventorObject.h" #include "ViewProviderLine.h" #include "ViewProviderLink.h" @@ -328,6 +330,22 @@ struct PyMethodDef FreeCADGui_methods[] = { } // namespace Gui +namespace { + void setImportImageFormats() + { + QList supportedFormats = QImageReader::supportedImageFormats(); + std::stringstream str; + str << "Image formats ("; + for (const auto& ext : supportedFormats) { + str << "*." << ext.constData() << " "; + } + str << ")"; + + std::string filter = str.str(); + App::GetApplication().addImportType(filter.c_str(), "FreeCADGui"); + } +} + Application::Application(bool GUIenabled) { //App::GetApplication().Attach(this); @@ -1808,6 +1826,7 @@ void Application::initTypes() Gui::ViewProviderDocumentObjectGroupPython ::init(); Gui::ViewProviderDragger ::init(); Gui::ViewProviderGeometryObject ::init(); + Gui::ViewProviderImagePlane ::init(); Gui::ViewProviderInventorObject ::init(); Gui::ViewProviderVRMLObject ::init(); Gui::ViewProviderAnnotation ::init(); @@ -2156,6 +2175,7 @@ void Application::runApplication() try { Base::Console().Log("Run Gui init script\n"); runInitGuiScript(); + setImportImageFormats(); } catch (const Base::Exception& e) { Base::Console().Error("Error in FreeCADGuiInit.py: %s\n", e.what()); diff --git a/src/Gui/ApplicationPy.cpp b/src/Gui/ApplicationPy.cpp index bded2ca619..6b04456f78 100644 --- a/src/Gui/ApplicationPy.cpp +++ b/src/Gui/ApplicationPy.cpp @@ -51,6 +51,7 @@ #include "DocumentObserverPython.h" #include "DownloadManager.h" #include "EditorView.h" +#include "FileHandler.h" #include "Macro.h" #include "MainWindow.h" #include "MainWindowPy.h" @@ -599,60 +600,9 @@ PyObject* Application::sOpen(PyObject * /*self*/, PyObject *args) PyMem_Free(Name); PY_TRY { QString fileName = QString::fromUtf8(Utf8Name.c_str()); - QFileInfo fi; - fi.setFile(fileName); - QString ext = fi.suffix().toLower(); - QList views = getMainWindow()->findChildren(); - for (QList::Iterator it = views.begin(); it != views.end(); ++it) { - if ((*it)->fileName() == fileName) { - (*it)->setFocus(); - Py_Return; - } - } - - if (ext == QLatin1String("iv")) { - if (!Application::Instance->activeDocument()) - App::GetApplication().newDocument(); - //QString cmd = QString("Gui.activeDocument().addAnnotation(\"%1\",\"%2\")").arg(fi.baseName()).arg(fi.absoluteFilePath()); - QString cmd = QString::fromLatin1( - "App.ActiveDocument.addObject(\"App::InventorObject\",\"%1\")." - "FileName=\"%2\"\n" - "App.ActiveDocument.ActiveObject.Label=\"%1\"\n" - "App.ActiveDocument.recompute()") - .arg(fi.baseName(), fi.absoluteFilePath()); - Base::Interpreter().runString(cmd.toUtf8()); - } - else if (ext == QLatin1String("wrl") || - ext == QLatin1String("vrml") || - ext == QLatin1String("wrz")) { - if (!Application::Instance->activeDocument()) - App::GetApplication().newDocument(); - - // Add this to the search path in order to read inline files (#0002029) - QByteArray path = fi.absolutePath().toUtf8(); - SoInput::addDirectoryFirst(path.constData()); - - //QString cmd = QString("Gui.activeDocument().addAnnotation(\"%1\",\"%2\")").arg(fi.baseName()).arg(fi.absoluteFilePath()); - QString cmd = QString::fromLatin1( - "App.ActiveDocument.addObject(\"App::VRMLObject\",\"%1\")." - "VrmlFile=\"%2\"\n" - "App.ActiveDocument.ActiveObject.Label=\"%1\"\n" - "App.ActiveDocument.recompute()") - .arg(fi.baseName(), fi.absoluteFilePath()); - Base::Interpreter().runString(cmd.toUtf8()); - SoInput::removeDirectory(path.constData()); - } - else if (ext == QLatin1String("py") || - ext == QLatin1String("fcmacro") || - ext == QLatin1String("fcscript")) { - auto editor = new PythonEditor(); - editor->setWindowIcon(Gui::BitmapFactory().iconFromTheme("applications-python")); - auto edit = new PythonEditorView(editor, getMainWindow()); - edit->open(fileName); - edit->resize(400, 300); - getMainWindow()->addWindow( edit ); - } - else { + FileHandler handler(fileName); + if (!handler.openFile()) { + QString ext = handler.extension(); Base::Console().Error("File type '%s' not supported\n", ext.toLatin1().constData()); } } @@ -673,60 +623,9 @@ PyObject* Application::sInsert(PyObject * /*self*/, PyObject *args) PY_TRY { QString fileName = QString::fromUtf8(Utf8Name.c_str()); - QFileInfo fi; - fi.setFile(fileName); - QString ext = fi.suffix().toLower(); - if (ext == QLatin1String("iv")) { - App::Document *doc = nullptr; - if (DocName) - doc = App::GetApplication().getDocument(DocName); - else - doc = App::GetApplication().getActiveDocument(); - if (!doc) - doc = App::GetApplication().newDocument(DocName); - - App::DocumentObject* obj = doc->addObject("App::InventorObject", - (const char*)fi.baseName().toUtf8()); - obj->Label.setValue((const char*)fi.baseName().toUtf8()); - static_cast(obj->getPropertyByName("FileName")) - ->setValue((const char*)fi.absoluteFilePath().toUtf8()); - doc->recompute(); - } - else if (ext == QLatin1String("wrl") || - ext == QLatin1String("vrml") || - ext == QLatin1String("wrz")) { - App::Document *doc = nullptr; - if (DocName) - doc = App::GetApplication().getDocument(DocName); - else - doc = App::GetApplication().getActiveDocument(); - if (!doc) - doc = App::GetApplication().newDocument(DocName); - - // Add this to the search path in order to read inline files (#0002029) - QByteArray path = fi.absolutePath().toUtf8(); - SoInput::addDirectoryFirst(path.constData()); - - App::DocumentObject* obj = doc->addObject("App::VRMLObject", - (const char*)fi.baseName().toUtf8()); - obj->Label.setValue((const char*)fi.baseName().toUtf8()); - static_cast(obj->getPropertyByName("VrmlFile")) - ->setValue((const char*)fi.absoluteFilePath().toUtf8()); - doc->recompute(); - - SoInput::removeDirectory(path.constData()); - } - else if (ext == QLatin1String("py") || - ext == QLatin1String("fcmacro") || - ext == QLatin1String("fcscript")) { - auto editor = new PythonEditor(); - editor->setWindowIcon(Gui::BitmapFactory().iconFromTheme("applications-python")); - auto edit = new PythonEditorView(editor, getMainWindow()); - edit->open(fileName); - edit->resize(400, 300); - getMainWindow()->addWindow( edit ); - } - else { + FileHandler handler(fileName); + if (!handler.importFile(std::string(DocName ? DocName : ""))) { + QString ext = handler.extension(); Base::Console().Error("File type '%s' not supported\n", ext.toLatin1().constData()); } } PY_CATCH; diff --git a/src/Gui/CMakeLists.txt b/src/Gui/CMakeLists.txt index a11939163d..d38d4c8644 100644 --- a/src/Gui/CMakeLists.txt +++ b/src/Gui/CMakeLists.txt @@ -345,6 +345,8 @@ SET(Gui_UIC_SRCS Placement.ui TextureMapping.ui TaskView/TaskAppearance.ui + TaskView/TaskImageScale.ui + TaskView/TaskOrientation.ui TaskView/TaskSelectLinkProperty.ui TaskElementColors.ui DlgObjectSelection.ui @@ -726,6 +728,12 @@ SET(Task_View_SRCS TaskView/TaskAppearance.cpp TaskView/TaskAppearance.h TaskView/TaskAppearance.ui + TaskView/TaskImageScale.cpp + TaskView/TaskImageScale.h + TaskView/TaskImageScale.ui + TaskView/TaskOrientation.cpp + TaskView/TaskOrientation.h + TaskView/TaskOrientation.ui TaskView/TaskSelectLinkProperty.cpp TaskView/TaskSelectLinkProperty.h TaskView/TaskSelectLinkProperty.ui @@ -794,6 +802,7 @@ SOURCE_GROUP("Widget\\QSintActionPanel\\Mocs" FILES ${qsint_MOC_SRCS}) # The 3d view SET(View3D_CPP_SRCS + Camera.cpp Flag.cpp GLBuffer.cpp GLPainter.cpp @@ -824,6 +833,7 @@ SET(View3D_CPP_SRCS ) SET(View3D_SRCS ${View3D_CPP_SRCS} + Camera.h Flag.h GLBuffer.h GLPainter.h @@ -885,6 +895,7 @@ SET(Viewprovider_CPP_SRCS ViewProviderExtern.cpp ViewProviderFeature.cpp ViewProviderGeometryObject.cpp + ViewProviderImagePlane.cpp ViewProviderInventorObject.cpp ViewProviderMeasureDistance.cpp ViewProviderPyImp.cpp @@ -921,6 +932,7 @@ SET(Viewprovider_SRCS ViewProviderExtern.h ViewProviderFeature.h ViewProviderGeometryObject.h + ViewProviderImagePlane.h ViewProviderInventorObject.h ViewProviderMeasureDistance.h ViewProviderPythonFeature.h @@ -1064,6 +1076,7 @@ SET(View_CPP_SRCS MDIViewPy.cpp MDIViewPyWrap.cpp GraphvizView.cpp + ImageView.cpp ActiveObjectList.cpp ) SET(View_HPP_SRCS @@ -1071,6 +1084,7 @@ SET(View_HPP_SRCS MDIViewPy.h MDIViewPyWrap.h GraphvizView.h + ImageView.h ActiveObjectList.h ) SET(View_SRCS @@ -1133,6 +1147,8 @@ SET(FreeCADGui_CPP_SRCS ExpressionBindingPy.cpp GraphicsViewZoom.cpp ExpressionCompleter.cpp + FileHandler.cpp + FileHandler.h GuiApplication.cpp GuiApplicationNativeEventAware.cpp GuiConsole.cpp @@ -1227,6 +1243,8 @@ if(MSVC) propertyeditor/PropertyItemDelegate.cpp propertyeditor/PropertyModel.cpp TaskView/TaskAppearance.cpp + TaskView/TaskImageScale.cpp + TaskView/TaskOrientation.cpp TaskView/TaskSelectLinkProperty.cpp TaskView/TaskEditControl.cpp TaskView/TaskView.cpp diff --git a/src/Gui/Camera.cpp b/src/Gui/Camera.cpp new file mode 100644 index 0000000000..1084da3e4f --- /dev/null +++ b/src/Gui/Camera.cpp @@ -0,0 +1,201 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*************************************************************************** + * Copyright (c) 2023 Werner Mayer * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + +#include "PreCompiled.h" + +#include "Camera.h" +#include "Utilities.h" + +using namespace Gui; + + +/** + Formulas to get quaternion for axonometric views: + + \code +from math import sqrt, degrees, asin, atan +p1=App.Rotation(App.Vector(1,0,0),90) +p2=App.Rotation(App.Vector(0,0,1),alpha) +p3=App.Rotation(p2.multVec(App.Vector(1,0,0)),beta) +p4=p3.multiply(p2).multiply(p1) + +from pivy import coin +c=Gui.ActiveDocument.ActiveView.getCameraNode() +c.orientation.setValue(*p4.Q) + \endcode + + The angles alpha and beta depend on the type of axonometry + Isometric: + \code +alpha=45 +beta=degrees(asin(-sqrt(1.0/3.0))) + \endcode + + Dimetric: + \code +alpha=degrees(asin(sqrt(1.0/8.0))) +beta=degrees(-asin(1.0/3.0)) + \endcode + + Trimetric: + \code +alpha=30.0 +beta=-35.0 + \endcode + + Verification code that the axonomtries are correct: + + \code +from pivy import coin +c=Gui.ActiveDocument.ActiveView.getCameraNode() +vo=App.Vector(c.getViewVolume().getMatrix().multVecMatrix(coin.SbVec3f(0,0,0)).getValue()) +vx=App.Vector(c.getViewVolume().getMatrix().multVecMatrix(coin.SbVec3f(10,0,0)).getValue()) +vy=App.Vector(c.getViewVolume().getMatrix().multVecMatrix(coin.SbVec3f(0,10,0)).getValue()) +vz=App.Vector(c.getViewVolume().getMatrix().multVecMatrix(coin.SbVec3f(0,0,10)).getValue()) +(vx-vo).Length +(vy-vo).Length +(vz-vo).Length + +# Projection +vo.z=0 +vx.z=0 +vy.z=0 +vz.z=0 + +(vx-vo).Length +(vy-vo).Length +(vz-vo).Length + \endcode + + See also: + http://www.mathematik.uni-marburg.de/~thormae/lectures/graphics1/graphics_6_2_ger_web.html#1 + http://www.mathematik.uni-marburg.de/~thormae/lectures/graphics1/code_v2/Axonometric/qt/Axonometric.cpp + https://de.wikipedia.org/wiki/Arkussinus_und_Arkuskosinus +*/ + +SbRotation Camera::top() +{ + return SbRotation(0, 0, 0, 1); +} + +SbRotation Camera::bottom() +{ + return SbRotation(1, 0, 0, 0); +} + +SbRotation Camera::front() +{ + auto root = (float)(sqrt(2.0)/2.0); + return SbRotation(root, 0, 0, root); +} + +SbRotation Camera::rear() +{ + auto root = (float)(sqrt(2.0)/2.0); + return SbRotation(0, root, root, 0); +} + +SbRotation Camera::right() +{ + return SbRotation(0.5, 0.5, 0.5, 0.5); +} + +SbRotation Camera::left() +{ + return SbRotation(-0.5, 0.5, 0.5, -0.5); +} + +SbRotation Camera::isometric() +{ + //from math import sqrt, degrees, asin + //p1=App.Rotation(App.Vector(1,0,0),45) + //p2=App.Rotation(App.Vector(0,0,1),-45) + //p3=p2.multiply(p1) + //return SbRotation(0.353553f, -0.146447f, -0.353553f, 0.853553f); + + //from math import sqrt, degrees, asin + //p1=App.Rotation(App.Vector(1,0,0),90) + //p2=App.Rotation(App.Vector(0,0,1),135) + //p3=App.Rotation(App.Vector(-1,1,0),degrees(asin(-sqrt(1.0/3.0)))) + //p4=p3.multiply(p2).multiply(p1) + //return SbRotation(0.17592, 0.424708, 0.820473, 0.339851); + + //from math import sqrt, degrees, asin + //p1=App.Rotation(App.Vector(1,0,0),90) + //p2=App.Rotation(App.Vector(0,0,1),45) + //#p3=App.Rotation(App.Vector(1,1,0),45) + //p3=App.Rotation(App.Vector(1,1,0),degrees(asin(-sqrt(1.0/3.0)))) + //p4=p3.multiply(p2).multiply(p1) + return SbRotation(0.424708f, 0.17592f, 0.339851f, 0.820473f); +} + +SbRotation Camera::dimetric() +{ + return SbRotation(0.567952f, 0.103751f, 0.146726f, 0.803205f); +} + +SbRotation Camera::trimetric() +{ + return SbRotation(0.446015f, 0.119509f, 0.229575f, 0.856787f); +} + +SbRotation Camera::rotation(Camera::Orientation view) +{ + switch (view) { + case Top: + return top(); + case Bottom: + return bottom(); + case Front: + return front(); + case Rear: + return rear(); + case Right: + return right(); + case Left: + return left(); + case Isometric: + return isometric(); + case Dimetric: + return dimetric(); + case Trimetric: + return trimetric(); + default: + return top(); + } +} + +Base::Rotation Camera::convert(Camera::Orientation view) +{ + return convert(Camera::rotation(view)); +} + +Base::Rotation Camera::convert(const SbRotation& rot) +{ + return Base::convertTo(rot); +} + +SbRotation Camera::convert(const Base::Rotation& rot) +{ + return Base::convertTo(rot); +} diff --git a/src/Gui/Camera.h b/src/Gui/Camera.h new file mode 100644 index 0000000000..9e7a733d56 --- /dev/null +++ b/src/Gui/Camera.h @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*************************************************************************** + * Copyright (c) 2023 Werner Mayer * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + +#ifndef GUI_CAMERA_H +#define GUI_CAMERA_H + +#include +#include +#include + +namespace Gui { + +class GuiExport Camera +{ +public: + enum Orientation { + Top, + Bottom, + Front, + Rear, + Right, + Left, + Isometric, + Dimetric, + Trimetric, + }; + + static SbRotation top(); + static SbRotation bottom(); + static SbRotation front(); + static SbRotation rear(); + static SbRotation right(); + static SbRotation left(); + static SbRotation isometric(); + static SbRotation dimetric(); + static SbRotation trimetric(); + + static SbRotation rotation(Orientation view); + static Base::Rotation convert(Orientation view); + static Base::Rotation convert(const SbRotation&); + static SbRotation convert(const Base::Rotation&); +}; + +} + +#endif // GUI_CAMERA_H diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 89ef0a83c5..f8d9b3502f 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -36,6 +36,7 @@ # include # include # include +# include # include # include # include @@ -62,6 +63,7 @@ #include "DlgSettingsImageImp.h" #include "Document.h" #include "FileDialog.h" +#include "ImageView.h" #include "Macro.h" #include "MainWindow.h" #include "NavigationStyle.h" @@ -1807,12 +1809,12 @@ StdViewScreenShot::StdViewScreenShot() : Command("Std_ViewScreenShot") { sGroup = "Standard-View"; - sMenuText = QT_TR_NOOP("Save picture..."); + sMenuText = QT_TR_NOOP("Save image..."); sToolTipText= QT_TR_NOOP("Creates a screenshot of the active view"); sWhatsThis = "Std_ViewScreenShot"; sStatusTip = QT_TR_NOOP("Creates a screenshot of the active view"); sPixmap = "camera-photo"; - eType = Alter3DView; + eType = Alter3DView; } void StdViewScreenShot::activated(int iMsg) @@ -1969,6 +1971,51 @@ bool StdViewScreenShot::isActive() return isViewOfType(Gui::View3DInventor::getClassTypeId()); } +//=========================================================================== +// Std_ViewLoadImage +//=========================================================================== +DEF_STD_CMD(StdViewLoadImage) + +StdViewLoadImage::StdViewLoadImage() + : Command("Std_ViewLoadImage") +{ + sGroup = "Standard-View"; + sMenuText = QT_TR_NOOP("Load image..."); + sToolTipText= QT_TR_NOOP("Loads a image"); + sWhatsThis = "Std_ViewLoadImage"; + sStatusTip = QT_TR_NOOP("Loads a image"); + sPixmap = "image-open"; + eType = 0; +} + +void StdViewLoadImage::activated(int iMsg) +{ + Q_UNUSED(iMsg); + + // add all supported QImage formats + QStringList mimeTypeFilters; + QList supportedMimeTypes = QImageReader::supportedMimeTypes(); + for (const auto& mimeTypeName : supportedMimeTypes) { + mimeTypeFilters.append(QString::fromLatin1(mimeTypeName)); + } + + // Reading an image + QFileDialog dialog(Gui::getMainWindow()); + dialog.setWindowTitle(QObject::tr("Choose an image file to open")); + dialog.setMimeTypeFilters(mimeTypeFilters); + dialog.selectMimeTypeFilter(QString::fromLatin1("image/png")); + dialog.setDefaultSuffix(QString::fromLatin1("png")); + dialog.setAcceptMode(QFileDialog::AcceptOpen); + dialog.setOption(QFileDialog::DontUseNativeDialog); + + if (dialog.exec()) { + QString fileName = dialog.selectedFiles().constFirst(); + ImageView* view = new ImageView(Gui::getMainWindow()); + view->loadFile(fileName); + view->resize(400, 300); + Gui::getMainWindow()->addWindow(view); + } +} //=========================================================================== // Std_ViewCreate @@ -2392,16 +2439,12 @@ StdViewZoomIn::StdViewZoomIn() void StdViewZoomIn::activated(int iMsg) { Q_UNUSED(iMsg); - auto view = qobject_cast(getMainWindow()->activeWindow()); - if ( view ) { - View3DInventorViewer* viewer = view->getViewer(); - viewer->navigationStyle()->zoomIn(); - } + getGuiApplication()->sendMsgToFocusView("ZoomIn"); } bool StdViewZoomIn::isActive() { - return (qobject_cast(getMainWindow()->activeWindow())); + return getGuiApplication()->sendHasMsgToActiveView("ZoomIn"); } //=========================================================================== @@ -2425,16 +2468,12 @@ StdViewZoomOut::StdViewZoomOut() void StdViewZoomOut::activated(int iMsg) { Q_UNUSED(iMsg); - auto view = qobject_cast(getMainWindow()->activeWindow()); - if (view) { - View3DInventorViewer* viewer = view->getViewer(); - viewer->navigationStyle()->zoomOut(); - } + getGuiApplication()->sendMsgToFocusView("ZoomOut"); } bool StdViewZoomOut::isActive() { - return (qobject_cast(getMainWindow()->activeWindow())); + return getGuiApplication()->sendHasMsgToActiveView("ZoomOut"); } namespace { @@ -3775,6 +3814,7 @@ void CreateViewStdCommands() rcCmdMgr.addCommand(new StdCmdViewCreate()); rcCmdMgr.addCommand(new StdViewScreenShot()); + rcCmdMgr.addCommand(new StdViewLoadImage()); rcCmdMgr.addCommand(new StdMainFullscreen()); rcCmdMgr.addCommand(new StdViewDockUndockFullscreen()); rcCmdMgr.addCommand(new StdCmdSetAppearance()); diff --git a/src/Gui/FileHandler.cpp b/src/Gui/FileHandler.cpp new file mode 100644 index 0000000000..9ddf982012 --- /dev/null +++ b/src/Gui/FileHandler.cpp @@ -0,0 +1,218 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*************************************************************************** + * Copyright (c) 2023 Werner Mayer * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + +#include "PreCompiled.h" +#ifndef _PreComp_ +# include +# include +# include +# include +#endif + +#include "FileHandler.h" +#include "Application.h" +#include "BitmapFactory.h" +#include "CommandT.h" +#include "EditorView.h" +#include "PythonEditor.h" +#include "MainWindow.h" +#include + +using namespace Gui; + +FileHandler::FileHandler(const QString& filename) + : filename(filename) +{ + +} + +bool FileHandler::openFile() +{ + docname.clear(); + return openInternal(); +} + +bool FileHandler::importFile(const std::string& document) +{ + docname = document; + return openInternal(); +} + +QString FileHandler::extension() const +{ + QFileInfo fi; + fi.setFile(filename); + return fi.suffix().toLower(); +} + +App::Document* FileHandler::getOrCreateDocument() +{ + App::Document* doc = App::GetApplication().getActiveDocument(); + if (!doc) { + doc = App::GetApplication().newDocument(); + } + + return doc; +} + +App::Document* FileHandler::getOrCreateDocument(const std::string& document) +{ + App::Document *doc = nullptr; + if (!document.empty()) { + doc = App::GetApplication().getDocument(document.c_str()); + } + else { + doc = App::GetApplication().getActiveDocument(); + } + + if (!doc) { + doc = App::GetApplication().newDocument(document.c_str()); + } + + return doc; +} + +App::Document* FileHandler::createDocumentIfNeeded() +{ + if (docname.empty()) { + return getOrCreateDocument(); + } + + return getOrCreateDocument(docname); +} + +bool FileHandler::activateEditor() +{ + QList views = getMainWindow()->findChildren(); + for (const auto& it : views) { + if (it->fileName() == filename) { + it->setFocus(); + return true; + } + } + + return false; +} + +bool FileHandler::openInternal() +{ + if (activateEditor()) { + return true; + } + + QFileInfo fi; + fi.setFile(filename); + QString ext = fi.suffix().toLower(); + + auto hasExtension = [ext](const QStringList& suffixes) { + return suffixes.contains(ext); + }; + + if (hasExtension(QStringList() << QLatin1String("iv"))) { + openInventor(); + return true; + } + + if (hasExtension(QStringList() << QLatin1String("wrl") + << QLatin1String("wrz") + << QLatin1String("vrml"))) { + openVRML(); + return true; + } + + if (hasExtension(QStringList() << QLatin1String("py") + << QLatin1String("fcmacro") + << QLatin1String("fcscript"))) { + openPython(); + return true; + } + + QStringList supportedFormats; + auto imageFormats = QImageReader::supportedImageFormats(); + std::transform(imageFormats.cbegin(), imageFormats.cend(), + std::back_inserter(supportedFormats), [](const QByteArray& format) { + return QString::fromLatin1(format); + }); + + if (hasExtension(supportedFormats)) { + openImage(); + return true; + } + + return false; +} + +void FileHandler::openInventor() +{ + App::Document* doc = createDocumentIfNeeded(); + + QFileInfo fi; + fi.setFile(filename); + + Gui::cmdAppDocumentArgs(doc, "addObject('%s', '%s')", "App::InventorObject", fi.baseName().toStdString()); + Gui::cmdAppDocumentArgs(doc, "ActiveObject.FileName = '%s'", fi.absoluteFilePath().toStdString()); + Gui::cmdAppDocumentArgs(doc, "ActiveObject.Label = '%s'", fi.baseName().toStdString()); + Gui::cmdAppDocument(doc, "recompute()"); +} + +void FileHandler::openVRML() +{ + App::Document* doc = createDocumentIfNeeded(); + + QFileInfo fi; + fi.setFile(filename); + + // Add this to the search path in order to read inline files (#0002029) + QByteArray path = fi.absolutePath().toUtf8(); + SoInput::addDirectoryFirst(path.constData()); + + Gui::cmdAppDocumentArgs(doc, "addObject('%s', '%s')", "App::VRMLObject", fi.baseName().toStdString()); + Gui::cmdAppDocumentArgs(doc, "ActiveObject.VrmlFile = '%s'", fi.absoluteFilePath().toStdString()); + Gui::cmdAppDocumentArgs(doc, "ActiveObject.Label = '%s'", fi.baseName().toStdString()); + Gui::cmdAppDocument(doc, "recompute()"); + + SoInput::removeDirectory(path.constData()); +} + +void FileHandler::openImage() +{ + App::Document* doc = createDocumentIfNeeded(); + + QFileInfo fi; + fi.setFile(filename); + + Gui::cmdAppDocumentArgs(doc, "addObject('%s', '%s')", "App::ImagePlane", fi.baseName().toStdString()); + Gui::cmdAppDocumentArgs(doc, "ActiveObject.ImageFile = '%s'", fi.absoluteFilePath().toStdString()); + Gui::cmdAppDocumentArgs(doc, "ActiveObject.Label = '%s'", fi.baseName().toStdString()); + Gui::cmdAppDocument(doc, "recompute()"); +} + +void FileHandler::openPython() +{ + auto editor = new PythonEditor(); + editor->setWindowIcon(Gui::BitmapFactory().iconFromTheme("applications-python")); + auto edit = new PythonEditorView(editor, getMainWindow()); + edit->open(filename); + edit->resize(400, 300); + getMainWindow()->addWindow( edit ); +} diff --git a/src/Gui/FileHandler.h b/src/Gui/FileHandler.h new file mode 100644 index 0000000000..8affbea1b9 --- /dev/null +++ b/src/Gui/FileHandler.h @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*************************************************************************** + * Copyright (c) 2023 Werner Mayer * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + +#ifndef GUI_FILE_HANDLER_H +#define GUI_FILE_HANDLER_H + +#include +#include + +namespace App { +class Document; +} + +namespace Gui { + +class FileHandler +{ +public: + explicit FileHandler(const QString& filename); + bool openFile(); + bool importFile(const std::string& document); + QString extension() const; + +private: + bool activateEditor(); + App::Document* createDocumentIfNeeded(); + App::Document* getOrCreateDocument(); + App::Document* getOrCreateDocument(const std::string& document); + bool openInternal(); + void openInventor(); + void openVRML(); + void openImage(); + void openPython(); + +private: + QString filename; + std::string docname; +}; + +} + +#endif //GUI_FILE_HANDLER_H diff --git a/src/Mod/Image/Gui/Resources/icons/Image_Open.svg b/src/Gui/Icons/image-open.svg similarity index 100% rename from src/Mod/Image/Gui/Resources/icons/Image_Open.svg rename to src/Gui/Icons/image-open.svg diff --git a/src/Mod/Image/Gui/Resources/icons/Image_CreateImagePlane.svg b/src/Gui/Icons/image-plane.svg similarity index 91% rename from src/Mod/Image/Gui/Resources/icons/Image_CreateImagePlane.svg rename to src/Gui/Icons/image-plane.svg index d999da2f24..84b26a34d9 100644 --- a/src/Mod/Image/Gui/Resources/icons/Image_CreateImagePlane.svg +++ b/src/Gui/Icons/image-plane.svg @@ -2,20 +2,20 @@ + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + sodipodi:docname="Image_CreateImagePlane.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - + inkscape:snap-bbox="true" + inkscape:pagecheckerboard="0"> - - - - diff --git a/src/Mod/Image/Gui/Resources/icons/Image_Scaling.svg b/src/Gui/Icons/image-scaling.svg similarity index 100% rename from src/Mod/Image/Gui/Resources/icons/Image_Scaling.svg rename to src/Gui/Icons/image-scaling.svg diff --git a/src/Gui/Icons/resource.qrc b/src/Gui/Icons/resource.qrc index 5db1668671..56ecc604a1 100644 --- a/src/Gui/Icons/resource.qrc +++ b/src/Gui/Icons/resource.qrc @@ -256,6 +256,9 @@ Std_UserEditModeCutting.svg Std_UserEditModeColor.svg Warning.svg + image-open.svg + image-plane.svg + image-scaling.svg diff --git a/src/Gui/ImageView.cpp b/src/Gui/ImageView.cpp new file mode 100644 index 0000000000..38059d36ac --- /dev/null +++ b/src/Gui/ImageView.cpp @@ -0,0 +1,377 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*************************************************************************** + * Copyright (c) 2023 Werner Mayer * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + +#include "PreCompiled.h" +#ifndef _PreComp_ +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif + +#include "ImageView.h" +#include "BitmapFactory.h" + +using namespace Gui; + +ImageView::ImageView(QWidget* parent) + : MDIView(nullptr, parent) + , imageLabel(new QLabel) + , scrollArea(new QScrollArea) + , scaleFactor{1.0} + , dragging{false} +{ + imageLabel->setBackgroundRole(QPalette::Base); + imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); + imageLabel->setScaledContents(true); + + scrollArea->setBackgroundRole(QPalette::Dark); + scrollArea->setWidget(imageLabel); + scrollArea->setVisible(false); + setCentralWidget(scrollArea); + setAcceptDrops(true); + setWindowIcon(Gui::BitmapFactory().pixmap("colors")); +} + +bool ImageView::loadFile(const QString& fileName) +{ + QImageReader reader(fileName); + reader.setAutoTransform(true); + QImage image = reader.read(); + if (image.isNull()) { + QMessageBox::information(this, tr("Failed to load image file"), + tr("Cannot load file %1: %2") + .arg(fileName, reader.errorString())); + return false; + } + + setImage(image); + setWindowFilePath(fileName); + + return true; +} + +void ImageView::setImage(const QImage& image) +{ + rawImage = image; + imageLabel->setPixmap(QPixmap::fromImage(image)); + imageLabel->adjustSize(); + scrollArea->setVisible(true); + scaleFactor = 1.0; +} + +void ImageView::scaleImage(double factor) +{ + scaleFactor *= factor; +#if QT_VERSION >= QT_VERSION_CHECK(5,15,0) + imageLabel->resize(scaleFactor * imageLabel->pixmap(Qt::ReturnByValue).size()); +#else + imageLabel->resize(scaleFactor * imageLabel->pixmap()->size()); +#endif + + adjustScrollBar(scrollArea->horizontalScrollBar(), factor); + adjustScrollBar(scrollArea->verticalScrollBar(), factor); +} + +void ImageView::adjustScrollBar(QScrollBar *scrollBar, double factor) +{ + scrollBar->setValue(int(factor * scrollBar->value() + + ((factor - 1) * scrollBar->pageStep()/2))); +} + +bool ImageView::canZoomIn() const +{ + int maxWidth{10000}; + return !isFitToWindow() && imageLabel->width() < maxWidth; +} + +bool ImageView::canZoomOut() const +{ + int minWidth{200}; + return !isFitToWindow() && imageLabel->width() > minWidth; +} + +void ImageView::zoomIn() +{ + double scale{1.25}; + scaleImage(scale); +} + +void ImageView::zoomOut() +{ + double scale{0.8}; + scaleImage(scale); +} + +void ImageView::normalSize() +{ + imageLabel->adjustSize(); + scaleFactor = 1.0; +} + +void ImageView::fitToWindow(bool fitView) +{ + scrollArea->setWidgetResizable(fitView); + if (!fitView) { + normalSize(); + } +} + +bool ImageView::isFitToWindow() const +{ + return scrollArea->widgetResizable(); +} + +bool ImageView::canDrag() const +{ + return scrollArea->verticalScrollBar()->isVisible() || + scrollArea->horizontalScrollBar()->isVisible(); +} + +void ImageView::startDrag() +{ + dragging = true; +} + +void ImageView::stopDrag() +{ + dragging = false; +} + +bool ImageView::isDragging() const +{ + return dragging; +} + +void ImageView::contextMenuEvent(QContextMenuEvent* event) +{ + QMenu menu; + QAction* fitToWindowAct = menu.addAction(tr("Fit to window")); + fitToWindowAct->setCheckable(true); + fitToWindowAct->setChecked(isFitToWindow()); + connect(fitToWindowAct, &QAction::toggled, this, &ImageView::fitToWindow); + + QAction* zoomInAct = menu.addAction(tr("Zoom in"), this, &ImageView::zoomIn); + zoomInAct->setEnabled(canZoomIn()); + + QAction* zoomOutAct = menu.addAction(tr("Zoom out"), this, &ImageView::zoomOut); + zoomOutAct->setEnabled(canZoomOut()); + + menu.exec(event->globalPos()); +} + +void ImageView::mousePressEvent(QMouseEvent* event) +{ + if (event->buttons().testFlag(Qt::MiddleButton)) { + if (canDrag()) { + setCursor(QCursor(Qt::ClosedHandCursor)); + startDrag(); + dragPos = event->pos(); + } + } +} + +void ImageView::mouseReleaseEvent(QMouseEvent* event) +{ + if (!event->buttons().testFlag(Qt::MiddleButton)) { + if (isDragging()) { + stopDrag(); + unsetCursor(); + } + } +} + +void ImageView::mouseMoveEvent(QMouseEvent* event) +{ + if (isDragging()) { + QScrollBar* hBar = scrollArea->horizontalScrollBar(); + QScrollBar* vBar = scrollArea->verticalScrollBar(); + QPoint delta = event->pos() - dragPos; + hBar->setValue(hBar->value() + (isRightToLeft() ? delta.x() : -delta.x())); + vBar->setValue(vBar->value() - delta.y()); + dragPos = event->pos(); + } +} + +void ImageView::dropEvent(QDropEvent* event) +{ + const QMimeData* data = event->mimeData(); + if (data->hasUrls()) { + loadImageFromUrl(data->urls()); + } + else { + MDIView::dropEvent(event); + } +} + +void ImageView::dragEnterEvent(QDragEnterEvent* event) +{ + const QMimeData* data = event->mimeData(); + if (data->hasUrls()) { + event->accept(); + } + else { + event->ignore(); + } +} + +bool ImageView::isImageFormat(const QFileInfo& fileInfo) +{ + QString ext = fileInfo.suffix().toLower(); + QByteArray suffix = ext.toLatin1(); + QList supportedFormats = QImageReader::supportedImageFormats(); + auto it = std::find_if(supportedFormats.begin(), supportedFormats.end(), [suffix](const QByteArray& image) { + return (image == suffix); + }); + + return (it != supportedFormats.end()); +} + +void ImageView::loadImageFromUrl(const QList& urls) +{ + if (urls.isEmpty()) { + return; + } + + const QUrl& url = urls.first(); + const QFileInfo info(url.toLocalFile()); + if (info.exists() && info.isFile()) { + if (isImageFormat(info)) { + loadFile(info.absoluteFilePath()); + } + } +} + +void ImageView::pasteImage() +{ + QImage image = imageFromClipboard(); + if (!image.isNull()) { + setImage(image); + } +} + +bool ImageView::canPasteImage() const +{ + return !imageFromClipboard().isNull(); +} + +QImage ImageView::imageFromClipboard() +{ + QImage image; + if (const QMimeData *mimeData = QApplication::clipboard()->mimeData()) { + if (mimeData->hasImage()) { + image = qvariant_cast(mimeData->imageData()); + } + } + + return image; +} + +void ImageView::print(QPrinter* printer) +{ + QPainter painter(printer); + QPixmap pixmap = QPixmap::fromImage(rawImage); + QRect rect = painter.viewport(); + QSize size = pixmap.size(); + size.scale(rect.size(), Qt::KeepAspectRatio); + painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); + painter.setWindow(pixmap.rect()); + painter.drawPixmap(0, 0, pixmap); +} + +bool ImageView::onMsg(const char* pMsg,const char** ppReturn) +{ + Q_UNUSED(ppReturn) + if (strcmp("ViewFit", pMsg) == 0) { + fitToWindow(true); + return true; + } + if (strcmp("ZoomIn", pMsg) == 0) { + zoomIn(); + return true; + } + if (strcmp("ZoomOut", pMsg) == 0) { + zoomOut(); + return true; + } + if (strcmp("Paste", pMsg) == 0) { + pasteImage(); + return true; + } + if (strcmp("Print", pMsg) == 0) { + print(); + return true; + } + if (strcmp("PrintPreview", pMsg) == 0) { + printPreview(); + return true; + } + if (strcmp("PrintPdf", pMsg) == 0) { + printPdf(); + return true; + } + + return false; +} + +bool ImageView::onHasMsg(const char* pMsg) const +{ + if (strcmp("ViewFit", pMsg) == 0) { + return true; + } + if (strcmp("ZoomIn", pMsg) == 0) { + return canZoomIn(); + } + if (strcmp("ZoomOut", pMsg) == 0) { + return canZoomOut(); + } + if (strcmp("Paste", pMsg) == 0) { + return canPasteImage(); + } + if (strcmp("Print", pMsg) == 0) { + return true; + } + if (strcmp("PrintPreview", pMsg) == 0) { + return true; + } + if (strcmp("PrintPdf", pMsg) == 0) { + return true; + } + + return false; +} + +#include "moc_ImageView.cpp" diff --git a/src/Gui/ImageView.h b/src/Gui/ImageView.h new file mode 100644 index 0000000000..95c6dced02 --- /dev/null +++ b/src/Gui/ImageView.h @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*************************************************************************** + * Copyright (c) 2023 Werner Mayer * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + +#ifndef GUI_IMAGE_VIEW_H +#define GUI_IMAGE_VIEW_H + +#include + +class QFileInfo; +class QLabel; +class QScrollArea; +class QScrollBar; +class QUrl; + +namespace Gui { + +class GuiExport ImageView : public MDIView +{ + Q_OBJECT + +public: + explicit ImageView(QWidget* parent); + bool loadFile(const QString &); + + const char *getName() const override { + return "ImageView"; + } + + /// Message handler + bool onMsg(const char* pMsg, const char** ppReturn) override; + /// Message handler test + bool onHasMsg(const char* pMsg) const override; + + /** @name Printing */ + //@{ + using MDIView::print; + void print(QPrinter* printer) override; + //@} + +protected: + void contextMenuEvent(QContextMenuEvent* event) override; + void mousePressEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; + void mouseMoveEvent(QMouseEvent* event) override; + void dropEvent(QDropEvent* event) override; + void dragEnterEvent(QDragEnterEvent* event) override; + +private: + void setImage(const QImage& image); + void scaleImage(double factor); + static void adjustScrollBar(QScrollBar *scrollBar, double factor); + bool canZoomIn() const; + bool canZoomOut() const; + void zoomIn(); + void zoomOut(); + void normalSize(); + void fitToWindow(bool fitView); + bool isFitToWindow() const; + bool canDrag() const; + void startDrag(); + void stopDrag(); + bool isDragging() const; + void pasteImage(); + bool canPasteImage() const; + static QImage imageFromClipboard(); + static bool isImageFormat(const QFileInfo&); + void loadImageFromUrl(const QList&); + +private: + QImage rawImage; + QLabel *imageLabel; + QScrollArea *scrollArea; + double scaleFactor; + bool dragging; + QPoint dragPos; +}; + +} + +#endif //GUI_IMAGE_VIEW_H diff --git a/src/Gui/InventorAll.h b/src/Gui/InventorAll.h index 0d462fe74f..ce1a6d8916 100644 --- a/src/Gui/InventorAll.h +++ b/src/Gui/InventorAll.h @@ -224,6 +224,7 @@ #include #include #include +#include #include #include #include diff --git a/src/Gui/MDIView.cpp b/src/Gui/MDIView.cpp index 3a7bd1fee3..a65fd02520 100644 --- a/src/Gui/MDIView.cpp +++ b/src/Gui/MDIView.cpp @@ -272,7 +272,13 @@ void MDIView::printPreview() void MDIView::savePrinterSettings(QPrinter* printer) { auto hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Printer"); - hGrp = hGrp->GetGroup(printer->printerName().toUtf8()); + QString printerName = printer->printerName(); + if (printerName.isEmpty()) { + // no printer defined + return; + } + + hGrp = hGrp->GetGroup(printerName.toUtf8()); hGrp->SetInt("DefaultPageSize", printer->pageLayout().pageSize().id()); hGrp->SetInt("DefaultPageOrientation", static_cast(printer->pageLayout().orientation())); @@ -282,7 +288,13 @@ void MDIView::savePrinterSettings(QPrinter* printer) void MDIView::restorePrinterSettings(QPrinter* printer) { auto hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Printer"); - hGrp = hGrp->GetGroup(printer->printerName().toUtf8()); + QString printerName = printer->printerName(); + if (printerName.isEmpty()) { + // no printer defined + return; + } + + hGrp = hGrp->GetGroup(printerName.toUtf8()); QPrinterInfo info = QPrinterInfo::defaultPrinter(); int initialDefaultPageSize = info.isNull() ? QPageSize::A4 : info.defaultPageSize().id(); diff --git a/src/Gui/SoFCDB.cpp b/src/Gui/SoFCDB.cpp index 4df76c4fe3..1fb8002705 100644 --- a/src/Gui/SoFCDB.cpp +++ b/src/Gui/SoFCDB.cpp @@ -48,6 +48,7 @@ #include #include "SoFCDB.h" +#include "Camera.h" #include "Flag.h" #include "GestureNavigationStyle.h" #include "NavigationStyle.h" @@ -68,7 +69,6 @@ #include "SoMouseWheelEvent.h" #include "SoNavigationDragger.h" #include "SoTextLabel.h" -#include "View3DPy.h" #include "Inventor/MarkerBitmaps.h" #include "Inventor/SmSwitchboard.h" #include "Inventor/SoAutoZoomTranslation.h" diff --git a/src/Gui/SplitView3DInventor.cpp b/src/Gui/SplitView3DInventor.cpp index e21896bf47..76a33b4f7b 100644 --- a/src/Gui/SplitView3DInventor.cpp +++ b/src/Gui/SplitView3DInventor.cpp @@ -34,6 +34,7 @@ #include "SplitView3DInventor.h" #include "Application.h" +#include "Camera.h" #include "Document.h" #include "NavigationStyle.h" #include "SoFCSelectionAction.h" diff --git a/src/Gui/TaskView/TaskDialog.cpp b/src/Gui/TaskView/TaskDialog.cpp index 9e8a30abd5..8a9e90847f 100644 --- a/src/Gui/TaskView/TaskDialog.cpp +++ b/src/Gui/TaskView/TaskDialog.cpp @@ -28,6 +28,7 @@ #endif #include "TaskDialog.h" +#include "TaskView.h" using namespace Gui::TaskView; @@ -55,6 +56,14 @@ TaskDialog::~TaskDialog() //==== Slots =============================================================== +void TaskDialog::addTaskBox(QWidget* widget) +{ + Gui::TaskView::TaskBox* taskbox = new Gui::TaskView::TaskBox( + QPixmap(), widget->windowTitle(), true, nullptr); + taskbox->groupLayout()->addWidget(widget); + Content.push_back(taskbox); +} + const std::vector &TaskDialog::getDialogContent() const { return Content; diff --git a/src/Gui/TaskView/TaskDialog.h b/src/Gui/TaskView/TaskDialog.h index f344f633c6..a2568de24a 100644 --- a/src/Gui/TaskView/TaskDialog.h +++ b/src/Gui/TaskView/TaskDialog.h @@ -57,6 +57,8 @@ public: TaskDialog(); ~TaskDialog() override; + void addTaskBox(QWidget*); + void setButtonPosition(ButtonPosition p) { pos = p; } ButtonPosition buttonPosition() const diff --git a/src/Gui/TaskView/TaskImageScale.cpp b/src/Gui/TaskView/TaskImageScale.cpp new file mode 100644 index 0000000000..a4e097eef1 --- /dev/null +++ b/src/Gui/TaskView/TaskImageScale.cpp @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*************************************************************************** + * Copyright (c) 2023 Werner Mayer * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + +#include "PreCompiled.h" +#ifndef _PreComp_ +# include +# include +#endif + +#include +#include +#include +#include +#include + +#include "TaskImageScale.h" +#include "ui_TaskImageScale.h" + + +using namespace Gui; + +TaskImageScale::TaskImageScale(App::ImagePlane* obj, QWidget* parent) + : QWidget(parent) + , ui(new Ui_TaskImageScale) + , feature(obj) + , aspectRatio{1.0} +{ + ui->setupUi(this); + ui->spinBoxWidth->setValue(obj->getXSizeInPixel()); + ui->spinBoxHeight->setValue(obj->getYSizeInPixel()); + + aspectRatio = obj->XSize.getValue() / obj->YSize.getValue(); + + connect(ui->spinBoxWidth, qOverload(&QSpinBox::valueChanged), this, &TaskImageScale::changeWidth); + connect(ui->spinBoxHeight, qOverload(&QSpinBox::valueChanged), this, &TaskImageScale::changeHeight); +} + +TaskImageScale::~TaskImageScale() +{ +} + +void TaskImageScale::changeWidth() +{ + if (!feature.expired()) { + int value = ui->spinBoxWidth->value(); + feature->setXSizeInPixel(value); + + if (ui->checkBoxRatio->isChecked()) { + QSignalBlocker block(ui->spinBoxWidth); + ui->spinBoxHeight->setValue(int(double(value) / aspectRatio)); + } + } +} + +void TaskImageScale::changeHeight() +{ + if (!feature.expired()) { + int value = ui->spinBoxHeight->value(); + feature->setYSizeInPixel(value); + + if (ui->checkBoxRatio->isChecked()) { + QSignalBlocker block(ui->spinBoxHeight); + ui->spinBoxWidth->setValue(int(double(value) * aspectRatio)); + } + } +} + +#include "moc_TaskImageScale.cpp" diff --git a/src/Gui/TaskView/TaskImageScale.h b/src/Gui/TaskView/TaskImageScale.h new file mode 100644 index 0000000000..aa03db8969 --- /dev/null +++ b/src/Gui/TaskView/TaskImageScale.h @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*************************************************************************** + * Copyright (c) 2023 Werner Mayer * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + +#ifndef GUI_TASKIMAGESCALE_H +#define GUI_TASKIMAGESCALE_H + +#include +#include +#include +#include + +namespace Gui { + +class Ui_TaskImageScale; +class TaskImageScale : public QWidget +{ + Q_OBJECT + +public: + explicit TaskImageScale(App::ImagePlane* obj, QWidget* parent = nullptr); + ~TaskImageScale() override; + +private: + void changeWidth(); + void changeHeight(); + +private: + std::unique_ptr ui; + App::WeakPtrT feature; + double aspectRatio; +}; + +} + +#endif // GUI_TASKIMAGESCALE_H diff --git a/src/Gui/TaskView/TaskImageScale.ui b/src/Gui/TaskView/TaskImageScale.ui new file mode 100644 index 0000000000..314e558bef --- /dev/null +++ b/src/Gui/TaskView/TaskImageScale.ui @@ -0,0 +1,97 @@ + + + Gui::TaskImageScale + + + + 0 + 0 + 277 + 178 + + + + Scale image + + + + + + Image size + + + + + + + + Width: + + + + + + + px + + + 1 + + + 100000000 + + + + + + + Height: + + + + + + + px + + + 1 + + + 100000000 + + + + + + + + + Keep aspect ratio + + + true + + + + + + + + + + Qt::Vertical + + + + 20 + 18 + + + + + + + + + diff --git a/src/Gui/TaskView/TaskOrientation.cpp b/src/Gui/TaskView/TaskOrientation.cpp new file mode 100644 index 0000000000..62577899a8 --- /dev/null +++ b/src/Gui/TaskView/TaskOrientation.cpp @@ -0,0 +1,229 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*************************************************************************** + * Copyright (c) 2023 Werner Mayer * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + +#include "PreCompiled.h" +#ifndef _PreComp_ +# include +# include +#endif + +#include +#include +#include +#include +#include + +#include "TaskOrientation.h" +#include "ui_TaskOrientation.h" + + +using namespace Gui; + +TaskOrientation::TaskOrientation(App::GeoFeature* obj, QWidget* parent) + : QWidget(parent) + , ui(new Ui_TaskOrientation) + , feature(obj) +{ + ui->setupUi(this); + + connect(ui->Reverse_checkBox, &QCheckBox::clicked, this, &TaskOrientation::onPreview); + connect(ui->XY_radioButton , &QRadioButton::clicked, this, &TaskOrientation::onPreview); + connect(ui->XZ_radioButton , &QRadioButton::clicked, this, &TaskOrientation::onPreview); + connect(ui->YZ_radioButton , &QRadioButton::clicked, this, &TaskOrientation::onPreview); + connect(ui->Offset_doubleSpinBox, qOverload(&QuantitySpinBox::valueChanged), + this, &TaskOrientation::onPreview); +} + +TaskOrientation::~TaskOrientation() +{ +} + +void TaskOrientation::open() +{ + if (!feature.expired()) { + App::Document* doc = feature->getDocument(); + doc->openTransaction(QT_TRANSLATE_NOOP("Command", "Change orientation")); + restore(feature->Placement.getValue()); + } +} + +void TaskOrientation::accept() +{ + if (!feature.expired()) { + App::Document* doc = feature->getDocument(); + doc->commitTransaction(); + doc->recompute(); + } +} + +void TaskOrientation::reject() +{ + if (!feature.expired()) { + App::Document* doc = feature->getDocument(); + doc->abortTransaction(); + feature->purgeTouched(); + } +} + +void TaskOrientation::onPreview() +{ + updateIcon(); + updatePlacement(); +} + +void TaskOrientation::restore(const Base::Placement& plm) +{ + auto isReversed = [](Camera::Orientation type) { + return (type == Camera::Bottom) || + (type == Camera::Rear) || + (type == Camera::Left); + }; + std::map rotations { + {Camera::Top, Camera::convert(Camera::Top)}, + {Camera::Bottom, Camera::convert(Camera::Bottom)}, + {Camera::Front, Camera::convert(Camera::Front)}, + {Camera::Rear, Camera::convert(Camera::Rear)}, + {Camera::Right, Camera::convert(Camera::Right)}, + {Camera::Left, Camera::convert(Camera::Left)} + }; + + Base::Rotation rot = plm.getRotation(); + Base::Vector3d pos = plm.getPosition(); + + double prec = 1.0e-5; + for (const auto& it : rotations) { + if (rot.isSame(it.second, prec)) { + if (it.first == Camera::Top || + it.first == Camera::Bottom) { + ui->XY_radioButton->setChecked(true); + ui->Offset_doubleSpinBox->setValue(pos.z); + } + else if (it.first == Camera::Front || + it.first == Camera::Rear) { + ui->XZ_radioButton->setChecked(true); + ui->Offset_doubleSpinBox->setValue(pos.y); + } + else if (it.first == Camera::Right || + it.first == Camera::Left) { + ui->YZ_radioButton->setChecked(true); + ui->Offset_doubleSpinBox->setValue(pos.x); + } + + if (isReversed(it.first)) { + ui->Reverse_checkBox->setChecked(true); + } + } + } + + onPreview(); +} + +void TaskOrientation::updatePlacement() +{ + Base::Placement Pos; + double offset = ui->Offset_doubleSpinBox->value().getValue(); + bool reverse = ui->Reverse_checkBox->isChecked(); + if (ui->XY_radioButton->isChecked()) { + if (!reverse) { + Pos = Base::Placement(Base::Vector3d(0, 0, offset), + Camera::convert(Camera::Top)); + } + else { + Pos = Base::Placement(Base::Vector3d(0, 0, offset), + Camera::convert(Camera::Bottom)); + } + } + else if (ui->XZ_radioButton->isChecked()) { + if (!reverse) { + Pos = Base::Placement(Base::Vector3d(0, offset, 0), + Camera::convert(Camera::Front)); + } + else { + Pos = Base::Placement(Base::Vector3d(0, offset, 0), + Camera::convert(Camera::Rear)); + } + } + else if (ui->YZ_radioButton->isChecked()) { + if (!reverse) { + Pos = Base::Placement(Base::Vector3d(offset, 0, 0), + Camera::convert(Camera::Right)); + } + else { + Pos = Base::Placement(Base::Vector3d(offset, 0, 0), + Camera::convert(Camera::Left)); + } + } + + if (!feature.expired()) { + feature->Placement.setValue(Pos); + } +} + +void TaskOrientation::updateIcon() +{ + std::string icon; + bool reverse = ui->Reverse_checkBox->isChecked(); + if (ui->XY_radioButton->isChecked()) { + icon = reverse ? "view-bottom" : "view-top"; + } + else if (ui->XZ_radioButton->isChecked()) { + icon = reverse ? "view-rear" : "view-front"; + } + else if (ui->YZ_radioButton->isChecked()) { + icon = reverse ? "view-left" : "view-right"; + } + + ui->previewLabel->setPixmap( + Gui::BitmapFactory().pixmapFromSvg(icon.c_str(), + ui->previewLabel->size())); +} + +// ---------------------------------------------------------------------------- + +TaskOrientationDialog::TaskOrientationDialog(App::GeoFeature* obj) +{ + widget = new TaskOrientation(obj); + Gui::TaskView::TaskBox* taskbox = new Gui::TaskView::TaskBox( + QPixmap(), widget->windowTitle(), true, nullptr); + taskbox->groupLayout()->addWidget(widget); + Content.push_back(taskbox); +} + +void TaskOrientationDialog::open() +{ + widget->open(); +} + +bool TaskOrientationDialog::accept() +{ + widget->accept(); + return true; +} + +bool TaskOrientationDialog::reject() +{ + widget->reject(); + return true; +} + +#include "moc_TaskOrientation.cpp" diff --git a/src/Gui/TaskView/TaskOrientation.h b/src/Gui/TaskView/TaskOrientation.h new file mode 100644 index 0000000000..ac25492372 --- /dev/null +++ b/src/Gui/TaskView/TaskOrientation.h @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +/*************************************************************************** + * Copyright (c) 2023 Werner Mayer * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + +#ifndef GUI_TASKORIENTATION_H +#define GUI_TASKORIENTATION_H + +#include +#include +#include +#include + +namespace Gui { + +class Ui_TaskOrientation; +class TaskOrientation : public QWidget +{ + Q_OBJECT + +public: + explicit TaskOrientation(App::GeoFeature* obj, QWidget* parent = nullptr); + ~TaskOrientation() override; + + void open(); + void accept(); + void reject(); + +private: + void restore(const Base::Placement&); + void onPreview(); + void updateIcon(); + void updatePlacement(); + +private: + std::unique_ptr ui; + App::WeakPtrT feature; +}; + +class TaskOrientationDialog : public Gui::TaskView::TaskDialog +{ + Q_OBJECT + +public: + explicit TaskOrientationDialog(App::GeoFeature* obj); + +public: + void open() override; + bool accept() override; + bool reject() override; + + QDialogButtonBox::StandardButtons getStandardButtons() const override { + return QDialogButtonBox::Ok | QDialogButtonBox::Cancel; + } + +private: + TaskOrientation* widget; +}; + +} + +#endif // GUI_TASKORIENTATION_H diff --git a/src/Mod/Image/Gui/ImageOrientationDialog.ui b/src/Gui/TaskView/TaskOrientation.ui similarity index 65% rename from src/Mod/Image/Gui/ImageOrientationDialog.ui rename to src/Gui/TaskView/TaskOrientation.ui index 217e51c2e8..f09dc30e07 100644 --- a/src/Mod/Image/Gui/ImageOrientationDialog.ui +++ b/src/Gui/TaskView/TaskOrientation.ui @@ -1,13 +1,13 @@ - ImageGui::ImageOrientationDialog - + Gui::TaskOrientation + 0 0 - 178 - 201 + 194 + 200 @@ -17,7 +17,7 @@ - Image plane + Planes @@ -47,6 +47,13 @@ + + + + Reverse direction + + + @@ -66,13 +73,6 @@ - - - - Reverse direction - - - @@ -83,33 +83,23 @@ - + mm - + -999999999.000000000000000 - + 999999999.000000000000000 - - 10.000000000000000 + + 1.000000000000000 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - @@ -120,38 +110,5 @@ - - - buttonBox - accepted() - ImageGui::ImageOrientationDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - ImageGui::ImageOrientationDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - + diff --git a/src/Gui/View3DInventor.cpp b/src/Gui/View3DInventor.cpp index 1a47333adf..196a22ad1d 100644 --- a/src/Gui/View3DInventor.cpp +++ b/src/Gui/View3DInventor.cpp @@ -57,6 +57,7 @@ #include "View3DInventor.h" #include "View3DSettings.h" #include "Application.h" +#include "Camera.h" #include "Document.h" #include "FileDialog.h" #include "MainWindow.h" @@ -422,18 +423,31 @@ bool View3DInventor::onMsg(const char* pMsg, const char** ppReturn) getGuiDocument()->saveCopy(); return true; } + else if (strcmp("ZoomIn", pMsg) == 0) { + View3DInventorViewer* viewer = getViewer(); + viewer->navigationStyle()->zoomIn(); + return true; + } + else if (strcmp("ZoomOut", pMsg) == 0) { + View3DInventorViewer* viewer = getViewer(); + viewer->navigationStyle()->zoomOut(); + return true; + } return false; } bool View3DInventor::onHasMsg(const char* pMsg) const { - if (strcmp("Save",pMsg) == 0) + if (strcmp("Save",pMsg) == 0) { return true; - else if (strcmp("SaveAs",pMsg) == 0) + } + else if (strcmp("SaveAs",pMsg) == 0) { return true; - else if (strcmp("SaveCopy",pMsg) == 0) + } + else if (strcmp("SaveCopy",pMsg) == 0) { return true; + } else if (strcmp("Undo",pMsg) == 0) { App::Document* doc = getAppDocument(); return doc && doc->getAvailableUndos() > 0; @@ -442,58 +456,89 @@ bool View3DInventor::onHasMsg(const char* pMsg) const App::Document* doc = getAppDocument(); return doc && doc->getAvailableRedos() > 0; } - else if (strcmp("Print",pMsg) == 0) + else if (strcmp("Print",pMsg) == 0) { return true; - else if (strcmp("PrintPreview",pMsg) == 0) + } + else if (strcmp("PrintPreview",pMsg) == 0) { return true; - else if (strcmp("PrintPdf",pMsg) == 0) + } + else if (strcmp("PrintPdf",pMsg) == 0) { return true; - else if(strcmp("SetStereoRedGreen",pMsg) == 0) + } + else if(strcmp("SetStereoRedGreen",pMsg) == 0) { return true; - else if(strcmp("SetStereoQuadBuff",pMsg) == 0) + } + else if(strcmp("SetStereoQuadBuff",pMsg) == 0) { return true; - else if(strcmp("SetStereoInterleavedRows",pMsg) == 0) + } + else if(strcmp("SetStereoInterleavedRows",pMsg) == 0) { return true; - else if(strcmp("SetStereoInterleavedColumns",pMsg) == 0) + } + else if(strcmp("SetStereoInterleavedColumns",pMsg) == 0) { return true; - else if(strcmp("SetStereoOff",pMsg) == 0) + } + else if(strcmp("SetStereoOff",pMsg) == 0) { return true; - else if(strcmp("Example1",pMsg) == 0) + } + else if(strcmp("Example1",pMsg) == 0) { return true; - else if(strcmp("Example2",pMsg) == 0) + } + else if(strcmp("Example2",pMsg) == 0) { return true; - else if(strcmp("Example3",pMsg) == 0) + } + else if(strcmp("Example3",pMsg) == 0) { return true; - else if(strcmp("ViewFit",pMsg) == 0) + } + else if(strcmp("ViewFit",pMsg) == 0) { return true; - else if(strcmp("ViewVR",pMsg) == 0) + } + else if(strcmp("ViewVR",pMsg) == 0) { #ifdef BUILD_VR return true; #else return false; #endif - else if(strcmp("ViewSelection",pMsg) == 0) + } + else if(strcmp("ViewSelection",pMsg) == 0) { return true; - else if(strcmp("ViewBottom",pMsg) == 0) + } + else if(strcmp("ViewBottom",pMsg) == 0) { return true; - else if(strcmp("ViewFront",pMsg) == 0) + } + else if(strcmp("ViewFront",pMsg) == 0) { return true; - else if(strcmp("ViewLeft",pMsg) == 0) + } + else if(strcmp("ViewLeft",pMsg) == 0) { return true; - else if(strcmp("ViewRear",pMsg) == 0) + } + else if(strcmp("ViewRear",pMsg) == 0) { return true; - else if(strcmp("ViewRight",pMsg) == 0) + } + else if(strcmp("ViewRight",pMsg) == 0) { return true; - else if(strcmp("ViewTop",pMsg) == 0) + } + else if(strcmp("ViewTop",pMsg) == 0) { return true; - else if(strcmp("ViewAxo",pMsg) == 0) + } + else if(strcmp("ViewAxo",pMsg) == 0) { return true; - else if(strcmp("GetCamera",pMsg) == 0) + } + else if(strcmp("GetCamera",pMsg) == 0) { return true; - else if(strncmp("SetCamera",pMsg,9) == 0) + } + else if(strncmp("SetCamera",pMsg,9) == 0) { return true; - else if(strncmp("Dump",pMsg,4) == 0) + } + else if(strncmp("Dump",pMsg,4) == 0) { return true; + } + if (strcmp("ZoomIn", pMsg) == 0) { + return true; + } + if (strcmp("ZoomOut", pMsg) == 0) { + return true; + } + return false; } diff --git a/src/Gui/View3DPy.cpp b/src/Gui/View3DPy.cpp index 1c8f8bd29a..2f5608be3e 100644 --- a/src/Gui/View3DPy.cpp +++ b/src/Gui/View3DPy.cpp @@ -52,6 +52,7 @@ #include "View3DPy.h" +#include "Camera.h" #include "Document.h" #include "NavigationStyle.h" #include "PythonWrapper.h" @@ -373,119 +374,6 @@ Py::Object View3DInventorPy::boxZoom(const Py::Tuple& args, const Py::Dict& kwds return Py::None(); } -/** - Formulas to get quaternion for axonometric views: - - \code -from math import sqrt, degrees, asin, atan -p1=App.Rotation(App.Vector(1,0,0),90) -p2=App.Rotation(App.Vector(0,0,1),alpha) -p3=App.Rotation(p2.multVec(App.Vector(1,0,0)),beta) -p4=p3.multiply(p2).multiply(p1) - -from pivy import coin -c=Gui.ActiveDocument.ActiveView.getCameraNode() -c.orientation.setValue(*p4.Q) - \endcode - - The angles alpha and beta depend on the type of axonometry - Isometric: - \code -alpha=45 -beta=degrees(asin(-sqrt(1.0/3.0))) - \endcode - - Dimetric: - \code -alpha=degrees(asin(sqrt(1.0/8.0))) -beta=degrees(-asin(1.0/3.0)) - \endcode - - Trimetric: - \code -alpha=30.0 -beta=-35.0 - \endcode - - Verification code that the axonomtries are correct: - - \code -from pivy import coin -c=Gui.ActiveDocument.ActiveView.getCameraNode() -vo=App.Vector(c.getViewVolume().getMatrix().multVecMatrix(coin.SbVec3f(0,0,0)).getValue()) -vx=App.Vector(c.getViewVolume().getMatrix().multVecMatrix(coin.SbVec3f(10,0,0)).getValue()) -vy=App.Vector(c.getViewVolume().getMatrix().multVecMatrix(coin.SbVec3f(0,10,0)).getValue()) -vz=App.Vector(c.getViewVolume().getMatrix().multVecMatrix(coin.SbVec3f(0,0,10)).getValue()) -(vx-vo).Length -(vy-vo).Length -(vz-vo).Length - -# Projection -vo.z=0 -vx.z=0 -vy.z=0 -vz.z=0 - -(vx-vo).Length -(vy-vo).Length -(vz-vo).Length - \endcode - - See also: - http://www.mathematik.uni-marburg.de/~thormae/lectures/graphics1/graphics_6_2_ger_web.html#1 - http://www.mathematik.uni-marburg.de/~thormae/lectures/graphics1/code_v2/Axonometric/qt/Axonometric.cpp - https://de.wikipedia.org/wiki/Arkussinus_und_Arkuskosinus -*/ - -SbRotation Camera::rotation(Camera::Orientation view) -{ - switch (view) { - case Top: - return SbRotation(0, 0, 0, 1); - case Bottom: - return SbRotation(1, 0, 0, 0); - case Front: { - auto root = (float)(sqrt(2.0)/2.0); - return SbRotation(root, 0, 0, root); - } - case Rear: { - auto root = (float)(sqrt(2.0)/2.0); - return SbRotation(0, root, root, 0); - } - case Left: - return SbRotation(-0.5, 0.5, 0.5, -0.5); - case Right: - return SbRotation(0.5, 0.5, 0.5, 0.5); - case Isometric: - //from math import sqrt, degrees, asin - //p1=App.Rotation(App.Vector(1,0,0),45) - //p2=App.Rotation(App.Vector(0,0,1),-45) - //p3=p2.multiply(p1) - //return SbRotation(0.353553f, -0.146447f, -0.353553f, 0.853553f); - - //from math import sqrt, degrees, asin - //p1=App.Rotation(App.Vector(1,0,0),90) - //p2=App.Rotation(App.Vector(0,0,1),135) - //p3=App.Rotation(App.Vector(-1,1,0),degrees(asin(-sqrt(1.0/3.0)))) - //p4=p3.multiply(p2).multiply(p1) - //return SbRotation(0.17592, 0.424708, 0.820473, 0.339851); - - //from math import sqrt, degrees, asin - //p1=App.Rotation(App.Vector(1,0,0),90) - //p2=App.Rotation(App.Vector(0,0,1),45) - //#p3=App.Rotation(App.Vector(1,1,0),45) - //p3=App.Rotation(App.Vector(1,1,0),degrees(asin(-sqrt(1.0/3.0)))) - //p4=p3.multiply(p2).multiply(p1) - return SbRotation(0.424708f, 0.17592f, 0.339851f, 0.820473f); - case Dimetric: - return SbRotation(0.567952f, 0.103751f, 0.146726f, 0.803205f); - case Trimetric: - return SbRotation(0.446015f, 0.119509f, 0.229575f, 0.856787f); - default: - return SbRotation(0, 0, 0, 1); - } -} - Py::Object View3DInventorPy::viewBottom(const Py::Tuple& args) { if (!PyArg_ParseTuple(args.ptr(), "")) diff --git a/src/Gui/View3DPy.h b/src/Gui/View3DPy.h index 76700d65f0..eb7355207c 100644 --- a/src/Gui/View3DPy.h +++ b/src/Gui/View3DPy.h @@ -35,24 +35,6 @@ namespace Gui { class View3DInventor; -class Camera -{ -public: - enum Orientation { - Top, - Bottom, - Front, - Rear, - Left, - Right, - Isometric, - Dimetric, - Trimetric, - }; - - static SbRotation rotation(Orientation view); -}; - class View3DInventorPy : public Py::PythonExtension { public: diff --git a/src/Gui/ViewProviderImagePlane.cpp b/src/Gui/ViewProviderImagePlane.cpp new file mode 100644 index 0000000000..aefa607083 --- /dev/null +++ b/src/Gui/ViewProviderImagePlane.cpp @@ -0,0 +1,283 @@ +/*************************************************************************** + * Copyright (c) 2011 Jürgen Riegel (juergen.riegel@web.de) * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + +#include "PreCompiled.h" +#ifndef _PreComp_ +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "ViewProviderImagePlane.h" + + +using namespace Gui; + + +PROPERTY_SOURCE(Gui::ViewProviderImagePlane, Gui::ViewProviderGeometryObject) +const char* ViewProviderImagePlane::LightingEnums[]= {"One side", "Two side", nullptr}; + +ViewProviderImagePlane::ViewProviderImagePlane() +{ + ADD_PROPERTY_TYPE(Lighting,(1L), "Object Style", App::Prop_None, "Set object lighting."); + Lighting.setEnums(LightingEnums); + + texture = new SoTexture2; + texture->ref(); + + pcCoords = new SoCoordinate3(); + pcCoords->ref(); + + shapeHints = new SoShapeHints; + shapeHints->shapeType = SoShapeHints::UNKNOWN_SHAPE_TYPE; + shapeHints->vertexOrdering = SoShapeHints::COUNTERCLOCKWISE; + shapeHints->ref(); + + sPixmap = "image-plane"; +} + +ViewProviderImagePlane::~ViewProviderImagePlane() +{ + pcCoords->unref(); + texture->unref(); + shapeHints->unref(); +} + +void ViewProviderImagePlane::attach(App::DocumentObject *pcObj) +{ + ViewProviderGeometryObject::attach(pcObj); + + // NOTE: SoFCSelection node has beem removed because it led to + // problems using the image as a construction plane with the + // draft commands + SoSeparator* planesep = new SoSeparator; + planesep->addChild(pcCoords); + + SoTextureCoordinate2 *textCoord = new SoTextureCoordinate2; + textCoord->point.set1Value(0,0,0); + textCoord->point.set1Value(1,1,0); + textCoord->point.set1Value(2,1,1); + textCoord->point.set1Value(3,0,1); + planesep->addChild(textCoord); + + // texture + texture->model = SoTexture2::MODULATE; + planesep->addChild(texture); + + planesep->addChild(shapeHints); + planesep->addChild(pcShapeMaterial); + + // plane + pcCoords->point.set1Value(0,0,0,0); + pcCoords->point.set1Value(1,1,0,0); + pcCoords->point.set1Value(2,1,1,0); + pcCoords->point.set1Value(3,0,1,0); + SoFaceSet *faceset = new SoFaceSet; + faceset->numVertices.set1Value(0,4); + planesep->addChild(faceset); + + addDisplayMaskMode(planesep, "ImagePlane"); +} + +void ViewProviderImagePlane::setDisplayMode(const char* ModeName) +{ + if (strcmp("ImagePlane",ModeName) == 0) + setDisplayMaskMode("ImagePlane"); + ViewProviderGeometryObject::setDisplayMode(ModeName); +} + +std::vector ViewProviderImagePlane::getDisplayModes() const +{ + std::vector StrList; + StrList.emplace_back("ImagePlane"); + return StrList; +} + +void ViewProviderImagePlane::onChanged(const App::Property* prop) +{ + if (prop == &Lighting) { + if (Lighting.getValue() == 0) + shapeHints->vertexOrdering = SoShapeHints::UNKNOWN_ORDERING; + else + shapeHints->vertexOrdering = SoShapeHints::COUNTERCLOCKWISE; + } + ViewProviderGeometryObject::onChanged(prop); +} + +void ViewProviderImagePlane::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) +{ + Gui::ActionFunction* func = new Gui::ActionFunction(menu); + QAction* action = menu->addAction(QObject::tr("Change image...")); + action->setIcon(QIcon(QLatin1String("images:image-scaling.svg"))); + func->trigger(action, std::bind(&ViewProviderImagePlane::manipulateImage, this)); + + ViewProviderGeometryObject::setupContextMenu(menu, receiver, member); +} + +bool ViewProviderImagePlane::doubleClicked() +{ + manipulateImage(); + return true; +} + +void ViewProviderImagePlane::manipulateImage() +{ + auto dialog = new TaskOrientationDialog( + dynamic_cast(getObject()) + ); + dialog->addTaskBox(new TaskImageScale( + dynamic_cast(getObject()) + )); + + Gui::Control().showDialog(dialog); +} + +void ViewProviderImagePlane::resizePlane(float xsize, float ysize) +{ + pcCoords->point.set1Value(0,-(xsize/2),-(ysize/2),0.0); + pcCoords->point.set1Value(1,+(xsize/2),-(ysize/2),0.0); + pcCoords->point.set1Value(2,+(xsize/2),+(ysize/2),0.0); + pcCoords->point.set1Value(3,-(xsize/2),+(ysize/2),0.0); +} + +void ViewProviderImagePlane::loadImage() +{ + App::ImagePlane* imagePlane = static_cast(pcObject); + std::string fileName = imagePlane->ImageFile.getValue(); + + if (!fileName.empty()) { + double xsize = imagePlane->XSize.getValue(); + double ysize = imagePlane->YSize.getValue(); + + QImage impQ; + if (!loadSvg(fileName.c_str(), xsize, ysize, impQ)) { + QSizeF size = loadRaster(fileName.c_str(), impQ); + if (!impQ.isNull()) { + imagePlane->XSize.setValue(size.width()); + imagePlane->YSize.setValue(size.height()); + + imagePlane->XPixelsPerMeter = impQ.dotsPerMeterX(); + imagePlane->YPixelsPerMeter = impQ.dotsPerMeterY(); + } + } + + convertToSFImage(impQ); + } +} + +QSizeF ViewProviderImagePlane::loadRaster(const char* fileName, QImage& img) +{ + QSizeF sizef; + if (img.load(QString::fromUtf8(fileName))) { + double xPixelsPerM = img.dotsPerMeterX(); + double width = img.width(); + width = width * 1000 / xPixelsPerM; + + double yPixelsPerM = img.dotsPerMeterY(); + double height = img.height(); + height = height * 1000 / yPixelsPerM; + + sizef.setWidth(width); + sizef.setHeight(height); + } + + return sizef; +} + +void ViewProviderImagePlane::reloadIfSvg() +{ + App::ImagePlane* imagePlane = static_cast(pcObject); + std::string fileName = imagePlane->ImageFile.getValue(); + + double xsize = imagePlane->XSize.getValue(); + double ysize = imagePlane->YSize.getValue(); + + QImage impQ; + loadSvg(fileName.c_str(), xsize, ysize, impQ); + convertToSFImage(impQ); +} + +bool ViewProviderImagePlane::loadSvg(const char* filename, double width, double height, QImage& img) +{ + QFileInfo fi(QString::fromUtf8(filename)); + if (fi.suffix().toLower() == QLatin1String("svg")) { + QImage tmp; + if (tmp.load(QString::fromUtf8(filename))) { + double xPixelsPerM = tmp.dotsPerMeterX(); + double yPixelsPerM = tmp.dotsPerMeterY(); + width = width * xPixelsPerM / 1000; + height = height * yPixelsPerM / 1000; + } + + QPixmap px = BitmapFactory().pixmapFromSvg(filename, QSizeF(width, height)); + img = px.toImage(); + return true; + } + + return false; +} + +void ViewProviderImagePlane::convertToSFImage(const QImage& img) +{ + if (!img.isNull()) { + SoSFImage sfimg; + // convert to Coin bitmap + BitmapFactory().convert(img, sfimg); + texture->image = sfimg; + } +} + +void ViewProviderImagePlane::updateData(const App::Property* prop) +{ + App::ImagePlane* pcPlaneObj = static_cast(pcObject); + if (prop == &pcPlaneObj->XSize || prop == &pcPlaneObj->YSize) { + float xsize = pcPlaneObj->XSize.getValue(); + float ysize = pcPlaneObj->YSize.getValue(); + + resizePlane(xsize, ysize); + reloadIfSvg(); + } + else if (prop == &pcPlaneObj->ImageFile) { + loadImage(); + } + else { + Gui::ViewProviderGeometryObject::updateData(prop); + } +} diff --git a/src/Mod/Image/Gui/ViewProviderImagePlane.h b/src/Gui/ViewProviderImagePlane.h similarity index 70% rename from src/Mod/Image/Gui/ViewProviderImagePlane.h rename to src/Gui/ViewProviderImagePlane.h index 36941074af..b0f4bec6fa 100644 --- a/src/Mod/Image/Gui/ViewProviderImagePlane.h +++ b/src/Gui/ViewProviderImagePlane.h @@ -20,46 +20,56 @@ * * ***************************************************************************/ -#ifndef IMAGE_ViewProviderImagePlane_H -#define IMAGE_ViewProviderImagePlane_H +#ifndef GUI_ViewProviderImagePlane_H +#define GUI_ViewProviderImagePlane_H #include -#include class SoCoordinate3; class SoDrawStyle; +class SoShapeHints; class SoTexture2; class QImage; -namespace ImageGui +namespace Gui { -class ImageGuiExport ViewProviderImagePlane : public Gui::ViewProviderGeometryObject +class GuiExport ViewProviderImagePlane : public Gui::ViewProviderGeometryObject { - PROPERTY_HEADER_WITH_OVERRIDE(RobotGui::ViewProviderImagePlane); + PROPERTY_HEADER_WITH_OVERRIDE(Gui::ViewProviderImagePlane); public: - /// constructor. ViewProviderImagePlane(); - - /// destructor. ~ViewProviderImagePlane() override; + App::PropertyEnumeration Lighting; + void attach(App::DocumentObject *pcObject) override; void setDisplayMode(const char* ModeName) override; std::vector getDisplayModes() const override; void updateData(const App::Property*) override; + void setupContextMenu(QMenu*, QObject*, const char*) override; + bool doubleClicked() override; + void onChanged(const App::Property* prop) override; private: - bool loadSvg(const char*, float x, float y, QImage& img); + void resizePlane(float xsize, float ysize); + void loadImage(); + void reloadIfSvg(); + bool loadSvg(const char*, double x, double y, QImage& img); + QSizeF loadRaster(const char*, QImage& img); + void convertToSFImage(const QImage& img); + void manipulateImage(); -protected: +private: SoCoordinate3 * pcCoords; SoTexture2 * texture; - }; + SoShapeHints * shapeHints; + static const char * LightingEnums[]; +}; -} //namespace RobotGui +} //namespace Gui -#endif // IMAGE_ViewProviderImagePlane_H +#endif // GUI_ViewProviderImagePlane_H diff --git a/src/Gui/Workbench.cpp b/src/Gui/Workbench.cpp index d7120a6eb5..961e9f4fa2 100644 --- a/src/Gui/Workbench.cpp +++ b/src/Gui/Workbench.cpp @@ -697,6 +697,7 @@ MenuItem* StdWorkbench::setupMenuBar() const *tool << "Std_DlgParameter" << "Separator" << "Std_ViewScreenShot" + << "Std_ViewLoadImage" << "Std_SceneInspector" << "Std_DependencyGraph" << "Std_ProjectUtil" diff --git a/src/Mod/CMakeLists.txt b/src/Mod/CMakeLists.txt index c8d8550b47..44a12bf641 100644 --- a/src/Mod/CMakeLists.txt +++ b/src/Mod/CMakeLists.txt @@ -30,10 +30,6 @@ if(BUILD_IDF) add_subdirectory(Idf) endif(BUILD_IDF) -if(BUILD_IMAGE) - add_subdirectory(Image) -endif(BUILD_IMAGE) - if(BUILD_IMPORT) add_subdirectory(Import) endif(BUILD_IMPORT) diff --git a/src/Mod/Image/App/AppImage.cpp b/src/Mod/Image/App/AppImage.cpp deleted file mode 100644 index 54d9f4eec2..0000000000 --- a/src/Mod/Image/App/AppImage.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * for detail see the LICENCE text file. * - * Jürgen Riegel 2002 * - * * - ***************************************************************************/ - -#include "PreCompiled.h" - -#include -#include -#include - -#include "ImagePlane.h" - - -namespace Image { -class Module : public Py::ExtensionModule -{ -public: - Module() : Py::ExtensionModule("Image") - { - initialize("This module is the Image module."); // register with Python - } - - ~Module() override {} - -private: -}; - -PyObject* initModule() -{ - return Base::Interpreter().addModule(new Module); -} - -} // namespace Image - -/* Python entry */ -PyMOD_INIT_FUNC(Image) -{ - PyObject* mod = Image::initModule(); - Base::Console().Log("Loading Image module... done\n"); - - Image::ImagePlane::init(); - - PyMOD_Return(mod); -} diff --git a/src/Mod/Image/App/CMakeLists.txt b/src/Mod/Image/App/CMakeLists.txt deleted file mode 100644 index 5f4096855a..0000000000 --- a/src/Mod/Image/App/CMakeLists.txt +++ /dev/null @@ -1,44 +0,0 @@ -if(WIN32) - add_definitions(-DFCAppImage) -endif(WIN32) - -if(OPENCV2_FOUND) - add_definitions(-DHAVE_OPENCV2) -endif(OPENCV2_FOUND) - -include_directories( - ${OPENCV_INCLUDE2_DIR} - ${PYTHON_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} - ${ZLIB_INCLUDE_DIR} -) - -set(Image_LIBS - ${OPENCV2_LIBRARIES} - FreeCADApp -) - -set(Image_SRCS - ImageBase.cpp - ImageBase.h - ImagePlane.cpp - ImagePlane.h - PreCompiled.cpp - PreCompiled.h - AppImage.cpp -) - -if(FREECAD_USE_PCH) - add_definitions(-D_PreComp_) - GET_MSVC_PRECOMPILED_SOURCE("PreCompiled.cpp" PCH_SRCS ${Image_SRCS}) - ADD_MSVC_PRECOMPILED_HEADER(Image PreCompiled.h PreCompiled.cpp PCH_SRCS) -endif(FREECAD_USE_PCH) - -add_library(Image SHARED ${Image_SRCS}) -target_link_libraries(Image ${Image_LIBS}) - - -SET_BIN_DIR(Image Image /Mod/Image) -SET_PYTHON_PREFIX_SUFFIX(Image) - -INSTALL(TARGETS Image DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/src/Mod/Image/App/ImageBase.cpp b/src/Mod/Image/App/ImageBase.cpp deleted file mode 100644 index 41115d8062..0000000000 --- a/src/Mod/Image/App/ImageBase.cpp +++ /dev/null @@ -1,343 +0,0 @@ -/*************************************************************************** - * * - * This is a class for holding and handling basic image data * - * * - * Author: Graeme van der Vlugt * - * Copyright: Imetric 3D GmbH * - * Year: 2004 * - * * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * for detail see the LICENCE text file. * - * * - ***************************************************************************/ - -#include "PreCompiled.h" - -#include -#include "ImageBase.h" - - -using namespace Image; - -// Constructor (constructs an empty image) -ImageBase::ImageBase() -{ - _pPixelData = nullptr; - _owner = true; - _width = 0; - _height = 0; - _setColorFormat(IB_CF_GREY8, 8); -} - -// Destructor -ImageBase::~ImageBase() -{ - try - { - clear(); - } - catch(...) {} -} - -// Copy constructor -ImageBase::ImageBase(const ImageBase &rhs) -{ - // Do the copy - if (rhs._owner) - { - // rhs is the owner - do a deep copy - _pPixelData = nullptr; - _owner = false; // avoids a superfluous delete - if (createCopy((void *)(rhs._pPixelData), rhs._width, rhs._height, rhs._format, rhs._numSigBitsPerSample) != 0) - throw Base::RuntimeError("ImageBase::ImageBase. Error creating copy of image"); - } - else - { - // rhs is not the owner - do a shallow copy - _pPixelData = rhs._pPixelData; - _owner = rhs._owner; - _width = rhs._width; - _height = rhs._height; - _setColorFormat(rhs._format, rhs._numSigBitsPerSample); - } -} - -// = operator -ImageBase & ImageBase::operator=(const ImageBase &rhs) -{ - if (this == &rhs) - return *this; - - // Implement any deletion necessary - clear(); - - // Do the copy - if (rhs._owner) - { - // rhs is the owner - do a deep copy - _owner = false; // avoids a superfluous delete - if (createCopy((void *)(rhs._pPixelData), rhs._width, rhs._height, rhs._format, rhs._numSigBitsPerSample) != 0) - throw Base::RuntimeError("ImageBase::operator=. Error creating copy of image"); - } - else - { - // rhs is not the owner - do a shallow copy - _pPixelData = rhs._pPixelData; - _owner = rhs._owner; - _width = rhs._width; - _height = rhs._height; - _setColorFormat(rhs._format, rhs._numSigBitsPerSample); - } - - return *this; -} - - -// Clears the image data -// It only deletes the pixel data if this object is the owner of the data -void ImageBase::clear() -{ - // If object is the owner of the data then delete the allocated memory - if (_owner) - { - delete [] _pPixelData; - _pPixelData = nullptr; - } - // Else just reset the pointer (the owner of the pixel data must be responsible for deleting it) - else - { - _pPixelData = nullptr; - } - - // Re-initialise the other variables - _owner = true; - _width = 0; - _height = 0; - _setColorFormat(IB_CF_GREY8, 8); -} - -// Sets the color format and the dependent parameters -// Returns 0 for OK, -1 for invalid color format -int ImageBase::_setColorFormat(int format, unsigned short numSigBitsPerSample) -{ - switch (format) - { - case IB_CF_GREY8: - _numSamples = 1; - _numBitsPerSample = 8; - _numBytesPerPixel = 1; - break; - case IB_CF_GREY16: - _numSamples = 1; - _numBitsPerSample = 16; - _numBytesPerPixel = 2; - break; - case IB_CF_GREY32: - _numSamples = 1; - _numBitsPerSample = 32; - _numBytesPerPixel = 4; - break; - case IB_CF_RGB24: - _numSamples = 3; - _numBitsPerSample = 8; - _numBytesPerPixel = 3; - break; - case IB_CF_RGB48: - _numSamples = 3; - _numBitsPerSample = 16; - _numBytesPerPixel = 6; - break; - case IB_CF_BGR24: - _numSamples = 3; - _numBitsPerSample = 8; - _numBytesPerPixel = 3; - break; - case IB_CF_BGR48: - _numSamples = 3; - _numBitsPerSample = 16; - _numBytesPerPixel = 6; - break; - case IB_CF_RGBA32: - _numSamples = 4; - _numBitsPerSample = 8; - _numBytesPerPixel = 4; - break; - case IB_CF_RGBA64: - _numSamples = 4; - _numBitsPerSample = 16; - _numBytesPerPixel = 8; - break; - case IB_CF_BGRA32: - _numSamples = 4; - _numBitsPerSample = 8; - _numBytesPerPixel = 4; - break; - case IB_CF_BGRA64: - _numSamples = 4; - _numBitsPerSample = 16; - _numBytesPerPixel = 8; - break; - default: - return -1; - } - - if ((numSigBitsPerSample == 0) || (numSigBitsPerSample > _numBitsPerSample)) - _numSigBitsPerSample = _numBitsPerSample; - else - _numSigBitsPerSample = numSigBitsPerSample; - - _format = format; - return 0; -} - -// Allocate own space for an image based on the current color space and image size parameters -// Returns: -// 0 for OK -// -1 for error -int ImageBase::_allocate() -{ - // Check that pixel data pointer is null - if (_pPixelData) - return -1; - - // Allocate the space needed to store the pixel data - _owner = true; - try - { - _pPixelData = new unsigned char [_width * _height * _numBytesPerPixel]; - } - catch(...) - { - // memory allocation error - return -1; - } - - return 0; -} - -// Load an image by copying the pixel data -// This object will take ownership of the copied pixel data -// (the source image is still controlled by the caller) -// If numSigBitsPerSample = 0 then the full range is assumed to be significant -// Returns: -// 0 for OK -// -1 for invalid color format -// -2 for memory allocation error -int ImageBase::createCopy(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample) -{ - // Clear any existing data - clear(); - - // Set the color format and the dependent parameters - if (_setColorFormat(format, numSigBitsPerSample) != 0) - return -1; - - // Set the image size - _width = width; - _height = height; - - // Allocate our own memory for the pixel data - if (_allocate() != 0) - { - clear(); - return -2; - } - - // Copy the pixel data - memcpy((void *)_pPixelData, pSrcPixelData, _width * _height * _numBytesPerPixel); - - return 0; -} - -// Make this object point to another image source -// If takeOwnership is false then: -// This object will not own (control) or copy the pixel data -// (the source image is still controlled by the caller) -// Else if takeOwnership is true then: -// This object will take ownership (control) of the pixel data -// (the source image is not (should not be) controlled by the caller anymore) -// In this case the memory must have been allocated with the new operator (because this class will use the delete operator) -// If numSigBitsPerSample = 0 then the full range is assumed to be significant -// Returns: -// 0 for OK -// -1 for invalid color format -int ImageBase::pointTo(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, bool takeOwnership) -{ - // Clear any existing data - clear(); - - // Set the color format and the dependent parameters - if (_setColorFormat(format, numSigBitsPerSample) != 0) - return -1; - - // Set the image size - _width = width; - _height = height; - - // Point to the source pixel data - _owner = false; - _pPixelData = (unsigned char *)pSrcPixelData; - - // Flag ownership - if (takeOwnership) - _owner = true; - else - _owner = false; - - return 0; -} - -// Gets the value of a sample at the given pixel position -// Returns 0 for valid value or -1 if coordinates or sample index are out of range or -// if there is no image data -int ImageBase::getSample(int x, int y, unsigned short sampleIndex, double &value) -{ - if ((!_pPixelData) || - (sampleIndex >= _numSamples) || - (x < 0) || (x >= (int)_width) || - (y < 0) || (y >= (int)_height)) - return -1; - - // Get pointer to sample - switch (_format) - { - case IB_CF_GREY8: - case IB_CF_RGB24: - case IB_CF_BGR24: - case IB_CF_RGBA32: - case IB_CF_BGRA32: - { - unsigned char* pSample = _pPixelData + _numSamples * (y * _width + x) + sampleIndex; - value = (double)(*pSample); - } - break; - case IB_CF_GREY16: - case IB_CF_RGB48: - case IB_CF_BGR48: - case IB_CF_RGBA64: - case IB_CF_BGRA64: - { - uint16_t* pPix16 = (uint16_t *)_pPixelData; - uint16_t* pSample = pPix16 + _numSamples * (y * _width + x) + sampleIndex; - value = (double)(*pSample); - } - break; - case IB_CF_GREY32: - { - uint32_t* pPix32 = (uint32_t *)_pPixelData; - uint32_t* pSample = pPix32 + y * _width + x; - value = (double)(*pSample); - } - break; - default: - return -1; - } - return 0; -} - - - diff --git a/src/Mod/Image/App/ImageBase.h b/src/Mod/Image/App/ImageBase.h deleted file mode 100644 index 303dc614a8..0000000000 --- a/src/Mod/Image/App/ImageBase.h +++ /dev/null @@ -1,84 +0,0 @@ -/*************************************************************************** - * * - * This is a class for holding and handling basic image data * - * * - * Author: Graeme van der Vlugt * - * Copyright: Imetric 3D GmbH * - * Year: 2004 * - * * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * for detail see the LICENCE text file. * - * * - ***************************************************************************/ - -#ifndef IMAGEBASE_H -#define IMAGEBASE_H - -#include - -namespace Image -{ - -#define IB_CF_GREY8 1 // 8-bit grey level images -#define IB_CF_GREY16 2 // 16-bit grey level images -#define IB_CF_GREY32 3 // 32-bit grey level images -#define IB_CF_RGB24 4 // 24-bit (8,8,8) RGB color images -#define IB_CF_RGB48 5 // 48-bit (16,16,16) RGB color images -#define IB_CF_BGR24 6 // 24-bit (8,8,8) BGR color images -#define IB_CF_BGR48 7 // 48-bit (16,16,16) BGR color images -#define IB_CF_RGBA32 8 // 32-bit (8,8,8,8) RGBA color images (A = alpha) -#define IB_CF_RGBA64 9 // 64-bit (16,16,16,16) RGBA color images (A = alpha) -#define IB_CF_BGRA32 10 // 32-bit (8,8,8,8) BGRA color images (A = alpha) -#define IB_CF_BGRA64 11 // 64-bit (16,16,16,16) BGRA color images (A = alpha) - -class ImageExport ImageBase -{ -public: - - ImageBase(); - virtual ~ImageBase(); - ImageBase(const ImageBase &rhs); - ImageBase & operator=(const ImageBase &rhs); - - bool hasValidData() const { return (_pPixelData != nullptr); } - void* getPixelDataPtr() { return (void *)_pPixelData; } - bool isOwner() const { return _owner; } - unsigned long getWidth() const { return _width; } - unsigned long getHeight() const { return _height; } - int getFormat() const { return _format; } - unsigned short getNumSigBitsPerSample() const { return _numSigBitsPerSample; } - unsigned short getNumSamples() const { return _numSamples; } - unsigned short getNumBitsPerSample() const { return _numBitsPerSample; } - unsigned short getNumBytesPerPixel() const { return _numBytesPerPixel; } - - virtual void clear(); - virtual int createCopy(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample); - virtual int pointTo(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, bool takeOwnership); - - virtual int getSample(int x, int y, unsigned short sampleIndex, double &value); - -protected: - - int _setColorFormat(int format, unsigned short numSigBitsPerSample); - int _allocate(); - - unsigned char* _pPixelData; // pointer to the pixel data - bool _owner; // flag defining if the object owns the pixel data or not - unsigned long _width; // width of image (number of pixels in horizontal direction) - unsigned long _height; // height of image (number of pixels in vertical direction) - int _format; // colour format of the pixel data - unsigned short _numSigBitsPerSample;// number of significant bits per sample (always <= _numBitsPerSample) - - // Dependent parameters - unsigned short _numSamples; // number of samples per pixel (e.g. 1 for grey, 3 for rgb, 4 for rgba) - unsigned short _numBitsPerSample; // number of bits per sample (e.g. 8 for Grey8) - unsigned short _numBytesPerPixel; // number of bytes per pixel (e.g. 1 for Grey8) -}; - -} // namespace ImageApp - -#endif // IMAGEBASE_H diff --git a/src/Mod/Image/App/PreCompiled.cpp b/src/Mod/Image/App/PreCompiled.cpp deleted file mode 100644 index 820dcebfee..0000000000 --- a/src/Mod/Image/App/PreCompiled.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2002 Jürgen Riegel * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#include "PreCompiled.h" diff --git a/src/Mod/Image/App/PreCompiled.h b/src/Mod/Image/App/PreCompiled.h deleted file mode 100644 index 44ab746777..0000000000 --- a/src/Mod/Image/App/PreCompiled.h +++ /dev/null @@ -1,38 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2002 Jürgen Riegel * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#ifndef __PRECOMPILED__ -#define __PRECOMPILED__ - -#include - -#ifdef _PreComp_ -/// point at which warnings of overly long specifiers disabled (needed for VC6) -#ifdef _MSC_VER -# pragma warning(disable : 4005) -# pragma warning(disable : 4251) -# pragma warning(disable : 4503) -# pragma warning(disable : 4786)// specifier longer then 255 chars -#endif - -#endif // _PreComp_ -#endif diff --git a/src/Mod/Image/CMakeLists.txt b/src/Mod/Image/CMakeLists.txt deleted file mode 100644 index 0921a856a0..0000000000 --- a/src/Mod/Image/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ - -add_subdirectory(App) -if(BUILD_GUI) - add_subdirectory(Gui) -endif(BUILD_GUI) - -set(Image_Scripts - Init.py -) - -if(BUILD_GUI) - list (APPEND Image_Scripts InitGui.py) - set(Image_ToolsScripts - ImageTools/__init__.py - ImageTools/_CommandImageScaling.py - ) -endif(BUILD_GUI) - -add_custom_target(ImageScripts ALL - SOURCES ${Image_Scripts} ${Image_ToolsScripts} -) - -fc_target_copy_resource(ImageScripts - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_BINARY_DIR}/Mod/Image - ${Image_Scripts} - ${Image_ToolsScripts} -) - -INSTALL( - FILES - ${Image_Scripts} - DESTINATION - Mod/Image -) - -INSTALL( - FILES - ${Image_ToolsScripts} - DESTINATION - Mod/Image/ImageTools -) diff --git a/src/Mod/Image/Gui/AppImageGui.cpp b/src/Mod/Image/Gui/AppImageGui.cpp deleted file mode 100644 index f9e714d75e..0000000000 --- a/src/Mod/Image/Gui/AppImageGui.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * for detail see the LICENCE text file. * - * Jürgen Riegel 2002 * - * * - ***************************************************************************/ - -#include "PreCompiled.h" - -#include -#include -#include -#include - -#include "ImageView.h" -#include "ViewProviderImagePlane.h" -#include "Workbench.h" - - -// use a different name to CreateCommand() -void CreateImageCommands(); - -void loadImageResource() -{ - // add resources and reloads the translators - Q_INIT_RESOURCE(Image); - Gui::Translator::instance()->refresh(); -} - -namespace ImageGui { -extern PyObject* initModule(); -} - - -/* Python entry */ -PyMOD_INIT_FUNC(ImageGui) -{ - if (!Gui::Application::Instance) { - PyErr_SetString(PyExc_ImportError, "Cannot load Gui module in console application."); - PyMOD_Return(nullptr); - } - - PyObject* mod = ImageGui::initModule(); - Base::Console().Log("Loading GUI of Image module... done\n"); - - // instantiating the commands - CreateImageCommands(); - - ImageGui::ImageView::init(); - ImageGui::ViewProviderImagePlane::init(); - ImageGui::Workbench::init(); - - // add resources and reloads the translators - loadImageResource(); - - PyMOD_Return(mod); -} diff --git a/src/Mod/Image/Gui/AppImageGuiPy.cpp b/src/Mod/Image/Gui/AppImageGuiPy.cpp deleted file mode 100644 index d9054a67ea..0000000000 --- a/src/Mod/Image/Gui/AppImageGuiPy.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2006 Werner Mayer * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#include "PreCompiled.h" -#ifndef _PreComp_ -# include -# include -#endif - -#include -#include -#include -#include - -#include "ImageView.h" - - -namespace ImageGui { -class Module : public Py::ExtensionModule -{ -public: - Module() : Py::ExtensionModule("ImageGui") - { - add_varargs_method("open",&Module::open - ); - add_varargs_method("insert",&Module::open - ); - initialize("This module is the ImageGui module."); // register with Python - } - - ~Module() override {} - -private: - Py::Object open(const Py::Tuple& args) - { - char* Name; - const char* DocName=nullptr; - if (!PyArg_ParseTuple(args.ptr(), "et|s","utf-8",&Name,&DocName)) - throw Py::Exception(); - - std::string EncodedName = std::string(Name); - PyMem_Free(Name); - - QString fileName = QString::fromUtf8(EncodedName.c_str()); - QFileInfo file(fileName); - - // Load image from file into a QImage object - QImage imageq(fileName); - - // Extract image into a general RGB format recognised by the ImageView class - int format = IB_CF_RGB24; - unsigned char *pPixelData = nullptr; - if (!imageq.isNull()) { - pPixelData = new unsigned char[3 * (unsigned long)imageq.width() * (unsigned long)imageq.height()]; - unsigned char *pPix = pPixelData; - for (int r = 0; r < imageq.height(); r++) { - for (int c = 0; c < imageq.width(); c++) { - QRgb rgb = imageq.pixel(c,r); - *pPix = (unsigned char)qRed(rgb); - *(pPix + 1) = (unsigned char)qGreen(rgb); - *(pPix + 2) = (unsigned char)qBlue(rgb); - pPix += 3; - } - } - } - else { - throw Py::Exception(PyExc_IOError, "Could not load image file"); - } - - // Displaying the image in a view. - // This ImageView object takes ownership of the pixel data (in 'pointImageTo') so we don't need to delete it here - ImageView* iView = new ImageView(Gui::getMainWindow()); - iView->setWindowIcon( Gui::BitmapFactory().pixmap("colors") ); - iView->setWindowTitle(file.fileName()); - iView->resize( 400, 300 ); - Gui::getMainWindow()->addWindow( iView ); - iView->pointImageTo((void *)pPixelData, (unsigned long)imageq.width(), (unsigned long)imageq.height(), format, 0, true); - - return Py::None(); - } -}; - -PyObject* initModule() -{ - return Base::Interpreter().addModule(new Module); -} - -} // namespace ImageGui diff --git a/src/Mod/Image/Gui/CMakeLists.txt b/src/Mod/Image/Gui/CMakeLists.txt deleted file mode 100644 index 48818d3d6a..0000000000 --- a/src/Mod/Image/Gui/CMakeLists.txt +++ /dev/null @@ -1,82 +0,0 @@ - -if(OPENCV2_FOUND) - add_definitions(-DHAVE_OPENCV2) -endif(OPENCV2_FOUND) - - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${Boost_INCLUDE_DIRS} - ${COIN3D_INCLUDE_DIRS} - ${OPENCV2_INCLUDE_DIR} - ${ZLIB_INCLUDE_DIR} - ${PYTHON_INCLUDE_DIRS} - ${XercesC_INCLUDE_DIRS} -) - -if(MSVC) - include_directories( - ${CMAKE_SOURCE_DIR}/src/3rdParty/OpenGL/api - ) -endif(MSVC) - -set(ImageGui_LIBS - Image - FreeCADGui - ${OpenCV2_LIBRARIES} - ${OPENGL_glu_LIBRARY} -) - -SET(ImageGui_RES_SRCS - Resources/Image.qrc -) - -set(ImageGui_UIC_SRCS - ImageOrientationDialog.ui -) - -qt_add_resources(ImageGui_QRC_SRCS ${ImageGui_RES_SRCS}) - -SET(ImageGui_SRCS - ${ImageGui_QRC_SRCS} - ${ImageGui_UIC_HDRS} - AppImageGui.cpp - AppImageGuiPy.cpp - Command.cpp - ImageOrientationDialog.cpp - ImageOrientationDialog.h - OpenGLImageBox.cpp - OpenGLImageBox.h - ViewProviderImagePlane.cpp - ViewProviderImagePlane.h - Resources/Image.qrc - ImageView.cpp - ImageView.h - PreCompiled.cpp - PreCompiled.h - Workbench.cpp - Workbench.h - XpmImages.h -) - -if(FREECAD_USE_PCH) - add_definitions(-D_PreComp_) - GET_MSVC_PRECOMPILED_SOURCE("PreCompiled.cpp" PCH_SRCS ${ImageGui_SRCS}) - ADD_MSVC_PRECOMPILED_HEADER(ImageGui PreCompiled.h PreCompiled.cpp PCH_SRCS) -endif(FREECAD_USE_PCH) - -SET(ImageGuiIcon_SVG - Resources/icons/ImageWorkbench.svg -) - -add_library(ImageGui SHARED ${ImageGui_SRCS} ${ImageGuiIcon_SVG}) -target_link_libraries(ImageGui ${ImageGui_LIBS}) - - -SET_BIN_DIR(ImageGui ImageGui /Mod/Image) -SET_PYTHON_PREFIX_SUFFIX(ImageGui) - -fc_copy_sources(ImageGui "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Mod/Image" ${ImageGuiIcon_SVG}) - -INSTALL(TARGETS ImageGui DESTINATION ${CMAKE_INSTALL_LIBDIR}) -INSTALL(FILES ${ImageGuiIcon_SVG} DESTINATION "${CMAKE_INSTALL_DATADIR}/Mod/Image/Resources/icons") diff --git a/src/Mod/Image/Gui/Command.cpp b/src/Mod/Image/Gui/Command.cpp deleted file mode 100644 index 34df3fcf97..0000000000 --- a/src/Mod/Image/Gui/Command.cpp +++ /dev/null @@ -1,240 +0,0 @@ -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * for detail see the LICENCE text file. * - * Jürgen Riegel 2002 * - * * - ***************************************************************************/ - -#include "PreCompiled.h" -#ifndef _PreComp_ -# include -# include -# include -# include -# include -#endif - -#include -#if defined(FC_OS_WIN32) -#include -#endif - -#include -#include -#include -#include - -#include -#include -#include - -#include "ImageOrientationDialog.h" - - -#if HAVE_OPENCV2 -# include "opencv2/opencv.hpp" -#endif - - -#include "ImageView.h" - -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -using namespace ImageGui; - -DEF_STD_CMD(CmdImageOpen) - -CmdImageOpen::CmdImageOpen() - : Command("Image_Open") -{ - sAppModule = "Image"; - sGroup = QT_TR_NOOP("Image"); - sMenuText = QT_TR_NOOP("Open..."); - sToolTipText = QT_TR_NOOP("Open image view"); - sWhatsThis = "Image_Open"; - sStatusTip = sToolTipText; - sPixmap = "Image_Open"; -} - -void CmdImageOpen::activated(int iMsg) -{ - Q_UNUSED(iMsg); - - // add all supported QImage formats - QString formats; - QTextStream str(&formats); - str << QObject::tr("Images") << " ("; - QList qtformats = QImageReader::supportedImageFormats(); - for (QList::Iterator it = qtformats.begin(); it != qtformats.end(); ++it) { - str << "*." << it->toLower() << " "; - } - str << ");;" << QObject::tr("All files") << " (*.*)"; - // Reading an image - QString s = QFileDialog::getOpenFileName(Gui::getMainWindow(), QObject::tr("Choose an image file to open"), - QString(), formats); - if (!s.isEmpty()) { - try { - s = Base::Tools::escapeEncodeFilename(s); - // load the file with the module - Command::doCommand(Command::Gui, "import Image, ImageGui"); - Command::doCommand(Command::Gui, "ImageGui.open(\"%s\",\"utf-8\")", (const char*)s.toUtf8()); - } - catch (const Base::PyException& e) { - // Usually thrown if the file is invalid somehow - e.ReportException(); - } - } -} - -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -DEF_STD_CMD_A(CmdCreateImagePlane) - -CmdCreateImagePlane::CmdCreateImagePlane() - :Command("Image_CreateImagePlane") -{ - sAppModule = "Image"; - sGroup = QT_TR_NOOP("Image"); - sMenuText = QT_TR_NOOP("Create image plane..."); - sToolTipText = QT_TR_NOOP("Create a planar image in the 3D space"); - sWhatsThis = "Image_CreateImagePlane"; - sStatusTip = sToolTipText; - sPixmap = "Image_CreateImagePlane"; -} - -void CmdCreateImagePlane::activated(int iMsg) -{ - Q_UNUSED(iMsg); - - QString formats; - QTextStream str(&formats); - str << QObject::tr("Images") << " ("; - QList qtformats = QImageReader::supportedImageFormats(); - for (QList::Iterator it = qtformats.begin(); it != qtformats.end(); ++it) { - str << "*." << it->toLower() << " "; - } - str << ");;" << QObject::tr("All files") << " (*.*)"; - // Reading an image - QString s = QFileDialog::getOpenFileName(Gui::getMainWindow(), QObject::tr("Choose an image file to open"), - QString(), formats); - if (!s.isEmpty()) { - - QImage impQ(s); - if (impQ.isNull()) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Error opening image"), - QObject::tr("Could not load the chosen image")); - return; - } - - // ask user for orientation - ImageOrientationDialog Dlg; - - if (Dlg.exec() != QDialog::Accepted) - return; // canceled - Base::Vector3d p = Dlg.Pos.getPosition(); - Base::Rotation r = Dlg.Pos.getRotation(); - - std::string FeatName = getUniqueObjectName("ImagePlane"); - double xPixelsPerM = impQ.dotsPerMeterX(); - double width = impQ.width(); - width = width * 1000 / xPixelsPerM; - double yPixelsPerM = impQ.dotsPerMeterY(); - double height = impQ.height(); - height = height * 1000 / yPixelsPerM; - - QString pyfile = Base::Tools::escapeEncodeFilename(s); - - openCommand(QT_TRANSLATE_NOOP("Command", "Create ImagePlane")); - doCommand(Doc, "App.activeDocument().addObject('Image::ImagePlane','%s\')", FeatName.c_str()); - doCommand(Doc, "App.activeDocument().%s.ImageFile = '%s'", FeatName.c_str(), (const char*)pyfile.toUtf8()); - doCommand(Doc, "App.activeDocument().%s.XSize = %f", FeatName.c_str(), width); - doCommand(Doc, "App.activeDocument().%s.YSize = %f", FeatName.c_str(), height); - doCommand(Doc, "App.activeDocument().%s.Placement = App.Placement(App.Vector(%f,%f,%f),App.Rotation(%f,%f,%f,%f))" - , FeatName.c_str(), p.x, p.y, p.z, r[0], r[1], r[2], r[3]); - doCommand(Doc, "App.activeDocument().%s.ViewObject.ShapeColor=(1.,1.,1.)", FeatName.c_str()); - doCommand(Doc, "Gui.SendMsgToActiveView('ViewFit')"); - commitCommand(); - } -} - -bool CmdCreateImagePlane::isActive() -{ - return App::GetApplication().getActiveDocument(); -} - -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -DEF_STD_CMD(CmdImageScaling) - -CmdImageScaling::CmdImageScaling() - : Command("Image_Scaling") -{ - sAppModule = "Image"; - sGroup = QT_TR_NOOP("Image"); - sMenuText = QT_TR_NOOP("Scale..."); - sToolTipText = QT_TR_NOOP("Image Scaling"); - sWhatsThis = "Image_Scaling"; - sStatusTip = sToolTipText; - sPixmap = "Image_Scaling"; -} - -void CmdImageScaling::activated(int iMsg) -{ - Q_UNUSED(iMsg); - // To Be Defined - -} - -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -#if HAVE_OPENCV2 -DEF_STD_CMD(CmdImageCapturerTest) - -CmdImageCapturerTest::CmdImageCapturerTest() - : Command("Image_CapturerTest") -{ - sAppModule = "Image"; - sGroup = ("Image"); - sMenuText = ("CapturerTest"); - sToolTipText = ("test camara capturing"); - sWhatsThis = "Image_CapturerTest"; - sStatusTip = sToolTipText; - sPixmap = "camera-photo"; -} - -void CmdImageCapturerTest::activated(int iMsg) -{ - using namespace cv; - - VideoCapture cap(0); // open the default camera - if(!cap.isOpened()) // check if we succeeded - return; - - Mat edges; - namedWindow("edges",1); - for(;;) - { - Mat frame; - cap >> frame; // get a new frame from camera - cvtColor(frame, edges, CV_BGR2GRAY); - GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); - Canny(edges, edges, 0, 30, 3); - imshow("edges", edges); - if(waitKey(30) >= 0) break; - } - // the camera will be deinitialized automatically in VideoCapture destructor - -} -#endif - -void CreateImageCommands() -{ - Gui::CommandManager& rcCmdMgr = Gui::Application::Instance->commandManager(); - - rcCmdMgr.addCommand(new CmdImageOpen()); - rcCmdMgr.addCommand(new CmdCreateImagePlane()); -#if HAVE_OPENCV2 - rcCmdMgr.addCommand(new CmdImageCapturerTest()); -#endif -} diff --git a/src/Mod/Image/Gui/ImageOrientationDialog.cpp b/src/Mod/Image/Gui/ImageOrientationDialog.cpp deleted file mode 100644 index a31684530f..0000000000 --- a/src/Mod/Image/Gui/ImageOrientationDialog.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2013 Werner Mayer * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#include "PreCompiled.h" -#ifndef _PreComp_ -# include -#endif - -#include -#include -#include - -#include "ImageOrientationDialog.h" -#include "ui_ImageOrientationDialog.h" - - -using namespace ImageGui; - -ImageOrientationDialog::ImageOrientationDialog() - : QDialog(Gui::getMainWindow()), ui(new Ui_ImageOrientationDialog) -{ - DirType = 0; - ui->setupUi(this); - onPreview(); - - connect(ui->Reverse_checkBox, &QCheckBox::clicked, this, &ImageOrientationDialog::onPreview); - connect(ui->XY_radioButton , &QRadioButton::clicked, this, &ImageOrientationDialog::onPreview); - connect(ui->XZ_radioButton , &QRadioButton::clicked, this, &ImageOrientationDialog::onPreview); - connect(ui->YZ_radioButton , &QRadioButton::clicked, this, &ImageOrientationDialog::onPreview); -} - -ImageOrientationDialog::~ImageOrientationDialog() -{ - delete ui; -} - -void ImageOrientationDialog::accept() -{ - double offset = ui->Offset_doubleSpinBox->value().getValue(); - bool reverse = ui->Reverse_checkBox->isChecked(); - if (ui->XY_radioButton->isChecked()) { - if (reverse) { - Pos = Base::Placement(Base::Vector3d(0,0,offset),Base::Rotation(-1.0,0.0,0.0,0.0)); - DirType = 1; - } - else { - Pos = Base::Placement(Base::Vector3d(0,0,offset),Base::Rotation()); - DirType = 0; - } - } - else if (ui->XZ_radioButton->isChecked()) { - if (reverse) { - Pos = Base::Placement(Base::Vector3d(0,offset,0),Base::Rotation(Base::Vector3d(0,sqrt(2.0)/2.0,sqrt(2.0)/2.0),M_PI)); - DirType = 3; - } - else { - Pos = Base::Placement(Base::Vector3d(0,offset,0),Base::Rotation(Base::Vector3d(-1,0,0),1.5*M_PI)); - DirType = 2; - } - } - else if (ui->YZ_radioButton->isChecked()) { - if (reverse) { - Pos = Base::Placement(Base::Vector3d(offset,0,0),Base::Rotation(-0.5,0.5,0.5,-0.5)); - DirType = 5; - } - else { - Pos = Base::Placement(Base::Vector3d(offset,0,0),Base::Rotation(0.5,0.5,0.5,0.5)); - DirType = 4; - } - } - - QDialog::accept(); -} - -void ImageOrientationDialog::onPreview() -{ - std::string icon; - bool reverse = ui->Reverse_checkBox->isChecked(); - if (ui->XY_radioButton->isChecked()) { - if (reverse) - icon = "view-bottom"; - else - icon = "view-top"; - } - else if (ui->XZ_radioButton->isChecked()) { - if (reverse) - icon = "view-rear"; - else - icon = "view-front"; - } - else if (ui->YZ_radioButton->isChecked()) { - if (reverse) - icon = "view-left"; - else - icon = "view-right"; - } - - ui->previewLabel->setPixmap( - Gui::BitmapFactory().pixmapFromSvg(icon.c_str(), - ui->previewLabel->size())); -} - -#include "moc_ImageOrientationDialog.cpp" diff --git a/src/Mod/Image/Gui/ImageOrientationDialog.h b/src/Mod/Image/Gui/ImageOrientationDialog.h deleted file mode 100644 index f9a884a730..0000000000 --- a/src/Mod/Image/Gui/ImageOrientationDialog.h +++ /dev/null @@ -1,54 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2013 Werner Mayer * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#ifndef IMAGEGUI_IMAGEORIENTATIONDIALOG_H -#define IMAGEGUI_IMAGEORIENTATIONDIALOG_H - -#include -#include - -namespace ImageGui { - -class Ui_ImageOrientationDialog; -class ImageOrientationDialog : public QDialog -{ - Q_OBJECT - -public: - ImageOrientationDialog(); - ~ImageOrientationDialog() override; - - Base::Placement Pos; - int DirType; - - void accept() override; - -protected Q_SLOTS: - void onPreview(); - -private: - Ui_ImageOrientationDialog* ui; -}; - -} - -#endif // IMAGEGUI_IMAGEORIENTATIONDIALOG_H diff --git a/src/Mod/Image/Gui/ImageView.cpp b/src/Mod/Image/Gui/ImageView.cpp deleted file mode 100644 index 84a9d5241a..0000000000 --- a/src/Mod/Image/Gui/ImageView.cpp +++ /dev/null @@ -1,709 +0,0 @@ -/*************************************************************************** - * * - * This is a view displaying an image or portion of an image in a box. * - * * - * Author: Graeme van der Vlugt * - * Copyright: Imetric 3D GmbH * - * Year: 2004 * - * * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * for detail see the LICENCE text file. * - * * - ***************************************************************************/ - -#include "PreCompiled.h" -#ifndef _PreComp_ -# include - -# include -# include -# include -# include -# include -# include -#endif - -#include -#include - -#include "ImageView.h" -#include "XpmImages.h" - - -using namespace ImageGui; - - -/* TRANSLATOR ImageGui::ImageView */ - -TYPESYSTEM_SOURCE_ABSTRACT(ImageGui::ImageView, Gui::MDIView) - -ImageView::ImageView(QWidget* parent) - : MDIView(nullptr, parent), _ignoreCloseEvent(false) -{ - // Create an OpenGL widget for displaying images - // Since Qt5 there is a weird behaviour when creating a GLImageBox. - // It works correctly for the first time when creating an image view - // but only when no 3d view is created. For the second time or if a - // 3d view is created it fails with an assert() inside the function - // QWindowPrivate::create because QWindowsIntegration::createPlatformWindow - // fails to create an instance of QPlatformWindow. - // The reason for the failure is that for the passed parent widget - // i.e. this ImageView the QPlatformWindow is also null. - // As said above it works the very first time because at construction time - // of GLImageBox it doesn't set the ImageView as parent but the parent of - // the ImageView, i.e. the main window. This mafic happens inside the - // function QWidgetPrivate::setParent_sys at this line: - // QWidget *parentWithWindow = - // newparent ? (newparent->windowHandle() ? newparent : newparent->nativeParentWidget()) : 0; - // where newparent->nativeParentWidget() returns the main window. - // For the second time this magic fails. Interesting in this context is - // that for the 3d view this magic always works. - // In order to fix this problem we directly pass the pointer of the parent - // of this ImageView, i.e. the main window. - // Note: - // Since Qt5 the class QGLWidget is marked as deprecated and should be - // replaced by QOpenGLWidget. - - _pGLImageBox = new GLImageBox(this); - setCentralWidget(_pGLImageBox); - - // enable mouse tracking when moving even if no buttons are pressed - setMouseTracking(true); - - // enable the mouse events - _mouseEventsEnabled = true; - - // Create the default status bar for displaying messages - enableStatusBar(true); - - _currMode = nothing; - _currX = 0; - _currY = 0; - - // Create the actions, menus and toolbars - createActions(); - - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath - ("User parameter:BaseApp/Preferences/View"); - _invertZoom = hGrp->GetBool("InvertZoom", true); - - // connect other slots - connect(_pGLImageBox, &GLImageBox::drawGraphics, this, &ImageView::drawGraphics); -} - -ImageView::~ImageView() -{ - // No need to delete _pGLImageBox or other widgets as this gets done automatically by QT -} - -// Create the action groups, actions, menus and toolbars -void ImageView::createActions() -{ - // Create actions - _pFitAct = new QAction(this); - _pFitAct->setText(tr("&Fit image")); - _pFitAct->setIcon(QPixmap(image_stretch)); - _pFitAct->setStatusTip(tr("Stretch the image to fit the view")); - connect(_pFitAct, &QAction::triggered, this, &ImageView::fitImage); - - _pOneToOneAct = new QAction(this); - _pOneToOneAct->setText(tr("&1:1 scale")); - _pOneToOneAct->setIcon(QPixmap(image_oneToOne)); - _pOneToOneAct->setStatusTip(tr("Display the image at a 1:1 scale")); - connect(_pOneToOneAct, &QAction::triggered, this, &ImageView::oneToOneImage); - - // Create the menus and add the actions - _pContextMenu = new QMenu(this); - _pContextMenu->addAction(_pFitAct); - _pContextMenu->addAction(_pOneToOneAct); - - // Create the toolbars and add the actions - _pStdToolBar = this->addToolBar(tr("Standard")); - _pStdToolBar->addAction(_pFitAct); - _pStdToolBar->addAction(_pOneToOneAct); -} - -QSize ImageView::minimumSizeHint () const -{ - return QSize(40, 40); -} - -// Enable or disable the status bar -void ImageView::enableStatusBar(bool Enable) -{ - if (Enable) - { - // Create the default status bar for displaying messages and disable the gripper - _statusBarEnabled = true; - statusBar()->setSizeGripEnabled( false ); - statusBar()->showMessage(tr("Ready...")); - } - else - { - // Delete the status bar - _statusBarEnabled = false; - QStatusBar *pStatusBar = statusBar(); - delete pStatusBar; - } -} - -// Enable or disable the toolbar -void ImageView::enableToolBar(bool Enable) -{ - _pStdToolBar->setVisible(Enable); -} - -// Enable or disable the mouse events -void ImageView::enableMouseEvents(bool Enable) -{ - _mouseEventsEnabled = Enable; -} - -// Enable (show) or disable (hide) the '1:1' action -// Current state (zoom, position) is left unchanged -void ImageView::enableOneToOneAction(bool Enable) -{ - _pOneToOneAct->setVisible(Enable); -} - -// Enable (show) or disable (hide) the 'fit image' action -// Current state (zoom, position) is left unchanged -void ImageView::enableFitImageAction(bool Enable) -{ - _pFitAct->setVisible(Enable); -} - -// Slot function to fit (stretch/shrink) the image to the view size -void ImageView::fitImage() -{ - _pGLImageBox->stretchToFit(); -} - - -// Slot function to display the image at a 1:1 scale" -void ImageView::oneToOneImage() -{ - _pGLImageBox->setNormal(); - _pGLImageBox->redraw(); - updateStatusBar(); -} - -// Show the original colors (no enhancement) -// but image will be scaled for the number of significant bits -// (i.e if 12 significant bits (in 16-bit image) a value of 4095 will be shown as white) -void ImageView::showOriginalColors() -{ - _pGLImageBox->clearColorMap(); - _pGLImageBox->redraw(); -} - -// Create a color map -// (All red entries come first, then green, then blue, then alpha) -// returns 0 for OK, -1 for memory allocation error -// numRequestedEntries ... requested number of map entries (used if not greater than system maximum or -// if not greater than the maximum number of intensity values in the current image). -// Pass zero to use the maximum possible. Always check the actual number of entries -// created using getNumColorMapEntries() after a call to this method. -// Initialise ... flag to initialise the map to a linear scale or not -int ImageView::createColorMap(int numEntriesReq, bool Initialise) -{ - return (_pGLImageBox->createColorMap(numEntriesReq, Initialise)); -} - -// Gets the number of entries in the color map (number of entries for each color) -int ImageView::getNumColorMapEntries() const -{ - return (_pGLImageBox->getNumColorMapEntries()); -} - -// Clears the color map -void ImageView::clearColorMap() -{ - _pGLImageBox->clearColorMap(); -} - -// Sets a color map RGBA value -// (All red entries come first, then green, then blue, then alpha) -// index ... index of color map RGBA entry -// red ... intensity value for this red entry (range 0 to 1) -// green ... intensity value for this green entry (range 0 to 1) -// blue ... intensity value for this blue entry (range 0 to 1) -// alpha ... intensity value for this alpha entry (range 0 to 1) -int ImageView::setColorMapRGBAValue(int index, float red, float green, float blue, float alpha) -{ - return (_pGLImageBox->setColorMapRGBAValue(index, red, green, blue, alpha)); -} - -// Sets a color map red value -// (All red entries come first, then green, then blue, then alpha) -// index ... index of color map red entry -// value ... intensity value for this red entry (range 0 to 1) -int ImageView::setColorMapRedValue(int index, float value) -{ - return (_pGLImageBox->setColorMapRedValue(index, value)); -} - -// Sets a color map green value -// (All red entries come first, then green, then blue, then alpha) -// index ... index of color map green entry -// value ... intensity value for this green entry (range 0 to 1) -int ImageView::setColorMapGreenValue(int index, float value) -{ - return (_pGLImageBox->setColorMapGreenValue(index, value)); -} - -// Sets a color map blue value -// (All red entries come first, then green, then blue, then alpha) -// index ... index of color map blue entry -// value ... intensity value for this blue entry (range 0 to 1) -int ImageView::setColorMapBlueValue(int index, float value) -{ - return (_pGLImageBox->setColorMapBlueValue(index, value)); -} - -// Sets a color map alpha value -// (All red entries come first, then green, then blue, then alpha) -// index ... index of color map alpha entry -// value ... intensity value for this alpha entry (range 0 to 1) -int ImageView::setColorMapAlphaValue(int index, float value) -{ - return (_pGLImageBox->setColorMapAlphaValue(index, value)); -} - -// Clears the image data -void ImageView::clearImage() -{ - _pGLImageBox->clearImage(); - _pGLImageBox->redraw(); // clears view - updateStatusBar(); -} - -// Load image by copying the pixel data -// The image object inside this view object will take ownership of the copied pixel data -// (the source image is still controlled by the caller) -// If numSigBitsPerSample = 0 then the full range is assumed to be significant -// displayMode ... controls the initial display of the image, one of: -// IV_DISPLAY_NOCHANGE ... no change to view settings when displaying a new image -// IV_DISPLAY_FITIMAGE ... fit-image when displaying a new image (other settings remain the same) -// IV_DISPLAY_RESET ... reset settings when displaying a new image (image will be displayed at 1:1 scale with no color map) -// Returns: -// 0 for OK -// -1 for invalid color format -// -2 for memory allocation error -int ImageView::createImageCopy(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, int displayMode) -{ - int ret = _pGLImageBox->createImageCopy(pSrcPixelData, width, height, format, numSigBitsPerSample, displayMode); - showOriginalColors(); - updateStatusBar(); - return ret; -} - -// Make the image object inside this view object point to another image source -// If takeOwnership is false then: -// This object will not own (control) or copy the pixel data -// (the source image is still controlled by the caller) -// Else if takeOwnership is true then: -// This object will take ownership (control) of the pixel data -// (the source image is not (should not be) controlled by the caller anymore) -// In this case the memory must have been allocated with the new operator (because this class will use the delete operator) -// If numSigBitsPerSample = 0 then the full range is assumed to be significant -// displayMode ... controls the initial display of the image, one of: -// IV_DISPLAY_NOCHANGE ... no change to view settings when displaying a new image -// IV_DISPLAY_FITIMAGE ... fit-image when displaying a new image (other settings remain the same) -// IV_DISPLAY_RESET ... reset settings when displaying a new image (image will be displayed at 1:1 scale with no color map) -// Returns: -// 0 for OK -// -1 for invalid color format -int ImageView::pointImageTo(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, bool takeOwnership, int displayMode) -{ - int ret = _pGLImageBox->pointImageTo(pSrcPixelData, width, height, format, numSigBitsPerSample, takeOwnership, displayMode); - showOriginalColors(); - updateStatusBar(); - return ret; -} - -// called when user presses X -void ImageView::closeEvent(QCloseEvent *e) -{ - if (_ignoreCloseEvent) - { - // ignore the close event - e->ignore(); - Q_EMIT closeEventIgnored(); // and emit a signal that we ignored it - } - else - { - Gui::MDIView::closeEvent(e); // if called the window will be closed anyway - } -} - -// Mouse press event -void ImageView::mousePressEvent(QMouseEvent* cEvent) -{ - if (_mouseEventsEnabled) - { - // Mouse event coordinates are relative to top-left of image view (including toolbar!) - // Get current cursor position relative to top-left of image box - QPoint offset = _pGLImageBox->pos(); -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - int box_x = cEvent->x() - offset.x(); - int box_y = cEvent->y() - offset.y(); -#else - int box_x = cEvent->position().x() - offset.x(); - int box_y = cEvent->position().y() - offset.y(); -#endif - _currX = box_x; - _currY = box_y; - switch(cEvent->buttons()) - { - case Qt::MiddleButton: - _currMode = panning; - this->setCursor(QCursor(Qt::ClosedHandCursor)); - startDrag(); - break; - //case Qt::LeftButton | Qt::MiddleButton: - // _currMode = zooming; - // break; - case Qt::LeftButton: - if (cEvent->modifiers() & Qt::ShiftModifier) - _currMode = addselection; - else - _currMode = selection; - break; - case Qt::RightButton: -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - _pContextMenu->exec(cEvent->globalPos()); -#else - _pContextMenu->exec(cEvent->globalPosition().toPoint()); -#endif - break; - default: - _currMode = nothing; - } - } -} - -void ImageView::mouseDoubleClickEvent(QMouseEvent* cEvent) -{ - if (_mouseEventsEnabled) - { - // Mouse event coordinates are relative to top-left of image view (including toolbar!) - // Get current cursor position relative to top-left of image box - QPoint offset = _pGLImageBox->pos(); -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - int box_x = cEvent->x() - offset.x(); - int box_y = cEvent->y() - offset.y(); -#else - int box_x = cEvent->position().x() - offset.x(); - int box_y = cEvent->position().y() - offset.y(); -#endif - _currX = box_x; - _currY = box_y; - if(cEvent->button() == Qt::MiddleButton) - { - double icX = _pGLImageBox->WCToIC_X(_currX); - double icY = _pGLImageBox->WCToIC_Y(_currY); - //int pixX = (int)floor(icX + 0.5); - //int pixY = (int)floor(icY + 0.5); - _pGLImageBox->setZoomFactor(_pGLImageBox->getZoomFactor(), true, (int)floor(icX + 0.5), (int)floor(icY + 0.5)); - _pGLImageBox->redraw(); - updateStatusBar(); - } - } -} - -// Mouse move event -void ImageView::mouseMoveEvent(QMouseEvent* cEvent) -{ -#if QT_VERSION < 0x050900 - QApplication::flush(); -#endif - - // Mouse event coordinates are relative to top-left of image view (including toolbar!) - // Get current cursor position relative to top-left of image box - QPoint offset = _pGLImageBox->pos(); -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - int box_x = cEvent->x() - offset.x(); - int box_y = cEvent->y() - offset.y(); -#else - int box_x = cEvent->position().x() - offset.x(); - int box_y = cEvent->position().y() - offset.y(); -#endif - if (_mouseEventsEnabled) - { - switch(_currMode) - { - case nothing: - break; - case panning: - _pGLImageBox->relMoveWC(box_x - dragStartWCx, box_y - dragStartWCy); - break; - case zooming: - zoom(_currX, _currY, box_x, box_y); - break; - default: - break; - } - } - _currX = box_x; - _currY = box_y; - - // Update the status bar - updateStatusBar(); -} - -// Mouse release event -void ImageView::mouseReleaseEvent(QMouseEvent* cEvent) -{ - if (_mouseEventsEnabled) - { - // Mouse event coordinates are relative to top-left of image view (including toolbar!) - // Get current cursor position relative to top-left of image box - QPoint offset = _pGLImageBox->pos(); -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - int box_x = cEvent->x() - offset.x(); - int box_y = cEvent->y() - offset.y(); -#else - int box_x = cEvent->position().x() - offset.x(); - int box_y = cEvent->position().y() - offset.y(); -#endif - switch(_currMode) - { - case selection: - select(box_x, box_y); - break; - case addselection: - addSelect(box_x, box_y); - break; - case panning: - this->unsetCursor(); - break; - default: - break; - } - _currMode = nothing; - } -} - -// Mouse wheel event -void ImageView::wheelEvent(QWheelEvent * cEvent) -{ - if (_mouseEventsEnabled) - { - // Mouse event coordinates are relative to top-left of image view (including toolbar!) - // Get current cursor position relative to top-left of image box - QPoint offset = _pGLImageBox->pos(); -#if QT_VERSION >= QT_VERSION_CHECK(5,15,0) - QPoint pos = cEvent->position().toPoint(); - int box_x = pos.x() - offset.x(); - int box_y = pos.y() - offset.y(); -#else - int box_x = cEvent->x() - offset.x(); - int box_y = cEvent->y() - offset.y(); -#endif - - // Zoom around centrally displayed image point - int numTicks = cEvent->angleDelta().y() / 120; - if (_invertZoom) - numTicks = -numTicks; - - int ICx, ICy; - _pGLImageBox->getCentrePoint(ICx, ICy); - _pGLImageBox->setZoomFactor(_pGLImageBox->getZoomFactor() / pow(2.0, (double)numTicks), true, ICx, ICy); - _pGLImageBox->redraw(); - _currX = box_x; - _currY = box_y; - - // Update the status bar - updateStatusBar(); - } -} - -void ImageView::showEvent (QShowEvent *) -{ - _pGLImageBox->setFocus(); -} - -// Update the status bar with the image parameters for the current mouse position -void ImageView::updateStatusBar() -{ - if (_statusBarEnabled) - { - // Create the text string to display in the status bar - QString txt = createStatusBarText(); - - // Update status bar with new text - statusBar()->showMessage(txt); - } -} - -// Create the text to display in the status bar. -// Gets called by updateStatusBar() -// Override this function in a derived class to add your own text -QString ImageView::createStatusBarText() -{ - // Get some image parameters - //unsigned short numImageSamples = _pGLImageBox->getImageNumSamplesPerPix(); - double zoomFactor = _pGLImageBox->getZoomFactor(); - double icX = _pGLImageBox->WCToIC_X(_currX); - double icY = _pGLImageBox->WCToIC_Y(_currY); - int pixX = (int)floor(icX + 0.5); - int pixY = (int)floor(icY + 0.5); - int colorFormat = _pGLImageBox->getImageFormat(); - - // Create text for status bar - QString txt; - if ((colorFormat == IB_CF_GREY8) || - (colorFormat == IB_CF_GREY16) || - (colorFormat == IB_CF_GREY32)) - { - double grey_value; - if (_pGLImageBox->getImageSample(pixX, pixY, 0, grey_value) == 0) - txt = QString::fromLatin1("x,y = %1,%2 | %3 = %4 | %5 = %6") - .arg(icX,0,'f',2).arg(icY,0,'f',2) - .arg(tr("grey")).arg((int)grey_value) - .arg(tr("zoom")).arg(zoomFactor,0,'f',1); - else - txt = QString::fromLatin1("x,y = %1 | %2 = %3") - .arg(tr("outside image"), tr("zoom")).arg(zoomFactor,0,'f',1); - } - else if ((colorFormat == IB_CF_RGB24) || - (colorFormat == IB_CF_RGB48)) - { - double red, green, blue; - if ((_pGLImageBox->getImageSample(pixX, pixY, 0, red) != 0) || - (_pGLImageBox->getImageSample(pixX, pixY, 1, green) != 0) || - (_pGLImageBox->getImageSample(pixX, pixY, 2, blue) != 0)) - txt = QString::fromLatin1("x,y = %1 | %2 = %3") - .arg(tr("outside image"), tr("zoom")).arg(zoomFactor,0,'f',1); - else - txt = QString::fromLatin1("x,y = %1,%2 | rgb = %3,%4,%5 | %6 = %7") - .arg(icX,0,'f',2).arg(icY,0,'f',2) - .arg((int)red).arg((int)green).arg((int)blue) - .arg(tr("zoom")).arg(zoomFactor,0,'f',1); - } - else if ((colorFormat == IB_CF_BGR24) || - (colorFormat == IB_CF_BGR48)) - { - double red, green, blue; - if ((_pGLImageBox->getImageSample(pixX, pixY, 0, blue) != 0) || - (_pGLImageBox->getImageSample(pixX, pixY, 1, green) != 0) || - (_pGLImageBox->getImageSample(pixX, pixY, 2, red) != 0)) - txt = QString::fromLatin1("x,y = %1 | %2 = %3") - .arg(tr("outside image"), tr("zoom")).arg(zoomFactor,0,'f',1); - else - txt = QString::fromLatin1("x,y = %1,%2 | rgb = %3,%4,%5 | %6 = %7") - .arg(icX,0,'f',2).arg(icY,0,'f',2) - .arg((int)red).arg((int)green).arg((int)blue) - .arg(tr("zoom")).arg(zoomFactor,0,'f',1); - } - else if ((colorFormat == IB_CF_RGBA32) || - (colorFormat == IB_CF_RGBA64)) - { - double red, green, blue, alpha; - if ((_pGLImageBox->getImageSample(pixX, pixY, 0, red) != 0) || - (_pGLImageBox->getImageSample(pixX, pixY, 1, green) != 0) || - (_pGLImageBox->getImageSample(pixX, pixY, 2, blue) != 0) || - (_pGLImageBox->getImageSample(pixX, pixY, 3, alpha) != 0)) - txt = QString::fromLatin1("x,y = %1 | %2 = %3") - .arg(tr("outside image"), tr("zoom")).arg(zoomFactor,0,'f',1); - else - txt = QString::fromLatin1("x,y = %1,%2 | rgba = %3,%4,%5,%6 | %7 = %8") - .arg(icX,0,'f',2).arg(icY,0,'f',2) - .arg((int)red).arg((int)green).arg((int)blue).arg((int)alpha) - .arg(tr("zoom")).arg(zoomFactor,0,'f',1); - } - else if ((colorFormat == IB_CF_BGRA32) || - (colorFormat == IB_CF_BGRA64)) - { - double red, green, blue, alpha; - if ((_pGLImageBox->getImageSample(pixX, pixY, 0, blue) != 0) || - (_pGLImageBox->getImageSample(pixX, pixY, 1, green) != 0) || - (_pGLImageBox->getImageSample(pixX, pixY, 2, red) != 0) || - (_pGLImageBox->getImageSample(pixX, pixY, 3, alpha) != 0)) - txt = QString::fromLatin1("x,y = %1 | %2 = %3") - .arg(tr("outside image"), tr("zoom")).arg(zoomFactor,0,'f',1); - else - txt = QString::fromLatin1("x,y = %1,%2 | rgba = %3,%4,%5,%6 | %7 = %8") - .arg(icX,0,'f',2).arg(icY,0,'f',2) - .arg((int)red).arg((int)green).arg((int)blue).arg((int)alpha) - .arg(tr("zoom")).arg(zoomFactor,0,'f',1); - } - - return txt; -} - -// Starts a mouse drag in the image - stores some initial positions -void ImageView::startDrag() -{ - _pGLImageBox->fixBasePosCurr(); // fixes current image position as base position - dragStartWCx = _currX; - dragStartWCy = _currY; -} - -// Zoom the image using vertical mouse movement to define a zoom factor -void ImageView::zoom(int prevX, int prevY, int currX, int currY) -{ - // Check we have more of a vertical shift than a hz one - int dx = currX - prevX; - int dy = currY - prevY; - if (abs(dy) > abs(dx)) - { - // Get centrally displayed image point - int ICx, ICy; - _pGLImageBox->getCentrePoint(ICx, ICy); - - // Compute zoom factor multiplier - double zoomFactorMultiplier = 1.05; - if (currY > prevY) - zoomFactorMultiplier = 0.95; - - // Zoom around centrally displayed image point - _pGLImageBox->setZoomFactor(_pGLImageBox->getZoomFactor() * zoomFactorMultiplier, true, ICx, ICy); - _pGLImageBox->redraw(); - } -} - -// Select at the given position -void ImageView::select(int currX, int currY) -{ - // base class implementation does nothing - // override this method and implement selection capability if required - Q_UNUSED(currX); - Q_UNUSED(currY); -} - -// Add selection at the given position -void ImageView::addSelect(int currX, int currY) -{ - // base class implementation does nothing - // override this method and implement selection capability if required - Q_UNUSED(currX); - Q_UNUSED(currY); -} - -// Draw any 2D graphics necessary -// Use GLImageBox::ICToWC_X and ICToWC_Y methods to transform image coordinates into widget coordinates (which -// must be used by the OpenGL vertex commands). -void ImageView::drawGraphics() -{ - // base class implementation does nothing - - // override this method and implement OpenGL drawing commands to draw any needed graphics on top of the image - - /* Example: draw a red line from image coordinates (100,100) to (120,120) - glColor3ub((GLubyte)255, (GLubyte)0, (GLubyte)0); - glBegin(GL_LINES); - glVertex2d(_pGLImageBox->ICToWC_X(100.0), _pGLImageBox->ICToWC_Y(100.0)); - glVertex2d(_pGLImageBox->ICToWC_X(120.0), _pGLImageBox->ICToWC_Y(120.0)); - glEnd(); - */ -} - -#include "moc_ImageView.cpp" - - diff --git a/src/Mod/Image/Gui/ImageView.h b/src/Mod/Image/Gui/ImageView.h deleted file mode 100644 index e249f8e482..0000000000 --- a/src/Mod/Image/Gui/ImageView.h +++ /dev/null @@ -1,139 +0,0 @@ -/*************************************************************************** - * * - * This is a view displaying an image or portion of an image in a box. * - * * - * Author: Graeme van der Vlugt * - * Copyright: Imetric 3D GmbH * - * Year: 2004 * - * * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * for detail see the LICENCE text file. * - * * - ***************************************************************************/ - -#ifndef ImageView_H -#define ImageView_H - -#include -#include -#include - -#include "OpenGLImageBox.h" - - -class QSlider; -class QAction; -class QActionGroup; -class QPopupMenu; -class QToolBar; - -namespace ImageGui -{ - -class GLImageBox; - -class ImageGuiExport ImageView : public Gui::MDIView -{ - Q_OBJECT - - TYPESYSTEM_HEADER(); - -public: - ImageView(QWidget* parent); - virtual ~ImageView(); - - const char *getName(void) const {return "ImageView";} - void onUpdate(void){} - - bool onMsg(const char* ,const char** ){ return true; } - bool onHasMsg(const char* ) const { return false; } - - virtual void clearImage(); - virtual int createImageCopy(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, int displayMode = IV_DISPLAY_RESET); - virtual int pointImageTo(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, bool takeOwnership, int displayMode = IV_DISPLAY_RESET); - - virtual void enableStatusBar(bool Enable); - virtual void enableToolBar(bool Enable); - virtual void enableMouseEvents(bool Enable); - virtual void enableOneToOneAction(bool Enable); - virtual void enableFitImageAction(bool Enable); - virtual void ignoreCloseEvent(bool ignoreCloseEvent) { _ignoreCloseEvent = ignoreCloseEvent; } - virtual int createColorMap(int numEntriesReq = 0, bool Initialise = true); - virtual void clearColorMap(); - virtual int getNumColorMapEntries() const; - virtual int setColorMapRGBAValue(int index, float red, float green, float blue, float alpha = 1.0); - virtual int setColorMapRedValue(int index, float value); - virtual int setColorMapGreenValue(int index, float value); - virtual int setColorMapBlueValue(int index, float value); - virtual int setColorMapAlphaValue(int index, float value); - -public Q_SLOTS: - virtual void fitImage(); - virtual void oneToOneImage(); - -protected Q_SLOTS: - virtual void drawGraphics(); - -Q_SIGNALS: - void closeEventIgnored(); - -protected: - virtual void createActions(); - virtual QSize minimumSizeHint () const; - virtual void showOriginalColors(); - virtual void closeEvent(QCloseEvent *e); - virtual void mousePressEvent(QMouseEvent* cEvent); - virtual void mouseDoubleClickEvent(QMouseEvent* cEvent); - virtual void mouseMoveEvent(QMouseEvent* cEvent); - virtual void mouseReleaseEvent(QMouseEvent* cEvent); - virtual void wheelEvent(QWheelEvent * cEvent); - virtual void showEvent (QShowEvent * e); - - virtual void updateStatusBar(); - virtual QString createStatusBarText(); - - virtual void startDrag(); - virtual void zoom(int prevX, int prevY, int currX, int currY); - virtual void select(int currX, int currY); - virtual void addSelect(int currX, int currY); - - - enum { - nothing = 0, - panning, - zooming, - selection, - addselection - } _currMode; - - GLImageBox* _pGLImageBox; - - int _currX; - int _currY; - int dragStartWCx; - int dragStartWCy; - - // Actions - QAction* _pFitAct; - QAction* _pOneToOneAct; - - // Menus - QMenu* _pContextMenu; - - // Toolbars - QToolBar* _pStdToolBar; - - // Flags - bool _statusBarEnabled; - bool _mouseEventsEnabled; - bool _ignoreCloseEvent; - bool _invertZoom; -}; - -} // namespace ImageViewGui - -#endif // ImageView_H diff --git a/src/Mod/Image/Gui/OpenGLImageBox.cpp b/src/Mod/Image/Gui/OpenGLImageBox.cpp deleted file mode 100644 index 4649e2a3ab..0000000000 --- a/src/Mod/Image/Gui/OpenGLImageBox.cpp +++ /dev/null @@ -1,926 +0,0 @@ -/*************************************************************************** - * * - * This is a QGLWidget displaying an image or portion of an image in a * - * box. * - * * - * Author: Graeme van der Vlugt * - * Copyright: Imetric 3D GmbH * - * Year: 2004 * - * * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * for detail see the LICENCE text file. * - * * - ***************************************************************************/ - -#include "PreCompiled.h" -#ifndef _PreComp_ -# include - -# include -# include -# include -# include -# include -# include -# include -# include -#endif - -#if defined(__MINGW32__) -# include -# include -# include -#elif defined (FC_OS_MACOSX) -# include -# include -# include -#elif defined (FC_OS_WIN32) -# include -# include -# include -# if defined(_MSC_VER) && _MSC_VER >= 1910 -# include -# endif -#else -# include -# include -# include -#endif - -#include "OpenGLImageBox.h" - -using namespace ImageGui; - -#if defined(Q_CC_MSVC) -#pragma warning(disable:4305) // init: truncation from const double to float -#endif - -bool GLImageBox::haveMesa = false; - -/* -Notes: -+ Using QGLWidget with Qt5 still works fine -+ But QGLWidget is marked as deprecated and should be replaced with QOpenGLWidget -+ When opening one or more image views (based on QOpenGLWidget) everything works fine - but as soon as a 3d view based on QGLWidget is opened the content becomes black and - from then on will never render normally again. -+ This problem is caused by QuarterWidget::paintEvent!!! -+ https://groups.google.com/forum/?_escaped_fragment_=topic/coin3d-discuss/2SVG6ZxOWy4#!topic/coin3d-discuss/2SVG6ZxOWy4 - -+ Using a QSurfaceFormat to switch on double buffering doesn't seem to have any effect - QSurfaceFormat format; - format.setSwapBehavior(QSurfaceFormat::DoubleBuffer); - setFormat(format); -+ Directly swapping in paintGL doesn't work either - QOpenGLContext::currentContext()->swapBuffers(QOpenGLContext::currentContext()->surface()); -+ Check for OpenGL errors with: GLenum err = glGetError(); // GL_NO_ERROR -+ http://retokoradi.com/2014/04/21/opengl-why-is-your-code-producing-a-black-window/ -+ http://forum.openscenegraph.org/viewtopic.php?t=15177 -+ implement GLImageBox::renderText -+ See http://doc.qt.io/qt-5/qtquick-scenegraph-openglunderqml-example.html -*/ - -/* TRANSLATOR ImageGui::GLImageBox */ - -// Constructor -GLImageBox::GLImageBox(QWidget * parent, Qt::WindowFlags f) - : QOpenGLWidget(parent, f) -{ - // uses default display format for the OpenGL rendering context - // (double buffering is enabled) - - // enable mouse tracking when moving even if no buttons are pressed - setMouseTracking(true); - - // initialise variables - _x0 = 0; - _y0 = 0; - _zoomFactor = 1.0; - _base_x0 = 0; - _base_y0 = 0; - _pColorMap = nullptr; - _numMapEntries = 0; - -#if defined(_DEBUG) && 0 - QSurfaceFormat format; - format.setOption(QSurfaceFormat::DebugContext); - this->setFormat(format); -#endif -} - - -// Destructor -GLImageBox::~GLImageBox() -{ - delete [] _pColorMap; -} - -void GLImageBox::handleLoggedMessage(const QOpenGLDebugMessage &message) -{ - qDebug() << message; -} - -// Set up the OpenGL rendering state -void GLImageBox::initializeGL() -{ - QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions(); - //QColor c(Qt::black); - QPalette p = this->palette(); - QColor c(p.color(this->backgroundRole())); // Let OpenGL clear to black - f->glClearColor(c.redF(), c.greenF(), c.blueF(), c.alphaF()); // Let OpenGL clear to black - static bool init = false; - if (!init) { - init = true; - std::string ver = (const char*)(glGetString(GL_VERSION)); - haveMesa = (ver.find("Mesa") != std::string::npos); - } - -#if defined(_DEBUG) && 0 - QOpenGLContext *context = QOpenGLContext::currentContext(); - if (context->hasExtension(QByteArrayLiteral("GL_KHR_debug"))) { - QOpenGLDebugLogger *logger = new QOpenGLDebugLogger(this); - connect(logger, &QOpenGLDebugLogger::messageLogged, this, &GLImageBox::handleLoggedMessage); - - if (logger->initialize()) - logger->startLogging(QOpenGLDebugLogger::SynchronousLogging); - } -#endif -} - - -// Update the viewport -void GLImageBox::resizeGL( int w, int h ) -{ - glViewport( 0, 0, (GLint)w, (GLint)h ); - glMatrixMode( GL_PROJECTION ); - glLoadIdentity(); -#if defined (FC_OS_MACOSX) - GLKMatrix4 orthoMat = GLKMatrix4MakeOrtho(0, width() - 1, height() - 1, 0, -1, 1); - glLoadMatrixf(orthoMat.m); -#else - gluOrtho2D(0, width() - 1, height() - 1, 0); -#endif - glMatrixMode(GL_MODELVIEW); -} - -// Redraw (current image) -void GLImageBox::redraw() -{ - update(); -} - - -// Paint the box -void GLImageBox::paintGL() -{ - glPushAttrib(GL_COLOR_BUFFER_BIT | GL_DEPTH_TEST); - - // clear background (in back buffer) - //glDrawBuffer(GL_BACK); // this is an invalid call! - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_DEPTH_TEST); - - // Draw the image - drawImage(); - - // Emit a signal for owners to draw any graphics that is needed. - if (_image.hasValidData()) - Q_EMIT drawGraphics(); - - // flush the OpenGL graphical pipeline - glFinish(); - glPopAttrib(); - - // Double buffering is used so we need to swap the buffers - // There is no need to explicitly call this function because it is - // done automatically after each widget repaint, i.e. each time after paintGL() has been executed - // swapBuffers(); -} - -// Draw the image -void GLImageBox::drawImage() -{ - if (!_image.hasValidData()) - return; - - // Gets the size of the displayed image area using the current display settings - // (in units of image pixels) - int dx, dy; - getDisplayedImageAreaSize(dx, dy); - - // Draw the visible image region with the correct position and zoom - if ((dx > 0) && (dy > 0)) - { - // Get top left image pixel to display - int tlx = std::max(0, _x0); - int tly = std::max(0, _y0); - - // Get pointer to first pixel in source image rectangle - unsigned char* pPix = (unsigned char *)(_image.getPixelDataPtr()); - pPix += (unsigned long)(_image.getNumBytesPerPixel()) * (tly * _image.getWidth() + tlx); - - // Draw in the back buffer, using the following parameters - //glDrawBuffer(GL_BACK); // this is an invalid call! - glPixelStorei(GL_UNPACK_ROW_LENGTH, _image.getWidth()); // defines number of pixels in a row - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // defines byte alignment of rows - glPixelZoom(_zoomFactor, -_zoomFactor); // defines the zoom factors to draw at - - // set current raster position to coincide with top left image pixel to display - // the first pixel is always displayed in full when zoomed in - // round to nearest widget pixel that coincides with top left corner of top left image pixel to display - int xx = (int)floor(ICToWC_X(tlx - 0.5) + 0.5); - int yy = (int)floor(ICToWC_Y(tly - 0.5) + 0.5); - glRasterPos2f(xx, yy); - - // Compute scale to stretch number of significant bits to full range - // e.g. stretch 12 significant bits to 16-bit range: 0-4095 -> 0-65535, therefore scale = 65535/4095 - double scale = (pow(2.0, _image.getNumBitsPerSample()) - 1.0) / (pow(2.0, _image.getNumSigBitsPerSample()) - 1.0); - glPixelTransferf(GL_RED_SCALE, (float)scale); - glPixelTransferf(GL_GREEN_SCALE, (float)scale); - glPixelTransferf(GL_BLUE_SCALE, (float)scale); - - // Load the color map if present - if (_pColorMap) - { - if (!haveMesa) glPixelTransferf(GL_MAP_COLOR, 1.0); - glPixelMapfv(GL_PIXEL_MAP_R_TO_R, _numMapEntries, _pColorMap); - glPixelMapfv(GL_PIXEL_MAP_G_TO_G, _numMapEntries, _pColorMap + _numMapEntries); - glPixelMapfv(GL_PIXEL_MAP_B_TO_B, _numMapEntries, _pColorMap + _numMapEntries * 2); - glPixelMapfv(GL_PIXEL_MAP_A_TO_A, _numMapEntries, _pColorMap + _numMapEntries * 3); - } - else - { - glPixelTransferf(GL_MAP_COLOR, 0.0); - glPixelMapfv(GL_PIXEL_MAP_R_TO_R, 0, nullptr); - glPixelMapfv(GL_PIXEL_MAP_G_TO_G, 0, nullptr); - glPixelMapfv(GL_PIXEL_MAP_B_TO_B, 0, nullptr); - glPixelMapfv(GL_PIXEL_MAP_A_TO_A, 0, nullptr); - } - - // Get the pixel format - GLenum pixFormat; - GLenum pixType; - getPixFormat(pixFormat, pixType); - - // Draw the defined source rectangle - glDrawPixels(dx, dy, pixFormat, pixType, (GLvoid *)pPix); - glFlush(); - } -} - -// Gets the size of the displayed image area using the current display settings -// (in units of image pixels) -void GLImageBox::getDisplayedImageAreaSize(int &dx, int &dy) -{ - if (!_image.hasValidData()) - { - dx = 0; - dy = 0; - } - else - { - // Make sure drawing position and zoom factor are valid - limitCurrPos(); - limitZoomFactor(); - - // Image coordinates of top left widget pixel = (_x0, _y0) - // Get image coordinates of bottom right widget pixel - int brx = (int)ceil(WCToIC_X(width() - 1)); - int bry = (int)ceil(WCToIC_Y(height() - 1)); - - // Find the outer coordinates of the displayed image area - int itlx = std::max(_x0, 0); - int itly = std::max(_y0, 0); - int ibrx = std::min(brx, (int)(_image.getWidth()) - 1); - int ibry = std::min(bry, (int)(_image.getHeight()) - 1); - if ((itlx >= (int)(_image.getWidth())) || - (itly >= (int)(_image.getHeight())) || - (ibrx < 0) || - (ibry < 0)) - { - dx = 0; - dy = 0; - } - else { - dx = ibrx - itlx + 1; - dy = ibry - itly + 1; - } - } -} - -// Gets the value of an image sample at the given image pixel position -// Returns 0 for valid value or -1 if coordinates or sample index are out of range or -// if there is no image data -int GLImageBox::getImageSample(int x, int y, unsigned short sampleIndex, double &value) -{ - return (_image.getSample(x, y, sampleIndex, value)); -} - -// Gets the number of samples per pixel for the image -unsigned short GLImageBox::getImageNumSamplesPerPix() -{ - return (_image.getNumSamples()); -} - -// Gets the format (color space format) of the image -int GLImageBox::getImageFormat() -{ - return (_image.getFormat()); -} - - -// Get the OpenGL pixel format and pixel type from the image properties -void GLImageBox::getPixFormat(GLenum &pixFormat, GLenum &pixType) -{ - switch(_image.getFormat()) - { - case IB_CF_GREY8: - pixFormat = GL_LUMINANCE; - pixType = GL_UNSIGNED_BYTE; - break; - case IB_CF_GREY16: - pixFormat = GL_LUMINANCE; - pixType = GL_UNSIGNED_SHORT; - break; - case IB_CF_GREY32: - pixFormat = GL_LUMINANCE; - pixType = GL_UNSIGNED_INT; - break; - case IB_CF_RGB24: - pixFormat = GL_RGB; - pixType = GL_UNSIGNED_BYTE; - break; -#ifndef FC_OS_CYGWIN - case IB_CF_BGR24: - pixFormat = GL_BGR_EXT; - pixType = GL_UNSIGNED_BYTE; - break; - case IB_CF_RGB48: - pixFormat = GL_RGB; - pixType = GL_UNSIGNED_SHORT; - break; - case IB_CF_BGR48: - pixFormat = GL_BGR_EXT; - pixType = GL_UNSIGNED_SHORT; - break; -#endif - case IB_CF_RGBA32: - pixFormat = GL_RGBA; - pixType = GL_UNSIGNED_BYTE; - break; - case IB_CF_RGBA64: - pixFormat = GL_RGBA; - pixType = GL_UNSIGNED_SHORT; - break; -#ifndef FC_OS_CYGWIN - case IB_CF_BGRA32: - pixFormat = GL_BGRA_EXT; - pixType = GL_UNSIGNED_BYTE; - break; - case IB_CF_BGRA64: - pixFormat = GL_BGRA_EXT; - pixType = GL_UNSIGNED_SHORT; - break; -#endif - default: - // Should never happen - pixFormat = GL_LUMINANCE; - pixType = GL_UNSIGNED_BYTE; - QMessageBox::warning((QWidget *)this, tr("Image pixel format"), - tr("Undefined type of colour space for image viewing")); - return; - } -} - -// Limits the current position (centre of top left image pixel) -// Currently we don't limit it! -void GLImageBox::limitCurrPos() -{ - if (!_image.hasValidData()) - return; - - /* - if (_x0 < 0) - _x0 = 0; - else if (_x0 >= (int)(_image.getWidth())) - _x0 = _image.getWidth() - 1; - if (_y0 < 0) - _y0 = 0; - else if (_y0 >= (int)(_image.getHeight())) - _y0 = _image.getHeight() - 1; - */ -} - -// Limits the current zoom factor from 1:64 to 64:1 -void GLImageBox::limitZoomFactor() -{ - if (_zoomFactor > 64.0) - _zoomFactor = 64.0; - else if (_zoomFactor < (1.0 / 64.0)) - _zoomFactor = 1.0 / 64.0; -} - -// Set the current position (centre of top left image pixel coordinates) -// This function does not redraw (call redraw afterwards) -void GLImageBox::setCurrPos(int x0, int y0) -{ - _x0 = x0; - _y0 = y0; - limitCurrPos(); -} - -// Fixes a base position at the current position -void GLImageBox::fixBasePosCurr() -{ - if (!_image.hasValidData()) - { - _base_x0 = 0; - _base_y0 = 0; - } - else - { - _base_x0 = _x0; - _base_y0 = _y0; - } -} - -// Set the current zoom factor -// Option to centre the zoom at a given image point or not -// This function does not redraw (call redraw afterwards) -void GLImageBox::setZoomFactor(double zoomFactor, bool useCentrePt, int ICx, int ICy) -{ - if (!useCentrePt || !_image.hasValidData()) - { - _zoomFactor = zoomFactor; - limitZoomFactor(); - } - else - { - // Set new zoom factor - _zoomFactor = zoomFactor; - limitZoomFactor(); - - // get centre position of widget in image coordinates - int ix, iy; - getCentrePoint(ix, iy); - - // try to shift the current position so that defined centre point is in the middle of the widget - // (this can be modified by the limitCurrPos function) - setCurrPos(_x0 - ix + ICx, _y0 - iy + ICy); - } -} - -// Stretch or shrink the image to fit the view (although the zoom factor is limited so a -// very small or very big image may not fit completely (depending on the size of the view) -// This function redraws -void GLImageBox::stretchToFit() -{ - if (!_image.hasValidData()) - return; - - setToFit(); - update(); -} - -// Sets the settings needed to fit the image into the view (although the zoom factor is limited so a -// very small or very big image may not fit completely (depending on the size of the view) -// This function does not redraw (call redraw afterwards) -void GLImageBox::setToFit() -{ - if (!_image.hasValidData()) - return; - - // Compute ideal zoom factor to fit the image - double zoomX = (double)width() / (double)(_image.getWidth()); - double zoomY = (double)height() / (double)(_image.getHeight()); - if (zoomX > zoomY) - _zoomFactor = zoomY; - else - _zoomFactor = zoomX; - limitZoomFactor(); - - // set current position to top left image pixel - setCurrPos(0, 0); -} - -// Sets the normal viewing position and zoom = 1 -// If the image is smaller than the widget then the image is centred -// otherwise we view the top left part of the image -// This function does not redraw (call redraw afterwards) -void GLImageBox::setNormal() -{ - if (!_image.hasValidData()) - return; - - if (((int)(_image.getWidth()) < width()) && ((int)(_image.getHeight()) < height())) - { - setZoomFactor(1.0, true, _image.getWidth() / 2, _image.getHeight() / 2); - } - else - { - _zoomFactor = 1; - setCurrPos(0, 0); - } -} - -// Gets the image coordinates of the centre point of the widget -void GLImageBox::getCentrePoint(int &ICx, int &ICy) -{ - ICx = (int)floor(WCToIC_X((double)(width() - 1) / 2.0) + 0.5); - ICy = (int)floor(WCToIC_Y((double)(height() - 1) / 2.0) + 0.5); -} - -// Moves the image by a relative amount (in widget pixel units) from the base position -// First use fixBasePosCurr() to fix the base position at a position -void GLImageBox::relMoveWC(int WCdx, int WCdy) -{ - double ICdx = WCdx / _zoomFactor; - double ICdy = WCdy / _zoomFactor; - setCurrPos(_base_x0 - (int)floor(ICdx + 0.5), _base_y0 - (int)floor(ICdy + 0.5)); - update(); -} - -// Computes an image x-coordinate from the widget x-coordinate -// Note: (_x0,_y0) is the centre of the image pixel displayed at the top left of the widget -// therefore (_x0 - 0.5, _y0 - 0.5) is the top left coordinate of this pixel which will -// theoretically coincide with widget coordinate (-0.5,-0.5) -// Zoom = 4: Widget(0,0) = Image(_x0 - 0.375,_y0 - 0.375) -// Zoom = 2: Widget(0,0) = Image(_x0 - 0.250,_y0 - 0.250) -// Zoom = 1: Widget(0,0) = Image(_x0,_y0) -// Zoom = 0.5: Widget(0,0) = Image(_x0 + 0.500,_y0 + 0.500) -// Zoom = 0.25: Widget(0,0) = Image(_x0 + 1.500,_y0 + 1.500) -double GLImageBox::WCToIC_X(double WidgetX) -{ - return ((double)_x0 - 0.5 + (WidgetX + 0.5) / _zoomFactor); -} - -// Computes an image y-coordinate from the widget y-coordinate -// Note: (_x0,_y0) is the centre of the image pixel displayed at the top left of the widget -// therefore (_x0 - 0.5, _y0 - 0.5) is the top left coordinate of this pixel which will -// theoretically coincide with widget coordinate (-0.5,-0.5) -// Zoom = 4: Widget(0,0) = Image(_x0 - 0.375,_y0 - 0.375) -// Zoom = 2: Widget(0,0) = Image(_x0 - 0.250,_y0 - 0.250) -// Zoom = 1: Widget(0,0) = Image(_x0,_y0) -// Zoom = 0.5: Widget(0,0) = Image(_x0 + 0.500,_y0 + 0.500) -// Zoom = 0.25: Widget(0,0) = Image(_x0 + 1.500,_y0 + 1.500) -double GLImageBox::WCToIC_Y(double WidgetY) -{ - return ((double)_y0 - 0.5 + (WidgetY + 0.5) / _zoomFactor); -} - -// Computes a widget x-coordinate from an image x-coordinate -// Note: (_x0,_y0) is the centre of the image pixel displayed at the top left of the widget -// therefore (_x0 - 0.5, _y0 - 0.5) is the top left coordinate of this pixel which will -// theoretically coincide with widget coordinate (-0.5,-0.5) -// Zoom = 4: Widget(0,0) = Image(_x0 - 0.375,_y0 - 0.375) -// Zoom = 2: Widget(0,0) = Image(_x0 - 0.250,_y0 - 0.250) -// Zoom = 1: Widget(0,0) = Image(_x0,_y0) -// Zoom = 0.5: Widget(0,0) = Image(_x0 + 0.500,_y0 + 0.500) -// Zoom = 0.25: Widget(0,0) = Image(_x0 + 1.500,_y0 + 1.500) -double GLImageBox::ICToWC_X(double ImageX) -{ - return ((ImageX - (double)_x0 + 0.5) * _zoomFactor - 0.5); -} - -// Computes a widget y-coordinate from an image y-coordinate -// Note: (_x0,_y0) is the centre of the image pixel displayed at the top left of the widget -// therefore (_x0 - 0.5, _y0 - 0.5) is the top left coordinate of this pixel which will -// theoretically coincide with widget coordinate (-0.5,-0.5) -// Zoom = 4: Widget(0,0) = Image(_x0 - 0.375,_y0 - 0.375) -// Zoom = 2: Widget(0,0) = Image(_x0 - 0.250,_y0 - 0.250) -// Zoom = 1: Widget(0,0) = Image(_x0,_y0) -// Zoom = 0.5: Widget(0,0) = Image(_x0 + 0.500,_y0 + 0.500) -// Zoom = 0.25: Widget(0,0) = Image(_x0 + 1.500,_y0 + 1.500) -double GLImageBox::ICToWC_Y(double ImageY) -{ - return ((ImageY - (double)_y0 + 0.5) * _zoomFactor - 0.5); -} - - -// Clears the image data -void GLImageBox::clearImage() -{ - _image.clear(); - resetDisplay(); -} - -// Load image by copying the pixel data -// The image object will take ownership of the copied pixel data -// (the source image is still controlled by the caller) -// If numSigBitsPerSample = 0 then the full range is assumed to be significant -// displayMode ... controls the initial display of the image, one of: -// IV_DISPLAY_NOCHANGE ... no change to view settings when displaying a new image -// IV_DISPLAY_FITIMAGE ... fit-image when displaying a new image (other settings remain the same) -// IV_DISPLAY_RESET ... reset settings when displaying a new image (image will be displayed at 1:1 scale with no color map) -// This function does not redraw (call redraw afterwards) -// Returns: -// 0 for OK -// -1 for invalid color format -// -2 for memory allocation error -int GLImageBox::createImageCopy(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, int displayMode) -{ - // Copy image - int ret = _image.createCopy(pSrcPixelData, width, height, format, numSigBitsPerSample); - - // Set display settings depending on mode - if (displayMode == IV_DISPLAY_RESET) - { - // reset drawing settings (position, scale, colour mapping) if requested - resetDisplay(); - } - else if (displayMode == IV_DISPLAY_FITIMAGE) - { - // compute stretch to fit settings - setToFit(); - } - else // if (displayMode == IV_DISPLAY_NOCHANGE) - { - // use same settings - limitCurrPos(); - limitZoomFactor(); - } - return ret; -} - -// Make the image object point to another image source -// If takeOwnership is false then: -// This object will not own (control) or copy the pixel data -// (the source image is still controlled by the caller) -// Else if takeOwnership is true then: -// This object will take ownership (control) of the pixel data -// (the source image is not (should not be) controlled by the caller anymore) -// In this case the memory must have been allocated with the new operator (because this class will use the delete operator) -// If numSigBitsPerSample = 0 then the full range is assumed to be significant -// displayMode ... controls the initial display of the image, one of: -// IV_DISPLAY_NOCHANGE ... no change to view settings when displaying a new image -// IV_DISPLAY_FITIMAGE ... fit-image when displaying a new image (other settings remain the same) -// IV_DISPLAY_RESET ... reset settings when displaying a new image (image will be displayed at 1:1 scale with no color map) -// This function does not redraw (call redraw afterwards) -// Returns: -// 0 for OK -// -1 for invalid color format -int GLImageBox::pointImageTo(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, bool takeOwnership, int displayMode) -{ - // Point to image - int ret = _image.pointTo(pSrcPixelData, width, height, format, numSigBitsPerSample, takeOwnership); - - // Set display settings depending on mode - if (displayMode == IV_DISPLAY_RESET) - { - // reset drawing settings (position, scale, colour mapping) if requested - resetDisplay(); - } - else if (displayMode == IV_DISPLAY_FITIMAGE) - { - // compute stretch to fit settings - setToFit(); - } - else // if (displayMode == IV_DISPLAY_NOCHANGE) - { - // use same settings - limitCurrPos(); - limitZoomFactor(); - } - return ret; -} - -// Reset display settings -void GLImageBox::resetDisplay() -{ - clearColorMap(); - setNormal(); // re-draws as well -} - -// Clears the color map -void GLImageBox::clearColorMap() -{ - delete [] _pColorMap; - _pColorMap = nullptr; - _numMapEntries = 0; -} - -// Calculate the number of color map entries to use -int GLImageBox::calcNumColorMapEntries() -{ - // Get the maximum number of map entries that the system supports - // Get the number of bits per sample for the image if it exists and compute the number of pixel values - // Return the fewer amount of entries - GLint maxMapEntries; - glGetIntegerv(GL_MAX_PIXEL_MAP_TABLE, &maxMapEntries); - int NumEntries = maxMapEntries; - if (_image.hasValidData()) - NumEntries = (int)std::min(pow(2.0, (double)(_image.getNumSigBitsPerSample())), (double)maxMapEntries); - return NumEntries; -} - -// Creates a color map (All red entries come first, then green, then blue, then alpha) -// returns 0 for OK, -1 for memory allocation error -// numRequestedEntries ... requested number of map entries (used if not greater than maximum possible or number of intensity values) -// Initialise ... flag to initialise the map to a linear scale or not -int GLImageBox::createColorMap(int numEntriesReq, bool Initialise) -{ - // Get the number of map entries to use - int maxNumEntries = calcNumColorMapEntries(); - int numEntries; - if (numEntriesReq <= 0) - numEntries = maxNumEntries; - else - numEntries = std::min(numEntriesReq, maxNumEntries); - - // Clear and re-create the color map if it's not the desired size - if (numEntries != _numMapEntries) - { - clearColorMap(); - _numMapEntries = numEntries; - - // Create the color map (RGBA) - try - { - _pColorMap = new float[4 * _numMapEntries]; - } - catch(...) - { - clearColorMap(); - return -1; - } - } - - // Initialise the color map if requested - // (All red entries come first, then green, then blue, then alpha) - if (Initialise) - { - // For each RGB channel - int arrayIndex = 0; - for (int chan = 0; chan < 3; chan++) - { - for (int in = 0; in < _numMapEntries; in++) - { - _pColorMap[arrayIndex] = (float)in / (float)(_numMapEntries - 1); - arrayIndex++; - } - } - // For alpha channel - for (int in = 0; in < _numMapEntries; in++) - { - _pColorMap[arrayIndex] = 1.0; - arrayIndex++; - } - } - - return 0; -} - -// Sets a color map RGBA value -// (All red entries come first, then green, then blue, then alpha) -// index ... index of color map RGBA entry -// red ... intensity value for this red entry (range 0 to 1) -// green ... intensity value for this green entry (range 0 to 1) -// blue ... intensity value for this blue entry (range 0 to 1) -// alpha ... value for this alpha entry (range 0 to 1) -int GLImageBox::setColorMapRGBAValue(int index, float red, float green, float blue, float alpha) -{ - if ((index < 0) || (index >= _numMapEntries) || - (red < 0.0) || (red > 1.0) || - (green < 0.0) || (green > 1.0) || - (blue < 0.0) || (blue > 1.0) || - (alpha < 0.0) || (alpha > 1.0)) - return -1; - - _pColorMap[index] = red; - _pColorMap[_numMapEntries + index] = green; - _pColorMap[_numMapEntries * 2 + index] = blue; - _pColorMap[_numMapEntries * 3 + index] = alpha; - return 0; -} - -// Sets a color map red value -// (All red entries come first, then green, then blue, then alpha) -// index ... index of color map red entry -// value ... intensity value for this red entry (range 0 to 1) -int GLImageBox::setColorMapRedValue(int index, float value) -{ - if ((index < 0) || (index >= _numMapEntries) || (value < 0.0) || (value > 1.0)) - return -1; - - _pColorMap[index] = value; - return 0; -} - -// Sets a color map green value -// (All red entries come first, then green, then blue, then alpha) -// index ... index of color map green entry -// value ... intensity value for this green entry (range 0 to 1) -int GLImageBox::setColorMapGreenValue(int index, float value) -{ - if ((index < 0) || (index >= _numMapEntries) || (value < 0.0) || (value > 1.0)) - return -1; - - _pColorMap[_numMapEntries + index] = value; - return 0; -} - -// Sets a color map blue value -// (All red entries come first, then green, then blue, then alpha) -// index ... index of color map blue entry -// value ... intensity value for this blue entry (range 0 to 1) -int GLImageBox::setColorMapBlueValue(int index, float value) -{ - if ((index < 0) || (index >= _numMapEntries) || (value < 0.0) || (value > 1.0)) - return -1; - - _pColorMap[_numMapEntries * 2 + index] = value; - return 0; -} - -// Sets a color map alpha value -// (All red entries come first, then green, then blue, then alpha) -// index ... index of color map alpha entry -// value ... value for this alpha entry (range 0 to 1) -int GLImageBox::setColorMapAlphaValue(int index, float value) -{ - if ((index < 0) || (index >= _numMapEntries) || (value < 0.0) || (value > 1.0)) - return -1; - - _pColorMap[_numMapEntries * 3 + index] = value; - return 0; -} - -// Helper function to convert a pixel's value (of a sample) to the color map index (i.e. the map index that will be used for that pixel value) -unsigned int GLImageBox::pixValToMapIndex(double PixVal) -{ - if (_pColorMap) - { - double MaxVal = pow(2.0, _image.getNumBitsPerSample()) - 1.0; - double Scale = (pow(2.0, _image.getNumBitsPerSample()) - 1.0) / (pow(2.0, _image.getNumSigBitsPerSample()) - 1.0); - double PixVal01 = Scale * PixVal / MaxVal; - int numMapEntries = getNumColorMapEntries(); - unsigned int MapIndex = (unsigned int)floor(0.5 + PixVal01 * (double)(numMapEntries - 1)); - return MapIndex; - } - else - { - return 0; - } -} - -// https://learnopengl.com/?_escaped_fragment_=In-Practice/Text-Rendering#!In-Practice/Text-Rendering -void GLImageBox::renderText(int x, int y, const QString& str, const QFont& fnt) -{ - if (str.isEmpty() || !isValid()) - return; - - //glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS); - //glPushAttrib(GL_ALL_ATTRIB_BITS); - -#if 0 - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - GLfloat color[4]; - glGetFloatv(GL_CURRENT_COLOR, &color[0]); - QColor col; - col.setRgbF(color[0], color[1], color[2],color[3]); - - QFont font(fnt); - font.setStyleHint(QFont::Times, QFont::PreferAntialias); - - QPainter painter; - painter.begin(this); - painter.setRenderHint(QPainter::Antialiasing); - painter.setRenderHint(QPainter::TextAntialiasing); - - painter.setFont(font); - painter.setPen(col); - painter.drawText(x, y, str); - painter.end(); -#else - GLfloat color[4]; - glGetFloatv(GL_CURRENT_COLOR, &color[0]); - QColor col; - col.setRgbF(color[0], color[1], color[2],color[3]); - - QFont font(fnt); - font.setStyleHint(QFont::Times, QFont::PreferAntialias); - - QPainterPath textPath; - textPath.addText(x, y, font, str); - - QPainter painter; - painter.begin(this); - painter.setRenderHint(QPainter::Antialiasing); - painter.setRenderHint(QPainter::TextAntialiasing); - - painter.setBrush(col); - painter.setPen(Qt::NoPen); - painter.drawPath(textPath); - painter.end(); -#endif - //glPopAttrib(); - //glPopClientAttrib(); -} - -#include "moc_OpenGLImageBox.cpp" diff --git a/src/Mod/Image/Gui/OpenGLImageBox.h b/src/Mod/Image/Gui/OpenGLImageBox.h deleted file mode 100644 index d9a38d98a7..0000000000 --- a/src/Mod/Image/Gui/OpenGLImageBox.h +++ /dev/null @@ -1,122 +0,0 @@ -/*************************************************************************** - * * - * This is a QOpenGLWidget displaying an image or portion of an image * - * in a box. * - * * - * Author: Graeme van der Vlugt * - * Copyright: Imetric 3D GmbH * - * Year: 2004 * - * * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * for detail see the LICENCE text file. * - * * - ***************************************************************************/ - -#ifndef OPENGLIMAGEBOX_H -#define OPENGLIMAGEBOX_H - -#include -#include - -class QOpenGLDebugMessage; - -namespace ImageGui -{ - -#define IV_DISPLAY_NOCHANGE 0 // no change to view settings when displaying a new image -#define IV_DISPLAY_FITIMAGE 1 // fit-image when displaying a new image (other settings remain the same) -#define IV_DISPLAY_RESET 2 // reset settings when displaying a new image (image will be displayed at 1:1 scale with no color map) - -class ImageGuiExport GLImageBox : public QOpenGLWidget -{ - Q_OBJECT - -public: - - GLImageBox(QWidget * parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); - ~GLImageBox(); - - Image::ImageBase *getImageBasePtr() { return &_image; } - - void redraw(); - - int getImageSample(int x, int y, unsigned short sampleIndex, double &value); - unsigned short getImageNumSamplesPerPix(); - int getImageFormat(); - - void fixBasePosCurr(); - double getZoomFactor() { return _zoomFactor; } - void setZoomFactor(double zoomFactor, bool useCentrePt = false, int ICx = 0, int ICy = 0); - void zoom(int power, bool useCentrePt = false, int ICx = 0, int ICy = 0); - void stretchToFit(); - void setNormal(); - void getCentrePoint(int &ICx, int &ICy); - void relMoveWC(int WCdx, int WCdy); - - double WCToIC_X(double WidgetX); - double WCToIC_Y(double WidgetY); - double ICToWC_X(double ImageX); - double ICToWC_Y(double ImageY); - - void clearImage(); - int createImageCopy(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, int displayMode = IV_DISPLAY_RESET); - int pointImageTo(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, bool takeOwnership, int displayMode = IV_DISPLAY_RESET); - - void clearColorMap(); - int createColorMap(int numEntriesReq = 0, bool Initialise = true); - int getNumColorMapEntries() const { return _numMapEntries; } - int setColorMapRGBAValue(int index, float red, float green, float blue, float alpha = 1.0); - int setColorMapRedValue(int index, float value); - int setColorMapGreenValue(int index, float value); - int setColorMapBlueValue(int index, float value); - int setColorMapAlphaValue(int index, float value); - unsigned int pixValToMapIndex(double PixVal); - - void renderText(int x, int y, const QString& str, const QFont& fnt = QFont()); - -public Q_SLOTS: - void handleLoggedMessage(const QOpenGLDebugMessage &debugMessage); - -Q_SIGNALS: - void drawGraphics(); - -private: - - void initializeGL(); - void paintGL(); - void resizeGL( int w, int h ); - - void drawImage(); - void getDisplayedImageAreaSize(int &dx, int &dy); - - void getPixFormat(GLenum &pixFormat, GLenum &pixType); - void limitCurrPos(); - void limitZoomFactor(); - void setCurrPos(int x0, int y0); - void setToFit(); - void resetDisplay(); - int calcNumColorMapEntries(); - - Image::ImageBase _image; // the image data - - int _x0; // image x-coordinate of top-left widget pixel - int _y0; // image y-coordinate of top-left widget pixel - double _zoomFactor; // zoom factor = (num_widget_pixels / num_image_pixels) - - int _base_x0; // defines a fixed position of x0 - int _base_y0; // defines a fixed position of y0 - - float* _pColorMap; // a RGBA color map (to alter the intensity or colors) - int _numMapEntries; // number of entries in color map - static bool haveMesa; - -}; - - -} // namespace ImageGui - -#endif // OPENGLIMAGEBOX_H diff --git a/src/Mod/Image/Gui/PreCompiled.cpp b/src/Mod/Image/Gui/PreCompiled.cpp deleted file mode 100644 index 820dcebfee..0000000000 --- a/src/Mod/Image/Gui/PreCompiled.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2002 Jürgen Riegel * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#include "PreCompiled.h" diff --git a/src/Mod/Image/Gui/PreCompiled.h b/src/Mod/Image/Gui/PreCompiled.h deleted file mode 100644 index b335400317..0000000000 --- a/src/Mod/Image/Gui/PreCompiled.h +++ /dev/null @@ -1,57 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2002 Jürgen Riegel * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#ifndef __PRECOMPILED_GUI__ -#define __PRECOMPILED_GUI__ - -#include - -// point at which warnings of overly long specifiers disabled (needed for VC6) -#ifdef _MSC_VER -# pragma warning(disable : 4005) -# pragma warning(disable : 4251) -# pragma warning(disable : 4503) -# pragma warning(disable : 4786) // specifier longer then 255 chars -#endif - -#ifdef _PreComp_ - -// STL -#include -#include - -// Inventor -#include -#include -#include -#include -#include -#include - -// Qt Toolkit -#ifndef __QtAll__ -# include -#endif - -#endif //_PreComp_ - -#endif // __PRECOMPILED_GUI__ diff --git a/src/Mod/Image/Gui/Resources/Image.qrc b/src/Mod/Image/Gui/Resources/Image.qrc deleted file mode 100644 index ead61a753c..0000000000 --- a/src/Mod/Image/Gui/Resources/Image.qrc +++ /dev/null @@ -1,50 +0,0 @@ - - - icons/Image_Open.svg - icons/Image_CreateImagePlane.svg - icons/Image_Scaling.svg - icons/ImageWorkbench.svg - translations/Image_af.qm - translations/Image_de.qm - translations/Image_fi.qm - translations/Image_fr.qm - translations/Image_hr.qm - translations/Image_it.qm - translations/Image_nl.qm - translations/Image_no.qm - translations/Image_pl.qm - translations/Image_ru.qm - translations/Image_uk.qm - translations/Image_tr.qm - translations/Image_sv-SE.qm - translations/Image_zh-TW.qm - translations/Image_pt-BR.qm - translations/Image_cs.qm - translations/Image_sk.qm - translations/Image_es-ES.qm - translations/Image_zh-CN.qm - translations/Image_ja.qm - translations/Image_ro.qm - translations/Image_hu.qm - translations/Image_pt-PT.qm - translations/Image_sr.qm - translations/Image_el.qm - translations/Image_sl.qm - translations/Image_eu.qm - translations/Image_ca.qm - translations/Image_gl.qm - translations/Image_kab.qm - translations/Image_ko.qm - translations/Image_fil.qm - translations/Image_id.qm - translations/Image_lt.qm - translations/Image_val-ES.qm - translations/Image_ar.qm - translations/Image_vi.qm - translations/Image_es-AR.qm - translations/Image_bg.qm - translations/Image_ka.qm - translations/Image_sr-CS.qm - translations/Image_be.qm - - diff --git a/src/Mod/Image/Gui/Resources/icons/ImageWorkbench.svg b/src/Mod/Image/Gui/Resources/icons/ImageWorkbench.svg deleted file mode 100644 index 1f1259006c..0000000000 --- a/src/Mod/Image/Gui/Resources/icons/ImageWorkbench.svg +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image.ts b/src/Mod/Image/Gui/Resources/translations/Image.ts deleted file mode 100644 index db5f8e19f9..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - - - - - Create image plane... - - - - - Create a planar image in the 3D space - - - - - CmdImageOpen - - - Image - - - - - Open... - - - - - Open image view - - - - - CmdImageScaling - - - Image - - - - - Scale... - - - - - Image Scaling - - - - - Command - - - Create ImagePlane - - - - - ImageGui::GLImageBox - - - Image pixel format - - - - - Undefined type of colour space for image viewing - - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - - - - - Image plane - - - - - XY-Plane - - - - - XZ-Plane - - - - - YZ-Plane - - - - - Reverse direction - - - - - Offset: - - - - - ImageGui::ImageView - - - &Fit image - - - - - Stretch the image to fit the view - - - - - &1:1 scale - - - - - Display the image at a 1:1 scale - - - - - Standard - - - - - Ready... - - - - - grey - - - - - - - - - - - - - - zoom - - - - - - - - - outside image - - - - - QObject - - - - Images - - - - - - All files - - - - - - Choose an image file to open - - - - - Error opening image - - - - - Could not load the chosen image - - - - - Workbench - - - Image - - - - - Image_Scaling - - - Scale image plane - - - - - Scales an image plane by defining a distance between two points - - - - - Dialog - - - Scale image plane - - - - - Distance - - - - - Select first point - - - - - Enter distance - - - - - Select image plane - - - - - Select second point - - - - - Select Image Plane and type distance - - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_af.qm b/src/Mod/Image/Gui/Resources/translations/Image_af.qm deleted file mode 100644 index 617540eb51..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_af.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_af.ts b/src/Mod/Image/Gui/Resources/translations/Image_af.ts deleted file mode 100644 index 1a0b44024a..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_af.ts +++ /dev/null @@ -1,262 +0,0 @@ - - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance [mm] - Distance [mm] - - - - Select first point - Select first point - - - - <font color='red'>Enter distance</font> - <font color='red'>Enter distance</font> - - - - <font color='red'>Select ImagePlane</font> - <font color='red'>Select ImagePlane</font> - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - - CmdCreateImagePlane - - - Image - Beeld - - - - Create image plane... - Skep beeldvlak... - - - - Create a planar image in the 3D space - Skep 'n plat beeld in die 3D ruimte - - - - CmdImageOpen - - - Image - Beeld - - - - Open... - Maak oop... - - - - Open image view - Maak beeldaansig oop - - - - CmdImageScaling - - - Image - Beeld - - - - Scale... - Scale... - - - - Image Scaling - Image Scaling - - - - ImageGui::GLImageBox - - - - Image pixel format - Beeldelementformaat - - - - - Undefined type of colour space for image viewing - Ongedefinieerde kleurruimte vir beeldvertoning - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Kies oriëntasie - - - - Image plane - Image plane - - - - XY-Plane - XY-vlak - - - - XZ-Plane - XZ-Vlak - - - - YZ-Plane - YZ-Vlak - - - - Reverse direction - Omgekeerde rigting - - - - Offset: - Verskuiwing: - - - - ImageGui::ImageView - - - &Fit image - &Pas beeld - - - - Stretch the image to fit the view - Rek die beeld om die aansig te pas - - - - &1:1 scale - &1:1 skaal - - - - Display the image at a 1:1 scale - Wys die beeld op 'n 1:1 skaal - - - - Standard - Standaard - - - - Ready... - Gereed... - - - - grey - grys - - - - - - - - - - - - - zoom - Zoem - - - - - - - - outside image - buite beeld - - - - QObject - - - - Images - Beelde - - - - - All files - Alle lêers - - - - - Choose an image file to open - Kies 'n beeldlêer om oop te maak - - - - Error opening image - Error opening image - - - - Could not load the chosen image - Could not load the chosen image - - - - Workbench - - - Image - Beeld - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ar.qm b/src/Mod/Image/Gui/Resources/translations/Image_ar.qm deleted file mode 100644 index b5274dd0c1..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_ar.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ar.ts b/src/Mod/Image/Gui/Resources/translations/Image_ar.ts deleted file mode 100644 index bf21b354be..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_ar.ts +++ /dev/null @@ -1,262 +0,0 @@ - - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance [mm] - Distance [mm] - - - - Select first point - Select first point - - - - <font color='red'>Enter distance</font> - <font color='red'>Enter distance</font> - - - - <font color='red'>Select ImagePlane</font> - <font color='red'>Select ImagePlane</font> - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - - CmdCreateImagePlane - - - Image - صورة - - - - Create image plane... - إنشاء سطح الصورة... - - - - Create a planar image in the 3D space - إنشاء صورة مسطحة في مساحة ثلاثية الأبعاد - - - - CmdImageOpen - - - Image - صورة - - - - Open... - فتح... - - - - Open image view - فتح عرض الصورة - - - - CmdImageScaling - - - Image - صورة - - - - Scale... - مقياس... - - - - Image Scaling - Image Scaling - - - - ImageGui::GLImageBox - - - - Image pixel format - صيغة صورة بكسل - - - - - Undefined type of colour space for image viewing - نوع غير محدد من مساحة اللون لعرض الصور - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - سطح الصورة - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &تناسب الصورة - - - - Stretch the image to fit the view - إمتد الصورة لتناسب العرض - - - - &1:1 scale - مقياس &1:1 - - - - Display the image at a 1:1 scale - عرض الصورة على مقياس 1:1 - - - - Standard - قياسي - - - - Ready... - جاهز... - - - - grey - رمادي - - - - - - - - - - - - - zoom - تكبير - - - - - - - - outside image - خارج الصورة - - - - QObject - - - - Images - الصّور - - - - - All files - كلّ الملفّات - - - - - Choose an image file to open - اختر ملفّ صورة لفتحه - - - - Error opening image - خطأ في فتح الصّورة - - - - Could not load the chosen image - تعذّر فتح الصّورة المحدّدة - - - - Workbench - - - Image - صورة - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_be.qm b/src/Mod/Image/Gui/Resources/translations/Image_be.qm deleted file mode 100644 index 5248679e52..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_be.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_be.ts b/src/Mod/Image/Gui/Resources/translations/Image_be.ts deleted file mode 100644 index cf1bd48339..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_be.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Выява - - - - Create image plane... - Стварыць плоскасць выявы... - - - - Create a planar image in the 3D space - Стварыць плоскую выяву ў трохмернай прасторы - - - - CmdImageOpen - - - Image - Выява - - - - Open... - Адчыніць... - - - - Open image view - Адчыніць выгляд выявы - - - - CmdImageScaling - - - Image - Выява - - - - Scale... - Маштаб... - - - - Image Scaling - Маштабаванне выявы - - - - Command - - - Create ImagePlane - Стварыць Плоскасць Выявы - - - - ImageGui::GLImageBox - - - Image pixel format - Фармат пікселя выявы - - - - Undefined type of colour space for image viewing - Нявызначаны тып каляровай прасторы для прагляду выявы - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Плоскасць выявы - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Запоўніць выяву - - - - Stretch the image to fit the view - Расцягнуць выяву да памеру выгляду - - - - &1:1 scale - Маштаб &1:1 - - - - Display the image at a 1:1 scale - Адлюстраваць выяву ў маштабе 1:1 - - - - Standard - Стандартны - - - - Ready... - Гатова... - - - - grey - шэры - - - - - - - - - - - - - zoom - маштаб - - - - - - - - outside image - знешняя выява - - - - QObject - - - - Images - Выявы - - - - - All files - Усе файлы - - - - - Choose an image file to open - Абраць файл выявы, каб адчыніць - - - - Error opening image - Памылка адкрыцця выявы - - - - Could not load the chosen image - Не атрымалася загрузіць абраную выяву - - - - Workbench - - - Image - Выява - - - - Image_Scaling - - - Scale image plane - Маштаб плоскасці выявы - - - - Scales an image plane by defining a distance between two points - Маштабаваць плоскасць выявы па адлегласць паміж дзвюма кропкамі - - - - Dialog - - - Scale image plane - Маштаб плоскасці выявы - - - - Distance - Distance - - - - Select first point - Абраць першую кропку - - - - Enter distance - Увод адлегласці - - - - Select image plane - Абраць плоскасць выявы - - - - Select second point - Абраць другую кропку - - - - Select Image Plane and type distance - Абраць плоскасць выявы і ўвесці адлегласць - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_bg.qm b/src/Mod/Image/Gui/Resources/translations/Image_bg.qm deleted file mode 100644 index 69dea42b49..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_bg.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_bg.ts b/src/Mod/Image/Gui/Resources/translations/Image_bg.ts deleted file mode 100644 index 5e229e7b47..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_bg.ts +++ /dev/null @@ -1,262 +0,0 @@ - - - - - Image_Scaling - - - Scale image plane - Мащабиране на равнинното изображение - - - - Scales an image plane by defining a distance between two points - Мащабира равнинното изображение, определяйки разстоянието между две точки - - - - Dialog - - - Scale image plane - Мащабиране на равнинното изображение - - - - Distance [mm] - Разстояние [mm] - - - - Select first point - Изберете първата точка - - - - <font color='red'>Enter distance</font> - <font color='red'>Въведете разстояние</font> - - - - <font color='red'>Select ImagePlane</font> - <font color='red'>Изберете равнинно изображение</font> - - - - Select second point - Изберете втората точка - - - - Select Image Plane and type distance - Изберете равнинно изображението и въведете разстояние - - - - CmdCreateImagePlane - - - Image - Изображение - - - - Create image plane... - Създаване на равнинно изображението... - - - - Create a planar image in the 3D space - Създаване на равнинно изображение в тримерното пространство - - - - CmdImageOpen - - - Image - Изображение - - - - Open... - Отваряне... - - - - Open image view - Отворете изображение - - - - CmdImageScaling - - - Image - Изображение - - - - Scale... - Scale... - - - - Image Scaling - Мащабиране на изображението - - - - ImageGui::GLImageBox - - - - Image pixel format - Форматът на пикселите в изображението - - - - - Undefined type of colour space for image viewing - Неопределен тип цвят на пространството за преглед на изображението - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Равнина на изображението - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Вместване на изображението - - - - Stretch the image to fit the view - Разтягане на изображението, за да побере изгледа - - - - &1:1 scale - &мащаб 1:1 - - - - Display the image at a 1:1 scale - Показва изображението в мащаб 1:1 - - - - Standard - Стандартен - - - - Ready... - Готово... - - - - grey - Сиво - - - - - - - - - - - - - zoom - мащабиране - - - - - - - - outside image - извън изображението - - - - QObject - - - - Images - Изображения - - - - - All files - Всички файлове - - - - - Choose an image file to open - Избор на файл с изображение за отваряне - - - - Error opening image - Грешка, отваряйки изображение - - - - Could not load the chosen image - Избраното изображение не можа да бъде заредено - - - - Workbench - - - Image - Изображение - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ca.qm b/src/Mod/Image/Gui/Resources/translations/Image_ca.qm deleted file mode 100644 index c97f822739..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_ca.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ca.ts b/src/Mod/Image/Gui/Resources/translations/Image_ca.ts deleted file mode 100644 index ac95509f59..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_ca.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Imatge - - - - Create image plane... - Crea el pla d'imatge... - - - - Create a planar image in the 3D space - Crear una imatge plana en l'espai 3D - - - - CmdImageOpen - - - Image - Imatge - - - - Open... - Obrir... - - - - Open image view - Obrir vista d'imatge - - - - CmdImageScaling - - - Image - Imatge - - - - Scale... - Escala... - - - - Image Scaling - Escalat d'imatge - - - - Command - - - Create ImagePlane - Create ImagePlane - - - - ImageGui::GLImageBox - - - Image pixel format - Format de píxel d'imatge - - - - Undefined type of colour space for image viewing - Tipus d'espai acolorit no definit per la visualització de la imatge - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Pla d'imatge - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Ajustar imatge - - - - Stretch the image to fit the view - Estirar la imatge per ajustar-se a la vista - - - - &1:1 scale - & escala 1:1 - - - - Display the image at a 1:1 scale - Visualitzar la imatge a escala 1:1 - - - - Standard - Estàndard - - - - Ready... - Llest... - - - - grey - gris - - - - - - - - - - - - - zoom - zoom - - - - - - - - outside image - imatge exterior - - - - QObject - - - - Images - Imatges - - - - - All files - Tots els fitxers - - - - - Choose an image file to open - Trieu un fitxer d'imatge per obrir - - - - Error opening image - Error a l'obrir la imatge - - - - Could not load the chosen image - No es pot carregar la imatge escollida - - - - Workbench - - - Image - Imatge - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distance - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_cs.qm b/src/Mod/Image/Gui/Resources/translations/Image_cs.qm deleted file mode 100644 index fa241c760d..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_cs.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_cs.ts b/src/Mod/Image/Gui/Resources/translations/Image_cs.ts deleted file mode 100644 index 612ad0730c..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_cs.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Obrázek - - - - Create image plane... - Vytvoření roviny obrázku... - - - - Create a planar image in the 3D space - Vytvoří rovinný obrázek ve 3D prostoru - - - - CmdImageOpen - - - Image - Obrázek - - - - Open... - Otevřít... - - - - Open image view - Otevřít náhled obrázku - - - - CmdImageScaling - - - Image - Obrázek - - - - Scale... - Měřítko... - - - - Image Scaling - Měřítko obrázku - - - - Command - - - Create ImagePlane - Vytvoří rovinu obrazu - - - - ImageGui::GLImageBox - - - Image pixel format - Formát bodu obrázku - - - - Undefined type of colour space for image viewing - Nedefinovaný typ barvy prostoru pro zobrazení obrázku - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Rovina obrázku - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - Přizpůsobit obrázek - - - - Stretch the image to fit the view - Přizpůsobit obrázek velikosti pohledu - - - - &1:1 scale - měřítko &1:1 - - - - Display the image at a 1:1 scale - Zobrazit obrázek v měřítku 1:1 - - - - Standard - Standardní - - - - Ready... - Připraven... - - - - grey - šedá - - - - - - - - - - - - - zoom - zvětšení - - - - - - - - outside image - okolí obrázku - - - - QObject - - - - Images - Obrázky - - - - - All files - Všechny soubory - - - - - Choose an image file to open - Vyber soubor obrázku pro otevření - - - - Error opening image - Chyba při otevírání obrázku - - - - Could not load the chosen image - Nelze načíst vybraný obrázek - - - - Workbench - - - Image - Obrázek - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distance - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_de.qm b/src/Mod/Image/Gui/Resources/translations/Image_de.qm deleted file mode 100644 index 8191daf256..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_de.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_de.ts b/src/Mod/Image/Gui/Resources/translations/Image_de.ts deleted file mode 100644 index ba95752c0b..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_de.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Grafik - - - - Create image plane... - Bildebene erstellen... - - - - Create a planar image in the 3D space - Erstellt ein ebenes Bild im 3D-Raum - - - - CmdImageOpen - - - Image - Grafik - - - - Open... - Öffnen... - - - - Open image view - Öffnet eine Bildansicht - - - - CmdImageScaling - - - Image - Grafik - - - - Scale... - Skalieren... - - - - Image Scaling - Bildskalierung - - - - Command - - - Create ImagePlane - Bildebene erstellen - - - - ImageGui::GLImageBox - - - Image pixel format - Pixelformat des Bildes - - - - Undefined type of colour space for image viewing - Undefinierter Farbraum-Typ für die Bildbetrachtung - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Orientierung wählen - - - - Image plane - Bildebene - - - - XY-Plane - XY-Ebene - - - - XZ-Plane - XZ-Ebene - - - - YZ-Plane - YZ-Ebene - - - - Reverse direction - Umgekehrte Richtung - - - - Offset: - Versatz: - - - - ImageGui::ImageView - - - &Fit image - Bild an&passen - - - - Stretch the image to fit the view - Bild auf die Ansicht ausdehnen - - - - &1:1 scale - &1:1 Maßstab - - - - Display the image at a 1:1 scale - Das Bild im Maßstab 1:1 anzeigen - - - - Standard - Standard - - - - Ready... - Fertig... - - - - grey - grau - - - - - - - - - - - - - zoom - Zoom - - - - - - - - outside image - außerhalb Bild - - - - QObject - - - - Images - Bilder - - - - - All files - Alle Dateien - - - - - Choose an image file to open - Wählen Sie ein Bild zum Öffnen aus - - - - Error opening image - Fehler beim Öffnen des Bildes - - - - Could not load the chosen image - Das gewählte Bild konnte nicht geladen werden - - - - Workbench - - - Image - Grafik - - - - Image_Scaling - - - Scale image plane - Bildebene skalieren - - - - Scales an image plane by defining a distance between two points - Skaliert eine Bildebene durch Festlegen des Abstandes zweier Punkte - - - - Dialog - - - Scale image plane - Bildebene skalieren - - - - Distance - Abstand - - - - Select first point - Den ersten Punkt auswählen - - - - Enter distance - Abstand eingeben - - - - Select image plane - Bildebene auswählen - - - - Select second point - Den zweiten Punkt auswählen - - - - Select Image Plane and type distance - Bildebene auswählen und den Abstand eingeben - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_el.qm b/src/Mod/Image/Gui/Resources/translations/Image_el.qm deleted file mode 100644 index 2b5432b566..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_el.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_el.ts b/src/Mod/Image/Gui/Resources/translations/Image_el.ts deleted file mode 100644 index 321eabff6c..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_el.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Εικόνα - - - - Create image plane... - Δημιουργήστε επίπεδο εικόνας... - - - - Create a planar image in the 3D space - Δημιουργήστε μια επίπεδη εικόνα στον τρισδιάστατο χώρο - - - - CmdImageOpen - - - Image - Εικόνα - - - - Open... - Άνοιγμα... - - - - Open image view - Άνοιγμα προβολής εικόνας - - - - CmdImageScaling - - - Image - Εικόνα - - - - Scale... - Κλιμακοποίηση... - - - - Image Scaling - Κλίμακα εικόνας - - - - Command - - - Create ImagePlane - Δημιουργία Επιφάνειας - - - - ImageGui::GLImageBox - - - Image pixel format - Μορφή εικονοστοιχείου εικόνας - - - - Undefined type of colour space for image viewing - Απροσδιόριστος τύπος χρωματικού χώρου για την προβολή εικόνων - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Επίπεδο εικόνας - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - Προσαρμογή εικόνας - - - - Stretch the image to fit the view - Εκτείνετε την εικόνα ώστε να προσαρμόζεται στην προβολή - - - - &1:1 scale - κλίμακα &1:1 - - - - Display the image at a 1:1 scale - Απεικόνιση της εικόνας σε κλίμακα 1:1 - - - - Standard - Καθιερωμένο - - - - Ready... - Έτοιμο... - - - - grey - γκρι - - - - - - - - - - - - - zoom - εστίαση - - - - - - - - outside image - εξωτερική εικόνα - - - - QObject - - - - Images - Εικόνες - - - - - All files - Όλα τα αρχεία - - - - - Choose an image file to open - Επιλέξτε ένα αρχείο εικόνας για άνοιγμα - - - - Error opening image - Σφάλμα κατά το άνοιγμα της εικόνας - - - - Could not load the chosen image - Αδυναμία φόρτωσης της επιλεγμένης εικόνας - - - - Workbench - - - Image - Εικόνα - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distance - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_es-AR.qm b/src/Mod/Image/Gui/Resources/translations/Image_es-AR.qm deleted file mode 100644 index ebd3821f07..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_es-AR.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_es-AR.ts b/src/Mod/Image/Gui/Resources/translations/Image_es-AR.ts deleted file mode 100644 index 322db80f0b..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_es-AR.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Imagen - - - - Create image plane... - Crear plano de imagen... - - - - Create a planar image in the 3D space - Crea una imagen plana en el espacio 3D - - - - CmdImageOpen - - - Image - Imagen - - - - Open... - Abrir... - - - - Open image view - Abre vista de imagen - - - - CmdImageScaling - - - Image - Imagen - - - - Scale... - Escala... - - - - Image Scaling - Escalado de la imagen - - - - Command - - - Create ImagePlane - Crea Plano de Imagen - - - - ImageGui::GLImageBox - - - Image pixel format - Formato de pixel de imagen - - - - Undefined type of colour space for image viewing - Tipo de espacio de color no definido para la visualización de la imagen - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Plano de imagen - - - - XY-Plane - Plano XY - - - - XZ-Plane - Plano XZ - - - - YZ-Plane - Plano YZ - - - - Reverse direction - Reverse direction - - - - Offset: - Desplazamiento: - - - - ImageGui::ImageView - - - &Fit image - &Ajustar imagen - - - - Stretch the image to fit the view - Estira la imagen para que se ajuste a la vista - - - - &1:1 scale - &Escala 1:1 - - - - Display the image at a 1:1 scale - Muestra la imagen a escala 1:1 - - - - Standard - Estándar - - - - Ready... - Listo... - - - - grey - gris - - - - - - - - - - - - - zoom - zoom - - - - - - - - outside image - imagen exterior - - - - QObject - - - - Images - Imágenes - - - - - All files - Todos los archivos - - - - - Choose an image file to open - Elegir un archivo de imagen para abrir - - - - Error opening image - Error al abrir la imagen - - - - Could not load the chosen image - No se pudo cargar la imagen seleccionada - - - - Workbench - - - Image - Imagen - - - - Image_Scaling - - - Scale image plane - Escala del plano de la imagen - - - - Scales an image plane by defining a distance between two points - Escala un plano de imagen definiendo una distancia entre dos puntos - - - - Dialog - - - Scale image plane - Escala del plano de la imagen - - - - Distance - Distancia - - - - Select first point - Seleccione el primer punto - - - - Enter distance - Ingrese la distancia - - - - Select image plane - Seleccionar plano de imagen - - - - Select second point - Seleccione el segundo punto - - - - Select Image Plane and type distance - Seleccione el plano de la imagen y escriba la distancia - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_es-ES.qm b/src/Mod/Image/Gui/Resources/translations/Image_es-ES.qm deleted file mode 100644 index c8ea7f3274..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_es-ES.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_es-ES.ts b/src/Mod/Image/Gui/Resources/translations/Image_es-ES.ts deleted file mode 100644 index 9ed8f27c14..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_es-ES.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Imagen - - - - Create image plane... - Crear plano de imagen... - - - - Create a planar image in the 3D space - Crear una imagen plana en el espacio 3D - - - - CmdImageOpen - - - Image - Imagen - - - - Open... - Abrir... - - - - Open image view - Abrir vista de imagen - - - - CmdImageScaling - - - Image - Imagen - - - - Scale... - Escala... - - - - Image Scaling - Escalado de la imagen - - - - Command - - - Create ImagePlane - Crea Plano de Imagen - - - - ImageGui::GLImageBox - - - Image pixel format - Formato de pixel de imagen - - - - Undefined type of colour space for image viewing - Tipo de espacio color no definido para la visualización de la imagen - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Plano de imagen - - - - XY-Plane - Plano XY - - - - XZ-Plane - Plano XZ - - - - YZ-Plane - Plano YZ - - - - Reverse direction - Reverse direction - - - - Offset: - Desplazamiento: - - - - ImageGui::ImageView - - - &Fit image - &Ajustar imagen - - - - Stretch the image to fit the view - Estirar la imagen para ajustarse a la vista - - - - &1:1 scale - &Escala 1:1 - - - - Display the image at a 1:1 scale - Muestra la imagen a escala 1:1 - - - - Standard - Estándar - - - - Ready... - Preparado... - - - - grey - Gris - - - - - - - - - - - - - zoom - Zoom - - - - - - - - outside image - Imagen exterior - - - - QObject - - - - Images - Imágenes - - - - - All files - Todos los archivos - - - - - Choose an image file to open - Selecciona un archivo de imagen para abrir - - - - Error opening image - Error al abrir el archivo - - - - Could not load the chosen image - No se pude cargar la imagen solicitada - - - - Workbench - - - Image - Imagen - - - - Image_Scaling - - - Scale image plane - Escala del plano de la imagen - - - - Scales an image plane by defining a distance between two points - Escala del plano de imagen definiendo una distancia entre dos puntos - - - - Dialog - - - Scale image plane - Escala del plano de la imagen - - - - Distance - Distancia - - - - Select first point - Seleccione el primer punto - - - - Enter distance - Ingresar distancia - - - - Select image plane - Seleccionar plano de la imagen - - - - Select second point - Seleccione el segundo punto - - - - Select Image Plane and type distance - Seleccione el plano de la imagen y escriba la distancia - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_eu.qm b/src/Mod/Image/Gui/Resources/translations/Image_eu.qm deleted file mode 100644 index 5b4a9b21ff..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_eu.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_eu.ts b/src/Mod/Image/Gui/Resources/translations/Image_eu.ts deleted file mode 100644 index ce9844fc0f..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_eu.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Irudia - - - - Create image plane... - Sortu irudi-planoa... - - - - Create a planar image in the 3D space - Sortu 3D espazioaren irudi planarra - - - - CmdImageOpen - - - Image - Irudia - - - - Open... - Ireki... - - - - Open image view - Ireki irudi-bista - - - - CmdImageScaling - - - Image - Irudia - - - - Scale... - Eskala... - - - - Image Scaling - Irudia eskalatzea - - - - Command - - - Create ImagePlane - Sortu irudi-planoa - - - - ImageGui::GLImageBox - - - Image pixel format - Irudiaren pixel-formatua - - - - Undefined type of colour space for image viewing - Kolore-espazioaren definitu gabeko mota irudia bistaratzeko - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Aukeratu orientazioa - - - - Image plane - Irudi-planoa - - - - XY-Plane - XY planoa - - - - XZ-Plane - XZ planoa - - - - YZ-Plane - YZ planoa - - - - Reverse direction - Alderantzikatu norabidea - - - - Offset: - Desplazamendua: - - - - ImageGui::ImageView - - - &Fit image - &Egokitu irudia - - - - Stretch the image to fit the view - Luzatu irudia bista egokitzeko - - - - &1:1 scale - &1:1 eskala - - - - Display the image at a 1:1 scale - Erakutsi irudia 1:1 eskalan - - - - Standard - Estandarra - - - - Ready... - Prest... - - - - grey - grisa - - - - - - - - - - - - - zoom - zoom-a - - - - - - - - outside image - kanpo-irudia - - - - QObject - - - - Images - Irudiak - - - - - All files - Fitxategi guztiak - - - - - Choose an image file to open - Aukeratu irekiko den irudi-fitxategia - - - - Error opening image - Errorea irudia irekitzean - - - - Could not load the chosen image - Ezin izan da hautatutako irudia kargatu - - - - Workbench - - - Image - Irudia - - - - Image_Scaling - - - Scale image plane - Eskalatu irudi-planoa - - - - Scales an image plane by defining a distance between two points - Irudi-plano bat eskalatzen du bi punturen arteko distantzia definituta - - - - Dialog - - - Scale image plane - Eskalatu irudi-planoa - - - - Distance - Distantzia - - - - Select first point - Hautatu lehen puntua - - - - Enter distance - Sartu distantzia - - - - Select image plane - Eskalatu irudi-planoa - - - - Select second point - Hautatu bigarren puntua - - - - Select Image Plane and type distance - Hautatu irudi-planoa eta idatzi distantzia - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_fi.qm b/src/Mod/Image/Gui/Resources/translations/Image_fi.qm deleted file mode 100644 index d485dd01d6..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_fi.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_fi.ts b/src/Mod/Image/Gui/Resources/translations/Image_fi.ts deleted file mode 100644 index 160178f795..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_fi.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Kuva - - - - Create image plane... - Luo kuvan taso... - - - - Create a planar image in the 3D space - Luo tasomainen kuva 3D-avaruudessa - - - - CmdImageOpen - - - Image - Kuva - - - - Open... - Avaa... - - - - Open image view - Avaa kuvan näkymä - - - - CmdImageScaling - - - Image - Kuva - - - - Scale... - Skaalaa... - - - - Image Scaling - Kuvan skaalaus - - - - Command - - - Create ImagePlane - Create ImagePlane - - - - ImageGui::GLImageBox - - - Image pixel format - Kuvan pikselimuoto - - - - Undefined type of colour space for image viewing - Määrittämätön tyyppi väriavaruudesta kuvien katseluun - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Valitse suunta - - - - Image plane - Kuvataso - - - - XY-Plane - XY-taso - - - - XZ-Plane - XZ-taso - - - - YZ-Plane - YZ-taso - - - - Reverse direction - Vastakkainen suunta - - - - Offset: - Siirtymä: - - - - ImageGui::ImageView - - - &Fit image - &Sovita kuva - - - - Stretch the image to fit the view - Venytä kuva sopimaan näkymään - - - - &1:1 scale - mittakaavassa &1:1 - - - - Display the image at a 1:1 scale - Näytä kuva mittakaavassa 1:1 - - - - Standard - Standardi - - - - Ready... - Valmis... - - - - grey - harmaa - - - - - - - - - - - - - zoom - Zoomaus - - - - - - - - outside image - kuvan ulkopuolella - - - - QObject - - - - Images - Kuvat - - - - - All files - Kaikki tiedostot - - - - - Choose an image file to open - Valitse avattava kuvatiedosto - - - - Error opening image - Tiedoston avaaminen ei onnistu - - - - Could not load the chosen image - Valittua kuvaa ei voi avata - - - - Workbench - - - Image - Kuva - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Etäisyys - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_fil.qm b/src/Mod/Image/Gui/Resources/translations/Image_fil.qm deleted file mode 100644 index fd8cf57c41..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_fil.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_fil.ts b/src/Mod/Image/Gui/Resources/translations/Image_fil.ts deleted file mode 100644 index 4487e561b9..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_fil.ts +++ /dev/null @@ -1,217 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Imahe - - - - Create image plane... - Lumikha ng plane ng imahe... - - - - Create a planar image in the 3D space - Lumikha ng isang planar na imahe sa 3D space - - - - CmdImageOpen - - - Image - Imahe - - - - Open... - Buksan... - - - - Open image view - Buksan ang view ng imahe - - - - CmdImageScaling - - - Image - Imahe - - - - Scale... - Scale... - - - - Image Scaling - Image Scaling - - - - Command - - - Create ImagePlane - Create ImagePlane - - - - ImageGui::GLImageBox - - - Image pixel format - Pixel format ng imahe - - - - Undefined type of colour space for image viewing - Hindi matukoy na uri ng colour space para sa pag view ng imahe - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Plane ng imahe - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Fit imahe - - - - Stretch the image to fit the view - I-stretch ang imahe para magkasya sa view - - - - &1:1 scale - &1:1 scale - - - - Display the image at a 1:1 scale - I-display ang imahe sa isang 1:1 scale - - - - Standard - Pamantayan - - - - Ready... - Handa... - - - - grey - grey - - - - - - - - - - - - - zoom - palakihin - - - - - - - - outside image - sa labas na imahe - - - - QObject - - - - Images - Mga imahe - - - - - All files - Lahat ng mga file - - - - - Choose an image file to open - Pumili ng isang file ng imahe para buksan - - - - Error opening image - Kamalian sa pagbukas ng imahe - - - - Could not load the chosen image - Hindi ma load ang napiling imahe - - - - Workbench - - - Image - Imahe - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_fr.qm b/src/Mod/Image/Gui/Resources/translations/Image_fr.qm deleted file mode 100644 index eaf9f54f7e..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_fr.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_fr.ts b/src/Mod/Image/Gui/Resources/translations/Image_fr.ts deleted file mode 100644 index d939620030..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_fr.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Image - - - - Create image plane... - Créer un plan d'image... - - - - Create a planar image in the 3D space - Créer une image plane dans l'espace 3D - - - - CmdImageOpen - - - Image - Image - - - - Open... - Ouvrir... - - - - Open image view - Ouvrir une image - - - - CmdImageScaling - - - Image - Image - - - - Scale... - Échelle... - - - - Image Scaling - Redimensionnement d'image - - - - Command - - - Create ImagePlane - Créer PlanImage - - - - ImageGui::GLImageBox - - - Image pixel format - Format de l'image en pixels - - - - Undefined type of colour space for image viewing - Type d'espace colorimétrique indéfini - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Sélectionner l'orientation - - - - Image plane - Plan de l'image - - - - XY-Plane - Plan XY - - - - XZ-Plane - Plan XZ - - - - YZ-Plane - Plan YZ - - - - Reverse direction - Inverser la direction - - - - Offset: - Décalage : - - - - ImageGui::ImageView - - - &Fit image - &Adapter l'image - - - - Stretch the image to fit the view - Étirer l'image pour l'adapter à la vue - - - - &1:1 scale - Échelle &1:1 - - - - Display the image at a 1:1 scale - Afficher l'image à l'échelle 1:1 - - - - Standard - Standard - - - - Ready... - Prêt... - - - - grey - gris - - - - - - - - - - - - - zoom - zoom - - - - - - - - outside image - image extérieure - - - - QObject - - - - Images - Images - - - - - All files - Tous les fichiers - - - - - Choose an image file to open - Choisir un fichier d'image à ouvrir - - - - Error opening image - Erreur à l'ouverture de l'image - - - - Could not load the chosen image - Impossible de charger l'image choisie - - - - Workbench - - - Image - Image - - - - Image_Scaling - - - Scale image plane - Mettre à l'échelle le plan de l'image - - - - Scales an image plane by defining a distance between two points - Met le plan de l'image à l'échelle en définissant une distance entre deux points - - - - Dialog - - - Scale image plane - Mettre à l'échelle le plan de l'image - - - - Distance - Distance - - - - Select first point - Sélectionnez le premier point - - - - Enter distance - Entrez une distance - - - - Select image plane - Sélectionner un plan d'image - - - - Select second point - Sélectionnez un deuxième point - - - - Select Image Plane and type distance - Sélectionnez le plan de l'image et entrez une distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_gl.qm b/src/Mod/Image/Gui/Resources/translations/Image_gl.qm deleted file mode 100644 index 797f768053..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_gl.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_gl.ts b/src/Mod/Image/Gui/Resources/translations/Image_gl.ts deleted file mode 100644 index caf89c260e..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_gl.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Imaxe - - - - Create image plane... - Crear plano de imaxe... - - - - Create a planar image in the 3D space - Crear una imaxe plana nun espazo 3D - - - - CmdImageOpen - - - Image - Imaxe - - - - Open... - Abrir... - - - - Open image view - Abrir vista de imaxe - - - - CmdImageScaling - - - Image - Imaxe - - - - Scale... - Escala... - - - - Image Scaling - Escalado de Imaxe - - - - Command - - - Create ImagePlane - Crear plano de imaxe - - - - ImageGui::GLImageBox - - - Image pixel format - Formato de imaxe de píxeles - - - - Undefined type of colour space for image viewing - Non hai definido un espazo de cor para a visualización da imaxe - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Plano de imaxe - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Axustar imaxe - - - - Stretch the image to fit the view - Estalicar a imaxe para axustala á vista - - - - &1:1 scale - &Escala 1:1 - - - - Display the image at a 1:1 scale - Amosa a imaxe a escala 1:1 - - - - Standard - Estándar - - - - Ready... - Listo... - - - - grey - gris - - - - - - - - - - - - - zoom - zoom - - - - - - - - outside image - imaxe exterior - - - - QObject - - - - Images - Imaxes - - - - - All files - Tódolos ficheiros - - - - - Choose an image file to open - Escolme un ficheiro de imaxe para abrir - - - - Error opening image - Erro ó abrir a imaxe - - - - Could not load the chosen image - Non se puido cargar a imaxe escolmada - - - - Workbench - - - Image - Imaxe - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distance - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_hr.qm b/src/Mod/Image/Gui/Resources/translations/Image_hr.qm deleted file mode 100644 index ade29c5134..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_hr.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_hr.ts b/src/Mod/Image/Gui/Resources/translations/Image_hr.ts deleted file mode 100644 index be09f66af0..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_hr.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Prikaz - - - - Create image plane... - Napravi ravninu slike... - - - - Create a planar image in the 3D space - Napravi ravninsku sliku u 3D prostoru - - - - CmdImageOpen - - - Image - Prikaz - - - - Open... - Otvori ... - - - - Open image view - Otvori pogled slike - - - - CmdImageScaling - - - Image - Prikaz - - - - Scale... - Skalirajte... - - - - Image Scaling - Promjena veličine slike - - - - Command - - - Create ImagePlane - Stvori slikovnu ravninu - - - - ImageGui::GLImageBox - - - Image pixel format - format slike u pixelima - - - - Undefined type of colour space for image viewing - nedefinirani tip boja za gledanje slika - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Odaberite orijentaciju - - - - Image plane - Ploha slike - - - - XY-Plane - XY ravnina - - - - XZ-Plane - XZ-Ravnina - - - - YZ-Plane - YZ-Ravnina - - - - Reverse direction - Obrnutim smjerom - - - - Offset: - Odmak: - - - - ImageGui::ImageView - - - &Fit image - Prilagodi sliku - - - - Stretch the image to fit the view - Rastegni sliku da odgovara prikazu - - - - &1:1 scale - u mjerilu 1:1 - - - - Display the image at a 1:1 scale - Prikaz slike u mjerilu 1:1 - - - - Standard - Standard - - - - Ready... - Spreman... - - - - grey - siva - - - - - - - - - - - - - zoom - zum - - - - - - - - outside image - izvan slike - - - - QObject - - - - Images - Slike - - - - - All files - Sve datoteke - - - - - Choose an image file to open - Odaberite koju ce te sliku otvoriti - - - - Error opening image - Greška pri otvaranju slike - - - - Could not load the chosen image - Nije moguće učitati odabranu sliku - - - - Workbench - - - Image - Prikaz - - - - Image_Scaling - - - Scale image plane - Skaliranje ravnine slike - - - - Scales an image plane by defining a distance between two points - Skaliranje ravnine slike kroz definiciju udaljenosti između dvije točke - - - - Dialog - - - Scale image plane - Skaliranje ravnine slike - - - - Distance - Udaljenost - - - - Select first point - Odaberite početnu točku - - - - Enter distance - Unesite udaljenost - - - - Select image plane - Odaberite ravninu slike - - - - Select second point - Odaberite drugu točku - - - - Select Image Plane and type distance - Odabir ravninu slike i unesite udaljenost - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_hu.qm b/src/Mod/Image/Gui/Resources/translations/Image_hu.qm deleted file mode 100644 index adf0c8c2e3..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_hu.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_hu.ts b/src/Mod/Image/Gui/Resources/translations/Image_hu.ts deleted file mode 100644 index 82641e1a43..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_hu.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Kép - - - - Create image plane... - Kép sík létrehozása... - - - - Create a planar image in the 3D space - Hozzon létre egy síkbeli képet a 3D-s térben - - - - CmdImageOpen - - - Image - Kép - - - - Open... - Megnyitás... - - - - Open image view - Kép megnyitása megtekintése - - - - CmdImageScaling - - - Image - Kép - - - - Scale... - Lépték... - - - - Image Scaling - Kép méretezése - - - - Command - - - Create ImagePlane - Képsík létrehozása - - - - ImageGui::GLImageBox - - - Image pixel format - Képpont formátum - - - - Undefined type of colour space for image viewing - A képnéző által meghatározhatatlan típusú színtér - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Válasszon tájolást - - - - Image plane - Kép sík - - - - XY-Plane - XY-sík - - - - XZ-Plane - XZ-sík - - - - YZ-Plane - YZ-sík - - - - Reverse direction - Fordított irányban - - - - Offset: - Eltolás: - - - - ImageGui::ImageView - - - &Fit image - Kép kitöltse a képernyőt - - - - Stretch the image to fit the view - Nyújtsa ki a képet, hogy illeszkedjen a nézethez - - - - &1:1 scale - &1:1 léptékű - - - - Display the image at a 1:1 scale - A kép megjelenítése 1:1 méretarányban - - - - Standard - Szabvány - - - - Ready... - Kész ... - - - - grey - szürke - - - - - - - - - - - - - zoom - nagyítás - - - - - - - - outside image - külső kép - - - - QObject - - - - Images - Képek - - - - - All files - Összes fájl - - - - - Choose an image file to open - Egy képfájl kiválasztása megnyitásra - - - - Error opening image - Hiba a kép megnyitása során - - - - Could not load the chosen image - Nem sikerült betölteni a kiválasztott képet - - - - Workbench - - - Image - Kép - - - - Image_Scaling - - - Scale image plane - Kép sík méretezés - - - - Scales an image plane by defining a distance between two points - Képsíkot méretez két pont közti távolság megadásával - - - - Dialog - - - Scale image plane - Kép sík méretezés - - - - Distance - Távolság - - - - Select first point - Válassza ki az első pontot - - - - Enter distance - Távolság megadása - - - - Select image plane - Képsík kijelölése - - - - Select second point - Második pont kiválasztása - - - - Select Image Plane and type distance - Képsík kiválasztása és távolság beírása - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_id.qm b/src/Mod/Image/Gui/Resources/translations/Image_id.qm deleted file mode 100644 index 54bd36eb5b..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_id.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_id.ts b/src/Mod/Image/Gui/Resources/translations/Image_id.ts deleted file mode 100644 index f8e5d11132..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_id.ts +++ /dev/null @@ -1,217 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Gambar - - - - Create image plane... - Create image plane... - - - - Create a planar image in the 3D space - Create a planar image in the 3D space - - - - CmdImageOpen - - - Image - Gambar - - - - Open... - Buka... - - - - Open image view - Buka gambar pemandangan - - - - CmdImageScaling - - - Image - Gambar - - - - Scale... - Skala... - - - - Image Scaling - Skala Gambar - - - - Command - - - Create ImagePlane - Create ImagePlane - - - - ImageGui::GLImageBox - - - Image pixel format - Format piksel gambar - - - - Undefined type of colour space for image viewing - Undefined jenis ruang warna untuk melihat gambar - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Bidang gambar - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - & Gambar Fit - - - - Stretch the image to fit the view - Peregangan gambar agar sesuai dengan tampilan - - - - &1:1 scale - & Skala 1: 1 - - - - Display the image at a 1:1 scale - Tampilkan gambar pada skala 1: 1 - - - - Standard - Standar - - - - Ready... - Siap... - - - - grey - abu-abu - - - - - - - - - - - - - zoom - perbesaran - - - - - - - - outside image - gambar luar - - - - QObject - - - - Images - Gambar - - - - - All files - Semua file - - - - - Choose an image file to open - Pilih file gambar yang akan dibuka - - - - Error opening image - Kesalahan saat membuka gambar - - - - Could not load the chosen image - Tidak dapat memuat gambar yang dipilih - - - - Workbench - - - Image - Gambar - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_it.qm b/src/Mod/Image/Gui/Resources/translations/Image_it.qm deleted file mode 100644 index 355108fe45..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_it.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_it.ts b/src/Mod/Image/Gui/Resources/translations/Image_it.ts deleted file mode 100644 index 4783fc1628..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_it.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Immagine - - - - Create image plane... - Crea un piano immagine... - - - - Create a planar image in the 3D space - Crea un'immagine planare nello spazio 3D - - - - CmdImageOpen - - - Image - Immagine - - - - Open... - Apri... - - - - Open image view - Apri il visualizzatore di immagini - - - - CmdImageScaling - - - Image - Immagine - - - - Scale... - Scala... - - - - Image Scaling - Ridimensionamento dell'immagine - - - - Command - - - Create ImagePlane - Crea un piano immagine - - - - ImageGui::GLImageBox - - - Image pixel format - Formato pixel - - - - Undefined type of colour space for image viewing - Tipo di spazio colore indefinito per la visualizzazione delle immagini - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Orientamento - - - - Image plane - Piano dell'immagine - - - - XY-Plane - Piano XY - - - - XZ-Plane - Piano XZ - - - - YZ-Plane - Piano YZ - - - - Reverse direction - Direzione inversa - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Adatta immagine - - - - Stretch the image to fit the view - Stira l'immagine per adattarla alla vista - - - - &1:1 scale - Scala &1:1 - - - - Display the image at a 1:1 scale - Visualizza l'immagine in scala 1:1 - - - - Standard - Standard - - - - Ready... - Pronto... - - - - grey - grigio - - - - - - - - - - - - - zoom - zoom - - - - - - - - outside image - fuori dall'immagine - - - - QObject - - - - Images - Immagini - - - - - All files - Tutti i file - - - - - Choose an image file to open - Seleziona un file immagine da aprire - - - - Error opening image - Errore durante l'apertura dell'immagine - - - - Could not load the chosen image - Impossibile caricare l'immagine scelta - - - - Workbench - - - Image - Immagine - - - - Image_Scaling - - - Scale image plane - Scala un piano immagine - - - - Scales an image plane by defining a distance between two points - Scala un piano immagine definendo una distanza tra due punti - - - - Dialog - - - Scale image plane - Scala un piano immagine - - - - Distance - Distanza - - - - Select first point - Seleziona primo punto - - - - Enter distance - Inserisci distanza - - - - Select image plane - Seleziona piano immagine - - - - Select second point - Selezionare il secondo punto - - - - Select Image Plane and type distance - Selezionare il Piano Immagine e digitare distanza - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ja.qm b/src/Mod/Image/Gui/Resources/translations/Image_ja.qm deleted file mode 100644 index 1c4e6bc263..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_ja.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ja.ts b/src/Mod/Image/Gui/Resources/translations/Image_ja.ts deleted file mode 100644 index a0d1b4a5cb..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_ja.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - 画像 - - - - Create image plane... - イメージプレーンを作成... - - - - Create a planar image in the 3D space - 3D空間に平面画像を作成します - - - - CmdImageOpen - - - Image - 画像 - - - - Open... - 開く... - - - - Open image view - イメージビューで開く - - - - CmdImageScaling - - - Image - 画像 - - - - Scale... - 拡大縮小... - - - - Image Scaling - イメージの拡大縮小 - - - - Command - - - Create ImagePlane - イメージプレーンを作成 - - - - ImageGui::GLImageBox - - - Image pixel format - 画像のピクセルフォーマット - - - - Undefined type of colour space for image viewing - 表示中の画像の色空間は未定義です - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - 方向を選択 - - - - Image plane - イメージプレーン - - - - XY-Plane - XY 平面 - - - - XZ-Plane - XZ 平面 - - - - YZ-Plane - YZ 平面 - - - - Reverse direction - 逆方向 - - - - Offset: - オフセット: - - - - ImageGui::ImageView - - - &Fit image - フィット(&F) - - - - Stretch the image to fit the view - ビューに合わせて画像を拡大します - - - - &1:1 scale - 1:1スケール(&1) - - - - Display the image at a 1:1 scale - 1:1の尺度で画像を表示します - - - - Standard - 標準 - - - - Ready... - Ready... - - - - grey - グレー - - - - - - - - - - - - - zoom - ズーム - - - - - - - - outside image - 画像の外側 - - - - QObject - - - - Images - 画像 - - - - - All files - すべてのファイル - - - - - Choose an image file to open - 開く画像ファイルを選択 - - - - Error opening image - 画像を開く際にエラーが発生しました - - - - Could not load the chosen image - 選択された画像を読み込めません - - - - Workbench - - - Image - 画像 - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - 距離 - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ka.qm b/src/Mod/Image/Gui/Resources/translations/Image_ka.qm deleted file mode 100644 index 32a8e9f763..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_ka.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ka.ts b/src/Mod/Image/Gui/Resources/translations/Image_ka.ts deleted file mode 100644 index 112bab5297..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_ka.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - გამოსახულება - - - - Create image plane... - სურათის სიბრტყის შექმნა... - - - - Create a planar image in the 3D space - ბრტყელი სურათის 3D სივრცეში შექმნა - - - - CmdImageOpen - - - Image - გამოსახულება - - - - Open... - გახსნა... - - - - Open image view - სურათის გახსნა - - - - CmdImageScaling - - - Image - გამოსახულება - - - - Scale... - მასშტაბირება... - - - - Image Scaling - გამოსახულების მასშტაბირება - - - - Command - - - Create ImagePlane - სურათის სიბრტყის შექმნა - - - - ImageGui::GLImageBox - - - Image pixel format - გამოსახულების რასტრული ფორმატი - - - - Undefined type of colour space for image viewing - გამოსახულების სანახავად არჩეული ფერადი სივრცის არასწორი ტიპი - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - გამოსახულების სიბრტყელე - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - გამოსახულების &ჩატევა - - - - Stretch the image to fit the view - გამოსახულების გაწელვა ხედში ჩასატევად - - - - &1:1 scale - მასშტაბი &1:1 - - - - Display the image at a 1:1 scale - გამოსახულების 1:1 მასშტაბში ჩვენება - - - - Standard - ჩვეულებრივი - - - - Ready... - მზადაა... - - - - grey - რუხი - - - - - - - - - - - - - zoom - გადიდება - - - - - - - - outside image - გამოსახულების გარეთ - - - - QObject - - - - Images - გამოსახულებები - - - - - All files - ყველა ფაილი - - - - - Choose an image file to open - აირჩიეთ გასახსნელი გამოსახულება - - - - Error opening image - ფაილის გახსნის შეცდომა - - - - Could not load the chosen image - არჩეული გამოსახულების ჩატვირთვის შეცდომა - - - - Workbench - - - Image - გამოსახულება - - - - Image_Scaling - - - Scale image plane - გამოსახულების სიბრტყის მასშტაბირება - - - - Scales an image plane by defining a distance between two points - ორ წერტილს შუა მანძილზე დამოკიდებული გამოსახულების სიბრტყის მასშტაბირება - - - - Dialog - - - Scale image plane - გამოსახულების სიბრტყის მასშტაბირება - - - - Distance - Distance - - - - Select first point - აირჩიეთ პირველი წერტილი - - - - Enter distance - შეიყვანეთ მანძილი - - - - Select image plane - აირჩიეთ გამოსახულების სიბრტყე - - - - Select second point - აირჩიეთ მეორე წერტილი - - - - Select Image Plane and type distance - აირჩიეთ გამოსახულების სიბრტყე და შეიყვანეთ მანძილი - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_kab.qm b/src/Mod/Image/Gui/Resources/translations/Image_kab.qm deleted file mode 100644 index 3092df1c26..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_kab.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_kab.ts b/src/Mod/Image/Gui/Resources/translations/Image_kab.ts deleted file mode 100644 index a2b6a77ae1..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_kab.ts +++ /dev/null @@ -1,262 +0,0 @@ - - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance [mm] - Distance [mm] - - - - Select first point - Select first point - - - - <font color='red'>Enter distance</font> - <font color='red'>Enter distance</font> - - - - <font color='red'>Select ImagePlane</font> - <font color='red'>Select ImagePlane</font> - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - - CmdCreateImagePlane - - - Image - Tugna - - - - Create image plane... - Créer un plan d'image... - - - - Create a planar image in the 3D space - Créer une image plane dans l'espace 3D - - - - CmdImageOpen - - - Image - Tugna - - - - Open... - Ouvrir... - - - - Open image view - Ouvrir une image - - - - CmdImageScaling - - - Image - Tugna - - - - Scale... - Scale... - - - - Image Scaling - Image Scaling - - - - ImageGui::GLImageBox - - - - Image pixel format - Format de l'image en pixels - - - - - Undefined type of colour space for image viewing - Type d'espace colorimétrique indéfini - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Plan de l'image - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Adapter l'image - - - - Stretch the image to fit the view - Étirer l'image pour l'adapter à la vue - - - - &1:1 scale - Échelle &1:1 - - - - Display the image at a 1:1 scale - Afficher l'image à l'échelle 1:1 - - - - Standard - Tizeɣt - - - - Ready... - Prêt... - - - - grey - gris - - - - - - - - - - - - - zoom - zoom - - - - - - - - outside image - image extérieure - - - - QObject - - - - Images - Tugniwin - - - - - All files - Tous les fichiers - - - - - Choose an image file to open - Choisir un fichier d'image à ouvrir - - - - Error opening image - Error opening image - - - - Could not load the chosen image - Could not load the chosen image - - - - Workbench - - - Image - Tugna - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ko.qm b/src/Mod/Image/Gui/Resources/translations/Image_ko.qm deleted file mode 100644 index 40cd81526e..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_ko.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ko.ts b/src/Mod/Image/Gui/Resources/translations/Image_ko.ts deleted file mode 100644 index 5b927a59f4..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_ko.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - 이미지 - - - - Create image plane... - 이미지 평면 만들기... - - - - Create a planar image in the 3D space - 3D 공간에서 평면 이미지를 만들기 - - - - CmdImageOpen - - - Image - 이미지 - - - - Open... - 열기... - - - - Open image view - 이미지 보기 열기 - - - - CmdImageScaling - - - Image - 이미지 - - - - Scale... - Scale... - - - - Image Scaling - 이미지 크기조정 - - - - Command - - - Create ImagePlane - 이미지 평면 만들기 - - - - ImageGui::GLImageBox - - - Image pixel format - 이미지 픽셀 형식 - - - - Undefined type of colour space for image viewing - 이미지 보기를 위한 정의되지 않은 색상 공간 유형 - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - 이미지 평면 - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - 이미지 맞춤(&F) - - - - Stretch the image to fit the view - 보기에 맞게 이미지 늘리기 - - - - &1:1 scale - & 1:1 스케일 - - - - Display the image at a 1:1 scale - 이미지를 1:1 비율로 화면표시하기 - - - - Standard - 표준 - - - - Ready... - 준비... - - - - grey - 회색 - - - - - - - - - - - - - zoom - 확대/축소 - - - - - - - - outside image - 외면 이미지 - - - - QObject - - - - Images - 이미지 - - - - - All files - 모든 파일 - - - - - Choose an image file to open - 열려는 이미지 파일 고르기 - - - - Error opening image - 이미지 여는 중 오류 - - - - Could not load the chosen image - 선택한 이미지를 불러올 수 없습니다 - - - - Workbench - - - Image - 이미지 - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distance - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_lt.qm b/src/Mod/Image/Gui/Resources/translations/Image_lt.qm deleted file mode 100644 index 8beb9aab11..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_lt.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_lt.ts b/src/Mod/Image/Gui/Resources/translations/Image_lt.ts deleted file mode 100644 index 8a336db920..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_lt.ts +++ /dev/null @@ -1,217 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Paveikslėlis - - - - Create image plane... - Sukurti vaizdo plokštumą... - - - - Create a planar image in the 3D space - Sukurti plokštuminį vaizdą trimatėje erdvėje - - - - CmdImageOpen - - - Image - Paveikslėlis - - - - Open... - Atverti... - - - - Open image view - Atidaryti vaizdo rodinį - - - - CmdImageScaling - - - Image - Paveikslėlis - - - - Scale... - Mastelis... - - - - Image Scaling - Paveikslo dydžio keitimas - - - - Command - - - Create ImagePlane - Sukurti vaizdo plokštumą - - - - ImageGui::GLImageBox - - - Image pixel format - Vaizdo taško formatas - - - - Undefined type of colour space for image viewing - Nenustatytas spalvų erdvės tipas vaizdo peržiūrai - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Atvaizdo plokštuma - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Talpinti vaizdą - - - - Stretch the image to fit the view - Priderinti vaizdą, kad tilptų peržiūros srityje - - - - &1:1 scale - & 1:1 dydis - - - - Display the image at a 1:1 scale - Rodyti vaizdą tikruoju dydžiu - - - - Standard - Įprastinis - - - - Ready... - Pasirengęs... - - - - grey - pilka - - - - - - - - - - - - - zoom - priartinimas - - - - - - - - outside image - išorinis vaizdas - - - - QObject - - - - Images - Vaizdai - - - - - All files - Visi failai - - - - - Choose an image file to open - Pasirinkite vaizdo failą atvėrimui - - - - Error opening image - Klaida atidarant paveikslėlį - - - - Could not load the chosen image - Nepavyko įkelti pasirinkto paveikslėlio - - - - Workbench - - - Image - Paveikslėlis - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_nl.qm b/src/Mod/Image/Gui/Resources/translations/Image_nl.qm deleted file mode 100644 index 26a52ec58f..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_nl.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_nl.ts b/src/Mod/Image/Gui/Resources/translations/Image_nl.ts deleted file mode 100644 index 521a65c629..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_nl.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Afbeelding - - - - Create image plane... - Maak beeldvlak ... - - - - Create a planar image in the 3D space - Maak een vlakke afbeelding in de 3D-ruimte - - - - CmdImageOpen - - - Image - Afbeelding - - - - Open... - Openen... - - - - Open image view - Afbeeldingsweergave openen - - - - CmdImageScaling - - - Image - Afbeelding - - - - Scale... - Schaal... - - - - Image Scaling - Afbeelding schalen - - - - Command - - - Create ImagePlane - Maak beeldvlak - - - - ImageGui::GLImageBox - - - Image pixel format - Pixelformaat voor afbeelding - - - - Undefined type of colour space for image viewing - Ongedefinieerd type kleurruimte om beelden te bekijken - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Kies oriëntatie - - - - Image plane - Beeldvlak - - - - XY-Plane - XY-vlak - - - - XZ-Plane - XZ-vlak - - - - YZ-Plane - YZ-vlak - - - - Reverse direction - Richting omkeren - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Pas afbeelding - - - - Stretch the image to fit the view - Rek het beeld uit zodat het in de weergave past - - - - &1:1 scale - Schaal &1:1 - - - - Display the image at a 1:1 scale - Toon de afbeelding op schaal van 1:1 - - - - Standard - Standaard - - - - Ready... - Gereed... - - - - grey - grijs - - - - - - - - - - - - - zoom - inzoomen - - - - - - - - outside image - buiten afbeelding - - - - QObject - - - - Images - Afbeeldingen - - - - - All files - Alle bestanden - - - - - Choose an image file to open - Kies een afbeeldingsbestand om te openen - - - - Error opening image - Fout bij openen van de afbeelding - - - - Could not load the chosen image - De gekozen afbeelding kan niet worden geladen - - - - Workbench - - - Image - Afbeelding - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Afstand - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_no.qm b/src/Mod/Image/Gui/Resources/translations/Image_no.qm deleted file mode 100644 index e1de632430..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_no.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_no.ts b/src/Mod/Image/Gui/Resources/translations/Image_no.ts deleted file mode 100644 index c1d678487b..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_no.ts +++ /dev/null @@ -1,262 +0,0 @@ - - - - - Image_Scaling - - - Scale image plane - Skaler bildeplan - - - - Scales an image plane by defining a distance between two points - Skalerer et bildeplan ved å definere avstanden mellom to punkter - - - - Dialog - - - Scale image plane - Skaler bildeplan - - - - Distance [mm] - Lengde [mm] - - - - Select first point - Velg første punkt - - - - <font color='red'>Enter distance</font> - <font color='red'>Angi avstand</font> - - - - <font color='red'>Select ImagePlane</font> - <font color='red'>Velg bildeplan</font> - - - - Select second point - Velg punkt nummer 2 - - - - Select Image Plane and type distance - Velg bildeplan og angi distanse - - - - CmdCreateImagePlane - - - Image - Bilde - - - - Create image plane... - Opprett billedplan... - - - - Create a planar image in the 3D space - Lag et plant bilde i 3D-rommet - - - - CmdImageOpen - - - Image - Bilde - - - - Open... - Åpne... - - - - Open image view - Åpne bildevisning - - - - CmdImageScaling - - - Image - Bilde - - - - Scale... - Scale... - - - - Image Scaling - Bildeskalering - - - - ImageGui::GLImageBox - - - - Image pixel format - Bildepikselformat - - - - - Undefined type of colour space for image viewing - Udefinert type fargerom for bildevisning - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Bildeplan - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Tilpass bildet - - - - Stretch the image to fit the view - Strekk bildet slik at det passer visningen - - - - &1:1 scale - &1:1 skala - - - - Display the image at a 1:1 scale - Vis bildet i 1:1 skala - - - - Standard - Standard - - - - Ready... - Klar... - - - - grey - grå - - - - - - - - - - - - - zoom - zoom - - - - - - - - outside image - utenfor bildet - - - - QObject - - - - Images - Bilder - - - - - All files - Alle filer - - - - - Choose an image file to open - Velg en bildefil å åpne - - - - Error opening image - Feil ved åpning av bildefil - - - - Could not load the chosen image - Kunne ikke laste valgt bilde - - - - Workbench - - - Image - Bilde - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_pl.qm b/src/Mod/Image/Gui/Resources/translations/Image_pl.qm deleted file mode 100644 index 95d1ed569a..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_pl.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_pl.ts b/src/Mod/Image/Gui/Resources/translations/Image_pl.ts deleted file mode 100644 index b5f7551c4a..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_pl.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Obraz - - - - Create image plane... - Utwórz płaszczyznę obrazu... - - - - Create a planar image in the 3D space - Tworzy płaski obraz w przestrzeni 3D - - - - CmdImageOpen - - - Image - Obraz - - - - Open... - Otwórz... - - - - Open image view - Otwórz widok obrazu - - - - CmdImageScaling - - - Image - Obraz - - - - Scale... - Skaluj ... - - - - Image Scaling - Skalowanie obrazu - - - - Command - - - Create ImagePlane - Utwórz płaszczyznę obrazu - - - - ImageGui::GLImageBox - - - Image pixel format - Format pikseli w obrazie - - - - Undefined type of colour space for image viewing - Nieokreślony typ przestrzeni kolorów dla wyświetlenia obrazu - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Wybierz orientację - - - - Image plane - Płaszczyzna obrazu - - - - XY-Plane - Płaszczyzna XY - - - - XZ-Plane - Płaszczyzna XZ - - - - YZ-Plane - Płaszczyzna YZ - - - - Reverse direction - Odwróć kierunek - - - - Offset: - Przesunięcie: - - - - ImageGui::ImageView - - - &Fit image - &Dopasuj obraz - - - - Stretch the image to fit the view - Rozciąga obraz, aby dopasować do widoku - - - - &1:1 scale - &Skala 1: 1 - - - - Display the image at a 1:1 scale - Wyświetl obraz w skali 1:1 - - - - Standard - Standard - - - - Ready... - Gotowe ... - - - - grey - szary - - - - - - - - - - - - - zoom - powiększenie - - - - - - - - outside image - poza obrazem - - - - QObject - - - - Images - Obrazy - - - - - All files - Wszystkie pliki - - - - - Choose an image file to open - Wybierz plik obrazu, aby otworzyć - - - - Error opening image - Błąd podczas otwierania pliku obrazu - - - - Could not load the chosen image - Nie można załadować wybranego obrazu - - - - Workbench - - - Image - Obraz - - - - Image_Scaling - - - Scale image plane - Skaluj płaszczyznę obrazu - - - - Scales an image plane by defining a distance between two points - Skaluje płaszczyznę obrazu poprzez określenie odległości między dwoma punktami - - - - Dialog - - - Scale image plane - Skaluj płaszczyznę obrazu - - - - Distance - Odległość - - - - Select first point - Wybierz pierwszy punkt - - - - Enter distance - Wprowadź odległość - - - - Select image plane - Wybierz płaszczyznę obrazu - - - - Select second point - Wybierz drugi punkt - - - - Select Image Plane and type distance - Wybierz płaszczyznę obrazu i wpisz odległość - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_pt-BR.qm b/src/Mod/Image/Gui/Resources/translations/Image_pt-BR.qm deleted file mode 100644 index 8756eefa89..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_pt-BR.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_pt-BR.ts b/src/Mod/Image/Gui/Resources/translations/Image_pt-BR.ts deleted file mode 100644 index 9f86af2fa0..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_pt-BR.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Imagem - - - - Create image plane... - Criar um plano de imagem... - - - - Create a planar image in the 3D space - Criar uma imagem planar no espaço 3D - - - - CmdImageOpen - - - Image - Imagem - - - - Open... - Abrir... - - - - Open image view - Abrir o visualizador de imagem - - - - CmdImageScaling - - - Image - Imagem - - - - Scale... - Escala... - - - - Image Scaling - Escala da imagem - - - - Command - - - Create ImagePlane - Criar um plano de imagem - - - - ImageGui::GLImageBox - - - Image pixel format - Formato de pixel - - - - Undefined type of colour space for image viewing - Tipo de espaço de cor indefinido para visualização de imagens - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Escolher a orientação - - - - Image plane - Plano de imagem - - - - XY-Plane - Plano XY - - - - XZ-Plane - Plano XZ - - - - YZ-Plane - Plano YZ - - - - Reverse direction - Inverter direção - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Ajustar imagem - - - - Stretch the image to fit the view - Esticar a imagem para ajustar à janela - - - - &1:1 scale - Escala &1:1 - - - - Display the image at a 1:1 scale - Exibir a imagem na escala 1:1 - - - - Standard - Padrão - - - - Ready... - Pronto... - - - - grey - cinza - - - - - - - - - - - - - zoom - ampliação - - - - - - - - outside image - imagem externa - - - - QObject - - - - Images - Imagens - - - - - All files - Todos os arquivos - - - - - Choose an image file to open - Escolha um arquivo de imagem para abrir - - - - Error opening image - Erro ao abrir imagem - - - - Could not load the chosen image - Não foi possível carregar a imagem escolhida - - - - Workbench - - - Image - Imagem - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distância - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_pt-PT.qm b/src/Mod/Image/Gui/Resources/translations/Image_pt-PT.qm deleted file mode 100644 index a9d297dc59..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_pt-PT.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_pt-PT.ts b/src/Mod/Image/Gui/Resources/translations/Image_pt-PT.ts deleted file mode 100644 index cb1e80b44c..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_pt-PT.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Imagem - - - - Create image plane... - Criar plano de imagem ... - - - - Create a planar image in the 3D space - Criar uma imagem plana no espaço 3D - - - - CmdImageOpen - - - Image - Imagem - - - - Open... - Abrir... - - - - Open image view - Abrir a visualização da imagem - - - - CmdImageScaling - - - Image - Imagem - - - - Scale... - Escala... - - - - Image Scaling - Dimensionar imagem - - - - Command - - - Create ImagePlane - Criar Plano - - - - ImageGui::GLImageBox - - - Image pixel format - Formato de pixel de imagem - - - - Undefined type of colour space for image viewing - Tipo indefinido de espaço de cor para visualização da imagem - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Plano de imagem - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Ajustar imagem - - - - Stretch the image to fit the view - Esticar a imagem para ajustar a exibição - - - - &1:1 scale - &Escala 1:1 - - - - Display the image at a 1:1 scale - Exibir a imagem em escala 1:1 - - - - Standard - Padrão - - - - Ready... - Pronto... - - - - grey - Cinzento - - - - - - - - - - - - - zoom - ampliação - - - - - - - - outside image - imagem externa - - - - QObject - - - - Images - Imagens - - - - - All files - Todos os ficheiros - - - - - Choose an image file to open - Escolha um ficheiro de imagem para abrir - - - - Error opening image - Erro ao abrir imagem - - - - Could not load the chosen image - Não foi possível carregar a imagem escolhida - - - - Workbench - - - Image - Imagem - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distância - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ro.qm b/src/Mod/Image/Gui/Resources/translations/Image_ro.qm deleted file mode 100644 index 3bde83ea26..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_ro.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ro.ts b/src/Mod/Image/Gui/Resources/translations/Image_ro.ts deleted file mode 100644 index 2ce9024aac..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_ro.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Imagine - - - - Create image plane... - Creaza plan pentru imagine... - - - - Create a planar image in the 3D space - Creaza o imagine planara in spatiul 3D - - - - CmdImageOpen - - - Image - Imagine - - - - Open... - Deschide... - - - - Open image view - Afișează imaginea - - - - CmdImageScaling - - - Image - Imagine - - - - Scale... - Scară... - - - - Image Scaling - Scalarea imaginii - - - - Command - - - Create ImagePlane - Create ImagePlane - - - - ImageGui::GLImageBox - - - Image pixel format - Formatul pixelilor pentru imagine - - - - Undefined type of colour space for image viewing - Tip de spațiu de culoare nedefinit pentru vizualizarea imaginii - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Imagine plană - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - Potrivește imaginea întreagă în fereastră - - - - Stretch the image to fit the view - Deformează imaginea pentru a umple fereastra - - - - &1:1 scale - Scara &1:1 - - - - Display the image at a 1:1 scale - Afișează imaginea la scara 1:1 - - - - Standard - Standard - - - - Ready... - Gata... - - - - grey - gri - - - - - - - - - - - - - zoom - zoom - - - - - - - - outside image - în afara imaginii - - - - QObject - - - - Images - Imagini - - - - - All files - Toate fisierele - - - - - Choose an image file to open - Alegeți un fișier imagine pentru deschidere - - - - Error opening image - Eroare la deschiderea imaginii - - - - Could not load the chosen image - Imposibil de încărcat imaginea aleasă - - - - Workbench - - - Image - Imagine - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distance - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ru.qm b/src/Mod/Image/Gui/Resources/translations/Image_ru.qm deleted file mode 100644 index 674af2b7f6..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_ru.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_ru.ts b/src/Mod/Image/Gui/Resources/translations/Image_ru.ts deleted file mode 100644 index f2096e91e2..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_ru.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Изображение - - - - Create image plane... - Создать плоскость изображения... - - - - Create a planar image in the 3D space - Создать двухмерное изображение в трёхмерном пространстве - - - - CmdImageOpen - - - Image - Изображение - - - - Open... - Открыть... - - - - Open image view - Открыть изображение - - - - CmdImageScaling - - - Image - Изображение - - - - Scale... - Масштаб... - - - - Image Scaling - Масштабирование изображения - - - - Command - - - Create ImagePlane - Создать плоскость изображения - - - - ImageGui::GLImageBox - - - Image pixel format - Растровый формат изображения - - - - Undefined type of colour space for image viewing - Неопределенный тип цветового пространства для просмотра изображений - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Выберите ориентацию - - - - Image plane - Плоскость изображения - - - - XY-Plane - Плоскость XY - - - - XZ-Plane - Плоскость XZ - - - - YZ-Plane - Плоскость YZ - - - - Reverse direction - Развернуть направление - - - - Offset: - Смещение: - - - - ImageGui::ImageView - - - &Fit image - &Растянуть изображение - - - - Stretch the image to fit the view - Растянуть изображение по размеру вида - - - - &1:1 scale - &Масштаб 1:1 - - - - Display the image at a 1:1 scale - Отображает изображение в масштабе 1:1 - - - - Standard - Стандарт - - - - Ready... - Готово... - - - - grey - Серый - - - - - - - - - - - - - zoom - Масштаб - - - - - - - - outside image - за пределами изображения - - - - QObject - - - - Images - Изображения - - - - - All files - Все файлы - - - - - Choose an image file to open - Выберите файл изображения, чтобы открыть - - - - Error opening image - Ошибка открытия изображения - - - - Could not load the chosen image - Не удалось загрузить выбранное изображение - - - - Workbench - - - Image - Изображение - - - - Image_Scaling - - - Scale image plane - Масштабировать плоскость изображения - - - - Scales an image plane by defining a distance between two points - Масштабирует плоскость изображения по расстоянию между двумя точками - - - - Dialog - - - Scale image plane - Масштабировать плоскость изображения - - - - Distance - Расстояние - - - - Select first point - Выберите первую точку - - - - Enter distance - Введите расстояние - - - - Select image plane - Выберите плоскость изображения - - - - Select second point - Выберите вторую точку - - - - Select Image Plane and type distance - Выберите Плоскость Изображения и введите расстояние - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_sk.qm b/src/Mod/Image/Gui/Resources/translations/Image_sk.qm deleted file mode 100644 index 9928e1d674..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_sk.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_sk.ts b/src/Mod/Image/Gui/Resources/translations/Image_sk.ts deleted file mode 100644 index 42985920b2..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_sk.ts +++ /dev/null @@ -1,217 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Obrázok - - - - Create image plane... - Vytvoriť rovinu obrázka... - - - - Create a planar image in the 3D space - Vytvorí planárný obrázok v 3D priestore - - - - CmdImageOpen - - - Image - Obrázok - - - - Open... - Otvoriť... - - - - Open image view - Otvoriť prehliadanie obrázku - - - - CmdImageScaling - - - Image - Obrázok - - - - Scale... - Scale... - - - - Image Scaling - Zmena mierky obrázku - - - - Command - - - Create ImagePlane - Vytvoriť rovinu obrázku - - - - ImageGui::GLImageBox - - - Image pixel format - Pixel formát obrázku - - - - Undefined type of colour space for image viewing - Nedefinovaný typ farebného systému pre prehliadanie obrázku - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Rovina obrázka - - - - XY-Plane - Rovina XY - - - - XZ-Plane - XZ rovina - - - - YZ-Plane - YZ rovine - - - - Reverse direction - Reverse direction - - - - Offset: - Odstup: - - - - ImageGui::ImageView - - - &Fit image - &Prispôsobiť obrázok - - - - Stretch the image to fit the view - Roztiahnút obrázok do pohľadu - - - - &1:1 scale - &Mierka 1:1 - - - - Display the image at a 1:1 scale - Zobratiť obrázok v mierke 1:1 - - - - Standard - Štandardné - - - - Ready... - Hotovo... - - - - grey - šedá - - - - - - - - - - - - - zoom - priblíženie - - - - - - - - outside image - mimo obraz - - - - QObject - - - - Images - Obrázky - - - - - All files - Všetky súbory - - - - - Choose an image file to open - Vyberte súbor s obrázkom na otvorenie - - - - Error opening image - Chyba pri otváraní obrázka - - - - Could not load the chosen image - Nepodarilo sa otvoriť zvolený obrázok - - - - Workbench - - - Image - Obrázok - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_sl.qm b/src/Mod/Image/Gui/Resources/translations/Image_sl.qm deleted file mode 100644 index a30a6a8031..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_sl.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_sl.ts b/src/Mod/Image/Gui/Resources/translations/Image_sl.ts deleted file mode 100644 index 4841052f84..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_sl.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Slika - - - - Create image plane... - Ustvari ravnino slike... - - - - Create a planar image in the 3D space - Ustvari ravninsko sliko v prostoru 3D - - - - CmdImageOpen - - - Image - Slika - - - - Open... - Odpri... - - - - Open image view - Odpri pogled slike - - - - CmdImageScaling - - - Image - Slika - - - - Scale... - Povečava... - - - - Image Scaling - Velikost slike - - - - Command - - - Create ImagePlane - Ustvari slikovno ravnino - - - - ImageGui::GLImageBox - - - Image pixel format - Zapis slike v slikovnih točkah - - - - Undefined type of colour space for image viewing - Nedoločena vrsta barvnega prostora za ogled slike - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Ravnina slike - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Prilagodi sliko - - - - Stretch the image to fit the view - Raztegni sliko na velikost pogleda - - - - &1:1 scale - Merilo &1:1 - - - - Display the image at a 1:1 scale - Prikaži sliko v merilu 1:1 - - - - Standard - Običajno - - - - Ready... - Pripravljeni … - - - - grey - siva - - - - - - - - - - - - - zoom - povečava - - - - - - - - outside image - izven slike - - - - QObject - - - - Images - Slike - - - - - All files - Vse datoteke - - - - - Choose an image file to open - Izberite sliko, ki jo želite odpreti - - - - Error opening image - Napaka pri odpiranju slike - - - - Could not load the chosen image - Izbrane slike ni bilo mogoče naložiti - - - - Workbench - - - Image - Slika - - - - Image_Scaling - - - Scale image plane - Prevelikosti ravnine slike - - - - Scales an image plane by defining a distance between two points - Spremeni velikost ravnine slike z določitvijo razdalje med točkama - - - - Dialog - - - Scale image plane - Prevelikosti ravnine slike - - - - Distance - Distance - - - - Select first point - Izberite prvo točko - - - - Enter distance - Vnesite razdaljo - - - - Select image plane - Izberi ravnino slike - - - - Select second point - Izberite drugo točko - - - - Select Image Plane and type distance - Izberite ravnino slike in vnesite razdaljo - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_sr-CS.qm b/src/Mod/Image/Gui/Resources/translations/Image_sr-CS.qm deleted file mode 100644 index 80371a84b4..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_sr-CS.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_sr-CS.ts b/src/Mod/Image/Gui/Resources/translations/Image_sr-CS.ts deleted file mode 100644 index 7ade6568e1..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_sr-CS.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Slika - - - - Create image plane... - Stavi sliku na ravan... - - - - Create a planar image in the 3D space - Stavi sliku na neku od ravni u 3D prostoru - - - - CmdImageOpen - - - Image - Slika - - - - Open... - Otvori... - - - - Open image view - Otvori pretragu slika - - - - CmdImageScaling - - - Image - Slika - - - - Scale... - Razmera... - - - - Image Scaling - Skaliranje slike - - - - Command - - - Create ImagePlane - Stavite sliku na ravan - - - - ImageGui::GLImageBox - - - Image pixel format - Rasterski format slike - - - - Undefined type of colour space for image viewing - Nedefinisani tip boje prostora za prikaz slike - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Slika na ravni - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Uklopi sliku - - - - Stretch the image to fit the view - Prilagodi sliku dimenzijama pogleda - - - - &1:1 scale - Razmera &1:1 - - - - Display the image at a 1:1 scale - Prikaži sliku u razmeri 1:1 - - - - Standard - Standard - - - - Ready... - Spreman... - - - - grey - siva - - - - - - - - - - - - - zoom - zumiranje - - - - - - - - outside image - izvan slike - - - - QObject - - - - Images - Slike - - - - - All files - Sve datoteke - - - - - Choose an image file to open - Izaberi datoteku slike koju želiš da otvoriš - - - - Error opening image - Greška pri otvaranju slike - - - - Could not load the chosen image - Nije moguće učitati izabranu sliku - - - - Workbench - - - Image - Slika - - - - Image_Scaling - - - Scale image plane - Skaliraj sliku - - - - Scales an image plane by defining a distance between two points - Skalira sliku u ravni definisanjem rastojanja između dve tačke - - - - Dialog - - - Scale image plane - Skaliraj sliku - - - - Distance - Distance - - - - Select first point - Izaberi prvu tačku - - - - Enter distance - Unesi rastojanje - - - - Select image plane - Izaberi sliku na ravni - - - - Select second point - Izaberi drugu tačku - - - - Select Image Plane and type distance - Izaberi sliku i upiši rastojanje - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_sr.qm b/src/Mod/Image/Gui/Resources/translations/Image_sr.qm deleted file mode 100644 index 09f7ab3450..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_sr.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_sr.ts b/src/Mod/Image/Gui/Resources/translations/Image_sr.ts deleted file mode 100644 index 3991971e58..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_sr.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Слика - - - - Create image plane... - Стави слику на раван... - - - - Create a planar image in the 3D space - Стави слику на неку од равни у 3Д простору - - - - CmdImageOpen - - - Image - Слика - - - - Open... - Отвори... - - - - Open image view - Отвори преглед слике - - - - CmdImageScaling - - - Image - Слика - - - - Scale... - Размера... - - - - Image Scaling - Скалирање слике - - - - Command - - - Create ImagePlane - Ставите слику на раван - - - - ImageGui::GLImageBox - - - Image pixel format - Формат пиксела слике - - - - Undefined type of colour space for image viewing - Недефинисани тип боје простора за приказ слике - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Слика на равни - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Уклопи слику - - - - Stretch the image to fit the view - Увећај слику за боље уклапање - - - - &1:1 scale - Размера &1:1 - - - - Display the image at a 1:1 scale - Прикажи слику у размери 1:1 - - - - Standard - Normalno - - - - Ready... - Спреман... - - - - grey - сива - - - - - - - - - - - - - zoom - зумирање - - - - - - - - outside image - изван слике - - - - QObject - - - - Images - Слике - - - - - All files - Све датотеке - - - - - Choose an image file to open - Изабери датотеку слике коју желиш да отвориш - - - - Error opening image - Грешка при отварању слике - - - - Could not load the chosen image - Није могуће учитати изабрану слику - - - - Workbench - - - Image - Слика - - - - Image_Scaling - - - Scale image plane - Скалирај слику - - - - Scales an image plane by defining a distance between two points - Скалира слику у равни дефинисањем растојања између две тачке - - - - Dialog - - - Scale image plane - Скалирај слику - - - - Distance - Distance - - - - Select first point - Изабери прву тачку - - - - Enter distance - Унеси растојање - - - - Select image plane - Изабери слику на равни - - - - Select second point - Изабери другу тачку - - - - Select Image Plane and type distance - Изабери слику и упиши растојање - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_sv-SE.qm b/src/Mod/Image/Gui/Resources/translations/Image_sv-SE.qm deleted file mode 100644 index 36f7f720d0..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_sv-SE.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_sv-SE.ts b/src/Mod/Image/Gui/Resources/translations/Image_sv-SE.ts deleted file mode 100644 index 38070ff0b8..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_sv-SE.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Bild - - - - Create image plane... - Skapa bildplan ... - - - - Create a planar image in the 3D space - Skapa en plan bild i 3D-rymden - - - - CmdImageOpen - - - Image - Bild - - - - Open... - Öppna... - - - - Open image view - Öppna bildvy - - - - CmdImageScaling - - - Image - Bild - - - - Scale... - Skala... - - - - Image Scaling - Bildskalning - - - - Command - - - Create ImagePlane - Create ImagePlane - - - - ImageGui::GLImageBox - - - Image pixel format - Bildens pixelformat - - - - Undefined type of colour space for image viewing - Odefinierad färgrymd för bildvisning - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Välj orientering - - - - Image plane - Bildplan - - - - XY-Plane - XY-plan - - - - XZ-Plane - XZ-Plan - - - - YZ-Plane - YZ-Plan - - - - Reverse direction - Omvänd riktning - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - An&passa bild - - - - Stretch the image to fit the view - Skala bilden till vyn - - - - &1:1 scale - &1:1 Skala - - - - Display the image at a 1:1 scale - Visa bilden i 1:1 skala - - - - Standard - Standard - - - - Ready... - Klar... - - - - grey - Grå - - - - - - - - - - - - - zoom - zoom - - - - - - - - outside image - Utanför bild - - - - QObject - - - - Images - Bilder - - - - - All files - Alla filer - - - - - Choose an image file to open - Välj en bildfil att öppna - - - - Error opening image - Fel vid öppning av bild - - - - Could not load the chosen image - Kunde inte ladda den valda bilden - - - - Workbench - - - Image - Bild - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distans - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_tr.qm b/src/Mod/Image/Gui/Resources/translations/Image_tr.qm deleted file mode 100644 index cc6d9e55f2..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_tr.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_tr.ts b/src/Mod/Image/Gui/Resources/translations/Image_tr.ts deleted file mode 100644 index 73684d0ec3..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_tr.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Görüntü - - - - Create image plane... - Görüntü düzlemini oluştur... - - - - Create a planar image in the 3D space - 3B uzayda düzlemsel bir resim oluştur - - - - CmdImageOpen - - - Image - Görüntü - - - - Open... - Aç... - - - - Open image view - Resim görünümünü aç - - - - CmdImageScaling - - - Image - Görüntü - - - - Scale... - Ölçeklendir... - - - - Image Scaling - Görüntü Ölçekleniyor - - - - Command - - - Create ImagePlane - GörüntüDüzlemi Oluştur - - - - ImageGui::GLImageBox - - - Image pixel format - Görüntü piksel biçimi - - - - Undefined type of colour space for image viewing - Resmi görüntülemek için tanılanamayan bir renk uzayı seçili - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Görüntü düzlemi - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Resmi sığdır - - - - Stretch the image to fit the view - Resmi, görünüme sığacak şekilde uzat - - - - &1:1 scale - &1:1 oran - - - - Display the image at a 1:1 scale - Birebir oranla resmi görüntüle - - - - Standard - Standart - - - - Ready... - Hazır... - - - - grey - gri - - - - - - - - - - - - - zoom - yakınlaş - - - - - - - - outside image - dış görünüm - - - - QObject - - - - Images - Resimler - - - - - All files - Tüm dosyalar - - - - - Choose an image file to open - Açmak için bir görüntü dosyası seçin - - - - Error opening image - Dosya açılırken hata oldu - - - - Could not load the chosen image - Seçilen resim yüklenemedi - - - - Workbench - - - Image - Görüntü - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Uzaklık - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_uk.qm b/src/Mod/Image/Gui/Resources/translations/Image_uk.qm deleted file mode 100644 index 3bb197c92e..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_uk.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_uk.ts b/src/Mod/Image/Gui/Resources/translations/Image_uk.ts deleted file mode 100644 index b079b09d84..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_uk.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Зображення - - - - Create image plane... - Створити площину зображення... - - - - Create a planar image in the 3D space - Створити плоске зображення у 3D-просторі - - - - CmdImageOpen - - - Image - Зображення - - - - Open... - Відкрити... - - - - Open image view - Відкрити зображення - - - - CmdImageScaling - - - Image - Зображення - - - - Scale... - Масштаб... - - - - Image Scaling - Масштабування зображення - - - - Command - - - Create ImagePlane - Створити площину зображення - - - - ImageGui::GLImageBox - - - Image pixel format - Формат пікселя зображення - - - - Undefined type of colour space for image viewing - Невизначений тип кольору простору для перегляду зображень - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Оберіть орієнтацію - - - - Image plane - Площина зображення - - - - XY-Plane - Площина XY - - - - XZ-Plane - Площина XZ - - - - YZ-Plane - Площина YZ - - - - Reverse direction - Зворотний напрямок - - - - Offset: - Зсув: - - - - ImageGui::ImageView - - - &Fit image - &Вмістити зображення - - - - Stretch the image to fit the view - Розтягнути зображення до розмірів виду - - - - &1:1 scale - Масштаб &1:1 - - - - Display the image at a 1:1 scale - Показати зображення в масштабі 1:1 - - - - Standard - Стандартно - - - - Ready... - Готово... - - - - grey - сірий - - - - - - - - - - - - - zoom - масштаб - - - - - - - - outside image - зовнішнє зображення - - - - QObject - - - - Images - Зображення - - - - - All files - Всі файли - - - - - Choose an image file to open - Оберіть файл зображення для відкриття - - - - Error opening image - Не вдалося відкрити файл зображення - - - - Could not load the chosen image - Не вдалося завантажити вибране зображення - - - - Workbench - - - Image - Зображення - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Відстань - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_val-ES.qm b/src/Mod/Image/Gui/Resources/translations/Image_val-ES.qm deleted file mode 100644 index 3b651a33ac..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_val-ES.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_val-ES.ts b/src/Mod/Image/Gui/Resources/translations/Image_val-ES.ts deleted file mode 100644 index d7fc0a78cf..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_val-ES.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Imatge - - - - Create image plane... - Crea un pla d'imatge... - - - - Create a planar image in the 3D space - Crea una imatge plana en l'espai 3D - - - - CmdImageOpen - - - Image - Imatge - - - - Open... - Obri... - - - - Open image view - Obri la vista d'imatge - - - - CmdImageScaling - - - Image - Imatge - - - - Scale... - Redimensiona... - - - - Image Scaling - Escalat de la imatge - - - - Command - - - Create ImagePlane - Create ImagePlane - - - - ImageGui::GLImageBox - - - Image pixel format - Format de píxel d'imatge - - - - Undefined type of colour space for image viewing - Tipus d'espai acolorit no definit per a la visualització de la imatge - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Pla d'imatge - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Ajusta la imatge - - - - Stretch the image to fit the view - Estira la imatge perquè s'ajuste a la vista - - - - &1:1 scale - escala &1:1 - - - - Display the image at a 1:1 scale - Visualitza la imatge a escala 1:1 - - - - Standard - Estàndard - - - - Ready... - Preparat... - - - - grey - gris - - - - - - - - - - - - - zoom - zoom - - - - - - - - outside image - imatge exterior - - - - QObject - - - - Images - Imatges - - - - - All files - Tots els fitxers - - - - - Choose an image file to open - Trieu un fitxer d'imatge per a obrir-lo - - - - Error opening image - S'ha produït un error en obrir la imatge. - - - - Could not load the chosen image - No s'ha pogut carregar la imatge triada. - - - - Workbench - - - Image - Imatge - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distance - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_vi.qm b/src/Mod/Image/Gui/Resources/translations/Image_vi.qm deleted file mode 100644 index 2561fc2e2f..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_vi.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_vi.ts b/src/Mod/Image/Gui/Resources/translations/Image_vi.ts deleted file mode 100644 index 46de4ac82a..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_vi.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - Hình ảnh - - - - Create image plane... - Tạo mặt phẳng hình ảnh... - - - - Create a planar image in the 3D space - Tạo hình ảnh phẳng trong không gian 3D - - - - CmdImageOpen - - - Image - Hình ảnh - - - - Open... - Mở... - - - - Open image view - Mở chế độ xem ảnh - - - - CmdImageScaling - - - Image - Hình ảnh - - - - Scale... - Chia tỷ lệ... - - - - Image Scaling - Image Scaling - - - - Command - - - Create ImagePlane - Create ImagePlane - - - - ImageGui::GLImageBox - - - Image pixel format - Định dạng pixel hình ảnh - - - - Undefined type of colour space for image viewing - Không xác định được kiểu màu trong không gian để xem hình ảnh - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - Mặt phẳng ảnh - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &Điều chỉnh ảnh vừa khớp - - - - Stretch the image to fit the view - Kéo giãn hình ảnh để vừa khớp với chế độ xem - - - - &1:1 scale - tỷ lệ &1:1 - - - - Display the image at a 1:1 scale - Hiển thị hình ảnh ở tỷ lệ 1: 1 - - - - Standard - Tiêu chuẩn - - - - Ready... - Sẵn sàng... - - - - grey - màu xám - - - - - - - - - - - - - zoom - thu phóng - - - - - - - - outside image - hình ảnh bên ngoài - - - - QObject - - - - Images - Hình ảnh - - - - - All files - Tất cả các tệp - - - - - Choose an image file to open - Chọn tệp hình ảnh để mở - - - - Error opening image - Lỗi khi mở ảnh - - - - Could not load the chosen image - Không thể tải ảnh đã chọn - - - - Workbench - - - Image - Hình ảnh - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - Distance - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_zh-CN.qm b/src/Mod/Image/Gui/Resources/translations/Image_zh-CN.qm deleted file mode 100644 index dca7a50bb2..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_zh-CN.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_zh-CN.ts b/src/Mod/Image/Gui/Resources/translations/Image_zh-CN.ts deleted file mode 100644 index b6c97a955a..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_zh-CN.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - 图像 - - - - Create image plane... - 创建平面图像... - - - - Create a planar image in the 3D space - 在三维空间中创建平面图像 - - - - CmdImageOpen - - - Image - 图像 - - - - Open... - 打开... - - - - Open image view - 打开图像视图 - - - - CmdImageScaling - - - Image - 图像 - - - - Scale... - 缩放... - - - - Image Scaling - 图像缩放 - - - - Command - - - Create ImagePlane - 创建平面图像 - - - - ImageGui::GLImageBox - - - Image pixel format - 图像像素格式 - - - - Undefined type of colour space for image viewing - 图片视图的色彩模式未定义 - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - 选择方向 - - - - Image plane - 图像平面 - - - - XY-Plane - XY平面 - - - - XZ-Plane - XZ平面 - - - - YZ-Plane - YZ平面 - - - - Reverse direction - 反转方向 - - - - Offset: - 偏移: - - - - ImageGui::ImageView - - - &Fit image - 适应图像尺寸(&F) - - - - Stretch the image to fit the view - 拉伸图像以适应视图 - - - - &1:1 scale - &1:1 缩放 - - - - Display the image at a 1:1 scale - 按1:1比例显示图像 - - - - Standard - 标准 - - - - Ready... - 就绪... - - - - grey - 灰色 - - - - - - - - - - - - - zoom - 缩放 - - - - - - - - outside image - 图像外部 - - - - QObject - - - - Images - 图像 - - - - - All files - 所有文件 - - - - - Choose an image file to open - 选择一个图像文件打开 - - - - Error opening image - 打开图像时出错。 - - - - Could not load the chosen image - 不能加载所选图像 - - - - Workbench - - - Image - 图像 - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - 距离 - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - Select image plane - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/Resources/translations/Image_zh-TW.qm b/src/Mod/Image/Gui/Resources/translations/Image_zh-TW.qm deleted file mode 100644 index 9b2130fede..0000000000 Binary files a/src/Mod/Image/Gui/Resources/translations/Image_zh-TW.qm and /dev/null differ diff --git a/src/Mod/Image/Gui/Resources/translations/Image_zh-TW.ts b/src/Mod/Image/Gui/Resources/translations/Image_zh-TW.ts deleted file mode 100644 index 1b5224fa21..0000000000 --- a/src/Mod/Image/Gui/Resources/translations/Image_zh-TW.ts +++ /dev/null @@ -1,268 +0,0 @@ - - - - - CmdCreateImagePlane - - - Image - 影像 - - - - Create image plane... - 建立影像平面... - - - - Create a planar image in the 3D space - 於3D空間建立平面影像 - - - - CmdImageOpen - - - Image - 影像 - - - - Open... - 開啟... - - - - Open image view - 開啟影像檢視 - - - - CmdImageScaling - - - Image - 影像 - - - - Scale... - 比例... - - - - Image Scaling - 影像縮放 - - - - Command - - - Create ImagePlane - 建立平面影像 - - - - ImageGui::GLImageBox - - - Image pixel format - 影像像素格式 - - - - Undefined type of colour space for image viewing - 未定義影像視圖的色彩模式 - - - - ImageGui::ImageOrientationDialog - - - Choose orientation - Choose orientation - - - - Image plane - 影像平面 - - - - XY-Plane - XY-Plane - - - - XZ-Plane - XZ-Plane - - - - YZ-Plane - YZ-Plane - - - - Reverse direction - Reverse direction - - - - Offset: - Offset: - - - - ImageGui::ImageView - - - &Fit image - &符合影像尺寸 - - - - Stretch the image to fit the view - 延伸影像符合視圖大小 - - - - &1:1 scale - &1:1 比例 - - - - Display the image at a 1:1 scale - 在1:1的比例顯示影像 - - - - Standard - 標準 - - - - Ready... - 準備... - - - - grey - 灰色 - - - - - - - - - - - - - zoom - 縮放 - - - - - - - - outside image - 外部影像 - - - - QObject - - - - Images - 影像 - - - - - All files - 所有檔案 - - - - - Choose an image file to open - 選擇要打開的影像檔 - - - - Error opening image - 開啟圖像發生錯誤 - - - - Could not load the chosen image - 無法載入選擇的圖像 - - - - Workbench - - - Image - 影像 - - - - Image_Scaling - - - Scale image plane - Scale image plane - - - - Scales an image plane by defining a distance between two points - Scales an image plane by defining a distance between two points - - - - Dialog - - - Scale image plane - Scale image plane - - - - Distance - 距離 - - - - Select first point - Select first point - - - - Enter distance - Enter distance - - - - Select image plane - 選擇影像平面 - - - - Select second point - Select second point - - - - Select Image Plane and type distance - Select Image Plane and type distance - - - diff --git a/src/Mod/Image/Gui/ViewProviderImagePlane.cpp b/src/Mod/Image/Gui/ViewProviderImagePlane.cpp deleted file mode 100644 index a1c4fbdb07..0000000000 --- a/src/Mod/Image/Gui/ViewProviderImagePlane.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2011 Jürgen Riegel (juergen.riegel@web.de) * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#include "PreCompiled.h" -#ifndef _PreComp_ -# include -# include -# include -# include - -# include -# include -# include -# include -# include -# include -#endif - -#include -#include -#include - -#include "ViewProviderImagePlane.h" - - -using namespace Gui; -using namespace ImageGui; -using namespace Image; - - -PROPERTY_SOURCE(ImageGui::ViewProviderImagePlane, Gui::ViewProviderGeometryObject) - -ViewProviderImagePlane::ViewProviderImagePlane() -{ - texture = new SoTexture2; - texture->ref(); - - pcCoords = new SoCoordinate3(); - pcCoords->ref(); -} - -ViewProviderImagePlane::~ViewProviderImagePlane() -{ - pcCoords->unref(); - texture->unref(); -} - -void ViewProviderImagePlane::attach(App::DocumentObject *pcObj) -{ - ViewProviderGeometryObject::attach(pcObj); - - // NOTE: SoFCSelection node has beem removed because it led to - // problems using the image as a construction plane with the - // draft commands - SoSeparator* planesep = new SoSeparator; - planesep->addChild(pcCoords); - - SoTextureCoordinate2 *textCoord = new SoTextureCoordinate2; - textCoord->point.set1Value(0,0,0); - textCoord->point.set1Value(1,1,0); - textCoord->point.set1Value(2,1,1); - textCoord->point.set1Value(3,0,1); - planesep->addChild(textCoord); - - // texture - texture->model = SoTexture2::MODULATE; - planesep->addChild(texture); - - planesep->addChild(pcShapeMaterial); - - // plane - pcCoords->point.set1Value(0,0,0,0); - pcCoords->point.set1Value(1,1,0,0); - pcCoords->point.set1Value(2,1,1,0); - pcCoords->point.set1Value(3,0,1,0); - SoFaceSet *faceset = new SoFaceSet; - faceset->numVertices.set1Value(0,4); - planesep->addChild(faceset); - - addDisplayMaskMode(planesep, "ImagePlane"); -} - -void ViewProviderImagePlane::setDisplayMode(const char* ModeName) -{ - if (strcmp("ImagePlane",ModeName) == 0) - setDisplayMaskMode("ImagePlane"); - ViewProviderGeometryObject::setDisplayMode(ModeName); -} - -std::vector ViewProviderImagePlane::getDisplayModes() const -{ - std::vector StrList; - StrList.emplace_back("ImagePlane"); - return StrList; -} - -bool ViewProviderImagePlane::loadSvg(const char* filename, float x, float y, QImage& img) -{ - QFileInfo fi(QString::fromUtf8(filename)); - if (fi.suffix().toLower() == QLatin1String("svg")) { - QPixmap px = BitmapFactory().pixmapFromSvg(filename, QSize((int)x,(int)y)); - img = px.toImage(); - return true; - } - - return false; -} - -void ViewProviderImagePlane::updateData(const App::Property* prop) -{ - Image::ImagePlane* pcPlaneObj = static_cast(pcObject); - if (prop == &pcPlaneObj->XSize || prop == &pcPlaneObj->YSize) { - float x = pcPlaneObj->XSize.getValue(); - float y = pcPlaneObj->YSize.getValue(); - - //pcCoords->point.setNum(4); - pcCoords->point.set1Value(0,-(x/2),-(y/2),0.0); - pcCoords->point.set1Value(1,+(x/2),-(y/2),0.0); - pcCoords->point.set1Value(2,+(x/2),+(y/2),0.0); - pcCoords->point.set1Value(3,-(x/2),+(y/2),0.0); - - QImage impQ; - loadSvg(pcPlaneObj->ImageFile.getValue(), x, y, impQ); - if (!impQ.isNull()) { - SoSFImage img; - // convert to Coin bitmap - BitmapFactory().convert(impQ,img); - texture->image = img; - } - } - else if (prop == &pcPlaneObj->ImageFile) { - float x = pcPlaneObj->XSize.getValue(); - float y = pcPlaneObj->YSize.getValue(); - QImage impQ; - if (!loadSvg(pcPlaneObj->ImageFile.getValue(),x,y, impQ)) - impQ.load(QString::fromUtf8(pcPlaneObj->ImageFile.getValue())); - if (!impQ.isNull()) { - SoSFImage img; - // convert to Coin bitmap - BitmapFactory().convert(impQ,img); - texture->image = img; - } - } - else { - Gui::ViewProviderGeometryObject::updateData(prop); - } -} diff --git a/src/Mod/Image/Gui/Workbench.cpp b/src/Mod/Image/Gui/Workbench.cpp deleted file mode 100644 index 07c3c78bdb..0000000000 --- a/src/Mod/Image/Gui/Workbench.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2005 Werner Mayer * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#include "PreCompiled.h" - -#include - -#include "Workbench.h" - - -using namespace ImageGui; - -#if 0 // needed for Qt's lupdate utility - qApp->translate("Workbench", "Image"); -#endif - -/// @namespace ImageGui @class Workbench -TYPESYSTEM_SOURCE(ImageGui::Workbench, Gui::StdWorkbench) - -Workbench::Workbench() -{ -} - -Workbench::~Workbench() -{ -} - -Gui::ToolBarItem* Workbench::setupToolBars() const -{ - Gui::ToolBarItem* root = StdWorkbench::setupToolBars(); - Gui::ToolBarItem* part = new Gui::ToolBarItem(root); - part->setCommand("Image"); - *part << "Image_Open" << "Image_CreateImagePlane"; -#if HAVE_OPENCV2 - *part << "Image_CapturerTest"; -#endif - *part << "Image_Scaling"; - return root; -} - -Gui::ToolBarItem* Workbench::setupCommandBars() const -{ - Gui::ToolBarItem* root = new Gui::ToolBarItem; - Gui::ToolBarItem* img = new Gui::ToolBarItem(root); - img->setCommand("Image"); - *img << "Image_Open"; -#if HAVE_OPENCV2 - *img << "Image_CapturerTest"; -#endif - return root; -} diff --git a/src/Mod/Image/Gui/Workbench.h b/src/Mod/Image/Gui/Workbench.h deleted file mode 100644 index e8a67b91d3..0000000000 --- a/src/Mod/Image/Gui/Workbench.h +++ /dev/null @@ -1,50 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2005 Werner Mayer * - * * - * This file is part of the FreeCAD CAx development system. * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Library General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Library General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this library; see the file COPYING.LIB. If not, * - * write to the Free Software Foundation, Inc., 59 Temple Place, * - * Suite 330, Boston, MA 02111-1307, USA * - * * - ***************************************************************************/ - -#ifndef IMAGE_WORKBENCH_H -#define IMAGE_WORKBENCH_H - -#include -#include - -namespace ImageGui { - -/** - * @author Werner Mayer - */ -class ImageGuiExport Workbench : public Gui::StdWorkbench -{ - TYPESYSTEM_HEADER_WITH_OVERRIDE(); - -public: - Workbench(); - ~Workbench() override; - -protected: - Gui::ToolBarItem* setupToolBars() const override; - Gui::ToolBarItem* setupCommandBars() const override; -}; - -} // namespace ImageGui - - -#endif // IMAGE_WORKBENCH_H diff --git a/src/Mod/Image/Gui/XpmImages.h b/src/Mod/Image/Gui/XpmImages.h deleted file mode 100644 index ff18e3f7b5..0000000000 --- a/src/Mod/Image/Gui/XpmImages.h +++ /dev/null @@ -1,122 +0,0 @@ -/*************************************************************************** - * * - * This is a header file containing xpm images for the image view. * - * * - * Author: Graeme van der Vlugt * - * Copyright: Imetric 3D GmbH * - * Year: 2004 * - * * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 2 of the * - * License, or (at your option) any later version. * - * for detail see the LICENCE text file. * - * * - ***************************************************************************/ - -#ifndef XpmImages_H -#define XpmImages_H - -namespace ImageGui -{ - -/* XPM */ -static const char *image_stretch[]={ -"16 16 2 1", -". c #000000", -"# c #ffffff", -"................", -".##############.", -".#....####....#.", -".#..########..#.", -".#.#.######.#.#.", -".#.##.####.##.#.", -".#####.##.#####.", -".######..######.", -".######..######.", -".#####.##.#####.", -".#.##.####.##.#.", -".#.#.######.#.#.", -".#..########..#.", -".#....####....#.", -".##############.", -"................"}; - -/* XPM */ -static const char *image_oneToOne[]={ -"16 16 2 1", -". c #000000", -"# c #ffffff", -"................", -".##############.", -".##############.", -".###.#######.##.", -".##..######..##.", -".#.#.#####.#.##.", -".###.##..###.##.", -".###.##..###.##.", -".###.#######.##.", -".###.##..###.##.", -".###.##..###.##.", -".###.#######.##.", -".##...#####...#.", -".##############.", -".##############.", -"................"}; - -#if 0 -/* XPM */ -static const char *image_orig[]={ -"16 16 5 1", -". c #000000", -"b c #000080", -"a c #008000", -"c c #404040", -"# c #800000", -"................", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -"................", -".cccccccccccccc.", -".cccccccccccccc.", -".cccccccccccccc.", -".cccccccccccccc.", -".cccccccccccccc.", -"................"}; - -/* XPM */ -static const char *image_bright[]={ -"16 16 5 1", -". c #000000", -"b c #0000ff", -"a c #00ff00", -"c c #c0c0c0", -"# c #ff0000", -"................", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -".#####aaaabbbbb.", -"................", -".cccccccccccccc.", -".cccccccccccccc.", -".cccccccccccccc.", -".cccccccccccccc.", -".cccccccccccccc.", -"................"}; -#endif - -} // namespace ImageGui - -#endif // XpmImages_H diff --git a/src/Mod/Image/ImageGlobal.h b/src/Mod/Image/ImageGlobal.h deleted file mode 100644 index 26cca10062..0000000000 --- a/src/Mod/Image/ImageGlobal.h +++ /dev/null @@ -1,32 +0,0 @@ -/*************************************************************************** - * Copyright (c) Imetric 4D Imaging Sarl * - * * - * Author: Werner Mayer * - * * - ***************************************************************************/ - -#include - -#ifndef IMAGE_GLOBAL_H -#define IMAGE_GLOBAL_H - - -// Image -#ifndef ImageExport -#ifdef Image_EXPORTS -# define ImageExport FREECAD_DECL_EXPORT -#else -# define ImageExport FREECAD_DECL_IMPORT -#endif -#endif - -// ImageGui -#ifndef ImageGuiExport -#ifdef ImageGui_EXPORTS -# define ImageGuiExport FREECAD_DECL_EXPORT -#else -# define ImageGuiExport FREECAD_DECL_IMPORT -#endif -#endif - -#endif //IMAGE_GLOBAL_H diff --git a/src/Mod/Image/ImageTools/_CommandImageScaling.py b/src/Mod/Image/ImageTools/_CommandImageScaling.py deleted file mode 100644 index 1cda69899f..0000000000 --- a/src/Mod/Image/ImageTools/_CommandImageScaling.py +++ /dev/null @@ -1,204 +0,0 @@ -# *************************************************************************** -# * Copyright (c) 2016 Victor Titov (DeepSOIC) * -# * * -# * This program is free software; you can redistribute it and/or modify * -# * it under the terms of the GNU Lesser General Public License (LGPL) * -# * as published by the Free Software Foundation; either version 2 of * -# * the License, or (at your option) any later version. * -# * for detail see the LICENCE text file. * -# * * -# * This program is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -# * GNU Library General Public License for more details. * -# * * -# * You should have received a copy of the GNU Library General Public * -# * License along with this program; if not, write to the Free Software * -# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -# * USA * -# * * -# *************************************************************************** -"""Provides the Image_Scaling GuiCommand.""" - -__title__ = "ImageTools._CommandImageScaling" -__author__ = "JAndersM" -__url__ = "http://www.freecadweb.org/index-fr.html" -__version__ = "00.02" -__date__ = "03/05/2019" - -import math -import FreeCAD -from PySide import QtCore - -if FreeCAD.GuiUp: - from PySide import QtGui - import pivy.coin as pvy - - import FreeCADGui - -# Translation-related code -# See forum thread "A new Part tool is being born... JoinFeatures!" -# http://forum.freecadweb.org/viewtopic.php?f=22&t=11112&start=30#p90239 - try: - _fromUtf8 = QtCore.QString.fromUtf8 - except (Exception): - def _fromUtf8(s): - return s - - translate = FreeCAD.Qt.translate - -# command class -class _CommandImageScaling: - "Command to Scale an Image to an Image Plane" - def GetResources(self): - return {'Pixmap': "Image_Scaling", - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Image_Scaling", "Scale image plane"), - 'Accel': "", - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Image_Scaling", "Scales an image plane by defining a distance between two points")} - - def Activated(self): - import draftguitools.gui_trackers as trackers - cmdCreateImageScaling(name="ImageScaling", trackers=trackers) - - def IsActive(self): - if FreeCAD.ActiveDocument: - return True - else: - return False - -if FreeCAD.GuiUp: - FreeCADGui.addCommand('Image_Scaling', _CommandImageScaling()) - - -# helper -def cmdCreateImageScaling(name, trackers): - - def distance(p1,p2): - dx=p2[0]-p1[0] - dy=p2[1]-p1[1] - dz=p2[2]-p1[2] - return math.sqrt(dx*dx+dy*dy+dz*dz) - - def centerOnScreen (widg): - '''centerOnScreen() - Centers the window on the screen.''' - resolution = QtGui.QDesktopWidget().screenGeometry() # TODO: fix multi monitor support - xp=(resolution.width() / 2) - widg.frameGeometry().width()/2 - yp=(resolution.height() / 2) - widg.frameGeometry().height()/2 - widg.move(xp, yp) - - class Ui_Dialog(object): - def setupUi(self, Dialog): - self.view = FreeCADGui.ActiveDocument.ActiveView - self.stack = [] - self.callback = self.view.addEventCallbackPivy(pvy.SoMouseButtonEvent.getClassTypeId(),self.getpoint) - self.callmouse=self.view.addEventCallbackPivy(pvy.SoLocation2Event.getClassTypeId(),self.getmousepoint) - self.distance=0 - self.dialog=Dialog - Dialog.setObjectName(_fromUtf8("Dialog")) - Dialog.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) - - self.verticalLayout = QtGui.QVBoxLayout(Dialog) - self.verticalLayout.setObjectName("verticalLayout") - self.horizontalLayout = QtGui.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") - - self.label = QtGui.QLabel(Dialog) - self.label.setObjectName(_fromUtf8("label")) - self.horizontalLayout.addWidget(self.label) - - self.quantity = FreeCADGui.UiLoader().createWidget("Gui::InputField") - self.quantity.setParent(Dialog) - self.quantity.setProperty('unit', 'mm') - self.quantity.setObjectName(_fromUtf8("QuantityField")) - self.horizontalLayout.addWidget(self.quantity) - - self.label1 = QtGui.QLabel(Dialog) - self.label1.setObjectName(_fromUtf8("label1")) - - self.buttonBox = QtGui.QDialogButtonBox(Dialog) - self.buttonBox.setOrientation(QtCore.Qt.Horizontal) - self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) - self.buttonBox.setObjectName(_fromUtf8("buttonBox")) - self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setEnabled(False) - - self.verticalLayout.addLayout(self.horizontalLayout) - self.verticalLayout.addWidget(self.label1) - self.verticalLayout.addWidget(self.buttonBox) - - self.retranslateUi(Dialog) - QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), self.accept) - QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), self.reject) - QtCore.QMetaObject.connectSlotsByName(Dialog) - self.tracker = trackers.lineTracker(scolor=(1,0,0)) - self.tracker.raiseTracker() - self.tracker.on() - self.dialog.show() - - def retranslateUi(self, Dialog): - Dialog.setWindowTitle(translate("Dialog", "Scale image plane", None)) - self.label.setText(translate("Dialog", "Distance", None)) - self.label1.setText(translate("Dialog", "Select first point", None)) - - def accept(self): - sel = FreeCADGui.Selection.getSelection() - try: - d = self.quantity.property('rawValue') - s=d/self.distance - sel[0].XSize.Value=sel[0].XSize.Value*s - sel[0].YSize.Value=sel[0].YSize.Value*s - FreeCAD.Console.PrintMessage("Image: Scale="+str(s)+"\n") - self.tracker.off() - self.tracker.finalize() - self.dialog.hide() - FreeCADGui.SendMsgToActiveView("ViewFit") - except (ValueError, ZeroDivisionError): - self.label1.setText("" + translate("Dialog", "Enter distance", None) + "") - return - except (IndexError, AttributeError): - self.label1.setText("" + translate("Dialog", "Select image plane", None) + "") - return - - def reject(self): - if len(self.stack) != 2: - self.view.removeEventCallbackPivy(pvy.SoMouseButtonEvent.getClassTypeId(),self.callback) - self.view.removeEventCallbackPivy(pvy.SoLocation2Event.getClassTypeId(),self.callmouse) - self.stack=[] - self.tracker.off() - self.tracker.finalize() - self.dialog.hide() - - def getmousepoint(self, event_cb): - event = event_cb.getEvent() - if len(self.stack)==1: - pos = event.getPosition() - point = self.view.getPoint(pos[0],pos[1]) - self.tracker.p2(point) - - def getpoint(self,event_cb): - event = event_cb.getEvent() - if event.getState() == pvy.SoMouseButtonEvent.DOWN: - pos = event.getPosition() - point = self.view.getPoint(pos[0],pos[1]) - self.stack.append(point) - self.label1.setText(translate("Dialog", "Select second point", None)) - if len(self.stack)==1: - self.tracker.p1(point) - elif len(self.stack) == 2: - self.distance=distance(self.stack[0], self.stack[1]) - self.tracker.p2(point) - self.view.removeEventCallbackPivy(pvy.SoMouseButtonEvent.getClassTypeId(),self.callback) - self.view.removeEventCallbackPivy(pvy.SoLocation2Event.getClassTypeId(),self.callmouse) - self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setEnabled(True) - self.label1.setText(translate("Dialog", "Select Image Plane and type distance", None)) - - #Init - if FreeCADGui.ActiveDocument is not None: - d = QtGui.QWidget() - ui = Ui_Dialog() - ui.setupUi(d) - centerOnScreen (d) - else: - FreeCAD.Console.PrintWarning("no document to work with\n") - - #FreeCAD.ActiveDocument.commitTransaction() diff --git a/src/Mod/Image/ImageTools/__init__.py b/src/Mod/Image/ImageTools/__init__.py deleted file mode 100644 index 3ecb2c32bf..0000000000 --- a/src/Mod/Image/ImageTools/__init__.py +++ /dev/null @@ -1,35 +0,0 @@ -# *************************************************************************** -# * Copyright (c) 2016 Victor Titov (DeepSOIC) * -# * * -# * This program is free software; you can redistribute it and/or modify * -# * it under the terms of the GNU Lesser General Public License (LGPL) * -# * as published by the Free Software Foundation; either version 2 of * -# * the License, or (at your option) any later version. * -# * for detail see the LICENCE text file. * -# * * -# * This program is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -# * GNU Library General Public License for more details. * -# * * -# * You should have received a copy of the GNU Library General Public * -# * License along with this program; if not, write to the Free Software * -# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -# * USA * -# * * -# *************************************************************************** - -__title__ = "ImageTools package" # from "Macro Image Scaling" -__author__ = "JAndersM" -__url__ = "https://www.freecadweb.org/wiki/Macro_Image_Scaling" -__version__ = "00.01" -__date__ = "19/01/2016" - - -__tutorial__ = "https://youtu.be/2iFE40uHrA8" -__forum__ = "https://forum.freecadweb.org/viewtopic.php?f=3&t=14265" - - -## @package ImageTools -# \ingroup Image -# \brief ImageTools Package for Image workbench diff --git a/src/Mod/Image/Init.py b/src/Mod/Image/Init.py deleted file mode 100644 index b69749c4e4..0000000000 --- a/src/Mod/Image/Init.py +++ /dev/null @@ -1,32 +0,0 @@ -#*************************************************************************** -#* Copyright (c) 2001,2002 Juergen Riegel * -#* * -#* This file is part of the FreeCAD CAx development system. * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* FreeCAD is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Lesser General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with FreeCAD; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#***************************************************************************/ - -# FreeCAD init script of the Image module - -# Get the Parameter Group of this module -ParGrp = App.ParamGet("System parameter:Modules").GetGroup("Image") - -# Set the needed information -ParGrp.SetString("HelpIndex", "Image/Help/index.html") -ParGrp.SetString("WorkBenchName", "Image") -ParGrp.SetString("WorkBenchModule", "ImageWorkbench.py") diff --git a/src/Mod/Image/InitGui.py b/src/Mod/Image/InitGui.py deleted file mode 100644 index ca28e35960..0000000000 --- a/src/Mod/Image/InitGui.py +++ /dev/null @@ -1,53 +0,0 @@ -#*************************************************************************** -#* Copyright (c) 2002,2003 Juergen Riegel * -#* * -#* This file is part of the FreeCAD CAx development system. * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* FreeCAD is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Lesser General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with FreeCAD; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#***************************************************************************/ - -# Image gui init module -# -# Gathering all the information to start FreeCAD -# This is the second one of three init scripts, the third one -# runs when the gui is up - - -class ImageWorkbench ( Workbench ): - "Image workbench object" - def __init__(self): - self.__class__.Icon = FreeCAD.getResourceDir() + "Mod/Image/Resources/icons/ImageWorkbench.svg" - self.__class__.MenuText = "Image" - self.__class__.ToolTip = "Image workbench" - - def Initialize(self): - # load the module - import ImageGui - - try: - import ImageTools._CommandImageScaling - except ImportError as err: - FreeCAD.Console.PrintError("Features from ImageTools package cannot be loaded. {err}\n".format(err= str(err))) - - def GetClassName(self): - return "ImageGui::Workbench" - -Gui.addWorkbench(ImageWorkbench()) - -# Append the open handler -FreeCAD.addImportType("Image formats (*.bmp *.jpg *.png *.xpm)","ImageGui") diff --git a/src/Mod/Image/image.dox b/src/Mod/Image/image.dox deleted file mode 100644 index 926943a927..0000000000 --- a/src/Mod/Image/image.dox +++ /dev/null @@ -1,5 +0,0 @@ -/** \defgroup IMAGE Image - * \ingroup CWORKBENCHES - * \brief Tools and utilities to work with bitmap images - */ -