Model Boolean operations, improved camera control and many other new features in new major version of Ab3d.PowerToys

by abenedik 4. August 2017 20:41

I am happy to announce that a major new version of Ab3d.PowerToys and a new version of Ab3d.DXEngine have been released today. 

This is by far the biggest update in the history of Ab3d.PowerToys library. It brings many great new features and improvements. The following are some of the main new features:

  • added support to rotate camera around selected 3D position (or around 3D position behind mouse cursor),
  • added zoom to mouse position or custom 3D position,
  • added support for controlling camera with 3D mouse (from 3dconnexion) or game controller,
  • added slice tool to cut 3D models with a plane,
  • added Boolean operations for 3D models,
  • added support for keyframe camera and object animations,
  • added TextBlockVisual3D to easily show text with border on a 3D plane,
  • added support for showing object edge lines instead of triangle wireframe.


Let’s describe those features with more details and with some screenshots.

The following image shows a screenshot from a sample that demonstrates camera rotation around custom position:


In the previous version of Ab3d.PowerToys it was only possible to rotate around the Viewport3D’s center position. Zooming in and out was also possible only to the center position. With the new version it is very easy to specify custom rotation and zooming position. It is also possible to rotate around or zoom into the position under the mouse cursor. As you can see from the image, it is also possible to show a marker that shows around which position the cameras is rotated. This marker can be fully customized.

Good camera control is at the heart of a good user experience. And to make the camera control great for even the most demanding users, it is now possible to add support for 3D mouse from 3DConnexion. This allows experienced users to be much more productive and to control the camera in the best possible way.

Ab3d.PowerToys now includes two new very powerful utilities to manipulate 3D models.

The first new utility allows slicing 3D models into 2 parts with specifying a custom slice plane. The following image shows a simple robot arm model that was sliced with this tool:


Another utility allows creating 3D models with using Boolean operations on 3D models. The following screenshot shows the available operations and their results:


The next screenshot shows two sample models created with subtracting various models from a box model:


The right object also shows texture on a 3D model. The texture coordinates for that model were calculated with new texture generation algorithms – in this sample a cubic projection was used.

The previous image also shows another new feature of the new library – showing text with border on a 3D plane model. For example the “Subtract” text was created with the following XAML:

<visuals:TextBlockVisual3D Position="-150 -45 100" PositionType="Center"
                           Text="Subtract" Foreground="Yellow" Background="Black" 
                           BorderBrush="White" BorderThickness="1" TextPadding="5 3"
                           Size="80 30" UpDirection="0 0.3 -1"/>

Showing 3D text is now really very easy. The TextBlockVisual3D object provides many options to customize the look of the text and the border. The following image shows a screenshot from a sample that shows usage of many of the TextBlockVisual3D properties: 


The new version also adds great support for camera and model animations. This allows creating nice camera transitions from one view to another.

To improve support for CAD like applications, the new version adds support for showing object edge lines. When object wireframe was shown in previous version, it always showed 3D lines for the triangles that define the 3D models. In the new version it is possible to show only 3D lines on the edges of objects. This shows a much better representation of the object to the user. Edge lines support is added to all standard 3D models from the library and also to ReaderObj and Assimp library so the imported 3D models can be also shown with edge lines (if the 3D file format support polygons and not only triangles). The following image shows standard 3D models with edge lines:


The samples project has also been improved. It has many very interesting new samples. For example one shows how to create billboards – rectangles with text or images that are always oriented towards the camera. The other shows how to select 3D lines with moving the mouse close to the line (not onto the lines which can be problematic in case of thin lines). 

Also note the NEW and UP icons in the list of samples for new and updated samples. To get a better understanding of the sample, check the sample description and comments in code behind.

There are also many other new features, improvement and bug fixes. For a full list of changes see the version history web page.


Some of the new features of Ab3d.PowerToys also require an updated Ab3d.DXEngine. If you want to get full hardware accelerated rendering of edge lines, then you need a new version of Ab3d.DXEngine. 

The new version can also improve sharpness of rendered 3D scene with setting UseLayoutRounding property on DXViewportView to true. This should prevent putting the rendered image to sub-pixel boundaries.

Another change in the new version Ab3d.DXEngine is that it now uses the latest version of SharpDX library – version 4.0.1. This also means that you will need to update the references to SharpDX. You can use the one from NuGet or the dll-s that are supplied with Ab3d.DXEngine. In case you used version 2.6.3 before, you will also need to add reference to SharpDX.Mathematics assembly.


I really hope that the versions of the libraries will serve you well and allow you to easily add great new features to your applications that will amaze your customers.

Tags: , , , ,

Ab3d.PowerToys | DXEngine