/** * @file GoProfileTools.c * * @internal * Copyright (C) 2016-2021 by LMI Technologies Inc. * Licensed under the MIT License. * Redistributed files must retain the above copyright notice. */ #include #include kBeginClassEx(Go, GoProfileTool) kAddVMethod(GoProfileTool, kObject, VRelease) kEndClassEx() GoFx(kStatus) GoProfileTool_Init(GoProfileTool tool, kType type, GoToolType typeId, kObject sensor, kAlloc alloc) { kObjR(GoProfileTool, tool); kCheck(GoTool_Init(tool, type, typeId, sensor, alloc)); kZero(obj->streamOptions); kZero(obj->stream); kZero(obj->sourceOptions); kZero(obj->xAnchorOptions); kZero(obj->zAnchorOptions); obj->source = GO_DATA_SOURCE_TOP; obj->xAnchor = -1; obj->zAnchor = -1; obj->stream.step = GO_DATA_STEP_PROFILE; obj->stream.id = 0; kCheck(kArrayList_Construct(&obj->streamOptions, kTypeOf(GoDataStream), 0, alloc)); kCheck(kArrayList_Construct(&obj->sourceOptions, kTypeOf(GoDataSource), 0, alloc)); kCheck(kArrayList_Construct(&obj->xAnchorOptions, kTypeOf(k32u), 0, alloc)); kCheck(kArrayList_Construct(&obj->zAnchorOptions, kTypeOf(k32u), 0, alloc)); return kOK; } GoFx(kStatus) GoProfileTool_VRelease(GoProfileTool tool) { kObj(GoProfileTool, tool); kCheck(kDisposeRef(&obj->streamOptions)); kCheck(kDisposeRef(&obj->sourceOptions)); kCheck(kDisposeRef(&obj->xAnchorOptions)); kCheck(kDisposeRef(&obj->zAnchorOptions)); return GoTool_VRelease(tool); } GoFx(kStatus) GoProfileTool_Read(GoProfileTool tool, kXml xml, kXmlItem item) { kObj(GoProfileTool, tool); kString text = kNULL; kXmlItem anchorItem = kNULL; kXmlItem tempItem = kNULL; kXmlItem streamItem; kCheck(GoTool_VRead(tool, xml, item)); kCheck(GoToolUtil_ParseStreamOptions(tool, xml, item, obj->streamOptions)); kTry { kTest(kString_Construct(&text, kNULL, kObject_Alloc(tool))); if (kXml_ChildExists(xml, item, "Stream")) { streamItem = kXml_Child(xml, item, "Stream"); kTest(kXml_Child32s(xml, streamItem, "Step", &obj->stream.step)); kTest(kXml_Child32s(xml, streamItem, "Id", &obj->stream.id)); } kTest(kXml_Child32s(xml, item, "Source", &obj->source)); kTest(!kIsNull(tempItem = kXml_Child(xml, item, "Source"))); kTest(kXml_AttrString(xml, tempItem, "options", text)); kTest(GoOptionList_ParseList32u(kString_Chars(text), obj->sourceOptions)); kTestArgs(!kIsNull(anchorItem = kXml_Child(xml, item, "Anchor"))); kTest(kXml_Child32s(xml, anchorItem, "X", &obj->xAnchor)); kTestArgs(!kIsNull(tempItem = kXml_Child(xml, anchorItem, "X"))); kTest(kXml_AttrString(xml, tempItem, "options", text)); kTest(GoOptionList_ParseList32u(kString_Chars(text), obj->xAnchorOptions)); kTestArgs(!kIsNull(anchorItem = kXml_Child(xml, item, "Anchor"))); kTest(kXml_Child32s(xml, anchorItem, "Z", &obj->zAnchor)); kTestArgs(!kIsNull(tempItem = kXml_Child(xml, anchorItem, "Z"))); kTest(kXml_AttrString(xml, tempItem, "options", text)); kTest(GoOptionList_ParseList32u(kString_Chars(text), obj->zAnchorOptions)); } kFinally { kObject_Dispose(text); kEndFinally(); } return kOK; } GoFx(kStatus) GoProfileTool_Write(GoProfileTool tool, kXml xml, kXmlItem item) { kObj(GoProfileTool, tool); kXmlItem streamItem = kNULL; kXmlItem anchorItem = kNULL; kCheck(kXml_AddItem(xml, item, "Stream", &streamItem)); kCheck(kXml_SetChild32s(xml, streamItem, "Step", obj->stream.step)); kCheck(kXml_SetChild32s(xml, streamItem, "Id", obj->stream.id)); kCheck(kXml_SetChild32s(xml, item, "Source", obj->source)); kCheck(kXml_AddItem(xml, item, "Anchor", &anchorItem)); kCheck(kXml_SetChild32s(xml, anchorItem, "X", obj->xAnchor)); kCheck(kXml_SetChild32s(xml, anchorItem, "Z", obj->zAnchor)); kCheck(GoTool_VWrite(tool, xml, item)); return kOK; } GoFx(kSize) GoProfileTool_StreamOptionCount(GoProfileTool tool) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); return kArrayList_Count(obj->streamOptions); } GoFx(GoDataStream) GoProfileTool_StreamOptionAt(GoProfileTool tool, kSize index) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); kAssert(index < kArrayList_Count(obj->streamOptions)); return kArrayList_AsT(obj->streamOptions, index, GoDataStream); } GoFx(kStatus) GoProfileTool_SetStream(GoProfileTool tool, GoDataStream stream) { kObj(GoProfileTool, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); kCheck(GoSensor_SyncConfig(GoTool_Sensor(tool))); if (GoTools_IsToolInOptionsList(GoSensor_Tools(GoTool_Sensor(tool)), kObject_Type(tool))) { kCheck(GoOptionList_CheckDataStream(kArrayList_DataT(obj->streamOptions, GoDataStream), kArrayList_Count(obj->streamOptions), stream)); } obj->stream = stream; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoDataStream) GoProfileTool_Stream(GoProfileTool tool) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); return obj->stream; } GoFx(kSize) GoProfileTool_SourceOptionCount(GoProfileTool tool) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); return kArrayList_Count(obj->sourceOptions); } GoFx(GoDataSource) GoProfileTool_SourceOptionAt(GoProfileTool tool, kSize index) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); kAssert(index < kArrayList_Count(obj->sourceOptions)); return kArrayList_AsT(obj->sourceOptions, index, GoDataSource); } GoFx(kStatus) GoProfileTool_SetSource(GoProfileTool tool, GoDataSource source) { kObj(GoProfileTool, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); kCheck(GoSensor_SyncConfig(GoTool_Sensor(tool))); if (GoTools_IsToolInOptionsList(GoSensor_Tools(GoTool_Sensor(tool)), kObject_Type(tool))) { kCheck(GoOptionList_Check32u((k32u*)kArrayList_DataT(obj->sourceOptions, GoDataSource), kArrayList_Count(obj->sourceOptions), source)); } obj->source = source; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoDataSource) GoProfileTool_Source(GoProfileTool tool) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); return obj->source; } GoFx(kSize) GoProfileTool_XAnchorOptionCount(GoProfileTool tool) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); return kArrayList_Count(obj->xAnchorOptions); } GoFx(k32u) GoProfileTool_XAnchorOptionAt(GoProfileTool tool, kSize index) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); kAssert(index < kArrayList_Count(obj->xAnchorOptions)); return kArrayList_AsT(obj->xAnchorOptions, index, k32u); } GoFx(k32s) GoProfileTool_XAnchor(GoProfileTool tool) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); return obj->xAnchor; } GoFx(kStatus) GoProfileTool_SetXAnchor(GoProfileTool tool, k32s id) { kObj(GoProfileTool, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); kCheck(GoSensor_SyncConfig(GoTool_Sensor(tool))); if (id >= 0) { kCheck(GoOptionList_Check32u(kArrayList_DataT(obj->xAnchorOptions, k32u), kArrayList_Count(obj->xAnchorOptions), id)); } obj->xAnchor = id; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(kBool) GoProfileTool_XAnchorEnabled(GoProfileTool tool) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); if (obj->xAnchor >= 0) { return kTRUE; } return kFALSE; } GoFx(kSize) GoProfileTool_ZAnchorOptionCount(GoProfileTool tool) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); return kArrayList_Count(obj->zAnchorOptions); } GoFx(k32u) GoProfileTool_ZAnchorOptionAt(GoProfileTool tool, kSize index) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); kAssert(index < kArrayList_Count(obj->zAnchorOptions)); return kArrayList_AsT(obj->zAnchorOptions, index, k32u); } GoFx(kStatus) GoProfileTool_SetZAnchor(GoProfileTool tool, k32s id) { kObj(GoProfileTool, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); kCheck(GoSensor_SyncConfig(GoTool_Sensor(tool))); if (id >= 0) { kCheck(GoOptionList_Check32u(kArrayList_DataT(obj->zAnchorOptions, k32u), kArrayList_Count(obj->zAnchorOptions), id)); } obj->zAnchor = id; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(kBool) GoProfileTool_ZAnchorEnabled(GoProfileTool tool) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); if (obj->zAnchor >= 0) { return kTRUE; } return kFALSE; } GoFx(k32s) GoProfileTool_ZAnchor(GoProfileTool tool) { kObj(GoProfileTool, tool); GoSensor_SyncConfig(obj->base.sensor); return obj->zAnchor; } kBeginClassEx(Go, GoProfileArea) kAddVMethod(GoProfileArea, kObject, VRelease) kAddVMethod(GoProfileArea, GoTool, VInit) kAddVMethod(GoProfileArea, GoTool, VRead) kAddVMethod(GoProfileArea, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfileArea_Construct(GoProfileArea* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfileArea), sensor, allocator); } GoFx(kStatus) GoProfileArea_VInit(GoProfileArea tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfileArea, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_AREA, sensor, alloc)); obj->type = GO_PROFILE_AREA_TYPE_OBJECT; obj->typeUsed = kFALSE; obj->baseline = GO_PROFILE_BASELINE_TYPE_X_AXIS; obj->baselineUsed = kFALSE; obj->region = kNULL; obj->regionEnabled = kFALSE; obj->line = kNULL; kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileAreaArea), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileAreaCentroidX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileAreaCentroidZ), kTRUE, kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileAreaCenterPoint), kNULL)); obj->type = GO_PROFILE_AREA_TYPE_OBJECT; obj->baseline = GO_PROFILE_BASELINE_TYPE_X_AXIS; kCheck(GoProfileLineFittingRegion_Construct(&obj->line, sensor, alloc)); kCheck(GoProfileRegion_Construct(&obj->region, sensor, alloc)); return kOK; } GoFx(kStatus) GoProfileArea_VRelease(GoProfileArea tool) { kObj(GoProfileArea, tool); kCheck(kDestroyRef(&obj->line)); kCheck(kDestroyRef(&obj->region)); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfileArea_VRead(GoProfileArea tool, kXml xml, kXmlItem item) { kObj(GoProfileArea, tool); kXmlItem lineItem, regionItem; kXmlItem tempItem = kNULL; kCheck(GoProfileTool_Read(tool, xml, item)); tempItem = kXml_Child(xml, item, "Type"); if (!kIsNull(tempItem)) { kCheck(kXml_Item32s(xml, tempItem, &obj->type)); kCheck(kXml_AttrBool(xml, tempItem, "used", &obj->typeUsed)); } tempItem = kXml_Child(xml, item, "Baseline"); if (!kIsNull(tempItem)) { kCheck(kXml_Item32s(xml, tempItem, &obj->baseline)); kCheck(kXml_AttrBool(xml, tempItem, "used", &obj->baselineUsed)); } kCheck(!kIsNull(lineItem = kXml_Child(xml, item, "Line"))); kCheck(GoProfileLineFittingRegion_Read(obj->line, xml, lineItem)); if (kXml_ChildExists(xml, item, "RegionEnabled")) { kCheck(kXml_ChildBool(xml, item, "RegionEnabled", &obj->regionEnabled)); } kCheck(!kIsNull(regionItem = kXml_Child(xml, item, "Region"))); kCheck(GoProfileRegion_Read(obj->region, xml, regionItem)); return kOK; } GoFx(kStatus) GoProfileArea_VWrite(GoProfileArea tool, kXml xml, kXmlItem item) { kObj(GoProfileArea, tool); kXmlItem lineItem, regionItem; kCheck(kXml_SetChild32s(xml, item, "Type", obj->type)); kCheck(kXml_SetChild32s(xml, item, "Baseline", obj->baseline)); kCheck(kXml_AddItem(xml, item, "Line", &lineItem)); kCheck(GoProfileLineFittingRegion_Write(obj->line, xml, lineItem)); kCheck(kXml_SetChildBool(xml, item, "RegionEnabled", obj->regionEnabled)); kCheck(kXml_AddItem(xml, item, "Region", ®ionItem)); kCheck(GoProfileRegion_Write(obj->region, xml, regionItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(GoProfileBaseline) GoProfileArea_Baseline(GoProfileArea tool) { kObj(GoProfileArea, tool); return obj->baseline; } GoFx(kStatus) GoProfileArea_SetBaseline(GoProfileArea tool, GoProfileBaseline type) { kObj(GoProfileArea, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->baseline = type; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(kBool) GoProfileArea_BaselineUsed(GoProfileArea tool) { kObj(GoProfileArea, tool); return obj->baselineUsed; } GoFx(GoProfileLineFittingRegion) GoProfileArea_LineRegion(GoProfileArea tool) { kObj(GoProfileArea, tool); return obj->line; } GoFx(GoProfileAreaType) GoProfileArea_Type(GoProfileArea tool) { kObj(GoProfileArea, tool); return obj->type; } GoFx(kStatus) GoProfileArea_SetType(GoProfileArea tool, GoProfileAreaType type) { kObj(GoProfileArea, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->type = type; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(kBool) GoProfileArea_TypeUsed(GoProfileArea tool) { kObj(GoProfileArea, tool); return obj->typeUsed; } GoFx(GoProfileRegion) GoProfileArea_Region(GoProfileArea tool) { kObj(GoProfileArea, tool); return obj->region; } GoFx(kBool) GoProfileArea_RegionEnabled(GoProfileArea tool) { kObj(GoProfileArea, tool); return obj->regionEnabled; } GoFx(kStatus) GoProfileArea_EnableRegion(GoProfileArea tool, kBool enable) { kObj(GoProfileArea, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->regionEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileAreaArea) GoProfileArea_AreaMeasurement(GoProfileArea tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_AREA_AREA); } GoFx(GoProfileAreaCentroidX) GoProfileArea_CentroidXMeasurement(GoProfileArea tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_AREA_CENTROID_X); } GoFx(GoProfileAreaCentroidX) GoProfileArea_CentroidZMeasurement(GoProfileArea tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_AREA_CENTROID_Z); } GoFx(GoProfileAreaCenterPoint) GoProfileArea_CenterPoint(GoProfileArea tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_AREA_CENTER_POINT); } kBeginClassEx(Go, GoProfileBox) kAddVMethod(GoProfileBox, kObject, VRelease) kAddVMethod(GoProfileBox, GoTool, VInit) kAddVMethod(GoProfileBox, GoTool, VRead) kAddVMethod(GoProfileBox, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfileBox_Construct(GoProfileBox* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfileBox), sensor, allocator); } GoFx(kStatus) GoProfileBox_VInit(GoProfileBox tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfileBox, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_BOUNDING_BOX, sensor, alloc)); obj->regionEnabled = kFALSE; obj->region = kNULL; kCheck(GoProfileRegion_Construct(&obj->region, sensor, alloc)); obj->regionEnabled = kTRUE; kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBoxX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBoxZ), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBoxWidth), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBoxHeight), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBoxGlobalX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBoxGlobalY), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBoxGlobalAngle), kTRUE, kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileBoundingBoxCenterPoint), kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileBoundingBoxCornerPoint), kNULL)); return kOK; } GoFx(kStatus) GoProfileBox_VRelease(GoProfileBox tool) { kObj(GoProfileBox, tool); kDestroyRef(&obj->region); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfileBox_VRead(GoProfileBox tool, kXml xml, kXmlItem item) { kObj(GoProfileBox, tool); kXmlItem regionItem = kNULL; kCheck(kXml_ChildBool(xml, item, "RegionEnabled", &obj->regionEnabled)); kCheck(!kIsNull(regionItem = kXml_Child(xml, item, "Region"))); kCheck(GoProfileRegion_Read(obj->region, xml, regionItem)); kCheck(GoProfileTool_Read(tool, xml, item)); return kOK; } GoFx(kStatus) GoProfileBox_VWrite(GoProfileBox tool, kXml xml, kXmlItem item) { kObj(GoProfileBox, tool); kXmlItem regionItem = kNULL; kCheck(kXml_SetChildBool(xml, item, "RegionEnabled", obj->regionEnabled)); kCheck(kXml_AddItem(xml, item, "Region", ®ionItem)); kCheck(GoProfileRegion_Write(obj->region, xml, regionItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(kBool) GoProfileBox_RegionEnabled(GoProfileBox tool) { kObj(GoProfileBox, tool); return obj->regionEnabled; } GoFx(kStatus) GoProfileBox_EnableRegion(GoProfileBox tool, kBool enable) { kObj(GoProfileBox, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->regionEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileRegion) GoProfileBox_Region(GoProfileBox tool) { kObj(GoProfileBox, tool); return obj->region; } GoFx(GoProfileBoxX) GoProfileBox_XMeasurement(GoProfileBox tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BOUNDING_BOX_X); } GoFx(GoProfileBoxZ) GoProfileBox_ZMeasurement(GoProfileBox tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BOUNDING_BOX_Z); } GoFx(GoProfileBoxWidth) GoProfileBox_WidthMeasurement(GoProfileBox tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BOUNDING_BOX_WIDTH); } GoFx(GoProfileBoxHeight) GoProfileBox_HeightMeasurement(GoProfileBox tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BOUNDING_BOX_HEIGHT); } GoFx(GoProfileBoxGlobalX) GoProfileBox_GlobalXMeasurement(GoProfileBox tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BOUNDING_BOX_GLOBAL_X); } GoFx(GoProfileBoxGlobalY) GoProfileBox_GlobalYMeasurement(GoProfileBox tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BOUNDING_BOX_GLOBAL_Y); } GoFx(GoProfileBoxGlobalAngle) GoProfileBox_GlobalAngleMeasurement(GoProfileBox tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BOUNDING_BOX_GLOBAL_ANGLE); } GoFx(GoProfileBoundingBoxCornerPoint) GoProfileBox_CornerPoint(GoProfileBox tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_BOUNDING_BOX_CORNER_POINT); } GoFx(GoProfileBoundingBoxCenterPoint) GoProfileBox_CenterPoint(GoProfilePosition tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_BOUNDING_BOX_CENTER_POINT); } kBeginClassEx(Go, GoProfileBridgeValue) kAddVMethod(GoProfileBridgeValue, kObject, VRelease) kAddVMethod(GoProfileBridgeValue, GoTool, VInit) kAddVMethod(GoProfileBridgeValue, GoTool, VRead) kAddVMethod(GoProfileBridgeValue, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfileBridgeValue_Construct(GoProfileBridgeValue* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfileBridgeValue), sensor, allocator); } GoFx(kStatus) GoProfileBridgeValue_VInit(GoProfileBridgeValue tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfileBridgeValue, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_BRIDGE_VALUE, sensor, alloc)); obj->regionEnabled = kFALSE; obj->region = kNULL; obj->normalizeEnabled = kFALSE; obj->windowSize = 0.0; obj->windowSkip = 0.0; obj->maxInvalid = 0.0; kZero(obj->maxDifferential); kCheck(GoProfileRegion_Construct(&obj->region, sensor, alloc)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBridgeValueBridgeValue), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBridgeValueAngle), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBridgeValueWindow), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileBridgeValueStdDev), kTRUE, kNULL)); return kOK; } GoFx(kStatus) GoProfileBridgeValue_VRelease(GoProfileBridgeValue tool) { kObj(GoProfileBridgeValue, tool); kCheck(kDestroyRef(&obj->region)); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfileBridgeValue_VRead(GoProfileBridgeValue tool, kXml xml, kXmlItem item) { kObj(GoProfileBridgeValue, tool); kXmlItem regionItem = kNULL; kXmlItem diffItem = kNULL; kCheck(kXml_Child64f(xml, item, "WindowSize", &obj->windowSize)); kCheck(kXml_Child64f(xml, item, "WindowSkip", &obj->windowSkip)); kCheck(kXml_Child64f(xml, item, "MaxInvalid", &obj->maxInvalid)); kCheck(kXml_ChildBool(xml, item, "NormalizeEnabled", &obj->normalizeEnabled)); kCheck(kXml_ChildBool(xml, item, "RegionEnabled", &obj->regionEnabled)); kCheck(GoConfig_ReadRangeElement64f(xml, item, "MaxDifferential", &obj->maxDifferential)); kCheck(!kIsNull(regionItem = kXml_Child(xml, item, "Region"))); kCheck(GoProfileRegion_Read(obj->region, xml, regionItem)); kCheck(GoProfileTool_Read(tool, xml, item)); return kOK; } GoFx(kStatus) GoProfileBridgeValue_VWrite(GoProfileBridgeValue tool, kXml xml, kXmlItem item) { kObj(GoProfileBridgeValue, tool); kXmlItem regionItem = kNULL; kCheck(kXml_SetChild64f(xml, item, "WindowSize", obj->windowSize)); kCheck(kXml_SetChild64f(xml, item, "WindowSkip", obj->windowSkip)); kCheck(kXml_SetChild64f(xml, item, "MaxInvalid", obj->maxInvalid)); kCheck(GoConfig_WriteRangeElement64f(xml, item, "MaxDifferential", obj->maxDifferential)); kCheck(kXml_SetChildBool(xml, item, "NormalizeEnabled", obj->normalizeEnabled)); kCheck(kXml_SetChildBool(xml, item, "RegionEnabled", obj->regionEnabled)); kCheck(kXml_AddItem(xml, item, "Region", ®ionItem)); kCheck(GoProfileRegion_Write(obj->region, xml, regionItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(kBool) GoProfileBridgeValue_RegionEnabled(GoProfileBridgeValue tool) { kObj(GoProfileBridgeValue, tool); return obj->regionEnabled; } GoFx(kStatus) GoProfileBridgeValue_EnableRegion(GoProfileBridgeValue tool, kBool enable) { kObj(GoProfileBridgeValue, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->regionEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileRegion) GoProfileBridgeValue_Region(GoProfileBridgeValue tool) { kObj(GoProfileBridgeValue, tool); return obj->region; } GoFx(kBool) GoProfileBridgeValue_NormalizeEnabled(GoProfileBridgeValue tool) { kObj(GoProfileBridgeValue, tool); return obj->normalizeEnabled; } GoFx(kStatus) GoProfileBridgeValue_EnableNormalize(GoProfileBridgeValue tool, kBool enable) { kObj(GoProfileBridgeValue, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->normalizeEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(kStatus) GoProfileBridgeValue_SetWindowSize(GoProfileBridgeValue tool, k64f value) { kObj(GoProfileBridgeValue, tool); obj->windowSize = value; return kOK; } GoFx(k64f) GoProfileBridgeValue_WindowSize(GoProfileBridgeValue tool) { kObj(GoProfileBridgeValue, tool); return obj->windowSize; } GoFx(kStatus) GoProfileBridgeValue_SetWindowSkip(GoProfileBridgeValue tool, k64f value) { kObj(GoProfileBridgeValue, tool); obj->windowSkip = value; return kOK; } GoFx(k64f) GoProfileBridgeValue_WindowSkip(GoProfileBridgeValue tool) { kObj(GoProfileBridgeValue, tool); return obj->windowSkip; } GoFx(kStatus) GoProfileBridgeValue_SetMaxInvalid(GoProfileBridgeValue tool, k64f value) { kObj(GoProfileBridgeValue, tool); obj->maxInvalid = value; return kOK; } GoFx(k64f) GoProfileBridgeValue_MaxInvalid(GoProfileBridgeValue tool) { kObj(GoProfileBridgeValue, tool); return obj->maxInvalid; } GoFx(kStatus) GoProfileBridgeValue_SetMaxDifferential(GoProfileBridgeValue tool, k64f value) { kObj(GoProfileBridgeValue, tool); kCheckArgs(value >= obj->maxDifferential.min && value <= obj->maxDifferential.max); obj->maxDifferential.value = value; return kOK; } GoFx(k64f) GoProfileBridgeValue_MaxDifferential(GoProfileBridgeValue tool) { kObj(GoProfileBridgeValue, tool); return obj->maxDifferential.value; } GoFx(k64f) GoProfileBridgeValue_MaxDifferentialLimitMax(GoProfileBridgeValue tool) { kObj(GoProfileBridgeValue, tool); return obj->maxDifferential.max; } GoFx(k64f) GoProfileBridgeValue_MaxDifferentialLimitMin(GoProfileBridgeValue tool) { kObj(GoProfileBridgeValue, tool); return obj->maxDifferential.min; } GoFx(GoProfileBridgeValueBridgeValue) GoProfileBridgeValue_BridgeValueMeasurement(GoProfileBridgeValue tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BRIDGE_VALUE_BRIDGE_VALUE); } GoFx(GoProfileBridgeValueAngle) GoProfileBridgeValue_AngleMeasurement(GoProfileBridgeValue tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BRIDGE_VALUE_ANGLE); } GoFx(GoProfileBridgeValueWindow) GoProfileBridgeValue_WindowMeasurement(GoProfileBridgeValue tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BRIDGE_VALUE_WINDOW); } GoFx(GoProfileBridgeValueStdDev) GoProfileBridgeValue_StdDevMeasurement(GoProfileBridgeValue tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_BRIDGE_VALUE_STDDEV); } kBeginClassEx(Go, GoProfileCircle) kAddVMethod(GoProfileCircle, kObject, VRelease) kAddVMethod(GoProfileCircle, GoTool, VInit) kAddVMethod(GoProfileCircle, GoTool, VRead) kAddVMethod(GoProfileCircle, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfileCircle_Construct(GoProfileCircle* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfileCircle), sensor, allocator); } GoFx(kStatus) GoProfileCircle_VInit(GoProfileCircle tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfileCircle, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_CIRCLE, sensor, alloc)); obj->regionEnabled = kFALSE; obj->region = kNULL; kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileCircleX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileCircleZ), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileCircleRadius), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileCircleStdDev), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileCircleMinError), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileCircleMinErrorX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileCircleMinErrorZ), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileCircleMaxError), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileCircleMaxErrorX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileCircleMaxErrorZ), kTRUE, kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileCircleCenterPoint), kNULL)); kCheck(GoProfileRegion_Construct(&obj->region, sensor, alloc)); return kOK; } GoFx(kStatus) GoProfileCircle_VRelease(GoProfileCircle tool) { kObj(GoProfileCircle, tool); kCheck(kDestroyRef(&obj->region)); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfileCircle_VRead(GoProfileCircle tool, kXml xml, kXmlItem item) { kObj(GoProfileCircle, tool); kXmlItem regionItem; kCheck(GoProfileTool_Read(tool, xml, item)); if (kXml_ChildExists(xml, item, "RegionEnabled")) { kCheck(kXml_ChildBool(xml, item, "RegionEnabled", &obj->regionEnabled)); } kCheck(!kIsNull(regionItem = kXml_Child(xml, item, "Region"))); kCheck(GoProfileRegion_Read(obj->region, xml, regionItem)); return kOK; } GoFx(kStatus) GoProfileCircle_VWrite(GoProfileCircle tool, kXml xml, kXmlItem item) { kObj(GoProfileCircle, tool); kXmlItem regionItem; kCheck(kXml_SetChildBool(xml, item, "RegionEnabled", obj->regionEnabled)); kCheck(kXml_AddItem(xml, item, "Region", ®ionItem)); kCheck(GoProfileRegion_Write(obj->region, xml, regionItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(GoProfileRegion) GoProfileCircle_Region(GoProfileCircle tool) { kObj(GoProfileCircle, tool); return obj->region; } GoFx(kBool) GoProfileCircle_RegionEnabled(GoProfileCircle tool) { kObj(GoProfileCircle, tool); return obj->regionEnabled; } GoFx(kStatus) GoProfileCircle_EnableRegion(GoProfileCircle tool, kBool enable) { kObj(GoProfileCircle, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->regionEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileCircleX) GoProfileCircle_XMeasurement(GoProfileCircle tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_CIRCLE_X); } GoFx(GoProfileCircleZ) GoProfileCircle_ZMeasurement(GoProfileCircle tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_CIRCLE_Z); } GoFx(GoProfileCircleRadius) GoProfileCircle_RadiusMeasurement(GoProfileCircle tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_CIRCLE_RADIUS); } GoFx(GoProfileCircleStdDev) GoProfileCircle_StdDevMeasurement(GoProfileCircle tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_CIRCLE_STDDEV); } GoFx(GoProfileCircleMinError) GoProfileCircle_MinErrorMeasurement(GoProfileCircle tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_CIRCLE_MIN_ERROR); } GoFx(GoProfileCircleMinErrorX) GoProfileCircle_MinErrorXMeasurement(GoProfileCircle tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_CIRCLE_MIN_ERROR_X); } GoFx(GoProfileCircleMinErrorZ) GoProfileCircle_MinErrorZMeasurement(GoProfileCircle tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_CIRCLE_MIN_ERROR_Z); } GoFx(GoProfileCircleMaxError) GoProfileCircle_MaxErrorMeasurement(GoProfileCircle tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_CIRCLE_MAX_ERROR); } GoFx(GoProfileCircleMaxErrorX) GoProfileCircle_MaxErrorXMeasurement(GoProfileCircle tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_CIRCLE_MAX_ERROR_X); } GoFx(GoProfileCircleMaxErrorZ) GoProfileCircle_MaxErrorZMeasurement(GoProfileCircle tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_CIRCLE_MAX_ERROR_Z); } GoFx(GoProfileCircleCenterPoint) GoProfileCircle_CenterPoint(GoProfileCircle tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_CIRCLE_CENTER_POINT); } kBeginClassEx(Go, GoProfileDim) kAddVMethod(GoProfileDim, kObject, VRelease) kAddVMethod(GoProfileDim, GoTool, VInit) kAddVMethod(GoProfileDim, GoTool, VRead) kAddVMethod(GoProfileDim, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfileDim_Construct(GoProfileDim* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfileDim), sensor, allocator); } GoFx(kStatus) GoProfileDim_VInit(GoProfileDim tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfileDim, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_DIMENSION, sensor, alloc)); obj->refFeature = kNULL; obj->feature = kNULL; kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileDimWidth), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileDimHeight), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileDimDistance), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileDimCenterX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileDimCenterZ), kTRUE, kNULL)); kCheck(GoProfileFeature_Construct(&obj->refFeature, sensor, alloc)); kCheck(GoProfileFeature_Construct(&obj->feature, sensor, alloc)); return kOK; } GoFx(kStatus) GoProfileDim_VRelease(GoProfileDim tool) { kObj(GoProfileDim, tool); kCheck(kDestroyRef(&obj->refFeature)); kCheck(kDestroyRef(&obj->feature)); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfileDim_VRead(GoProfileDim tool, kXml xml, kXmlItem item) { kObj(GoProfileDim, tool); kXmlItem refFeatureItem; kXmlItem featureItem; kCheck(GoProfileTool_Read(tool, xml, item)); kCheck(!kIsNull(refFeatureItem = kXml_Child(xml, item, "RefFeature"))); kCheck(GoProfileFeature_Read(obj->refFeature, xml, refFeatureItem)); kCheck(!kIsNull(featureItem = kXml_Child(xml, item, "Feature"))); kCheck(GoProfileFeature_Read(obj->feature, xml, featureItem)); return kOK; } GoFx(kStatus) GoProfileDim_VWrite(GoProfileDim tool, kXml xml, kXmlItem item) { kObj(GoProfileDim, tool); kXmlItem refFeatureItem; kXmlItem featureItem; kCheck(kXml_AddItem(xml, item, "RefFeature", &refFeatureItem)); kCheck(GoProfileFeature_Write(obj->refFeature, xml, refFeatureItem)); kCheck(kXml_AddItem(xml, item, "Feature", &featureItem)); kCheck(GoProfileFeature_Write(obj->feature, xml, featureItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(GoProfileFeature) GoProfileDim_RefFeature(GoProfileDim tool) { kObj(GoProfileDim, tool); return obj->refFeature; } GoFx(GoProfileFeature) GoProfileDim_Feature(GoProfileDim tool) { kObj(GoProfileDim, tool); return obj->feature; } GoFx(GoMeasurement) GoProfileDim_WidthMeasurement(GoProfileDim tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_DIMENSION_WIDTH); } GoFx(GoMeasurement) GoProfileDim_HeightMeasurement(GoProfileDim tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_DIMENSION_HEIGHT); } GoFx(GoMeasurement) GoProfileDim_DistanceMeasurement(GoProfileDim tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_DIMENSION_DISTANCE); } GoFx(GoMeasurement) GoProfileDim_CenterXMeasurement(GoProfileDim tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_DIMENSION_CENTER_X); } GoFx(GoMeasurement) GoProfileDim_CenterZMeasurement(GoProfileDim tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_DIMENSION_CENTER_Z); } GoFx(GoProfileDimensionCenterPoint) GoProfileDim_CenterPoint(GoProfileDim tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_DIMENSION_CENTER_POINT); } kBeginClassEx(Go, GoProfileGroove) kAddVMethod(GoProfileGroove, kObject, VRelease) kAddVMethod(GoProfileGroove, GoTool, VInit) kAddVMethod(GoProfileGroove, GoTool, VRead) kAddVMethod(GoProfileGroove, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfileGroove_Construct(GoProfileGroove* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfileGroove), sensor, allocator); } GoFx(kStatus) GoProfileGroove_VInit(GoProfileGroove tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfileGroove, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_GROOVE, sensor, alloc)); obj->regionEnabled = kFALSE; obj->region = kNULL; obj->shape = GO_PROFILE_GROOVE_SHAPE_U; obj->minWidth = 0; obj->maxWidth = 0; obj->minDepth = 0; kCheck(GoProfileRegion_Construct(&obj->region, sensor, alloc)); return kOK; } GoFx(kStatus) GoProfileGroove_VRelease(GoProfileGroove tool) { kObjR(GoProfileGroove, tool); kCheck(kDestroyRef(&obj->region)); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfileGroove_VRead(GoProfileGroove tool, kXml xml, kXmlItem item) { kObj(GoProfileGroove, tool); kXmlItem regionItem; kCheck(GoProfileTool_Read(tool, xml, item)); if (kXml_ChildExists(xml, item, "RegionEnabled")) { kCheck(kXml_ChildBool(xml, item, "RegionEnabled", &obj->regionEnabled)); } kCheck(!kIsNull(regionItem = kXml_Child(xml, item, "Region"))); kCheck(GoProfileRegion_Read(obj->region, xml, regionItem)); kCheck(kXml_Child32s(xml, item, "Shape", &obj->shape)); kCheck(kXml_Child64f(xml, item, "MinWidth", &obj->minWidth)); kCheck(kXml_Child64f(xml, item, "MaxWidth", &obj->maxWidth)); kCheck(kXml_Child64f(xml, item, "MinDepth", &obj->minDepth)); return kOK; } GoFx(kStatus) GoProfileGroove_VWrite(GoProfileGroove tool, kXml xml, kXmlItem item) { kObj(GoProfileGroove, tool); kXmlItem regionItem; kCheck(GoProfileTool_Write(tool, xml, item)); kCheck(kXml_SetChildBool(xml, item, "RegionEnabled", obj->regionEnabled)); kCheck(kXml_AddItem(xml, item, "Region", ®ionItem)); kCheck(GoProfileRegion_Write(obj->region, xml, regionItem)); kCheck(kXml_SetChild32s(xml, item, "Shape", obj->shape)); kCheck(kXml_SetChild64f(xml, item, "MinWidth", obj->minWidth)); kCheck(kXml_SetChild64f(xml, item, "MaxWidth", obj->maxWidth)); kCheck(kXml_SetChild64f(xml, item, "MinDepth", obj->minDepth)); return kOK; } GoFx(GoProfileGrooveShape) GoProfileGroove_Shape(GoProfileGroove tool) { kObj(GoProfileGroove, tool); return obj->shape; } GoFx(kStatus) GoProfileGroove_SetShape(GoProfileGroove tool, GoProfileGrooveShape shape) { kObj(GoProfileGroove, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->shape = shape; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(k64f) GoProfileGroove_MinDepth(GoProfileGroove tool) { kObjR(GoProfileGroove, tool); return obj->maxWidth; } GoFx(kStatus) GoProfileGroove_SetMinDepth(GoProfileGroove tool, k64f width) { kObj(GoProfileGroove, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->maxWidth = width; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(k64f) GoProfileGroove_MaxWidth(GoProfileGroove tool) { kObjR(GoProfileGroove, tool); return obj->maxWidth; } GoFx(kStatus) GoProfileGroove_SetMaxWidth(GoProfileGroove tool, k64f width) { kObj(GoProfileGroove, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->maxWidth = width; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(k64f) GoProfileGroove_MinWidth(GoProfileGroove tool) { kObjR(GoProfileGroove, tool); return obj->minWidth; } GoFx(kStatus) GoProfileGroove_SetMinWidth(GoProfileGroove tool, k64f width) { kObj(GoProfileGroove, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->minWidth = width; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileRegion) GoProfileGroove_Region(GoProfileGroove tool) { kObjR(GoProfileGroove, tool); return obj->region; } GoFx(kBool) GoProfileGroove_RegionEnabled(GoProfileGroove tool) { kObj(GoProfileGroove, tool); return obj->regionEnabled; } GoFx(kStatus) GoProfileGroove_EnableRegion(GoProfileGroove tool, kBool enable) { kObj(GoProfileGroove, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->regionEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(kStatus) GoProfileGroove_AddMeasurement(GoProfileGroove tool, GoMeasurementType type, GoMeasurement* measurement) { kObj(GoProfileGroove, tool); kType classType = kNULL; kStatus status = kOK; if (type != GO_MEASUREMENT_PROFILE_GROOVE_X && type != GO_MEASUREMENT_PROFILE_GROOVE_Z && type != GO_MEASUREMENT_PROFILE_GROOVE_WIDTH && type != GO_MEASUREMENT_PROFILE_GROOVE_DEPTH) { return kERROR_PARAMETER; } else { switch(type) { case GO_MEASUREMENT_PROFILE_GROOVE_X: classType = kTypeOf(GoProfileGrooveX); break; case GO_MEASUREMENT_PROFILE_GROOVE_Z: classType = kTypeOf(GoProfileGrooveZ); break; case GO_MEASUREMENT_PROFILE_GROOVE_WIDTH: classType = kTypeOf(GoProfileGrooveWidth); break; case GO_MEASUREMENT_PROFILE_GROOVE_DEPTH: classType = kTypeOf(GoProfileGrooveDepth); break; } } kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); kCheck(GoTool_AddMeasurement(tool, classType, kTRUE, measurement)); kTry { kTest(GoSensor_SetConfigModified(GoTool_Sensor(tool))); kTest(GoSensor_SyncConfig(GoTool_Sensor(tool))); } kCatch(&status) { GoTool_RemoveMeasurement(tool, GoTool_MeasurementCount(tool) - 1); kEndCatch(status); } return kOK; } GoFx(kStatus) GoProfileGroove_RemoveMeasurement(GoProfileGroove tool, kSize index) { if (index > GoTool_MeasurementCount(tool)) { return kERROR_PARAMETER; } kCheck(GoTool_RemoveMeasurement(tool, index)); return kOK; } GoFx(kSize) GoProfileGroove_MeasurementCount(GoProfileGroove tool) { return GoTool_MeasurementCount(tool); } GoFx(GoMeasurement) GoProfileGroove_MeasurementAt(GoProfileGroove tool, kSize index) { kAssert(index < GoTool_MeasurementCount(tool)); return GoTool_MeasurementAt(tool, index); } kBeginClassEx(Go, GoProfileIntersect) kAddVMethod(GoProfileIntersect, kObject, VRelease) kAddVMethod(GoProfileIntersect, GoTool, VInit) kAddVMethod(GoProfileIntersect, GoTool, VRead) kAddVMethod(GoProfileIntersect, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfileIntersect_Construct(GoProfileIntersect* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfileIntersect), sensor, allocator); } GoFx(kStatus) GoProfileIntersect_VInit(GoProfileIntersect tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfileIntersect, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_INTERSECT, sensor, alloc)); obj->refLineType = GO_PROFILE_BASELINE_TYPE_X_AXIS; obj->refLineRegion = kNULL; obj->lineRegion = kNULL; kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileIntersectX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileIntersectZ), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileIntersectAngle), kTRUE, kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileIntersectIntersectPoint), kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileIntersectLine), kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileIntersectBaseLine), kNULL)); obj->refLineType = GO_PROFILE_BASELINE_TYPE_LINE; kCheck(GoProfileLineFittingRegion_Construct(&obj->refLineRegion, sensor, alloc)); kCheck(GoProfileLineFittingRegion_Construct(&obj->lineRegion, sensor, alloc)); return kOK; } GoFx(kStatus) GoProfileIntersect_VRelease(GoProfileIntersect tool) { kObj(GoProfileIntersect, tool); kCheck(kDestroyRef(&obj->refLineRegion)); kCheck(kDestroyRef(&obj->lineRegion)); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfileIntersect_VRead(GoProfileIntersect tool, kXml xml, kXmlItem item) { kObj(GoProfileIntersect, tool); kXmlItem lineItem; kCheck(GoProfileTool_Read(tool, xml, item)); kCheck(kXml_Child32s(xml, item, "RefType", &obj->refLineType)); kCheck(!kIsNull(lineItem = kXml_Child(xml, item, "RefLine"))); kCheck(GoProfileLineFittingRegion_Read(obj->refLineRegion, xml, lineItem)); kCheck(!kIsNull(lineItem = kXml_Child(xml, item, "Line"))); kCheck(GoProfileLineFittingRegion_Read(obj->lineRegion, xml, lineItem)); return kOK; } GoFx(kStatus) GoProfileIntersect_VWrite(GoProfileIntersect tool, kXml xml, kXmlItem item) { kObj(GoProfileIntersect, tool); kXmlItem lineItem; kCheck(kXml_SetChild32s(xml, item, "RefType", obj->refLineType)); kCheck(kXml_AddItem(xml, item, "RefLine", &lineItem)); kCheck(GoProfileLineFittingRegion_Write(obj->refLineRegion, xml, lineItem)); kCheck(kXml_AddItem(xml, item, "Line", &lineItem)); kCheck(GoProfileLineFittingRegion_Write(obj->lineRegion, xml, lineItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(GoProfileBaseline) GoProfileIntersect_RefLineType(GoProfileIntersect tool) { kObj(GoProfileIntersect, tool); return obj->refLineType; } GoFx(kStatus) GoProfileIntersect_SetRefLineType(GoProfileIntersect tool, GoProfileBaseline type) { kObj(GoProfileIntersect, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->refLineType = type; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileLineFittingRegion) GoProfileIntersect_RefLine(GoProfileIntersect tool) { kObj(GoProfileIntersect, tool); return obj->refLineRegion; } GoFx(GoProfileLineFittingRegion) GoProfileIntersect_Line(GoProfileIntersect tool) { kObj(GoProfileIntersect, tool); return obj->lineRegion; } GoFx(GoProfileIntersectX) GoProfileIntersect_XMeasurement(GoProfileIntersect tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_INTERSECT_X); } GoFx(GoProfileIntersectZ) GoProfileIntersect_ZMeasurement(GoProfileIntersect tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_INTERSECT_Z); } GoFx(GoProfileIntersectAngle) GoProfileIntersect_AngleMeasurement(GoProfileIntersect tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_INTERSECT_ANGLE); } GoFx(GoProfileIntersectIntersectPoint) GoProfileIntersect_PointFeature(GoProfileIntersect tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_INTERSECT_INTERSECT_POINT); } GoFx(GoProfileIntersectLine) GoProfileIntersect_LineFeature(GoProfileIntersect tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_INTERSECT_LINE); } GoFx(GoProfileIntersectBaseLine) GoProfileIntersect_BaseLineFeature(GoProfileIntersect tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_INTERSECT_BASE_LINE); } kBeginClassEx(Go, GoProfileLine) kAddVMethod(GoProfileLine, kObject, VRelease) kAddVMethod(GoProfileLine, GoTool, VInit) kAddVMethod(GoProfileLine, GoTool, VRead) kAddVMethod(GoProfileLine, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfileLine_Construct(GoProfileLine* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfileLine), sensor, allocator); } GoFx(kStatus) GoProfileLine_VInit(GoProfileLine tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfileLine, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_LINE, sensor, alloc)); obj->regionEnabled = kFALSE; obj->region = kNULL; obj->fittingRegionsEnabled = kFALSE; obj->fittingRegions = kNULL; kCheck(GoProfileRegion_Construct(&obj->region, sensor, alloc)); obj->regionEnabled = kTRUE; kCheck(GoProfileLineFittingRegion_Construct(&obj->fittingRegions, sensor, alloc)); obj->fittingRegionsEnabled = kFALSE; kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileLineStdDev), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileLineMaxError), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileLineMinError), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileLinePercentile), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileLineOffset), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileLineAngle), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileLineMinErrorX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileLineMinErrorZ), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileLineMaxErrorX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileLineMaxErrorZ), kTRUE, kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileLineLine), kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileLineMinErrorPoint), kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileLineMaxErrorPoint), kNULL)); return kOK; } GoFx(kStatus) GoProfileLine_VRelease(GoProfileLine tool) { kObj(GoProfileLine, tool); kCheck(kDestroyRef(&obj->region)); kCheck(kDestroyRef(&obj->fittingRegions)); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfileLine_VRead(GoProfileLine tool, kXml xml, kXmlItem item) { kObj(GoProfileLine, tool); kXmlItem regionItem; if (kXml_ChildExists(xml, item, "RegionEnabled")) { kCheck(kXml_ChildBool(xml, item, "RegionEnabled", &obj->regionEnabled)); } kCheck(!kIsNull(regionItem = kXml_Child(xml, item, "Region"))); kCheck(GoProfileRegion_Read(obj->region, xml, regionItem)); if (kXml_ChildExists(xml, item, "FittingRegionsEnabled")) { kCheck(kXml_ChildBool(xml, item, "FittingRegionsEnabled", &obj->fittingRegionsEnabled)); } if (!kIsNull(regionItem = kXml_Child(xml, item, "FittingRegions"))) { kCheck(GoProfileLineFittingRegion_Read(obj->fittingRegions, xml, regionItem)); } kCheck(GoProfileTool_Read(tool, xml, item)); return kOK; } GoFx(kStatus) GoProfileLine_VWrite(GoProfileLine tool, kXml xml, kXmlItem item) { kObj(GoProfileLine, tool); kXmlItem regionItem; kCheck(kXml_SetChildBool(xml, item, "RegionEnabled", obj->regionEnabled)); kCheck(kXml_AddItem(xml, item, "Region", ®ionItem)); kCheck(GoProfileRegion_Write(obj->region, xml, regionItem)); kCheck(kXml_SetChildBool(xml, item, "FittingRegionsEnabled", obj->fittingRegionsEnabled)); kCheck(kXml_AddItem(xml, item, "FittingRegions", ®ionItem)); kCheck(GoProfileLineFittingRegion_Write(obj->fittingRegions, xml, regionItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(GoProfileRegion) GoProfileLine_Region(GoProfileLine tool) { kObj(GoProfileLine, tool); return obj->region; } GoFx(kBool) GoProfileLine_RegionEnabled(GoProfileLine tool) { kObj(GoProfileLine, tool); return obj->regionEnabled; } GoFx(kStatus) GoProfileLine_EnableRegion(GoProfileLine tool, kBool enable) { kObj(GoProfileLine, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->regionEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(kBool) GoProfileLine_FittingRegionsEnabled(GoProfileLine tool) { kObj(GoProfileLine, tool); return obj->fittingRegionsEnabled; } GoFx(kStatus) GoProfileLine_EnableFittingRegions(GoProfileLine tool, kBool enable) { kObj(GoProfileLine, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->fittingRegionsEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileLineFittingRegion) GoProfileLine_FittingRegions(GoProfileLine tool) { kObj(GoProfileLine, tool); return obj->fittingRegions; } GoFx(GoProfileLineStdDev) GoProfileLine_StdDevMeasurement(GoProfileLine tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_LINE_STDDEV); } GoFx(GoProfileLineMaxError) GoProfileLine_MaxErrorMeasurement(GoProfileLine tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_LINE_ERROR_MAX); } GoFx(GoProfileLineMinError) GoProfileLine_MinErrorMeasurement(GoProfileLine tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_LINE_ERROR_MIN); } GoFx(GoProfileLinePercentile) GoProfileLine_PercentileMeasurement(GoProfileLine tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_LINE_PERCENTILE); } GoFx(GoProfileLineOffset) GoProfileLine_OffsetMeasurement(GoProfileLine tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_LINE_OFFSET); } GoFx(GoProfileLineAngle) GoProfileLine_AngleMeasurement(GoProfileLine tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_LINE_ANGLE); } GoFx(GoProfileLineMinErrorX) GoProfileLine_MinErrorXMeasurement(GoProfileLine tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_LINE_ERROR_MIN_X); } GoFx(GoProfileLineMinErrorZ) GoProfileLine_MinErrorZMeasurement(GoProfileLine tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_LINE_ERROR_MIN_Z); } GoFx(GoProfileLineMaxErrorX) GoProfileLine_MaxErrorXMeasurement(GoProfileLine tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_LINE_ERROR_MAX_X); } GoFx(GoProfileLineMaxErrorZ) GoProfileLine_MaxErrorZMeasurement(GoProfileLine tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_LINE_ERROR_MAX_Z); } GoFx(GoProfileLineLine) GoProfileLine_Line(GoProfilePosition tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_LINE_LINE); } GoFx(GoProfileLineMinErrorPoint) GoProfileLine_MinErrorPoint(GoProfilePosition tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_LINE_MIN_ERROR_POINT); } GoFx(GoProfileLineMaxErrorPoint) GoProfileLine_MaxErrorPoint(GoProfilePosition tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_LINE_MAX_ERROR_POINT); } kBeginClassEx(Go, GoProfilePanel) kAddVMethod(GoProfilePanel, kObject, VRelease) kAddVMethod(GoProfilePanel, GoTool, VInit) kAddVMethod(GoProfilePanel, GoTool, VRead) kAddVMethod(GoProfilePanel, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfilePanel_Construct(GoProfilePanel* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfilePanel), sensor, allocator); } GoFx(kStatus) GoProfilePanel_VInit(GoProfilePanel tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfilePanel, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_PANEL, sensor, alloc)); obj->refEdgeSide = GO_PROFILE_PANEL_SIDE_LEFT; obj->maxGapWidth = 0.0; obj->leftEdge = kNULL; obj->rightEdge = kNULL; kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfilePanelGap), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfilePanelFlush), kTRUE, kNULL)); obj->maxGapWidth = 0; obj->refEdgeSide = GO_PROFILE_PANEL_SIDE_LEFT; kCheck(GoProfileEdge_Construct(&obj->leftEdge, sensor, alloc)); kCheck(GoProfileEdge_Construct(&obj->rightEdge, sensor, alloc)); return kOK; } GoFx(kStatus) GoProfilePanel_VRelease(GoProfilePanel tool) { kObj(GoProfilePanel, tool); kCheck(kDestroyRef(&obj->leftEdge)); kCheck(kDestroyRef(&obj->rightEdge)); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfilePanel_VRead(GoProfilePanel tool, kXml xml, kXmlItem item) { kObj(GoProfilePanel, tool); kXmlItem edgeItem; kCheck(GoProfileTool_Read(tool, xml, item)); kCheck(kXml_Child32s(xml, item, "RefSide", &obj->refEdgeSide)); kCheck(kXml_Child64f(xml, item, "MaxGapWidth", &obj->maxGapWidth)); kCheck(!kIsNull(edgeItem = kXml_Child(xml, item, "LeftEdge"))); kCheck(GoProfileEdge_Read(obj->leftEdge, xml, edgeItem)); kCheck(!kIsNull(edgeItem = kXml_Child(xml, item, "RightEdge"))); kCheck(GoProfileEdge_Read(obj->rightEdge, xml, edgeItem)); return kOK; } GoFx(kStatus) GoProfilePanel_VWrite(GoProfilePanel tool, kXml xml, kXmlItem item) { kObj(GoProfilePanel, tool); kXmlItem edgeItem; kCheck(kXml_SetChild32s(xml, item, "RefSide", obj->refEdgeSide)); kCheck(kXml_SetChild64f(xml, item, "MaxGapWidth", obj->maxGapWidth)); kCheck(kXml_AddItem(xml, item, "LeftEdge", &edgeItem)); kCheck(GoProfileEdge_Write(obj->leftEdge, xml, edgeItem)); kCheck(kXml_AddItem(xml, item, "RightEdge", &edgeItem)); kCheck(GoProfileEdge_Write(obj->rightEdge, xml, edgeItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(k64f) GoProfilePanel_MaxGapWidth(GoProfilePanel tool) { kObj(GoProfilePanel, tool); return obj->maxGapWidth; } GoFx(kStatus) GoProfilePanel_SetMaxGapWidth(GoProfilePanel tool, k64f width) { kObj(GoProfilePanel, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->maxGapWidth = width; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfilePanelSide) GoProfilePanel_RefEdgeSide(GoProfilePanel tool) { kObjR(GoProfilePanel, tool); return obj->refEdgeSide; } GoFx(kStatus) GoProfilePanel_SetRefEdgeSide(GoProfilePanel tool, GoProfilePanelSide side) { kObj(GoProfilePanel, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->refEdgeSide = side; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileEdge) GoProfilePanel_LeftEdge(GoProfilePanel tool) { kObj(GoProfilePanel, tool); return obj->leftEdge; } GoFx(GoProfileEdge) GoProfilePanel_RightEdge(GoProfilePanel tool) { kObj(GoProfilePanel, tool); return obj->rightEdge; } GoFx(GoProfilePanelGap) GoProfilePanel_GapMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_GAP); } GoFx(GoProfilePanelFlush) GoProfilePanel_FlushMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_FLUSH); } kBeginClassEx(Go, GoProfilePosition) kAddVMethod(GoProfilePosition, kObject, VRelease) kAddVMethod(GoProfilePosition, GoTool, VInit) kAddVMethod(GoProfilePosition, GoTool, VRead) kAddVMethod(GoProfilePosition, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfilePosition_Construct(GoProfilePosition* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfilePosition), sensor, allocator); } GoFx(kStatus) GoProfilePosition_VInit(GoProfilePosition tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfilePosition, tool); GoFeature featureOutput = kNULL; kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_POSITION, sensor, alloc)); obj->feature = kNULL; kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfilePositionX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfilePositionZ), kTRUE, kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfilePositionPoint), &featureOutput)); kCheck(GoProfileFeature_Construct(&obj->feature, sensor, alloc)); return kOK; } GoFx(kStatus) GoProfilePosition_VRelease(GoProfilePosition tool) { kObj(GoProfilePosition, tool); kCheck(kDestroyRef(&obj->feature)); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfilePosition_VRead(GoProfilePosition tool, kXml xml, kXmlItem item) { kObj(GoProfilePosition, tool); kXmlItem featureItem; kCheck(GoProfileTool_Read(tool, xml, item)); kCheck(!kIsNull(featureItem = kXml_Child(xml, item, "Feature"))); kCheck(GoProfileFeature_Read(obj->feature, xml, featureItem)); return kOK; } GoFx(kStatus) GoProfilePosition_VWrite(GoProfilePosition tool, kXml xml, kXmlItem item) { kObj(GoProfilePosition, tool); kXmlItem featureItem; kCheck(kXml_AddItem(xml, item, "Feature", &featureItem)); kCheck(GoProfileFeature_Write(obj->feature, xml, featureItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(GoProfileFeature) GoProfilePosition_Feature(GoProfilePosition tool) { kObj(GoProfilePosition, tool); return obj->feature; } GoFx(GoProfilePositionX) GoProfilePosition_XMeasurement(GoProfilePosition tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_POSITION_X); } GoFx(kBool) GoProfilePosition_RegionEnabled(GoProfilePosition tool) { kObj(GoProfilePosition, tool); kObjN(GoProfileFeature, featureObj, obj->feature); return featureObj->regionEnabled; } GoFx(kStatus) GoProfilePosition_EnableRegion(GoProfilePosition tool, kBool enable) { kObj(GoProfilePosition, tool); kObjN(GoProfileFeature, featureObj, obj->feature); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); featureObj->regionEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfilePositionZ) GoProfilePosition_ZMeasurement(GoProfilePosition tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_POSITION_Z); } GoFx(GoProfilePositionPoint) GoProfilePosition_Point(GoProfilePosition tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_POSITION_POINT); } kBeginClassEx(Go, GoProfileStrip) kAddVMethod(GoProfileStrip, kObject, VRelease) kAddVMethod(GoProfileStrip, GoTool, VInit) kAddVMethod(GoProfileStrip, GoTool, VRead) kAddVMethod(GoProfileStrip, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfileStrip_Construct(GoProfileStrip* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfileStrip), sensor, allocator); } GoFx(kStatus) GoProfileStrip_VInit(GoProfileStrip tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfileStrip, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_STRIP, sensor, alloc)); obj->baseType = GO_PROFILE_STRIP_BASE_TYPE_NONE; kZero(obj->transitionWidth); obj->minWidth = 0.0; obj->maxVoidWidth = 0.0; obj->regionEnabled = kFALSE; obj->region = kNULL; obj->leftEdge = GO_PROFILE_STRIP_EDGE_TYPE_RISING | GO_PROFILE_STRIP_EDGE_TYPE_FALLING | GO_PROFILE_STRIP_EDGE_TYPE_DATA_END | GO_PROFILE_STRIP_EDGE_TYPE_VOID; obj->rightEdge = GO_PROFILE_STRIP_EDGE_TYPE_RISING | GO_PROFILE_STRIP_EDGE_TYPE_FALLING | GO_PROFILE_STRIP_EDGE_TYPE_DATA_END | GO_PROFILE_STRIP_EDGE_TYPE_VOID; obj->tiltEnabled = kTRUE; obj->supportWidth = 5.0; obj->minHeight = 2.0; kCheck(GoProfileRegion_Construct(&obj->region, sensor, alloc)); return kOK; } GoFx(kStatus) GoProfileStrip_VRelease(GoProfileStrip tool) { kObj(GoProfileStrip, tool); kDestroyRef(&obj->region); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfileStrip_VRead(GoProfileStrip tool, kXml xml, kXmlItem item) { kObj(GoProfileStrip, tool); kXmlItem regionItem = kNULL, transitionItem = kNULL;; kCheck(kXml_Child32s(xml, item, "BaseType", &obj->baseType)); kCheck(kXml_Child32s(xml, item, "LeftEdge", &obj->leftEdge)); kCheck(kXml_Child32s(xml, item, "RightEdge", &obj->rightEdge)); kCheck(kXml_ChildBool(xml, item, "TiltEnabled", &obj->tiltEnabled)); kCheck(kXml_Child64f(xml, item, "SupportWidth", &obj->supportWidth)); kCheckArgs(!kIsNull(transitionItem = kXml_Child(xml, item, "TransitionWidth"))); kCheck(kXml_Item64f(xml, transitionItem, &obj->transitionWidth.value)); if (kXml_AttrExists(xml, transitionItem, "min")) { kCheck(kXml_Attr64f(xml, transitionItem, "min", &obj->transitionWidth.min)); kCheck(kXml_Attr64f(xml, transitionItem, "max", &obj->transitionWidth.max)); } else { obj->transitionWidth.min = obj->transitionWidth.max = k64F_NULL; } kCheck(kXml_Child64f(xml, item, "MinWidth", &obj->minWidth)); kCheck(kXml_Child64f(xml, item, "MinHeight", &obj->minHeight)); kCheck(kXml_Child64f(xml, item, "MaxVoidWidth", &obj->maxVoidWidth)); if (kXml_ChildExists(xml, item, "RegionEnabled")) { kCheck(kXml_ChildBool(xml, item, "RegionEnabled", &obj->regionEnabled)); } kCheck(!kIsNull(regionItem = kXml_Child(xml, item, "Region"))); kCheck(GoProfileRegion_Read(obj->region, xml, regionItem)); kCheck(GoProfileTool_Read(tool, xml, item)); return kOK; } GoFx(kStatus) GoProfileStrip_VWrite(GoProfileStrip tool, kXml xml, kXmlItem item) { kObj(GoProfileStrip, tool); kXmlItem regionItem = kNULL; kCheck(kXml_SetChild32s(xml, item, "BaseType", obj->baseType)); kCheck(kXml_SetChild32s(xml, item, "LeftEdge", obj->leftEdge)); kCheck(kXml_SetChild32s(xml, item, "RightEdge", obj->rightEdge)); kCheck(kXml_SetChildBool(xml, item, "TiltEnabled", obj->tiltEnabled)); kCheck(kXml_SetChild64f(xml, item, "SupportWidth", obj->supportWidth)); kCheck(GoConfig_WriteRangeElement64f(xml, item, "TransitionWidth", obj->transitionWidth)); kCheck(kXml_SetChild64f(xml, item, "MinWidth", obj->minWidth)); kCheck(kXml_SetChild64f(xml, item, "MinHeight", obj->minHeight)); kCheck(kXml_SetChild64f(xml, item, "MaxVoidWidth", obj->maxVoidWidth)); kCheck(kXml_SetChildBool(xml, item, "RegionEnabled", obj->regionEnabled)); kCheck(kXml_AddItem(xml, item, "Region", ®ionItem)); kCheck(GoProfileRegion_Write(obj->region, xml, regionItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(kStatus) GoProfileStrip_SetBaseType(GoProfileStrip tool, GoProfileStripBaseType type) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->baseType = type; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileStripBaseType) GoProfileStrip_BaseType(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->baseType; } GoFx(GoProfileStripEdgeType) GoProfileStrip_LeftEdge(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->leftEdge; } GoFx(kStatus) GoProfileStrip_SetLeftEdge(GoProfileStrip tool, GoProfileStripEdgeType leftEdge) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->leftEdge = leftEdge; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileStripEdgeType) GoProfileStrip_RightEdge(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->rightEdge; } GoFx(kStatus) GoProfileStrip_SetRightEdge(GoProfileStrip tool, GoProfileStripEdgeType rightEdge) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->rightEdge = rightEdge; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(kBool) GoProfileStrip_TiltEnabled(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->tiltEnabled; } GoFx(kStatus) GoProfileStrip_EnableTilt(GoProfileStrip tool, kBool enable) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->tiltEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(k64f) GoProfileStrip_SupportWidth(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->supportWidth; } GoFx(kStatus) GoProfileStrip_SetSupportWidth(GoProfileStrip tool, k64f value) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->supportWidth = value; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); GoSensor_SyncConfig(GoTool_Sensor(tool)); return kOK; } GoFx(k64f) GoProfileStrip_TransitionWidthLimitMin(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->transitionWidth.min; } GoFx(kStatus) GoProfileStrip_SetTransitionWidthMin(GoProfileStrip tool, k64f value) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->transitionWidth.min = value; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(k64f) GoProfileStrip_TransitionWidthLimitMax(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->transitionWidth.max; } GoFx(kStatus) GoProfileStrip_SetTransitionWidthMax(GoProfileStrip tool, k64f value) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->transitionWidth.max = value; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(k64f) GoProfileStrip_TransitionWidth(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->transitionWidth.value; } GoFx(kStatus) GoProfileStrip_SetTransitionWidth(GoProfileStrip tool, k64f value) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); if (obj->transitionWidth.min != k64F_NULL) { kCheckArgs(value >= obj->transitionWidth.min && value <= obj->transitionWidth.max); } obj->transitionWidth.value = value; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(k64f) GoProfileStrip_MinWidth(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->minWidth; } GoFx(kStatus) GoProfileStrip_SetMinWidth(GoProfileStrip tool, k64f value) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->minWidth = value; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(k64f) GoProfileStrip_MinHeight(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->minHeight; } GoFx(kStatus) GoProfileStrip_SetMinHeight(GoProfileStrip tool, k64f value) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->minHeight = value; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(k64f) GoProfileStrip_MaxVoidWidth(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->maxVoidWidth; } GoFx(kStatus) GoProfileStrip_SetMaxVoidWidth(GoProfileStrip tool, k64f value) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->maxVoidWidth = value; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileRegion) GoProfileStrip_Region(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->region; } GoFx(kBool) GoProfileStrip_RegionEnabled(GoProfileStrip tool) { kObj(GoProfileStrip, tool); return obj->regionEnabled; } GoFx(kStatus) GoProfileStrip_EnableRegion(GoProfileStrip tool, kBool enable) { kObj(GoProfileStrip, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->regionEnabled = enable; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(kStatus) GoProfileStrip_AddMeasurement(GoProfileStrip tool, GoMeasurementType type, GoMeasurement* measurement) { kObj(GoProfileStrip, tool); kType classType = kNULL; kStatus status = kOK; if (type != GO_MEASUREMENT_PROFILE_STRIP_POSITION_X && type != GO_MEASUREMENT_PROFILE_STRIP_POSITION_Z && type != GO_MEASUREMENT_PROFILE_STRIP_HEIGHT && type != GO_MEASUREMENT_PROFILE_STRIP_WIDTH) { return kERROR_PARAMETER; } else { switch(type) { case GO_MEASUREMENT_PROFILE_STRIP_POSITION_X: classType = kTypeOf(GoProfileStripX); break; case GO_MEASUREMENT_PROFILE_STRIP_POSITION_Z: classType = kTypeOf(GoProfileStripZ); break; case GO_MEASUREMENT_PROFILE_STRIP_HEIGHT: classType = kTypeOf(GoProfileStripHeight); break; case GO_MEASUREMENT_PROFILE_STRIP_WIDTH: classType = kTypeOf(GoProfileStripWidth); break; } } kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); kCheck(GoTool_AddMeasurement(tool, classType, kTRUE, measurement)); kTry { kTest(GoSensor_SetConfigModified(GoTool_Sensor(tool))); kTest(GoSensor_SyncConfig(GoTool_Sensor(tool))); } kCatch(&status) { GoTool_RemoveMeasurement(tool, GoTool_MeasurementCount(tool) - 1); kEndCatch(status); } return kOK; } GoFx(kStatus) GoProfileStrip_RemoveMeasurement(GoProfileStrip tool, kSize index) { kCheckArgs(index < GoTool_MeasurementCount(tool)); kCheck(GoTool_RemoveMeasurement(tool, index)); kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); kCheck(GoSensor_SyncConfig(GoTool_Sensor(tool))); return kOK; } GoFx(kSize) GoProfileStrip_MeasurementCount(GoProfileStrip tool) { return GoTool_MeasurementCount(tool); } GoFx(GoMeasurement) GoProfileStrip_MeasurementAt(GoProfileStrip tool, kSize index) { kAssert(index < GoTool_MeasurementCount(tool)); return GoTool_MeasurementAt(tool, index); } kBeginClassEx(Go, GoProfileRoundCorner) kAddVMethod(GoProfileRoundCorner, kObject, VRelease) kAddVMethod(GoProfileRoundCorner, GoTool, VInit) kAddVMethod(GoProfileRoundCorner, GoTool, VRead) kAddVMethod(GoProfileRoundCorner, GoTool, VWrite) kEndClassEx() GoFx(kStatus) GoProfileRoundCorner_Construct(GoProfileRoundCorner* tool, kObject sensor, kAlloc allocator) { return GoTool_Construct(tool, kTypeOf(GoProfileRoundCorner), sensor, allocator); } GoFx(kStatus) GoProfileRoundCorner_VInit(GoProfileRoundCorner tool, kType type, kObject sensor, kAlloc alloc) { kObjR(GoProfileRoundCorner, tool); kCheck(GoProfileTool_Init(tool, type, GO_TOOL_PROFILE_ROUND_CORNER, sensor, alloc)); obj->refDirection = GO_PROFILE_ROUND_CORNER_DIRECTION_LEFT; obj->edge = kNULL; kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileRoundCornerX), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileRoundCornerZ), kTRUE, kNULL)); kCheck(GoTool_AddMeasurement(tool, kTypeOf(GoProfileRoundCornerAngle), kTRUE, kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileRoundCornerEdgePoint), kNULL)); kCheck(GoTool_AddFeatureOutput(tool, kTypeOf(GoProfileRoundCornerCenterPoint), kNULL)); obj->refDirection = GO_PROFILE_ROUND_CORNER_DIRECTION_LEFT; kCheck(GoProfileEdge_Construct(&obj->edge, sensor, alloc)); return kOK; } GoFx(kStatus) GoProfileRoundCorner_VRelease(GoProfileRoundCorner tool) { kObj(GoProfileRoundCorner, tool); kCheck(kDestroyRef(&obj->edge)); return GoProfileTool_VRelease(tool); } GoFx(kStatus) GoProfileRoundCorner_VRead(GoProfileRoundCorner tool, kXml xml, kXmlItem item) { kObj(GoProfileRoundCorner, tool); kXmlItem edgeItem; kCheck(GoProfileTool_Read(tool, xml, item)); kCheck(kXml_Child32s(xml, item, "RefDirection", &obj->refDirection)); kCheck(!kIsNull(edgeItem = kXml_Child(xml, item, "Edge"))); kCheck(GoProfileEdge_Read(obj->edge, xml, edgeItem)); return kOK; } GoFx(kStatus) GoProfileRoundCorner_VWrite(GoProfileRoundCorner tool, kXml xml, kXmlItem item) { kObj(GoProfileRoundCorner, tool); kXmlItem edgeItem; kCheck(kXml_SetChild32s(xml, item, "RefDirection", obj->refDirection)); kCheck(kXml_AddItem(xml, item, "Edge", &edgeItem)); kCheck(GoProfileEdge_Write(obj->edge, xml, edgeItem)); kCheck(GoProfileTool_Write(tool, xml, item)); return kOK; } GoFx(GoProfileRoundCornerX) GoProfileRoundCorner_XMeasurement(GoProfileRoundCorner tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_ROUND_CORNER_X); } GoFx(GoProfileRoundCornerZ) GoProfileRoundCorner_ZMeasurement(GoProfileRoundCorner tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_ROUND_CORNER_Z); } GoFx(GoProfileRoundCornerAngle) GoProfileRoundCorner_AngleMeasurement(GoProfileRoundCorner tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_ROUND_CORNER_ANGLE); } GoFx(GoProfileEdge) GoProfileRoundCorner_Edge(GoProfileRoundCorner tool) { kObjR(GoProfileRoundCorner, tool); return obj->edge; } GoFx(kStatus) GoProfileRoundCorner_SetEdge(GoProfileRoundCorner tool, GoProfileEdge edge) { kObjR(GoProfileRoundCorner, tool); obj->edge = edge; return kOK; } GoFx(GoProfileRoundCornerDirection) GoProfileRoundCorner_RefDirection(GoProfileRoundCorner tool) { kObjR(GoProfileRoundCorner, tool); return obj->refDirection; } GoFx(kStatus) GoProfileRoundCorner_SetRefDirection(GoProfileRoundCorner tool, GoProfileRoundCornerDirection direction) { kObj(GoProfileRoundCorner, tool); kCheckState(GoSensor_IsConfigurable(GoTool_Sensor(tool))); kCheck(GoSensor_CacheConfig(GoTool_Sensor(tool))); obj->refDirection = direction; kCheck(GoSensor_SetConfigModified(GoTool_Sensor(tool))); return kOK; } GoFx(GoProfileRoundCornerPoint) GoProfileRoundCorner_Point(GoProfileRoundCorner tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_ROUND_CORNER_POINT); } GoFx(GoProfileRoundCornerEdgePoint) GoProfileRoundCorner_EdgePoint(GoProfileRoundCorner tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_ROUND_CORNER_EDGE_POINT); } GoFx(GoProfileRoundCornerCenterPoint) GoProfileRoundCorner_CenterPoint(GoProfileRoundCorner tool) { return GoTool_FindFeatureOutputByType(tool, GO_FEATURE_PROFILE_ROUND_CORNER_CENTER_POINT); } GoFx(GoProfilePanelLeftFlushX) GoProfilePanel_LeftFlushXMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_LEFT_FLUSH_X); } GoFx(GoProfilePanelLeftFlushZ) GoProfilePanel_LeftFlushZMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_LEFT_FLUSH_Z); } GoFx(GoProfilePanelLeftGapX) GoProfilePanel_LeftGapXMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_LEFT_GAP_X); } GoFx(GoProfilePanelLeftGapZ) GoProfilePanel_LeftGapZMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_LEFT_GAP_Z); } GoFx(GoProfilePanelLeftSurfaceAngle) GoProfilePanel_LeftSurfaceAngleMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_LEFT_SURFACE_ANGLE); } GoFx(GoProfilePanelRightFlushX) GoProfilePanel_RightFlushXMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_RIGHT_FLUSH_X); } GoFx(GoProfilePanelRightFlushZ) GoProfilePanel_RightFlushZMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_RIGHT_FLUSH_Z); } GoFx(GoProfilePanelRightGapX) GoProfilePanel_RightGapXMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_RIGHT_GAP_X); } GoFx(GoProfilePanelRightGapZ) GoProfilePanel_RightGapZMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_RIGHT_GAP_Z); } GoFx(GoProfilePanelRightSurfaceAngle) GoProfilePanel_RightSurfaceAngleMeasurement(GoProfilePanel tool) { return GoTool_FindMeasurementByType(tool, GO_MEASUREMENT_PROFILE_PANEL_RIGHT_SURFACE_ANGLE); }