/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*--------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*--------------------------------------------------------------------*/
#include <ProDrawing.h>
#include <ProSelection.h>
#include <ProMessage.h>
#include <ProMenu.h>
#include <ProMdl.h>
#include <ProModelitem.h>
#include <ProWindows.h>
#include <ProDwgtable.h>
/*--------------------------------------------------------------------*\
Pro/DEVELOP includes
\*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*\
C System includes
\*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*\
Application includes
\*--------------------------------------------------------------------*/
#include "TestError.h"
#include "UtilString.h"
#include "UtilFiles.h"
#include "UtilMessage.h"
#include <ProTKRunTime.h>
/*--------------------------------------------------------------------*\
Application macros
\*--------------------------------------------------------------------*/
#define NEXT_SHEET 0
#define PREV_SHEET 1
#define SET_SHEET 2
/*--------------------------------------------------------------------*\
Application data types
\*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*\
Application global/external data
\*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*\
Functions prototype
\*--------------------------------------------------------------------*/
int ProTestDrwSheetAdd (ProDrawing* drawing);
int ProTestDrwSheetDel (ProDrawing* drawing);
int ProTestDrwSheetReorder (ProDrawing* drawing);
int ProTestDrwSheetSet (ProDrawing* drawing, int val);
int ProTestDrwSheetFormat (ProDrawing* drawing);
int ProTestDrwSheetScale (ProDrawing* drawing);
/*====================================================================*\
Function: ProTestDrwSheets
Purpose: Make user menu
\*====================================================================*/
int ProTestDrwSheets (ProDrawing* drawing)
{
int menu_id;
ProError status;
/* Setup the menus for test */
status = ProMenuFileRegister((char*)"-Sheets",(char*)"tksheet.mnu", &menu_id);
TEST_CALL_REPORT ("ProMenuFileRegister()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActionSet ((char*)"-Sheets", (char*)"-Previous",
(ProMenubuttonAction)ProTestDrwSheetSet, drawing, PREV_SHEET);
TEST_CALL_REPORT ("ProMenubuttonActionSet()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActionSet ((char*)"-Sheets", (char*)"-Next",
(ProMenubuttonAction)ProTestDrwSheetSet, drawing, NEXT_SHEET);
TEST_CALL_REPORT ("ProMenubuttonActionSet()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActionSet ((char*)"-Sheets", (char*)"-Set Current",
(ProMenubuttonAction)ProTestDrwSheetSet, drawing, SET_SHEET);
TEST_CALL_REPORT ("ProMenubuttonActionSet()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActionSet ((char*)"-Sheets", (char*)"-Add",
(ProMenubuttonAction)ProTestDrwSheetAdd, drawing, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActionSet ((char*)"-Sheets", (char*)"-Remove",
(ProMenubuttonAction)ProTestDrwSheetDel, drawing, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActionSet ((char*)"-Sheets", (char*)"-Reorder",
(ProMenubuttonAction)ProTestDrwSheetReorder, drawing, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActionSet ((char*)"-Sheets", (char*)"-Add Format",
(ProMenubuttonAction)ProTestDrwSheetFormat, drawing, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActionSet ((char*)"-Sheets", (char*)"-Scale",
(ProMenubuttonAction)ProTestDrwSheetScale, drawing, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActionSet ((char*)"-Sheets", (char*)"-Sheets",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenuCreate(PROMENUTYPE_MAIN,(char*)"-Sheets", &menu_id);
TEST_CALL_REPORT ("ProMenuCreate()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
status = ProMenuProcess((char*)"", &menu_id);
TEST_CALL_REPORT ("ProMenuProcess()", "ProTestDrwSheets()",
status, status != PRO_TK_NO_ERROR);
return(0);
}
/*====================================================================*\
Function: ProTestDrwSheetAdd
Purpose: Add sheet to the drawing
\*====================================================================*/
int ProTestDrwSheetAdd (ProDrawing* drawing)
{
int sheet_num;
ProError status;
ProCharLine c_name;
status = ProDrawingSheetCreate (*drawing, &sheet_num);
TEST_CALL_REPORT ("ProDrawingSheetCreate()", "ProTestDrwSheetAdd()",
status, status != PRO_TK_NO_ERROR);
if (status == PRO_TK_NO_ERROR)
{
ProTKSprintf (c_name, "Sheet %0d added to drawing.", sheet_num);
}
else
{
ProTKSprintf (c_name, "Cant add sheet to drawing.");
}
ProUtilMsgPrint("gen", "TEST %0s", c_name);
/* repaint the current window */
status = ProWindowRepaint (PRO_VALUE_UNUSED);
TEST_CALL_REPORT ("ProWindowRepaint()", "ProTestDrwSheetAdd()",
status, status != PRO_TK_NO_ERROR);
return (sheet_num);
}
/*====================================================================*\
Function: ProTestDrwSheetPrompt
Purpose: Read sheet number
\*====================================================================*/
int ProTestDrwSheetPrompt (ProDrawing drawing, char *prompt)
{
int sheet_num, num_sheets;
int i_range[2] = {1, 1};
ProError status;
ProCharLine c_line;
status = ProDrawingSheetsCount (drawing, &num_sheets);
TEST_CALL_REPORT ("ProDrawingSheetsCount()", "ProTestDrwSheetPrompt()",
status, status != PRO_TK_NO_ERROR);
if(status == PRO_TK_NO_ERROR)
{
i_range[1] = num_sheets;
ProTKSprintf (c_line, "%s [1-%0d]:", prompt, i_range[1]);
ProUtilMsgPrint ("gen", "TEST %0s", c_line);
status = ProMessageIntegerRead (i_range, &sheet_num);
if (status == PRO_TK_NO_ERROR)
return sheet_num;
#if 0
if (status == PRO_TK_MSG_USER_QUIT)
{
status = ProDrawingCurrentSheetGet(drawing, &sheet_num);
TEST_CALL_REPORT ("ProDrawingCurrentSheetGet()",
"ProTestDrwSheetPrompt()", status, status != PRO_TK_NO_ERROR);
if (status == PRO_TK_NO_ERROR)
return sheet_num;
}
#endif
}
return -1;
}
/*====================================================================*\
Function: ProTestDrwSheetDel
Purpose: Delete sheet from the drawing
\*====================================================================*/
int ProTestDrwSheetDel (ProDrawing* drawing)
{
int sheet_num;
ProError status;
ProCharLine c_line;
/* get sheet number on which to create view */
sheet_num = ProTestDrwSheetPrompt (*drawing,
(char*)"Enter sheet number for delete");
if (sheet_num == -1)
return(-1);
status = ProDrawingSheetDelete (*drawing, sheet_num);
TEST_CALL_REPORT ("ProDrawingSheetDelete()", "ProTestDrwSheetDel()",
status, status != PRO_TK_NO_ERROR);
if (status == PRO_TK_NO_ERROR)
{
ProTKSprintf(c_line, " Sheet No. %0d deleted from drawing.", sheet_num);
}
else
{
ProTKSprintf (c_line, "Cant delete sheet %0d from drawing.", sheet_num);
}
ProUtilMsgPrint("gen", "TEST %0s", c_line);
/* repaint the currentwindow */
status = ProWindowRepaint(PRO_VALUE_UNUSED);
TEST_CALL_REPORT ("ProWindowRepaint()", "ProTestDrwSheetDel()",
status, status != PRO_TK_NO_ERROR);
return (sheet_num);
}
/*====================================================================*\
Function: ProTestDrwSheetReorder
Purpose: Reorder sheet in the drawing
\*====================================================================*/
int ProTestDrwSheetReorder (ProDrawing* drawing)
{
int from_sheet, to_sheet;
ProError status;
from_sheet = ProTestDrwSheetPrompt (*drawing, (char*)"Enter sheet number to reorder");
if (from_sheet == -1)
return (-1);
to_sheet = ProTestDrwSheetPrompt (*drawing, (char*)"Enter new number");
if (to_sheet == -1)
return (-1);
status = ProDrawingSheetsReorder (*drawing, from_sheet, to_sheet);
TEST_CALL_REPORT ("ProDrawingSheetCreate()", "ProTestDrwSheetReorder()",
status, status != PRO_TK_NO_ERROR);
/* repaint the current window */
status = ProWindowRepaint(PRO_VALUE_UNUSED);
TEST_CALL_REPORT ("ProWindowRepaint()", "ProTestDrwSheetReorder()",
status, status != PRO_TK_NO_ERROR);
return (0);
}
/*====================================================================*\
Function: ProTestDrwSheetSet
Purpose: Setup current sheet in the drawing
\*====================================================================*/
int ProTestDrwSheetSet (ProDrawing* drawing, int val)
{
int num_sheets, cur_sheet;
ProError status;
status = ProDrawingSheetsCount (*drawing, &num_sheets);
TEST_CALL_REPORT ("ProDrawingSheetsCount()", "ProTestDrwSheetSet()",
status, status != PRO_TK_NO_ERROR);
if(val == SET_SHEET)
{
cur_sheet = ProTestDrwSheetPrompt(*drawing,
(char*)"Enter new number of sheet");
if (cur_sheet == -1)
return(-1);
}
else
{
status = ProDrawingCurrentSheetGet(*drawing, &cur_sheet);
TEST_CALL_REPORT ("ProDrawingCurrentSheetGet()", "ProTestDrwSheetSet()",
status, status != PRO_TK_NO_ERROR);
cur_sheet+=(val==NEXT_SHEET)?(+1):(-1);
cur_sheet =(cur_sheet>num_sheets)?(1):
((cur_sheet<1)?(num_sheets):cur_sheet);
}
status = ProDrawingCurrentSheetSet (*drawing, cur_sheet);
TEST_CALL_REPORT ("ProDrawingCurrentSheetGet()", "ProTestDrwSheetSet()",
status, status != PRO_TK_NO_ERROR);
status = ProWindowRepaint(PRO_VALUE_UNUSED);
TEST_CALL_REPORT ("ProWindowRepaint()", "ProTestDrwSheetSet()",
status, status != PRO_TK_NO_ERROR);
return (0);
}
/*====================================================================*\
Function: ProTestDrwSheetReorder
Purpose: Add/Replace drawing format in the current sheet
\*====================================================================*/
int ProTestDrwSheetFormat (ProDrawing* drawing)
{
int version;
ProError status;
ProMdl format;
ProLine filter = {'*','.','f','r','m','\0'};
ProPath *path_arr, sel_path, path;
ProName *name_arr;
ProMdlName w_name;
ProMdlExtension w_type;
ProType type = (ProType)PRO_MDL_DWGFORM;
/* No default dirs */
status = ProArrayAlloc (0, sizeof(ProPath), 1, (ProArray*)&path_arr);
TEST_CALL_REPORT ("ProArrayAlloc()", "ProTestDrwSheetFormat()",
status, status != PRO_TK_NO_ERROR);
status = ProArrayAlloc (0, sizeof(ProName), 1, (ProArray*)&name_arr);
TEST_CALL_REPORT ("ProArrayAlloc()", "ProTestDrwSheetFormat()",
status, status != PRO_TK_NO_ERROR);
/* Open file */
status = ProFileMdlnameOpen (NULL, filter, path_arr, name_arr,
NULL, NULL, sel_path);
TEST_CALL_REPORT ("ProFileMdlnameOpen()", "ProTestDrwSheetFormat()",
status, status != PRO_TK_NO_ERROR);
if (status == PRO_TK_NO_ERROR)
{
status = ProFileMdlnameParse (sel_path, path, w_name, w_type, &version);
TEST_CALL_REPORT ("ProFileMdlnameParse()", "ProTestDrwSheetFormat()",
status, status != PRO_TK_NO_ERROR);
status = ProPathMdlnameCreate (NULL, w_name, w_type, PRO_VALUE_UNUSED, path);
TEST_CALL_REPORT ("ProPathMdlnameCreate()", "ProTestDrwSheetFormat()",
status, status != PRO_TK_NO_ERROR);
status = ProMdlnameRetrieve (w_name, (ProMdlfileType)type, &format);
TEST_CALL_REPORT ("ProMdlnameRetrieve()", "ProTestDrwSheetFormat()",
status, status != PRO_TK_NO_ERROR);
status = ProDrawingFormatAdd (*drawing, 0, NULL, format, 0);
TEST_CALL_REPORT ("ProDrawingFormatAdd()", "ProTestDrwSheetFormat()",
status, status != PRO_TK_NO_ERROR);
}
status = ProArrayFree((ProArray*)&path_arr);
TEST_CALL_REPORT ("ProArrayFree()", "ProTestDrwSheetFormat()",
status, status != PRO_TK_NO_ERROR);
status = ProArrayFree((ProArray*)&name_arr);
TEST_CALL_REPORT ("ProArrayFree()", "ProTestDrwSheetFormat()",
status, status != PRO_TK_NO_ERROR);
status = ProWindowRepaint (PRO_VALUE_UNUSED);
TEST_CALL_REPORT ("ProWindowRepaint()", "ProTestDrwSheetFormat()",
status, status != PRO_TK_NO_ERROR);
return (0);
}
/*====================================================================*\
Function: ProTestDrwSheetScale
Purpose: Set scale for the current sheet
\*====================================================================*/
int ProTestDrwSheetScale (ProDrawing* drawing)
{
int sheet;
double scale;
double range[2] = {1e-3, 1e3};
ProCharLine line;
ProError status;
status = ProDrawingCurrentSheetGet (*drawing, &sheet);
TEST_CALL_REPORT ("ProDrawingCurrentSheetGet()", "ProTestDrwSheetScale()",
status, status != PRO_TK_NO_ERROR);
status = ProDrawingScaleGet (*drawing, NULL, sheet, &scale);
TEST_CALL_REPORT ("ProDrawingScaleGet()", "ProTestDrwSheetScale()",
status, status != PRO_TK_NO_ERROR);
ProTKSprintf(line, " Input scale(%2.2f) for sheet[%d] (%2.2f...%2.2f): ",
scale, sheet, range[0], range[1]);
ProUtilMsgPrint("gen", "TEST %0s", line);
if (ProMessageDoubleRead (range, &scale) != PRO_TK_NO_ERROR)
return (0);
status = ProDrawingScaleSet (*drawing, NULL, sheet, scale);
TEST_CALL_REPORT ("ProDrawingScaleSet()", "ProTestDrwSheetScale()",
status, status != PRO_TK_NO_ERROR);
status = ProDwgDraftRegenerate (*drawing);
TEST_CALL_REPORT ("ProDwgDraftRegenerate()", "ProTestDrwSheetScale()",
status, status != PRO_TK_NO_ERROR);
status = ProWindowRepaint(PRO_VALUE_UNUSED);
TEST_CALL_REPORT ("ProWindowRepaint()", "ProTestDrwSheetScale()",
status, status != PRO_TK_NO_ERROR);
return(0);
}