11 - August - 2011

Optimizations:
1. Class factory for COM points is introduced (global variable). So creation of points became about 3 times faster inside ocx. Affects routines like: Shape.CreateFromString(), Shapefile.StartEditingShapes(), etc.
2. Shapefile.EditInsertShape when MWShapeID field is present will work much faster now. The value of the next shape id is cached inside table class now. Before it was searched by scanning the whole table for each insertion operation.

New members:
1. GlobalSettings.ShapefileFastMode property. When set to true all the newly created shapefiles and shapes will be created with fast mode already on.
Before there was no way to set fast mode for particular shapes until they were inserted in the shapefile. Fast mode property works like a switch between
two underlying structures: slow one based on COM points and faster one based on plain C code.

Bug fixes: 
1. Shape.Clip() - invalid operation was used in many cases;
2. Shape.CreateFromString() - was broken some time ago after introducing fast mode;
3. Shapefile.EditInsertShape() - shapefile extents weren't updated correctly;

4 - July - 2011

1. Random colors will be applied to newly opened shapefile in 
Shapefile.CreateNew, Shapefile.CreateNewWithShapeId and Shapefile.Open methods. 
The colors were applied in Map.AddLayer method which is confusing (options can't be 
set before adding the layer to map).

2. Support of projection in Shapefile class:

methods:
Shapefile.Reproject
Shapefile.ReprojectInPlace

property:
Shapefile.GeoProjection

Geoprojection is read from prj file on opening shapefile and is written to the 
file in Shapefile.Save, Shapefile.SaveAs, Shapefile.StopEditingShapes.
New members in IGeoProjection interface: GeoProjection.IsEmpty, GeoProjection.CopyFrom();

3. ShapefileCategories.AddRange(Field, minValue, maxValue, numCategories, 
classification) method added. Sample code which demonstrates it is here 

4. Changed signatures of preview drawing methods:

ShapeDrawingOptions.Draw
ShapeShapeDrawingOptions.DrawRectange
ShapeDrawingOptions.DrawPoint
ShapeDrawingOptions.DrawLine
Charts.DrawChartLinePattern.Draw
LineSegment.Draw

More comprehensible order of parameters introduced, default values are set wherever possible.

5. Overloads are added to oreview drawing methods with VB suffix (for VBA, VB6). 
Handle of device context is passed as integer rather than pointer.

6. Fixes to gradient bounds for point symbolos while drawing preview 
(ShapeDrawingOptions.DrawPoint).

7. Shapefile.QuickQueryInEditMode was excluded from interface (should be 
implemented using SAFEARRAY if needed).

8. Map.SetUDPointType redirected to ShapeDrawingOptions.Picture.

9 - May - 2011

1. Serialization is added for the major classes (XML string).

2. Serialization of labels and charts in XML files (.lbl and .charts).

3. Saving and loading of layer options (.mwsymb file) and map state.

4. Support of label expressions.

methods:
Image.Serialize();
Image.Deserialize();
Shapefile.Serialize();
Shapefile.Deserialize();
Table.FieldIndexByName();
GridColorScheme.Serialize();
GridColorScheme.Deserialize();
ShapeDrawingOptions.Serialize();
ShapeDrawingOptions.Deserialize();
Labels.SaveToXML();
Labels.LoadFromXML();
Labels.SaveToDbf();
Labels.SaveToDbf2();
Labels.LoadFromDbf();
Labels.LoadFromDbf2();
Labels.Generate();
LabelCategory.Serialize();
LabelCategory.Deserialize();
ShapefileCategories.Serialize();
ShapefileCategories.Deserialize();
Charts.Serialize();
Charts.Deserialize();
Charts.SaveToXML();
Charts.LoadFromXML();
LinePattern.Serialize();
LinePattern.Deserialize();
Map.SerializeLayer(long LayerHandle);
Map.DeserializeLayer(long LayerHandle);
Map.SaveMapState();
Map.LoadMapState();
Map.SaveLayerOptions(long LayerHandle);
Map.LoadLayerOptions(long LayerHandle);

properties:
Labels.Expression;
Labels.SavingMode;
Charts.SavingMode;
Map.get_Shapefile(long LayerHandle);
Map.get_Image(long LayerHandle);

2 - April - 2011

1. IStopExecution interface added to enable canceling of geoprocessing functions. Shapefile.StopExecution property to pass the instance of class which implements this interface.
2. Fixes to geoprocessing: correct orientation for clipper results, fixes in Difference and Clip functions.
3. A fix for random colors choosing for new shapefiles.

22 - March - 2011

1. New geoprocessing functions in shapefile class: Difference, Clip, SymmDifference, Union, ExplodeShapes, AggregateShapes, ExportSelection, Sort, Merge.
2. Simplified selection drawing for shapefile (Shapefile.SelectionColor, Shapefile.SelectionTransparency properties). To switch between simplified and extended mode use Shapefile.SelectionAppearance.
3. Shapefile.Collision mode property for point shapefiles.

8 - March - 2011

1. Support for Clipper library is added: http://angusj.com/delphi/clipper.php
2. New methods are added: Shapefile.BufferByDistance, Shape.Clone, Shape.Explode;
3. GetIntersection and Dissolve methods are implemented for both GEOS (with optimizations) and Clipper version;
4. A property is added to toggle between GEOS and Clipper library: Shapefile.GeometryEngine;

 

02 - March - 2011

1. LinePattern and LineSegment classes are reworked completely. Multilayered line pattern is implemented now,
which consists of a number of instances of LineSegment class. Each layer can be represented by a line (with width, color, style)
or marker (type, size, offset, and interval). To switch between those LinePattern.LineType property is added.
There are 2 possible values: lltMaker, lltSimple.

The line segments are drawn one above another, which creates a kind of pattern as a result.
The best way to see how it works is to test the latest version of MapWindow 4.

2. Some renaming in the ShapeDrawingOptions class. We are sorry about it, but some names were quite misleading.
It will be necessary to update Interop assemblies and change the code for everyone who used these properties:

a) Rotation -> PointRotation // it's applicable to the point symbol only and has nothing to do with polygon fill for example
b) FillGradientRotation -> FillRotation // apart from gradient it's applicable to the texture fill
c) PictureRotation is removed (PointRotation can be used for the icon rotation, and FillRotation for the texture).
d) All properties with LineDecoration prefix are removed (marker lines are implemented in the LinePattern class now).

3. A new method: ShapeDrawingOptions.SetDefaultSymbols. It sets a number of properties simultaneously like:
PointShapeType, PointNumSides, SidesRatio, Rotation. Now it's possible to set the necessary symbol using a single
line of code, for example:
options.SetDefaultPointSymbol(dpsTriangleDown);     
// which equivalent to
type = ptShapeRegular;              
numSides = 3;
sidesRatio = 0.5;
rotation = 30.0;
There are 16 default symbols in tkDefaultPointSymbol enumeration now. There are plans to add even more.

4. The support of category expressions is added in the Labels class. It works in the same way as
for ShapefileCategories. No new members were added to the API. The methods/properties to use:

LabelCategory.Expression = "[area] > 1000";     // for example
Labels.ApplyCategories();

5. Labels.AutoOffset property is added. It's applicable to the point shapefiles only. When it's on label offsets
will be calculated automatically according to the size of point symbol and the alignment of label. Correspondingly
Labels.OffsetX, Labels.OffsetY properties won't be working.

6. Points are using a common collision list with labels and charts now. So labels and charts won’t be overlapping
point symbols. Probably an additional property will be added to turn off this behavior.

7. Properties for moving categories up/down are added. The order of categories affects the sequence of drawing.

ShapefileCategories.MoveUp
ShapefileCategories.MoveDown
Labels.MoveCategoryUp
Labels.MoveCategoryDown

8. Some improvements for the point icons (Image class).

- The buffer for .png (and other GDAL-based) images will be loaded automatically while setting:
ShapeDrawingOptions.Picture = img;
- The Image.TransparencyColor2 will be set for the .bmp icons using top left pixel.
- New Image.SourceType property is added (read-only). The possible values of tkImageSourceType enumeration are:
istUninitialized
istDiskBased      // currently for bmp only
istInMemory     // currently for bmp only
istGDALBased

9. The support of 3Dconnexion's SpaceWare devices was removed, as nobody uses it (suggested by Paul Meems).

10. A number of obsolete properties in the Map class are made hidden (won't be visible from Intellisense).
This doesn't affect .NET languages though, somewhat different approach will be used for them).

 

12 - February - 2011 

1. Added new constant to tkShapeDrawingMethod enumeration to enable new drawin routines: 
dmNewSymbology. Map.ShapeDrawingMethod will be set to it by default.

2. Old label properties and methods accessible from Map class are redirected to the new 
class. New labels are available in all modes in spite of ShapeDrawingMethod value.

3. New charts became avialable for every ShapeDrawingMode as well.

4. Made new CShapeWrapperCOM class to wrap old implementation of Shape. Both CShapeWrapper 
and CShapeWrapperCOM class implement IShapeWrapper interface.

5. Shapefile.FastMode property added. In the regular mode it caches shape data in the 
dynamic arrays without ability to change their size. In edit mode it switches between 
CShapeWrapper and CCOmWrapper. 

6. Shape.MinDrawingSize property added. Shapes which size at current scale is less than 
provided value will be drawn as single dots. This speeds up drawing for large shapefiles at 
full scale.

7. Shapefile.SourceType property added. The following constant values can be used for it: 
sstInitialized, sstDiskBased, sstInMemory. The code of the following methods of Shapefile class is reworked:
Open, Close, Save, SaveAs, StartEditingShapes, StopEditingShapes. The behaviour should remain the same.

8. Methods Image.get_OriginalWidth, Image.get_OriginalHeight are transfered to properties. 
They were marked hidden before. Methods GetOriginalXllCenter, GetOriginalYllCenter, 
GetOriginal_dX, GetOriginal_dY, GetOriginalHeight, GetOriginalWidth were made hidden. 

9. Labels.DynamicVisibility, Charts.DynamicVisibility property - corrected typing mistake. 
It was written as DynamicVisiblity in both cases (without i after b).

10. Labels.MinDrawingSize property added. Only shapes with size in pixels larger than this 
values are labeled. It's set to -1 by default. Intended for plylines and polygons, which 
size depeds upon scale. It's considered that point shapes have size 1 at any scale.

11. Charts.NumCharts property renamed to Charts.Count, for the consistency with Labels.

12. Map.ShowRedrawTime, Map.ShowVersionNumber methods are added. They display the 
information lower left and lower right corners of screen respectively. Are set to false by 
default.

13. Map.LayerLabels property was added. It returns reference to the instance of Labels class 
associated with Shapefile or Image. Accessible by layer handle.

14. Automatic recalculation of shape extents in editing mode. When any change is made to 
shape, extents will be automatically recalculated upon the next call of Shape.Extents. So 
Shapefile.RefreshExtents(ShapeIndex) and Shape.CacheExtents() are obsolete now. 

15. Shape.Create methods will create a part at 0 point for polylines and polygons automatically.
In Shape.Put_Part it is prohibited to add a part which begins from the same point as an exiting
part to preserve compatibility. put_Part property will return true in such case.

16. Restored labels for image layers, turned off by mistake.

17. Improvements in collision avoidance for chart values.

18. Fixes to put_Callback property for almost all COM classes. In most case basic COM stuff (AddRef/Release)
wasn't implemented properly.

19. Shapefile.cpp and Map.cpp splitted in smaller files. The main bulk of code remained in the initial file in both cases.

Last edited Aug 11, 2011 at 5:48 PM by sleschinski, version 11

Comments

No comments yet.