Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Laser Panel - More coherent laser control #623

Merged
merged 38 commits into from Oct 24, 2021
Merged

Conversation

tatarize
Copy link
Member

laserpane

This is a more standardize panel design incorporating aspects seen in RDWorks, Lightburn and Whisperer. Have a single pane that lets you just execute your jobs.

There is a weird snafu with how the code currently works and the implications here. Namely with regard to simulate we create the cutcode to simulate the job. We also have code to load and save the file rather than sending it to the laser we send it to a file. This gives us some general load an egv and send it to the laser functionality. So there's a source selection thing that might select that. Is this data coming from the loaded file, the operations, or the stuff already done in the planner.

@tatarize tatarize marked this pull request as draft October 22, 2021 15:14
@Sophist-UK
Copy link
Contributor

I quite like the concept. It brings things together and has a nice look to it.

Optimisation Settings

I think the optimisation settings are something that a user may want to change frequently, and so might be better on this panel and not on a subpanel.

Terminology

  1. We currently use Device Config and global Settings.
  2. I am unclear what the difference on this panel is between the Device Settings button and the Configuration button.

Other functionality

  • Should the Navigate panel have a button here as it is Laser related.
  • Unclear whether Load and Save are Laser related (in the same way) or not and so whether they fit here?

Longer term UI strategy

Whilst I am for an evolutionary approach (perhaps with this Laser panel as a first next step), I think it might be helpful if we had an overall UI strategy in mind.

I am not an expert on Whisperer or RDWorks or Lightburn, but I have a feeling they have (what we might call) "Panel Sets" which relate to the functionality you are using at the time. So when you are doing drawing, positioning etc. i.e. graphical you get a set of panels which relate to e.g. doing things in the scene. When you move onto setting up a burn, then you don't want the scene-related panels, but instead want burn related panels like this Laser panel and Navigate.

Inkscape also has something of this nature - the left panel (in the way I use Inkscape anyway) allows you to select major functionality groups - and the top panel changes when you select e.g. the Pointer/Selection Tool, the Nodes tool, Rectangle, Arc etc.

Indeed, a previous 0.7 beta had a Tabs on the main ribbon - but these didn't change the entire panel layouts, just the main ribbon.

So I am wondering whether we draw together these threads and have a Workflow tab bar at the top which activates a panel set. And the user can then define whatever panels in whatever configuration they like - in several bars along one side (LRTB) or on several sides.

What do others think of this suggestion?

@tatarize
Copy link
Member Author

I think the optimisation settings are something that a user may want to change frequently, and so might be better on this panel and not on a subpanel.

I could probably include them as a different page. But, I also think maybe there should be a page for each laser you have installed. Subpanels have infinite real estate, tho a different page might too. Since the main thing is to allow this to control the lasers and the best way to do that is likely to tuck a lot of options in just that pane. So maybe it should also duplicate the functionality within Execute Job. Since there's a standard problem that at some point the operations become cutcode. And the user might need some guidance for that.

But, also, if I made a different page (the pane is a NoteBook (https://docs.wxpython.org/wx.aui.AuiNotebook.html#wx-aui-auinotebook) the notebook has pages) for each laser they wouldn't all need different optimization settings. But, there might be a very common and reasonable workflow of compiling/optimizing a job and sending it to multiple lasers, or saving that job to disk and reloading it.

We currently use Device Config and global Settings.

Yes, and some global settings are actually clearly device settings but have nothing to do with the controller board. Like the bed size parameters.

I am unclear what the difference on this panel is between the Device Settings button and the Configuration button.

The intent there is that Device Settings would be like Devices and let you configure your lasers there. I guess it could be rebranded a bit.

Should the Navigate panel have a button here as it is Laser related.

Hm. In theory maybe. Since if we are using this for multiple laser control, we could want to control our lasers independently. And so if we got rid of the devices and rather gave each device its own page. There might be some useful things there. Though it might be better to just have the user select the device there and have it change those various settings.

Unclear whether Load and Save are Laser related (in the same way) or not and so whether they fit here?

Save certainly does, basically it's rather than send the job to the laser with start, we save the job to disk. Then we can load the job accordingly.

Whilst I am for an evolutionary approach (perhaps with this Laser panel as a first next step), I think it might be helpful if we had an overall UI strategy in mind.

This is certainly the case. Since there's a number of longer term goals that might be well achieved by doing a good job at this.

I am not an expert on Whisperer or RDWorks or Lightburn, but I have a feeling they have (what we might call) "Panel Sets" which relate to the functionality you are using at the time. So when you are doing drawing, positioning etc. i.e. graphical you get a set of panels which relate to e.g. doing things in the scene. When you move onto setting up a burn, then you don't want the scene-related panels, but instead want burn related panels like this Laser panel and Navigate.

They don't they have notebooks of different settings. They don't switch things based on what you're doing.
RDWorks has like 6 tabs, Work, Output, Doc, User, Test, and Transform.

  • Work covers the different color-operations (imagine if rather than different paths we only had cutcode, and buttons that would reassign the cutcode settings) and everything is a 1:1. So if you have a circle, and you color it black and black is engrave, so it gets the black engrave settings after you select the object and press the button.
  • Output has some more weird settings that are highly ruida specific like feeding after cutting and partition for over range.
  • Doc refers to files stored on the laser and reading and writing and deleting them.
  • User has a bunch of settings on the laser. These query the laser for the laser settings and lets you change them. This is also a thing within GRBL with a bunch of saved settings.
  • Test lets you move the laser around, get the current position.
  • Transform does something that I think relates to the work being sent but I confess I've never really checked.

The functionality we'd be doing here would be like the Laser Work/Process Control Bar.

  • Start, Pause, Stop, Save to file, Send a saved file to the laser, and Download (send the file to the laser without starting it). A positioning selection based on the the ruida stuff of current position,

RDWorks:
rdworks

Lightburn:
lightburn

Whisperer:
whisperer

Autolaser:
autolaser

LaserGRBL
lasergrbl

LaserWeb
Laserweb

Ultimaker Cura

Inkscape also has something of this nature - the left panel (in the way I use Inkscape anyway) allows you to select major functionality groups - and the top panel changes when you select e.g. the Pointer/Selection Tool, the Nodes tool, Rectangle, Arc etc.

That's accurate but some of that stuff would require some internal changes I've considered. Specifically I would tend to need a generic properties window based on a lookup. This is a bit weird but basically if you select things and you want things to changed based on the suggestion you often need something listening to the selections. This can be implemented in a couple interesting ways, but basically it would be a different part of kernel that basically puts different classes in the lookup and lets you listen to it for changes. If you are looking for a rectangle and something the user does selects a rectangle it triggers that code for you. You can then have panes like properties that listen to the lookup for anything that permits a get_properties or something like that and then can create a dynamic list of properties to be read and written accordingly. Then all anything needs to do is list their properties. Then the properties panel would know that the object in the lookup wants to let you modify something called radius and it's a floating point number so you get an editor for a floating point number which is likely just a text box. And if you update it, it automatically updates the value. In theory you could let lots of things have properties and have them easily edited by a dynamic properties pane.

Indeed, a previous 0.7 beta had a Tabs on the main ribbon - but these didn't change the entire panel layouts, just the main ribbon.

Switching some functionality in one by another selection might be generally doable, but it's likely more gui based and would need the panes to define some interactions there. Unless something like properties above was done.

So I am wondering whether we draw together these threads and have a Workflow tab bar at the top which activates a panel set. And the user can then define whatever panels in whatever configuration they like - in several bars along one side (LRTB) or on several sides.

What do others think of this suggestion?

This seems useful and I've considered some aspects of that before. But, not extremely relevant to the laser panel in general.


Implementation wise I'm leaning towards Tiger's idea of switching the entire layout with the device. So we can define AUI perspective as device relevant setting. Which has a lot to recommend it. While having your layout radically shift when you change devices sounds weird, it wouldn't be too hard to share between devices and disable the disallowed panes and switch to the permitted panes rather directly.

I still don't have a solution for the question of data source. I have a combo box in case you're getting the data to send from a file you loaded, from the scene/operations or from the planner that already optimized this stuff for you. Some of the programs around just send this file to the laser and load it, but don't require you to hit start. So it's just a load/send button. I don't love this, but it might end up being easier. Though it doesn't fix the issue with the sending from the established planner vs. sending from the scene and rebuilding the plan.

This also shares some overlap with my wouldbe implementation of sewsorcy where embroidery fills would be delayed and then recompiled at points. Though in that case the only operation you have is save the embroidery file. Narrowing down the goals though makes this a bit easier and the gui a bit less crowded.

While I threw this in a notebook because I thought it could have some good aspects, it's not really needed if I we went with Tiger's idea. It might be nice to have a notebook of large settings or maybe a properties pane. Or a large group of settings that maybe your laser would need depending on the type of laser. But, neither of those candidates actually requires a laser panel to be that complex. Only the question of data source seems to be remaining thorn in the implementation. Since compile this work and send it to the different lasers seems to be a pretty reasonable workflow.

@Sophist-UK
Copy link
Contributor

Most users (like me) probably only have one laser, but separate pages for each laser makes sense to me.

My philosophy on copying UI ideas is mixed:

  • OTOH, it provides familiarity for users of these other programs, and might (but not guaranteed) to have decent usability; but...
  • OTOH, we should be willing to do something different if we think it is better.

Reviewing how I use MK, I tend to work in phases.

  1. Getting the design to look and load right. Currently tends to be an iterative cycle with Inkscape - both because I need non-basic graphic tools that are only in Inkscape and not in MK (and may never be), and because MK when MK saves it loses a whole lot of SVG information (converts shapes to paths, loses groups, loses Inkscape metadata etc. - so I have to keep original files separate from those saved by MK by adding LASER7 at the end of the filename).
  2. Actualising images
  3. Deciding Operations Settings and sometime adding special operations (like Interrupt - though these are not currently saved so I don't use them much) - hardware power, speed, PPI, operation passes.
  4. Positioning the material on the bed and starting the burn. Sometimes I want to run a very quick (60s) burn many times in quick succession.
  5. Monitoring the burn. Sometimes I want to do 1-4 whilst a long running burn is happening whilst still doing this.
    Sometimes I want to tweak the layout / settings for the next run whilst the current one is happening.

For screen real-estate reasons it would be great if I could switch pane-sets to match my activity at the time.

P.S. I use a touch screen windows PC for production, so resizeable buttons are great!!

@tatarize tatarize marked this pull request as ready for review October 24, 2021 01:48
@tatarize tatarize merged commit 1fb47a9 into main Oct 24, 2021
@tatarize tatarize deleted the tatarize/laser-pane branch October 24, 2021 01:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants