Browse our Products

Aspose.3D for Node.js via Java 24.1 Release Notes

Improvements and Changes

KeySummaryCategory
THREEDNET-1458Allow optimize mesh to remove duplicated control points.New Feature
THREEDNET-1468Allow specify the axis system when export model to STL/OBJ/PLYNew Feature
THREEDNET-222Add support of complex boolean operations on meshesNew Feature
THREEDNET-1441Allow Boolean operation can work on ordinal meshImprovement
THREEDNET-1451OBJ exporting incorrect textures.Bug fixing
THREEDNET-1452Cannot allocate GPU device memory for texture with 8192 * 8192 sizeBug fixing
THREEDNET-1453GLTF exporting incorrect textures.Bug fixing
THREEDNET-1454FBX export - incorrect model grouping exportsBug fixing
THREEDNET-1461Binding points on different objects returns same when property names are the same.Bug fixing
THREEDNET-1462Aspose.3D generates incompatible animation dataBug fixing

API Changes

Added class com.aspose.threed.AxisSystem

Certain file formats such as OBJ, STL, and PLY enable you to define the coordinate system, up vector, and front vector during the export process. You can utilize this class to provide and configure this information accordingly.

Renamed class com.aspose.threed.CoordinatedSystem to com.aspose.threed.CoordinateSystem

Added members to class com.aspose.threed.AnimationNode:

    /**
     * Finds the bind point by target and name.
     * @param target Bind point's target to find.
     * @param name Bind point's name to find.
     * @return The bind point.
     */
    public BindPoint findBindPoint(A3DObject target, String name)

The updated overloads now enable you to specify both the target and the name, whereas the previous implementation only conducted a search based on the name provided.

Added members to class com.aspose.threed.AssetInfo:

    /**
     * Gets the front-vector used in this asset.
     */
    public Axis getFrontVector()
    
    /**
     * Sets the front-vector used in this asset.
     * @param value New value
     */
    public void setFrontVector(Axis value)
    
    /**
     * Gets the coordinate system/up vector/front vector of the asset info.
     */
    public AxisSystem getAxisSystem()
    
    /**
     * Sets the coordinate system/up vector/front vector of the asset info.
     * @param value New value
     */
    public void setAxisSystem(AxisSystem value)

Some formats like FBX may define custom front vector inside FBX file.

Added members to class com.aspose.threed.Axis:

    /**
     * The -X axis.
     */
    NEGATIVE_X_AXIS,
    /**
     * The -Y axis.
     */
    NEGATIVE_Y_AXIS,
    /**
     * The -Z axis.
     */
    NEGATIVE_Z_AXIS;

The additional enum values now offer a more precise specification of the direction for the axes when constructing an axis system.

Added class com.aspose.threed.BoneLinkMode

Added members to class com.aspose.threed.Bone:

    /**
     * A bone's link mode refers to the way in which a bone is connected or linked to its parent bone within a hierarchical structure.
     */
    public BoneLinkMode getLinkMode()
    
    /**
     * A bone's link mode refers to the way in which a bone is connected or linked to its parent bone within a hierarchical structure.
     * @param value New value
     */
    public void setLinkMode(BoneLinkMode value)

The LinkMode feature offers FBX-compatible link modes for bones within the context of the application.

Sample code

        Bone boneToLimbNode1 = new Bone("")
        bone.setNode(limbNode1);
        bone.setLinkMode(BoneLinkMode.TOTAL_ONE);

Added members to class com.aspose.threed.Mesh:

    /**
     * Optimize the mesh's memory usage by eliminating duplicated control points
     * @param vertexElements Optimize duplicated vertex element data
     * @return New mesh instance with compact memory usage
     */
    public Mesh optimize(boolean vertexElements)

Sample code

        Mesh mesh = (new Box()).toMesh();
        // 1341 bytes, 24 vertices,  24 normals, 24 texture coordinates,
        (new Scene(mesh)).save("unoptimized.obj");

        // Eliminate the duplicated control points and vertex element data by reusing the same vector.
        Mesh optimizedMesh = mesh.optimize(true);
        // 640 bytes, 8 vertices,  6 normals, 4 texture coordinates
        (new Scene(optimizedMesh)).save("optimized.obj");

Added members to class com.aspose.threed.ObjSaveOptions:

    /**
     * Gets the axis system in the exported file.
     */
    public AxisSystem getAxisSystem()
    
    /**
     * Sets the axis system in the exported file.
     * @param value New value
     */
    public void setAxisSystem(AxisSystem value)

Sample code for converting a scene into an OBJ file while utilizing a custom axis system.

Sample code

        Scene scene = Scene.fromFile("input.fbx");
        ObjSaveOptions opt = new ObjSaveOptions();
        opt.setAxisSystem(new AxisSystem(CoordinateSystem.RIGHT_HANDED, Axis.Y_AXIS, Axis.X_AXIS));
        opt.setFlipCoordinateSystem(true);
        scene.save("test.obj", opt);

Added members to class com.aspose.threed.PlySaveOptions:

    /**
     * Gets the axis system in the exported file.
     */
    public AxisSystem getAxisSystem()
    
    /**
     * Sets the axis system in the exported file.
     * @param value New value
     */
    public void setAxisSystem(AxisSystem value)

Sample code for converting a scene into a PLY file while utilizing a custom axis system.

Sample code

        Scene scene = Scene.fromFile("input.fbx");
        PlySaveOptions opt = new PlySaveOptions();
        opt.setAxisSystem(new AxisSystem(CoordinateSystem.RIGHT_HANDED, Axis.Y_AXIS, Axis.X_AXIS));
        opt.FlipCoordinate = true;
        scene.Save("test.ply", opt);

Added members to class com.aspose.threed.StlSaveOptions:

    /**
     * Gets the axis system in the exported file.
     */
    public AxisSystem getAxisSystem()
    
    /**
     * Sets the axis system in the exported file.
     * @param value New value
     */
    public void setAxisSystem(AxisSystem value)

Sample code for converting a scene into an STL file while utilizing a custom axis system.

Sample code

        Scene scene = Scene.fromFile("input.fbx");
        StlSaveOptions opt = new StlSaveOptions();
        opt.setAxisSystem(new AxisSystem(CoordinateSystem.RIGHT_HANDED, Axis.Y_AXIS, Axis.X_AXIS));
        opt.setFlipCoordinateSystem(true);
        scene.save("test.stl", opt);

Added members to class com.aspose.threed.Transform:

    /**
     * Gets the scaling
     */
    public Vector3 getScaling()
    
    /**
     * Sets the scaling
     * @param value New value
     */
    public void setScaling(Vector3 value)
    
    /**
     * Gets the scaling offset
     */
    public Vector3 getScalingOffset()
    
    /**
     * Sets the scaling offset
     * @param value New value
     */
    public void setScalingOffset(Vector3 value)

    /**
     * Gets the rotation offset
     */
    public Vector3 getRotationOffset()
    
    /**
     * Sets the rotation offset
     * @param value New value
     */
    public void setRotationOffset(Vector3 value)

The ScalingOffset, ScalingPivot, RotationOffset, and RotationPivot properties allow for a more precise definition of rotation and scaling, ensuring compatibility with Maya/3ds Max standards.