Module for visualizing openafpm-cad-core’s 3D wind turbine model in a web browser.
The model housed in openafpm-cad-core is made with the open-source CAD program, FreeCAD.
The following is a high-level explanation for how openafpm-cad-core and openafpm-cad-visualization fit together:
openafpm-cad-core
.obj) format.openafpm-cad-visualization
.obj file) with three.js for visualization in a web browser.
Install Yarn.
npm install yarn -g
Install dependencies.
yarn install
openafpm-cad-core.(OPTIONAL) Build bundle if you want to make changes to files in src/.
npm run watch
Start server.
npm run serve
Navigate to http://127.0.0.1:8080/ in your web browser of choice. Currently tested in Chrome.
Additionally, on UNIX-like operating systems, you can run npm start; which runs npm run watch and npm run serve in parallel.
A list of object names that MUST be present in the .obj file for the Wind Turbine.
In the Wavefront .obj format, object names start with o and are delimited with a space on their own line (e.g. o Coils).
* Denotes and “ends with” match is performed.
Construct a new OpenAFPM CAD visualization instance.
Behind the scenes constructs a WebGLRenderer, and a single instance is intended to be used throughout the lifetime of various visualizations (i.e. Wind Turbine and tools).
It also appends style elements to the head of the document.
| Name | Type | Required | Description |
|---|---|---|---|
options |
Object |
true |
See below rows documenting properties. |
options.rootDomElement |
Element |
true |
DOM element to mount visualization elements to. |
options.width |
number |
true |
Width of visualization. |
options.height |
number |
true |
Height of visualization. |
Visualize a 3D model by loading it from a promise-based data source. Manages loading screen internally.
| Name | Type | Required | Description |
|---|---|---|---|
loadObj |
function(): Promise.<string> |
true |
Function that returns a Promise that resolves to Wavefront OBJ file contents. |
assembly |
[string] |
true |
Assembly of visualization. Must be one of "WindTurbine", "StatorMold", "RotorMold", "MagnetJig", or "CoilWinder". |
furlTransformPromise |
Promise.<FurlTransform> |
true when type === "WindTurbine", false otherwise. |
When assembly === "WindTurbine", the Promise must resolve to a FurlTransform object. See below table for details. |
Returns: undefined
| Name | Type | Required | Description |
|---|---|---|---|
furlTransform |
Object |
true |
An object representing how to furl the tail. |
maximum_angle |
number |
true |
Maximum angle (in degrees) to furl the tail before high end stop hits the yaw bearing pipe. |
transforms |
Array.<Transform> |
true |
Three element array of Transform objects needed to furl the tail. See below table for details. |
| Name | Type | Required | Description |
|---|---|---|---|
transform |
Object |
true |
An object representing a 3D transformation in Axis–angle representation. |
transform.name |
string |
false |
Name of transformation for descriptive purposes. (optional). |
transform.position |
Array.<number> |
true |
Three element array for x, y, and z coordinates. |
transform.axis |
Array.<number> |
true |
Axis of rotation, three element array for x, y, and z axes. |
transform.angle |
number |
true |
Angle of rotation (in radians). |
Render a 3D model directly from OBJ text data. Use this for streaming scenarios where you receive data progressively. Call setProgress() to update the loading screen before calling this method.
Example:
// Streaming usage pattern
visualization.setProgress('Downloading model...', 0);
// ... fetch chunks ...
visualization.setProgress('Processing model...', 50);
// ... process data ...
visualization.render(objText, 'WindTurbine', furlTransform);
| Name | Type | Required | Description |
|---|---|---|---|
objText |
string |
true |
Wavefront OBJ file contents. |
assembly |
[string] |
true |
Assembly of visualization. Must be one of "WindTurbine", "StatorMold", "RotorMold", "MagnetJig", or "CoilWinder". |
furlTransform |
FurlTransform |
true when assembly === "WindTurbine", false otherwise. |
When assembly === "WindTurbine", must be a FurlTransform object. See below table for details. |
Returns: undefined
Update the loading screen with progress information. Automatically shows the loading screen if not already visible.
| Name | Type | Required | Description |
|---|---|---|---|
message |
string |
true |
Progress message to display. |
percent |
number |
true |
Progress percentage (0-100). |
Returns: undefined
Display an error screen with the specified message. Automatically hides the loading screen.
| Name | Type | Required | Description |
|---|---|---|---|
message |
string |
true |
Error message to display. |
Returns: undefined
Resize visualization to specified width and height.
| Name | Type | Required | Description |
|---|---|---|---|
width |
number |
true |
Width to resize visualization to. |
height |
number |
true |
Height to resize visualization to. |
Returns: undefined
Display tooltip if cursor hovers over part and update internal mouse coordinates.
This method is debounced with a 10 millisecond wait time.
Note: This method is exposed but not automatically attached to events. You must manually attach it to the window’s mousemove event:
window.addEventListener('mousemove', (event) => {
visualization.handleMouseMove(event);
});
| Name | Type | Required | Description |
|---|---|---|---|
event |
MouseEvent |
true |
mousemove event. |
Returns: undefined
Performs various clean-up such as disposing geometries and materials.
Returns: undefined
Basic themeing support is available via the data-theme attribute on the rootDomElement.
Supported values include "light" (the default) and "dark".