Get Started - go to homepage
Get Started logo

Get Started

Advanced

This section builds on the basic sample. We assume a connected, valid _sensor instance is already available.

Creating a Target

To perform a measurement you first need access to ISsiTargets. Extend your initialization method to acquire and subscribe once:

if (_sensor.IsSupported<ISsiTargets>())
{
    _target = _sensor.GetInterface<ISsiTargets>();
    _target.TargetChanged -= OnTargetChanged; // avoid duplicate subscription
    _target.TargetChanged += OnTargetChanged;
}

You can then create specific targets (prism, DR, Trimble MultiTrack, etc.). Example: create a Trimble MultiTrack target:

ITrimbleMultiTrackTarget CreateMultiTrackTarget(int targetId)
{
    if (_target == null) return null;
    if (!_target.IsSupported(TargetType.TrimbleMultiTrack)) return null;

    var mt = _target.CreateTarget(TargetType.TrimbleMultiTrack) as ITrimbleMultiTrackTarget;
    if (mt == null) return null;

    mt.TargetId = targetId;
    mt.WorkingMode = WorkingMode.Autolock;
    return mt;
}

Measuring a Target

Given a configured ITrimbleMultiTrackTarget (valid ID + Autolock), set it and run a measurement.

Steps:

  1. Set the active target.
  2. Ensure the compensator is enabled.
  3. Build optional measurement parameters (e.g., distance precision).
  4. Execute the measurement asynchronously.
_target.SetTarget(multiTrackTarget); // apply selected target

if (_measurement != null && _compensator != null)
{
    try
    {
        if (!_compensator.IsCompensatorEnabled)
            _compensator.EnableCompensator();

        var parameters = new List<IMeasurementParameter>();
        if (_measurement.IsSupported(MeasurementType.AnglesAndDistance, MeasurementParameterType.DistancePrecision))
        {
            var precision = _measurement.CreateMeasurementParameter(MeasurementParameterType.DistancePrecision)
                              as IMeasurementParameterDirectionalPrecision;
            if (precision != null)
            {
                precision.StandardDeviation = 0.003; // 3 mm desired precision
                parameters.Add(precision);
            }
        }

        var settings = new MeasurementSettings(MeasurementType.AnglesAndDistance, parameters);
        Task.Run(() => _measurement.Measure(settings));
    }
    catch (Exception ex)
    {
        exceptionCallback(ex);
    }
}

Parameter Explanation

  • List<IMeasurementParameter> collects all optional tuning parameters.
  • IMeasurementParameterDirectionalPrecision lets you specify the target distance precision (here: 0.003 m SD).
  • MeasurementSettings bundles the measurement type plus the parameter list and is passed to _measurement.Measure(settings).

Keep the parameter list lean—only add what the instrument supports (always check with IsSupported).

Summary

Acquire ISsiTargets, create and configure a target, set it, ensure supporting subsystems (compensator) are active, build parameters, and start the measurement. This keeps measurement logic explicit and maintainable.