The ultimate 3D graphics toolkit for WPF and WinForms

Ab3d.PowerToys is a .Net library that provides software components that are needed to easily add 3D content to any WPF or WinForms application.

The Ab3d.PowerToys can be used to create custom 3D CAD applications, engineering tools, monitoring and simulations with 3D environment. The library also comes with many samples that can be used as code snippets in your application.

The Ab3d.PowerToys is using WPF 3D rendering engine that is based on DirectX 9. This provides decent hardware acceleration and can render many 3D scenes. But when the 3D scene is more complex, then it is possible to use a super fast DirectX 11 rendering engine - Ab3d.DXEngine. What is more, an existing application that is using Ab3d.PowerToys library can be upgraded to the Ab3d.DXEngine with DirectX 11 rendering engine in a few minutes (some additional time may be needed to use advanced features like object instancing to fully utilize the graphics card).

Car engine model shown with DXEngine (DirectX 11 rendering engine for .Net and WPF)


The main features of the library are:

  • The easiest to use 3D API with many great code samples
  • Cameras (SceneCamera, FirstPersonCamera, ThirdPersonCamera, etc.)
  • Camera Controllers (MouseCameraController, CameraControlPanel)
  • 3D Models and Visuals (Sphere, Box, Cylinder, etc.)
  • Generate extruded or lathe 3D objects
  • Use Boolean operations on 3D objects or slice them with a 3D plane
  • 3D Lines (the fastest implementation for connected, disconnected and lines with arrows)
  • 3D Text
  • Event Manager 3D (simplified event handling on 3D objects)
  • Complete solution for WPF 3D transparency problem
  • Many helper classes to ease work with WPF 3D
  • Support for touch and multi-touch to rotate, move and zoom the camera
  • Import 3D models from obj files (integrated in Ab3d.PowerToys) or almost all other 3D files with Assimp importer (see below)
  • Play keyframe and skeletal animations from many 3D files with Assimp importer
  • Export 3D models to many file types files (using Assimp exporter)
  • fully optimized to achieve best possible performance
  • premium support for all questions regarding WPF 3D and our libraries


3D objects can be imported from the following file formats:
.3d, .3ds, .3mf, .ac, .ac3d, .acc, .amf, .ase, .ask, .assbin, .b3d, .blend, .bvh, .cob, .csm, .dae, .dxf, .enff, .fbx, .glb, .gltf, .hmp, .ifc, .ifczip, .irr, .irrmesh, .lwo, .lws, .lxo, .md2, .md3, .md5anim, .md5camera, .md5mesh, .mdc, .mdl, .mesh, .mesh.xml, .mot, .ms3d, .ndo, .nff, .obj, .off, .ogex, .pk3, .ply, .pmx, .prj, .q3o, .q3s, .raw, .scn, .sib, .smd, .stl, .stp, .ter, .uc, .vta, .x, .x3d, .x3db, .xgl, .xml, .zgl.

It is possible to export the 3D objects into the following file formats:
dae, x, stp, obj, obj, stl, stl, ply, ply, 3ds, gltf, glb, gltf, glb, assbin, assxml, x3d, fbx, fbx, 3mf. files


Showing 3D content was never easier!

[all videos]

Cameras and Camera Controllers

The library defines a few new Cameras that can be used instead of the current WPF's cameras. The main difference between Ab3d Cameras and WPF cameras is that Ab3d Cameras does not use Vectors to define the LookDirection, but instead use angles in degrees to define it. This is much more natural. For example if you want to look at the scene a little bit from the right and from above, you just define the Heading to be 30 and Attitude to be -45. You can also define the Distance from the scene. The most important Ab3d Cameras are: SceneCamera, FirstPersonCamera and ThirdPersonCamera. A good overview of the new cameras can be seen in the Cameras cheat sheet document that can be opened from a link below.

Camera Controllers are used to control the camera. The MouseCameraController can be used to rotate and move the camera with the mouse. The rotation and movement can be configured to any combination of mouse buttons and keyboard modifiers (shift, control and alt). For example the following XAML sets the MouseCameraController to rotate the camera with left mouse button and to move the camera with left mouse button and alt key pressed:

            MoveCameraConditions="LeftMouseButtonPressed, AltKey"/>

The CameraControlPanel shows nice buttons to rotate and move the camera and also move the camera closer or farther away. There are also a CameraPreviewPanel and CameraAxisPanel that graphically show the current orientation of the camera.

3D Models

The Ab3d.PowerToys library also contains classes to create basic 3D models in code or XAML. It is possible to create Plane, Circle, Box, Arrow, Pyramid, Sphere, Cone and Cylinder 3D models. The library also supports creating objects by extruding a shape or by converting a shape to 3D object with lathe algorithm.

To make the 3D objects definitions cleaner a ModelTypeConverter is used for all Material properties used by 3D objects. This way it is possible to set the material with a color name or code (#FFFFAAAA) or image uri.

3D Lines

The library support 3D Lines with optimized update mechanism that makes the 3D lines implementation the most advanced and with the best performance for WPF.

3D Text

The library also supports 3D Text that can be defined anywhere in 3D space. The text is drawn as a series of connected 3D lines that are created from internal font definition.


The EventManager3D class is a helper class that enables user to simply subscribe to mouse events on 3D objects. The following mouse events are supported: MouseEnter, MouseLeave, MouseMove, MouseDown, MouseUp, MouseClick, BeginMouseDrag, MouseDrag, EndMouseDrag and MouseDoubleClick. This way you do not need to do the complicated 3D hit testing any more. The EventManager3D is also better than WPF's ModelUIElement3D because it supports more mouse events (including mouse drag in 3D), provides better event data and preserves the structure of the 3D models. This way your code is much simpler and better organized.

Transparency sorting

WPF 3D can show transparent 3D objects. But to show them correctly, the transparent objects need to be correctly sorted. Without this some of the objects are not visible through the transparent objects. Ab3d.PowerToys provide complete solution to this problem. More about that can be read in Transparency Sorting page.

Obj files reader

Ab3d.PowerToys includes a Ab3d.ReaderObj class that can be used to read 3D models from obj files. Obj file is very common file format to store 3D models. It usually comes with mtl file that defines the materials used in obj file. Because data in obj and mtl files is written in plain text, parsing the values can be quite slow and can consume a lot of memory (creating many string instances). Therefore the ReaderObj has been greatly optimized to read obj files very fast and with very low memory usage.

Beginner's guide

To get some additional information about using Ab3d.PowerToys and see how easy is to create great business applications with 3D graphics see the following blog post.

See also an overview of our 3D products.

Ab3d.PowerToys cheat sheets:

(click to get full pdf)
Objects cheat sheet
             Cameras cheat sheet
Many basic 3D Objects Simplified cameras

Screenshots with XAML source:

(click to see full XAML for the image)
[xaml] [xaml] [xaml]
[xaml] [xaml]  

Other screenshots:

(click to see larger image)



Versions history information

To see the development history of Ab3d.PowerToys, check out: