find_data_code_2dT_find_data_code_2dFindDataCode2dFindDataCode2dfind_data_code_2d (Operator)

Name

find_data_code_2dT_find_data_code_2dFindDataCode2dFindDataCode2dfind_data_code_2d — Detect and read 2D data code symbols in an image or train the 2D data code model.

Signature

find_data_code_2d(Image : SymbolXLDs : DataCodeHandle, GenParamName, GenParamValue : ResultHandles, DecodedDataStrings)

Herror T_find_data_code_2d(const Hobject Image, Hobject* SymbolXLDs, const Htuple DataCodeHandle, const Htuple GenParamName, const Htuple GenParamValue, Htuple* ResultHandles, Htuple* DecodedDataStrings)

void FindDataCode2d(const HObject& Image, HObject* SymbolXLDs, const HTuple& DataCodeHandle, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* ResultHandles, HTuple* DecodedDataStrings)

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* ResultHandles, HTuple* DecodedDataStrings) const

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const HString& GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const char* GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HDataCode2D::FindDataCode2d(const HImage& Image, const wchar_t* GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const   ( Windows only)

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* ResultHandles, HTuple* DecodedDataStrings) const

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const HString& GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const char* GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const

HXLDCont HImage::FindDataCode2d(const HDataCode2D& DataCodeHandle, const wchar_t* GenParamName, Hlong GenParamValue, Hlong* ResultHandles, HString* DecodedDataStrings) const   ( Windows only)

static void HOperatorSet.FindDataCode2d(HObject image, out HObject symbolXLDs, HTuple dataCodeHandle, HTuple genParamName, HTuple genParamValue, out HTuple resultHandles, out HTuple decodedDataStrings)

HXLDCont HDataCode2D.FindDataCode2d(HImage image, HTuple genParamName, HTuple genParamValue, out HTuple resultHandles, out HTuple decodedDataStrings)

HXLDCont HDataCode2D.FindDataCode2d(HImage image, string genParamName, int genParamValue, out int resultHandles, out string decodedDataStrings)

HXLDCont HImage.FindDataCode2d(HDataCode2D dataCodeHandle, HTuple genParamName, HTuple genParamValue, out HTuple resultHandles, out HTuple decodedDataStrings)

HXLDCont HImage.FindDataCode2d(HDataCode2D dataCodeHandle, string genParamName, int genParamValue, out int resultHandles, out string decodedDataStrings)

def find_data_code_2d(image: HObject, data_code_handle: HHandle, gen_param_name: MaybeSequence[str], gen_param_value: MaybeSequence[Union[int, float, str]]) -> Tuple[HObject, Sequence[int], Sequence[str]]

def find_data_code_2d_s(image: HObject, data_code_handle: HHandle, gen_param_name: MaybeSequence[str], gen_param_value: MaybeSequence[Union[int, float, str]]) -> Tuple[HObject, int, str]

Description

The operator find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d detects 2D data code symbols in the input image (ImageImageImageImageimageimage) and reads the data that is encoded in the symbol. Before calling find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d, a model of a class of 2D data codes that matches the symbols in the images must be created with create_data_code_2d_modelcreate_data_code_2d_modelCreateDataCode2dModelCreateDataCode2dModelCreateDataCode2dModelcreate_data_code_2d_model or read_data_code_2d_modelread_data_code_2d_modelReadDataCode2dModelReadDataCode2dModelReadDataCode2dModelread_data_code_2d_model. The handle returned by these operators is passed to find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d in DataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandledataCodeHandledata_code_handle. To look for more than one symbol in an image, the generic parameter 'stop_after_result_num'"stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num" can be passed to GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name together with the number of requested symbols as GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value.

As a result the operator returns for every successfully decoded symbol the surrounding XLD contour (SymbolXLDsSymbolXLDsSymbolXLDsSymbolXLDssymbolXLDssymbol_xlds), a result handle, which refers to a candidate structure that stores additional information about the symbol as well as the search and decoding process (ResultHandlesResultHandlesResultHandlesResultHandlesresultHandlesresult_handles), and the string that is encoded in the symbol (DecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsdecodedDataStringsdecoded_data_strings). Passing the candidate handle from ResultHandlesResultHandlesResultHandlesResultHandlesresultHandlesresult_handles together with the generic parameter 'decoded_data'"decoded_data""decoded_data""decoded_data""decoded_data""decoded_data", get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResultsget_data_code_2d_results returns a tuple with the ASCII code of all characters of the string (see also Tuple / String Operations).

For an explanation of the concept of the 2D data code reader see the introduction of chapter Identification / Data Code.

The symbol structure of GS1 DataMatrix, GS1 QR Code, GS1 Aztec Code, and GS1 DotCode is identical to the structure of Data Matrix ECC 200, QR Code, Aztec Code, and DotCode, respectively. Therefore, all parameters, settings, and rules applying to Data Matrix ECC 200, QR Code, Aztec Code, or DotCode apply to their GS1 variants as well. The GS1 symbologies enforce merely additional rules for the format of the data carried by the codes. The data has to be organized in so called GS1 application element strings according to the GS1 General Specifications. For example, if the data code model DataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandledataCodeHandledata_code_handle is created as GS1 DataMatrix, then find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d only returns a result if the underlying symbol is a valid Data Matrix ECC 200 symbol, and only if its data conforms to the GS1 application element strings rules. For the GS1 application element strings it is only checked if the application identifiers exist in the GS1 General Specifications. In contrast, find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d will return no results for Data Matrix ECC 200 containing general data. The same is valid for GS1 QR Code, GS1 Aztec Code, and GS1 DotCode Code.

Adjusting the model

If there is a symbol in the image that cannot be read, it should be verified, whether the properties of the symbol fit the model parameters. Special attention should be paid to

Further relevant parameters are the gap between neighboring foreground modules and, for Data Matrix ECC 200, the maximum slant of the L-shaped finder pattern ('slant_max'"slant_max""slant_max""slant_max""slant_max""slant_max"). The current settings for these parameters are returned by the operator get_data_code_2d_paramget_data_code_2d_paramGetDataCode2dParamGetDataCode2dParamGetDataCode2dParamget_data_code_2d_param. If necessary, the corresponding model parameters can be adjusted with set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParamset_data_code_2d_param.

It is recommended to adjust the model as well as possible to the symbols in the images also for runtime reasons. In general, the runtime of find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d is higher for a more general model than for a more specific model. One should take into account that a general model leads to a high runtime especially if no valid data code can be found.

Train the model

Besides setting the model parameters manually with set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParamset_data_code_2d_param, the model can also be trained with find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d based on one or several sample images. For this, the generic parameter 'train'"train""train""train""train""train" must be passed in GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name. The corresponding value passed in GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value determines the model parameters that should be learned. The following values are possible:

It is possible to train several of these parameters in one call of find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d by passing the generic parameter 'train'"train""train""train""train""train" in a tuple more than once in conjunction with the corresponding parameters: e.g., GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name = ['train','train']["train","train"]["train","train"]["train","train"]["train","train"]["train","train"] and GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value = ['polarity','module_size']["polarity","module_size"]["polarity","module_size"]["polarity","module_size"]["polarity","module_size"]["polarity","module_size"]. Furthermore, in conjunction with 'train'"train""train""train""train""train" = 'all'"all""all""all""all""all" it is possible to exclude single parameters from training explicitly again by passing 'train'"train""train""train""train""train" more than once. The names of the parameters to exclude, however, must be prefixed by '~'"~""~""~""~""~": GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name = ['train','train']["train","train"]["train","train"]["train","train"]["train","train"]["train","train"] and GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value = ['all','~contrast']["all","~contrast"]["all","~contrast"]["all","~contrast"]["all","~contrast"]["all","~contrast"], e.g., trains all parameters except the minimum contrast.

For training the model, the following aspects should be considered:

Note that during training, a possibly set timeout is ignored (see set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParamset_data_code_2d_param).

Functionality of the symbol search

Query results of the symbol search

With the result handles and the operators get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResultsget_data_code_2d_results and get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjectsGetDataCode2dObjectsget_data_code_2d_objects, additional data can be requested about the search process, e.g., the number of internal search passes or the number of investigated candidates, and - together with the ResultHandlesResultHandlesResultHandlesResultHandlesresultHandlesresult_handles - about the symbols, like the symbol and module size, the contrast, or the raw data coded in the symbol. In addition, these operators provide information about all investigated candidates that could not be read. In particular, this helps to determine if a candidate was actually generated at the symbol's position during the preprocessing and - by the value of a status variable - why the search or reading was aborted. Further information about the parameters can be found with the operators get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResultsget_data_code_2d_results and get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjectsGetDataCode2dObjectsget_data_code_2d_objects.

Timeout and Abort

The operator find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d can be aborted by a timeout and dynamically. With the operator set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParamset_data_code_2d_param you can specify a timeout. If find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d reaches this timeout, it returns all codes decoded so far. Alternatively, you can call set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParamset_data_code_2d_param with 'abort'"abort""abort""abort""abort""abort" from another thread to abort find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d dynamically.

The information whether the operator was aborted or not can be queried by calling get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResultsget_data_code_2d_results with the parameter 'aborted'"aborted""aborted""aborted""aborted""aborted".

Furthermore, the operator find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d can be canceled, which means no result is returned but instead an error is returned. This can be done with the operator set_operator_timeoutset_operator_timeoutSetOperatorTimeoutSetOperatorTimeoutSetOperatorTimeoutset_operator_timeout or interrupt_operatorinterrupt_operatorInterruptOperatorInterruptOperatorInterruptOperatorinterrupt_operator. If find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d is canceled by set_operator_timeoutset_operator_timeoutSetOperatorTimeoutSetOperatorTimeoutSetOperatorTimeoutset_operator_timeout, H_ERR_TIMEOUT (9400) is returned. If find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d is canceled by interrupt_operatorinterrupt_operatorInterruptOperatorInterruptOperatorInterruptOperatorinterrupt_operator, H_ERR_CANCEL (22) is returned. Note: Both mentioned operators are only supported in cancel mode.

Special parallelization for Data Matrix ECC 200

The operator find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d supports special parallelization features for Data Matrix ECC 200. This additional internal parallelization can lead to a significantly shorter execution time under certain circumstances. In general, faster calculation times can be expected if, e.g., set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParamset_data_code_2d_param is used to set the value 'any'"any""any""any""any""any" for one or more of the parameters 'polarity'"polarity""polarity""polarity""polarity""polarity", 'contrast_tolerance'"contrast_tolerance""contrast_tolerance""contrast_tolerance""contrast_tolerance""contrast_tolerance" and 'finder_pattern_tolerance'"finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance", or if the set values for 'module_gap_min'"module_gap_min""module_gap_min""module_gap_min""module_gap_min""module_gap_min" and 'module_gap_max'"module_gap_max""module_gap_max""module_gap_max""module_gap_max""module_gap_max" differ. In all these cases, a series of parameter values must be taken into account. This applies in particular if 'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters""default_parameters" has been set to 'enhanced_recognition'"enhanced_recognition""enhanced_recognition""enhanced_recognition""enhanced_recognition""enhanced_recognition" or 'maximum_recognition'"maximum_recognition""maximum_recognition""maximum_recognition""maximum_recognition""maximum_recognition".

Please note, that the memory consumption increases with the number of parallel running threads. To reduce the memory consumption set_systemset_systemSetSystemSetSystemSetSystemset_system can be used to either set the number of threads with the parameter 'thread_num'"thread_num""thread_num""thread_num""thread_num""thread_num", or to switch off the temporary memory cache with the parameter 'temporary_mem_cache'"temporary_mem_cache""temporary_mem_cache""temporary_mem_cache""temporary_mem_cache""temporary_mem_cache". The Data Matrix ECC 200 specific parallelization can also be easily disabled by setting the generic parameter GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name = 'specific_parallelization'"specific_parallelization""specific_parallelization""specific_parallelization""specific_parallelization""specific_parallelization" to 'disable'"disable""disable""disable""disable""disable". Note that this will only switch off the additional internal parallelization for Data Matrix ECC 200. Certain sub-tasks might be still processed in parallel. For more information on how to disable the entire parallelization, see the operator reference of set_systemset_systemSetSystemSetSystemSetSystemset_system with its parameters 'thread_num'"thread_num""thread_num""thread_num""thread_num""thread_num" and 'parallelize_operators'"parallelize_operators""parallelize_operators""parallelize_operators""parallelize_operators""parallelize_operators". In general, however, it should not be necessary to switch off the specific parallelization. Per default, 'specific_parallelization'"specific_parallelization""specific_parallelization""specific_parallelization""specific_parallelization""specific_parallelization" is set to 'enable'"enable""enable""enable""enable""enable".

Chinese characters

If a QR Code contains Chinese characters encoded according to the Chinese national standard GBT 18284-2000, find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d returns these characters UTF-8 encoded in DecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsdecodedDataStringsdecoded_data_strings, if the system parameter 'filename_encoding'"filename_encoding""filename_encoding""filename_encoding""filename_encoding""filename_encoding" is set to 'utf8'"utf8""utf8""utf8""utf8""utf8". The contents of 'decoded_data'"decoded_data""decoded_data""decoded_data""decoded_data""decoded_data", which can be retrieved with get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResultsget_data_code_2d_results, are never converted to UTF-8.

Execution Information

This operator supports canceling timeouts and interrupts.

This operator modifies the state of the following input parameter:

During execution of this operator, access to the value of this parameter must be synchronized if it is used across multiple threads.

Parameters

ImageImageImageImageimageimage (input_object)  singlechannelimage objectHImageHObjectHImageHobject (byte)

Input image. If the image has a reduced domain, the data code search is reduced to that domain. This usually reduces the runtime of the operator. However, if the datacode is not fully inside the domain, the datacode might not be found correctly. In rare cases, data codes may be found outside the domain. If these results are undesirable, they have to be subsequently eliminated.

SymbolXLDsSymbolXLDsSymbolXLDsSymbolXLDssymbolXLDssymbol_xlds (output_object)  xld_cont(-array) objectHXLDContHObjectHXLDContHobject *

XLD contours that surround the successfully decoded data code symbols. The order of the contour points reflects the orientation of the detected symbols. The contours begin in the top left corner (see 'orientation'"orientation""orientation""orientation""orientation""orientation" in the reference of get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResultsget_data_code_2d_results) and continue clockwise.

DataCodeHandleDataCodeHandleDataCodeHandleDataCodeHandledataCodeHandledata_code_handle (input_control, state is modified)  datacode_2d HDataCode2D, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle of the 2D data code model.

GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name (input_control)  attribute.name(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Names of (optional) parameters for controlling the behavior of the operator.

Default: []

List of values: 'specific_parallelization'"specific_parallelization""specific_parallelization""specific_parallelization""specific_parallelization""specific_parallelization", 'stop_after_result_num'"stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num""stop_after_result_num", 'symbol_search'"symbol_search""symbol_search""symbol_search""symbol_search""symbol_search", 'train'"train""train""train""train""train"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value (input_control)  attribute.value(-array) HTupleMaybeSequence[Union[int, float, str]]HTupleHtuple (integer / real / string) (int / long / double / string) (Hlong / double / HString) (Hlong / double / char*)

Values of the optional generic parameters.

Default: []

Suggested values: 'all'"all""all""all""all""all", 'model_type'"model_type""model_type""model_type""model_type""model_type", 'symbol_size'"symbol_size""symbol_size""symbol_size""symbol_size""symbol_size", 'version'"version""version""version""version""version", 'module_size'"module_size""module_size""module_size""module_size""module_size", 'small_modules_robustness'"small_modules_robustness""small_modules_robustness""small_modules_robustness""small_modules_robustness""small_modules_robustness", 'module_shape'"module_shape""module_shape""module_shape""module_shape""module_shape", 'polarity'"polarity""polarity""polarity""polarity""polarity", 'mirrored'"mirrored""mirrored""mirrored""mirrored""mirrored", 'contrast'"contrast""contrast""contrast""contrast""contrast", 'candidate_selection'"candidate_selection""candidate_selection""candidate_selection""candidate_selection""candidate_selection", 'module_grid'"module_grid""module_grid""module_grid""module_grid""module_grid", 'finder_pattern_tolerance'"finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance""finder_pattern_tolerance", 'contrast_tolerance'"contrast_tolerance""contrast_tolerance""contrast_tolerance""contrast_tolerance""contrast_tolerance", 'additional_levels'"additional_levels""additional_levels""additional_levels""additional_levels""additional_levels", 'image_proc'"image_proc""image_proc""image_proc""image_proc""image_proc", 'rudimental'"rudimental""rudimental""rudimental""rudimental""rudimental", 'default'"default""default""default""default""default", 'exhaustive'"exhaustive""exhaustive""exhaustive""exhaustive""exhaustive", 1, 2, 3, 'enable'"enable""enable""enable""enable""enable", 'disable'"disable""disable""disable""disable""disable"

ResultHandlesResultHandlesResultHandlesResultHandlesresultHandlesresult_handles (output_control)  integer(-array) HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Handles of all successfully decoded 2D data code symbols.

DecodedDataStringsDecodedDataStringsDecodedDataStringsDecodedDataStringsdecodedDataStringsdecoded_data_strings (output_control)  string(-array) HTupleSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Decoded data strings of all detected 2D data code symbols in the image.

Example (HDevelop)

* Examples showing the use of find_data_code_2d.
* First, the operator is used to train the model, afterwards it is used to
* read the symbol in another image.

* Create a model for reading Data matrix ECC 200 codes
create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
* Read a training image
read_image (Image, 'datacode/ecc200/ecc200_cpu_007')
* Train the model with the symbol in the image
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, 'train', 'all', \
                   ResultHandles, DecodedDataStrings)
*
* End of training / begin of normal application
*

* Read an image
read_image (Image, 'datacode/ecc200/ecc200_cpu_010')
* Read the symbol in the image
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \
                   ResultHandles, DecodedDataStrings)

* Display all symbols, the strings encoded in them, and the module size
dev_set_color ('green')
for i := 0 to |ResultHandles| - 1 by 1
    select_obj (SymbolXLDs, SymbolXLD, i+1)
    dev_display (SymbolXLD)
    get_contour_xld (SymbolXLD, Row, Col)
    set_tposition (WindowHandle, max(Row), min(Col))
    write_string (WindowHandle, DecodedDataStrings[i])
    get_data_code_2d_results (DataCodeHandle, ResultHandles[i], \
                              ['module_height','module_width'], ModuleSize)
    new_line (WindowHandle)
    write_string (WindowHandle, 'module size = ' + ModuleSize[0] + 'x' + \
                                 ModuleSize[1])
endfor

* Clear the model
clear_data_code_2d_model (DataCodeHandle)

Result

The operator find_data_code_2dfind_data_code_2dFindDataCode2dFindDataCode2dFindDataCode2dfind_data_code_2d returns the value 2 ( H_MSG_TRUE) if the given parameters are correct. Otherwise, an exception is raised.

Possible Predecessors

create_data_code_2d_modelcreate_data_code_2d_modelCreateDataCode2dModelCreateDataCode2dModelCreateDataCode2dModelcreate_data_code_2d_model, read_data_code_2d_modelread_data_code_2d_modelReadDataCode2dModelReadDataCode2dModelReadDataCode2dModelread_data_code_2d_model, set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParamset_data_code_2d_param

Possible Successors

get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResultsget_data_code_2d_results, get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjectsGetDataCode2dObjectsget_data_code_2d_objects, write_data_code_2d_modelwrite_data_code_2d_modelWriteDataCode2dModelWriteDataCode2dModelWriteDataCode2dModelwrite_data_code_2d_model

See also

create_data_code_2d_modelcreate_data_code_2d_modelCreateDataCode2dModelCreateDataCode2dModelCreateDataCode2dModelcreate_data_code_2d_model, set_data_code_2d_paramset_data_code_2d_paramSetDataCode2dParamSetDataCode2dParamSetDataCode2dParamset_data_code_2d_param, get_data_code_2d_resultsget_data_code_2d_resultsGetDataCode2dResultsGetDataCode2dResultsGetDataCode2dResultsget_data_code_2d_results, get_data_code_2d_objectsget_data_code_2d_objectsGetDataCode2dObjectsGetDataCode2dObjectsGetDataCode2dObjectsget_data_code_2d_objects

References

GS1 General Specifications; Version 12; Issue 1, Jan-2012; GS1.

Module

Data Code