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).
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!
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:
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.
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.
The library support 3D Lines with optimized update mechanism
that makes the 3D lines implementation the most advanced and with the best performance
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.
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.
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)
|Many basic 3D Objects
Screenshots with XAML source:
(click to see full XAML for the image)
(click to see larger image)
Versions history information
To see the development history of Ab3d.PowerToys, check out: