Coder Social home page Coder Social logo

itom-project / itom Goto Github PK

View Code? Open in Web Editor NEW
12.0 2.0 4.0 83.38 MB

itom core repository

Home Page: https://itom-project.github.io/

License: Other

C++ 86.59% CMake 2.60% C 1.46% Batchfile 0.02% QMake 0.01% HTML 0.16% CSS 0.05% Python 8.52% Shell 0.06% Starlark 0.13% MATLAB 0.02% SCSS 0.39%
guis ide lab-automation python signal-processing opencv pointcloudlibrary

itom's Introduction

itom

Generic badge License: LGPL v3

made-with-python made-with-opencv made-with-qt

Welcome to the open source software itom. In addition to a Python IDE, it enables the operation of measurement systems with multiple hardware components, such as cameras, AD converters, actuators, motor stages, and the management of your laboratory automation. The graphical user interface provides a quick and easy access to all components, complex measurement tasks and algorithms can be scripted using the embedded python scripting language and self-defined user interfaces finally provide a possibility to adapt itomto your special needs. External hardware or algorithms are added to itom by an integrated plugin system.

In order to learn more about itom, see the official homepage itom-project.github.io or read the user documentation

What is this project for?

This project contains the core application of:

  • itom core application

Furthermore, you may also need the plugins and designer plugins repositories to get all itom functionalities.

How do I get set up?

  • In order to get itom either download the ready-to-use setups for Windows 32bit and 64bit. Use the all-in-one installer in order to get itom including Python and some important Python packages or use the simple installer if you already have an appropriate version of Python installed on your computer.
  • Clone the central repositoy itomProject with the --recursive Option.
git clone --recursive --remote [email protected]:itom-project/itomProject.git

This will download the submodule repositories itom core, plugins plugins and designer plugins. For more information see the corresponding section in the user documentation.

  • itom is written in C++ and requires the Qt framework in version >5.6 (Qt6 is supported for version > 6.2). It is further dependent on OpenCV, the Point Cloud Library (optional) and Python 3.6 or higher including its important package Numpy.

Contribution

You are welcome to use and test itom. If you want to you are invited to participate in the development of itom or some of its plugins. If you found any bug, feel free to post an issue.

pre-commit hooks

After the first cloning of the repositories, the pre-commit hooks should be installed once.

python -m pre_commit install

(optional) run against all files

It's usually a good idea to run the hooks against all of the files when adding new hooks (usually pre-commit will only run on the changed files during git hooks).

python -m pre_commit run --all-files

Licensing

The core components and the main application of itom are covered by the GNU Library General Public Licence (GNU LGPL). All components belonging to the SDK of itom (e.g. dataObject, pointCloud, addInInterface,…) are additionally covered by an itom exception. The main idea of this exception is to allow other libraries (e.g. plugins) to include and link against components of itom SDK independent on the specific license model of the respective "other" library. All files belonging to the itom SDK are included in the folder SDK that is shipped with any setup or included in the build directory (when build from sources).

itom Exception

The full text license of LGPL and itom exception is also included as file COPYING in the source distributions and setups.

All plugins and designer-plugins that can be integrated into itom can have their own licensing. Therefore the user is referred to the specific licensing documents or statements of each external library (plugin).

Contact

itom is being developed since 2011 by

Institut für Technische Optik

University of Stuttgart

Stuttgart

Germany

in co-operation with

twip Optical Solutions GmbH

Stuttgart

Germany

itom's People

Contributors

89spartacus avatar bbertschinger avatar binbs avatar drowdemon avatar gegelle avatar hefl99 avatar ito-jzh avatar itoadmin avatar itombuild avatar itoresources avatar johannkrauter avatar magro11 avatar photoniker avatar pinoquio1891 avatar tobiashaist avatar twip-os avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

itom's Issues

WidgetPropHelpDock

If you change the loaded databases and click apply, they will be loaded in the background.
If you change the selection again and click apply, while it´s still loading in the background, an error occurs in CreateItemrec(...)

[Issue created by M. Gronle: 2014-05-20]

[Comment created by M. Gronle: 2014-05-20]
fixes #15, crash if help database is reloaded while a previous load is still executed in the worker thread

→ <>

In-plane line cut on graphs y-axis not resizing to data when mouse moves vertically

Hi Marc,

A minor bug I just noticed. When using the in-plane line cut facility on a graph, the data is laid out and the vertical axis re-sizes fine as long as the mouse changes the x-axis value. If the mouse is moved vertically and the data point values within the line's points decrease below the maximum, or increase above the minimum, the y-axis does not re-size.

Image file attached showing the image's maximum present in the area of the blue line with the in-plane line being clipped.

There was no selection below to reduce the priority of this bug below 'trivial'!

Cheers

Mark

[Issue created by Mark Holton: 2014-03-13]
[Last updated on bitbucket: 2018-11-22]

[Comment created by Mark Holton: 2014-04-10]
Hi Marc,
I will get on to this asap. Many thanks for looking into it.
Cheers
Mark

[Comment created by M. Gronle: 2014-04-08]
Hi Mark,

it might be that I found the error leading to your reported issue. I could not reproduce your described scenario but a similar scenario. I fixed one thing in the itom1DQwtPlot. Hope this also solves the behaviour you mentioned above. Maybe you can update your designerPlugin repository and rebuild the designerPlugins in order to check this (if you have time).

Cheers

Marc

Itom crashes if creation of pcl failes

Itom crashes due to uncatched exception when creating pcl with not enough memory.

[Issue created by Wolfram Lyda: 2014-08-28]
[Last updated on bitbucket: 2018-11-22]

python33.dll missing

Hi, I just ran the latest AllInOne-installer. When starting itom afterwards an error appears, saying that python33.dll cannot be found. When looking into the python-folder, that was just created, I can see a python3.dll but no python33.dll.

Any ideas?

[Issue created by florian mauch: 2015-04-24]
[Last updated on bitbucket: 2018-11-22]

[Comment created by florian mauch: 2015-04-27]
Hi Marc,

I can't find the dll in the system folder you mention. It's quite possible that I ran the setup with no administration rights. I have to activate them manually each time I need them on my machine. I can't tell for sure though...

[Comment created by M. Gronle: 2015-04-27]
Usually, the setup of python copies the library python34.dll (or similar) into Windows/System32 or Windows/SysWOW64 (for 32bit python under 64bit Windows). This is the directory where itom tries to get the python library from. Manually adding other directories is allowed, too. Can you check, if you have the library file in one of windows system directories? Maybe, you installed Python with insufficient rights such that the copying failed. This would be worth to know in order to adapt the documentation or setups.

Cheers
Marc

[Comment created by florian mauch: 2015-04-24]
never mind. I found the python33.dll in the base folder of python. However, I had to add that path to the system path variable manually.

Now it works

Python class navigator

The Python class navigator should remember its current class and method if the tab is switched and the old tab is reselected again.

[Issue created by M. Gronle: 2015-01-29]

[Comment created by M. Gronle: 2015-01-29]
fixes issue #31 (scripts remember their class and method chosen in class navigator)

→ <<cset 4677296>>

Duplicated items at startup in "last files menu"

In German:
Wenn itom gestartet wird und beim letzten Shutdown noch ein Skript offen war, dann wird beim Neustart im "Recently used files" menu im Hauptfenster als auch in allen Skriptfenstern das zuletzt geöffnete (und beim Neustart ebenfalls wieder geöffnete) Skript doppelt angezeigt. Klickt man dann einmal auf den Eintrag, wird das schon offene Skript aktiviert und die Menüeinträge aktualisieren sich automatisch (doppelte sind gelöscht).

Die doppelten Einträge beim Start sind also falsch.

Itom2dQwtPlot: AxisInterval properties return wrong values

Reading the "xAxisInterval" property of an Itom2dQwtPlot does not return the current values but the size of the plotted object -> [0, size_of_object]

Setting values works as expected.

Applies to xAxisInterval, yAxisInterval, zAxisInterval

[Issue created by Valeriano Ferreras Paz: 2014-09-19]

[Comment created by M. Gronle: 2014-09-19]
this issue is fixed in https://bitbucket.org/itom/designerplugins/commits/4d61a95b6e47e934ef8d3b8aa2f2427301c80609

Mechanism for FreeRun Mode of an actuator required

Currently actuators only support setting of a new position via setPosAbs and setPosRel. However, AerotechEnsemble support a free-run-mode where the axis simply move into a given direction without specificaion of a specific coordinate.

In the current state this can only be achieved with workaround-qualitz, i.e. by creating a custom-function to enable the free-run-mode. A more reliable and profound solution is required here.

[Issue created by Andre Kempe: 2014-07-24]
[Last updated on bitbucket: 2018-11-22]

[Comment created by Wolfram Lyda: 2014-07-24]
The philosophy of the plugin systems is to offer compatibility between different plugins of similar types. The basic interface is designed for this purpose.

FreeRun-Modes (for software joysticks) are an uncommon functionality of axis controller. Most axis controller offer a hardware joystick. Also the parameter to call such a function may vary with the axis number and trajectory generation methods.Hence this is no standard function. For such non-standard-function of plugins itom offers the execFuncs which can be called via python and c++.

Further more calling / starting such a free run from python will cause a leak of security due to several possible errors (e.g. stopping the python-script, runtime-errors, ...). Their is also only one python thread running at a time. Hence the stop-signal will not be processed until the current python script has returned to idle state. In combination with the leak of real time interupt-processing of windows such a soft joystick may delay randomly and sometime will not stop at the desired position.

If you want to implement such a software joystick, you should this by directly connecting the GUI-element with the hardware-plugin via signal / slot or non-blocking invokes in c++. You avoid the circuitous massaround with python. An exemplary implementation is shown within the designerPlugin MotorController (3dConnexion-Support enabled) and the hardware plugin DummyMotor.

Best regards
Wolfram

cmake cant find Qt5

When I'm trying to build itom on openSUSE 42.1 with qt5 installed I get following output:

#!

cmake .. -DBUILD_WITH_PCL=OFF -DBUILD_QTVERSION=Qt5
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- CMake >= 3.0
-- OpenMP found and enabled for release compilation
-- OpenCV components: core
-- CMake >= 3.0
-- OpenMP found and enabled for release compilation
-- CMake >= 3.0
-- OpenMP found and enabled for release compilation
CMake Error at ItomBuildMacros.cmake:172 (MESSAGE):
  Qt5 could not be found on this computer
Call Stack (most recent call first):
  commonQt/CMakeLists.txt:45 (FIND_PACKAGE_QT)


-- OpenCV components: core
-- /home/user/devel/itom/build_debug/commonQt
CMake Error at ItomBuildMacros.cmake:350 (QT4_GET_MOC_FLAGS):
  Unknown CMake command "QT4_GET_MOC_FLAGS".
Call Stack (most recent call first):
  commonQt/CMakeLists.txt:110 (QT4_WRAP_CPP_ITOM)


-- Configuring incomplete, errors occurred!
See also "/home/user/devel/itom/build_debug/CMakeFiles/CMakeOutput.log".

Code that trying to find Qt5 located in ItomBuildMacros.cmake:163
find_package(Qt5 COMPONENTS Core QUIET)

And it works when trying with small hello world project:

CmakeLists.txt

#!cmake

cmake_minimum_required(VERSION 2.8.8)
project(hello-world)

# Tell CMake to run moc when necessary:
set(CMAKE_AUTOMOC ON)
# As moc files are generated in the binary dir, tell CMake
# to always look for includes there:
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5 COMPONENTS Core QUIET)
message("Qt5 dir:" ${Qt5_DIR})
find_package(Qt5Core QUIET)
message("Qt5 dir:" ${Qt5_DIR})

add_executable(hello_world main.cpp)

qt5_use_modules(hello_world Core)                          

output:

#!
user@linux:~/devel/testcmake/build> cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Qt5 dir:/usr/lib64/cmake/Qt5
Qt5 dir:/usr/lib64/cmake/Qt5
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/devel/testcmake/build

#!

cmake --version
cmake version 3.3.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
#!

qmake-qt5 --version
QMake version 3.0
Using Qt version 5.5.1 in /usr/lib64

[Issue created by Виталий Томин: 2016-03-06]
[Last updated on bitbucket: 2016-03-07]

[Comment created by M. Gronle: 2016-03-07]
Thanks for the issue and your fix. Since it is also possible to build a 32bit version on a 64bit machine, we decided to add the BUILD_TARGET64 option. However it would be possible to set it to true per default, since 64bit machines will be used more often.

[Comment created by Виталий Томин: 2016-03-06]
Issue resolved by adding -DBUILD_TARGET64=ON to cmake line, first I think cmake will detect automagically if it runs on 64bit host.

auto grabbing status of camera adjustable via plugin's context menu

The current auto grabbing status of all grabbers should be represented as a checkable item in the plugin's context menu (dataIO->getAutoGrabbing()). By checking or unchecking the item, invoke enable/disableAutoGrabbing.

[Issue created by M. Gronle: 2013-09-18]
[Last updated on bitbucket: 2014-01-27]

[Comment created by M. Gronle: 2014-01-27]
resolved

[Comment created by M. Gronle: 2014-01-27]
fixed in 24c0a9c

Userroles Admin, Developer, User

the user roles, which are used by twip to manage parameter settings within the gui, ... is not working anymore. The functions

isUser, isDeveloper and isAdmin always return false

randN is not working for complex128

randN for complex128 leads to a data-object filled with zeros only.

[Issue created by M. Gronle: 2013-04-05]
[Last updated on bitbucket: 2013-04-09]

[Comment created by Wolfram Lyda: 2013-04-09]
fixed #4 (randN for complex128) in dataobj.cpp

→ <<cset 8c666be>>

PyGit2Header blames dirty version also if only non-added files available

git.exe --git-dir=... --work-tree=... status --porcelain

marks non-added files with "?? " at the beginning of the line.

added, but non-committed changes start with a "M ".

The itom version should only be marked to be non-clean, if there is at least one line starting with M.

[Issue created by M. Gronle: 2014-01-27]
[Last updated on bitbucket: 2014-01-28]

[Comment created by Wolfram Lyda: 2014-01-28]
Fixed with issue with commit f7a896a

[Comment created by Wolfram Lyda: 2014-01-28]
Fixed Issue #10 on bitbucket.org. Separated dirtiy warning into unversioned and uncommited.

→ <>

[Comment created by Wolfram Lyda: 2014-01-28]
Separated dirty-version report in itom about dialog into unversioned files and changed code.

Most dirty versions are caused by pyCache-files, which are not under version control (and should not be) in the directory. To avoid a dirty version due to unversioned files before creating an installer run git clean up.

  1. Run git clean up in dry-run mode and check if all files are allowed to be removed.
  2. Run git clean up in normal mode to delete all unversioned files.
  3. Compile your itom before you execute any pythonfiles within the source directory.
  4. Done, know you can put all unversioned files back to your source file and live happily ever after.

File-Save dialog of Matplotlib-Plot is not centered on plot

Parent is hidden and therefore not considered as parent (see mpl_itom.backend_itom -> ui.getSaveFileName...). Probably, the passend parents should be checked for visibility and if false, their parents should be checked, too.

[Issue created by M. Gronle: 2015-11-13]
[Last updated on bitbucket: 2015-11-18]

[Comment created by M. Gronle: 2015-11-18]
fixed in commit 54bfe62

python -> Qt wrapper for QListWidget

Due to several requests it might be nice to have the following two "virtual" slots defined for QListWidget, that can be called via the call-method of itom.uiItem-class:

  • selectedItems() should return a list of pairs(name, row) (interesting for multi-selections)
  • setCurrentRows(QVector) should select all indicated rows if multi-selection is on

[Issue created by M. Gronle: 2014-08-14]
[Last updated on bitbucket: 2014-08-18]

[Comment created by M. Gronle: 2014-08-18]
virtual slots selectedRows, selectedTexts and selectRows of QListWidget added. closes #20

→ <<cset 0bdde64>>

Features for itom 2.0

  • Main development with Qt5, Python 3.4 (+pip) (done)
  • Python package installer for whl-files using pip (done)
  • Setup should automatically install these whl-files (done)
  • Unified parameter naming convention of all plugins (e.g. conform to GeniCam SFNC)
  • check if read/write lock of dataObject can be removed (done)
  • info mail to manufacturer of supported hardware components
  • overall live image / snipped / single or multiacquisition dialog for cameras
  • GUIs for data filtering
  • color palette editor (GUI and Python)
  • GIL for Python, direct access to Python workspace by workspace widgets, other parts of the GUI, via API-functions...
  • plot1(...), plot2(...), plotIso(...) methods as wrapper for general plot(...) function
  • histogram plot widget (modified 1DQwtPlot to lock like histogramm)
  • assign given plots in UI for possible linecuts, z-stack-cuts... of 2d plots (done)
  • check and merge ximea and ximea_improvements (done)
  • semi-adjustable splash screen
  • Mac OS X support (done)
  • pre-select last user in user dialog at restart (name of user logged in to the computer is pre-selected)
  • add filter description and parameters in documentation of plugins (done)
  • add method to prepend coding-line to script (done)
  • mark line in editor where the cursor is implicitely set to (by search, navigation toolbar...) (done)
  • if package pywin32 is installed (not managed by pypi.python.org) the update-search function of pip package manager stops with a global error.
  • provide +,+=,-,-=,,= for complex128 scalar in data object and enable this option in python as well
  • write an unittest for dataObject::sqrt and ::pow
  • globally set the number of threads for omp parellelized code in algorithm plugins

[Issue created by M. Gronle: 2015-02-13]
[Last updated on bitbucket: 2022-07-08]

[Comment created by Bernd Bertschinger: 2022-07-08]
Current ITOM Release at V. 4.

Planned Features should be tickets for planne major releases.

[Comment created by Jan Beneke: 2015-03-20]
Added Mac OS X support

plotting dataObject into itom2DGVFigure

Hi Marc, hope all is well with you there.

I had a chat with Marc W' and he suggested putting a comment into here.

When displaying a camera image in an itom2DGVFigure, the pixel intensity is auto-scaled depending on the minimum/maximum value within the image matrix. If the matrix values are divided by two, one would normally expect (for a camera image anyway) for the image to be "half as bright" across the whole image. But with the auto-scaling in place, this can't occur. Would it be possible to add in some parameters within the QT Designer's Itom plugin, that could be accessed from Python. Then I can attach a value box, or a slider etc. to allow a user to adjust image contrast/brightness etc. that would manipulate the viewed plot... Visualization, adjusting contrast/brightness is very important for the camera work we do, as from a biological point of view, cells can be VERY hard to image on some microscopes (those without phase contrast etc.).

All the best from here in 'wet/cold/windy!' Wales

Mark

[Issue created by Mark Holton: 2013-11-24]
[Last updated on bitbucket: 2015-12-04]

[Comment created by Wolfram Lyda: 2014-04-03]
Hi Mark and Mark,

the itom2DGVFigure was converted to GraphicViewPlot which has the property-based settings.

Adding ROI to the plotting tool will still take some time so x-axis and y-axis are still not changeable.

Best regards

Wolfram

[Comment created by Mark Holton: 2013-12-04]
Hi Marc,

I tried all combinations of xAxisInterval / XAxisInterval/xaxisInterval etc. In Qt Designer, it's listed with 'XAxisInterval', whereas from your side you say it's xAxisInterval. If I remember correctly, when I used xAxisInterval it said something about not being able to create itom.ui or something to that effect, however, when I used XAxisInterval did it give the other message about not being able to parse it into an appropriate python type. I guess this is likely to be something to do with me using an old install of Itom and not the laptop more up-to-date version.

I've now used GIT to push/pull and now have your demo and it works great! Many thanks for that.

I still need to re-install Windows in the near future though (poor me!). But I won't be installing VS2012, just straight to VS2010 this time!!!

Cheers

Mark

[Comment created by M. Gronle: 2013-12-04]
Hi Mark,

a bitbucket sync indeed is a good idea. In your specific case the property name is case sensitive, hence, xAxisInterval and not XAxisInterval. In the current version I improved the error message such that the real error is much clearer. Your error message is really strange and has also been replaced by a better one in one of the commits of the last months.

If you save your python and ui files and maybe send me a zip-file with the sources of QCam, there is nothing that you can really loose when you update your windows system. I will merge the last version of QCam with the bitbucket version since I remember that we finally did some last changes on your laptop that we did not push to the repository on bitbucket.org.

cheers
marc

[Comment created by Mark Holton: 2013-12-03]
Hi Marc, thanks for the info. I've replaced the previous itom2DGVFigure with a itom2DQwtPlot-figure and as you say, there is now a parameter for the plot called XAxisInterval, which, under QTDesigner, has components X and Y, much like geometry for the plot has X Y Width and Height.

I can view the parameters for geometry using:

win_my_camera_window.plot["geometry"]
--> [9, 9, 613, 490]

Where: win_my_camera_window = ui("mycamerawindow.ui", ui.TYPEWINDOW, childOfMainWindow = True)

But I get the following error with:

win_my_camera_window.plot["XAxisInterval"]
-->Traceback (most recent call last):
File "", line 1, in
TypeError: The given Qt-type can not be parsed into an appropriate python type.

Any ideas? Am I trying to reference it incorrectly?

Marc says I should do a Bit-bucket sync at some point to gain access to some recent changes of yours that will allow me to set window position etc. in Python - many thanks for doing that. I'll do that either this evening or in work tomorrow.

What I'm hoping to do some point in the next week or so is a complete re-install of that big laptop as Windows has some annoying issues right now which can only be solved that way. I'm just a little nervous that I won't be able to get all the stuff back up to the state you guys helped to achieve in August - VS2010/QT/etc.etc.... Has to be done sometime though I guess.

Cheers

Mark

[Comment created by M. Gronle: 2013-11-29]
Hi Mark,
right now, these properties are already available in a itom2DQwtPlot-figure. I will add them in the itom2DGVFigure as well. Inbetween, you can also use the itom2DQwtPlot with the properties xAxisInterval, ... (set the boundary values to 0.0 in order to have an auto-scale or to other values). Right now the lower value is called X and the upper value is Y - this is not the best caption, but ok ;)

Cheers
Marc

German Translation issue

Wrong translation in german translation: "Datei -> Optionen -> Editor", subsection "Verschläge" instead of "Vorschläge"

Windows 8 default font too large for predesigned QT forms from Windows 7/XP

Not a bug/fault as such, but designing a form in Windows XP/7 with text boxes/labels with closely fitting checkboxes, can result in the text over-riding the checkbox as the default font in Windows 8 is larger than that in previous versions of Windows. Not sure if you have any control over the font size in forms created in QT designer, but thought I'd mention this.
[I have had the same issue in MatLab]
I have mentioned this to Marc W.

[Issue created by M. Gronle: 2013-07-12]
[Last updated on bitbucket: 2013-09-02]

[Comment created by M. Gronle: 2013-09-02]
Tests with Windows 8 showed, that this issue does not appear if appropriate layouts are set to all widgets. Therefore this issue is closed now.

[Comment created by M. Gronle: 2013-07-12]
Hi,
thanks for this report. Until now we don't use itom too much with Windows 8. But I will check this and also talk to Marc W about the problem. Do you only have this problem with user-defined interfaces, created by Qt Designer or is the entire GUI of itom affected by this problem?

Add "additional search pathes" to Properties >> Application page

When itom is started, the path environment variable, passed to itom at startup, is modified before any plugin is loaded. The lib-folder for instance is always prepended to the path variable.

The user can prepend further pathes such that libraries, needed by any plugin, can be located without the need to globally modifiy the Windows path environment variable.

Until now, this feature is a non-documented entry in the ini-file of itom:

[Application]
searchPathes\size=1
searchPathes\1\path=K:/Vtk/install/bin

The task is now, to add a list to the property-page "General>>Application" (similar to Python>>Startup) such that these search pathes can be modified (add, delete). The lib-folder
can be inserted in the list as first element, that can not be modified, since it will always be loaded and must not be part of the searchPathes entry in the ini-file.

Sanduhr-Cursor bei Wartezeiten

z.B. Laden von Plugins per GUI

[Issue created by itobiege: 2013-03-26]

[Comment created by M. Gronle: 2013-03-26]
setOverrideCursor(WaitCursor) while loading new plugin (resolves #2)

→ <<cset 1fcfbb7>>

Help Widget shows wrong example for widgets in algorithm plugins

like in the attached image it is visible that the help widget shows a wrong example string (as well as description text) for widget-filter inside of algorithm plugins.

[Issue created by M. Gronle: 2016-04-14]
[Last updated on bitbucket: 2016-04-29]

[Comment created by M. Gronle: 2016-04-29]
fixes issue #47

→ <<cset 5421379>>

[Comment created by M. Gronle: 2016-04-14]
Hint: among others check the function HelpTreeDockWidget::showFilterWidgetPluginHelp.

itom.timer interval can also be 0

The PythonUiTimer (itom.timer) does not accept an interval < 1. However QTimer accepts intervals equal to 0ms. This should be accepted by itom.timer as well. Additionally, the interval is an integer in ms, no double like it is the case now.

Once this is changed, the matplotlib backend script, that calls an instance of this timer, can change its interval from 1 to 0.

[Issue created by M. Gronle: 2014-10-29]
[Last updated on bitbucket: 2015-06-17]

[Comment created by M. Gronle: 2015-06-17]
fixes issue 27 : itom.timer now accepts an interval of 0ms. The interval must now always be in integer. Further argument singleShot added to constructor in order to allow a single shot timer that only fires once after a start.

→ <<cset 063542a>>

QDesigner crash at startup with Qt 5.6.1 (Windows)

With Qt 5.6.1, the qdesigner.exe does not properly start (process starts, but GUI not) if the designer widget DLL qwebengineview.dll in qt/msvc2013_64/plugins/designer is available. This file can temporarily be removed.

We have to wait for a fix for this issue: https://bugreports.qt.io/browse/QTBUG-53984

Hopefully Qt 5.6.2 will fix this.

[Issue created by Johann Krauter: 2016-07-26]
[Last updated on bitbucket: 2018-11-22]

[Comment created by M. Gronle: 2018-11-22]
This bug does not exist any more in Qt 5.9

[Comment created by Johann Krauter: 2016-07-27]
itom can not be build, if this dll-file is deleted, because the CMAKE searches for this file.
WORKAROUND: delete the dll-file as written before and create a dummy dll-file with the same name (qwebengineview.dll). 🌈

[Comment created by Johann Krauter: 2016-07-26]
For Setups with Qt >= 5.6.0: The exe QtWebEngineProcess.exe from Qt/bin-folder has to be delivered together with the setup.

Bug when assigning a 1D column slice to a 1D row ROI of another dataObject

The following code will cause a wrong result and may also lead to a crash:

#!python

a = dataObject.zeros([10,2],'uint8')
b = dataObject.randN([2,10],'uint8')
c = b[0,:] #get first row of b
a[:,0] = c #assign first row of b to first col of a (this is implicitely allowed)
a.data() #wrong, not the first col of a is filled with values but the first 5x2 block!

Hint: The assignment starts in the function PyDataObj_mappingSetElem and then calls ito::DataObject::deepCopyPartial, the error is located there ;)

[Issue created by M. Gronle: 2016-04-09]
[Last updated on bitbucket: 2016-04-15]

OS X: Figures open and close immediately

When opening a figure it flashes and closes immediately. It can be shown afterwards.

Example: plot

#!python

fig = figure()
fig.plot(dataObject.randN([100,200]))

Figure flashes and closes.

The command

#!python

fig.show()

shows the plot dialog as requested.

Example: liveImage

The snippet

#!python

cam = dataIO("DummyGrabber")

cam.setParam("bpp",8)
print("width:", cam.getParam("sizex"))
print("height:", cam.getParam("sizey"))

liveImage(cam)

returns

#!python

width: 640
height: 480
(5, PlotItem(UiItem(class: Itom2dQwtPlot, name: plot0x0)))

Again, the dialog flashes and disappears immediately.
The debug console output is:

#!c++

ItomSharedSemaphore run into a timeout. Number of attempted listeners:  1 , already freed:  0 
timeout in number:  0 number of items:  3 
ItomSharedSemaphore run into a timeout. Number of attempted listeners:  1 , already freed:  0 
timeout in number:  1 number of items:  3 
ItomSharedSemaphore run into a timeout. Number of attempted listeners:  1 , already freed:  0 
timeout in number:  2 number of items:  3 
ItomSharedSemaphore run into a timeout. Number of attempted listeners:  1 , already freed:  0 
timeout in number:  0 number of items:  3 
ItomSharedSemaphore run into a timeout. Number of attempted listeners:  1 , already freed:  0 
timeout in number:  1 number of items:  3 
ItomSharedSemaphore run into a timeout. Number of attempted listeners:  1 , already freed:  0 
timeout in number:  2 number of items:  3 
ItomSharedSemaphore run into a timeout. Number of attempted listeners:  1 , already freed:  0 
timeout in number:  0 number of items:  3 
ItomSharedSemaphore run into a timeout. Number of attempted listeners:  1 , already freed:  0 
timeout in number:  1 number of items:  3 
ItomSharedSemaphore run into a timeout. Number of attempted listeners:  1 , already freed:  0 
timeout in number:  2 number of items:  3 
begin: startDeviceAndRegisterListener
end: startDeviceAndRegisterListener

[Issue created by Jan Beneke: 2015-03-20]

[Comment created by Jan Beneke: 2015-03-20]
Bug fix: Issue #35

OS X: Figures open and close immediately

→ <<cset 6559050>>

[Comment created by Jan Beneke: 2015-03-20]
Adding

#!c++

#ifdef __APPLE__
    // Bug fix: Issue #35
    // OS X hides windows/ dialog after adding a toolbar
    m_pWindow->show();
#endif // __APPLE__

at the end of

#!c++

AbstractDockWidget::addToolBar()

fixes the issue.

[Comment created by Jan Beneke: 2015-03-20]
plot() closes in:

  • uiOrganizer.cpp:2816: retval += fig->plot(dataCont.getDataObject(), areaRow, areaCol, className, &destWidget);
  • figureWidget.cpp::326: changeCurrentSubplot(idx);
  • figureWidget.cpp::717: addToolBar(i->toolbar, key_, i->area, i->section);
  • abstractDockWidget::554: m_pWindow->insertToolBar(m_dockToolbar, tb);

The same happens when using m_pWindow->addToolBar(tb); in abstractDockWidget::554.

Improve metaData handling and consistence for operators

Some operators create new dataObject without making a copy of the dataObject tagspace. Therefore it should be clearified, which operator copy the tagspace and which one will not copy the tagspace.

Further more a unified handling of tagspace should be introduced.

[Issue created by Wolfram Lyda: 2014-08-21]
[Last updated on bitbucket: 2022-07-08]

[Comment created by Bernd Bertschinger: 2022-07-08]
What is the status of this ticket?

ignore >> when copying strings from command line

If a command is copied from the command line, the >> characters (representing the start of a command) should be ignored. However, consider that >> can also identify a shift operation and must not be ignored. This is only possible by controlling the copy process.

latin1 / utf8

In some cases the PyUnicode_FromString()-Method should be changed to PyUnicode_DecodeLatin1() if QString.toLatin1().data() should be converted to avoid special-character errors.

This changes need some more elaborated testings

[Issue created by Wolfram Lyda: 2014-04-03]
[Last updated on bitbucket: 2014-07-02]

[Comment created by Wolfram Lyda: 2014-07-02]
Tested for several month, seems working, marked as resolved

[Comment created by Wolfram Lyda: 2014-04-25]
Changed most entries to PyUnicode_FromUnicode.
Python uses UFT8, Qt uses latin1.

ito::DataObject & operator=(ito::DataObject rhs) fails

If this data object is a ROI of another dataObject, the assignment of rhs is not executed correctly (only in C++):

ito::DataObject a(4,3,3,ito::tFloat32);
ito::DataObject b(3,3,ito::tFloat32);
ito::Range ranges[] = {ito::Range(0,1),ito::Range::all(),ito::Range::all()};
a.at(ranges) = b; //fails, a[0,:,:] does not contain b

[Issue created by M. Gronle: 2014-11-24]
[Last updated on bitbucket: 2014-11-25]

[Comment created by M. Gronle: 2014-11-25]
"This is a feature, not a bug" ;) The current implementation behaves like OpenCV:

http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-operator

Qt5 changes

Some methods are changed in Qt5. One example ist the signature of the connectNotify and disconnectNotify method. These methods need to be checked. For more info see http://blog.qt.digia.com/blog/2012/06/22/changes-to-the-meta-object-system-in-qt-5/

[Issue created by M. Gronle: 2014-12-01]
[Last updated on bitbucket: 2022-07-08]

[Comment created by Bernd Bertschinger: 2022-07-08]
We are now at Release 4.2. and QT5 is well integrated.
I do assume that this ticket can now be seen as resolved.

[Comment created by Bernd Bertschinger: 2022-07-08]
Closed, since ticket is overdue and too unspecific.

[Comment created by M. Gronle: 2018-11-22]

  • connect / disconnect with new Qt5 style:
#!c++

Counter a, b;
QObject::connect(&a, &Counter::valueChanged,
                 &b, &Counter::setValue);

a.setValue(12);     // a.value() == 12, b.value() == 12
b.setValue(48);     // a.value() == 12, b.value() == 48

(see http://doc.qt.io/qt-5/signalsandslots.html)

  • .toLatin1().data() --> .toLatin1().constData(), if string should not be changed

qpatch in all-in-one sometimes fails

one has to remember:

  • the length of the new path must be shorter than the old path
  • the .conf file must contain files relative to the new path. This is not the case up to now.

[Issue created by M. Gronle: 2015-11-17]
[Last updated on bitbucket: 2015-11-18]

[Comment created by M. Gronle: 2015-11-18]
resolved. Files updated at [https://sourceforge.net/projects/itom/files/all-in-one-build-setup/MSVC2013-x64/]

Usability improvement for callstack

  • If the new command is equal to the last one, do not add it to the items on the callstack
  • It should be possible to drag&drop an item from the callstack to the command line or the script window
  • Multiple items should be selectable

script usability improvements

some points for the usability wishlist:

  • remember opened files, windows, positions... of all script editor widgets at shutdown
  • reload the configuration at restart
  • remember the currently set breakpoints and reload them at restart, too

[Issue created by M. Gronle: 2014-04-02]
[Last updated on bitbucket: 2014-07-01]

[Comment created by M. Gronle: 2014-07-01]
done

Copy or convert data to its own shallow copy leads to heap crash

The copy and the convertTo data use rhs.freeData() to free dest-data before copy / transform procedure. If rhs is already a shallow copy of the current field, itom crashed.

ToDo -> Check for shallow copy, modify code to avoid this problem.

[Issue created by Wolfram Lyda: 2014-08-21]
[Last updated on bitbucket: 2015-11-03]

[Comment created by M. Gronle: 2015-11-03]
closed

[Comment created by M. Gronle: 2015-11-03]
fixed in commit 7df4a45.

Syntax check *frosted* can not detect all types of errors

Usually frosted (bug symbols in left column of script editor), should be able to detect if an uninitialized variable is used somewhere in the script. However, currently this type of error is not detected. The cause for this is, that frosted can only detect this types of errors if no statement like **from XYZ import * ** is within the script (since then, no clear knowledge about exernally defined variables... is available for frosted. However, the line

#!python

from itom import *

is always prepended to each script before calling the frosted syntax check, since all classes and methods from itom are (per default) globally imported to the global workspace and we then want to avoid that frosted says for instance that dataObject is not defined. However, due to this line, no variable name checks can be done for the script.

Task: replace **from itom import * ** by something like from itom import dataObject, dataIO, actuator, filter, pluginHelp... (However the list of items should somehow be generated automatically).

Location: PythonEngine::pythonSyntaxCheck in pythonEngine.cpp

[Issue created by M. Gronle: 2016-04-09]
[Last updated on bitbucket: 2016-04-14]

[Comment created by M. Gronle: 2016-04-14]
frosted syntax check can now also detect the usage of an unreference variable. fixes issue #46.

→ <>

Protocol function of dataObject for python function used on objects

The addToProtocol function could be added to python function used to modify data objects to improve the protocol / history of the dataObject.

My proposal, the last C++ function, which modifies the objects (e.g. python function or itom filter) add a line to the protocol tag using the addToProtocol function.

[Issue created by Wolfram Lyda: 2014-08-21]
[Last updated on bitbucket: 2018-11-22]

Qt5 encoding error

In Qt5, when saving and reloading a file with special characters like mu, degree... , these characters are wrongly displayed (usually replaced by ?)

[Issue created by M. Gronle: 2015-01-29]

[Comment created by M. Gronle: 2015-01-29]
fixes issue #32 (Qt4/5 encoding error). In Qt5 QString(QByteArray ba) assumes that ba is utf8 encoded, in Qt4 it assumed ascii (latin1). Now, the optional language::codec setting parameter defines the codec for reading and writing python script files (default: latin1). Additionally, the python codec for stdout and stderr stream is set to latin1 and the itom-stream class handles every input to be latin1 decoded.

→ <<cset 0eb9449>>

[Comment created by Johann Krauter: 2015-01-29]
In Qt4, QScintilla was set to utf8 mode, scripts are loaded with utf8 standard in scriptEditorWidget::openFile and saved to latin1 in scriptEditorWidget::saveFile. Since the command line was in utf8, single commands to python have been converted to utf8 in PythonEngine::runString.

QString text = QString::fromLatin1(file.readAll());

In Qt5, it seems that the latin1 coded file must be read with utf8 standard and QScintilla returns a latin1 encoded string in its text-method such that python needs to get a toLatin1() decoded byte-array.

Calltips does not show in editor

When typing a command in an editor or the command line, the calltip does only appear at the second argument of a function. This bug has already been reported to the mailing list of QScintilla.

A first workaround is to add the lines

#!c++

if (path.endsWith(wsep))
{
    path.chop(wsep.length());
}

before path.append('('); in qsciapis.cpp, line 702.

[Issue created by M. Gronle: 2015-04-01]
[Last updated on bitbucket: 2018-11-22]

[Comment created by itobiege: 2018-11-22]
close #37 and edit workspace popup menu

→ <>

[Comment created by M. Gronle: 2015-11-03]
fixed in QScintilla 2.9.1

Add coding line in python script

It would be nice to have a function in the script editor to automatically add a line like

#!python
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

at the beginning of a python script in order to indicate the encoding in the script.

Design bug of itom documentation

Unbenannt.PNG

Hint: style sheet?

[Issue created by Johann Krauter: 2016-04-18]
[Last updated on bitbucket: 2016-04-19]

[Comment created by Johann Krauter: 2016-04-19]
close #48: maybe this change in stylesheet works

→ <<cset 397b0db>>

[Comment created by Johann Krauter: 2016-04-18]
reopen #48: documentation build not working with QT 5.4

→ <<cset 7d415ec>>

[Comment created by Johann Krauter: 2016-04-18]
resolved #48 documentation style

→ <<cset 0a59a1d>>

Deprecated / Changes in SDK components

This issue should mainly collect minor things that should be changed, deleted... in any component belonging to the SDK. Only things should be listed that affect the binary compatibility of the SDK libraries, hence, the AddInInterface version number needs to be incremented.

[Issue created by M. Gronle: 2014-04-10]
[Last updated on bitbucket: 2022-07-08]

[Comment created by Bernd Bertschinger: 2022-07-08]
Bernd Bertschinger

I would like to close this ticket.
Tickets should never be permanent carry overs or reminder lists.

[Comment created by Bernd Bertschinger: 2022-07-08]
I would like to close this ticket.
Tickets should never be permanent carry overs or reminder lists.

[Comment created by M. Gronle: 2021-11-16]
Remove deprecated member of QPropertyEditorWidget and add Private Container for this class to be ready for future changes.

These changes were implemented in commit 020bf3c (AddIn Interface 6.0.0)

[Comment created by M. Gronle: 2020-08-25]
See issue https://bitbucket.org/itom/itom/issues/137/make-the-comparison-operators-of-ito

These changes were implemented in commit 2c6fc37 and others (AddIn Interface 5.0.0)

[Comment created by M. Gronle: 2020-03-26]
Remove SemVerVersion::major(), SemVerVersion::minor() and SemVerVersion::patch() due to name conflict with #defines major and minor in linux (inlcude/sys/types.h). These methods have been replaced by svMajor(), svMinor() and svPatch()

These changes were implemented in commit 2c6fc37 and others (AddIn Interface 5.0.0)

[Comment created by M. Gronle: 2019-03-27]
Comment related to the previous changes:

These changes were implemented in commit 72a6efe and others (AddIn Interface 3.2.0)

[Comment created by Robin Hahn: 2018-12-17]
m_lineCutType, m_zSliceType, m_zoomCutType and m_volumeCutType are removed with the next interface incrementation. In the future, these variables will be managed via a QMap, which will be available via AbstractFigure::subplotStates().

[Comment created by M. Gronle: 2018-11-27]

  • Merge branch 'actuator_changes'

This request was implemented in commit 72a6efe (AddIn Interface 3.2.0)

[Comment created by M. Gronle: 2016-07-19]

  • From Qt 5.5.0 on, replace Q_ENUMS by Q_ENUM (after the enum definition) to allow an automatic parsing of enumeration keys and values for instance in slot-calls from Python. Example: MotorAxisController.h.

This request was implemented in commit 65f7942 (and others) (AddIn Interface 3.1.0)

[Comment created by M. Gronle: 2016-03-30]

  • Upon the next increment of the AddInInterface, uncomment some changes in itomWidgets >> doubleSpinBox.cpp and doubleSpinBox.h, marked with //TODO:. They are implementations of memory leak fixes in the original ctkCommon project.
  • add keyboardTracking as property to doubleSpinBox of itomWidgets and redirect it to the keyboardTracking property of the underlying spinbox.

This request was implemented in commit 13f3c4d (AddIn Interface 2.3.0)

[Comment created by M. Gronle: 2015-10-14]

  • AddInInterface.h: change lines 56ff to (avoid warnings like macro redefinition: 'NOMINMAX' already defined and does not lead to different definitions for debug and release)
#!c++
//plugins define VISUAL_LEAK_DETECTOR_CMAKE in their CMake configuration file
#if defined _DEBUG  && defined(_MSC_VER) && defined(VISUAL_LEAK_DETECTOR_CMAKE)
#ifndef NOMINAX
    #define NOMINMAX //instead min, max is defined as macro in winDef.h, included by vld.h
    #include "vld.h"
    #undef NOMINMAX
#else
    #include "vld.h"
#endif
#endif

  • remove non const version of valid() in ito::PCLPolygonMesh

This commit was implemented in commit 899614b (AddIn Interface 2.1.0)

[Comment created by M. Gronle: 2015-04-08]
Further things:

  • Final remove of lock/unlock of dataObject
  • Move of members m_pThread, m_pBasePlugin, m_refcount, m_createdByGUI, m_hwDecList, m_exeFuncList of class AddInBase from protected to private since they are not for direct use in any plugin
  • Un-inline the Method AddInBase::MoveToThread for better control and maintance

This comment was implemented in commit 263d27c (AddIn Interface 2.0.0)

[Comment created by M. Gronle: 2014-12-01]
Remove anything related to the counter that counts the number of connections to sendStatusUpdate and sendTargetUpdate. since the signature for connectNotify and disconnectNotify of these signals changed in Qt5, it is more robust to delete the counting mechanism. (marked with deprecated: ... in the script)

This comment was implemented in commit 263d27c (AddIn Interface 2.0.0)

[Comment created by M. Gronle: 2014-11-20]
The destructors of AddInDataIO and AddInActuator must be virtual, but not pure virtual (right now, they are defined to be pure virtual, however there exists an implementation in AddInInterface.cpp; this is a random behaviour, dependent on compiler). The destructor of AddInDataIO is used to finally delete the auto-grabbing timer!

This comment was implemented in commit 263d27c (AddIn Interface 2.0.0)

[Comment created by M. Gronle: 2014-06-04]
Realize the changes made in commonCTK:
commontk/CTK@e4eebdc

This comment was implemented in commit 53413d3

[Comment created by M. Gronle: 2014-04-10]

#!c++

inline int containsWarning()
inline int containsError()
inline int containsWarningOrError()
inline const char *errorMessage()

in retVal.h are marked as deprecated and can be removed since they can be marked with const. Their const-versions have been added in a8bc533 without affecting the current binary compatibility

This comment was implemented in commit 53413d3

Timer tracking in GUI

There are cases that an instance of ui.timer can not be accessed any more via Python, however the timer still fires signals. Therefore it is suggested to create a small dialog displaying the state of all Python-created ui.timers. This dialog should also be used to start or stop such a timer.

[Issue created by M. Gronle: 2016-05-17]
[Last updated on bitbucket: 2016-08-23]

[Comment created by Robin Hahn: 2016-08-23]
Resolved in commit 499f7ba

Setup

  • rename ITOM to itom
  • when uninstalling completely delete the following files and directories, such that itom is completely deleted:
    • pycache (if exists, folder)
    • itomSettings (if exists, folder)
    • itomlog.txt (if exists, file)
      Maybe there are other folders wich contain created files (like py-cache files). Therefore check if it is possible to remove all subfolders from itom during the uninstallation process.

Drag&Drop text from console to script deletes text in console

When drag&dropping text from console to any script window, the original text (even if already executed) is deleted from the console (besides the shift modifier is pressed).
This is not wanted, however it is difficult to fix this. Therefore a related post was sent to the QScintilla mailing list in order to get a hint how to force such operations to be copyActions and no moveActions:

http://www.riverbankcomputing.com/pipermail/qscintilla/2014-September/000994.html

[Issue created by M. Gronle: 2014-09-17]
[Last updated on bitbucket: 2014-09-18]

[Comment created by M. Gronle: 2014-09-18]
fixes issue 25 such that text from console widget is never deleted when drag&dropping it to any script widget

→ <>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.