/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
#include <ProArray.h>
#include <ProDrawing.h>
#include <ProSelection.h>
#include <ProSimprep.h>
#include <ProSimprepdata.h>
#include <ProMessage.h>
#include <ProMenu.h>
#include <ProMdl.h>
#include <ProUtil.h>
#include <ProDwgtable.h>
#include <ProSimprepdata.h>
#include <TestError.h>
#include <UtilString.h>
#include <UtilFiles.h>
#include <UtilMessage.h>
#include <ProTKRunTime.h>
/*--------------------------------------------------------------------*\
Function prototypes
\*--------------------------------------------------------------------*/
int ProTestDrwSimpRepAdd ();
int ProTestDrwSimpRepDel ();
/*===========================================================================*\
FUNCTION: ProTestDrwSimpRep
PURPOSE: to read and make dwg simprep menu files
\*===========================================================================*/
int ProTestDrwSimpRep()
{
int menu_id;
ProError error;
error = ProMenuFileRegister((char*)"-Simp Rep",(char*)"tksimprep.mnu", &menu_id);
TEST_CALL_REPORT ("ProMenuFileRegister()",
"ProTestDrwSimpRep()", error, error!=PRO_TK_NO_ERROR);
error = ProMenubuttonActionSet((char*)"-Simp Rep", (char*)"-add",
(ProMenubuttonAction)ProTestDrwSimpRepAdd, NULL, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet()",
"ProTestDrwSimpRep()", error, error!=PRO_TK_NO_ERROR);
error = ProMenubuttonActionSet((char*)"-Simp Rep", (char*)"-delete",
(ProMenubuttonAction)ProTestDrwSimpRepDel, NULL, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet()",
"ProTestDrwSimpRep()", error, error!=PRO_TK_NO_ERROR);
error = ProMenubuttonActionSet((char*)"-Simp Rep", (char*)"-Simp Rep",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet()",
"ProTestDrwSimpRep()", error, error!=PRO_TK_NO_ERROR);
error = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"-Simp Rep", &menu_id);
TEST_CALL_REPORT ("ProMenuCreate()",
"ProTestDrwSimpRep()", error, error!=PRO_TK_NO_ERROR);
error = ProMenuProcess((char*)"-Simp Rep", &menu_id);
TEST_CALL_REPORT ("ProMenuProcess()", "ProTestDrwSimpRep()", error,
error != PRO_TK_NO_ERROR && error != PRO_TK_E_FOUND);
return (0);
}
/*===========================================================================*\
FUNCTION: ProTestDrwSimpRepAdd
PURPOSE: add simpliefied representation to drawing.
\*===========================================================================*/
int ProTestDrwSimpRepAdd ()
{
int i, mdl_num;
ProCharLine c_name, line;
ProDrawing drawing;
ProMdl *mdl_arr = NULL;
ProSimprep simprep;
ProMdlName w_name;
ProError error;
error = ProMdlCurrentGet((ProMdl*)&drawing);
TEST_CALL_REPORT ("ProMdlCurrentGet()",
"ProTestDrwSimpRepAdd()", error, error!=PRO_TK_NO_ERROR);
/*----------------------------------------------------------------------------*\
Get model list in session.
\*----------------------------------------------------------------------------*/
error = ProSessionMdlList ( PRO_MDL_ASSEMBLY, &mdl_arr, &mdl_num);
TEST_CALL_REPORT ("ProSessionMdlList()",
"ProTestDrwSimpRepAdd()", error, error!=PRO_TK_NO_ERROR);
/*----------------------------------------------------------------------------*\
Add simp representation.
\*----------------------------------------------------------------------------*/
if ( mdl_num >0)
{
for (i=0;i<mdl_num; i++)
{
error = ProMdlMdlnameGet (mdl_arr[i], w_name);
TEST_CALL_REPORT ("ProMdlMdlnameGet()",
"ProTestDrwSimpRepAdd()", error, error!=PRO_TK_NO_ERROR);
ProTKSprintf (line,"Add simpliefied representation from model %s [y/N}:",
ProWstringToString(c_name, w_name));
ProUtilMsgPrint("gen", "TEST %0s", line);
if (!ProUtilYesnoGet((char*)"Y"))
continue;
error = ProSimprepSelect ((ProSolid)mdl_arr[i], &simprep);
TEST_CALL_REPORT ("ProSimprepSelect()",
"ProTestDrwSimpRepAdd()", error, error!=PRO_TK_NO_ERROR);
if (error == PRO_TK_NO_ERROR)
{
error = ProDrawingAsmsimprepAdd (drawing, &simprep);
TEST_CALL_REPORT ("ProDrawingAsmsimprepAdd()",
"ProTestDrwSimpRepAdd()", error, error!=PRO_TK_NO_ERROR);
}
}
error = ProArrayFree ((ProArray*)&mdl_arr);
TEST_CALL_REPORT ("ProArrayFree()",
"ProTestDrwSimpRepAdd()", error, error!=PRO_TK_NO_ERROR);
}
return (0);
}
/*===========================================================================*\
FUNCTION: ProTestDrwSimpRepDel
PURPOSE: Delete selected simpliefied representation from drawing.
\*===========================================================================*/
int ProTestDrwSimpRepDel ()
{
int j, i;
int rep_num, model_num;
ProCharLine line, c_name;
ProDrawing drawing;
ProError status;
ProName name;
ProSimprep *rep_arr = NULL;
ProSimprepdata *rep_data_ptr = NULL;
ProSolid model;
ProView view;
ProSelection *sel_arr;
status = ProMdlCurrentGet ((ProMdl*)&drawing);
TEST_CALL_REPORT ("ProMdlCurrentGet()", "ProTestDrwSimpRepDel()",
status, status!=PRO_TK_NO_ERROR);
ProUtilMsgPrint("gen", "TEST %0s", "Select view with simprep for delete.");
status = ProSelect ((char*)"dwg_view", 1, NULL, NULL, NULL, NULL,
&sel_arr, &model_num);
TEST_CALL_REPORT ("ProSelect()", "ProTestDrwSimpRepDel()",
status, status != PRO_TK_NO_ERROR);
status = ProSelectionViewGet (sel_arr[0], &view);
TEST_CALL_REPORT ("ProSelectionViewGet()", "ProTestDrwSimpRepDel()",
status, status != PRO_TK_NO_ERROR);
status = ProDrawingViewSolidGet (drawing, view, &model);
TEST_CALL_REPORT ("ProDrawingViewSolidGet()", "ProTestDrwSimpRepDel()",
status, status != PRO_TK_NO_ERROR);
/*----------------------------------------------------------------------------*\
Get simp representations in model.
\*----------------------------------------------------------------------------*/
status = ProDrawingSimprepsCollect(drawing, model, &rep_arr);
TEST_CALL_REPORT ("ProDrawingSimprepsCollect()",
"ProTestDrwSimpRepDel()", status, status!=PRO_TK_NO_ERROR);
/* status != PRO_TK_GENERAL_ERROR until simpreps corrupt.*/
status = ProArraySizeGet ((ProArray)rep_arr , &rep_num);
TEST_CALL_REPORT("ProArraySizeGet()", "ProTestDrwSimpRepDel()", status,
status != PRO_TK_NO_ERROR && status != PRO_TK_BAD_INPUTS);
#if 0
if ( status == PRO_TK_NO_ERROR)
{
for (i=0; i<rep_num; i++)
{
/*----------------------------------------------------------------------------*\
Dont work with master representation.
\*----------------------------------------------------------------------------*/
if (rep_arr[i].id == -1)
continue;
/*----------------------------------------------------------------------------*\
Delete some simp representation.
\*----------------------------------------------------------------------------*/
/* status != PRO_TK_E_NOT_FOUND */
status = ProSimprepdataGet (&rep_arr[i], &rep_data_ptr);
TEST_CALL_REPORT ("ProSimprepdataGet()",
"ProTestDrwSimpRepDel()", status, status != PRO_TK_NO_ERROR
&& status != PRO_TK_E_NOT_FOUND);
if (status != PRO_TK_NO_ERROR)
continue;
status = ProSimprepdataNameGet (rep_data_ptr, name);
TEST_CALL_REPORT ("ProSimprepdataNameGet()",
"ProTestDrwSimpRepDel()", status, status!=PRO_TK_NO_ERROR);
sprintf (line, "Delete simpliefied representation %s [y/n]",
ProWstringToString(c_name, name));
ProUtilMsgPrint("gen", "TEST %0s", line);
if (!ProUtilYesnoGet("Y"))
continue;
status = ProSimprepdataFree (&rep_data_ptr);
TEST_CALL_REPORT ("ProSimprepdataFree()",
"ProTestDrwSimpRepDel()", status, status!=PRO_TK_NO_ERROR);
status = ProDrawingAsmsimprepDelete(drawing, &rep_arr[i]);
TEST_CALL_REPORT ("ProDrawingAsmsimprepDelete()",
"ProTestDrwSimpRepDel()", status, status!=PRO_TK_NO_ERROR);
}
status = ProArrayFree ((ProArray*)&rep_arr);
TEST_CALL_REPORT("ProArrayFree()", "ProTestDrwSimpRepDel()",
status, status != PRO_TK_NO_ERROR);
}
#endif
return (0);
}