Q: UNDO in EstlCAM v12 or v11? Ans: Nope. Workaround: Use EstlCameo & Autohotkey

One of the most annoying things in estlcam is that it seems there is no way to undo something?

Like if you accidentally delete something you didn’t mean to etc. is this true? Or am I just missing something?

Try ctrl z

Very silly :smiley:

First thing I tried. Reading a bit more on this forum it seems that this is just something estlcam doesn’t have… very odd thing to not include

1 Like

I thought it worked sorry!

I thought there was one, but it was a strange key. Like backspace.

According to this post, one “can use Backspace key to “undo” points on a path actively being defined. But even today, for other operations, ctrl+Z will not undo changes in a way you’d intuitively expect.”

1 Like

According to the AI…

But yeah, the AI is right, there is no undo if you delete something, but backspace does remove the last point you made when manually drawing. :slight_smile:

Hello,

there is no general undo in Estlcam - only for some functions like the already mentioned manual shape selection where you can undo wrongly chosen points and paths. The key for undo is backspace.

I know this is a nuisance and tried to implement it a few times. But no success so far - all concepts I came up with were either too complicated or cost too much performance. It is a “to do” for me but one with little chances of actual realization.

Christian

7 Likes

Yeah, I found it a little annoying at first but I’m used to it now and it doesn’t bother me.

Hey Christian!

Thanks for creating this software!

I think for me this is the biggest downside to the software. Especially as a beginner, it’s easy to make a small mistake, or accidentally delete something and then you basically have to start over (at least in some cases).

Since the file sizes are pretty small, could if be an option to just save a version and keep x amount of backups on disk?

1 Like

Even if full undo behavior (via Memento pattern or similar) never happens. Sure would be nice to have an opt-in option that snapshots N last states e.g. 10 (at the expense of some disk space and cpu per undoable operation). Maybe undo functionality gets gradually implemented over time for most commonly used, and commonly fluffed up operations, e.g. unintended new toolpath.

@christian-knuell, consider leveraging community passion and skills here to contribute, and, sign NDA if needed to respect your work.

1 Like

Frustrating, yes. The solution that I have found is to make frequent saves (at least once per minute, or after any significant section of activity). Then when I want to undo, I simply re-load the last good saved project and continue on.

1 Like

I like!

Yeah, would be cool if this could be automated. Creating an autosave function, with a time increment, and a max files, where it starts removing older backups.

1 Like

Undo is surprisingly difficult. You either need to keep a vector of the entire software state, which can increase memory consumption by a huge amount, or implement your entire state as a vector of changes and any operation that needs that state has to compute the compound result by simulating every state.

I absolutely understand that it is either complex or prohibitively expensive (memory wise). I am honestly surprised it is so common in applications. It would need to be built into the system design from the start. You’d almost end up with something like the history from fusion/onshape completely hidden in the background.

A practical alternative (which is very annoying for the user) is to save the project into separate files and load to resume state if you make a big mistake. It’s super annoying. So I would only do that on big projects and maybe only every 5 mins or so.

2 Likes

I’ve written a Powershell script before that monitors a specific directory. Any time a file changes (such as when you save it) it makes a copy with a timestamp in the filename.

3 Likes

Thanks! You described it very well.

There are only 2 options I’m aware of:

“Transactional” Type Undo:

  • The software keeps a log of every user action.
  • Then in case of undo it either:
    • Kills everything and plays back each action up to the second last one.
      • Quite easy to do but excessively time consuming the further the project progresses.
    • Or it has a “reverse” routine for every possible action:
      • Very complex and prone to errors - you basically have to program many aspects of your application twice. It is hard to describe to non-programmers how many and nasty pitfalls lure on this approach - especially with something so seemingly innocent as a previously deleted object.
      • But this is unfortunately the only option that has no massive performance penalty on the application.

“Memory dump” Type Undo:

  • The seemingly easy thing to do: just save the project with every user action.
  • Works very very well if you have a drawing with a rectangle and 2 circles in it.
  • But bogs the application and computer down to a crawl with anything remotely complex.
    • I know many users work with drawings containing millions of objects (vector tracing software can blow even the most mundane and simple drawing up to a multi million line maze).

I’m quite proud that Estcam is a very quick and responsive Application for most use cases. A file with 5 million line fragments your CAD is barely able to open and needs several seconds for any user input to process? Estlcam still works fine…

I don’t want to go the memory dump route because with this approach just changing the cutting depth of an object can - and will - take several seconds to process on large projects.

And I can’t handle the complexity and development time needed for a good transactional undo.

And besides accidentially deleted objects there is not much real need for undo: Entered the wrong cutting dept: just enter the correct depth again. Selected the wrong tool? Select the correct one again…
Only slightly more work than hitting the undo hotkey.

Christian

2 Likes

I can’t believe I’ve never thought of this! I’m going to implement this for a non-cnc related project of mine.

Is there a key shortcut to save, e.g. Ctrl + S ?

I have no idea what typical and outlier projects look like. Do you already have, or want, usage stats to help inform design decisions and help determine where some form of partial Undo functionality fits in your backlog? Consider optional auto snapshot (with max snapshot count, and, max allowed snapshot duration threshold, e.g. 1sec, i.e. auto snapshot would automatically be capped to only work for small-medium projects). Depending on Customer usage patterns, maybe a time capped snapshot would benefit a large number of Customers working on simple designs?

Personally, feels like most of my projects are small.

I have had to implement this into our production software before and it wasn’t as daunting as it sounds.

I obviously can not share our solution, but…

I used to do some opensource piddling with SharpDevelop in the 2011-2015 time frame, which has an integrated FormsDesigner and WPF Designer. I know that their designers both had undo functionality, is open source, and was in .NET already.

So if you ever want to consider adding undo/redo, it’s probably a great go-by for the functionality if you can still get your hands on that latest SharpDevelop 5 source code before it was abandoned

1 Like