/*
Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
#ifndef lint
static char TestMfgOper_h [] = "@(#)TestMfgOper.c 1.4 11/26/96";
#endif
/*--------------------------------------------------------------------*\
System includes
\*--------------------------------------------------------------------*/
#include <math.h>
/*--------------------------------------------------------------------*\
Pro/Toolkit includes
\*--------------------------------------------------------------------*/
#include <ProToolkit.h>
#include <ProModelitem.h>
#include <ProSelection.h>
#include <ProMdl.h>
#include <ProElement.h>
#include <ProElemId.h>
#include <ProElempath.h>
#include <ProFeature.h>
#include <ProFeatType.h>
#include <ProSolid.h>
#include <ProCsys.h>
/*--------------------------------------------------------------------*\
Application includes
\*--------------------------------------------------------------------*/
#include "TestConsts.h"
#include "TestError.h"
#include "MfgMenu.h"
#include "TestMfgNew.h"
#include "UtilTree.h"
#include "UtilMessage.h"
#include "UtilString.h"
#include "UtilGeom.h"
#include <ProTKRunTime.h>
#include <ProUtil.h>
/*--------------------------------------------------------------------*\
Local functions
\*--------------------------------------------------------------------*/
ProError ProTestOperationCreate(MfgMenuChoice*);
/*====================================================================*\
FUNCTION : ProTestOperationCreate
PURPOSE : ProTestOperationCreate
\*====================================================================*/
ProError ProTestOperationCreate(MfgMenuChoice *obj_action)
{
ProMfg mfg_model = NULL;
ProSolid mfg_solid = NULL;
ProFeature op_feature;
ProAsmcomppath comp_path;
ProError status = PRO_TK_NO_ERROR;
ProSelection *sel;
int sel_num, wcell_id = -1;
ProModelitem sel_obj;
wchar_t wname[PRO_LINE_SIZE];
wchar_t oper_wname[PRO_LINE_SIZE];
Operation oper;
ProError ProTestWkcellId(ProAppData p_wcell,
ProAppData app_data, int ts);
/* Choose Wcell name. */
ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Enter MFG Operation name: ");
if(!ProUtilStringGet(oper_wname, NULL, PRO_LINE_SIZE))
return(PRO_TK_BAD_INPUTS);
oper.wname = oper_wname;
/* Select Operation CSYS */
ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Select Operation CSYS.");
status = ProSelect((char*)"csys", 1, NULL, NULL, NULL, NULL, &sel, &sel_num);
TEST_CALL_REPORT("ProSelect()", "ProTestOperationCreate()",
status, status == PRO_TK_COMM_ERROR);
if( status != PRO_TK_NO_ERROR || sel_num <= 0 )
return((ProError)-1);
ProSelectionHighlight(sel[0], PRO_COLOR_ERROR);
status = ProSelectionModelitemGet(sel[0], &sel_obj);
TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestOperationCreate()",
status, status != PRO_TK_NO_ERROR);
oper.csys_id = sel_obj.id;
/* Get Operation Workcell */
ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Enter Workcell name that Operation belongs to: ");
if(!ProUtilStringGet(wname, NULL, PRO_LINE_SIZE))
return(PRO_TK_BAD_INPUTS);
status = ProTestGetModels(&mfg_model, &mfg_solid, &comp_path);
status = ProUtilMfgobjAction(obj_action, MFGOBJ_WKCELL, 1,
ProTestWkcellId, &wcell_id, 0 );
oper.wcell_id = wcell_id;
ProTKFprintf(stderr, (char*)"In ProTestOperationCreate()\n");
ProTKFprintf(stderr, (char*)"Workcell id = %d\n", wcell_id);
if(wcell_id == -1)
return((ProError)-1);
status = ProTempOperationCreate(oper, &op_feature);
return ((ProError)1);
}
/*====================================================================*\
FUNCTION : ProTestCreateOper
PURPOSE : Create an operation op_name using specified wcell
\*====================================================================*/
ProError ProTempOperationCreate(
Operation oper,
ProFeature *p_op_feature)
{
ProElement oper_elem_tree = (ProElement)NULL; /* Entire tree */
ProElement oper_elem = (ProElement)NULL; /* Individual element */
ProSelection selection;
ProValueData value_data;
ProValue value = (ProValue)NULL;
ProErrorlist errors;
ProError status = PRO_TK_NO_ERROR;
int i = 0;
ProFeatureCreateOptions *opts = 0;
ProReference ref1;
/*--------------------------------------------------------------------*\
Set up the top level element values and sizes
\*--------------------------------------------------------------------*/
static ElemTable oper_elem_table[] = {
{ PRO_E_FEATURE_TYPE, PRO_VALUE_TYPE_INT },
{ PRO_E_STD_FEATURE_NAME, PRO_VALUE_TYPE_WSTRING },
{ PRO_E_OPER_CSYS, PRO_VALUE_TYPE_SELECTION },
{ PRO_E_MFG_WCELL_REF, PRO_VALUE_TYPE_SELECTION}
};
int wc_elem_type_size = sizeof(oper_elem_table)/
sizeof(ElemTable);
/*--------------------------------------------------------------------*\
Allocate space for operation element tree
\*--------------------------------------------------------------------*/
if (status == PRO_TK_NO_ERROR)
{
status = ProElementAlloc ( PRO_E_FEATURE_TREE, &oper_elem_tree );
TEST_CALL_REPORT("ProElementAlloc()", "ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
}
/*--------------------------------------------------------------------*\
Set all of the top level elements
\*--------------------------------------------------------------------*/
for (i =0; i < wc_elem_type_size; i++)
{
if (status == PRO_TK_NO_ERROR)
{
status = ProElementAlloc(oper_elem_table[i].elem_type,
&oper_elem);
TEST_CALL_REPORT("ProElementAlloc()", "ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
}
switch (oper_elem_table[i].elem_type)
{
case PRO_E_FEATURE_TYPE:
status = ProElementIntegerSet ( oper_elem, PRO_FEAT_OPERATION);
TEST_CALL_REPORT("ProElementIntegerSet()", "ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
break;
case PRO_E_MFG_WCELL_REF:
ProTestCreateSelection(oper.wcell_id, PRO_FEATURE, &selection);
status = ProSelectionToReference(selection, &ref1);
TEST_CALL_REPORT("ProSelectionToReference()", "ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
status = ProElementReferenceSet(oper_elem, ref1);
TEST_CALL_REPORT("ProElementReferenceSet()", "ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
break;
case PRO_E_OPER_CSYS:
ProTestCreateSelection(oper.csys_id, PRO_CSYS, &selection);
status = ProSelectionToReference(selection, &ref1 );
TEST_CALL_REPORT("ProSelectionToReference()", "ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
status = ProElementReferenceSet(oper_elem, ref1);
TEST_CALL_REPORT("ProElementReferenceSet()", "ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
break;
case PRO_E_STD_FEATURE_NAME:
status=ProElementWstringSet(oper_elem, oper.wname);
TEST_CALL_REPORT("ProElementWstringSet()", "ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
break;
default:
ProTKFprintf(stderr, (char*)"Error finding element type\n");
return PRO_TK_GENERAL_ERROR;
}
if ( status == PRO_TK_NO_ERROR )
{
status = ProElemtreeElementAdd (oper_elem_tree, NULL, oper_elem );
TEST_CALL_REPORT("ProElemtreeElementAdd()","ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
}
}
status = ProUtilElementtreePrint(oper_elem_tree, PRO_TEST_INFO_WINDOW,NULL);
status = ProTestCreateSelection(PRO_TK_NOT_USED,
PRO_TYPE_UNUSED, &selection);
if (status == PRO_TK_NO_ERROR)
{
status = ProArrayAlloc(1,sizeof(ProFeatureCreateOptions),
1, (ProArray*)&opts);
opts[0]= PRO_FEAT_CR_NO_OPTS;
status = ProFeatureWithoptionsCreate( selection, oper_elem_tree,
opts, PRO_REGEN_NO_FLAGS, p_op_feature, &errors);
TEST_CALL_REPORT("ProFeatureWithoptionsCreate()", "ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
status = ProArrayFree((ProArray*)&opts);
}
status = ProElementFree(&oper_elem_tree);
TEST_CALL_REPORT("ProElementFree()", "ProTestCreateOper()",
status, (status != PRO_TK_NO_ERROR));
return(status);
}
/*====================================================================*\
FUNCTION : ProTestOperationDisplay
PURPOSE : Top level function to display a tool path of an operation
\*====================================================================*/
ProError ProTestOperationDisplay(
MfgMenuChoice *obj_action)
{
ProError status;
double dval = 0;
int ival = 0;
ProMfg mfg_model;
ProSolid mfg_solid;
ProAsmcomppath comp_path;
ProMfgoper oper;
char oper_name[PRO_NAME_SIZE] = "";
ProName name;
status = ProTestGetModels (&mfg_model, &mfg_solid, &comp_path);
status = ProMfgoperActiveGet (mfg_solid, &oper);
TEST_CALL_REPORT("ProMfgoperActiveGet()",
"ProTestOperationDisplay", status, (status != PRO_TK_NO_ERROR)&&
(status != PRO_TK_E_NOT_FOUND));
if( status == PRO_TK_NO_ERROR )
{
status = ProModelitemNameGet (&oper, name);
TEST_CALL_REPORT("ProModelitemNameGet()", "ProTestOperationDisplay()",
status, (status != PRO_TK_NO_ERROR));
ProWstringToString(oper_name, (wchar_t*)&name);
}
ProTKPrintf((char*)"\n Current operation : %s \n", oper_name);
status = ProUtilMfgobjAction (obj_action, MFGOBJ_OPER, 1,
ProTestOperToolPathDisp, &dval, ival);
return status;
}
/*====================================================================*\
FUNCTION : ProTestOperToolPathDisp
PURPOSE : Display a tool path of a given operation
\*====================================================================*/
ProError ProTestOperToolPathDisp(
ProAppData p_oper,
ProAppData app_data,
int dummy)
{
ProError status;
status = ProMfgoperToolpathDisplay((ProMfgoper *) p_oper);
TEST_CALL_REPORT("ProMfgoperToolpathDisplay()",
"ProTestOperToolPathDisp", status, status != PRO_TK_NO_ERROR);
return status;
}