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:
- Set the active target.
- Ensure the compensator is enabled.
- Build optional measurement parameters (e.g., distance precision).
- 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.IMeasurementParameterDirectionalPrecisionlets you specify the target distance precision (here: 0.003 m SD).MeasurementSettingsbundles 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.