Also, finally the command is removed from the toolbar
as the Drawing Workbench is obsolete since v0.17.
The command is still loaded and defined by the workbench
but it is no longer presented to the user interface in the menu
or toolbar.
The scale operation can be used with subelements, vertices
and edges, but in this case this only works with polylines
(wires) because internally the functions `scaleVertex`
and `scaleEdges` only work with polylines that have a `Points`
property.
When doing a copy and scale, it also calls `copyScaledEdges`
which calls `joinWires`, so problems with joining wires
may also be present when performing this operation.
Occasionally it fails to join lines even if the lines
visually share a point.
This is a rounding error in the comparison of the shared point;
a small distance will result in the points being considered
different and thus the lines not joining.
The solution is to test properly the two points using
`DraftVecUtils.equals` which considers the value of
the `precision` set in the Draft preferences.
Also fix an error in determining the objects of type group.
Also call `finish` to properly terminate the command,
otherwise it stays active and behaves incorrectly.
This is the base class of most Draft Gui Commands,
particularly those which were developed a long time ago.
It is inherited by `Creator` and `Modifier`
to set some specific options for some tools.
Newer Gui Commands do not use these classes and thus
are independent of `DraftTool`.
Nevertheless, in the future we expect to organize further
the commands so that they all derive from a few classes,
so that they all share some common properties and behaviors.
These small functions and utilities are placed in another
module, so they can be imported and called
by the individual Gui Command classes as necessary.
When these Gui Command classes are moved to their respective
modules, they will be able to import this auxiliary module as well.
This class defines the `command_name` of the command,
so that it is output to the report view, and is also recorded
in the log file.
It also stores the current document so it can be used inside the
command.
The class implements with `IsActive` method so that the command
is only active when an active document exists.
Also `GuiCommandNeedsSelection`, which subclasses the former
class. It reimplements `IsActive` in order to be available
only when there is a selection.
Changed snap toolbar behaviour:
- create a list of available snaps (Gui.Snapper.snaps)
- make it consistent with Snap Gui Commands (in gui_snaps module)
- create a list of active snaps (Gui.Snapper.active_snaps)
- refactor the isEnabled() method to allow it to check if the given snap is in Gui.Snapper.active_snaps and not if the snap toolbar button isChecked()
- updated and reordered the new list of gui snap commands in draftutils.init_tools and used it as a base to refactor the creation of draft toolbar
- updated all the draft snap gui tools to make them control the toolbar buttons directly
.
.
.