208 lines
5.9 KiB
C
208 lines
5.9 KiB
C
/**
|
|||
|
|
* @file GoExtToolDataOutput.c
|
||
|
|
*
|
||
|
|
* @internal
|
||
|
|
* Copyright (C) 2017-2021 by LMI Technologies Inc.
|
||
|
|
* Licensed under the MIT License.
|
||
|
|
* Redistributed files must retain the above copyright notice.
|
||
|
|
*/
|
||
|
|
/*
|
||
|
|
* This file contains the SDK implementation for a Tool Data Output of
|
||
|
|
* a tool. Only extensible tools currently support having tool data as an
|
||
|
|
* output.
|
||
|
|
*/
|
||
|
|
#include <GoSdk/Tools/GoExtToolDataOutput.h>
|
||
|
|
#include <GoSdk/GoSensor.h>
|
||
|
|
|
||
|
|
kBeginClassEx(Go, GoExtToolDataOutput)
|
||
|
|
kAddVMethod(GoExtToolDataOutput, kObject, VRelease)
|
||
|
|
kEndClassEx()
|
||
|
|
|
||
|
|
GoFx(kStatus) GoExtToolDataOutput_Construct(GoExtToolDataOutput* toolDataOutput, kType type, kObject sensor, kAlloc allocator)
|
||
|
|
{
|
||
|
|
kAlloc alloc = kAlloc_Fallback(allocator);
|
||
|
|
kStatus status;
|
||
|
|
|
||
|
|
kCheck(kAlloc_GetObject(alloc, type, toolDataOutput));
|
||
|
|
|
||
|
|
if (!kSuccess(status = GoExtToolDataOutput_Init(*toolDataOutput, type, sensor, alloc)))
|
||
|
|
{
|
||
|
|
kAlloc_FreeRef(alloc, toolDataOutput);
|
||
|
|
}
|
||
|
|
|
||
|
|
return status;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(kStatus) GoExtToolDataOutput_Init(GoExtToolDataOutput toolDataOutput, kType type, kObject sensor, kAlloc alloc)
|
||
|
|
{
|
||
|
|
kObjR(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
|
||
|
|
kCheck(kObject_Init(toolDataOutput, type, alloc));
|
||
|
|
obj->type[0] = 0;
|
||
|
|
obj->dataType = 0;
|
||
|
|
obj->name[0] = 0;
|
||
|
|
obj->enabled = kFALSE;
|
||
|
|
|
||
|
|
obj->id = GO_UNASSIGNED_ID;
|
||
|
|
obj->sensor = sensor;
|
||
|
|
|
||
|
|
return kOK;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(kStatus) GoExtToolDataOutput_VRelease(GoExtToolDataOutput toolDataOutput)
|
||
|
|
{
|
||
|
|
kCheck(kObject_VRelease(toolDataOutput));
|
||
|
|
|
||
|
|
return kOK;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(kBool) GoExtToolDataOutput_IsValidDataType(GoDataType dataType)
|
||
|
|
{
|
||
|
|
kBool valid = kFALSE;
|
||
|
|
|
||
|
|
switch (dataType)
|
||
|
|
{
|
||
|
|
case GO_DATA_TYPE_NONE:
|
||
|
|
case GO_DATA_TYPE_RANGE:
|
||
|
|
case GO_DATA_TYPE_UNIFORM_PROFILE:
|
||
|
|
case GO_DATA_TYPE_PROFILE_POINT_CLOUD:
|
||
|
|
case GO_DATA_TYPE_UNIFORM_SURFACE:
|
||
|
|
case GO_DATA_TYPE_SURFACE_POINT_CLOUD:
|
||
|
|
case GO_DATA_TYPE_UNMERGED_PROFILE_POINT_CLOUD:
|
||
|
|
case GO_DATA_TYPE_VIDEO:
|
||
|
|
case GO_DATA_TYPE_TRACHEID:
|
||
|
|
case GO_DATA_TYPE_MESH:
|
||
|
|
case GO_DATA_TYPE_FEATURES_ONLY:
|
||
|
|
valid = kTRUE;
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
if (dataType >= GO_DATA_TYPE_GENERIC_BASE && dataType <= GO_DATA_TYPE_GENERIC_END)
|
||
|
|
valid = kTRUE;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
return valid;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(kStatus) GoExtToolDataOutput_Read(GoExtToolDataOutput toolDataOutput, kXml xml, kXmlItem toolDataOutputItem, kBool isGdkUserTool)
|
||
|
|
{
|
||
|
|
kObj(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
|
||
|
|
if (isGdkUserTool)
|
||
|
|
kCheckState(kStrEquals(kXml_ItemName(xml, toolDataOutputItem), GO_XML_TAG_NAME_CUSTOM));
|
||
|
|
else
|
||
|
|
kCheckState(kStrEquals(kXml_ItemName(xml, toolDataOutputItem), GO_XML_TAG_NAME_TOOLDATAOUTPUT));
|
||
|
|
|
||
|
|
kCheck(kXml_Attr32s(xml, toolDataOutputItem, GO_XML_TAG_NAME_ATTR_ID, &obj->id));
|
||
|
|
kCheck(kXml_AttrText(xml, toolDataOutputItem, GO_XML_TAG_NAME_ATTR_TYPE, obj->type, kCountOf(obj->type)));
|
||
|
|
kCheck(kXml_Attr32s(xml, toolDataOutputItem, GO_XML_TAG_NAME_ATTR_DATA_TYPE, &obj->dataType));
|
||
|
|
if (!GoExtToolDataOutput_IsValidDataType(obj->dataType))
|
||
|
|
{
|
||
|
|
obj->dataType = GO_DATA_TYPE_NONE;
|
||
|
|
}
|
||
|
|
kCheck(kXml_ChildText(xml, toolDataOutputItem, GO_XML_TAG_NAME_NAME, obj->name, kCountOf(obj->name)));
|
||
|
|
kCheck(kXml_ChildBool(xml, toolDataOutputItem, GO_XML_TAG_NAME_ENABLED, &obj->enabled));
|
||
|
|
|
||
|
|
return kOK;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(kStatus) GoExtToolDataOutput_Write(GoExtToolDataOutput toolDataOutput, kXml xml, kXmlItem toolDataOutputItem, kBool isGdkUserTool)
|
||
|
|
{
|
||
|
|
kObj(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
kXmlItem temp = kNULL;
|
||
|
|
kXmlItem child = kNULL;
|
||
|
|
|
||
|
|
// Put correct name in the tool data output item node.
|
||
|
|
if (isGdkUserTool)
|
||
|
|
kCheck(kXml_SetItemName(xml, toolDataOutputItem, GO_XML_TAG_NAME_CUSTOM));
|
||
|
|
else
|
||
|
|
kCheck(kXml_SetItemName(xml, toolDataOutputItem, GO_XML_TAG_NAME_TOOLDATAOUTPUT));
|
||
|
|
|
||
|
|
kCheck(kXml_SetAttr32s(xml, toolDataOutputItem, GO_XML_TAG_NAME_ATTR_ID, obj->id));
|
||
|
|
kCheck(kXml_SetAttrText(xml, toolDataOutputItem, GO_XML_TAG_NAME_ATTR_TYPE, obj->type));
|
||
|
|
kCheck(kXml_SetAttr32s(xml, toolDataOutputItem, GO_XML_TAG_NAME_ATTR_DATA_TYPE, obj->dataType));
|
||
|
|
|
||
|
|
kCheck(kXml_SetChildText(xml, toolDataOutputItem, GO_XML_TAG_NAME_NAME, obj->name));
|
||
|
|
kCheck(kXml_SetChildBool(xml, toolDataOutputItem, GO_XML_TAG_NAME_ENABLED, obj->enabled));
|
||
|
|
|
||
|
|
return kOK;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
GoFx(kStatus) GoExtToolDataOutput_SetId(GoExtToolDataOutput toolDataOutput, k32s id)
|
||
|
|
{
|
||
|
|
kObj(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
|
||
|
|
obj->id = id;
|
||
|
|
kCheck(GoSensor_SetConfigModified(obj->sensor));
|
||
|
|
|
||
|
|
return kOK;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(k32s) GoExtToolDataOutput_Id(GoExtToolDataOutput toolDataOutput)
|
||
|
|
{
|
||
|
|
kObj(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
|
||
|
|
GoSensor_SyncConfig(obj->sensor);
|
||
|
|
|
||
|
|
return obj->id;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(kStatus) GoExtToolDataOutput_SetName(GoExtToolDataOutput toolDataOutput, const kChar* name)
|
||
|
|
{
|
||
|
|
kObj(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
|
||
|
|
kCheck(kStrCopy(obj->name, kCountOf(obj->name), name));
|
||
|
|
|
||
|
|
kCheck(GoSensor_SetConfigModified(obj->sensor));
|
||
|
|
|
||
|
|
return kOK;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(const kChar*) GoExtToolDataOutput_Name(GoExtToolDataOutput toolDataOutput)
|
||
|
|
{
|
||
|
|
kObj(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
|
||
|
|
GoSensor_SyncConfig(obj->sensor);
|
||
|
|
|
||
|
|
return obj->name;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(kStatus) GoExtToolDataOutput_SetEnable(GoExtToolDataOutput toolDataOutput, kBool enable)
|
||
|
|
{
|
||
|
|
kObj(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
|
||
|
|
obj->enabled = enable;
|
||
|
|
|
||
|
|
kCheck(GoSensor_SetConfigModified(obj->sensor));
|
||
|
|
|
||
|
|
return kOK;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(kBool) GoExtToolDataOutput_Enabled(GoExtToolDataOutput toolDataOutput)
|
||
|
|
{
|
||
|
|
kObj(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
|
||
|
|
GoSensor_SyncConfig(obj->sensor);
|
||
|
|
|
||
|
|
return obj->enabled;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(GoDataType) GoExtToolDataOutput_DataType(GoExtToolDataOutput toolDataOutput)
|
||
|
|
{
|
||
|
|
kObj(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
|
||
|
|
GoSensor_SyncConfig(obj->sensor);
|
||
|
|
|
||
|
|
return obj->dataType;
|
||
|
|
}
|
||
|
|
|
||
|
|
GoFx(const kChar*) GoExtToolDataOutput_Type(GoExtToolDataOutput toolDataOutput)
|
||
|
|
{
|
||
|
|
kObj(GoExtToolDataOutput, toolDataOutput);
|
||
|
|
|
||
|
|
GoSensor_SyncConfig(obj->sensor);
|
||
|
|
|
||
|
|
return obj->type;
|
||
|
|
}
|