NShape Designer Changelog

What's new in NShape Designer 2.4.1

Jun 24, 2022
  • Bugfixes:
  • ArithmeticOverflow when loading/saving repositories containing a shape with SupplementalLayer property set to LayerIds.Layer32 (or a combination containing Layer32).
  • Shape.FindNearestControlPoint with parameter 'capabilities' set to ControlPointCapability.Connect no longer prefers ControlPointId.Reference over other connection points.
  • ShapeGroup did not implement loading/saving HomeLayer (available in future versions)
  • Loading/saving Int64 fields was not implemented in SQLStore
  • Improvements:
  • Optimized performance of static conversion functions Layer.ConvertToLayerIds and Layer.ConvertToLayerId

New in NShape Designer 2.4.0 (May 24, 2022)

  • New Features:
  • Shape now supports diagrams with a size up to 1000000 x 1000000 diagram units.
  • Bigger diagrams may work but this is not guaranteed. Arithmethic overflow checks are now enabled for all NShape assemblies.
  • Changed Geometry functions to work with large coordinate values.
  • Some functions are deprecated now because of unavoidable arithmetic overflows with large coordinates.
  • New property "ZoomLevelHD" for IDiagramPresenter / Display.
  • When using large diagrams, we strongly recommend using the ZoomLevelHD property because the ZoomLevel property is very limited in terms of zooming the diagrams to small zoom levels.
  • Adjustable spatial index cell size for better performance when working with huge diagrams and small shapes.
  • Caution: This is an application level setting, do not change while a project is open!
  • public static int Diagram.IndexCellSize { get; set; }
  • Interface Change:
  • Changed interface of Tool classes in order to make them more customizable.
  • There are 2 new concepts for customizing tools.
  • The first one consists of a set of new methods that take a filter delegate.
  • If you want do customize e.g. finding control points, then override the tool's 'CreateIsConnectionTargetFilter' method and return your custom filter delegate.
  • protected static bool CanConnect(Shape shape, ControlPointId controlPointId, Shape otherShape, ControlPointId otherControlPointId)
  • protected void InvalidateConnectionTargets(IDiagramPresenter diagramPresenter, int positionX, int positionY, ControlPointCapabilities capabilities, int range, TargetFilterDelegate isConnectionTarget)
  • protected void DrawConnectionTargets(IDiagramPresenter diagramPresenter, Shape shapeAtCursor, ControlPointId gluePointAtCursor, Point newGluePtPos, ControlPointCapabilities capabilities, int highlightRange, int connectRange, TargetFilterDelegate isConnectionTarget)
  • protected static Locator FindNearestTarget(IDiagramPresenter diagramPresenter, int x, int y, ControlPointCapabilities capabilities, int range, TargetFilterDelegate filter = null)
  • protected static Locator FindNearestTarget(IDiagramPresenter diagramPresenter, int x, int y, ControlPointCapabilities capabilities, bool searchChildShapes, int range, TargetFilterDelegate filter = null)
  • protected static float FindNearestSnapPoint(IDiagramPresenter diagramPresenter, int x, int y, out int snapDeltaX, out int snapDeltaY)
  • protected static float FindNearestSnapPoint(IDiagramPresenter diagramPresenter, Rectangle bounds, out int snapDeltaX, out int snapDeltaY)
  • protected static Point CalculateDistanceToConnectionTarget(Point position, Shape targetShape, ControlPointId targetPointId)
  • protected static Point CalculateDistanceToGridLine(int fromX, int fromY, int gridSize, int range)
  • protected static Point CalculateMouseOffset(Point mousePos, Shape shapeAtMouse, ControlPointId controlPointAtMouse)
  • protected delegate bool TargetFilterDelegate(Shape shape, ControlPointId controlPointId)
  • protected static IEnumerable<Locator> FindConnectionTargets(IDiagramPresenter diagramPresenter, int positionX, int positionY, ControlPointCapabilities controlPointCapabilities, int range, TargetFilterDelegate isConnectionTargetCallback)
  • protected ShapeAtCursorInfo FindConnectionTargetFromPosition(IDiagramPresenter diagramPresenter, int x, int y, bool onlyUnselected, bool snapToConnectionPoints)
  • protected virtual TargetFilterDelegate CreateIsConnectionTargetFilter(IDiagramPresenter diagramPresenter)
  • protected void CreatePreviewShapes(IDiagramPresenter diagramPresenter)
  • protected void ResetPreviewShapes(IDiagramPresenter diagramPresenter)
  • protected virtual int HighlightTargetsRange { get; }
  • protected virtual int GetFindTargetRange(IDiagramPresenter diagramPresenter)
  • protected virtual int GetFindGridLineRange(IDiagramPresenter diagramPresenter)
  • The second new concept consists of new virtual methods that will be called when processing the mouse events. If you want to customize moving shapes or control points, override the appropriate 'OnPreview...' and 'On...' methods. Return false in the overridden methods to indicate the base class should not execute its original code after the overridden function was called.
  • SelectionTool:
  • protected virtual void OnPreviewShapesCreated(IDictionary<Shape, Shape> previewShapes)
  • protected virtual bool OnPreviewHandleMoving(IDiagramPresenter diagramPresenter, MouseState mouseState, Shape shapeAtCursor, ControlPointId controlPointAtCursor)
  • protected virtual bool OnHandleMoved(IDiagramPresenter diagramPresenter, MouseState mouseState, Shape shapeAtCursor, ControlPointId controlPointAtCursor)
  • protected virtual bool OnPreviewShapesMoving(IDiagramPresenter diagramPresenter, MouseState mouseState, Shape shapeAtCursor, ControlPointId controlPointAtCursor)
  • protected virtual bool OnShapesMoved(IDiagramPresenter diagramPresenter, MouseState mouseState, Shape shapeAtCursor, ControlPointId controlPointAtCursor)
  • protected virtual bool OnPreviewShapesRotating(IDiagramPresenter diagramPresenter, MouseState mouseState, IEnumerable<Shape> shapes, int sweepAngle)
  • protected virtual bool OnShapesRotated(IDiagramPresenter diagramPresenter, MouseState mouseState, IEnumerable<Shape> shapes, int sweepAngle)
  • Template Tools:
  • protected virtual bool OnPreviewShapeMoving(IDiagramPresenter diagramPresenter, MouseState mouseState)
  • protected virtual bool OnLinearShapeCreating(IDiagramPresenter diagramPresenter, MouseState mouseState, bool discardLastVertex)
  • protected virtual bool OnPlanarShapeCreating(IDiagramPresenter diagramPresenter, MouseState mouseState)
  • Bugfixes:
  • Cutting connected shapes together using DiagramSetController.Cut() did not store the connections properly
  • Show diagram properties in PropertyPresenter only if no shapes are selected
  • Fixed generic repository methods
  • LineShapeBase.GetControlPointIds(ControlPointCapabilities.Connect) did not return an id for the reference point.
  • Improvements:
  • Improved zooming with mousewheel: The display now uses an adaptive zoom speed when zooming with mouse wheel.
  • Improved line cap drawing: Avoid cumulating numeric errors and improved performance
  • 'CanConnect' of line shape classes now check the line's second glue point if connected to the same shape via point-to-shape
  • ArgumentExceptions and ArgumentNullExceptions now use nameof() instead of hard coded parameter names.

New in NShape Designer 2.3.1.0 (Jan 27, 2022)

  • New Features:
  • New Property 'Display.EnterClosesTextEditor': Close the shape text editor by pressing the enter key (default value: false)
  • Bugfixes:
  • A NullReferenceException occured when deleting a captioned shape's text with the display's shape caption editor.
  • Text in the shape caption editor was invisible when clicking on shape's text and not moving the mouse or pressing a key.
  • Line shapes calculate their normal vector (using CalcNormalVector) in the correct direction
  • LineShapeBase now overrides Shape.CalculateNormalVector and returns the normal vector calculated by ILinearShape.CalcNormalVector
  • Bugfixes in Geometry.TriangleContainsPoint and Geometry.CalcNormalVectorOfRectangle
  • Bugfixes and refactorings in 'LabelBase' shape class
  • PolylineBase.HitTest now resprects given the range when hit testing line segments
  • Improvements:
  • XML Store no longer overwrites images with the same image file name but ignores them instead ('ImageFileLocation.Directory' only).
  • SelectionTool's snap function now snaps to shapes, too (if no 'real' connection points are in range)
  • Slower autoscroll when dragging mouse (e.g. selection frame)
  • Added generic version of Tool.FindNearestControlPoint in order to enable searching for specific shape types

New in NShape Designer 2.2.0.0 (Apr 29, 2014)

  • Interface Change: IDisplayService.NotifyBoundsChanged is obsolete now.
  • Use the Resized event of the diagram instead (see below).
  • Interface Change: Changed several event args classes:
  • * EventArgs class ShapeMouseEventArgs (unused) was deleted.
  • * EventArgs class ShapeEventArgs (unused) was renamed to ShapesEventArgs
  • * EventArgs class DiagramShapeEventArgs (unused) was renamed to DiagramShapesEventArgs
  • * EventArgs class ShapeEventArgs was added.
  • * EventArgs class DiagramPresenterShapeEventArgs was added
  • Extended Interface: IDiagramPresenter interface is now derived from ISynchronizeInvoke in order to enable thread synchronized timer events (when using System.Timers.Timer's property
  • "SynchronizingObject").
  • Extended Interface: Added IDisplayPresenter.CloseCaptionEditor(bool applyChanges)
  • Extended Interface: Added three events to IDisplayPresenter:
  • event EventHandler ShapeMoved;
  • event EventHandler ShapeResized;
  • event EventHandler ShapeRotated;
  • Extended Interface: Added boolean property CanModifyVersion to the IRepository interface.
  • Specifies whether the current repository implementation supports upgrading the load/save version of the repository.
  • Extended Interface: Added Method UpgradeVersion to the IRepository interface which will upgrade the load/save version of a repository (or throw an exception if upgrading is not supported).
  • Extended Interface: Added boolean property CanModifyVersion to the Store base class.
  • The shipped XmlStore will support upgrading load/save version whereas the shipped AdoNetStore will not.
  • Extended Interface: Added the following members to the XmlStore class (see new features for details):
  • bool LazyLoading { get; set; }
  • ImageFileLocation ImageLocation { get; set; }
  • Extended interface: Added four events to the Diagram class:
  • event EventHandler ShapeMoved;
  • event EventHandler ShapeResized;
  • event EventHandler ShapeRotated;
  • event EventHandler Resized;
  • Extended interface: Base class "Shape" was extended by the following protected members in order to enable custom collection implementations for the Shape.Children collection.
  • protected ShapeAggregation ChildrenCollection { get; }
  • Provides access to the collection that stores and manages the shape's child shapes. The collection is null by default and will be created when needed and deleted when not needed any more.
  • protected virtual ShapeAggregation CreateChildrenCollection(int capacity);
  • Creates an instance of the children collection with the given capacity. Override this method if a custom implementation of the children collection is needed.
  • Extended interface: Added two methods to the ICaptionedShape interface:
  • bool GetCaptionIsVisible(int index)
  • void SetCaptionIsVisible(int index, bool isVisible)
  • Extended Interface: For implementing the new methods above, the Caption class got a new property
  • bool IsVisible { get; set; }
  • Extended Interface: Base class Tool has now a property DoubleClickTime that takes the interval (in ms) used for interpreting two subsequent clicks as double click.
  • Extended Interface: Added three protected virtual methods to ReposioryWriter Base class:
  • DoWriteModelObject
  • DoWriteStyle
  • DoWriteTemplate
  • Extended Interface: Added constructor overloads to the DelegateMenuItemDef class
  • Interface Change: Data type of Geometry.Signum changed from int to sbyte.
  • Interface Change: Moved the following (never implemented) methods from class CachedRepository to class Project and implemented them:
  • string GetXml()
  • void WriteXml(Stream stream)
  • void OpenXml(Stream stream)
  • New Feature: XmlStore now supports partial loading for improved performance. Partial loading is disabled by default (for backwards compatibility) and can be enabled using the XmlStore.LazyLoading property:
  • When loading diagrams, the diagram instance is loaded without contents. The diagram contents have to be loaded explicitly by calling the IRepository.GetDiagramShapes method.
  • Make sure that all GetDiagramShapes was called for all diagrams before saving.
  • New Feature: XmlStore provides a new property ImageLocation which specifies whether images are stored in a seperate directory (as it was until now) or whether images are embedded into the XML file as base64 encoded string.
  • When loading an existing XML file, the ImageLocation setting of the file will be determined and used until it the XmlStore is closed or the ImageLocation is overridden by setting the ImageLocation property while the XmlStore is open.
  • New Feature: NShapeDesigner implements the new 'Upgrade Version' feature (see Interface extensions above).
  • New Feature: NShapeDesigner implements the new 'Use Embedded Images' feature (see above).
  • New Feature: NShapeDesigner implements Project.GetXml (see above) with menu item "Export Repository to Clipboard (XML)" located in the "File" menu.
  • New Feature: NShapeDesigner implements Project.OpenXml (see above) with menu item "Import Repository from Clipboard (XML)" located in the "File" menu.
  • Improvement: XmlStore has an additional constructor that takes a stream instead of a directory and a file extension. If the XmlStore was constructed using this constructor, the stream will be used for loading/saving for the lifetime of the XmlStore.
  • Improvement: Inserting diagrams with duplicate names in the repository will now raise an exception.
  • Improvement: You can now select "None" as color for line caps. In this case, the line cap will be filled with the color of the line.
  • Improvement: Updated all demo projects to version 5 (using embedded images).
  • Improvement: Updated documentation to reflect all interface changes of the last few versions and added several yet undocumentated classes.
  • Changed Behavior: The CachedRepository now allows the assignment of a store while repository is open in case that no store exists yet.
  • Changed behavior: NShapeDesigner no longer asks for a file name when creating a new XML project.
  • Instead, no store is created in this case in the first place. It will be created when saving the project for the first time.
  • Changed Behavior: Holding down the control key while moving a shape means now 'Toggle snapping to grid' instead of 'Do not snap to grid'.
  • Changed Behavior: When clicking on overlapping shapes (with OverlappingShapesAction != None), the selection of the next/topmost shape will be deferred until the double click detection time elapses.
  • Changed Behavior: Tools never received MouseUp events with clicks > 1 because WinForms controls reset the click count before raising the MouseUp event of the double click's second click.
  • In Addition to that, multi-clicks are now supported (tripple-click, quadruple-click, etc) as the click count will not be reset after a double click (as WinForms controls do).
  • Bugfix: Clicking the save button in NShapeDesigner while editing the caption of a shape will no longer cause an exception.
  • Bugfix: NShape components will now remove all registered event handlers propertly.
  • Bugfix: Undoing "ungroup" on a rotated group now reverts the rotation of the group members correctly
  • Bugfix: When creating linear shapes, the connection points near the mouse cursor are now drawn.
  • Bugfix: Constructor AggregatedCommand(IRepository repository, IEnumerable commands) no longer raises a NullRegerenceException.
  • Bugfix: XmlRepositoryReader.ReadDate() did not advance the underlying XmlReader to the next attribute.
  • Bugfix: NShape 1.0.0 to 1.0.3 "Repository Version 2" stored templates including their title.
  • NShape 1.0.4 to NShape 2.1.1 neither store nor read the template's title for version 2 repositories, thus breaking compatibility with old repository files.
  • As NShape 1.0.4 also introduced the "Repository Version 3" storage format (default for new projects), we repaired the compatibility issue so you can now open "Version 2" repositories created with
  • NShape 1.0.0 1.0.3 but not "Version 2" repositories created with NShape 1.0.4 2.1.1.
  • If you need to open old version 2 files, please insert an attribute "title" between the "name" and
  • the "description" attribute of all template tags:
  • becomes
  • Bugfix: The project component no longer accepts version 1 as minimum repository version. Version 2 isthe correct minimum load/save version as NShape 1.0.0 was released creating version 2.
  • Bugfix: XmlStore did never call "SaveInnerObjects" method of model objects.
  • Bugfix: Added a workaround for an issue that causes an OutOfMemoryException in the underlying GDI+
  • Flat API functions when trying to draw lines with intersecting line caps.

New in NShape Designer 2.1.1 (Apr 29, 2014)

  • Bug Fix: Saving repositories version 3 and 4 no longer causes an IndexOutOfRangeException.
  • Improvement: Added descriptive comments to all demo programs and the tutorial projects.

New in NShape Designer 2.1.0.0 (Dec 21, 2013)

  • Interface Change: Classes PropertyMappingIdAttribute and RequiredPermissionAttribute have been sealed
  • Interface Change: protected Point[] PlanarShapeBase.controlPoints is now private. protected void PlanarShapeBase.ResizeControlPoints(int length) has been added. You can resize the control points array using the new method and access its points using the public property ControlPoints. This addresses the problem that controlPoints and ControlPoints did only differ in casing, making it impossible for VB.NET programmers to implement their own PathBasedShapes without changing the source code.
  • Extended Interface: Added a new method to the Dataweb.NShape.Shape interface base class and a default implementation to the ShapeBase class: public abstract bool CanConnect(ControlPointId ownPointId, Shape otherShape, ControlPointId otherPointId); This method can be used for implementing custom connection behavior like accepting a limited number of connections or accepting only connections of a certain shape type.
  • Extended Interface: Added string property "Data" to the Dataweb.NShape.Shape interface class. It can be used for storing user defined string data that will be saved to and loaded from the repository (in contrast to the Tag property).
  • Extended Interface: Added string property "Description" to the Dataweb.NShape.Project class. saved to and loaded from the repository (in contrast to the Tag property).
  • Extended Interface: Added a new method to the shape collection interface: public interface IShapeCollection int GetZOrder(Shape shape)
  • Extended Interface: Added an overloaded version of Project.IsValidLibrary(...) that returns the reason why the assembly is considered as invalid library assembly (as out parameter).
  • Extended Interface: Access modifiers of the following members of the SelectionTool class changed: SelectionTool.FindPreviewOfShape(Shape shape) is now public. SelectionTool.FindShapeOfPreview(Shape previewShape) is now public. SelectionTool.Action is now a protected enum.
  • Extended Interface: Published constants for the control point ids of most planar shape classes through the nested class ControlPointIds that provides all suitable constants. Derived shapes that change the number of available ControlPoints or their id's have to override this class.
  • Extended Interface: Display.EnsureVisible now has an overloaded version that accepts a margin
  • Extended Interface: IDiagramPresenter.AcitveTool gives access to the currently used Tool of the diagram presenter
  • Property Rename: Display.ShowGrid was renamed to Display.IsGridVisible (ShowGrid is still available but marked as obsolete)
  • Property Rename: Display.CurrentTool was renamed to Display.ActiveTool (CurrentTool is still available but marked as obsolete)
  • Changed behavior: FreeTriangle shapes throw an ArgumentException in CalculateRelativePosition in case the given point is not part of the shape. This shape type does not support points outside the shape bounds
  • ChangedBehavior: Methods taking an index parameter as argument will no longer throw an "IndexOutOfRangeException" but an "ArgumentOutOfRangeException" (except the style collection's indexer)
  • ChangedBehavior: Backup files created by the XmlStore component now preserve the original file extension by adding the backup file extension instead of replacing it.
  • ChangedBehavior: IDiagramPresenter.EnsureVisible no longer add a margin to the given parameters. There are new overloaded versions of these methods in the Display control offering a margin parameter.
  • New Feature: The SelectionTool provides a new property "OverlappingShapesAction" that specifies the action when clicking on overlapping shapes. The default value is "Cycle" so the default behavior does not change. Alternative values: Do not change the selection ("None") or select the topmost shape ("Topmost").
  • New Property: The XmlStore now has a string property BackupFileExtension which allows to customize the file extension of automatically created backup files.
  • New Property: Display.IsSheetVisible allows to hide the diagram sheet (including its shadow).
  • Improvement: ImageBasedShape has now (very basic) implementations of CalculateRelativePosition and CalculateAbsolutePosition
  • Improvement: Connected linear shapes can now be rotated.
  • Improvement: Resizing multi segment polylines in "MaintainAspect" mode improved (also affects connected multi segment lines).
  • Improvement: Setup now allows to specify the installation path for the source code
  • Bugfix: Corrected an error in AutoDisconnectShapesCommand that occured when deleting a shape with model object.
  • Bugfix: Geometry.LineIntersectsLine() returned true for parallel lines with opposing direction vectors
  • Bugfix: DoubleClick with SelectionTool on overlapping shapes no longer results in selecting the shape below the double-clicked shape.
  • Bugfix: Display.DiagramChanging event is now raised *before* bounds and layers are reset to defaults
  • Bugfix: Methods UnselectShape() and UnselectAll() do not raise any longer a Display.ShapesSelected event if no shapes are selected.
  • Bugfix: Display.ShapesInserted is now raised before Display.ShapesSelected.
  • Bugfix: AggregatedCommand caused endless self-recursion if a necessecary permission was not granted.
  • Bugfix: When inserting a shape into the repository, the display component fired the ShapesSelected event before the ShapesInserted event.
  • Bugfix: Pasting a shape fired multiple ShapesSelected events
  • Bugfix: Removed a Debug Assertion when copying diagrams as metafile to the clipboard. This assertion failed when copying larger diagrams or diagrams with complex graphics due to timing problems of asynchroneous calls.
  • Bugfix: NShapeDesigner's "Select All" menu items now use Display.SelectAll() instead of Display.SelectShapes(Display.Diagram.Shapes, false)
  • Bugfix: LabelBase did not calculate the correct number of cells for the diagram's spatial index when connected. This caused "Entity Not Found in Repository" exceptions when trying to delete these labels in case the glue point was in another spatial index cell as the label's body.
  • Bugfix: LineShapeBase did not check whether the cap's shape points were calculated before performing an intersection calcuation in StartCapIntersectsWith and EndCapIntersectsWith which resulted in an ArgumentNullException.
  • Bugfix: Events Display.KeyDown, Display.KeyUp and Display.KeyPress now take EventArgs.Handled into account correctly.
  • Bugfix: The following shape classes did not calculate the correct relative and/or absolute position: ShapeGroup, RegularPolygon, ImageBasedShape
  • Bugfix: Connections between grouped (or aggregated) shapes were not stored to XML
  • Bugfix: Connected shapes inside groups or composite shapes were moved to the wrong positions when moving, rotating or resizing the group/composite shape
  • Bugfix: Hit test did not work correctly when clicking a line cap of type "OpenArrow"
  • Bugfix: Trying to open LayerPresenter's content menu caused a ArgumentNullException when the attached display had no diagram.
  • Bugfix: When creating the SelectionTool, the ToolBoxController no longer raises the ToolSelected event before the ToolAdded event.
  • Bugfix: Corrected example in documentation "Programmer Tasks > Customizing Context Menus > Integrate NShape Commands in your Own Context Menus": The code of the lambda expression now extracts the MenuItemDef from the context menu item and executes it.
  • BugFix: SoftwareArchitecture.EntityShape now handles deleting items of string array property "ColumnNames" correctly when assigning an other string array to this property. Throws an exception if connected control points should be removed.
  • BugFix: A PolyLine connected to the center point of a RegularPolygone did not calculate the preview shape's position correctly.
  • BugFix: XmlStore now deletes the existing (old) XML file (and its image directory) when setting XmlStore.BackupGenerationMode to BackupFileGenerationMode.None.
  • BugFix: Moving connected lines that are grouped or selected together with their partner shapes will no longer move their vertices to strange positions (REQ 20411)
  • BugFix: When deleting a Shape without its attached model object (delete shape only), the model object will now be correctly detached from the shape.
  • BugFix: When trying to save a new project over an existing one, there is no longer an "already exists" error message

New in NShape Designer 2.0.1 Beta 2 (Sep 7, 2012)

  • Buxfix: IRepository.Insert(Shape shape) and IRepository.Insert(IEnumerable shapes) no longer insert shape connections.
  • Bugfix: Several context menu items did display although the required permission was not granted
  • Bugfix: Display did not reset the visible and active layers when changing the diagram
  • Bugfix: NullReferenceException when pressing Del key and no shape was selected
  • Changed Behavior: LayerCollection.Find("") no longer throws an exception.
  • Improvement: Display does not reset the displayed area of the diagram when hidden
  • Improvement: Export dialog adds file extension when not specified
  • Improvement: Export dialog asks whether to overwrite a file after the path changes
  • Improvement: Export dialog updates the file extension when changing the file format (if a non-standard file extension was specified, the user will be asked whether to update the extension)
  • Documentation: Updated sample code in some chapters of the "Basic Tutorial" to NShape 2.0 code

New in NShape Designer 2.0.0 Beta (Sep 7, 2012)

  • Removed class "DefaultSecurity"
  • New method in class Shape: HasStyle(IStye style) - return true if the given Style is used by the shape.
  • Shape.NotifyStyleChanged now uses HasStyle which has to be implemented. Therefore, NotifyStyleChanged was made protected internal.
  • New Method: Project.RemoveLibrary
  • New Property: Project.AutoLoadLibraries (see "Behavior Changes")
  • New Parameter for methods Project.AddLibrary, Project.AddLibraryByName and Project.AddLibraryByFilePath.
  • Removed History.CommandExecuted event because it was obsolete. Use CommandsExecuted event instead.
  • Several Methods of various classes were renamed. The old versions are marked as obsolete.
  • PointerTool was renamed to SelectionTool. PointerTool is now marked as absolute.
  • - Design class now has a Title property.

New in NShape Designer 1.0.7.0 (Sep 7, 2012)

  • Improved handling of multiple designs (SQL Repository only)
  • Fixed several issues with the column commands of the shape SoftwareArchitectureShapes.EntitySymbol
  • Improvement: Display now supports Ctrl+A shortcut for "Select all shapes"
  • Marked class "DefaultSecurity" as [Obsolete]. It will be removed in the next version.
  • BugFix: Moving the mouse over a shape with text, selecting it and deleting it with "Del" did not remove the highlighted caption bounds.
  • Changed project structure (directory hierarchy) and build paths
  • Bugfix: Events IDiagramPresenter.DiagramChanging and IDiagramPresenter.DiagramChanged were not raised when assigning Display.Diagram directly
  • Bugfix: Project will be closed now when an exceptions occures while loading
  • Bugfix: LayerPresenter calls Clear() when project closes
  • Bugfix: Internal Exceptions when executing tool actions on a display without diagram
  • Bugfix: Displayed section of the diagram and scrollbar positions were wrong when changing the diagram of the display component
  • Bugfix: Item "More.." of the style selection comboBox no longer opens the design editor window in background
  • Bugfix: Some values are invisible after changing their values in design editor's property editor
  • Bugfix: When renaming a line-, cap or character style, the selected style changes when committing the property change
  • Bugfix: A shape is not selectable by clicking if an other shape, that is hidden by layer settings,covers it
  • Bugfix: Diagram.CreateImage no longer raises a NullReferenceException when diagram has no
  • DisplayService
  • Bugfix: NShape Designer's layout dialog now closes when closing the main window
  • Bugfix: NShape Designer's layout dialog now closes when closing the project.
  • Bugfix: NShape Designer's main menu items "Send to Back" / "Bring to Front" are functional now
  • Improvement: All Dialogs of WinFormsUI will now close when Esc key is pressed
  • Bugfix: Diagram's background grid 'wanders' when zooming
  • Bugfix: LineStyles with LineWidth values > 9 will be rendered a little thinner each time the line style selection combobox is opened in property editor
  • Bugfix: Diagram.Export() does no longer throw a NullReferenceException in case the diagram has no DisplayService
  • Bugfix: Saving a diagram as TIFF image will no longer throw an InvalidArgumentException