Files
handleaiuinew/env/LMI/include/GoSdk/GoPartDetection.c
T
2024-05-18 23:53:26 +08:00

877 lines
24 KiB
C

/**
* @file GoPartDetection.c
*
* @internal
* Copyright (C) 2016-2021 by LMI Technologies Inc.
* Licensed under the MIT License.
* Redistributed files must retain the above copyright notice.
*/
#include <GoSdk/GoPartDetection.h>
#include <GoSdk/GoSensor.h>
#include <GoSdk/GoUtils.h>
kBeginClassEx(Go, GoPartDetection)
kAddVMethod(GoPartDetection, kObject, VRelease)
kEndClassEx()
GoFx(kStatus) GoPartDetection_Construct(GoPartDetection* detection, kObject sensor, kAlloc allocator)
{
kAlloc alloc = kAlloc_Fallback(allocator);
kStatus status;
kCheck(kAlloc_GetObject(alloc, kTypeOf(GoPartDetection), detection));
if (!kSuccess(status = GoPartDetection_Init(*detection, kTypeOf(GoPartDetection), sensor, alloc)))
{
kAlloc_FreeRef(alloc, detection);
}
return status;
}
GoFx(kStatus) GoPartDetection_Init(GoPartDetection detection, kType type, kObject sensor, kAlloc alloc)
{
kObjR(GoPartDetection, detection);
kCheck(kObject_Init(detection, type, alloc));
kZero(obj->xml);
kZero(obj->xmlItem);
obj->enabled = kFALSE;
obj->enabledSystemValue = kFALSE;
obj->enabledUsed = kFALSE;
obj->thresholdDirection = GO_PART_HEIGHT_THRESHOLD_DIRECTION_ABOVE;
kZero(obj->threshold);
obj->includeSinglePoints = kTRUE;
obj->includeSinglePointsUsed = kFALSE;
kZero(obj->gapWidth);
obj->gapWidthUsed = kFALSE;
kZero(obj->gapLength);
obj->gapLengthUsed = kFALSE;
kZero(obj->paddingWidth);
obj->paddingWidthUsed = kFALSE;
kZero(obj->paddingLength);
obj->paddingLengthUsed = kFALSE;
kZero(obj->minLength);
obj->minLengthUsed = kFALSE;
kZero(obj->maxLength);
obj->maxLengthUsed = kFALSE;
kZero(obj->minArea);
obj->minAreaUsed = kFALSE;
obj->frameOfReference = GO_PART_FRAME_OF_REFERENCE_TYPE_SCAN;
obj->frameOfReferenceUsed = kFALSE;
kZero(obj->edgeFiltering);
obj->sensor = sensor;
return kOK;
}
GoFx(kStatus) GoPartDetection_VRelease(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
kCheck(kObject_VRelease(detection));
return kOK;
}
GoFx(kStatus) GoPartDetection_Read(GoPartDetection detection, kXml xml, kXmlItem item)
{
kObj(GoPartDetection, detection);
kXmlItem tempItem = kNULL;
kXmlItem edgeFilteringItem = kNULL;
obj->xml = xml;
obj->xmlItem = item;
kCheck(kXml_ChildBool(xml, item, "Enabled", &obj->enabled));
tempItem = kXml_Child(xml, item, "Enabled");
if (!kIsNull(tempItem))
{
kCheck(kXml_AttrBool(xml, tempItem, "used", &obj->enabledUsed));
kCheck(kXml_AttrBool(xml, tempItem, "value", &obj->enabledSystemValue));
}
kCheck(GoConfig_ReadRangeElement64f(xml, item, "Threshold", &obj->threshold));
kCheck(kXml_Child32s(xml, item, "ThresholdDirection", &obj->thresholdDirection));
if (kXml_ChildExists(xml, item, "IncludeSinglePointsEnabled"))
{
tempItem = kXml_Child(xml, item, "IncludeSinglePointsEnabled");
kCheck(kXml_AttrBool(xml, tempItem, "used", &obj->includeSinglePointsUsed));
kCheck(kXml_ItemBool(xml, tempItem, &obj->includeSinglePoints));
}
tempItem = kXml_Child(xml, item, "GapWidth");
if (!kIsNull(tempItem))
{
kCheck(GoConfig_ReadAttrBoolOptional(xml, tempItem, "used", kFALSE, &obj->gapWidthUsed));
kCheck(GoConfig_ReadRangeElement64f(xml, item, "GapWidth", &obj->gapWidth));
}
tempItem = kXml_Child(xml, item, "GapLength");
if (!kIsNull(tempItem))
{
kCheck(GoConfig_ReadAttrBoolOptional(xml, tempItem, "used", kFALSE, &obj->gapLengthUsed));
kCheck(GoConfig_ReadRangeElement64f(xml, item, "GapLength", &obj->gapLength));
}
tempItem = kXml_Child(xml, item, "PaddingWidth");
if (!kIsNull(tempItem))
{
kCheck(GoConfig_ReadAttrBoolOptional(xml, tempItem, "used", kFALSE, &obj->paddingWidthUsed));
kCheck(GoConfig_ReadRangeElement64f(xml, item, "PaddingWidth", &obj->paddingWidth));
}
tempItem = kXml_Child(xml, item, "PaddingLength");
if (!kIsNull(tempItem))
{
kCheck(GoConfig_ReadAttrBoolOptional(xml, tempItem, "used", kFALSE, &obj->paddingLengthUsed));
kCheck(GoConfig_ReadRangeElement64f(xml, item, "PaddingLength", &obj->paddingLength));
}
if (kXml_ChildExists(xml, item, "MinLength"))
{
tempItem = kXml_Child(xml, item, "MinLength");
kCheck(kXml_AttrBool(xml, tempItem, "used", &obj->minLengthUsed));
kCheck(GoConfig_ReadRangeElement64f(xml, item, "MinLength", &obj->minLength));
}
tempItem = kXml_Child(xml, item, "MaxLength");
if (!kIsNull(tempItem))
{
kCheck(GoConfig_ReadAttrBoolOptional(xml, tempItem, "used", kFALSE, &obj->maxLengthUsed));
kCheck(GoConfig_ReadRangeElement64f(xml, item, "MaxLength", &obj->maxLength));
}
tempItem = kXml_Child(xml, item, "MinArea");
if (!kIsNull(tempItem))
{
kCheck(GoConfig_ReadAttrBoolOptional(xml, tempItem, "used", kFALSE, &obj->minAreaUsed));
kCheck(GoConfig_ReadRangeElement64f(xml, item, "MinArea", &obj->minArea));
}
tempItem = kXml_Child(xml, item, "FrameOfReference");
if (!kIsNull(tempItem))
{
kCheck(GoConfig_ReadAttrBoolOptional(xml, tempItem, "used", kFALSE, &obj->frameOfReferenceUsed));
kCheck(kXml_Child32s(xml, item, "FrameOfReference", &obj->frameOfReference));
}
edgeFilteringItem = kXml_Child(xml, item, "EdgeFiltering");
kCheck(edgeFilteringItem != kNULL);
kCheck(GoConfig_ReadAttrBoolOptional(xml, edgeFilteringItem, "used", kFALSE, &obj->edgeFiltering.used));
kCheck(kXml_ChildBool(xml, edgeFilteringItem, "Enabled", &obj->edgeFiltering.enabled));
kCheck(kXml_ChildBool(xml, edgeFilteringItem, "PreserveInteriorEnabled", &obj->edgeFiltering.preserveInterior));
kCheck(GoConfig_ReadRangeElement64f(xml, edgeFilteringItem, "ElementLength", &obj->edgeFiltering.elementLength));
kCheck(GoConfig_ReadRangeElement64f(xml, edgeFilteringItem, "ElementWidth", &obj->edgeFiltering.elementWidth));
return kOK;
}
GoFx(kStatus) GoPartDetection_Write(GoPartDetection detection, kXml xml, kXmlItem item)
{
kObj(GoPartDetection, detection);
kXmlItem edgeFilteringItem = kNULL;
kCheck(kXml_SetChildBool(xml, item, "Enabled", obj->enabled));
kCheck(GoConfig_WriteRangeElement64f(xml, item, "Threshold", obj->threshold));
kCheck(kXml_SetChild32s(xml, item, "ThresholdDirection", obj->thresholdDirection));
kCheck(kXml_SetChildBool(xml, item, "IncludeSinglePointsEnabled", obj->includeSinglePoints));
kCheck(GoConfig_WriteRangeElement64f(xml, item, "GapWidth", obj->gapWidth));
kCheck(GoConfig_WriteRangeElement64f(xml, item, "GapLength", obj->gapLength));
kCheck(GoConfig_WriteRangeElement64f(xml, item, "PaddingWidth", obj->paddingWidth));
kCheck(GoConfig_WriteRangeElement64f(xml, item, "PaddingLength", obj->paddingLength));
kCheck(GoConfig_WriteRangeElement64f(xml, item, "MinLength", obj->minLength));
kCheck(GoConfig_WriteRangeElement64f(xml, item, "MaxLength", obj->maxLength));
kCheck(GoConfig_WriteRangeElement64f(xml, item, "MinArea", obj->minArea));
kCheck(kXml_SetChild32s(xml, item, "FrameOfReference", obj->frameOfReference));
kCheck(kXml_AddItem(xml, item, "EdgeFiltering", &edgeFilteringItem));
kCheck(kXml_SetChildBool(xml, edgeFilteringItem, "Enabled", obj->edgeFiltering.enabled));
kCheck(kXml_SetChildBool(xml, edgeFilteringItem, "PreserveInteriorEnabled", obj->edgeFiltering.preserveInterior));
kCheck(GoConfig_WriteRangeElement64f(xml, edgeFilteringItem, "ElementLength", obj->edgeFiltering.elementLength));
kCheck(GoConfig_WriteRangeElement64f(xml, edgeFilteringItem, "ElementWidth", obj->edgeFiltering.elementWidth));
//Forwards Compatibility
kCheck(GoUtils_XmlMerge(obj->xml, obj->xmlItem, xml, item));
return kOK;
}
GoFx(kBool) GoPartDetection_EnablePartDetectionUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->enabledUsed;
}
GoFx(kBool) GoPartDetection_PartDetectionEnabledSystemValue(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->enabledSystemValue;
}
GoFx(kBool) GoPartDetection_PartDetectionEnabled(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->enabled;
}
GoFx(kStatus) GoPartDetection_EnablePartDetection(GoPartDetection detection, kBool enable)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
obj->enabled = enable;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_ThresholdLimitMin(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->threshold.min;
}
GoFx(k64f) GoPartDetection_ThresholdLimitMax(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->threshold.max;
}
GoFx(kStatus) GoPartDetection_SetThreshold(GoPartDetection detection, k64f height)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
kCheckArgs(GoUtils_MinMax_(height, obj->threshold.min, obj->threshold.max));
obj->threshold.value = height;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_Threshold(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->threshold.value;
}
GoFx(kStatus) GoPartDetection_SetThresholdDirection(GoPartDetection detection, GoPartHeightThresholdDirection direction)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
obj->thresholdDirection = direction;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(GoPartHeightThresholdDirection) GoPartDetection_ThresholdDirection(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->thresholdDirection;
}
GoFx(kStatus) GoPartDetection_SetIncludeSinglePoints(GoPartDetection detection, kBool includeFlag)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
obj->includeSinglePoints = includeFlag;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(kBool) GoPartDetection_IncludeSinglePoints(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->includeSinglePoints;
}
GoFx(kBool) GoPartDetection_IncludeSinglePointsUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->includeSinglePointsUsed;
}
GoFx(kStatus) GoPartDetection_SetFrameOfReference(GoPartDetection detection, GoPartFrameOfReference frameOfRef)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
obj->frameOfReference = frameOfRef;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(GoPartFrameOfReference) GoPartDetection_FrameOfReference(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->frameOfReference;
}
GoFx(kBool) GoPartDetection_FrameOfReferenceUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->frameOfReferenceUsed;
}
GoFx(k64f) GoPartDetection_GapWidthLimitMin(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->gapWidth.min;
}
GoFx(k64f) GoPartDetection_GapWidthLimitMax(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->gapWidth.max;
}
GoFx(kStatus) GoPartDetection_SetGapWidth(GoPartDetection detection, k64f gap)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
kCheckArgs(GoUtils_MinMax_(gap, obj->gapWidth.min, obj->gapWidth.max));
obj->gapWidth.value = gap;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_GapWidth(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->gapWidth.value;
}
GoFx(kBool) GoPartDetection_GapWidthUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->gapWidthUsed;
}
GoFx(k64f) GoPartDetection_GapLengthLimitMin(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
return obj->gapLength.min;
}
GoFx(k64f) GoPartDetection_GapLengthLimitMax(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->gapLength.max;
}
GoFx(kStatus) GoPartDetection_SetGapLength(GoPartDetection detection, k64f gap)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
kCheckArgs(GoUtils_MinMax_(gap, obj->gapLength.min, obj->gapLength.max));
obj->gapLength.value = gap;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_GapLength(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->gapLength.value;
}
GoFx(kBool) GoPartDetection_GapLengthUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->gapLengthUsed;
}
GoFx(k64f) GoPartDetection_PaddingWidthLimitMin(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->paddingWidth.min;
}
GoFx(k64f) GoPartDetection_PaddingWidthLimitMax(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->paddingWidth.max;
}
GoFx(kStatus) GoPartDetection_SetPaddingWidth(GoPartDetection detection, k64f padding)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
kCheckArgs(GoUtils_MinMax_(padding, obj->paddingWidth.min, obj->paddingWidth.max));
obj->paddingWidth.value = padding;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_PaddingWidth(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->paddingWidth.value;
}
GoFx(kBool) GoPartDetection_PaddingWidthUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->paddingWidthUsed;
}
GoFx(k64f) GoPartDetection_PaddingLengthLimitMin(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->paddingLength.min;
}
GoFx(k64f) GoPartDetection_PaddingLengthLimitMax(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->paddingLength.max;
}
GoFx(kStatus) GoPartDetection_SetPaddingLength(GoPartDetection detection, k64f padding)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
kCheckArgs(GoUtils_MinMax_(padding, obj->paddingLength.min, obj->paddingLength.max));
obj->paddingLength.value = padding;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_PaddingLength(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->paddingLength.value;
}
GoFx(kBool) GoPartDetection_PaddingLengthUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->paddingLengthUsed;
}
GoFx(k64f) GoPartDetection_MinLengthLimitMin(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->minLength.min;
}
GoFx(k64f) GoPartDetection_MinLengthLimitMax(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->minLength.max;
}
GoFx(kStatus) GoPartDetection_SetMinLength(GoPartDetection detection, k64f length)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
kCheckArgs(GoUtils_MinMax_(length, obj->minLength.min, obj->minLength.max));
obj->minLength.value = length;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_MinLength(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->minLength.value;
}
GoFx(kBool) GoPartDetection_MinLengthUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->minLengthUsed;
}
GoFx(k64f) GoPartDetection_MaxLengthLimitMin(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->maxLength.min;
}
GoFx(k64f) GoPartDetection_MaxLengthLimitMax(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->maxLength.max;
}
GoFx(kStatus) GoPartDetection_SetMaxLength(GoPartDetection detection, k64f length)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
kCheckArgs(GoUtils_MinMax_(length, obj->maxLength.min, obj->maxLength.max));
obj->maxLength.value = length;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_MaxLength(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->maxLength.value;
}
GoFx(kBool) GoPartDetection_MaxLengthUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->maxLengthUsed;
}
GoFx(kStatus) GoPartDetection_SetMinArea(GoPartDetection detection, k64f area)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
kCheckArgs(GoUtils_MinMax_(area, obj->minArea.min, obj->minArea.max));
obj->minArea.value = area;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_MinArea(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->minArea.value;
}
GoFx(kBool) GoPartDetection_MinAreaUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->minAreaUsed;
}
GoFx(k64f) GoPartDetection_MinAreaLimitMin(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->minArea.min;
}
GoFx(k64f) GoPartDetection_MinAreaLimitMax(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->minArea.max;
}
GoFx(kBool) GoPartDetection_EdgeFilterUsed(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->edgeFiltering.used;
}
GoFx(kBool) GoPartDetection_EdgeFilterEnabled(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->edgeFiltering.enabled;
}
GoFx(kStatus) GoPartDetection_EnableEdgeFilter(GoPartDetection detection, kBool enable)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
obj->edgeFiltering.enabled = enable;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_EdgeFilterWidthLimitMin(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->edgeFiltering.elementWidth.min;
}
GoFx(k64f) GoPartDetection_EdgeFilterWidthLimitMax(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->edgeFiltering.elementWidth.max;
}
GoFx(kStatus) GoPartDetection_SetEdgeFilterWidth(GoPartDetection detection, k64f value)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
kCheckArgs(GoUtils_MinMax_(value, obj->edgeFiltering.elementWidth.min, obj->edgeFiltering.elementWidth.max));
obj->edgeFiltering.elementWidth.value = value;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_EdgeFilterWidth(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->edgeFiltering.elementWidth.value;
}
GoFx(k64f) GoPartDetection_EdgeFilterLengthLimitMin(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->edgeFiltering.elementLength.min;
}
GoFx(k64f) GoPartDetection_EdgeFilterLengthLimitMax(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->edgeFiltering.elementLength.max;
}
GoFx(kStatus) GoPartDetection_SetEdgeFilterLength(GoPartDetection detection, k64f value)
{
kObj(GoPartDetection, detection);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
kCheckArgs(GoUtils_MinMax_(value, obj->edgeFiltering.elementLength.min, obj->edgeFiltering.elementLength.max));
obj->edgeFiltering.elementLength.value = value;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}
GoFx(k64f) GoPartDetection_EdgeFilterLength(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->edgeFiltering.elementLength.value;
}
GoFx(kBool) GoPartDetection_EdgeFilterAnteriorPreservationEnabled(GoPartDetection detection)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
return obj->edgeFiltering.preserveInterior;
}
GoFx(kStatus) GoPartDetection_EnableEdgeFilterAnteriorPreservation(GoPartDetection detection, kBool enable)
{
kObj(GoPartDetection, detection);
GoSensor_SyncConfig(obj->sensor);
kCheckState(GoSensor_IsConfigurable(obj->sensor));
kCheck(GoSensor_CacheConfig(obj->sensor));
kCheck(GoSensor_SyncConfig(obj->sensor));
obj->edgeFiltering.preserveInterior = enable;
kCheck(GoSensor_SetConfigModified(obj->sensor));
return kOK;
}