/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*--------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*--------------------------------------------------------------------*/
#include <ProToolkit.h>
#include <ProObjects.h>
#include <ProAssembly.h>
#include <ProAsmcomp.h>
#include <ProElemId.h>
#include <ProElement.h>
#include <ProExpldstate.h>
#include <ProFeatType.h>
#include <ProMdl.h>
#include <ProMessage.h>
#include <ProModelitem.h>
#include <ProMenu.h>
#include <ProSelection.h>
#include <ProSolid.h>
#include <ProUtil.h>
#include <ProValue.h>
#include <ProSkeleton.h>
/*--------------------------------------------------------------------*\
Application includes
\*--------------------------------------------------------------------*/
#include "TestError.h"
#include "TestFiletypes.h"
#include "UtilFiles.h"
#include "UtilMessage.h"
#include "UtilString.h"
#include "UtilNames.h"
#include "UtilCollect.h"
#include "UtilTree.h"
#include "UtilMenu.h"
#include <PTApplsUnicodeUtils.h>
#include <ProTKRunTime.h>
#include <TestError.h>
#include <UtilFiles.h>
/*--------------------------------------------------------------------*\
Application macros
\*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*\
Application data types
\*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*\
Application global/external data
\*--------------------------------------------------------------------*/
ProError ProUtilAsmcompSelect(ProAsmcomp *p_asmcomp);
/*====================================================================*\
Function : ProTestAsmcompSetPlaced()
Purpose : Menu callback
\*====================================================================*/
int ProTestAsmcompSetPlaced (ProAppData data, int dummy)
{
ProError err;
ProAsmcomp asmcomp;
ProBoolean p_is_placed;
static ProUtilMenuButtons placed_type[] = {
{"TkAsmcompSetPlaced", 0, TEST_CALL_PRO_MENU_DELETE},
{"Placed", PRO_B_TRUE, 0 },
{"Unplaced", PRO_B_FALSE, 0 },
{"",0,0}
};
err = ProUtilAsmcompSelect(&asmcomp);
if (err != PRO_TK_NO_ERROR)
return (0);
err = ProUtilMenuIntValueSelect(placed_type, (int *)&p_is_placed);
if (err != PRO_TK_NO_ERROR)
return (0);
err = ProAsmcompSetPlaced (&asmcomp, p_is_placed);
TEST_CALL_REPORT("ProAsmcompSetPlaced()",
"ProTestAsmcompSetPlaced()",
err, err != PRO_TK_NO_ERROR );
return (0);
}
/*====================================================================*\
Function : ProTestAsmcompSelectPath()
Purpose : Select comp and get path
\*====================================================================*/
ProError ProTestAsmcompSelectPath (
ProAsmcomppath* asmcomppath)
{
ProSelection *p_sel;
ProError status;
int n_sel;
status = ProSelect((char *)"prt_or_asm", 1, NULL, NULL, NULL, NULL,
&p_sel, &n_sel);
TEST_CALL_REPORT("ProSelect()",
"ProTestAsmcompSelectPath()", status, status != PRO_TK_NO_ERROR);
if (status != PRO_TK_NO_ERROR)
return (status);
status = ProSelectionAsmcomppathGet(p_sel[0], asmcomppath);
TEST_CALL_REPORT("ProSelectionAsmcomppathGet()",
"ProTestAsmcompSelectPath()", status, status != PRO_TK_NO_ERROR);
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
Function : ProTestAsmcompMakeUniqueSubas()
Purpose : Menu callback
\*====================================================================*/
int ProTestAsmcompMakeUniqueSubas (ProAppData data, int dummy)
{
ProError err;
ProAsmcomppath asmcomppath;
err = ProTestAsmcompSelectPath (&asmcomppath);
if (err != PRO_TK_NO_ERROR)
return (0);
err = ProAsmcompMakeUniqueSubasm (&asmcomppath);
TEST_CALL_REPORT("ProAsmcompMakeUniqueSubasm()",
"ProTestAsmcompMakeUniqueSubas()",
err, err != PRO_TK_NO_ERROR );
return (0);
}
/*====================================================================*\
Function : ProTestAsmcompRmvUniqueSubas()
Purpose : Menu callback
\*====================================================================*/
int ProTestAsmcompRmvUniqueSubas (ProAppData data, int dummy)
{
ProError err;
ProAsmcomppath asmcomppath;
err = ProTestAsmcompSelectPath (&asmcomppath);
if (err != PRO_TK_NO_ERROR)
return (0);
/* bug in the function ProAsmcompRmvUniqueSubasm() */
err = ProAsmcompRmvUniqueSubasm (&asmcomppath);
TEST_CALL_REPORT("ProAsmcompRmvUniqueSubasm()",
"ProTestAsmcompRmvUniqueSubas()", err, 0 );
return (0);
}
/*====================================================================*\
Function : ProTestAsmcompPlacedInfoCollect()
Purpose : Menu callback
\*====================================================================*/
int ProTestAsmcompPlacedInfoCollect (ProAppData data, int dummy)
{
ProError err;
ProAssembly c_asm;
ProAsmcomp *asm_comps;
int n_asm_comps = 0, i;
FILE * qcr_place_info;
ProBool is_plcd = PRO_B_TRUE;
ProMdlfileType mdl_type;
ProFamilyMdlName mdl_name;
char mdl_char_name [PRO_FAMILY_MDLNAME_SIZE];
err = ProMdlCurrentGet ((ProMdl*)&c_asm);
TEST_CALL_REPORT("ProMdelCurrentGet()",
"ProTestAsmcompPlacedInfoCollect()",
err, err != PRO_TK_NO_ERROR );
if (err !=PRO_TK_NO_ERROR)
return (0);
err = ProUtilCollectAsmcomp (c_asm, &asm_comps);
if (err !=PRO_TK_NO_ERROR)
return (0);
err = ProArraySizeGet ((ProArray)asm_comps, &n_asm_comps);
TEST_CALL_REPORT("ProArraySizeGet()",
"ProTestAsmcompPlacedInfoCollect()",
err, err != PRO_TK_NO_ERROR );
if (err !=PRO_TK_NO_ERROR)
return (0);
qcr_place_info = (FILE *)PTApplsUnicodeFopen ("comp_plcd.info", "w+t");
if (qcr_place_info == NULL)
return 0;
for (i=0; i<n_asm_comps; i++)
{
err = ProAsmcompIsPlaced (& (asm_comps[i]), &is_plcd);
TEST_CALL_REPORT("ProAsmcompIsPlaced()",
"ProTestAsmcompPlacedInfoCollect()",
err, err != PRO_TK_NO_ERROR );
if (err !=PRO_TK_NO_ERROR)
break;
err = ProAsmcompMdlMdlnameGet (& (asm_comps[i]), &mdl_type,
mdl_name);
TEST_CALL_REPORT("ProAsmcompMdlMdlnameGet()",
"ProTestAsmcompPlacedInfoCollect()",
err, err != PRO_TK_NO_ERROR );
ProWstringToString (mdl_char_name, mdl_name);
ProTKFprintf (qcr_place_info,
"Component ID: %d\tModel name : %s\tComp. placement: %s\n",
(asm_comps[i]).id, mdl_char_name,
(is_plcd == PRO_B_TRUE ? "placed":"unplaced"));
}
fclose (qcr_place_info);
err = ProArrayFree ((ProArray*)&asm_comps);
TEST_CALL_REPORT("ProArrayFree()",
"ProTestAsmcompPlacedInfoCollect()",
err, err != PRO_TK_NO_ERROR );
return (0);
}
/*====================================================================*\
Function : ProTestAsmcompMechanismMenu()
Purpose : Menu callback
\*====================================================================*/
int ProTestAsmcompMechanismMenu (ProAppData data, int dummy)
{
ProError err;
char * cnames [] =
{
"Set Placed",
"Make Unique",
"Remove Unique",
"Collect Plcd Info",
""
};
wchar_t **wnames;
int i, dummy1;
ProUtilMenuStringsAlloc(&wnames);
for (i=0; i<sizeof (cnames)/sizeof (char*); i++)
{
ProUtilMenuStringsStrAdd(&wnames, cnames[i]);
}
err = ProMenuFromStringsRegister((char *)"TkAsmcompMachanism", NULL, wnames, NULL,
NULL, &dummy1);
TEST_CALL_REPORT("ProMenuFromStringsRegister()",
"ProTestAsmcompMechanismMenu()", err, err != PRO_TK_NO_ERROR);
ProUtilMenuStringsFree(&wnames);
ProMenubuttonActionSet( (char *)"TkAsmcompMachanism", (char *)"Set Placed",
(ProMenubuttonAction)ProTestAsmcompSetPlaced, NULL, 0);
ProMenubuttonActionSet( (char *)"TkAsmcompMachanism", (char *)"Make Unique",
(ProMenubuttonAction)ProTestAsmcompMakeUniqueSubas, NULL, 0);
ProMenubuttonActionSet( (char *)"TkAsmcompMachanism", (char *)"Remove Unique",
(ProMenubuttonAction)ProTestAsmcompRmvUniqueSubas, NULL, 0);
ProMenubuttonActionSet( (char *)"TkAsmcompMachanism", (char *)"Collect Plcd Info",
(ProMenubuttonAction)ProTestAsmcompPlacedInfoCollect, NULL, 0);
ProMenubuttonActionSet( (char *)"TkAsmcompMachanism", (char *)"TkAsmcompMachanism",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
ProMenuCreate(PROMENUTYPE_MAIN, (char *)"TkAsmcompMachanism", NULL);
ProMenuProcess((char *)"TkAsmcompMachanism", &i);
return (0);
}