Skip to content

Dimensions is an additional source of input for macro feature. Dimensions can be defined in the following way:

cs
using Xarial.XCad.Features.CustomFeature.Attributes;
using Xarial.XCad.Features.CustomFeature.Enums;

namespace Xarial.XCad.Documentation
{
    public class DimensionMacroFeatureParams
    {
        [ParameterDimension(CustomFeatureDimensionType_e.Linear)]
        public double FirstDimension { get; set; } = 0.01;

        [ParameterDimension(CustomFeatureDimensionType_e.Radial)]
        public double SecondDimension { get; set; }
    }    
}

It is required to arrange the dimensions within rebuild by specifying the alignDim delegate. Use IXCustomFeatureDefinition<TParams>.AlignDimension and extension helper methods to align the dimension.

cs
using Xarial.XCad.Features.CustomFeature;
using Xarial.XCad.Features.CustomFeature.Delegates;
using Xarial.XCad.Features.CustomFeature.Structures;
using Xarial.XCad.Geometry;
using Xarial.XCad.Geometry.Structures;
using Xarial.XCad.SolidWorks;
using Xarial.XCad.SolidWorks.Documents;
using Xarial.XCad.SolidWorks.Features.CustomFeature;

namespace Xarial.XCad.Documentation
{
    public class MyDimRegenDataMacroFeature : SwMacroFeatureDefinition<DimensionMacroFeatureParams>
    {        
        private IXBody[] GetBodies()
        {
            //create bodies for geometry
            return null;
        }

        public override CustomFeatureRebuildResult OnRebuild(ISwApplication app, ISwDocument model, 
            ISwMacroFeature<DimensionMacroFeatureParams> feature, out AlignDimensionDelegate<DimensionMacroFeatureParams> alignDim)
        {
            var parameters = feature.Parameters;

            var resBodies = GetBodies(); //generating bodies

            alignDim = (name, dim) => 
            {
                switch (name) 
                {
                    case nameof(DimensionMacroFeatureParams.FirstDimension):
                        this.AlignLinearDimension(dim, new Point(0, 0, 0), new Vector(1, 0, 0));
                        break;

                    case nameof(DimensionMacroFeatureParams.SecondDimension):
                        this.AlignRadialDimension(dim, new Point(0, 0, 0), new Vector(0, 0, 1));
                        break;
                }
            };

            return new CustomFeatureBodyRebuildResult() { Bodies = resBodies }; //returning custom rebuild result
        }
    }
}

Origin is a starting point of the dimension.

For linear dimensions orientation represents the vector along the direction of the dimension (i.e. the direction of measured entity) For radial dimensions orientation represents the normal of the dimension (i.e. the vector of rotation of the dimension)

Orientation of dimensions