/*
Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*----------------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*----------------------------------------------------------------------------*/
#include "ProSelection.h"
#include "ProMessage.h"
#include "ProMenu.h"
#include "ProMdl.h"
#include "ProDrawing.h"
#include "ProUtil.h"
#include "ProWindows.h"
#include "ProCsys.h"
#include "ProDwgtable.h"
#include "ProDrawingView.h"
/*----------------------------------------------------------------------------*\
Application includes
\*----------------------------------------------------------------------------*/
#include "UtilMessage.h"
#include "UtilMenu.h"
#include "UtilFiles.h"
#include <ProTKRunTime.h>
#include <UtilMatrix.h>
/*----------------------------------------------------------------------------*\
Application macros
\*----------------------------------------------------------------------------*/
#define SET_SCALE 1
#define MOVE 2
#define DELETE_VIEW 3
#define DISPLAY_STATUS 4
#define VIEW_PROJECTION 0
#define VIEW_GENERAL 1
#define DISPLAY_STYLE 0
#define QUILT_HRL 1
#define TAN_DISPLAY 2
#define CABLE_DISPLAY 3
#define CONCEPT_MODEL 4
#define WELD_XSEC 5
#define DRAWING_VIEWS ".dvw"
ProError ProTestViewVisibleAreaFull();
ProError ProTestViewVisibleAreaHalf();
ProError ProTestViewMenuDeleteAndPop();
/*===========================================================================*\
Function : ProTestDrawingView
Purpose :
\*===========================================================================*/
int ProTestDrawingView(ProMdl *mod)
{
int menu_id;
ProDrawing drawing;
ProError err;
int ProTestDwgInfo(ProDrawing drawing);
int ProTestDwgViewModify(ProDrawing drawing, int arg);
int ProTestViewCreate(ProDrawing drawing);
ProError ProTestDwgViewName(ProDrawing drawing);
ProError ProTestViewVisibleAreaSetup();
if (mod == NULL)
err = ProMdlCurrentGet ((ProMdl*)&drawing);
else
drawing = (ProDrawing)*mod;
err = ProMenuFileRegister((char*)"DrawView",(char*)"tkdrwview.mnu", &menu_id);
err = ProMenubuttonActionSet((char*)"DrawView",(char*)"Info",
(ProMenubuttonAction)ProTestDwgInfo, drawing, 0);
err = ProMenubuttonActionSet((char*)"DrawView",(char*)"Set Scale",
(ProMenubuttonAction)ProTestDwgViewModify, drawing, SET_SCALE);
err = ProMenubuttonActionSet((char*)"DrawView",(char*)"Move",
(ProMenubuttonAction)ProTestDwgViewModify, drawing, MOVE);
err = ProMenubuttonActionSet((char*)"DrawView",(char*)"Delete",
(ProMenubuttonAction)ProTestDwgViewModify, drawing, DELETE_VIEW);
err = ProMenubuttonActionSet((char*)"DrawView",(char*)"SetDisplay",
(ProMenubuttonAction)ProTestDwgViewModify, drawing, DISPLAY_STATUS);
err = ProMenubuttonActionSet((char*)"DrawView",(char*)"Create",
(ProMenubuttonAction)ProTestViewCreate, drawing, 0);
err = ProMenubuttonActionSet((char*)"DrawView",(char*)"SetView Name",
(ProMenubuttonAction)ProTestDwgViewName, drawing, 0);
err = ProMenubuttonActionSet((char*)"DrawView",(char*)"Set Visible area",
(ProMenubuttonAction)ProTestViewVisibleAreaSetup, NULL, 0);
err = ProMenubuttonActionSet((char*)"DrawView",(char*)"DrawView",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
err = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"DrawView",&menu_id);
err = ProMenuProcess((char*)"", &menu_id);
return (0);
}
/*===========================================================================*\
Function : ProTestViewInfoPrint
Purpose :
\*===========================================================================*/
int ProTestViewInfoPrint (ProDrawing drawing, ProView view, FILE *fp_dview)
{
ProSolid solid;
ProError err;
ProPoint3d out_line[2];
ProMdldata data;
ProName name;
ProMdlName modelName;
ProMdlExtension modelExtension;
ProCharLine model_name, type;
double scale = 0.0;
ProDrawingViewDisplay disp_status;
char* ProTesDisplayStyleToStr(ProDisplayStyle );
char* ProTestTanedgeDisplayToStr(ProTanedgeDisplay );
char* ProTestCableDisplayToStr(ProCableDisplay );
err = ProDrawingViewSolidGet(drawing, view, &solid);
TEST_CALL_REPORT ("ProDrawingViewSolidGet()",
"ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR);
err = ProMdlMdlnameGet (ProSolidToMdl(solid), modelName);
err = ProMdlExtensionGet (ProSolidToMdl(solid), modelExtension);
ProWstringToString(model_name, modelName);
ProWstringToString(type, modelExtension);
ProTKFprintf(fp_dview, "Model displayed in a view:\t%s.%s\t\n",
model_name, type);
err = ProDrawingViewNameGet (drawing, view, name);
TEST_CALL_REPORT ("ProDrawingViewNameGet()",
"ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR);
ProTKFprintf(fp_dview, "View name: %s\n",
ProWstringToString (model_name, name));
err = ProDrawingViewScaleGet(drawing, view, &scale);
TEST_CALL_REPORT ("ProDrawingViewScaleGet()",
"ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR);
err = ProDrawingViewDisplayGet (drawing, view, &disp_status);
TEST_CALL_REPORT ("ProDrawingViewDisplayGet()",
"ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR);
ProTKFprintf(fp_dview, "Display Style: %s\n",
ProTesDisplayStyleToStr (disp_status.style));
ProTKFprintf(fp_dview, "Tanedge Display: %s\n",
ProTestTanedgeDisplayToStr (disp_status.tangent_edge_display));
ProTKFprintf(fp_dview, "Cable Display: %s\n",
ProTestCableDisplayToStr (disp_status.cable_display));
ProTKFprintf(fp_dview, "Quilt Hlr: %s\n",
disp_status.quilt_hlr ? "TRUE" : "FALSE" );
ProTKFprintf(fp_dview, "Concept Model: %s\n",
disp_status.concept_model ? "TRUE" : "FALSE" );
ProTKFprintf(fp_dview, "Weld Xsec: %s\n",
disp_status.weld_xsec ? "TRUE" : "FALSE" );
err = ProDrawingViewOutlineGet (drawing, view, out_line);
TEST_CALL_REPORT ("ProDrawingViewOutlineGet()",
"ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR);
ProTKFprintf(fp_dview, "Out line: x_pnt[1] = %6.1f x_pnt[2] = %6.1f "
"x_pnt[3] = %6.1f\n", out_line[0][0], out_line[0][1],
out_line[0][2]);
ProTKFprintf(fp_dview, "Out line: y_pnt[1] = %6.1f y_pnt[2] = %6.1f "
"y_pnt[3] = %6.1f\n", out_line[1][0], out_line[1][1],
out_line[1][2]);
return(0);
}
/*===========================================================================*\
Function : ProTestDwgInfo
Purpose :
\*===========================================================================*/
int ProTestDwgInfo(ProDrawing drawing)
{
ProCharLine fname;
ProName wfname;
FILE *fp_dview;
ProError err;
int n_views = 0, i;
ProView *views = NULL;
fp_dview = ProUtilGenFilePtr((ProMdl)drawing, (char*)DRAWING_VIEWS, fname, (char*)"w");
if (fp_dview == NULL)
return (-1);
ProTKFprintf(fp_dview, "File name : %s\n", fname);
err = ProDrawingViewsCollect(drawing, &views);
TEST_CALL_REPORT ("ProDrawingViewsCollect()",
"ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR
&& err != PRO_TK_E_NOT_FOUND);
if (err == PRO_TK_NO_ERROR)
{
err = ProArraySizeGet(views, &n_views);
TEST_CALL_REPORT ("ProArraySizeGet()",
"ProTestDwgInfo()", err, err != PRO_TK_NO_ERROR);
for(i = 0; i < n_views; i++)
{
ProTKFprintf(fp_dview, "\nView(%d) ", i);
ProTestViewInfoPrint (drawing, views[i], fp_dview);
}
}
err = ProArrayFree ((ProArray*)&views);
fclose(fp_dview);
ProStringToWstring(wfname, fname);
err = ProInfoWindowDisplay(wfname, NULL, NULL);
return (0);
}
/*===========================================================================*\
Function : ProTestViewDispChoose
Purpose :
\*===========================================================================*/
int ProTestViewDispChoose (ProDrawingViewDisplay *disp_status)
{
ProError err;
int menu_id;
void ProTestViewDispSet (ProDrawingViewDisplay *, int );
err = ProMenuFileRegister((char*)"ViewDisplay",(char*)"tkviewdisp.mnu", &menu_id);
err = ProMenubuttonActionSet((char*)"ViewDisplay",(char*)"ViewDisplay",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
err = ProMenubuttonActionSet((char*)"ViewDisplay",(char*)"DispStyle",
(ProMenubuttonAction)ProTestViewDispSet, disp_status, DISPLAY_STYLE);
err = ProMenubuttonActionSet((char*)"ViewDisplay",(char*)"QuiltHrl",
(ProMenubuttonAction)ProTestViewDispSet, disp_status, QUILT_HRL);
err = ProMenubuttonActionSet((char*)"ViewDisplay",(char*)"TanDisplay",
(ProMenubuttonAction)ProTestViewDispSet, disp_status, TAN_DISPLAY);
err = ProMenubuttonActionSet((char*)"ViewDisplay",(char*)"CableDisplay",
(ProMenubuttonAction)ProTestViewDispSet, disp_status, CABLE_DISPLAY);
err = ProMenubuttonActionSet((char*)"ViewDisplay",(char*)"ConceptModel",
(ProMenubuttonAction)ProTestViewDispSet, disp_status, CONCEPT_MODEL);
err = ProMenubuttonActionSet((char*)"ViewDisplay",(char*)"WeldXsec",
(ProMenubuttonAction)ProTestViewDispSet, disp_status, WELD_XSEC);
err = ProMenubuttonActionSet((char*)"ViewDisplay",(char*)"Done",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
err = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"ViewDisplay",&menu_id);
err = ProMenuProcess((char*)"ViewDisplay", &menu_id);
return (0);
}
/*===========================================================================*\
Function : ProTestDwgViewModify
Purpose :
\*===========================================================================*/
int ProTestDwgViewModify(ProDrawing drawing, int arg)
{
double scale;
ProCharLine message, astr;
ProModelitem sel_item;
ProBoolean delete_children;
ProSelection *sel;
ProView view;
ProError err;
ProSolid solid;
int n_sel, view_id = 0;
ProPoint3d pnt, to_pnt, sel_pnt;
ProVector tvec;
ProMatrix trans;
ProMouseButton btn;
ProDrawingViewDisplay disp_status;
/* Pick the view */
ProUtilMsgPrint("gen", "TEST %0s", "Select a feature to identify a view");
err = ProSelect((char*)"feature", 1, NULL, NULL, NULL, NULL, &sel, &n_sel);
if (n_sel <= 0 || err!=PRO_TK_NO_ERROR)
return (0);
err = ProSelectionViewGet(sel[0], &view);
TEST_CALL_REPORT ("ProSelectionViewGet()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
err = ProSelectionPoint3dGet (sel[0], pnt);
TEST_CALL_REPORT ("ProSelectionViewGet()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
err = ProSelectionModelitemGet (sel[0], &sel_item);
TEST_CALL_REPORT ("ProSelectionViewGet()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
err = ProDrawingViewIdGet(drawing, view, &view_id);
err = ProDrawingViewTransformGet (drawing, view, PRO_B_TRUE, trans);
TEST_CALL_REPORT ("ProDrawingViewTransformGet()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
err = ProPntTrfEval (pnt, trans, sel_pnt);
TEST_CALL_REPORT ("ProPntTrfEval()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
switch (arg)
{
case SET_SCALE : /* Set the view scale */
/* Get the current scale to use as a default */
err = ProDrawingViewScaleGet(drawing, view, &scale);
TEST_CALL_REPORT ("ProDrawingViewScaleGet()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
ProTKSprintf(message,"scale [%5.2f] ",scale);
ProTKSprintf(astr, "Enter %s: ", message);
ProUtilMsgPrint("gen", "TEST %0s", astr);
if(ProMessageDoubleRead(NULL, &scale) != PRO_TK_NO_ERROR)
return (0);
err = ProDrawingViewScaleSet(drawing, view, scale);
TEST_CALL_REPORT ("ProDrawingViewScaleSet()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
break;
case MOVE : /* Translate the view */
ProUtilMsgPrint("gen", "TEST %0s", "Select the new position: ");
err = ProMousePickGet(PRO_LEFT_BUTTON, &btn, to_pnt);
TEST_CALL_REPORT ("ProMousePickGet()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
tvec[0] = to_pnt[0] - sel_pnt[0];
tvec[1] = to_pnt[1] - sel_pnt[1];
tvec[2] = to_pnt[2] - sel_pnt[2];
err = ProDrawingViewMove(drawing, view, tvec);
TEST_CALL_REPORT ("ProDrawingViewMove()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
break;
case DELETE_VIEW :
ProUtilMsgPrint("gen", "TEST %0s", "Delete children too [N] ?");
delete_children = (ProBoolean)ProUtilYesnoGet((char*)"No");
err = ProDrawingViewSolidGet (drawing, view, &solid);
TEST_CALL_REPORT ("ProDrawingViewSolidGet()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
err = ProDrawingViewDelete(drawing, view, delete_children);
TEST_CALL_REPORT ("ProDrawingViewDelete()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
break;
case DISPLAY_STATUS :
err = ProDrawingViewDisplayGet (drawing, view, &disp_status);
TEST_CALL_REPORT ("ProDrawingViewDisplayGet()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
ProTestViewDispChoose (&disp_status);
err = ProDrawingViewDisplaySet (drawing, view, &disp_status);
TEST_CALL_REPORT ("ProDrawingViewDisplaySet()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
break;
default:
break;
}
err = ProWindowRepaint (PRO_VALUE_UNUSED);
TEST_CALL_REPORT ("ProWindowRepaint()",
"ProTestDwgViewModify()", err, err != PRO_TK_NO_ERROR);
return (0);
}
/*===========================================================================*\
Function : ProTestViewDispSet
Purpose :
\*===========================================================================*/
void ProTestViewDispSet (ProDrawingViewDisplay *disp_status, int action)
{
ProError err;
static ProUtilMenuButtons disp_style[] = {
{"DisplayStyle", 0, TEST_CALL_PRO_MENU_DELETE},
{"Default", PRO_DISPSTYLE_DEFAULT, 0},
{"Wireframe", PRO_DISPSTYLE_WIREFRAME, 0},
{"HiddenLine", PRO_DISPSTYLE_HIDDEN_LINE, 0},
{"NoHidden", PRO_DISPSTYLE_NO_HIDDEN, 0},
{"Shaded", PRO_DISPSTYLE_SHADED, 0},
{"FollowEnvironment", PRO_DISPSTYLE_FOLLOW_ENVIRONMENT, 0},
{"",0,0}
};
static ProUtilMenuButtons cab_disp[] = {
{"CableDisplay", 0, TEST_CALL_PRO_MENU_DELETE},
{"Default", PRO_CABLEDISP_DEFAULT, 0},
{"Centerline", PRO_CABLEDISP_CENTERLINE, 0},
{"Thick", PRO_CABLEDISP_THICK, 0},
{"",0,0}
};
static ProUtilMenuButtons tang_disp[] = {
{"TanedgeDisplay", 0, TEST_CALL_PRO_MENU_DELETE},
{"Default", PRO_TANEDGE_DEFAULT, 0},
{"None", PRO_TANEDGE_NONE, 0},
{"Centerline", PRO_TANEDGE_CENTERLINE, 0},
{"Phantom", PRO_TANEDGE_PHANTOM, 0},
{"Dimmed", PRO_TANEDGE_DIMMED, 0},
{"Solid", PRO_TANEDGE_SOLID, 0},
{"",0,0}
};
switch (action)
{
case DISPLAY_STYLE:
err = ProUtilMenuIntValueSelect(disp_style,
(int*)&disp_status->style);
break;
case QUILT_HRL:
ProUtilMsgPrint("gen", "TEST %0s", "Quilt hrl (Yes/No)? [N]:");
disp_status->quilt_hlr = (ProBoolean)ProUtilYesnoGet ((char*)"No");
break;
case TAN_DISPLAY:
err = ProUtilMenuIntValueSelect(tang_disp,
(int*)&disp_status->tangent_edge_display);
break;
case CABLE_DISPLAY:
err = ProUtilMenuIntValueSelect(cab_disp,
(int*)&disp_status->cable_display);
break;
case CONCEPT_MODEL:
ProUtilMsgPrint("gen", "TEST %0s", "Concept Model (Yes/No)? [N]:");
disp_status->concept_model = (ProBoolean)ProUtilYesnoGet ((char*)"No");
break;
case WELD_XSEC:
ProUtilMsgPrint("gen", "TEST %0s", "Weld Xsec (Yes/No)? [N]:");
disp_status->weld_xsec = (ProBoolean)ProUtilYesnoGet ((char*)"No");
break;
default: break;
}
}
/*===========================================================================*\
Function : ProTestViewCreate
Purpose :
\*===========================================================================*/
int ProTestViewCreate(ProDrawing drawing)
{
ProError err;
ProSolid solid = NULL;
ProModelitem sel_item;
ProSelection *sel;
int n_sheet = 0, view_type = 0, n_sel = 0, win_id, old_win_id;
ProBoolean exploded = PRO_B_FALSE;
ProPoint3d sel_pnt;
double scale = 0.0;
ProView view, parent_view;
ProCharLine sel_path, line;
ProPath current_dir, ch_dir, def_path;
ProType type;
ProMdlName w_name;
ProMdlExtension w_type;
ProMouseButton btn;
ProCsys csys;
ProBoolean tree_flag=PRO_B_FALSE;
ProMatrix orientation;
ProMatrix def_matrix =
{
{ 0.921061, 0.000000, 0.389418, 0.000000},
{-0.305042, 0.621610, 0.721492, 0.000000},
{-0.242066, -0.783327, 0.572541, 0.000000},
{ 0.000000, 0.000000, 0.000000, 1.000000}
};
ProGeomitemdata* p_csys_data_ptr;
static ProUtilMenuButtons create_opt[] = {
{"CreateOpt", 0, TEST_CALL_PRO_MENU_DELETE},
{"General", VIEW_GENERAL, 0},
{"Projection", VIEW_PROJECTION, 0},
{"",0,0}
};
err = ProUtilMenuIntValueSelect(create_opt, &view_type);
err = ProDrawingCurrentSheetGet (drawing, &n_sheet);
TEST_CALL_REPORT ("ProDrawingCurrentSheetGet()",
"ProTestViewCreate()", err, err != PRO_TK_NO_ERROR);
if (view_type)
{
err = ProUtilFileOpen ((char*)"*.*", sel_path);
if (err != PRO_TK_NO_ERROR)
return (0);
err = ProDirectoryCurrentGet(current_dir);
ProStringToWstring (ch_dir, sel_path);
err = ProFileMdlnameParse(ch_dir, def_path, w_name, w_type, NULL);
err = ProDirectoryChange(def_path);
err = ProPathMdlnameCreate(NULL, w_name, w_type, PRO_VALUE_UNUSED, def_path);
ProWstringToString(line, def_path);
if(ProUtilConfirmNameType(line, sel_path, &type) != PRO_TK_BAD_INPUTS)
{
err = ProMdlnameRetrieve(w_name, (ProMdlfileType)type, (ProMdl*)&solid);
TEST_CALL_REPORT ("ProMdlnameRetrieve()",
"ProTestViewCreate()", err, err != PRO_TK_NO_ERROR);
}
err = ProDirectoryChange(current_dir);
err = ProDrawingSolidAdd(drawing, solid);
TEST_CALL_REPORT ("ProDrawingSolidAdd()",
"ProTestViewCreate()", err, err != PRO_TK_NO_ERROR &&
err != PRO_TK_E_IN_USE);
if (type == PRO_ASSEMBLY)
{
ProUtilMsgPrint("gen", "TEST %0s", "Create exploded view? [N]:");
exploded = (ProBoolean)ProUtilYesnoGet ((char*)"No");
}
ProUtilMsgPrint("gen", "TEST %0s", "Pick point for view");
while(ProMousePickGet(PRO_LEFT_BUTTON, &btn, sel_pnt) !=
PRO_TK_NO_ERROR);
sel_pnt[2] = 0;
ProUtilMsgPrint("gen", "TEST %0s", "Enter view scale factor");
if (ProMessageDoubleRead(NULL, &scale) != PRO_TK_NO_ERROR)
return (0);
err = ProWindowCurrentGet(&old_win_id);
err= ProAccessorywindowWithTreeMdlnameCreate(w_name,type,tree_flag, &win_id);
err = ProMdlDisplay(solid);
err = ProWindowCurrentSet(win_id);
ProUtilMsgPrint("gen", "TEST %0s", "Select csys");
err = ProSelect((char*)"csys", 1, NULL, NULL, NULL, NULL, &sel, &n_sel);
if (err != PRO_TK_NO_ERROR || n_sel < 1)
ProUtilMatrixCopy (def_matrix, orientation);
else
{
ProUtilMatrixCopy (NULL, orientation);
err = ProSelectionModelitemGet (sel[0], &sel_item);
err = ProCsysInit (solid, sel_item.id, &csys);
err = ProCsysDataGet(csys, &p_csys_data_ptr);
p_csys_data_ptr->data.p_csys_data->origin[0] =
p_csys_data_ptr->data.p_csys_data->origin[1] =
p_csys_data_ptr->data.p_csys_data->origin[2] = 0.0;
err = ProMatrixInit(p_csys_data_ptr->data.p_csys_data->x_vector,
p_csys_data_ptr->data.p_csys_data->y_vector,
p_csys_data_ptr->data.p_csys_data->z_vector,
p_csys_data_ptr->data.p_csys_data->origin, orientation);
}
ProWindowCurrentSet(old_win_id);
ProWindowDelete(win_id);
err = ProDrawingGeneralviewCreate (drawing, solid, n_sheet, exploded,
sel_pnt, scale, orientation, &view);
TEST_CALL_REPORT ("ProDrawingGeneralviewCreate()",
"ProTestViewCreate()", err, err != PRO_TK_NO_ERROR);
}
else
{
ProUtilMsgPrint("gen", "TEST %0s", "Select a parent view.");
err = ProSelect((char*)"feature", 1, NULL, NULL, NULL, NULL, &sel, &n_sel);
if (err != PRO_TK_NO_ERROR || n_sel < 1)
return (0);
err = ProSelectionViewGet(sel[0], &parent_view);
TEST_CALL_REPORT ("ProSelectionViewGet()",
"ProTestViewCreate()", err, err != PRO_TK_NO_ERROR);
err = ProSelectionModelitemGet (sel[0], &sel_item);
TEST_CALL_REPORT ("ProSelectionModelitemGet()",
"ProTestViewCreate()", err, err != PRO_TK_NO_ERROR);
err = ProMdlTypeGet (sel_item.owner, (ProMdlType*)&type);
TEST_CALL_REPORT ("ProMdlTypeGet()",
"ProTestViewCreate()", err, err != PRO_TK_NO_ERROR);
if (type == PRO_ASSEMBLY)
{
ProUtilMsgPrint("gen", "TEST %0s", "Create exploded view? [N]:");
exploded = (ProBoolean)ProUtilYesnoGet ((char*)"No");
}
ProUtilMsgPrint("gen", "TEST %0s", "Pick point for view");
while (ProMousePickGet(PRO_LEFT_BUTTON, &btn, sel_pnt) !=
PRO_TK_NO_ERROR);
err = ProDrawingProjectedviewCreate (drawing, parent_view, exploded,
sel_pnt, &view);
TEST_CALL_REPORT ("ProDrawingProjectedviewCreate()",
"ProTestViewCreate()", err, err != PRO_TK_NO_ERROR);
}
return (0);
}
/*===========================================================================*\
Function : ProTesDisplayStyleToStr
Purpose :
\*===========================================================================*/
char* ProTesDisplayStyleToStr(
ProDisplayStyle type
)
{
switch (type)
{
case PRO_DISPSTYLE_DEFAULT : return (char*)"DEFAULT";
case PRO_DISPSTYLE_WIREFRAME : return (char*)"WIREFRAME";
case PRO_DISPSTYLE_HIDDEN_LINE : return (char*)"HIDDEN_LINE";
case PRO_DISPSTYLE_NO_HIDDEN: return (char*)"NO_HIDDEN";
case PRO_DISPSTYLE_SHADED : return (char*)"SHADED";
case PRO_DISPSTYLE_FOLLOW_ENVIRONMENT: return (char*)"FOLLOW ENVIRONMENT";
default : return (char*)"INVALID";
}
}
/*===========================================================================*\
Function : ProTestTanedgeDisplayToStr
Purpose :
\*===========================================================================*/
char* ProTestTanedgeDisplayToStr(
ProTanedgeDisplay type
)
{
switch (type)
{
case PRO_TANEDGE_DEFAULT : return (char*)"DEFAULT";
case PRO_TANEDGE_NONE : return (char*)"NONE";
case PRO_TANEDGE_CENTERLINE : return (char*)"CENTERLINE";
case PRO_TANEDGE_PHANTOM: return (char*)"PHANTOM";
case PRO_TANEDGE_DIMMED : return (char*)"DIMMED";
case PRO_TANEDGE_SOLID : return (char*)"SOLID";
default : return (char*)"INVALID";
}
}
/*===========================================================================*\
Function : ProTesDisplayStyleToStr
Purpose :
\*===========================================================================*/
char* ProTestCableDisplayToStr(
ProCableDisplay type
)
{
switch (type)
{
case PRO_CABLEDISP_DEFAULT : return (char*)"DEFAULT";
case PRO_CABLEDISP_CENTERLINE : return (char*)"CENTERLINE";
case PRO_CABLEDISP_THICK: return (char*)"THICK";
default : return (char*)"INVALID";
}
}
/*====================================================================*
Function : ProTestDwgViewName
Purpose : To set view name
\*====================================================================*/
ProError ProTestDwgViewName (ProDrawing drawing)
{
ProSelection *view_sel;
int num_sel,max_length = 32;
ProName string;
ProView view;
ProError status;
ProFileName WMSGFIL = {'u','s','e','r','m','s','g','.','t','x','t','\0'};
/*------------------------------------------------------------*\
Get the current model
\*------------------------------------------------------------*/
status = ProMdlCurrentGet ((ProMdl*)&drawing);
TEST_CALL_REPORT ("ProMdlCurrentGet", "ProTestDwgViewName",
status, status != PRO_TK_NO_ERROR);
if (status != PRO_TK_NO_ERROR) return(status);
/*------------------------------------------------------------*\
Get view to set view name
\*------------------------------------------------------------*/
status = ProMessageDisplay (WMSGFIL, (char*)"USER %0s",
"Select view to set view name");
TEST_CALL_REPORT ("ProMessageDisplay", "ProTestDwgViewName",
status, status != PRO_TK_NO_ERROR);
status = ProSelect ((char*)"dwg_view", 1, NULL, NULL, NULL, NULL, &view_sel, &num_sel);
TEST_CALL_REPORT ("ProSelect", "ProTestDwgViewName", status, status != PRO_TK_NO_ERROR);
if (status != PRO_TK_NO_ERROR) return(status);
status = ProSelectionViewGet (view_sel[0], &view);
TEST_CALL_REPORT ("ProSelectionViewGet", "ProTestDwgViewName",
status, status != PRO_TK_NO_ERROR);
/*------------------------------------------------------------*\
Get view name to set
\*------------------------------------------------------------*/
status = ProMessageDisplay (WMSGFIL, (char*)"USER %0s",
"Enter view name to set");
TEST_CALL_REPORT ("ProMessageDisplay", "ProTestDwgViewName", status,
status != PRO_TK_NO_ERROR);
status = ProMessageStringRead (max_length, string);
TEST_CALL_REPORT ("ProMessageStringRead", "ProTestDwgViewName",
status, status != PRO_TK_NO_ERROR);
status = ProDrawingViewNameSet (drawing, view, string);
TEST_CALL_REPORT ("ProDrawingViewNameSet", "ProTestDwgViewName",
status, status != PRO_TK_NO_ERROR);
status = ProDrawingtreeRefresh (drawing, PRO_VALUE_UNUSED);
TEST_CALL_REPORT ("ProDrawingtreeRefresh", "ProTestDwgViewName",
status, status != PRO_TK_NO_ERROR);
return (status);
}
/*====================================================================*
Function : ProTestViewMenuDeleteAndPop()
Purpose : Deletes the current menu and pops up its parent
\*====================================================================*/
ProError ProTestViewMenuDeleteAndPop()
{
ProError status;
status = ProMenuDelete();
TEST_CALL_REPORT ("ProMenuDelete", "ProTestViewMenuDeleteAndPop", status,
status != PRO_TK_NO_ERROR );
status = ProMenuPop();
TEST_CALL_REPORT ("ProMenuPop", "ProTestViewMenuDeleteAndPop", status,
status != PRO_TK_NO_ERROR );
return (PRO_TK_NO_ERROR);
}
/*====================================================================*
Function : ProTestViewVisibleAreaSetup
Purpose : Setup the Visible area menu of the User Guide example
\*====================================================================*/
ProError ProTestViewVisibleAreaSetup ()
{
int menu_id, action;
ProError status;
status = ProMenuFileRegister ((char*)"TKViewVisibleArea", (char*)"tkviewvisiblearea.mnu",
&menu_id);
TEST_CALL_REPORT ("ProMenuFileRegister", "ProTestViewVisibleAreaSetup",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActionSet ((char*)"TKViewVisibleArea", (char*)"Full View",
(ProMenubuttonAction)ProTestViewVisibleAreaFull, NULL, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestViewVisibleAreaSetup",
status, status != PRO_TK_NO_ERROR );
status = ProMenubuttonActionSet ((char*)"TKViewVisibleArea", (char*)"Half View",
(ProMenubuttonAction)ProTestViewVisibleAreaHalf, NULL, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestViewVisibleAreaSetup",
status, status != PRO_TK_NO_ERROR );
status = ProMenubuttonActionSet ((char*)"TKViewVisibleArea", (char*)"Done/Return",
(ProMenubuttonAction)ProTestViewMenuDeleteAndPop, NULL, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestViewVisibleAreaSetup",
status, status != PRO_TK_NO_ERROR );
status = ProMenubuttonActionSet ((char*)"TKViewVisibleArea", (char*)"TKViewVisibleArea",
(ProMenubuttonAction)ProTestViewMenuDeleteAndPop, NULL, 0);
TEST_CALL_REPORT ("ProMenubuttonActionSet", "ProTestViewVisibleAreaSetup",
status, status != PRO_TK_NO_ERROR );
status = ProMenuPush();
TEST_CALL_REPORT ("ProMenuPush", "ProTestViewVisibleAreaSetup", status,
status != PRO_TK_NO_ERROR );
status = ProMenuCreate (PROMENUTYPE_MAIN, (char*)"TKViewVisibleArea", &menu_id);
TEST_CALL_REPORT ("ProMenuCreate", "ProTestViewVisibleAreaSetup", status,
status != PRO_TK_NO_ERROR );
status = ProMenuProcess ((char*)"TKViewVisibleArea", &action);
TEST_CALL_REPORT ("ProMenuProcess", "ProTestViewVisibleAreaSetup", status,
status != PRO_TK_NO_ERROR);
return (status);
}
/*====================================================================*
Function : ProTestViewVisibleAreaFull
Purpose : To set full visible area for view
\*====================================================================*/
ProError ProTestViewVisibleAreaFull ()
{
ProError status;
ProDrawing drawing;
ProView view;
ProSelection *view_sel;
int num_sel;
ProFileName WMSGFIL = {'u','s','e','r','m','s','g','.','t','x','t','\0'};
/*------------------------------------------------------------*\
Get the current model
\*------------------------------------------------------------*/
status = ProMdlCurrentGet ((ProMdl*)&drawing);
TEST_CALL_REPORT ("ProMdlCurrentGet", "ProTestViewVisibleAreaFull", status,
status != PRO_TK_NO_ERROR);
if (status != PRO_TK_NO_ERROR) return(status);
/*------------------------------------------------------------*\
Get view to set visible
\*------------------------------------------------------------*/
status = ProMessageDisplay (WMSGFIL, (char*)"USER %0s",
"Select view to set visible area");
TEST_CALL_REPORT ("ProMessageDisplay", "ProTestViewVisibleAreaFull", status,
status != PRO_TK_NO_ERROR);
status = ProSelect ((char*)"dwg_view", 1, NULL, NULL, NULL, NULL, &view_sel, &num_sel);
TEST_CALL_REPORT ("ProSelect", "ProTestViewVisibleAreaFull", status,
status != PRO_TK_NO_ERROR);
if (status != PRO_TK_NO_ERROR) return(status);
status = ProSelectionViewGet (view_sel[0], &view);
TEST_CALL_REPORT ("ProSelectionViewGet", "ProTestViewVisibleAreaFull", status,
status != PRO_TK_NO_ERROR);
status = ProDrawingViewFullVisibleAreaSet (drawing, view);
TEST_CALL_REPORT ("ProDrawingViewFullVisibleAreaSet", "ProTestViewVisibleAreaFull",
status, status != PRO_TK_NO_ERROR);
status = ProDrawingViewRegenerate (drawing, view);
TEST_CALL_REPORT ("ProDrawingViewRegenerate", "ProTestViewVisibleAreaFull", status,
status != PRO_TK_NO_ERROR);
return (status);
}
/*====================================================================*
Function : ProTestViewVisibleAreaHalf
Purpose : To set half visible area for view
\*====================================================================*/
ProError ProTestViewVisibleAreaHalf ()
{
ProDrawing drawing;
ProSelection *view_sel,*plane_sel;
int num_sel,num_plane;
ProView view;
ProError status;
ProFileName WMSGFIL = {'u','s','e','r','m','s','g','.','t','x','t','\0'};
/*------------------------------------------------------------*\
Get the current model
\*------------------------------------------------------------*/
status = ProMdlCurrentGet ((ProMdl*)&drawing);
TEST_CALL_REPORT ("ProMdlCurrentGet", "ProTestViewVisibleAreaHalf", status,
status != PRO_TK_NO_ERROR);
if (status != PRO_TK_NO_ERROR) return(status);
/*------------------------------------------------------------*\
Get view to set visible
\*------------------------------------------------------------*/
status = ProMessageDisplay(WMSGFIL, (char*)"USER %0s",
"Select view to set visible area");
TEST_CALL_REPORT ("ProMessageDisplay", "ProTestViewVisibleAreaHalf", status,
status != PRO_TK_NO_ERROR);
status = ProSelect ((char*)"dwg_view", 1, NULL, NULL, NULL, NULL, &view_sel, &num_sel);
TEST_CALL_REPORT ("ProSelect", "ProTestViewVisibleAreaHalf", status,
status != PRO_TK_NO_ERROR);
if (status != PRO_TK_NO_ERROR) return(status);
status = ProSelectionViewGet (view_sel[0], &view);
TEST_CALL_REPORT ("ProSelectionViewGet", "ProTestViewVisibleAreaHalf", status,
status != PRO_TK_NO_ERROR);
/*------------------------------------------------------------*\
Get plane to set visible
\*------------------------------------------------------------*/
status = ProMessageDisplay (WMSGFIL,(char*)"USER %0s",
"Select plane");
TEST_CALL_REPORT ("ProMessageDisplay", "ProTestViewVisibleAreaHalf", status,
status != PRO_TK_NO_ERROR);
status = ProSelect ((char*)"datum", 1, NULL, NULL, NULL, NULL, &plane_sel, &num_plane );
TEST_CALL_REPORT ("ProSelect", "ProTestViewVisibleAreaHalf", status,
status != PRO_TK_NO_ERROR);
if (status != PRO_TK_NO_ERROR) return(status);
status = ProDrawingViewHalfVisibleAreaSet (drawing, view, plane_sel[0],
PRO_B_TRUE, PRO_HVL_SOLID);
TEST_CALL_REPORT ("ProDrawingViewHalfVisibleAreaSet","ProTestViewVisibleAreaHalf",
status, status != PRO_TK_NO_ERROR);
status = ProDrawingViewRegenerate (drawing, view);
TEST_CALL_REPORT ("ProDrawingViewRegenerate", "ProTestViewVisibleAreaHalf", status,
status != PRO_TK_NO_ERROR);
return (status);
}