Browse our Products

Aspose.3D for .NET 23.12 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 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 Aspose.ThreeD.CoordinatedSystem to Aspose.ThreeD.CoordinateSystem

Added members to class Aspose.ThreeD.Animation.AnimationNode:

        /// <summary>
        /// Finds the bind point by target and name.
        /// </summary>
        /// <returns>The bind point.</returns>
        /// <param name="target">Bind point's target to find.</param>
        /// <param name="name">Bind point's name to find.</param>
        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 Aspose.ThreeD.AssetInfo:

        /// <summary>
        /// Gets or sets the front-vector used in this asset.
        /// </summary>
        public Axis? FrontVector
        {
            get { return frontVector; }
            set { frontVector = value; }
        }

        /// <summary>
        /// Gets or sets the coordinate system/up vector/front vector of the asset info.
        /// </summary>
        public AxisSystem AxisSystem { get;set; }

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

Added members to class Aspose.ThreeD.Axis:

        /// <summary>
        /// The -X axis.
        /// </summary>
        NegativeXAxis,
        /// <summary>
        /// The -Y axis.
        /// </summary>
        NegativeYAxis,
        /// <summary>
        /// The -Z axis.
        /// </summary>
        NegativeZAxis,

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

Added class Aspose.ThreeD.Deformers.BoneLinkMode

Added members to class Aspose.ThreeD.Deformers.Bone:

        /// <summary>
        /// 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. 
        /// </summary>
        public BoneLinkMode LinkMode { get; set; }

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

Sample code

        var boneToLimbNode1 = new Bone("")
        {
                Node = limbNode1,
                LinkMode = BoneLinkMode.TotalOne
        };

Added members to class Aspose.ThreeD.Entities.Mesh:

        /// <summary>
        /// Optimize the mesh's memory usage by eliminating duplicated control points
        /// </summary>
        /// <param name="vertexElements">Optimize duplicated vertex element data</param>
        /// <returns>New mesh instance with compact memory usage</returns>
        public Mesh Optimize(bool vertexElements)

Sample code

        var 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.
        var optimizedMesh = mesh.Optimize(true);
        //640 bytes, 8 vertices,  6 normals, 4 texture coordinates
        (new Scene(optimizedMesh)).Save("optimized.obj");

Added members to class Aspose.ThreeD.Formats.ObjSaveOptions:

        /// <summary>
        /// Gets or sets the axis system in the exported stl file. 
        /// </summary>
        /// <remarks> FlipCoordinateSystem must be enabled to utilize this feature. </remarks>
        public AxisSystem AxisSystem { get; set; }

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

Sample code

        var scene = Scene.FromFile("input.fbx");
        var opt = new ObjSaveOptions();
        opt.AxisSystem = new AxisSystem(CoordinateSystem.RightHanded, Axis.YAxis, Axis.XAxis);
        opt.FlipCoordinateSystem = true;
        scene.Save("test.obj", opt);

Added members to class Aspose.ThreeD.Formats.PlySaveOptions:

        /// <summary>
        /// Gets or sets the axis system in the exported stl file. 
        /// </summary>
        /// <remarks> FlipCoordinateSystem must be enabled to utilize this feature. </remarks>
        public AxisSystem AxisSystem { get; set; }

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

Sample code

        var scene = Scene.FromFile("input.fbx");
        var opt = new PlySaveOptions();
        opt.AxisSystem = new AxisSystem(CoordinateSystem.RightHanded, Axis.YAxis, Axis.XAxis);
        opt.FlipCoordinate = true;
        scene.Save("test.ply", opt);

Added members to class Aspose.ThreeD.Formats.StlSaveOptions:

        /// <summary>
        /// Gets or sets the axis system in the exported stl file. 
        /// </summary>
        /// <remarks> FlipCoordinateSystem must be enabled to utilize this feature. </remarks>
        public AxisSystem AxisSystem { get; set; }

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

Sample code

        var scene = Scene.FromFile("input.fbx");
        var opt = new StlSaveOptions();
        opt.AxisSystem = new AxisSystem(CoordinateSystem.RightHanded, Axis.YAxis, Axis.XAxis);
        opt.FlipCoordinateSystem = true;
        scene.Save("test.stl", opt);

Added members to class Aspose.ThreeD.Transform:

        /// <summary>
        /// Gets or sets the scaling
        /// </summary>
        /// <example>
        public Vector3 Scaling { get; set ; }
        /// <summary>
        /// Gets or sets the scaling offset
        /// </summary>
        public Vector3 ScalingOffset { get; set; }
        /// <summary>
        /// Gets or sets the scaling pivot
        /// </summary>
        public Vector3 ScalingPivot { get; set; }
        /// <summary>
        /// Gets or sets the rotation offset
        /// </summary>
        public Vector3 RotationOffset { get; set; }
        /// <summary>
        /// Gets or sets the rotation pivot
        /// </summary>
        public Vector3 RotationPivot { get; set; }

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