Manipulator WorkBench

Info about new community or project announcements, implemented features, classes, modules or APIs. Might get technical!
PLEASE DO NOT POST HELP REQUESTS OR OTHER DISCUSSIONS HERE!
User avatar
f3nix
Posts: 337
Joined: Sat May 30, 2015 11:58 am

Re: Manipulator WorkBench

Postby f3nix » Sat Jan 25, 2020 5:52 am

Hi once again.

I think the main issue is missing layouts for some objects. See screenshot.

Cheers,
Mateusz

EDIT: added two more screenshots.
Attachments
with_layouts.png
with_layouts.png (27.22 KiB) Viewed 996 times
without_layouts.png
without_layouts.png (19.8 KiB) Viewed 996 times
Screenshot_20200125_064732.png
Screenshot_20200125_064732.png (73.82 KiB) Viewed 1002 times
User avatar
easyw-fc
Posts: 2905
Joined: Thu Jul 09, 2015 9:34 am

Re: Manipulator WorkBench

Postby easyw-fc » Sat Jan 25, 2020 7:42 am

Hi Mateusz
thanks for going into this issue :D
f3nix wrote:
Sat Jan 25, 2020 5:37 am
I have played with using the layouts and I have the caliper working quite good.
great!
f3nix wrote:
Sat Jan 25, 2020 5:37 am
One thing is missing. Not all images are in svg format. The png files are missing.
All the images should be in svg format and should be embedded inside the macro...
EDIT:
I used the pngs only to have a reference in Qt designer... Ithink Qt4 designer didn't support svg icon, but I'm not sure
/EDIT
@line 1580 at Caliper you can find the list of icons

Code: Select all

# embedded button images
Caliper.py#L1580

I used to convert the icons with the following script:

Code: Select all

#!/usr/bin/python
# -*- coding: utf-8 -*-


import base64
import argparse, sys, os

args=sys.argv

if len (args) >1:
    fullfname=args[1]
    ext = os.path.splitext(os.path.basename(args[1]))[1]
    fname=os.path.splitext(os.path.basename(args[1]))[0]
    with open(fullfname, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read())
    with open(fname+"-b64.txt", "wb") as eb64_file:
        eb64_file.write(encoded_string)
Then the b64 encoded images could be decoded back to svg.
Here a sample to decode the images:

Code: Select all

#!/usr/bin/python
# -*- coding: utf-8 -*-


import base64
import argparse, sys, os

fname = '/home/mau/Downloads/myimage_svg'

close_img=\
"""
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0IgogICBoZWlnaHQ9IjY0IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjUgcjEwMDQwIgogICBzb2RpcG9kaTpkb2NuYW1lPSJlZGl0X0NhbmNlbC5zdmciCiAgIHZpZXdCb3g9IjAgMCA2NCA2NCI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODc5IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzODgxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhNDAwMDA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzg4MyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWYyOTI5O3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzg2OSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhNDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzODcxIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWYyOTI5O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzg3MyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM4NjkiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODc1IgogICAgICAgeDE9Ii00NSIKICAgICAgIHkxPSIxMDQ0LjM2MjIiCiAgICAgICB4Mj0iLTU1IgogICAgICAgeTI9Ijk5NC4zNjIxOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjg2NjQ3NzI3LDAsMCwwLjg2NjQ3NzM5LDczLjY1MzQwOSwxMzYuMzAzOTEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzODc5IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzg3NyIKICAgICAgIHgxPSItNDUiCiAgICAgICB5MT0iMTA0NC4zNjIyIgogICAgICAgeDI9Ii01NSIKICAgICAgIHkyPSI5OTQuMzYyMTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44NjY0NzcyNywwLDAsMC44NjY0NzczOSw3My42NTM0MDksMTM2LjMwMzkxKSIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjYuNTU3NzM4IgogICAgIGlua3NjYXBlOmN4PSI1MC4yNzE5NTgiCiAgICAgaW5rc2NhcGU6Y3k9IjMyLjkwMDkyNCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTU5OCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MzYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI3IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCiAgICAgaW5rc2NhcGU6c25hcC1nbG9iYWw9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtbm9kZXM9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIHR5cGU9Inh5Z3JpZCIKICAgICAgIGlkPSJncmlkMTE1MjEiCiAgICAgICBlbXBzcGFjaW5nPSIyIgogICAgICAgZG90dGVkPSJmYWxzZSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIgogICAgICAgc25hcHZpc2libGVncmlkbGluZXNvbmx5PSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTk4OC4zNjIxOCkiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMyODAwMDA7c3Ryb2tlLXdpZHRoOjE2O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMTMsMTAwMS4zNjIyIDM4LjEyNSwzOC4xMjUiCiAgICAgICBpZD0icGF0aDMwMDIiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMjgwMDAwO3N0cm9rZS13aWR0aDoxNjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDUxLjEyNSwxMDAxLjM2MjIgMTMsMTAzOS40ODcyIgogICAgICAgaWQ9InBhdGgzMDAyLTYiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZWYyOTI5O3N0cm9rZS13aWR0aDoxMjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICBkPSJtIDEzLDEwMDEuMzYyMiAzOC4xMjUsMzguMTI1IgogICAgICAgaWQ9InBhdGgzMDAyLTciCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZWYyOTI5O3N0cm9rZS13aWR0aDoxMjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICBkPSJNIDUxLjEyNSwxMDAxLjM2MjIgMTMsMTAzOS40ODcyIgogICAgICAgaWQ9InBhdGgzMDAyLTYtNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQzODc3KTtzdHJva2Utd2lkdGg6ODtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICBkPSJtIDEzLDEwMDEuMzYyMiAzOC4xMjUsMzguMTI1IgogICAgICAgaWQ9InBhdGgzMDAyLTctNiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQzODc1KTtzdHJva2Utd2lkdGg6ODtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICBkPSJNIDUxLjEyNSwxMDAxLjM2MjIgMTMsMTAzOS40ODcyIgogICAgICAgaWQ9InBhdGgzMDAyLTYtNS0yIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgPC9nPgo8L3N2Zz4K
"""

decoded_string = base64.b64decode(close_img)
print(decoded_string)

with open(fname+"-decoded.svg", "wb") as svg_file:
    svg_file.write(decoded_string)
Please let me know which image you miss and I will provide it.
Maurice
User avatar
f3nix
Posts: 337
Joined: Sat May 30, 2015 11:58 am

Re: Manipulator WorkBench

Postby f3nix » Sun Jan 26, 2020 10:00 pm

Hi Maurice!
Thank you for the great tips. That got me going. I have tested the caliper and it looks good. Auto scaling when moving from high dpi monitor to a normal monitor seems to work good too (screenshots attached).

I have one more problem. The file measure-tool-docked-v1.5.ui does not seem to be in sync with the code used in Caliper.py. It is missing the blabel button (enable extra label). Could you please check that out?

Cheers,
Mateusz
Attachments
non-high-dpi.mesure.png
non-high-dpi.mesure.png (89.69 KiB) Viewed 914 times
high-dpi-measure.png
high-dpi-measure.png (34.62 KiB) Viewed 914 times
User avatar
f3nix
Posts: 337
Joined: Sat May 30, 2015 11:58 am

Re: Manipulator WorkBench

Postby f3nix » Sun Jan 26, 2020 11:45 pm

Hi.
Here are the files for align and mover tools. Please test them and write what you think. I can make a pull request if you like it.

Thanks for the awesome tools! :)

Cheers,
Mateusz

P.S. The python files were hand edited since the uic does not do a good job with all the parameters.
Attachments
difference.png
difference.png (131.96 KiB) Viewed 905 times
mover-tool-docked-v1.9-highdpi.ui
(23.72 KiB) Downloaded 19 times
mover-highdpi.py
(16.42 KiB) Downloaded 19 times
align-tool-docked-v1.6-highdpi.ui
(22.14 KiB) Downloaded 18 times
align-highdpi.py
(15.18 KiB) Downloaded 21 times
User avatar
easyw-fc
Posts: 2905
Joined: Thu Jul 09, 2015 9:34 am

Re: Manipulator WorkBench

Postby easyw-fc » Mon Jan 27, 2020 6:35 am

f3nix wrote:
Sun Jan 26, 2020 11:45 pm
Hi.
Here are the files for align and mover tools. Please test them and write what you think. I can make a pull request if you like it.
Hi Mateusz

would you please point me to your repository @ github?
I will have a look at the code there and test the changes.

About the Caliper ui, I found the latest file... please find it attached
measure-tool-docked-v1.8_ui.zip
(2.13 KiB) Downloaded 19 times
f3nix wrote:
Sun Jan 26, 2020 11:45 pm
Thanks for the awesome tools! :)
Cheers,
Mateusz

P.S. The python files were hand edited since the uic does not do a good job with all the parameters.
would you please point out which edits did you do?
Maurice
User avatar
f3nix
Posts: 337
Joined: Sat May 30, 2015 11:58 am

Re: Manipulator WorkBench

Postby f3nix » Mon Jan 27, 2020 6:14 pm

Hi.
easyw-fc wrote:
Mon Jan 27, 2020 6:35 am
f3nix wrote:
Sun Jan 26, 2020 11:45 pm
Hi.
Here are the files for align and mover tools. Please test them and write what you think. I can make a pull request if you like it.
Hi Mateusz

would you please point me to your repository @ github?
I will have a look at the code there and test the changes.
Here it is: https://github.com/f3nix/Manipulator

easyw-fc wrote:
Mon Jan 27, 2020 6:35 am
About the Caliper ui, I found the latest file... please find it attached
measure-tool-docked-v1.8_ui.zip
Thanks :) The new file is already converted in my repo.

easyw-fc wrote:
Mon Jan 27, 2020 6:35 am
would you please point out which edits did you do?
I have been using pyside2-uic tool.
1. I had to replace all QtWidgets with QtGui.
2. I had to add QtCore.Qt.AlignTop for the left upper buttons (the uic does not add them automatically - maybe a bug?)

Thanks for supporting me through this process.

Cheers,
Mateusz
User avatar
easyw-fc
Posts: 2905
Joined: Thu Jul 09, 2015 9:34 am

Re: Manipulator WorkBench

Postby easyw-fc » Mon Jan 27, 2020 9:46 pm

f3nix wrote:
Mon Jan 27, 2020 6:14 pm
Here it is: https://github.com/f3nix/Manipulator
....
I have been using pyside2-uic tool.
1. I had to replace all QtWidgets with QtGui.
2. I had to add QtCore.Qt.AlignTop for the left upper buttons (the uic does not add them automatically - maybe a bug?)

Thanks for supporting me through this process.

Cheers,
Mateusz
Hi Mateusz
thanks for your work on this HIDPI issue...
I'll have a look at the ui and I'll be back asap.

Maurice
User avatar
easyw-fc
Posts: 2905
Joined: Thu Jul 09, 2015 9:34 am

Re: Manipulator WorkBench

Postby easyw-fc » Wed Jan 29, 2020 10:00 pm

f3nix wrote:
Mon Jan 27, 2020 6:14 pm
Mateusz
Hi,
I've played a bit with the new layout, but what I'm missing is the ability to resize the full Dialog, make the other controls hidden...
I'm going to play a bit more and I'll update you here
Maurice
User avatar
easyw-fc
Posts: 2905
Joined: Thu Jul 09, 2015 9:34 am

Re: Manipulator WorkBench

Postby easyw-fc » Fri Jan 31, 2020 8:59 pm

Hi Mateusz
I've just added a hdpi branch to my repo
https://github.com/easyw/Manipulator/tree/hdpi
you can test the new Aligner with your HDPI screen
.. and, if you want, adapt the other tools...
then just poke me here or make a PR to the hdpi branch and I will merge it and finalizing the merging.
ATM I cannot find a way to keep the old behavior to minimize the dialog but the dialog can be placed behind the Combo Tab... so there is not a big defeat though...

Here some notes:
f3nix wrote:
Mon Jan 27, 2020 6:14 pm
I have been using pyside2-uic tool.
I'm using pyuic5 from pyqt5-dev-tools
f3nix wrote:
Mon Jan 27, 2020 6:14 pm
1. I had to replace all QtWidgets with QtGui.
I just have added

Code: Select all

QtWidgets = QtGui
before the declaration of the 'class Ui_DockWidget(object)'
this is fixing the rest of the code
f3nix wrote:
Mon Jan 27, 2020 6:14 pm
2. I had to add QtCore.Qt.AlignTop for the left upper buttons (the uic does not add them automatically - maybe a bug?)
I moved the icons and that solved this issue in Aligner.

EDIT:
I have an issue with aligner because the 4 check boxes act all together instead of by row.
EDIT2:
Now it should work... still not the best solution
mario52
Posts: 3152
Joined: Wed May 16, 2012 2:13 pm

Re: Manipulator WorkBench

Postby mario52 » Sat Feb 01, 2020 2:06 pm

hi

for PySide2 Qt5 you must restore QtWidgets see my example code

mario
Maybe you need a special feature, go into Macros_recipes and Code_snippets, Topological_data_scripting, Dialog creation. My macros on Gist.github.