/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*--------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*--------------------------------------------------------------------*/
#include <ProToolkit.h>
#include <ProIntfData.h>
#include <ProGeomitemdata.h>
#include <ProMessage.h>
#include <ProMenu.h>
#include <ProSelection.h>
#include <ProSolid.h>
#include <ProUtil.h>
#include <ProMode.h>
/*--------------------------------------------------------------------*\
Pro/DEVELOP includes
\*--------------------------------------------------------------------*/
#include "TestError.h"
#include "UtilMenu.h"
#include "UtilMessage.h"
#include "UtilMatrix.h"
#include "UtilCollect.h"
#include "UtilString.h"
#include <ProTKRunTime.h>
#include <ProImportfeat.h>
#include <TestDbms.h>
/*--------------------------------------------------------------------*\
C System includes
\*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*\
Application macros
\*--------------------------------------------------------------------*/
#define DEFAULT_ANGLE_CONTROL 0.5
#define DEFAULT_CHORD_HEIGHT 0.05
#define DEFAULT_STEP_SIZE 0.5
#define CHORD_HEIGHT 0
#define ANGLE_CONTROL 1
#define JOIN_SURFACES 1
#define MAKE_SOLID 2
#define ADD_SOLID 4
/*--------------------------------------------------------------------*\
Application data types
\*--------------------------------------------------------------------*/
typedef struct slice_types {
ProImportExportFile type;
char *button_name;
char *file_extension;
} SliceTypes;
typedef struct raster_settings {
ProRasterDepth depth;
ProRasterType type;
ProDotsPerInch inch;
double size[2];
} RasterSettings;
/*--------------------------------------------------------------------*\
Application global/external data
\*--------------------------------------------------------------------*/
int ProTestImport(ProAppData p_appdata);
int ProTestExport(ProAppData p_appdata);
int ProTestExportSlice(ProAppData p_appdata);
int ProTestExportFileTypeSet(ProImportExportFile *p_type,
ProImportExportFile type_value);
ProError ProTestSelectExportType( ProImportExportFile *p_type );
ProError ProTestSelectImportType( ProImportExportFile *p_type );
int ProTestPlotfileWrite ( ProAppData p_appdata);
int ProTestExportVRML (ProAppData p_appdata);
int ProTestRasterMenu();
int ProTestRedefImpfeat(ProMdl *mdl);
ProError ProUtilImportfeatFilter(ProFeature *p_feature);
extern ProError ProUtilCollectSolidFeaturesWithFilter(
ProSolid p_solid, /* In: The solid handle */
ProFeatureFilterAction filter, /* In: Filter function */
ProFeature **p_features );
static SliceTypes sl_types[] =
{
{PRO_SLA_ASCII_FILE, (char *)"STL ASCII", (char *)"stl"},
{PRO_SLA_BINARY_FILE, (char *)"STL Binary", (char *)"stl"},
{PRO_RENDER_FILE, (char *)"Render", (char *)"slp"},
{PRO_INVENTOR_FILE, (char *)"Inventor", (char *)"iv"}
};
/*============================================================================*\
Function: ProTestInterface
Purpose:
\*============================================================================*/
int ProTestInterface(
ProAppData p_appdata)
{
ProError status;
int menu_id;
int action;
int ProTestImportfeat();
status = ProMenuPush();
TEST_CALL_REPORT( "ProMenuPush()", "ProTestInterface()",
status, status != PRO_TK_NO_ERROR );
status = ProMenuFileRegister( (char*)"TkInterface", (char*)"tkinterface.mnu",
&menu_id );
TEST_CALL_REPORT( "ProMenuFileRegister()", "ProTestInterface()",
status, status != PRO_TK_NO_ERROR );
ProMenubuttonActionSet( (char*)"TkInterface", (char*)"Import",
(ProMenubuttonAction)ProTestImport, p_appdata, 0 );
ProMenubuttonActionSet( (char*)"TkInterface", (char*)"Export",
(ProMenubuttonAction)ProTestExport, p_appdata, 0 );
ProMenubuttonActionSet( (char*)"TkInterface", (char*)"Export PS",
(ProMenubuttonAction)ProTestPlotfileWrite, p_appdata, 0 );
ProMenubuttonActionSet( (char*)"TkInterface", (char*)"Export Slice",
(ProMenubuttonAction)ProTestExportSlice, p_appdata, 0 );
ProMenubuttonActionSet( (char*)"TkInterface", (char*)"Import feat",
(ProMenubuttonAction)ProTestImportfeat, p_appdata, 0 );
ProMenubuttonActionSet( (char*)"TkInterface", (char*)"Redef Impfeat",
(ProMenubuttonAction)ProTestRedefImpfeat, p_appdata, 0 );
ProMenubuttonActionSet( (char*)"TkInterface", (char*)"Export VRML",
(ProMenubuttonAction)ProTestExportVRML, p_appdata, 0 );
ProMenubuttonActionSet( (char*)"TkInterface", (char*)"Export Raster",
(ProMenubuttonAction)ProTestRasterMenu, NULL, 0 );
ProMenubuttonActionSet( (char*)"TkInterface", (char*)"TkInterface Done",
(ProMenubuttonAction)ProMenuDelete, p_appdata, 0 );
ProMenubuttonActionSet( (char*)"TkInterface", (char*)"TkInterface",
(ProMenubuttonAction)ProMenuDelete, p_appdata, 0 );
status = ProMenuCreate( PROMENUTYPE_MAIN, (char*)"TkInterface", &menu_id );
TEST_CALL_REPORT( "ProMenuCreate()", "ProTestInterface()",
status, status != PRO_TK_NO_ERROR );
if( status == PRO_TK_NO_ERROR )
{
status = ProMenuProcess( (char*)"TkInterface", &action );
TEST_CALL_REPORT( "ProMenuProcess()", "ProTestInterface()",
status, status != PRO_TK_NO_ERROR );
}
status = ProMenuPop();
TEST_CALL_REPORT( "ProMenuPop()", "ProTestInterface()",
status, status != PRO_TK_NO_ERROR );
return 0;
}
/*============================================================================*\
Function: ProTestImport
Purpose: Import current model to the foreign format
\*============================================================================*/
int ProTestImport(
ProAppData p_appdata)
{
ProError status;
ProMdl p_model;
ProName wfilename;
ProMode mode;
ProImportExportFile import_type;
p_model = *((ProMdl*)p_appdata);
/* Get Pro/E mode */
status = ProModeCurrentGet( &mode );
TEST_CALL_REPORT( "ProModeCurrentGet()", "ProTestImport()",
status, status != PRO_TK_NO_ERROR );
ProTestSelectImportType( &import_type );
switch( import_type )
{
case PRO_DWG_SETUP_FILE:
if( mode != PRO_MODE_DRAWING )
{
status = PRO_TK_GENERAL_ERROR;
ProUtilMsgPrint( "gen", "TEST %0s", "Drawing mode is required" );
}
break;
/*
case PRO_RELATION_FILE:
case PRO_PROGRAM_FILE:
case PRO_IGES_SECTION:
*/
}
if( status == PRO_TK_NO_ERROR )
{
ProUtilMsgPrint( "gen", "TEST %0s", "Enter import file name [QUIT]:" );
status = ProMessageStringRead( PRO_NAME_SIZE, wfilename );
TEST_CALL_REPORT( "ProMessageStringRead()", "ProTestImport()",
status, status != PRO_TK_NO_ERROR );
if( status != PRO_TK_NO_ERROR )
return -1;
status = ProInputFileRead( p_model, wfilename, import_type, NULL,
NULL, NULL, NULL );
TEST_CALL_REPORT( "ProInputFileRead()", "ProTestImport()",
status, status != PRO_TK_NO_ERROR );
status = ProSolidRegenerate( (ProSolid)p_model, PRO_REGEN_NO_FLAGS );
TEST_CALL_REPORT( "ProSolidRegenerate()", "ProTestImport()",
status, status != PRO_TK_NO_ERROR );
}
else
{
ProUtilMsgPrint( "gen", "TEST %0s", "Invalid import type" );
}
return 0;
}
/*============================================================================*\
Function: ProTestSelectImportType
Purpose: Select the type of file to import
\*============================================================================*/
ProError ProTestSelectImportType(
ProImportExportFile *p_type
)
{
ProError status;
int menu_id;
int action;
if( p_type == NULL )
return PRO_TK_BAD_INPUTS;
*p_type = PRO_UNDEFINED_FILE;
status = ProMenuFileRegister( (char*)"TkImport", (char*)"tkimport.mnu",
&menu_id );
TEST_CALL_REPORT( "ProMenuFileRegister()", "ProTestSelectImportType()",
status, status != PRO_TK_NO_ERROR );
ProMenubuttonActionSet( (char*)"TkImport", (char*)"RELATION_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_RELATION_FILE );
ProMenubuttonActionSet( (char*)"TkImport", (char*)"IGES_SECTION",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_IGES_SECTION );
ProMenubuttonActionSet( (char*)"TkImport", (char*)"PROGRAM_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_PROGRAM_FILE );
ProMenubuttonActionSet( (char*)"TkImport", (char*)"CONFIG_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_CONFIG_FILE );
ProMenubuttonActionSet( (char*)"TkImport", (char*)"DWG_SETUP_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_DWG_SETUP_FILE );
ProMenubuttonActionSet( (char*)"TkImport", (char*)"SPOOL_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_SPOOL_FILE );
ProMenubuttonActionSet( (char*)"TkImport" , (char*)"TkImport",
(ProMenubuttonAction)ProMenuDelete,
p_type, -1 );
status = ProMenuCreate( PROMENUTYPE_MAIN, (char*)"TkImport", &menu_id );
TEST_CALL_REPORT( "ProMenuCreate()", "ProTestSelectImportType()",
status, status != PRO_TK_NO_ERROR );
if( status == PRO_TK_NO_ERROR )
{
status = ProMenuProcess( (char*)"TkImport", &action );
TEST_CALL_REPORT( "ProMenuProcess()", "ProTestSelectImportType()",
status, status != PRO_TK_NO_ERROR );
}
if( *p_type == PRO_UNDEFINED_FILE )
status = PRO_TK_GENERAL_ERROR;
return status;
}
/*============================================================================*\
Function: ProTestExport
Purpose: Export current model from the foreign format
\*============================================================================*/
int ProTestExport(
ProAppData p_appdata)
{
ProError status;
ProMdl p_model;
ProMdlFileName wfilename;
ProMode mode;
ProAppData p_arg2;
ProAppData p_arg3;
ProFeature feature;
ProSelection *p_sel;
int n_sel;
ProImportExportFile export_type;
double quality[ 2 ];
ProCGMType cgm_option_1;
ProCGMType cgm_option_2;
p_model = *((ProMdl*)p_appdata);
/* User's input must be here */
ProStringToWstring( wfilename, (char*)"output" );
/* Get Pro/E mode */
status = ProModeCurrentGet( &mode );
TEST_CALL_REPORT( "ProModeCurrentGet()", "ProTestExport()",
status, status != PRO_TK_NO_ERROR );
ProTestSelectExportType( &export_type );
p_arg2 = NULL;
p_arg3 = NULL;
switch( export_type )
{
case PRO_IGES_FILE:
case PRO_DXF_FILE:
case PRO_DWG_SETUP_FILE:
if( mode != PRO_MODE_DRAWING )
{
status = PRO_TK_GENERAL_ERROR;
ProUtilMsgPrint( "gen", "TEST %0s", "Drawing mode is required" );
}
break;
case PRO_RENDER_FILE:
case PRO_SLA_ASCII_FILE:
case PRO_SLA_BINARY_FILE:
case PRO_INVENTOR_FILE:
quality[0] = DEFAULT_CHORD_HEIGHT;
quality[1] = DEFAULT_ANGLE_CONTROL;
p_arg3 = (ProAppData)quality;
break;
case PRO_FEAT_INFO:
case PRO_FEATURE_INFO:
ProUtilMsgPrint( "gen", "TEST %0s", "Select the feature" );
status = ProSelect( (char*)"feature", 1, NULL, NULL, NULL, NULL,
&p_sel, &n_sel );
if( (status != PRO_TK_NO_ERROR) || (n_sel < 1) )
break;
status = ProSelectionModelitemGet( p_sel[0], &feature );
TEST_CALL_REPORT( "ProSelectionModelitemGet()", "ProTestExport()",
status, status != PRO_TK_NO_ERROR );
p_arg2 = (ProAppData)&(feature.id);
break;
case PRO_MFG_OPER_CL:
case PRO_MFG_FEAT_CL:
if( mode != PRO_MODE_MANUFACTURE )
{
status = PRO_TK_GENERAL_ERROR;
ProUtilMsgPrint( "gen", "TEST %0s",
"Manufacturing mode is required" );
break;
}
ProUtilMsgPrint( "gen", "TEST %0s", "Select the feature" );
status = ProSelect( (char*)"feature", 1, NULL, NULL, NULL, NULL,
&p_sel, &n_sel );
if( (status != PRO_TK_NO_ERROR) || (n_sel < 1) )
break;
status = ProSelectionModelitemGet( p_sel[0], &feature );
TEST_CALL_REPORT( "ProSelectionModelitemGet()", "ProTestExport()",
status, status != PRO_TK_NO_ERROR );
p_arg2 = (ProAppData)&(feature.id);
break;
case PRO_CGM_FILE:
cgm_option_1 = PROCGMTYPE_CLEAR_TEXT;
cgm_option_2 = PROCGMTYPE_ABSTRACT;
p_arg2 = &cgm_option_1;
p_arg3 = &cgm_option_2;
break;
}
if( status == PRO_TK_NO_ERROR )
{
ProUtilMsgPrint( "gen", "TEST %0s", "Enter export file name [QUIT]:" );
status = ProMessageStringRead( PRO_LINE_SIZE, wfilename );
TEST_CALL_REPORT( "ProMessageStringRead()", "ProTestImport()",
status, status != PRO_TK_NO_ERROR );
if( status != PRO_TK_NO_ERROR )
return -1;
status = ProOutputFileMdlnameWrite( p_model, wfilename, export_type, NULL,
p_arg2, p_arg3, NULL );
TEST_CALL_REPORT( "ProOutputFileMdlnameWrite()", "ProTestExport()",
status, status != PRO_TK_NO_ERROR );
}
else
{
ProUtilMsgPrint( "gen", "TEST %0s", "Invalid export type" );
}
return 0;
}
/*============================================================================*\
Function: ProUtilSliceParamInput
Purpose: Input Slice export param
\*============================================================================*/
int ProUtilSliceParamInput(
double *dptr,
int action)
{
ProCharLine line;
double drange[2], d;
ProError err;
d = dptr[0];
if (action == CHORD_HEIGHT)
{
ProTKSprintf(line, "Enter maximum hord height [%.4f]:", d);
drange[0] = 0.0001;
drange[1] = 100.0;
}
else
{
ProTKSprintf(line, "Enter angle control factor ( 0.0 - 1.0 ) [%.4f]:", d);
drange[0] = 0.0;
drange[1] = 1.0;
}
ProUtilMsgPrint("gen", "TEST %0s", line);
err = ProMessageDoubleRead(drange, &d);
if (err == PRO_TK_NO_ERROR)
{
dptr[0] = d;
}
return (0);
}
/*============================================================================*\
Function: ProUtilSliceSelectCsys
Purpose: Select Slice export Csys matr
\*============================================================================*/
int ProUtilSliceSelectCsys(
ProMatrix matr)
{
ProSelection *p_sel;
int n_sel;
ProError err;
ProModelitem modelitem;
ProAsmcomppath path;
ProMatrix asm_matr, prod_matr;
ProGeomitemdata *p_data;
ProUtilMsgPrint("gen", "TEST %0s", "Select coordinate system.");
err = ProSelect((char*)"csys", 1, NULL, NULL, NULL, NULL, &p_sel, &n_sel );
if (err != PRO_TK_NO_ERROR || n_sel != 1)
return (0);
err = ProSelectionModelitemGet(p_sel[0], &modelitem);
TEST_CALL_REPORT( "ProSelectionModelitemGet()",
"ProTestExport()", err, err != PRO_TK_NO_ERROR );
err = ProGeomitemdataGet((ProGeomitem*)&modelitem, &p_data);
TEST_CALL_REPORT( "ProGeomitemdataGet()",
"ProTestExport()", err, err != PRO_TK_NO_ERROR );
err = ProMatrixInit(p_data->data.p_csys_data->x_vector,
p_data->data.p_csys_data->y_vector, p_data->data.p_csys_data->z_vector,
p_data->data.p_csys_data->origin, matr);
TEST_CALL_REPORT( "ProMatrixInit()",
"ProTestExport()", err, err != PRO_TK_NO_ERROR );
err = ProGeomitemdataFree(&p_data);
TEST_CALL_REPORT( "ProGeomitemdataFree()",
"ProTestExport()", err, err != PRO_TK_NO_ERROR );
err = ProSelectionAsmcomppathGet(p_sel[0], &path);
TEST_CALL_REPORT( "ProSelectionAsmcomppathGet()",
"ProTestExport()", err, err != PRO_TK_NO_ERROR );
if (err == PRO_TK_NO_ERROR)
{
/* Csys from an assembly component, produce transformation matrix from
csys matrix and component matrix */
err = ProAsmcomppathTrfGet(&path, PRO_B_FALSE, asm_matr);
TEST_CALL_REPORT( "ProAsmcomppathTrfGet()",
"ProTestExport()", err, err != PRO_TK_NO_ERROR );
ProUtilMatrixProduct(asm_matr, matr, prod_matr);
ProUtilMatrixCopy(prod_matr, matr);
}
err = ProMenuDeleteWithStatus(0);
return(PRO_TK_NO_ERROR);
}
/*============================================================================*\
Function: ProUtilSliceParamInput
Purpose: Make Slice export Csys matr
\*============================================================================*/
int ProUtilSliceCsysGet(
ProMatrix matr)
{
int action;
ProError err;
ProUtilMsgPrint("gen", "TEST %0s", "Create or select coordinate system.");
ProMenuFileRegister( (char*)"TkGet Csys", (char*)"tkgetcsys.mnu", NULL );
ProMenubuttonActionSet( (char*)"TkGet Csys", (char*)"Select",
(ProMenubuttonAction)ProUtilSliceSelectCsys, matr, 0);
ProMenubuttonActionSet( (char*)"TkGet Csys", (char*)"Default",
(ProMenubuttonAction)ProUtilMenubuttonDeleteWithStatus, NULL, 0);
ProMenubuttonActionSet( (char*)"TkGet Csys", (char*)"Quit",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
ProMenubuttonActionSet( (char*)"TkGet Csys", (char*)"TkGet Csys",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
ProMenuCreate(PROMENUTYPE_MAIN, (char*)"TkGet Csys", NULL);
err = ProMenuProcess((char*)"TkGet Csys", &action);
if (err == PRO_TK_NO_ERROR)
{
ProMenuDeleteWithStatus(0);
ProMenuDeleteWithStatus(0);
}
return (0);
}
/*============================================================================*\
Function: ProUtilSliceCompSelect
Purpose: Select an assembly component
\*============================================================================*/
int ProUtilSliceCompSelect(
ProAsmcomppath **p_path)
{
ProSelection *p_sel;
int n_sel;
ProError err;
ProAsmcomppath path;
err = ProSelect((char*)"prt_or_asm", 1, NULL, NULL, NULL, NULL, &p_sel, &n_sel );
if (err == PRO_TK_NO_ERROR && n_sel == 1)
{
ProUtilMsgPrint("gen", "TEST %0s", "Select an assembly component.");
err = ProSelectionAsmcomppathGet(p_sel[0], &path);
TEST_CALL_REPORT("ProSelectionAsmcomppathGet()",
"ProUtilSliceCompSelect()", err, err != PRO_TK_NO_ERROR);
if (err == PRO_TK_NO_ERROR)
{
if (*p_path == NULL)
*p_path = (ProAsmcomppath*)calloc(1, sizeof(ProAsmcomppath));
p_path[0][0] = path;
}
ProUtilMenubuttonActivate((char*)"TkExportSliceComp", (char*)"Include", 0);
}
return (0);
}
/*============================================================================*\
Function: ProTestExportSlice
Purpose: Export current model to the one of slice formats
\*============================================================================*/
int ProTestExportSlice(
ProAppData p_appdata)
{
ProMdl p_model;
ProMdlName w_name;
ProMdlFileName w_file_name;
char name[PRO_MDLNAME_SIZE];
ProCharLine line;
char file_name[PRO_FILE_MDLNAME_SIZE];
ProMatrix matrix;
ProAsmcomppath *p_path = NULL;
ProError err;
ProMdlType mdl_type;
int i, n_menus, action;
ProImportExportFile type;
char *compound[] = {"TkExportSlice", "TkExportSliceComp", ""};
double *quality;
int flags = PRO_FACET_STEP_SIZE_DEFAULT | PRO_FACET_CHORD_HEIGHT_DEFAULT | PRO_FACET_ANGLE_CONTROL_DEFAULT;
ProArrayAlloc(3, sizeof(double), 1, (ProArray*)&quality);
quality[0] = DEFAULT_CHORD_HEIGHT;
quality[1] = DEFAULT_ANGLE_CONTROL;
quality[2] = DEFAULT_STEP_SIZE;
p_model = *((ProMdl*)p_appdata);
err = ProMdlTypeGet(p_model, &mdl_type);
ProMenuFileRegister( (char*)"TkSlice Type", (char*)"tkslicetype.mnu", NULL );
for (i=0; i<sizeof(sl_types)/sizeof(sl_types[0]); i++)
{
ProMenubuttonActionSet( (char*)"TkSlice Type", sl_types[i].button_name,
(ProMenubuttonAction)ProUtilMenubuttonDeleteWithStatus, NULL,
sl_types[i].type);
}
ProMenubuttonActionSet( (char*)"TkSlice Type", (char*)"TkSlice Type",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
ProMenuCreate(PROMENUTYPE_MAIN, (char*)"TkSlice Type", NULL);
err = ProMenuProcess((char*)"TkSlice Type", (int*)&type);
if (err != PRO_TK_NO_ERROR)
return (-1);
ProUtilMatrixCopy(NULL, matrix);
ProMenuFileRegister( (char*)"TkExportSlice", (char*)"tkexportsl.mnu", NULL);
ProMenubuttonActionSet( (char*)"TkExportSlice", (char*)"Chord Height",
(ProMenubuttonAction)ProUtilSliceParamInput, &quality[0], CHORD_HEIGHT);
ProMenubuttonActionSet( (char*)"TkExportSlice", (char*)"Angle Control",
(ProMenubuttonAction)ProUtilSliceParamInput, &quality[1], ANGLE_CONTROL);
ProMenubuttonActionSet( (char*)"TkExportSlice", (char*)"Output",
(ProMenubuttonAction)ProUtilSliceCsysGet, matrix, 0);
ProMenubuttonActionSet( (char*)"TkExportSlice", (char*)"TkExportSlice",
(ProMenubuttonAction)ProUtilMenuKill, NULL, 2);
ProMenuFileRegister( (char*)"TkExportSliceComp", (char*)"tkexportslc.mnu", NULL);
ProMenubuttonActionSet( (char*)"TkExportSliceComp", (char*)"Include",
(ProMenubuttonAction)ProUtilSliceCompSelect, &p_path, 0);
ProMenubuttonActionSet( (char*)"TkExportSliceComp", (char*)"TkExportSliceComp",
(ProMenubuttonAction)ProUtilMenuKill, NULL, 2);
err = ProCompoundmenuCreate(compound, &n_menus);
TEST_CALL_REPORT("ProCompoundmenuCreate()",
"ProTestExportSlice()", err, err != PRO_TK_NO_ERROR);
ProUtilMenubuttonActivate((char*)"TkExportSliceComp", (char*)"Include",
mdl_type != PRO_MDL_PART);
err = ProMenuProcess((char*)"TkExportSlice", &action);
if (err != PRO_TK_NO_ERROR)
return (0);
err = ProMdlMdlnameGet(p_model, w_name);
ProWstringToString(name, w_name);
ProTKSprintf(line, "Enter output file name [%s] : ", name);
ProUtilMsgPrint("gen", "TEST %0s", line);
err = ProMessageStringRead(PRO_LINE_SIZE, w_file_name);
if (err != PRO_TK_NO_ERROR)
ProStringToWstring(w_file_name, name);
ProWstringToString(file_name, w_file_name);
ProUtilstrcat(file_name, ".");
for (i=0; i<sizeof(sl_types)/sizeof(sl_types[0]); i++)
{
if (sl_types[i].type == type)
{
ProUtilstrcat(file_name, (const char*)sl_types[i].file_extension);
break;
}
}
ProStringToWstring(w_file_name, file_name);
err = ProIntfSliceFileWithOptionsMdlnameExport(p_model, w_file_name, type, quality,
flags, matrix, p_path);
TEST_CALL_REPORT( "ProIntfSliceFileWithOptionsMdlnameExport()",
"ProTestExportSlice()", err, err != PRO_TK_NO_ERROR );
if (err == PRO_TK_NO_ERROR)
{
ProTKSprintf(line, "File %s has written successfully.", file_name);
ProUtilMsgPrint( "gen", "TEST %0s", line);
}
if (p_path != NULL)
free(p_path);
return 0;
}
/*============================================================================*\
Function: ProTestSelectExportType
Purpose: Select file format to export
\*============================================================================*/
ProError ProTestSelectExportType(
ProImportExportFile *p_type
)
{
ProError status;
int menu_id;
int action;
if( p_type == NULL )
return PRO_TK_BAD_INPUTS;
*p_type = PRO_UNDEFINED_FILE;
status = ProMenuFileRegister( (char*)"TkExport", (char*)"tkexport.mnu",
&menu_id );
TEST_CALL_REPORT( "ProMenuFileRegister()", "ProTestSelectExportType()",
status, status != PRO_TK_NO_ERROR );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"RELATION_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_RELATION_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"MODEL_INFO",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_MODEL_INFO );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"PROGRAM_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_PROGRAM_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"IGES_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_IGES_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"DXF_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_DXF_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"RENDER_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_RENDER_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"SLA_ASCII_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_SLA_ASCII_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"SLA_BINARY_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_SLA_BINARY_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"BOM_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_BOM_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"DWG_SETUP_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_DWG_SETUP_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"FEAT_INFO",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_FEAT_INFO );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"MFG_OPER_CL",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_MFG_OPER_CL );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"MFG_FEAT_CL",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_MFG_FEAT_CL );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"MATERIAL_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_MATERIAL_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"IGES_3D_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_IGES_3D_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"STEP_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_STEP_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"VDA_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_VDA_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"CGM_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_CGM_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"INVENTOR_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_INVENTOR_FILE );
ProMenubuttonActionSet( (char*)"TkExport", (char*)"FIAT_FILE",
(ProMenubuttonAction)ProTestExportFileTypeSet,
p_type, PRO_FIAT_FILE );
ProMenubuttonActionSet( (char*)"TkExport" , (char*)"TkExport",
(ProMenubuttonAction)ProMenuDelete,
p_type, -1 );
status = ProMenuCreate( PROMENUTYPE_MAIN, (char*)"TkExport", &menu_id );
TEST_CALL_REPORT( "ProMenuCreate()", "ProTestSelectExportType()",
status, status != PRO_TK_NO_ERROR );
if( status == PRO_TK_NO_ERROR )
{
status = ProMenuProcess( (char*)"TkExport", &action );
TEST_CALL_REPORT( "ProMenuProcess()", "ProTestSelectExportType()",
status, status != PRO_TK_NO_ERROR );
}
if( *p_type == PRO_UNDEFINED_FILE )
status = PRO_TK_GENERAL_ERROR;
return status;
}
/*============================================================================*\
Function: ProTestExportFileTypeSet
Purpose:
\*============================================================================*/
int ProTestExportFileTypeSet(
ProImportExportFile *p_type,
ProImportExportFile type_value
)
{
ProError status;
*p_type = type_value;
status = ProMenuDelete();
TEST_CALL_REPORT( "ProMenuDelete()", "ProTestExportFileTypeSet()",
status, status != PRO_TK_NO_ERROR );
return 0;
}
#define PRO_YES_TYPE 1
#define PRO_NO_TYPE 0
/*============================================================================*\
Function: ProTestPlotfileWrite
Purpose:
\*============================================================================*/
int ProTestPlotfileWrite (
ProAppData p_appdata)
{
static ProPlotOptions poPlotOpt =
{
"postscript", /* plotter name */
A4_SIZE_PLOT, /* paper size, not used really */
{0,0}, /* not used */
3, /* ouput quality */
1, /* user scale */
1, /* Pen Slew */
{0,0}, /* Pen Velocity */
2, /* Current page */
{0,0}, /* not used */
PRO_NO_TYPE, /* Segmented output */
PRO_YES_TYPE, /* Label */
PRO_NO_TYPE /* not used */
};
ProError status;
ProName wfilename;
ProUtilMsgPrint( "gen", "TEST %0s", "Enter export file name [QUIT]:" );
status = ProMessageStringRead( PRO_NAME_SIZE, wfilename );
TEST_CALL_REPORT( "ProMessageStringRead()", "ProTestPlotfileWrite()",
status, status != PRO_TK_NO_ERROR );
if( status != PRO_TK_NO_ERROR )
return -1;
status = ProPlotfileWrite(*((ProMdl*)p_appdata), wfilename, &poPlotOpt);
TEST_CALL_REPORT( "ProPlotfileWrite()", "ProTestPlotfileWrite()",
status, status != PRO_TK_NO_ERROR );
return (0);
}
/*============================================================================*\
Function: ProTestExportVRML
Purpose: Export to VRML format
\*============================================================================*/
int ProTestExportVRML(
ProAppData p_appdata)
{
ProError err;
ProBoolean direct = PRO_B_FALSE;
ProPath input_file;
ProPath output_path;
int act = 0;
char file_name[PRO_PATH_SIZE];
static ProUtilMenuButtons export_act[] = {
{"VRML", 0, TEST_CALL_PRO_MENU_DELETE},
{"Current",0 , 0},
{"Input file",1 ,0},
{"",0,0}
};
ProError ProUtilFileOpen(char *,char *);
err = ProUtilMenuIntValueSelect(export_act, &act);
TEST_CALL_REPORT("ProUtilMenuIntValueSelect()","ProTestExportVRML()",
err, err != PRO_TK_NO_ERROR);
if(act)
{
direct = PRO_B_TRUE;
err = ProUtilFileOpen((char*)"*.*", file_name);
TEST_CALL_REPORT(" ProUtilFileOpen()","ProTestExport()",
err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
{
ProUtilMsgPrint("gen", "TEST %0s", "Unable open file.");
return -1;
}
}
ProStringToWstring(input_file, file_name);
ProUtilMsgPrint("gen", "TEST %0s", "Enter output path :");
if( !ProUtilStringGet((wchar_t*)&output_path, NULL, PRO_LINE_SIZE))
return -1;
err = ProExportVRML(direct, *((ProMdl*)p_appdata), input_file, output_path);
TEST_CALL_REPORT ("ProExportVRML()", "ProTestExport()",
err, err != PRO_TK_NO_ERROR);
return(0);
}
/*============================================================================*\
Function: ProTestRasterMenu
Purpose: Setup compound menu for choice export options
\*============================================================================*/
int ProTestRasterMenu()
{
RasterSettings set;
ProError err;
int menu_id;
static char *menu[]={"Raster","Type","Inch","Size", "ExportRaster",""};
int ProTestDepthOpt();
int ProTestTypeOpt();
int ProTestInchOpt();
int ProTestSizeOpt();
int ProTestExportRaster();
/* default settings */
set.depth = PRORASTERDEPTH_8;
set.type = PRORASTERTYPE_TIFF;
set.inch = PRORASTERDPI_100;
set.size[0] = 4;
set.size[1] = 5;
err = ProMenuFileRegister((char*)"Raster", (char*)"tkraster.mnu", &menu_id);
err = ProMenubuttonActionSet((char*)"Raster", (char*)"Raster",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
err = ProMenubuttonActionSet((char*)"Raster", (char*)"DEPTH_8",
(ProMenubuttonAction)ProTestDepthOpt, &set, PRORASTERDEPTH_8);
err = ProMenubuttonActionSet((char*)"Raster", (char*)"DEPTH_24",
(ProMenubuttonAction)ProTestDepthOpt, &set, PRORASTERDEPTH_24);
err = ProMenuFileRegister((char*)"Type", (char*)"tktype.mnu", &menu_id);
err = ProMenubuttonActionSet((char*)"Type", (char*)"Type",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
err = ProMenubuttonActionSet((char*)"Type", (char*)"TYPE_BMP",
(ProMenubuttonAction)ProTestTypeOpt, &set, PRORASTERTYPE_BMP);
err = ProMenubuttonActionSet((char*)"Type", (char*)"TYPE_TIFF",
(ProMenubuttonAction)ProTestTypeOpt, &set, PRORASTERTYPE_TIFF);
err = ProMenubuttonActionSet((char*)"Type", (char*)"TYPE_EPS",
(ProMenubuttonAction)ProTestTypeOpt, &set, PRORASTERTYPE_EPS);
err = ProMenubuttonActionSet((char*)"Type", (char*)"TYPE_JPEG",
(ProMenubuttonAction)ProTestTypeOpt, &set, PRORASTERTYPE_JPEG);
err = ProMenuFileRegister((char*)"Inch", (char*)"tkinch.mnu", &menu_id);
err = ProMenubuttonActionSet((char*)"Inch", (char*)"Inch",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
err = ProMenubuttonActionSet((char*)"Inch", (char*)"DPI_100",
(ProMenubuttonAction)ProTestInchOpt, &set, PRORASTERDPI_100);
err = ProMenubuttonActionSet((char*)"Inch", (char*)"DPI_200",
(ProMenubuttonAction)ProTestInchOpt, &set, PRORASTERDPI_200);
err = ProMenubuttonActionSet((char*)"Inch", (char*)"DPI_300",
(ProMenubuttonAction)ProTestInchOpt, &set, PRORASTERDPI_300);
err = ProMenubuttonActionSet((char*)"Inch", (char*)"DPI_400",
(ProMenubuttonAction)ProTestInchOpt, &set, PRORASTERDPI_400);
err = ProMenuFileRegister((char*)"Size", (char*)"tksize.mnu", &menu_id);
err = ProMenubuttonActionSet((char*)"Size", (char*)"Size",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
err = ProMenubuttonActionSet((char*)"Size", (char*)"A",
(ProMenubuttonAction)ProTestSizeOpt, &set, A_SIZE_PLOT);
err = ProMenubuttonActionSet((char*)"Size", (char*)"B",
(ProMenubuttonAction)ProTestSizeOpt, &set, B_SIZE_PLOT);
err = ProMenubuttonActionSet((char*)"Size", (char*)"C",
(ProMenubuttonAction)ProTestSizeOpt, &set, C_SIZE_PLOT);
err = ProMenubuttonActionSet((char*)"Size", (char*)"D",
(ProMenubuttonAction)ProTestSizeOpt, &set, D_SIZE_PLOT);
err = ProMenubuttonActionSet((char*)"Size", (char*)"E",
(ProMenubuttonAction)ProTestSizeOpt, &set, E_SIZE_PLOT);
err = ProMenubuttonActionSet((char*)"Size", (char*)"VARIABLE",
(ProMenubuttonAction)ProTestSizeOpt, &set, VARIABLE_SIZE_PLOT);
err = ProMenuFileRegister((char*)"ExportRaster", (char*)"tkexportraster.mnu", &menu_id);
err = ProMenubuttonActionSet((char*)"ExportRaster", (char*)"ExportRaster",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
err = ProMenubuttonGenactionSet((char*)"ExportRaster", (char*)"Export",
(ProMenubuttonGenaction)ProTestExportRaster, &set, NULL, NULL,
NULL, NULL, NULL);
err = ProCompoundmenuCreate(menu, &menu_id);
ProMenubuttonHighlight((char*)"Type", (char*)"TYPE_BMP");
ProMenubuttonHighlight((char*)"Raster", (char*)"DEPTH_8");
ProMenubuttonHighlight((char*)"Inch", (char*)"DPI_100");
ProMenubuttonHighlight((char*)"Size", (char*)"A");
err = ProMenuProcess(menu[0], &menu_id);
return(0);
}
/*============================================================================*\
Function: ProTestTypeOpt
Purpose: Get type options
\*============================================================================*/
int ProTestTypeOpt(RasterSettings *set, int opt)
{
set->type = (ProRasterType)opt;
return(0);
}
/*============================================================================*\
Function: ProTestDepthOpt
Purpose: Get depth options
\*============================================================================*/
int ProTestDepthOpt(RasterSettings *set, int opt)
{
set->depth = (ProRasterDepth)opt;
return(0);
}
/*============================================================================*\
Function: ProTestInchOpt
Purpose: Get inch options
\*============================================================================*/
int ProTestInchOpt(RasterSettings *set, int opt)
{
set->inch = (ProDotsPerInch)opt;
return(0);
}
/*============================================================================*\
Function: ProTestSizeOpt
Purpose: Get size options
\*============================================================================*/
int ProTestSizeOpt(RasterSettings *set, int opt)
{
ProError err;
switch(opt)
{
case A_SIZE_PLOT :
set->size[0] = 1.7;
set->size[1] = 2.2;
break;
case B_SIZE_PLOT :
set->size[0] = 2.2;
set->size[1] = 3.4;
break;
case C_SIZE_PLOT :
set->size[0] = 3.4;
set->size[1] = 4.4;
break;
case D_SIZE_PLOT :
set->size[0] = 4.4;
set->size[1] = 6.8;
break;
case E_SIZE_PLOT :
set->size[0] = 6.8;
set->size[1] = 8.8;
break;
case F_SIZE_PLOT :
set->size[0] = 5.6;
set->size[1] = 8;
break;
case VARIABLE_SIZE_PLOT :
ProUtilMsgPrint("gen", "TEST %0s", "Enter width:");
err = ProMessageDoubleRead (NULL, &(set->size[0]));
if(err != PRO_TK_NO_ERROR)
return -1;
ProUtilMsgPrint("gen", "TEST %0s", "Enter height:");
err = ProMessageDoubleRead (NULL, &(set->size[1]));
if(err != PRO_TK_NO_ERROR)
return -1;
break;
}
return(0);
}
/*============================================================================*\
Function: ProTestExportRaster
Purpose: Export to raster formats
\*============================================================================*/
int ProTestExportRaster(RasterSettings *set)
{
ProError err;
int window_id;
ProPath output_file;
ProUtilMsgPrint("gen", "TEST %0s", "Enter output filename:");
if( !ProUtilStringGet((wchar_t*)&output_file, NULL, PRO_LINE_SIZE))
return -1;
err = ProWindowCurrentGet(&window_id);
TEST_CALL_REPORT("ProWindowCurrentGet()","ProTestPrint()",
err, err != PRO_TK_NO_ERROR);
err = ProRasterFileWrite(window_id, set->depth, set->size[0], set->size[1],
set->inch, set->type, output_file);
TEST_CALL_REPORT ("ProRasterFileWrite()", "ProTestExport()",
err, err != PRO_TK_NO_ERROR);
return(0);
}
/*====================================================================*\
FUNCTION : ProTestRedefImpfeat()
PURPOSE : Commands for testing import feature in Pro/TOOLKIT
\*====================================================================*/
int ProTestRedefImpfeat(ProMdl *mdl)
{
ProError err;
ProFeature *p_feats;
ProImportfeatRedefSource redef_source;
int menu_id, action;
static char *cmpnd_menu[] = {"TkImpfeatAttr","DONE",""};
static ProImportfeatAttr impfeatattr = { 1, 1, 0 };
err = ProUtilCollectSolidFeaturesWithFilter((ProSolid)*mdl,
(ProFeatureFilterAction)ProUtilImportfeatFilter, &p_feats);
if (err != PRO_TK_NO_ERROR)
{
ProUtilMsgPrint("gen", "TEST %0s", "No Import feats found.");
return (0);
}
err = ProMenuFileRegister( (char*)"TkImpfeatAttr", (char*)"tkimpfeatattr.mnu",
&menu_id );
TEST_CALL_REPORT( "ProMenuFileRegister()",
"ProTestRedefImpfeate()", err, err != PRO_TK_NO_ERROR );
ProMenubuttonActionSet( (char*)"TkImpfeatAttr", (char*)"TkImpfeatAttr",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
ProMenubuttonActionSet( (char*)"TkImpfeatAttr", (char*)"Join Surfaces",
(ProMenubuttonAction)ProTestImpfeatAttrMenuAction,
(ProAppData)&impfeatattr, JOIN_SURFACES );
ProMenubuttonActionSet( (char*)"TkImpfeatAttr", (char*)"Make Solid",
(ProMenubuttonAction)ProTestImpfeatAttrMenuAction,
(ProAppData)&impfeatattr, MAKE_SOLID);
ProMenubuttonActionSet( (char*)"TkImpfeatAttr", (char*)"Add Solid",
(ProMenubuttonAction)ProTestImpfeatAttrMenuAction,
(ProAppData)&impfeatattr, ADD_SOLID);
err = ProMenuModeSet ((char*)"TkImpfeatAttr", PROMENUMODE_DATA);
TEST_CALL_REPORT( "ProMenuModeSet()",
"ProTestRedefImpfeate()", err, err != PRO_TK_NO_ERROR );
err = ProMenuDatamodeSet ((char*)"TkImpfeatAttr", PRO_B_TRUE);
TEST_CALL_REPORT( "ProMenuDatamodeSet()",
"ProTestRedefImpfeat()", err, err != PRO_TK_NO_ERROR );
err = ProMenuFileRegister((char*)"DONE",(char*)"tketdone.mnu", &menu_id);
err = ProMenubuttonActionSet((char*)"DONE",(char*)"-Done",
(ProMenubuttonAction)ProUtilMenuKill, NULL, 2);
err = ProMenubuttonActionSet((char*)"DONE",(char*)"DONE",
(ProMenubuttonAction)ProMenuHold,NULL,0);
err = ProCompoundmenuCreate(cmpnd_menu, &menu_id);
TEST_CALL_REPORT("ProCompoundmenuCreate()",
"ProTestRedefImpfeat()", err, err != PRO_TK_NO_ERROR );
ProUtilMenubuttonHighlight ((char*)"TkImpfeatAttr", (char*)"Join Surfaces",
impfeatattr.join_surfaces);
ProUtilMenubuttonHighlight ((char*)"TkImpfeatAttr", (char*)"Make Solid",
impfeatattr.attempt_make_solid);
ProUtilMenubuttonHighlight ((char*)"TkImpfeatAttr", (char*)"Add Solid",
impfeatattr.cut_or_add);
err = ProMenuProcess( (char*)"TkImpfeatAttr", &action );
TEST_CALL_REPORT( "ProMenuProcess()",
"ProTestRedefImpfeat()", err, err != PRO_TK_NO_ERROR );
err = ProImportfeatRedefSourceInit(PRO_IMPORT_FEAT_REDEF_CHANGE_ATTR,
(void*)&impfeatattr, &redef_source);
TEST_CALL_REPORT("ProImportfeatRedefSourceInit()",
"ProTestRedefImpfeat()", err, err != PRO_TK_NO_ERROR );
err = ProImportfeatRedefine(p_feats, &redef_source);
TEST_CALL_REPORT("ProImportfeatRedefine()",
"ProTestRedefImpfeat()", err, (err != PRO_TK_NO_ERROR)&&
(err !=PRO_TK_NOT_IMPLEMENTED));
err = ProArrayFree((ProArray*)&p_feats);
TEST_CALL_REPORT("ProArrayFree()",
"ProTestRedefImpfeat()", err, err != PRO_TK_NO_ERROR );
return (0);
}