Minor improvements for Ab3d.Reader3ds, Ab2d.ReaderWmf and Ab2d.ReaderSvg published

by abenedik 15. January 2013 13:54

I would like to inform you that new versions for Ab3d.Reader3ds, Ab2d.ReaderWmf and Ab2d.ReaderSvg has been published.

The new version contains a fix for generating object names for exported XAML. A bug in one of the previous version prevented the exporter code to check and fix the object's name.

There is also an additional minor improvement in Ab2d.ReaderWmf library that now correctly position text is some of the rare cases.

Tags: , ,

Reader3ds | ReaderSvg | ReaderWmf

New version of our products brings improved support for Windows 8 and some other goodies

by abenedik 28. December 2012 10:55

I am very happy to announce that a new version of all our products is available.

The biggest improvement of the new version is better support for Window 8. This includes improved installer that now works correctly without .Net 2.0 installed on the system. Also the Viewer3ds, ViewerSvg and Paste2Xaml applications are now build on .Net 4.0 framework and do not require .Net 3.5 any more. The applications also use different obfuscation method - the previous obfuscation crashed the applications on startup in Windows 8.

What is more, the ViewerSvg and Paste2Xaml now fully support exporting XAML for Windows Store applications (Windows Runtime). This means that you can use almost any svg file, metafile or get drawing from clipboard and use ViewerSvg or Paste2Xaml to create vector graphics for Windows Store applications.

With this release all libraries now target .Net 3.5 Client profile (before some of them targered .Net 3.0).
As before all the libraries also contain an additional assembly that is built on .Net 4.0 framework.


This version also brings some additional improvements to Ab3d.PowerToys, Ab3d.Reader3ds and ZoomPanel libraries.

The following are the changed in the Ab3d.PowerToys:

  • Added GetCameraPosition method to BaseCamera.
  • Fixed creating geometry for Visual 3D objects when no property is changed on the visual (for example if default size is used).
  • Fixed showing long 3D lines that cross the near camera plane (before such lines were not correctly shown).
  • Improved measuring size of CameraControlPanel - now it is possible to define only desired Width or Height and the control automatically sets the other (Height or Width).
  • In MouseCameraController the StartMouseProcessing and EndMouseProcessing are now protected virtual and can be overriden (before they were private).
  • Improved creation of sphere mesh - before some triangles were defined in such a way that they represented a line instead of triangle (two positions in the triangle were defined in the same position in space).
  • Added possibility to create a slightly improved sphere mesh when there is no need to create texture coordinates (this can be done with specifying generateTextureCoordinates as false in the Ab3d.Meshes.SphereMesh3D constructor).
  • Added DumpMatrix3D to Dumper class.
  • Improved FpsMeter when custom DisplayFormatString property is set.
  • Fixed creating PolyLines when they are created with duplicate positions - Index out of range exception was thrown before.


Scene editor in Ab3d.PowerToys samples

There is also a new and very interesting sample available with the new Ab3d.PowerToys. A screenshot from the sample is shown in the image above. The sample is showing how to create a simple 3D editor. It allows the user to create 3D boxes with the mouse (the current position of the mouse in the 3D scene is shown with two green lines). The box is created by first defining the base rectangle with dragging the mouse and then defining the height with moving the mouse up and clicking at desired height. The sample also shows how to create simple snap to grid. User can rotate or move the camera around. It is also possible to change camera to show all the objects (zoom to content).

The Ab3d.PowerToys help has also been improved. It now contains the "Quick start tutorial" that is basically the content of one of my previous blog posts. What is more, there is also a "Tips and Tricks" help section that describes some techniques that can help or improve working with WPF 3D. I will write the content of that help section in my next post.


And the following are two additional changed in Ab3d.Reader3ds:

  • Added CreateTextureCallback delegate to Reader3ds - it can be used to customize the process of creating the texture images.
  • Fixed reading 3ds files that define material with names longer than 17 characters (the 3ds documentation defines max length of material name to be 17 characters - but it looks that in reality the material names can be longer).


As mentioned before, ZoomPanel also has an improvement. But not in the library itself but as an additional sample that describes how to limit the zoom to specific zoom factor.


As always if you are new to our tools, you are most welcome to download a 60-day trial from the Download page. Existing customers can get the updated versions from their User Account page.

Tags: , , , ,

Ab3d.PowerToys | Reader3ds | ReaderSvg | ReaderWmf | ZoomPanel

New release brings improved products, added .Net 4 assemblies and better installer

by abenedik 23. August 2012 22:23

This release brings the following:

-    improved installation on 64 bit Windows
-    added .Net 4 assemblies
-    improved Ab3d.PowerToys, Ab3d.Reader3ds and ZoomPanel libraries



The new installer has been improved to work better on 64 bit windows. Now the products are no longer installed under “Program Files (x86)” folder, but under “Program Files”. All the products are built with “Any CPU” setting and therefore do not need to be in the folder where all the “old stuff” is. Note that if you were referencing our products from the x86 folder, you will need to update the path to our products.

All the products now also contain assemblies that are built on .Net 4.0 Client Profile framework. When building .Net 4.0 applications, you can now reference native .Net 4 assemblies. Before you had to reference original .Net 3.0 (Ab3d.Reader3ds, Ab2d.ReaderSvg, Ab2d.ReaderWmf or ZoomPanel) or .Net 3.5 SP1 (Ab3d.PowerToys) assemblies. This was not a problem because the 4.0 CLR runs the assemblies on previous target frameworks natively inside 4.0 CLR (without running them in some kind of virtual machine). So it was already possible to use our libraries on machines where only .Net 4.0 is installed. Anyway time goes on and now almost all new applications are built on 4.0 so I decided to prepare native builds for that framework. Of course the original 3.0 and 3.5 assemblies are still available. Original assemblies are inside bin folder as before. The new assemblies can be found inside bin\.Net 4 folder.


Because all our products except Ab2d.ReaderWmf are using AllowPartiallyTrustedCallers assembly attribute, I had to take a closer look at the security critical sections of the code and add some security related attributes on some methods. This made the code .Net 4.0 compliant.

Note that the Viewer3ds, ViewerSvg and Paste2Xaml applications were not ported to .Net 4.0 and still requires older framework to run (older applications cannot run inside 4.0 CLR - only assemblies can be used inside 4.0 applications).

 

As mentioned before some of the products were also improved.


ZoomPanel library got improved ZoomPanelMiniMap control. Here controlling ZoomPanel with moving rectangle around was improved (before movements were slow). In the previous version it could happen that when a content of ZoomPanel was changed from a big to a much smaller content, than the new image in ZoomPanelMiniMap was too small. This is fixed now.

Ab3d.Reader3ds library also got a few improvements. Most of the work there was done to improve reading of broken 3ds files. Because 3ds file is very old and very commonly used, there are many applications out there that can export to that file format. Unfortunately not all of them create valid 3ds files. I got some of such files. Most of them were so screwed that it was not possible to import them into 3D Studio Max (invalid file format error was shown). Despite that there were still some valid data inside those files. And the new version tries to read as much from them as possible.

In case when a broken 3ds file is read with Reader3ds, you will still get FileFormatException (when reading with default settings). But now you can catch the exception. Than you can warn the user about problematic file and if the user wants to read the file anyway, you can set the new TryToReadBrokenFiles property on Reader3ds to true and read the file again. You can also have that property always true and just check the IsBroken property after reading 3ds file. Both those options are also used in the new version of Viewer3ds.

One nice new feature of Viewer3ds is showing object’s bounding box, triangles and normal. This is very useful in finding the cause of the problems in some 3D objects that do not look correct. Because Viewer3ds uses powerful 3D lines capabilities of Ab3d.PowerToys library this was an easy task to do. The following screenshot shows that new feature:

Viewer3ds: Showing details of selected object - bounding box in red, triangles in green and normals in blue.

The longest list of new features for this release belongs to Ab3d.PowerToys library. Today I will just write short descriptions of new features. In one of the following posts I will discuss some of them in more details. So the improvements are:
-    Improved LinesUpdater performance and removed possible memory leaks.
-    Added Reset method to LinesUpdater that takes Viewport3D as parameter to reset (remove all lines) only from specific Viewport3D.
-    Added HeightMapVisual3D and HeightMapMesh3D (with two very nice samples)
-    Added TubeMesh3D, TubeVisual3D and TubeUIElement3D.
-    Added support to very easily create 3D curves: added Ab3d.Utilities.BezierCurve and Ab3d.Utilities.BSpline classes; also added CreateBSpline3D and CreateNURBSCurve3D to Line3DFactory.
-    Added MouseWheel event to EventManager3D – now you can subscribe to MouseWheel event on any Model3D object.

Ab3d.ReaderSvg and Ab2d.ReaderWmf libraries did not get any new features of fixes. But they also got new versions (with same major and minor version but increased build version) because of new .Net 4.0 assemblies and small changes that were needed in the code to make the code 4.0 compliant.

Tags: , , , ,

Ab3d.PowerToys | Reader3ds | ReaderSvg | ReaderWmf | ZoomPanel

Maintenance releases for Ab2d.ReaderSvg and Ab2d.ReaderWmf published

by abenedik 28. May 2012 08:00

I am happy to announce that maintenance releases are now available for Ab2d.ReaderWmf and Ab2d.ReaderSvg.

The improvements and fixes in Ab2d.ReaderWmf are:

  • Improved scaling of text. Before sometimes the text was not correctly scaled - for example when pasting cells from excel the text can go out of bounds. The text is scaled with RenderTransform on TextBlocks. Note that scaling can be turned off with setting ProcessCharacterSpacing property to false.
  • Added support for text that is defined by glyphs indexes instead of unicode characters (usually when the metafile was created from the data that was sent to printer).
  • Fixed processing character spacing for special charter marks that are shown over another character like carets, etc.
  • Fixed exporting to XAML when the content of the Text property contains curly brackets. Before parser wanted to use them for binding expression.
  • Added ResolveRasterOperation delegate that enables using custom brush when an unsupported raster operation is used in metafile.

 

The following are the changes in Ab2d.ReaderSvg:

  • Fixed exporting to XAML when the content of Text property contains curly brackets. Before parser wanted to use them for binding expression.
  • Prevented throwing ArgumentException when right or bottom value in object's bounds was negative.

 

As usual the new version can be downloaded from User Account page (for commercial users) or from my Downloads page (for evaluation version).

Tags: , ,

ReaderSvg | ReaderWmf

Maintenance releases for all products are now available

by abenedik 24. February 2012 22:13

I am happy to announce that maintenance releases are now available for the following products:

  • Ab3d.Reader3ds and Viewer3ds
  • Ab3d.PowerToys
  • Ab2d.ReaderSvg and ViewerSvg
  • Ab2d.ReaderWmf and Paste2Xaml
  • ZoomPanel (evaluation version only)

 

Everybody that are using evaluation version will be happy to know that new evaluation versions of all the products now show the evaluation information dialog only once per day. Previous versions show evaluation information dialogs on each start of your application. If two or more controls were used (for example ReaderSvg and ZooomPanel) than each time you started your application two dialogs were shown. This was too annoying and is now lessened so the dialogs are shown only once per day.

Another important change in evaluation version allows you to reinstall evaluation version (the same version or newer) after 90 days from the date of installing previous evaluation version. The 60-day evaluation time limit is still the same. But with previous versions you need to contact support to extend the evaluation version after 60 days. This was not very practical when you tried an older version before some time and at that time you did not need the library or it did not have all the features you wanted. But after some time you decided to try with the new version and you were not able to install the evaluation because it has already expired. Now this is not the case any more because after 90 days you can reinstall the evaluation version again. Note that when reinstalling the same version it is recommended to uninstall it before installing it again. There is still 30 days between evaluation expiration and possibility to reinstall after 90 days - this is left to prevent continuous use of only evaluation version. But if you need to extend the 60-day period you can still contact support to extend your evaluation.

 

Of course there are also some other improvements and new features that apply for both evaluation and commercial version.

Let me start with Ab2d.ReaderSvg (and ViewerSvg). The changes in new version are:

  • Improved reading size of root svg object (improved support for viewBox and added support for preserveAspectRatio).
  • The GetXaml method now preserves the width and height in specified units (cm or inch).
  • Removed memory leak that occurred sometimes when reading embedded images.
  • Improved reading embedded images - they are now read faster and with lower memory usage.
  • Fixed problems when Path bounds were negative and IsSizeSetToPathElement in SilverlightXamlWriterSettings was set to true.
  • Prevented adding PresentationOptions:Freeze="True" text to XAML for Silverlight.
  • Added option to export for Silverlight 5.
  • Fixed reading svg file that contain links to images and were read without specifying the whole path (Read method was called only with svg file name without the full path).

 

Ab2d.ReaderWmf got the following changes:

  • Fixed leaking GDI+ handles under some circumstances. This could lead to "Cannot open wmf file!" exception after opening a few thousands metafiles.
  • The Read and ReadGeometry methods that take stream as parameter now read the metafiles directly from the stream and do not create a temp file from stream as before.

 

Changes for Ab3d.Reader3ds:

  • Improved reading textures in Model3ds and Viewport3ds. Added TexturesPath property to both controls - it can be used to specify custom textures path. If TexturesPath is not specified, the path of the 3ds file is used.
  • Added support for cameras that are children of helper objects (for example when camera is linked to a helper object so the camera is transformed as the helper object).
  • Fixed setting IsCameraAnimated property - Reader3ds sets this property to true if the 3ds file contains camera animations. Before the property could be set to true in cases when the camera was not animated.
  • Added ReadLightRange property to Reader3ds. Before the Range of PointLights and SpotLights was not read. Now it is possible to read the Range with setting ReadLightRange to true. Note that attenuation data are not present in the 3ds file - if they are used they need to be manually set to lights after the 3ds file is read.

It is also worth noting that with new version of Viewer3ds all the cameras defined in 3ds file are exported as comments in xaml. The xaml also get a description of the exported cameras. This makes switching between cameras defined in 3ds file very easy.

 

There are also a few improvements for Ab3d.PowerToys:

  • Fixed rotating with MouseCameraController and CameaControlPanel when the scene in vertically inverted when Attitude is between 90 and 270 degrees.
  • Fixed EventManager3D where under some circumstances a new object drag can be automatically stared just after end drag event.
  • Improved MaterialTypeConverter: Added support for simply defining SpecularMaterial and EmissiveMaterials. For example the "s:32;Blue" text can be used to define MaterialGroup with DiffuseMaterial and SpecularMaterial (SpecularPower = 32; SpecularBrush = White; DiffuseMaterial = Blue). The "e:Yellow" can be used to show yellow emissive material. Also improved support for defining textures path (now files from local disk and from http can be used).
  • Fixed occasional NullReferenceException in SphericalCamera when layout is updated in Visual Studio designer.

 

The commercial version of ZoomPanel was not updated.

 

I would like to conclude the blog post with something completley different - a new logo for the company AB4D d.o.o.

ab4d logo

I got the new logo from a design contest that run on 99designs.com. I was really satisfied with the contest and would really recommend that page to everyone. We are also making a redesign of the web page that will be available soon.

We are also preparing a very interesting new product (but more on that later).

I surely believe that the future is very bright for the company. I hope that our products will also make it brighter for you.

Improved Ab2d.ReaderSvg, Ab2d.ReaderWmf and ZoomPanel available

by abenedik 10. October 2011 14:23

The major improvement in this release is made in the licensing code for commercial versions of the products.

The update contains also some minor improvements in the Ab2d.ReaderSvg and Ab2d.ReaderWmf libraries and a small improvement in ViewerSvg. But let me first tell you about the changes in the commercial licensing code.

Recently a customer reported very long delays (up to 10s) when creating an instance of ZoomPanel class. After some investigation I have discovered that the delay is related to a "bug" in Microsoft's RSACryptoServiceProvider class (see http://support.microsoft.com/kb/948080). The RSACryptoServiceProvider is used to validate the license and under some circumstances the VerifyData method on the class can cause a long delay. The licensing code has been changed to prevent the delay. The problem with this bug is that the licensing code can work very well on computers where you test your products, but on some client's computer the RSACryptoServiceProvider can cause your application or product to start with a long delay.

Therefore it is highly recommended to update the products to the latest version.

But this was not the only improvement in the licensing code. Now it is possible to set the new EmbeddedLicenseAssembly property to make the check of the embedded license even faster. To understand the purpose of the new property let me first shortly describe how the licensing code works.

The licensing code in our components uses the standard .Net licensing system. This means that at compile time the compiler calls the licensing code in our products. There the developer license key is read. It is converted into a runtime license key and saved by the compiler into assemblies embedded resource. When our component is used in your application, its licensing code first tries to find the embedded runtime license key. Because our component does not know which assembly contains the embedded license key, it is usually needed to check resources in multiple assemblies before the correct one is found. To make this check much faster, it is now possible to set the static EmbeddedLicenseAssembly property to the assembly that contains the embedded license. This way the licensing code can immediately find the license key and can therefore execute much faster.

The following example sets the EmbeddedLicenseAssembly for the ZoomPanel control:

public class MyClass()
{
    public MyClass()
    {
        Ab2d.Licensing.ZoomPanel.LicenseHelper.EmbeddedLicenseAssembly
          = typeof(MyClass).Assembly;

        InitializeComponent();
    }
}

Samples for other products and some additional details about this process can be found in the new "Using commercial version" help file.

 

The improved licensing code is currently available for Ab2d.ReaderSvg, Ab2d.ReaderWmf and ZoomPanel. The fix for Ab3d.Reader3ds and Ab3d.PowerToys will be available in the following days (both libraries will have many new features that have to be finished before publishing).

 

As mentioned before, this update also brings some additional improvements to Ab2d.ReaderSvg and Ab2d.ReaderWmf.

ReaderSvg and ViewerSvg:

  • Added NameFormatString property to BaseXamlWriterSettings - it can be used to customize how the object names are written to xaml (custom prefixes and suffixes can be added to names). The export window in the ViewerSvg have two new TextBoxes that can be used to specify custom prefix and suffix that will be used to format the object names.
  • Improved reading svg image elements with added support for preserveAspectRatio property.

 

ReaderWmf:

  • Improved drawing Paths - in some cases only path stroke should be drawn without using any fill.
  • Added support for monochrome brushes.

Tags:

ReaderSvg | ReaderWmf | ZoomPanel

Update for Ab2d.ReaderSvg, Ab2d.ReaderWmf and ZoomPanel available

by abenedik 12. August 2011 20:37

I am happy to announce that all our 2D products have been updated.

The following screenshow is showing improved design time support for SvgViewbox and WmfViewbox:
SvgViewbox and WmfViewbox in Visual Studio

 

The following are the changed in Ab2d.ReadSvg:

  • Improved design time support for SvgDrawing control - now the svg file is shown in design time (before the image in design time was shown only in SvgViewbox).
  • Added SvgFileLoading and SvgFileLoaded events to SvgViewbox and SvgDrawing controls.
  • Prevented locking referenced image files.

 

The following are the changed in Ab2d.ReadWmf:

  • Added support for pattern brushes. Reading pattern brushes is turned on by default but can de disabled with setting ReadPatternBrushes to false.
  • Improved design time support for WmfViewbox and WmfDrawing controls - now the metafile is shown in design time.
  • Added MetafileLoading and MetafileLoaded events to WmfViewbox and WmfDrawing controls.
  • Fixed reading some embedded images that have their width or height negative.

Added support for pattern brushes need some additional comments because there are some differences between handling pattern brushes in GDI+ and WPF. Pattern brushes in GDI+ are not affected by the scale of the shown image. This means that if you zoom in or out of the metafile that is drawn by GDI+, the pattern brush is not scaled and is always drawn in a way that one pixel in the pattern bitmap is always rendered with one pixel.

In WPF the bitmap brushes are affected by the scale.

For example if you have a rectangle with 10 x 10 size and pattern brush from 10 x 10 bitmap and you scale the rectangle to be shown on the whole screen, the bitmap will be also scaled to the whole screen. In GDI+ the bitmap is not scaled so the pattern is still the same as when showing the rectangle without scale.

Because of this difference the imported pattern brushes can sometimes look strange. Therefore it is possible to disable reading pattern brushes with setting ReadPatternBrushes to false.

 

ZoomPanel has received the following updates:

  • Fixed problems with using None for Stretch value.
  • Improved using ViewboxLimits.

 

All the products also had a licensing issue that showed unlicensed dialog under some circumstances. This issue is now fixed.

 

As usual the new version can be downloaded from User Account page (for commercial users) or from my Downloads page (for evaluation version).

Tags:

ReaderSvg | ReaderWmf | ZoomPanel