/// Returns the recognized target when status is FoundTarget.
/// </summary>
voidgetTarget(/* OUT */ImageTarget**Return);
/// <summary>
/// Returns the error message when status is UnknownError.
/// </summary>
voidgetUnknownErrorMessage(/* OUT */String**Return);
};
/// <summary>
/// CloudRecognizer implements cloud recognition. It can only be used after created a recognition image library on the cloud. Please refer to EasyAR CRS documentation.
/// When the component is not needed anymore, call close function to close it. It shall not be used after calling close.
/// Before using a CloudRecognizer, an `ImageTracker`_ must be setup and prepared. Any target returned from cloud should be manually put into the `ImageTracker`_ using `ImageTracker.loadTarget`_ if it need to be tracked. Then the target can be used as same as a local target after loaded into the tracker. When a target is recognized, you can get it from callback, and you should use target uid to distinguish different targets. The target runtimeID is dynamically created and cannot be used as unique identifier in the cloud situation.
/// Creates an instance and connects to the server.
/// </summary>
staticvoidcreate(String*cloudRecognitionServiceServerAddress,String*apiKey,String*apiSecret,String*cloudRecognitionServiceAppId,/* OUT */CloudRecognizer**Return);
/// <summary>
/// Creates an instance and connects to the server with Cloud Secret.
/// </summary>
staticvoidcreateByCloudSecret(String*cloudRecognitionServiceServerAddress,String*cloudRecognitionServiceSecret,String*cloudRecognitionServiceAppId,/* OUT */CloudRecognizer**Return);
/// <summary>
/// Send recognition request. The lowest available request interval is 300ms.
/// Returns the recognized target when status is FoundTarget.
/// </summary>
-(easyar_ImageTarget*)getTarget;
/// <summary>
/// Returns the error message when status is UnknownError.
/// </summary>
-(NSString*)getUnknownErrorMessage;
@end
/// <summary>
/// CloudRecognizer implements cloud recognition. It can only be used after created a recognition image library on the cloud. Please refer to EasyAR CRS documentation.
/// When the component is not needed anymore, call close function to close it. It shall not be used after calling close.
/// Before using a CloudRecognizer, an `ImageTracker`_ must be setup and prepared. Any target returned from cloud should be manually put into the `ImageTracker`_ using `ImageTracker.loadTarget`_ if it need to be tracked. Then the target can be used as same as a local target after loaded into the tracker. When a target is recognized, you can get it from callback, and you should use target uid to distinguish different targets. The target runtimeID is dynamically created and cannot be used as unique identifier in the cloud situation.
/// </summary>
@interfaceeasyar_CloudRecognizer:easyar_RefBase
+(instancetype)newNS_UNAVAILABLE;
-(instancetype)initNS_UNAVAILABLE;
/// <summary>
/// Returns true.
/// </summary>
+(bool)isAvailable;
/// <summary>
/// Creates an instance and connects to the server.
/// Creates an instance. The default joiner will be used, which takes input frame from the first input and first result or null of each input. The first result of every input will be placed at the corresponding input index of results of the final output frame.
/// </summary>
voideasyar_OutputFrameJoin_create(intinputCount,/* OUT */easyar_OutputFrameJoin**Return);
/// <summary>
/// Creates an instance. A custom joiner is specified.
/// </summary>
voideasyar_OutputFrameJoin_createWithJoiner(intinputCount,easyar_FunctorOfOutputFrameFromListOfOutputFramejoiner,/* OUT */easyar_OutputFrameJoin**Return);
/// Output port for frame arrival. It can be connected to `InputFrameThrottler.signalInput`_ .
/// </summary>
voideasyar_OutputFrameBuffer_signalOutput(easyar_OutputFrameBuffer*This,/* OUT */easyar_SignalSource**Return);
/// <summary>
/// Fetches the most recent `OutputFrame`_ .
/// </summary>
voideasyar_OutputFrameBuffer_peek(easyar_OutputFrameBuffer*This,/* OUT */easyar_OptionalOfOutputFrame*Return);
/// <summary>
/// Creates an instance.
/// </summary>
voideasyar_OutputFrameBuffer_create(/* OUT */easyar_OutputFrameBuffer**Return);
/// <summary>
/// Pauses output of `OutputFrame`_ . After execution, all results of `OutputFrameBuffer.peek`_ will be empty. `OutputFrameBuffer.signalOutput`_ is not affected.
voideasyar_InputFrameToOutputFrameAdapter__retain(consteasyar_InputFrameToOutputFrameAdapter*This,/* OUT */easyar_InputFrameToOutputFrameAdapter**Return);
voideasyar_InputFrameToFeedbackFrameAdapter__retain(consteasyar_InputFrameToFeedbackFrameAdapter*This,/* OUT */easyar_InputFrameToFeedbackFrameAdapter**Return);
voidoutput(intindex,/* OUT */OutputFrameSource**Return);
/// <summary>
/// Output count.
/// </summary>
intoutputCount();
/// <summary>
/// Creates an instance.
/// </summary>
staticvoidcreate(intoutputCount,/* OUT */OutputFrameFork**Return);
};
/// <summary>
/// Output frame join.
/// It is used to aggregate output frame from multiple components in parallel.
/// All members of this class is thread-safe.
/// It shall be noticed that connections and disconnections to the inputs shall not be performed during the flowing of data, or it may stuck in a state that no frame can be output. (It is recommended to complete dataflow connection before start a camera.)
voidinput(intindex,/* OUT */OutputFrameSink**Return);
/// <summary>
/// Output port.
/// </summary>
voidoutput(/* OUT */OutputFrameSource**Return);
/// <summary>
/// Input count.
/// </summary>
intinputCount();
/// <summary>
/// Creates an instance. The default joiner will be used, which takes input frame from the first input and first result or null of each input. The first result of every input will be placed at the corresponding input index of results of the final output frame.
/// </summary>
staticvoidcreate(intinputCount,/* OUT */OutputFrameJoin**Return);
/// <summary>
/// Creates an instance. A custom joiner is specified.
/// </summary>
staticvoidcreateWithJoiner(intinputCount,FunctorOfOutputFrameFromListOfOutputFramejoiner,/* OUT */OutputFrameJoin**Return);
};
/// <summary>
/// Feedback frame fork.
/// It is used to branch and transfer feedback frame to multiple components in parallel.
voidoutput(intindex,/* OUT */FeedbackFrameSource**Return);
/// <summary>
/// Output count.
/// </summary>
intoutputCount();
/// <summary>
/// Creates an instance.
/// </summary>
staticvoidcreate(intoutputCount,/* OUT */FeedbackFrameFork**Return);
};
/// <summary>
/// Input frame throttler.
/// There is a input frame input port and a input frame output port. It can be used to prevent incoming frames from entering algorithm components when they have not finished handling previous workload.
/// InputFrameThrottler occupies one buffer of camera. Use setBufferCapacity of camera to set an amount of buffers that is not less than the sum of amount of buffers occupied by all components. Refer to `Overview <Overview.html>`__ .
/// All members of this class is thread-safe.
/// It shall be noticed that connections and disconnections to signalInput shall not be performed during the flowing of data, or it may stuck in a state that no frame can be output. (It is recommended to complete dataflow connection before start a camera.)
staticvoidcreate(/* OUT */InputFrameThrottler**Return);
};
/// <summary>
/// Output frame buffer.
/// There is an output frame input port and output frame fetching function. It can be used to convert output frame fetching from asynchronous pattern to synchronous polling pattern, which fits frame by frame rendering.
/// OutputFrameBuffer occupies one buffer of camera. Use setBufferCapacity of camera to set an amount of buffers that is not less than the sum of amount of buffers occupied by all components. Refer to `Overview <Overview.html>`__ .
/// Output port for frame arrival. It can be connected to `InputFrameThrottler.signalInput`_ .
/// </summary>
voidsignalOutput(/* OUT */SignalSource**Return);
/// <summary>
/// Fetches the most recent `OutputFrame`_ .
/// </summary>
voidpeek(/* OUT */OutputFrame**Return);
/// <summary>
/// Creates an instance.
/// </summary>
staticvoidcreate(/* OUT */OutputFrameBuffer**Return);
/// <summary>
/// Pauses output of `OutputFrame`_ . After execution, all results of `OutputFrameBuffer.peek`_ will be empty. `OutputFrameBuffer.signalOutput`_ is not affected.
/// </summary>
voidpause();
/// <summary>
/// Resumes output of `OutputFrame`_ .
/// </summary>
voidresume();
};
/// <summary>
/// Input frame to output frame adapter.
/// There is an input frame input port and an output frame output port. It can be used to wrap an input frame into an output frame, which can be used for rendering without an algorithm component. Refer to `Overview <Overview.html>`__ .
staticvoidcreate(/* OUT */InputFrameToOutputFrameAdapter**Return);
};
/// <summary>
/// Input frame to feedback frame adapter.
/// There is an input frame input port, a historic output frame input port and a feedback frame output port. It can be used to combine an input frame and a historic output frame into a feedback frame, which is required by algorithm components such as `ImageTracker`_ .
/// On every input of an input frame, a feedback frame is generated with a previously input historic feedback frame. If there is no previously input historic feedback frame, it is null in the feedback frame.
/// InputFrameToFeedbackFrameAdapter occupies one buffer of camera. Use setBufferCapacity of camera to set an amount of buffers that is not less than the sum of amount of buffers occupied by all components. Refer to `Overview <Overview.html>`__ .
void(*func)(void*_state,ListOfOutputFrame*,/* OUT */OutputFrame**);
void(*destroy)(void*_state);
FunctorOfOutputFrameFromListOfOutputFrame(void*_state,void(*func)(void*_state,ListOfOutputFrame*,/* OUT */OutputFrame**),void(*destroy)(void*_state));
};
staticvoidFunctorOfOutputFrameFromListOfOutputFrame_func(void*_state,easyar_ListOfOutputFrame*,/* OUT */easyar_OutputFrame**,/* OUT */easyar_String**_exception);
inlineFunctorOfOutputFrameFromListOfOutputFrame::FunctorOfOutputFrameFromListOfOutputFrame(void*_state,void(*func)(void*_state,ListOfOutputFrame*,/* OUT */OutputFrame**),void(*destroy)(void*_state))
{
this->_state=_state;
this->func=func;
this->destroy=destroy;
}
staticvoidFunctorOfOutputFrameFromListOfOutputFrame_func(void*_state,easyar_ListOfOutputFrame*arg0,/* OUT */easyar_OutputFrame**Return,/* OUT */easyar_String**_exception)
/// It is used to aggregate output frame from multiple components in parallel.
/// All members of this class is thread-safe.
/// It shall be noticed that connections and disconnections to the inputs shall not be performed during the flowing of data, or it may stuck in a state that no frame can be output. (It is recommended to complete dataflow connection before start a camera.)
/// </summary>
@interfaceeasyar_OutputFrameJoin:easyar_RefBase
+(instancetype)newNS_UNAVAILABLE;
-(instancetype)initNS_UNAVAILABLE;
/// <summary>
/// Input port.
/// </summary>
-(easyar_OutputFrameSink*)input:(int)index;
/// <summary>
/// Output port.
/// </summary>
-(easyar_OutputFrameSource*)output;
/// <summary>
/// Input count.
/// </summary>
-(int)inputCount;
/// <summary>
/// Creates an instance. The default joiner will be used, which takes input frame from the first input and first result or null of each input. The first result of every input will be placed at the corresponding input index of results of the final output frame.
/// </summary>
+(easyar_OutputFrameJoin*)create:(int)inputCount;
/// <summary>
/// Creates an instance. A custom joiner is specified.
/// There is a input frame input port and a input frame output port. It can be used to prevent incoming frames from entering algorithm components when they have not finished handling previous workload.
/// InputFrameThrottler occupies one buffer of camera. Use setBufferCapacity of camera to set an amount of buffers that is not less than the sum of amount of buffers occupied by all components. Refer to `Overview <Overview.html>`__ .
/// All members of this class is thread-safe.
/// It shall be noticed that connections and disconnections to signalInput shall not be performed during the flowing of data, or it may stuck in a state that no frame can be output. (It is recommended to complete dataflow connection before start a camera.)
/// There is an output frame input port and output frame fetching function. It can be used to convert output frame fetching from asynchronous pattern to synchronous polling pattern, which fits frame by frame rendering.
/// OutputFrameBuffer occupies one buffer of camera. Use setBufferCapacity of camera to set an amount of buffers that is not less than the sum of amount of buffers occupied by all components. Refer to `Overview <Overview.html>`__ .
/// All members of this class is thread-safe.
/// </summary>
@interfaceeasyar_OutputFrameBuffer:easyar_RefBase
+(instancetype)newNS_UNAVAILABLE;
-(instancetype)initNS_UNAVAILABLE;
/// <summary>
/// Input port.
/// </summary>
-(easyar_OutputFrameSink*)input;
/// <summary>
/// Camera buffers occupied in this component.
/// </summary>
-(int)bufferRequirement;
/// <summary>
/// Output port for frame arrival. It can be connected to `InputFrameThrottler.signalInput`_ .
/// </summary>
-(easyar_SignalSource*)signalOutput;
/// <summary>
/// Fetches the most recent `OutputFrame`_ .
/// </summary>
-(easyar_OutputFrame*)peek;
/// <summary>
/// Creates an instance.
/// </summary>
+(easyar_OutputFrameBuffer*)create;
/// <summary>
/// Pauses output of `OutputFrame`_ . After execution, all results of `OutputFrameBuffer.peek`_ will be empty. `OutputFrameBuffer.signalOutput`_ is not affected.
/// </summary>
-(void)pause;
/// <summary>
/// Resumes output of `OutputFrame`_ .
/// </summary>
-(void)resume;
@end
/// <summary>
/// Input frame to output frame adapter.
/// There is an input frame input port and an output frame output port. It can be used to wrap an input frame into an output frame, which can be used for rendering without an algorithm component. Refer to `Overview <Overview.html>`__ .
/// There is an input frame input port, a historic output frame input port and a feedback frame output port. It can be used to combine an input frame and a historic output frame into a feedback frame, which is required by algorithm components such as `ImageTracker`_ .
/// On every input of an input frame, a feedback frame is generated with a previously input historic feedback frame. If there is no previously input historic feedback frame, it is null in the feedback frame.
/// InputFrameToFeedbackFrameAdapter occupies one buffer of camera. Use setBufferCapacity of camera to set an amount of buffers that is not less than the sum of amount of buffers occupied by all components. Refer to `Overview <Overview.html>`__ .
/// Returns True when the device supports dense reconstruction, otherwise returns False.
/// </summary>
booleasyar_DenseSpatialMap_isAvailable(void);
/// <summary>
/// Input port for input frame. For DenseSpatialMap to work, the inputFrame must include image and it's camera parameters and spatial information (cameraTransform and trackingStatus). See also `InputFrameSink`_ .
/// </summary>
voideasyar_DenseSpatialMap_inputFrameSink(easyar_DenseSpatialMap*This,/* OUT */easyar_InputFrameSink**Return);
/// Get the mesh management object of type `SceneMesh`_ . The contents will automatically update after calling the `DenseSpatialMap.updateSceneMesh`_ function.
/// </summary>
voideasyar_DenseSpatialMap_getMesh(easyar_DenseSpatialMap*This,/* OUT */easyar_SceneMesh**Return);
/// <summary>
/// Get the lastest updated mesh and save it to the `SceneMesh`_ object obtained by `DenseSpatialMap.getMesh`_ .
/// The parameter `updateMeshAll` indicates whether to perform a `full update` or an `incremental update`. When `updateMeshAll` is True, `full update` is performed. All meshes are saved to `SceneMesh`_ . When `updateMeshAll` is False, `incremental update` is performed, and only the most recently updated mesh is saved to `SceneMesh`_ .
/// `Full update` will take extra time and memory space, causing performance degradation.
/// DenseSpatialMap is used to reconstruct the environment accurately and densely. The reconstructed model is represented by `triangle mesh`, which is denoted simply by `mesh`.
/// Returns True when the device supports dense reconstruction, otherwise returns False.
/// </summary>
staticboolisAvailable();
/// <summary>
/// Input port for input frame. For DenseSpatialMap to work, the inputFrame must include image and it's camera parameters and spatial information (cameraTransform and trackingStatus). See also `InputFrameSink`_ .
/// </summary>
voidinputFrameSink(/* OUT */InputFrameSink**Return);
/// <summary>
/// Camera buffers occupied in this component.
/// </summary>
intbufferRequirement();
/// <summary>
/// Create `DenseSpatialMap`_ object.
/// </summary>
staticvoidcreate(/* OUT */DenseSpatialMap**Return);
/// <summary>
/// Start or continue runninng `DenseSpatialMap`_ algorithm.
/// </summary>
boolstart();
/// <summary>
/// Pause the reconstruction algorithm. Call `start` to resume reconstruction.
/// </summary>
voidstop();
/// <summary>
/// Close `DenseSpatialMap`_ algorithm.
/// </summary>
voidclose();
/// <summary>
/// Get the mesh management object of type `SceneMesh`_ . The contents will automatically update after calling the `DenseSpatialMap.updateSceneMesh`_ function.
/// </summary>
voidgetMesh(/* OUT */SceneMesh**Return);
/// <summary>
/// Get the lastest updated mesh and save it to the `SceneMesh`_ object obtained by `DenseSpatialMap.getMesh`_ .
/// The parameter `updateMeshAll` indicates whether to perform a `full update` or an `incremental update`. When `updateMeshAll` is True, `full update` is performed. All meshes are saved to `SceneMesh`_ . When `updateMeshAll` is False, `incremental update` is performed, and only the most recently updated mesh is saved to `SceneMesh`_ .
/// `Full update` will take extra time and memory space, causing performance degradation.
/// DenseSpatialMap is used to reconstruct the environment accurately and densely. The reconstructed model is represented by `triangle mesh`, which is denoted simply by `mesh`.
/// DenseSpatialMap occupies 1 buffers of camera.
/// </summary>
@interfaceeasyar_DenseSpatialMap:easyar_RefBase
+(instancetype)newNS_UNAVAILABLE;
-(instancetype)initNS_UNAVAILABLE;
/// <summary>
/// Returns True when the device supports dense reconstruction, otherwise returns False.
/// </summary>
+(bool)isAvailable;
/// <summary>
/// Input port for input frame. For DenseSpatialMap to work, the inputFrame must include image and it's camera parameters and spatial information (cameraTransform and trackingStatus). See also `InputFrameSink`_ .
/// </summary>
-(easyar_InputFrameSink*)inputFrameSink;
/// <summary>
/// Camera buffers occupied in this component.
/// </summary>
-(int)bufferRequirement;
/// <summary>
/// Create `DenseSpatialMap`_ object.
/// </summary>
+(easyar_DenseSpatialMap*)create;
/// <summary>
/// Start or continue runninng `DenseSpatialMap`_ algorithm.
/// </summary>
-(bool)start;
/// <summary>
/// Pause the reconstruction algorithm. Call `start` to resume reconstruction.
/// </summary>
-(void)stop;
/// <summary>
/// Close `DenseSpatialMap`_ algorithm.
/// </summary>
-(void)close;
/// <summary>
/// Get the mesh management object of type `SceneMesh`_ . The contents will automatically update after calling the `DenseSpatialMap.updateSceneMesh`_ function.
/// </summary>
-(easyar_SceneMesh*)getMesh;
/// <summary>
/// Get the lastest updated mesh and save it to the `SceneMesh`_ object obtained by `DenseSpatialMap.getMesh`_ .
/// The parameter `updateMeshAll` indicates whether to perform a `full update` or an `incremental update`. When `updateMeshAll` is True, `full update` is performed. All meshes are saved to `SceneMesh`_ . When `updateMeshAll` is False, `incremental update` is performed, and only the most recently updated mesh is saved to `SceneMesh`_ .
/// `Full update` will take extra time and memory space, causing performance degradation.