Skip to main content

Component names in JavaScript debugging

Screenshot of browser devtools showing the component name at the top of a JavaScript file

We're excited to introduce a new feature in our latest release that simplifies JavaScript debugging. From now on, each time you save a component, its name will appear as a comment at the top of the corresponding JavaScript files in your browser's developer tools. No more guessing which component you're dealing with!

Improved Lighting

We have now released upgraded lighting for the scenes in DynaMaker! These improvements will lay the foundation for configurators with more realistic lighting. Note that this update does not affect any currently deployed applications; it applies only to the editor environment and any deploys from now on.

Adjusting the lighting

Although we're working hard to ensure minimal impact on how your existing applications appear, this update involves fundamental changes to the system. As a result, some applications may need adjustments and you can fine-tune the lighting using the sceneOptions argument in UI Studio > ADVANCED if needed.

In the example below, the left image is using the default values for ambient and sun intensity. The right image appears brighter overall due to the increased ambient lighting and has less pronounced shadowing from the lower sun intensity.

export function productConfigurationFactory(): STUDIO.IProductConfiguration {
return {
sceneOptions: {
type: 'outdoor',
ambientIntensity: 1.5, // default is 1
sunIntensity: 0.5, // default is 1
},
// other configurations...
}
}

Generate image without cast shadows

The new optional argument disableCastShadows lets you generate images without any cast shadows that may be present in the scene. Cast shadows are the shadows that objects in a scene cast onto surfaces when illuminated by light sources. These shadows can add depth and realism to an image, but in some cases, you may prefer to generate images without them.

const image = await Studio.requestImage({
disableCastShadows: true,
// other args...
})

Replace files

Screenshot of file management interface, showing a new Replace button

Now an uploaded file can be easily replaced with a new version. Replacing a file will affect all assets that are using the file.

Move application

It is now possible for team owners to transfer applications from one team to another.

To move an application to another team, the team owner can follow these steps:

  1. Navigate to the Applications section.
  2. Select Move from the options dropdown.
  3. Choose the target team from the available options.
  4. Confirm the move.

Once the application is successfully moved, it will be accessible and manageable by the team members of the target team.

Various improvements, delete configuration and improved DAS plugin

We have released a new set of improvements for the DynaMaker platform:

  • Major performance improvements to PLUGINS.DAS.generateStepFile(), especially when working with large assemblies.
  • Added confirmation to production deploy to prevent accidental deploys.
  • Performance improvements to the CAD libraries and the IMPORT2D plugin.
  • Improved loading time of assets when working in the editor.
  • Better handling of PDF files in PLUGINS.IMPORT2D.
  • Added a visual indicator when using a SKYCAD.MeshModel with a source file that could not be loaded.
  • Fixed a bug in the Elfsquad CPQ plugin when DynaMaker is placed in an iframe within another iframe.
  • Various fixes to the integration with Tacton CPQ.
  • Fixed a bug where secret formulas would not deploy correctly.
  • Various fixes and improvements to dimensions in SKYCAD.Layout.
  • Fixed bug related to texture offset on curved surfaces.
  • Fixed a compatibility issue with Safari versions prior to 15.4.
  • Fixed a numerical bug in SKYCAD when cutting into a revolve feature.

As for deleting configurations:

  • It is now possible to delete saved configurations in DynaMaker. There is also a new optional argument added to LoadSave.openPopupLoad() that adds a delete button to the default load configuration modal.
    LoadSave.openPopupLoad({
    enableDeleteConfiguration: true,
    })

We have also fixed a bug related to room scenes:

  • Fixed a bug in room scene options lightIntensity. Setting lightIntensity: 2 is now properly scaling all the lights in the scene by 2, as intended, instead of overwriting the different light intensities. If you need to revert to the old (faulty) behavior, use an object as the value instead.

      // if you had something like this...
    sceneOptions: {
    type: 'room',
    lightIntensity: 2,
    }

    // ...and want to keep the old faulty behavior, replace it with
    sceneOptions: {
    type: 'room',
    lightIntensity: {
    ambient: 2,
    far: 2,
    left: 2,
    near: 2,
    point: 2,
    right: 2,
    }
    }

As for the DAS plugin, we've deployed futher optimizations to PLUGINS.DAS.generateStepFile()! The new version greatly reduces the amount of data that is sent to the server from the browser, which should speed things up for large assemblies or users on slower connections. To get the new version, open the DAS plugin settings in the dashboard and click on Save.

Various improvements

  • Studio.openInfoModal now returns a Promise that resolves when the modal is closed.
  • SKYPARAM.DropdownItem now has an optional argument "className," which can be used to target specific dropdown items in CSS.
  • Fixed a bug that occasionally resulted in invalid curvatures in exported IFC files.
  • Fixed a bug that caused improperly parsed very large numbers in datasets.
  • Resolved a bug where configurator completion-callback triggers were not properly cleaned up between design step changes, leading to duplicate callback invocations.

Material overrides, custom fonts, tags filtering and more

This changelog entry presents a variety of notable updates and improvements to the platform. It introduces new functionalities such as material overrides for GLTF/GLB models, a custom fonts API, and a tags filter feature for selective geometry generation when using the component handler. There are also enhancements to dimension styles and defaults, the ability to dynamically show and hide visible metrics, and the addition of an automatic outline. The update further includes the implementation of a clipping planes API for precise control over object visibility, as well as the introduction of a Design Automation Service for seamless generation and export of STEP-files. Lastly, the changelog addresses several bug fixes and compatibility improvements with AutoCAD for generated DXF files.

Material override for GLTF/GLB models

Added the ability to override materials for GLTF/GLB models in the application. This allows developers to apply custom materials or textures to specific parts of the models. Read more about it here.

Custom fonts API

Introduced a custom fonts API that allows developers to define and utilize custom fonts within the application. The default font has been normalized to use Liberation Sans for both the scene and exported drawings, replacing the previous setup of Helvetica for drawings and Liberation Sans for scenes. Read more about it here.

Tags filter when generating geometry from the component handler

Implemented a tags filter feature that enables users to generate geometry selectively based on specific tags assigned to component instances. Read more about it here.

Improved dimension styles and defaults

Enhanced dimension styles and default settings. Improvements include new default options in layouts, new line terminators for dimension lines, and enhanced presentation for compact cases. Read more about it here.

Dynamically show and hide visible metrics

Implemented the ability to dynamically show or hide visible metrics. You can now display or hide specific metrics with a simple function call. Read more about it here.

Automatic outline

We previously introduced selective geometry interaction, which enables users to interact with individual geometry elements instead of the entire model. Additionally, an automatic outline can now be displayed when interacting with geometry, providing visual feedback and improving the user experience. While we're working on more detailed documentation for the automatic outline, please reach out to support@dynamaker.com if you would like to know more.

Clipping planes API

Implemented a clipping planes API that enables users to define and control clipping planes in the application. This feature allows for more precise control over the visibility and display of objects by selectively hiding or revealing portions of the scene.

Studio.setUpdateGeometryFunction((data, worldControls) => {
// ...

const clippedGroupId = 'my-clipped-group'
const clippingPlanes = [new SKYCAD.Plane(0, 0, 1, 10), new SKYCAD.Plane(1, 1, 1, 20)]
worldControls.setClippingPlanes(clippingPlanes, { groupId: clippedGroupId })

worldControls.updateGeometry(geometry, { groupId: clippedGroupId })
})

While we're working on more detailed documentation for clipping planes, please reach out to support@dynamaker.com if you would like to know more.

Design automation service

With our Design Automation Service, you can now effortlessly generate and export STEP-files from your application regardless of if your app uses static models or not! You can read more about it here and here.

Various improvements

  • Added missing return type for Studio.openParameterModal()
  • Enhanced the handling of some parameter types outside of a configurator in the toolbar
  • Fixed a bug related to save/load of configurations in UI Studio
  • Fixed a bug related to the light position in the room scene
  • Fixed a bug that prevented the loading of RGB encoding from GLB files
  • Fixed a bug that sometimes prevented more than one instance of the same geometry from loading
  • Fixed an issue where the set-camera and request-image commands from top/bottom views would occasionally not have the x-axis positioned horizontally
  • Fixed the UI update for text parameters when their underlying value is updated
  • Corrected the newValue behavior in the setUpdateRule() function for text parameters
  • Fixed an issue with the setValue() function for text parameters
  • Improved compatibility with AutoCAD for generated DXF files

Form Modal and improved touch controls

The recently added Studio.createFormModal() makes it easier to ask for user input, for instance, when submitting a quotation request. You can read more about it here.

Also this update improves camera rotation, zoom, and pan on touch devices. By default, one finger triggers interaction (selectionEvent), and zoom is done with two fingers. You can change this behavior by using the Studio.updateCameraSettings() function and passing in the desired values for the oneFinger and twoFingers options.

For example, if you want rotation to be triggered by one finger instead of interaction and zoom-and-pan by two fingers, you can use:

Studio.updateCameraSettings({
touch: {
oneFinger: 'rotate',
twoFingers: 'zoomAndPan',
},
})

As for zoom-to-mouse, the default value of the camera setting zoomToMouse has been changed from true to false. We believe this is a more sensible default for most applications. If you want, you can enable zoom-to-mouse like this in your app:

Studio.updateCameraSettings({
zoomToMouse: true,
})

Selective geometry interaction

Until now, all geometry that you add to the scene in DynaMaker has been interactable. From here on, the default behavior for new applications will be that you as a developer get to control what geometry groups can trigger selection events.

You might notice that we've begun to replace the term selection with interaction in the context of events triggered by the mouse or touch screen. This is in part because we think it is a better description of what is actually happening and in part to differentiate it from the manager.select() and manager.getActiveSelection() API.

To enable interaction events for a given group, set the interactable argument to true when updating the geometry.

Studio.setUpdateGeometryFunction((data, worldControls) => {
// ...
worldControls.updateGeometry(geometryGroup, {
interactable: true,
})
})

To not break existing apps, this behavior is opt-in and controlled via an argument called useSelectiveGeometryInteraction in the ADVANCED tab. You can also add this argument manually to your existing application if you would like to use it there.

export function productConfigurationFactory(): STUDIO.IProductConfiguration {
return {
// ...
useSelectiveGeometryInteraction: true,
}
}

For even more control over interaction events, you can use the interaction plane. If the mouse/touch does not intersect with any interactable geometry group, the interaction plane is used. By default, the default interaction plane is the ground plane (0, 0, 1, 0).

// set the interaction plane to be the xz-plane offset by 100
const plane = new SKYCAD.Plane(0, 1, 0, 100)
Studio.setInteractionPlane(plane)

// completely remove the interaction plane
Studio.clearInteractionPlane()

CSS snippet for mobile layout and Quote File Service

Check out this newly added CSS snippet that can help you create a responsive layout for your DynaMaker application!

With the new Quote File Service, you can now use your DynaMaker application as a REST API in addition to all its previous capabilities! A common task could be to generate a PDF and attach it to a quotation or send it in an email, fully automated on the server. You can read more about it on its documentation page.