/** * Sample to illustrate the asynchronous measurement between a geometry and an arc of circle. */ import { AABB, ArcOfCircleFeature, DataSessionInterface, FeatureManagerInterface, FeatureType, GeometryFeature, InfiniteEngineInterface, MeasurementAsyncResult, MeasurementType, Unit, Vector3 } from'generated_files/documentation/appinfiniteapi';
// the data session // created previously letlDataSession : DataSessionInterface;
// created previously letlInfiniteEngine : InfiniteEngineInterface;
// the geometric instance to compute measurement from letlGeometricInstanceId : number;
// retrieve the `feature` manager constlFeatureManager : FeatureManagerInterface = lInfiniteEngine.getFeatureManager();
// retrieve the DMU center constlDmuAABB : AABB = newAABB(); lDataSession.getDmuAABB(lDmuAABB);
// retrieve the up and front vectors of the scene constlDmuUpVector : Vector3 = newVector3(); constlDmuFrontVector : Vector3 = newVector3(); lInfiniteEngine.getCameraManager().getFrameReference(lDmuFrontVector, lDmuUpVector);
// the arc of circle radius in meters constlCircleFeatureRadiusInMeters : number = 1.3;
constmakeMeasurement = async () : Promise<void> => { // first `feature` is a geometry constlFirstFeature : GeometryFeature = { type:FeatureType.FT_Geometry, geometricInstanceId:lGeometricInstanceId };
// second `feature` is an arc of circle constlSecondFeature : ArcOfCircleFeature = { type:FeatureType.FT_ArcOfCircle, center:lDmuAABB.mCenter, normal:lDmuUpVector, startDirection:lDmuFrontVector, radius:lCircleFeatureRadiusInMeters * lDataSession.convertUnitFactor(Unit.U_Meter, lDataSession.getDmuBuildUnit()), angle:Math.PI * 0.5 };
// and make a measurement between the geometry and the given arc of circle (do not use item centers) // the measure is the smallest distance between the 2 elements constlMeasureResult : MeasurementAsyncResult = awaitlFeatureManager.asyncComputeMeasurement(lFirstFeature, lSecondFeature, MeasurementType.MT_Item_Item); if(lMeasureResult.value === undefined || lMeasureResult.value.contactPoint0 === undefined) { console.log('Failed to make measurement, is the geometric instance id correct ?'); }
// make two fancy points on the rendering letlApplicationId : number = lFeatureManager.createPointApplicationFeature(lMeasureResult.value.contactPoint0); if(lApplicationId <= 0) { console.log('feature creation failed'); } lApplicationId = lFeatureManager.createPointApplicationFeature(lMeasureResult.value.contactPoint1); if(lApplicationId <= 0) { console.log('feature creation failed'); } // and show the result, we are here for that console.log('Measurement distance', lMeasureResult.value.contactPoint0.distanceToVector(lMeasureResult.value.contactPoint1)); };
Represents a measurement promise result.
This object is returned from FeatureManagerInterface.asyncComputeMeasurement.
See
FeatureManagerInterface.asyncComputeMeasurement