int cvxCmOpAddComp
(
int idx_Op,         /* I: index of the operation */
int idx_CmComp      /* I: index of the component */
)
/*
DESCRIPTION:
Add the component into the operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpAddFtr
(
int idx_Op,         /* I: index of the operation */
int idx_FtrGrp      /* I: index of the feature */
)
/*
DESCRIPTION:
Add the feature into the operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpAddTool
(
int idx_Op,         /* I: index of the operation */
int idx_Tool      /* I: index of the tool */
)
/*
DESCRIPTION:
Add a tool in the target operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpCalTPath
(
int idx_Op      /* I: index of the operation */
)
/*
DESCRIPTION:
Calculate the operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpDelete
(
int idx_Op      /* I: index of operation */
)
/*
DESCRIPTION:
Delete an operation in the active CamPlan.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpDuplicate
(
int idx_Op,         /* I: index of source operation */
int *cpyOp         /* O: index of destination op */
)
/*
DESCRIPTION:
Duplicate an operation in the active CamPlan.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpGetAttr
(
int idx_Op,               /* I: index of the operation */
int cnt,                  /* I: count of the attributes */
int *attr,               /* I: enumerations user wanna get */
svxCmAttrValue *value   /* O: the values return */
)
/*
DESCRIPTION:
Inquire the attributes of the operation.
Output a list of svxCmAttrValue via "value".

Not all evxCmQmOpAttr is available for different type of Operation.
As follows are 5 Operation Type,
   value->type        &             value->cnt   & value->data depend on "attr"
ZW_CAM_OPERATION_PROFILECUT:
   ZW_CAM_ATTR_VALUE_TYPE_STRING    <=32                 ZW_CAM_QM_OPERATION_ATTR_NAME
                                                         ZW_CAM_QM_OPERATION_ATTR_CLASS
                                                         ZW_CAM_QM_OPERATION_ATTR_FRAME
   ZW_CAM_ATTR_VALUE_TYPE_INTEGER   1     index of tool  ZW_CAM_QM_OPERATION_ATTR_TOOL
ZW_CAM_OPERATION_SMOOTHFLOW
ZW_CAM_OPERATION_OFFSET2D
ZW_CAM_OPERATION_OFFSET3D
ZW_CAM_OPERATION_ZLEVEL:
   ZW_CAM_ATTR_VALUE_TYPE_STRING    <=32                 ZW_CAM_QM_OPERATION_ATTR_NAME
                                                         ZW_CAM_QM_OPERATION_ATTR_CLASS
                                                         ZW_CAM_QM_OPERATION_ATTR_FRAME
   ZW_CAM_ATTR_VALUE_TYPE_DOUBLE    1                    ZW_CAM_QM_OPERATION_ATTR_SURF_THICK
                                                         ZW_CAM_QM_OPERATION_ATTR_MINTOOLHEIGHT
   ZW_CAM_ATTR_VALUE_TYPE_INTEGER   1     index of tool  ZW_CAM_QM_OPERATION_ATTR_TOOL

The following is a simple code to get operation's frame and surface thick:

   void TestApi(void)
   -{
   int cnt=0, *list=NULL;

   cvxCmInqAl(CM_OPERATION, &cnt, &list);
   if (cnt > 0)
      -{   
      svxCmAttrValue attrs[2];
      int num=2;
      int types[2]={ZW_CAM_QM_OPERATION_ATTR_FRAME, ZW_CAM_QM_OPERATION_ATTR_SURF_THICK};

      cvxCmOpGetAttr(list[0], num, types, attrs);

         -{
         char frame[32];
         strcpy(frame, (char *)attrs[0].data);
         -}

         -{
         double thick;
         thick = *(double*)attrs[1].data;
         -}

      cvxMemFree((void **)&attrs[0].data);
      cvxMemFree((void **)&attrs[1].data);
      -}
   cvxMemFree((void**)&list);

   return;
   -}

MEMORY MANAGEMENT:
User needs to allocate memory for "value", and free memory for "value->data".

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpGetAttr2
(
int idx_op,             /* I: index of the operation */
int field,              /* I: field id of the attribute */
int item,               /* I: item id of the attribute */
int *is_on,             /* I: on/off flag (MAYBE NULL) */
char *value             /* O: value of the attribute, caller should allocate memory */
)
/*
DESCRIPTION:
Inquire the attributes of the operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpGetIdxFromName
(
vxLongName op_name,     /* I: name of operation */
int *op_index           /* O: index of operation */
)
/*
DESCRIPTION:
Get the operation index with the specified name.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpInsert
(
evxCmOpType opType,      /* I: Operation type */
int *idx_Op               /* O: index of this inserted Operation */
)
/*
DESCRIPTION:
Create an operation in the active CamPlan.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpRemoveComp
(
int idx_Op,         /* I: index of the operation */
int idx_CmComp      /* I: index of the component */
)
/*
DESCRIPTION:
Remove the component of the operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpRemoveFtr
(
int idx_Op,         /* I: index of the operation */
int idx_ftrgrp      /* I: index of the feature */
)
/*
DESCRIPTION:
Remove the feature of the operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpRemoveTool
(
int idx_Op         /* I: index of the operation */
)
/*
DESCRIPTION:
Remove the tool of the target operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpSetAttr
(
int op,                  /* I: index of the operation */
int cnt,                  /* I: count of the attributes */
int *attr,               /* I: enumerations user wanna set */
svxCmAttrValue *value   /* I: the values needed  */
)
/*
DESCRIPTION:
Modify the attributes of the operation.

Not all evxCmQmOpAttr is available for different type of Operation.
As follows are 5 Operation Type,
   value->type        &             value->cnt   & value->data depend on "attr"
ZW_CAM_OPERATION_PROFILECUT:
   ZW_CAM_ATTR_VALUE_TYPE_STRING    <=32                 ZW_CAM_QM_OPERATION_ATTR_NAME
ZW_CAM_OPERATION_SMOOTHFLOW
ZW_CAM_OPERATION_OFFSET2D
ZW_CAM_OPERATION_OFFSET3D
ZW_CAM_OPERATION_ZLEVEL:
   ZW_CAM_ATTR_VALUE_TYPE_STRING    <=32                 ZW_CAM_QM_OPERATION_ATTR_NAME
   ZW_CAM_ATTR_VALUE_TYPE_DOUBLE    1                    ZW_CAM_QM_OPERATION_ATTR_SURF_THICK

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpSetAttr2
(
int idx_op,             /* I: index of the operation */
int field,              /* I: field id of the attribute */
int item,               /* I: item id of the attribute */
const char *value       /* I: value of the attribute */
)
/*
DESCRIPTION:
Modify the attributes of the operation.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpSetAttrAsCfg
(
int idx_Op,               /* I: index of the operation */
vxPath cfg_location      /* I: cfg file location with file name */
)
/*
DESCRIPTION:
Set the attributes of the operation depends on the config file.
To get a config file:
   1. Open an operation form, and set your parameters.
   2. Click "Save" button.
Notice that, config file will ignore those parameters which have their own objects, 
such as "frame", "point"...

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmOpSetSpeed
(
int    idx_op,     /* I: idx of opdef */
vxName spdfdName   /* I: name of speed & feed */
)
/*
DESCRIPTION:
Set speed & feed for the operation.
The speed & feed is from active Cam plan or current Library or default Library in proper order. 

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmSetOpPoint
(
int idx_op,     /* I: index of operation */
svxPoint p0,    /* I: point value */
int field       /* I: operation parameter's field */
)
/*
DESCRIPTION:
Set one point to operation parameter.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________

int cvxCmSetOpPoints
(
int idx_op,     /* I: index of operation */
int num,        /* I: number of points */
svxPoint *pts,  /* I: points value */
int field       /* I: operation parameter's field */
)
/*
DESCRIPTION:
Set points to operation parameter.

Returns 1 if function fails; 0 if it succeeds.
*/
________________________________________________________________________________