#

## 0.15

> 2024-03-18

- support Blender 4.1
  - auto smooth and custom normal related fixes in
    - Symmetrize tool
    - Nornmal Flatten and Straighten tools
    - Normal Transfer tool
    - Normal Clear tool
    - RealMirror tool
    - Plug tool
    - Boolean tool
- Boolean tool
  - support modifier based Auto Smooth in 4.1
    - when toggling (auto) smooth using `S` key, insert the mod towards the end of the stack, but always before Mirror and Array mods
  - init operator's auto smooth state and angle, from active object
  - when finishing with `LMB` unselect the active
  - hide cutters from rendering via cycles visibility settings too now
  - when canceling restore everything accordingly to its initial state
  - flesh out statusbar
- Symmetrize tool
  - expose redundant center edge removal threshold angle
  - increase it slightly from 0 to 0.05 to be more tolerant
- Select tool/wrapper
  - add Always Loop Select toggle
    - by default connected Sharps are selected, if entire edge selection consists of sharp edges, otherwise an angle based loop selection is done
    - with Always Loop Select enabled now, this behavior is overidden, so you don't constantly have to toggle back to loop selecting, when working on sharp edges
- Stashes
  - improve how stashes HUD is drawn at the top of the 3D view
    - properly offset HUD downs depending on region_overlap pref, theme header alpha, and header and tool header positioning
    - furthermore offset stashes HUD down, if MACHIN3tools focus tool active, and has its own HUD drawn
  - ViewStashes tool
    - improve edit stash object HUD in the same way
    - handle area and space data reference loss due to area maximizing or workspace space changes more gracefully
      - still not recommended to do, while in edit stash mode though
- CreatePlug, AddPlugToLibrary tools
  - ensure plug objects are properly render-able for the thumbnail
- Unchamfer tool
  - fix typo, causing exception in debug mode
- handlers
  - rework when and how handler logic is executed
  - add asset drop cleanup handler (previously in MACHIN3tools) to automatically unlink stash objects after dropping and asset using stashes from the asset browser
- GetSupport tool
  - improve the readme.html file, generated by the tool, providing more details on how to get to the system console
  - in Bender 4.1 (and 3.5) open the readme.html in the Browser automatically
- addon preferences
  - place Get Support button at top of addon prefs
  - add custom updater
    - NOTE: since it's only introduced now in 0.15, it will only be of use for upcoming releases, so can't be used to install this very 0.15 update yet
    - allows for very easy addon update installation from .zip file, and from inside of Blender, instead of manually from the file browser
    - finds matching .zip file(s) in home and Downloads folder
    - allows selecting one of them them or manually selecting a file in any other location
    - extracts the file to a temporary location, and installs update when quitting Blender
    - like a manual update installation from the filebrowser, this maintains previous addon settings and custom keys
    - see installation instructions for details
    - supports - and defaults to - keeping the current assets to prevent accidental loss
- fix issue with thankyou note after manual installation without removing previous installation
- fix plug library unloading messages sell being shown despite registration_debug pref being disabled

## v0.14

> 2023-11-14

- OffsetCut toolexperimental
  - remove dependency on face maps, as they were removed in 4.0
- Wedge tool
  - support HyperCursor 0.9.15pre-release :) alongside previous versions
- addon preferences
- add option to control whether addon (un)registration confirmation is written to the terminal
  - simplify and refactor how the various settings are drawn
  - add HyperCursor to about section in addon preferences
  - addon preferences - add new nag screen
  - draw thank you message direction above the prefs, instead of in a popup
    - for 5 minutes, then disappear forever
- fully support Blender 4.0
  - drop dpi arg in blf.size()
  - support new shader names
  - support new bevel weight custom data layer
- ensure modal HUDs are only drawn on active 3D view, not others
- fix np.float issue with newer numpy versions
- silence reload_modules() debug output for good

## v0.13

> 2023-06-28

- bump minimum Blender version to 3.6
- Normal Transfer tool
  - add previously removed NEAREST NORMAL and NEAREST POLY NORMAL mapping methods again
    - they can be useful when transfering normals next to sharp edges
- Symmetrize tool
  - fix issue when encountering non-manifold center edges at the center
  - lower precision a little when determining which center edges are redundant
- add pre-0.6 Tutorial.blend file to 3D view's sidebar MESHmachine help panel
  - this file contains simple test cases for the tools of the fillet tool set
- switch all timer modals to new system clock based method
  - fixes a long time issue, where timer modals would sometimes run much faster than they should, which was especially annoying for the Add Boolean tool
- update HUD and VIEW3D drawing
- take system's UI scaling into account for all HUDs
- preferences
  - add show_sidebar_panel toggle
  - update about page
- remove bgl completely

## v0.12

> 2022-12-30

- bump minimum Blender version to 3.3
- BooleanDuplicate
- redo completely and now duplicate the entire "object tree", which includes all mod objects, even those that aren't parented
- no longer initiate the translate tool at the end, to keep the operator props in the redo panel accessible
- support local view
- Boolean
- SPLIT
  - ensure all the parenting, all (parented) mod objects, all drivers, hooks etc are proberly and separately reproduced on the split object
  - add displace mod using a strength of 0 on the split off part
- change default auto smooth angle to 20 degrees instead of 30
- BooleanApply
- remove cutter children as well
- Symmetrize
- add ability to remove redundant center edges, enabled by default
- only available if remove and partial are disabled, and if there are no custom normals
- Fuse, Change Width, etc.
- take object scaling into account to determine mouse sensitivity
- various HyperCursor integrations

## v0.11.2

> 2022-04-30

- resolve odd 3.1 related crashes, hopefully
- add thank you note to addon preferences

## v0.11.1

> 2022-04-24

- Boolean
  - disable renderability for cutters
- a few small tweaks and fixes

## v0.11

> 2022-03-09

- support Blender 3.1
- Plug, NormalTransfer and Conform tools
  - use new generalized vgroup management approach, required due to changes in 3.0+
- fix automatic legacy stash update

## v0.10

> 2021-12-24

- Symmetrize tool
  - add mode to remove half the mesh instead of symmetrizing, toggle via `X` key
  - add mode to symmetrize/remove only the selected parts of a mesh, toggle via `S` key
  - take HUD scale prefs into account for drawing of flick distance and HUD labels
- BooleanDuplicate tool
  - support recursive duplication and instancing, allowing for more more complex boolean setups, where operands themselves have boolean mods
  - fix exception when encountering objects without a data block, such as group empties
- MakeUnique tool
  - fix poll for objects without a data block, such as group empties
- MESHmachine menu
  - fix is_instance poll for for non-mesh objects, such as group empties

## v0.9.1

> 2021-12-18

- Flatten tool
  - support multi face flattening with Pick Shortest Path, Box or Circle Selections
  - prevent invalid selections
- Unchamfer tool
  - default to setting sharp edges only if selected faces are smooth
- NormalTransfer and Conform tools
  - use temporary workaround related to this Blender 3.0 bug
- fix Split and Delete tools not appearing in MESHmachine's menu in Blender 3.0

## v0.9

> 2021-11-25

- support Blender 3.0
- add BooleanDuplicate tool
  - create instances via `ALT`
- BooleanApply tool
  - support multi object selections
- Unfuse and Unbevel tools
  - default to setting sharp edges only if selected faces are smooth
- improve GetSupport tool
- addon preferences
  - add option for legacy line smoothing
- remove legacy code for Blender pre-2.93
- drop bgl module use for view3d drawing (except for legacy line smoothing)

## v0.8.2

> 2021-09-10

- Wedge
  - disable debug output
- fix issues on some linux systems

## v0.8.1

> 2021-08-23

- fix Wedge on rotated objects

## v0.8

> 2021-08-22

- add Wedge tool
- Boolean tool
  - add SPLIT mode
- add MakeUnique tool
  - useful for instanced meshes as created by Split Booleans
- BooleanApply tool
  - support applying mods with instanced meshes, such as ones created by Split Booleans
  - support applying mods whose objects are used by multiple booleans
  - name stashes based on boolean operation
    - this allows you to later easily filter out (and remove) stashes of the (at the time) active objects
  - only apply mods, that are visible in the viewport
- ViewStashes and ViewOrphanStashes tools
  - support setting cursor to stash
- Plug tool
  - support re-targeting subset shrinkwrap mods, if their target is the plug object
- AddPlugToLibrary tool
  - work around issues with linked thumbnail scene contents introduced in 2.90
- Lselect tool
  - inverse min-angle for better UX, increasing the angle now grows the selection
- Symmetrize tool
  - fix issue with the flick HUD, if object origin was far behind view
- replace previous parenting and unparenting logic
- use safe matrix inversion everywhere

## v0.7.2

> 2021-03-25

- support stashing evaluated meshes using `ALT` key
- when swapping stash, parent active's children - including decals - to swapped stash object
- fix subset plug creation issue
- fix typos

## v0.7.1

> 2021-03-01

- add NDOF(3d mouse) support for viewport navigation in all modal tools
- add optional stashes HUD offset in preferences
- NormalTransfer and Conform tools
  - reverse stash scroll direction, just like in the ViewStashes tool
- fix Quickpatch raycast error, when filtering out decals but not having DM installed
- fix 2.93 issues due to change in bpy.props representation before registration

## v0.7

> 2021-02-20

- add Boolean tool
- add BooleanApply tool
- add Select tool
  - a selection wrapper that picks VSelect, SSelect, LSelect or Blender's native loop select depending on existing selection context
  - keymapped to `ALT + LMB` by default
- add QuickPatch tool
- add DeletePlug tool
  - with only the handles selected, conveniently delete one or multiple plugs (incl. related and potentiall hidden deformers and occluders)
  - use the `X` "shortcut" in the MESHmachine object menu
- add SweepStashes tool (sidepanel)
  - clean up a scene after appending an object with stashes from another blend file
- Symmetrize tool - add flick mode
  - symmetrize in any of the 6 local space directions using a single keymap
- LSelect tool
  - support selecting multiple loops at once or one after another
  - prevent issues with zero length edges
- expose Stashes in 3D view's sidepanel
  - show, (re)name, swap and remove an object's stashes
- CreateStash tool
  - support stashing face selections
  - support finishing early and canceling
- ViewStashes tool
  - add stash swapping capability
    - support MACHIN3tools grouping, when swapping
  - add stash clearing capability
  - support setting wireframe alpha
  - support canceling when stashes were retrieved
  - select only retrieved stash objects when finishing
- ViewOrphanStashes tool
  - add stash clearing capability
- TransferStashes tool
  - always make transferred stash objects unique
- remove ClearStashes and ClearOrphanStashes tools
- Plugs
  - use to BOUNDS draw type for plug handles
  - fix contain issue in 2.91
- TurnCorner
  - support toggling width adjustement
- QuadCorner
  - fix issue in redo panel
- various other tweaks and improvements
  - add basic statusbar hints for all modal tools
  - improve stash and HUD drawing incl. anti aliasing
  - update stash matrix format and introduce stash versioning and UUIDs
  - support ALT navigation in modal tools where it was still missing
  - make HUD following mouse optional
  - expose HUD timeout factor to preferences
  - fix HUD issue when modal ops are called via keymap
- experimental features (undocumented and excluded from product support!)
  - split edge NormalTransfer approach next to sharp edges
  - BooleanCleanup flip option, useful for mesh cuts
  - OffsetCut tool
- add MESHmachine plug
- update license

## v0.6.13

> 2020-09-10

- fix 2.90 exception, when adding plug to library

## v0.6.12

> 2020-09-05

- ensure 2.90 compatibility
- support ALT navigation
- support proper work space filtering for panels

## v0.6.11

> 2020-06-03

- Symmetrize
  - re-enable symmetrize drawing, which was left off accidentally
- Unfuck
  - update widthlinked + tensionlinked icons in Redo panel
- prevent undo related crash bug in 2.83
- fix issue with real-mirrored decals
- fix 2d array plugs not carrying through the cap vertex groups
- remove obsolete shortcut mentions from the docs

## v0.6.10

> 2019-06-27

- add LSelect
- select loop of ngons based on initial 2 polygon selection
  - requires loop of quads on either side
- select loop of edges from initial single edge selection based on angle threshold
- add SSelect
- select all connected sharp edges
- ViewStashes
  - add edit stash object mode
- lower wire alpha
- LoopTools Circle Wrapper
  - add Fix Midpoint option
- used for circular selections with irregular vert distribution
- stashes HUD
- offset down, if necessary
- fix broken decal asset libraries ui list, due to API change
- fix cursor wrapping in fullscreen
- fix array plugs not creating proper vertex group, due to API limitation (at the time)
- fix Xray toggles in Normal Transfer, Conform, View Stashes, etc due to change in Blender default drawing behavior
- fix issue in Symmetrize, when mesh is positioned in a way, that Symmetrize doesn't produce a center seam
- fix Examples_012 and Examples_017 array plugs
- fix exception when popup_message() couldn't be found, as a result of previous refactoring
- fix issue when removing old version and installing new one in the same Blender session
- prevent errors when coming across certain MM ops in Blenders operator search menu
- a few performance performance improvements

## v0.6.9

> 2019-05-18

- Plug
  - fix recent depsgraph issues
  - support local view
  - if auto smooth is required, enable it
  - fix previous redo issues affection plug rotation and deformation
- AddPlugToLibrary
  - fix recent depsgraph issues
- Insert
  - clear drivers to prevent issues with plugs created in 2.79
  - improve raycast and raycast performance
- BooleanCleanup
  - fix rare vert drawing issue
- stashes HUD
  - take into account MM's modal_hud_scale and Blender's ui_scale prefs
- fix broken driver in Examples plug 018
- fix multi-region issue with modals and HUDs
- fix utils.registraion.reload_plug_libraries()
- fix Plug Packs link in help Panel
- fix gumroad link in Preferences - About

## v0.6.8

> 2019-05-13

- Plugs
  - WARNING: there are issues with redoing the plug tool, until T64300 and T64307 are fixed
    - plug rotation is disabled
    - plug deformation doesn't work when redoing
    - contain and normal transfer options are temporarily enabled by default for that reason
  - create collections when bringing Plugs into the scene
  - default to raycast based plug insertion (at the location of the mouse cursor)
  - support local view
  - remove show wire option and always use the fading wire instead
- Fuse, Unfuse, Refuse, Unchamfer, Unbevel
  - auto-set smooth tool option based on initial selection
  - auto-sets tool options when working on DECALmachine panel decals
- ChangeWidth
  - add taper option
- Symmetrize, RealMirror
  - use different colors when mirroring custom normals
  - improve drawing performance
- RealMirror
  - create collections for originals and mirrored objects
- VSelect
  - draw all vgroups in addition to the highlighted and selected ones
- stashes HUD
  - only draw when overlays are enabled
- CreateStash
  - improve performance significantly
- ViewStashes
  - support retrieving stashes in local view
- TransferStashes
  - draw transferred stashes, this is especially useful in context of the re-stash option
- NormalTransfer
  - optionally switch the matcap automatically when the tool is run and switch back when finished
  - disabled NEAREAST NORMAL and NEAREST POLY NORMAL modes
- Remove Tape tool
  - Grease Pencil now has a Line shape, that's similar
- Preferences
  - add options for context menus for object and edit modes
  - automatically register LoopTools, if the wrappers are enabled and LoopTools is not registered
  - fix issues in Plug Library Rename and Remove
  - add update check
  - add GetSupport tool
  - update about page
  - remove keyboard layout selection
  - remove options to use tools in either SIMPLE or MODAL mode
- add tool tips for all tools
- improve all modal tools
  - prevent jumping values when cursor wrapping, when rotating the view and when toggling SHIFT and CTRL
  - mesh scale and zoom independent modal geometry adjustments
- fix issues when unregistering and Loading Factory Settings
- start refactoring, simplifying and optimizing internals of the chamfer and fillet toolset in preparation for 0.7

## v0.6

> 2018-10-31

- Fuse
- only draw self.capholes in HUD, if not self.cyclic
- Refuse
- add force_projected_loop support
- Flatten
- add 1,2 scrolling
- Unchamfer
- add bweight and bweights props in draw()
- Unfuck()
- fix issue where the handle1co and handle2co wouldn't update properly when the width is changed, because the original end points were used for intersect_point_line() instead of the adjustted start1co and start2co
- TurnCorner
- set smoothing based on initially selected face
- QuadCorner
- lower width min prop
- only draw self.tension in HUD, if not self.single
- Plug and DrawPlug
- use utils.normal.normal_clear_across_sharps() instaed of various vertex group ops, to clear normals acress sharps
  - hide plug type selection in draw()
- fix issue with cointain amount not taking into account plug and target scale
- MyPlugs library
- fix contain issue in 001_Blender plug, as a result of the latest Plug() changes
- CreateStash
- fix exception when pressing d in modal(), when stash has not been created from other object, and so sources was not defined
- allow d key presses to pass through, if there are no sources or if alt, shift, ctrl is pressed
- set MM.isstashobj prop
- ViewStashes
- when retrieving a stashe, only transfer stashes when the stash matrix == target matrix at the time the stash was created
- undo stash naming when retrieving a stash
- unset MM.isstashobj prop when retrieving
- TransferStashes
- move retrieve and restashing to utils.stash.transfer_stashes() - add prop to enable retieval and restashing
  - useful for transfering stashes to plug subsets
  - also useful for transfering stashes to duplicate object with applied scale/rotation
- ClearStashes and RemoveOrphanStashes
- add deletion counter title
- Conform
- make sure stashobjs matrix == active obj's matrix
  - this means you can move and rotate an object with stashes, and conform will keep working
- add ViewOrphanStashes()
- view and retrieve orphan stashes
- add RemoveOrphanStashes()
- removes objects with MM.isstashobj prop and use_face_user props being True and users prop being 1
- BooleanCleanup
- add poll()
- add 1,2 scrolling
- Chamfer
- rename Normal Transfer VGroup stuff to just Vertex Group
- name the actual vgroup "chamfer"
- add 1,2 scrolling
- Offset
- rename Normal Transfer VGroup stuff to just Vertex Group
- name the actual vgroup "offset"
- add 1,2 scrolling
- NormalTransfer
- automatically clear normals across sharp edges, if limit_by_sharps props is True
  - experimental
- NormalClear
- change prevent_sharp_edges to limit_to_selection
- Symmetrize
- redo normal transfer without stashes
- Real Mirror
- fix parenting issues by simplifiying using matrix math
- Looptools Wrappers
- remove UP_ARROW and DOWN_ARROW
- VSelect
- add ONE and TWO keys
- properties.py
- save stash matrix in object.MM.stashmx and stash target matrix in object.MM.stashtargetmx instead of on the stashes
- this is necessary for the retrieval of orphan stashes
- remove obsolete location, rotation and scale props for stashes, it's all done via matrices now
- rename MM.isstash to MM.isstashobj
- utils.core.init_sweeps()
- fix "mark loop"/freestyle issue, where single loop edges weren't expluded when marked
- utils.normal.py - move normal functions from ops over here
- add normal_transfer_from_obj() and normal_transfer_from_stash()
- utils.stash.create_stash()
- always set the stashmx and stashtargetmx props
- this way, you can properly retrieve orphan stashes at the location they were created at
- utils.stash.transfer_stashes()
- add restash arg + logic
- utils.ui.py
- in draw_init() and draw_prop() support modal_hud_scale and user_preferences.view.ui_scale
- UI
- improve stash idx HUD display in NormalTransfer(), Conform(), ViewStashes and ClearStashes()
- remove modal HUD positioning options
- add modal_hud_scale prop
- remove adddon warning

## v0.5.16 limited

> 2018-07-13

- Plug
  - add "global" deformation toggle
    - intended for cases, where you know you are working on flat geometry but the plugs are complex and have a deformer with use_deformer toggled on, perhaps even with subsets set to forcesubsetdeform
    - you can just toggle off all deformation in that case, even for fillet plugs and speed up the plug tool considerably
  - store handle scale
  - store local empty location
  - add simple subdivision to the cointainer, to avoid rare bug in negative corners, where faces to replace are found outisde the container cut
- InsertPlug
- check if plug scale is stored and set it accordingly - check if empty locations are stored and set them accordingly
- ValidatePlug
  - add flipped normals check
  - always automatically deselect handle polyons
  - always generate unique UUIDs for emtpies, when they aren't set
- AddPlugToLibrary
  - add mode selection and with it ability to replace existing plugs
    - useful to update plugs, without having to manually remove the previous version
- MyPlugs plugs
- add Blender logo plug to previously empty library

## v0.5.15 limited

> 2018-07-04

- preferences
  - add plug creator property, useful for plug creators to attach their name, url or email or any other text string to a plug
- Plug
- re-shuffle ui in the redo panel and introduce separate deformation box - support deformers for array plugs - support deformers for subsets - expose deformer related plug precision and subset precision properties - for arrays with deformers especially, higher values seem to be necessary with increasing length of the array
- maintain hierarchy if subsets are paretned to other subsets
- make deformer usage (mesh deform instead of surface deform) optional, not mandatory, if a deformer is present, using the "Use Deformer" property in the redo panel - use forcesubset property, to forceably deform specific subsets, even if "deform subsets" is turned off in the redo panel
- influence deformers via the offset property in addtion to the plug and handle
- improve subset parenting and fix an issue, if target object is chlld of another object itself - fix context.scene.tool_settings.vertex_group_weight related issue
- fix issue where hook or array plug was only correctly determined if hook or array mods where present on the handle, which doest not need to be the case
- CreatePlug
  - clear all materials on the plug mesh
  - keep the subset origin and orientation, instead of aligning it to the plug
- SetPlugProps - optionally set the default deformer precision value for plugs and subsets
- add forcesubsetdeform property
- add isplugoccluder property
- AddPlugToLibrary
  - show indicator for deformer plugs, a small d in the bottom right corner
  - white: deformer use enabled by default
  - black: deformer use is disabled by default
  - missing: no deformer present
- support occluders, objects that help rendering icons of plugs that have significant underhangs
- ValidatePlug (previously DebugPlugProperties)
  - add summary dialog
    - there's basically no need anymore for checking the temrinal, except in cases where you want to actually debug individual plug components/objects
  - add handle n-gon check
  - optionally set visibility and renderability of deformer and occluders and others(array caps) if present
  - show new plug creator property
  - add abolity to generate new UUID (UUIDs are for future proofing and are not currently used, it's just a unique id to mark a specific plug design)
- Example Plugs
- fix plug 003 - add deformers to a few plugs - set creator property for all of them
- add forcesubsetdeform plug
- and occluder example plug - redo all icons
- plug_icon_render.blend
  - update lighting witha a 3rd light source
  - add deformer indicator

## v0.5.14 limited

> 2018-06-27

- Plug
- polystein like detail insertion tool
- does not use boolean, inetead replaces faces directly
- unlike polystein, it does not require any special face selection either
- cleanup and organize
- expose props, as redo seems to work now
- add limited dissolve as a cleanup step, beofre doing tris-to-quads
- create deformation plane and add surface deform mod
  - allows existing chamfers/bevels to perfectly be alligned to surface
  - this also corrects any misalginments of the plug due to low res curvatur of the target surface
- this plane method and face fill function will be used as a fall back method
- the prefered method will be using custom grid/deformation planes per plug:
  - these, instead of the border verts of the plug, will be used to find the faces on the target to replace
  - they will also used for the surfac deform
  - they shold make the current face fill obsolete
  - and so insertions shold become less topology intrusive
- switch to custom per plug deformation plane system
- the deformation plane is called the handle and is also the parent object of the plug
- the plug is the mesh that is embedded
- the plug and the handle can have children, which will be recognized as subsets
- remove end in edit mode prop
- properly error check initial selection
  - this could likey be made redundant with proper plug scene insertion (via DM style asset loaders)
- create stash when non are present and normal_transfer is True
- unparent subsets and plug from handle
- separately do plug vertex projection and handle based target face finding
- add handle subdivision based on precision prop
- move add_vgroup() and unparent() to utils.support
- add draw()
- fix issue with dissolve_limited() dissolving beyond the seection border
  - turns out it needs to be run in FACE mode!
- ensure only the bridged faces and nothing else is selected before running cleanup()
- hide various debug output if debug is False
- control offset loop reach for the plug and the handle
- initialize precision, dissolve_angle and offset_amnt in MESHmachine menu
- add rotation prop, useful to finetune placement/mesh integration
- contain prop, used to limit the face replacement
  - it's a bit slow, but necessary on big flat polys and long ones such as on cylinders or bevels
- add more vertex groups to simplify selections
- use bmesh to create them(assign the verts) and select verts from vgroups
- check for presense of conform vgroup at the beginning
- benchmark
- fix missing faces issue when contain is True
- fix tiny triangle at border issue when contain is True
- fix issue in merge where sometimes edges would be in the border and boundary group when contain is True
- inrease the polygon selection for normal transfer when contain is True
- re-format draw()
- create normal_transfer vgroups
  - do it even if normal transfer prop is False
- add deform prop, to choose whether the plug obj is deformed
  - diabling will only work properly with plugs, that don't have a hard edge (no bevel/fuse)
  - if disabled a normal transfer will also not be done, as it would only smooth across the hard edge, which is undesired
- add deform_subsets prop, which may be desired in some cases
- update testing scene
  - add sharp edge plugs
- do normal transfer without bpy.ops
- do stash creation without bpy.ops
- for EDGE mode, clear the normals so theres no smoothing across the hard edge caused by the data trasnfer mod
- add filletoredge enum prop
  - FILLET always aplies modifier based deformation and does not do vertex proximity offsets
  - EDGE optionally optionally oes modifier based deformation and always does vertex proximity offsets
  - this differentiation now also allows tiny bevels to be properly deforemed, when before the vertex proximity offsets would damage them
- parent and unparent without bpy.ops
- modal, fading wire drawing of the edges relevant to the integration - the same as in the normal transver vgroup verts
- its drawn in a similar fashion as symmetrize, as the plug op is not a modal
- add fading_wire prop in draw()
- add support for Hooks
- fix redo issue in apply_hooks_and_arrays()(previously apply_hooks()) caused by lack of scene.update()
- add support for mesh_deform, through an additional deformer mesh
  - it turns out the surface deform mod has some limitations, like underhangs
  - the mod will either not bind or in some cases the bind is messy and produces offshooting verts
  - the mesh deformer mod seems to handle these cases fine, but setting a plug with a deformer up requires additional effort
  - if a deformer is found a mesh deform of the plug is done, by tying the deformer mesh with a surface deform to the shrinkwrapped handle
- add hidden deform_interpolation_falloff prop, beldner sets this value to 4, but it was insufficient for the 2 dimensional array plug
  - increasing it to 16 seems to fix the issue and does not seem to affect other plugs negatively
- always add a stash if no stash is present, not just when normal transfer is checked
- allow plugging on plugs (before they are plugged)
- automatically set FILLET or EDGE on first run based on object.MM.hasfillet prop
- solve the vertex group issue in 2 dimensional array plugs, by first applying the array mods on the caps of the second plug array mod
- DrawPlug
- fix issue in DrawPlug which would weirdly cause props in Plug to jump when dragged in a redo panel
  - to add to the weird, the fix was to track time handlers like the draw handlers, and remove them before creating new ones
  - unfortunately this sometimes leads to the drawing not fading out and sticking around for a while
  - pluggin again, toggling ao or xray or going into edit mode and out again seems to remove it
  - this should be done properly at some point, just not sure how right now
- Plug Libraries
- add Plugs assets folder
- create Examples and MyPlugs libraries
  - Examples is force-locked, won't be available for plug creation
  - MyPlugs is the startnig library for new user plugs, it contains only 2 blender plugs
- CreatePlug
- creates plug from selected object or objects
  - the active will be the plug mesh, any others will be subsets
- creates plug handle and enters EDIT mode to finish of the handle
  - the handle mesh should be relatively evenly subdividable
  - triangles are fine, n-gons not (as they dont subdivide)
- sets isplug and isplughandle object props
- offsets outer edges slightly
- sets xray and wire rendendering
- add uuid object prop
  - may be useful in future
- add isplugsubset prop
- make handle invisible to render
- this way it doesnt need to be done for icon rendering
- fix issue where the handle location is not properly updated due to the hooks
- automatically set the object.MM.hasfillet prop on the plug object
- add AddPlugToLibrary
- allows plug library selection and optionally setting plug name
- figures out new plug index and builds blend and icon path
- save currentblend to be loaded again at the end
- render icon by appending the scene from plug_icon_render.blend
- delete everything but the plug objs and save the plug blend
- add indicator HUD support and props to toggle them in draw()
- fix issue where the handle location is not properly updated due to the hooks
- automatically focus viewport on handle in case you open the plug blend manually
- SetPlugProps
- manually checks and sets plug props of selected object
- poll whether 1 object is selected
- DebugPlugProps
- check the active objec for plug props
- checks the actives children as well
- so, ideally, you'd select the handle and run the tool, as the handle is the most parent object of a plug
- ClearPlugProps - useful for array plug creation when the caps of the array are created from plug meshes, that already have their props

- add alsoclearvgroups prop, it defaults to True

- Fuse

- save force_projected_loop prop
- Chamfer
- optionally create normal transfer vertex groups
- Offset
- optionally create normal transfer vertex group
- CreateStash
- separate out create_stash() from operator class
- NormalTransfer
- hide various debug outpuf debug is False
- separate out normal_transfer() and add_normal_transfer_mod() from operater class
- NormalClear
- separate out normal_clear() from operator class
- Real Mirror
- converts mirror mods into real independent objects
- does proper mirrored origin, orientation and custom normals
- add poll checking for active mirror mods
- fix 180 degree rotation issue
- allow empty targets(mirroring across itself)
- support multiple axes
- support multiple mirror mods
- add optional uv offset on the mirrored objects
- optionally create group for the mirrored objects
- optionally apply data transfer mods for the mirrored objects
- fix issue if obj received custom normals from applying data transfer
  - in this case the loop/normal data needs to be received from the mirror object, not from the original
- VSelect
- it's like select linked for vertex groups
- select vert/edge/polygon
- run VSelect and the enite vertex group the selections belongs to will be selected
  - if there are multiple, you can scroll through them
- if nothing is selected you can scroll through all of the vertex groups of the object
- unlike select similar set to VGROUP, this works on all selection types, and supports mulitple vgroups per selection
- keep it all in edit mode bmesh instead of mode switching
- make it modal
- drawHUD and drawVIEW3D
- individual group toggle
- all group toggle/invert
- instead of returning the vgroups common to all selected elements, return all vgroups in the selection
- this allows for easily selecting multiple specific groups by using on vert/edge/poly per group, coupled with the A modal toggle
- DrawSymmetrize
- get the vert ids by importing from symmetrize.py instead of passing them in as an str argumment
- utils.registration.py
- registers, unregisters and reloads plug libraries
- change insert function template in utils.registration to support plug removal via modal dialog operator RemovePlug()
- add bpy.types.Scene.newpllugidx prop
  - automatically set bpy.context.scene.newplugidx when bpy.context.scene.pluglibs is changed
- utils.append.py
- has methods for group, world and scene appending (turned out only scene was needed for plug icon rendering)
- utils.devloper.Benchmark
- prints time for each Benchmark.meassure()
- prints total time via Benchmark.total()
- compares time to previous tool run execution
- add do_benchmark toggle
- utils.support.add_vgroup()
- create vgroup and make it active using bpy.ops, if no vertex id list is passed in
- utils.support.py
- add .parent() and unparent()
- properties.py
- introduce isstash, isplug and isplughandle props
- add isplugdeformer object property
- preferences
- add showplugcount prop
- add plugfadingwire prop
  - be default this is off and so the fading wire option will not be available
  - this is because a weird crash to desktop bug appeared
  - it happens if you plug the only object in a scene and change the wire/fading fire options
  - if you comment out the fading wire code, the issue vanishes, so it is related to this
  - the weird part is, if you add a stash or a second object to the scene, verything is fine
- add pluglibsCOL and pluglibsIDX
- create Plugs tab
- add plugsinlibraryscale, showpluglabels and plugxraypreview prefs
- add plurgremovemode prop to menu
- add showplugbutton and showplugbuttonname props to prefs
- init.py
- add PlugLibsCollection() and PLugLibsUIList() to init.py
- UI
- add check() to all ops that have a draw function - this ensures redrawing when props change
- add Plug tool
- add Plug Libraries
- add plurgremovemode prop to menu
- create Plug Utils submenu
  - add Create Plug, Set Plug Props, Clear Plug Props and Debug Plug Props

## v0.5.13

> 2018-06-02

- Fuse
- add Fuse prop “Projected Loop”
  - forces rails to not be aligned with existing loop edges
- add Conform tool
  - shrink wrap with stash as target
  - conform selection to stash object
- add Boolean Cleanup tool
  - used to fix verts of an edge loop in place based on connected edges on the selected side
  - merge the other verts based on a threshold
  - can be used on cyclic and non-cyclic edge selections
- add Chamfer tool
  - per side loop slide toggle
  - 2 face methods:
    - REBUILD with the optional Merge Perimeter prop
    - REPLACE with the Reach prop
  - the methods are different ways of dealing with geometry outside of the chamfer, which the chamfer may overlap depending on the width
  - REBUILD should be used if the chamfer doesnt or only minimally overlaps
  - REPLACE can be used if the chamfer overlaps a lot
- add Offset tool
  - similar to Chamfer, but offsets an edge in the chosen direction
- add LoopTools modal wrappers for Circle and Relax
  - only availble the LoopTools addon is activated
- Symmetrize()
  - fix exception when fix center seam is turned on, but there aren’t any center verts
- add version string to registration terminal output

## v0.5.12

> 2018-05-22

- added Merge option to Unf*ck
- Added Stashes (states of an object at a user set time)
- Create Stash
  - from active
  - from other(s) to active
- View Stashes
  - you can also retrieve stashes
- Clear Stashes
  - individual or all
- Transfer Stashes
  - from other to active
- there’s a persistent HUD for stashes (top of the screen)
  - shows stashes count and invalid stashes count
- added NormalTrasnfer tool
- transfers normals from a stash
- stash normals can be flipped from the tool’s modal using F
- the stash can also be smoothed if you have stashed an unsmoothed obj, using S in the modal, this has no ui representation yet, as I’m not sure what to display
- added Symmetrize tool
- it’s Blender’s symmetrize op, with the added ability to mirror custom normals
- default keymaps are Alt + X, Alt + Y and Alt + Y
  - change in prefs
- default directions is + to - for X and Z, and - to + for Y
  - change in prefs (unfold the keymap)
- when symmetrizing meshes with custom normals, Symmetrize will creates a pre-symmetrize stash
  - this is because of the clear center seam Transfer option, you may want to use
  - you probably want to regularly clean out those stashes if they accumulate
  - although you don’t have to, a good strategy is probably to leave all the normal manipulation and transferig to the end, just remember to stash you model before you mess up the surfaces and you will be good
- MESHmachine menu:
- loops and normal tools have been put in sub menus
- stash tools are available from edit and object mode
- change mouse_wrap to hopefully fix a bug, that I can’t reproduce

## v0.5.11

> 2018-05-14

- added Normal Flatten tool
- used to fix shading issues, especially for ngons, that should be flat
- has angle threshold value and presets
- only boundary faces angled below the threshold are taken into account
- boundary faces separated by a sharp edge are also ignored
- has “clear existing normals” toggle, which is as if the the Normal Clear tool were to be run before running Normal Flatten
- added Normal Straighten tool
- used to fix angular shading on straight sections of Fuse/Bevel/Bridge surfaces
- its effect is less noticable than Normal Flatten, but its something hat can be done in the pursuit of normal perfection
- added Normal Clear tool
- does not remove split normal data completely like Blender’ss customdata_custom_splitnormals_clear() operator does
- instead works on the selection only
- improved handling of an issue in Unfuse

## v0.5.10

> 2018-05-08

- fix HUD offsets, Tape offsets and mousewrap issues with some layouts
- add Tape stroke undo/redo (ctrl + z/ctrl + shift + z, F1/F2)
- add flatten face/vert mode to subtitle in HUD
- QuadCorner slipped through the cracks:
- add mouse wrap
- add pen tablet support

## v0.5.9

> 2018-05-06

- make Flatten, Unbvel, Unchamfer and Unfuse modals too
- add ability to toggle modal behavior per tool
- fix issue in Unbevel, in LOOP mode, if reverse was enabled, which
- don't show mesh split or delete in the special menu

## v0.5.8

> 2018-05-03

- make Flatten, Unbvel, Unchamfer and Unfuse modals too
- add ability to toggle modal behavior per tool
- fix issue in Unbevel, in LOOP mode, if reverse was enabled, which
- don't show mesh split or delete in the special menu

## v0.5.7

> 2018-05-02

- Fuse + Refuse

  - fix crash to desktop bug in modal Fuse/Renfuse, when the initial run caused an exception
  - turn off show_modal_ops (in the menu) by default

- UI:

- add viewport contolls while in a modal, by using PASSING_THROUGH when MIDDLEMOUSE is pressed

## v0.5.6

> 2018-05-01

- improve error handling
- improve modals and HUDs
- rename the NEW/v0.6 handle method to FACE and the OLD/v0.5 handle method to LOOP
- basically, switch to LOOP when FACE fails
- improve modal performance
- fix projected_loop edge case, where the loop woud go in the wrong direction
- add HUD Corner position

## v0.5.5

> 2018-04-30

- add Average Tension setting for Fuse/Refuse
- improve intersection handles (NEW/v.0.6)
- add modal Fuse, Refuse, QuadCorner, Unf*ck
- add modal HUDs
- add Mark/Clear Loop, these are just freestyle edges for now
- used to force certain edges as loop edges (if one is marked)
- used to exclude certain edges from loop edges (if more than one is marked)
- lower Unf*ck minimium vert count by one
- support QWERTY/QWERTZ keyboard layouts
- QWERTY: x key used for the MESHmachine menu
- XX for delete
- QWERTZ: y key used for the MESHmachine menu
- YY for mesh split
- modals can be turned on/off in the prefs
- can also be turned on/off in the MESHmachine menu, if enabled
- HUD position can be FIXED or FLOATING
- HUD color can be changed in prefs
- HUD hints can be turned on/off in prefs

## v0.5.4

> 2018-04-26

- add ‘Modal Operators’ toggle to prefs and MESHmachine menu
- default ON
- modal Change Width
- mouse Left/Right for width
- R key for reverse (on single polygon chamfers)
- modal Turn Corner
- mouse Left/Right for width of “short side”
- mouse wheel up/down to select one of two corner orientations
- S key to set sharps (default ON)
- B key to set bweights (default OFF)
- add sharps and bweight to TurnCorner()

## v0.5.3

> 2018-04-24 * fix issue in QuadCorner caused by recently introduced intersection handles

## v0.5.2

> 2018-04-24

- Unfuse
- properly set boundary sharps for Unfuse()
- add set Sharps and Beweights options to Unbevel() and Unfuse()
- Refuse
- fix bweights not being properly set based on loop edges
- Unbevel
- add the new intersection method to Unbevel

- set sharps when unbeveling

- fix exception when running ChangeWidth(), Fuse() and Unchamfer() on cyclic fuse selections

- fix leaving edit mode when running those same ops on non chamfer selections

## v0.5.1

> 2018-04-23

- add alternative handle creation method create_intersection_handles(), based on projected loops interecting implicit faces create from the average normals of v.link_faces
- add alternative unchamfer() utilizing the intersection handles
- add unchamfer method selection
- make new unchamfer method primary
- disable force_projected in get_loops() for the new method
- add fallback to create_intersection_handles() which uses the old create_handles() for each failing caseA
- remap the average/center value used to lerp between the two handle locations in unchamfer_intersection()
- optionally add MESHmache menu to Specials menu
- add the new handle method for fuse and unfuse
- remove boundary rail bweigths and set sweep beweights according to biggest value of loop edges
- move segments > 0 check to the beginning
- fix issue when trying to sett beweight, while both loop edges were projected (and so no longer exist)
- break out of biggles_angle_loop() if the two top angles are too close together

## v0.5

> 2018-04-18

- initial release

« Previous