# Custom undoable commands

This example demonstrates how to create a custom undoable command with user-defined code.

## Content

This example demonstrates how to create a custom undoable command with user-defined code that can be easily integrated into a viewer with support for Undo and Redo functionalities. For example, we create an undoable custom command that changes the opacity of the main viewer element.

$$codemineBlock
JTdCJTBBJTIwJTIwJTIyaXNJbnNlcnRTbmlwcGV0JTIyJTNBJTIwZmFsc2UlMkMlMEElMjAlMjAlMjJpZCUyMiUzQSUyMCUyMjM5NjViMzVlLTJhMWItNGQ1My1hMjcyLWI2MTI1NDYxOGVhNiUyMiUyQyUwQSUyMCUyMCUyMmhlaWdodCUyMiUzQSUyMCUyMiUyMiUyQyUwQSUyMCUyMCUyMmpzY29kZW1pbmVFbmRwb2ludCUyMiUzQSUyMCUyMmh0dHBzJTNBLy9qc2NvZGVtaW5lLm1lc2NpdXMuaW8vJTIyJTJDJTBBJTIwJTIwJTIycHJvamVjdCUyMiUzQSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMmNvbGxlY3Rpb25JZCUyMiUzQSUyMCUyMiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMmV4dGVybmFsU2hhcmVUb2tlbiUyMiUzQSUyMCUyMk5hRDMya09FdlVhY3cyVEVKMVhHQlElMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJpZCUyMiUzQSUyMCUyMjVlMjdhOGM3LTQ5NDUtNGYzMy1iMDRjLTRjMzdiMTNhMjg5YSUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMmxhc3RNb2RpZmllZERhdGUlMjIlM0ElMjAlMjJKdXN0JTIwTm93JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIybGFzdE1vZGlmaWVkYnlOYW1lJTIyJTNBJTIwJTIyRG1pdHJpeSUyME1hcmZpbiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMm5hbWUlMjIlM0ElMjAlMjJDdXN0b20lMjB1bmRvYWJsZSUyMGNvbW1hbmQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJzaGFyZVN0YXR1cyUyMiUzQSUyMDElMkMlMEElMjAlMjAlMjAlMjAlMjJzbmlwcGV0cyUyMiUzQSUyMCU1QiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMnRva2VuJTIyJTNBJTIwJTIyeDZnblhrVkpNMF93VEV3M3NUb29tZyUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMnBhdGglMjIlM0ElMjAlMjIvQ3VzdG9tJTIwdW5kb2FibGUlMjBjb21tYW5kJTIyJTBBJTIwJTIwJTdEJTJDJTBBJTIwJTIwJTIyc2hvd0NvbnNvbGUlMjIlM0ElMjBmYWxzZSUyQyUwQSUyMCUyMCUyMnNob3dFZGl0b3IlMjIlM0ElMjBmYWxzZSUyQyUwQSUyMCUyMCUyMnNob3dFeHBsb3JlciUyMiUzQSUyMGZhbHNlJTJDJTBBJTIwJTIwJTIyc2hvd1ByZXZpZXclMjIlM0ElMjBmYWxzZSUyQyUwQSUyMCUyMCUyMnNuaXBwZXRzJTIyJTNBJTIwJTVCJTVEJTJDJTBBJTIwJTIwJTIyb3JpZ2luU3RyaW5nJTIyJTNBJTIwJTIyJTIyJTBBJTdE
$$


<br>
