/*
	Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/



/*---------------------- Pro/Toolkit Includes ------------------------*/
#include <ProToolkit.h>
#include <ProSelection.h>
#include <ProGeomitem.h>
#include <ProUtil.h>
#include <UtilMath.h>
#include <ProSurface.h>

/*---------------------- Application Includes ------------------------*/
#include <TestError.h>

/*---------------------- Function Prototypes -------------------------*/
ProError UserConeAngDisp();


/*============================================================================*\
	Function: UserConeAngDisp()
	Purpose: Display Angle of Selected Cone
\*============================================================================*/
ProError UserConeAngDisp()
{
    int sel_count;
    double angle;
    ProError status;
    ProModelitem p_mdl_item;
    ProFileName msgfile;
    ProGeomitemdata *geom_data=NULL;
    ProSurface surface;
    ProSrftype surface_type;
    ProSelection *psels=NULL;

/*----------------------------------------------------------------------------*\
    Prompt user for selection of cone
\*----------------------------------------------------------------------------*/
    ProStringToWstring(msgfile,"msg_uggeom.txt");
    status = ProMessageDisplay(msgfile,"USER Select Cone to Evaluate:");
    ERROR_CHECK( "UserConeAngDisp", "ProMessageDisplay(Select Cone)", status );
    if((ProSelect("surface",1,NULL,NULL,NULL,NULL,&psels, &sel_count) != 
       PRO_TK_NO_ERROR) || (sel_count < 1))
       return((int)PRO_TK_GENERAL_ERROR);

    status = ProSelectionModelitemGet(psels[0],&p_mdl_item);
    ERROR_CHECK( "UserConeAngDisp", "ProSelectionModelitemGet", status );
    
    status = ProGeomitemToSurface(&p_mdl_item,&surface);
    ERROR_CHECK( "UserConeAngDisp","ProGeomitemToSurface",status);
    status = ProSurfaceTypeGet(surface,&surface_type);
    ERROR_CHECK( "UserConeAngDisp","ProSurfaceTypeGet",status);
    if(surface_type != PRO_SRF_CONE)
    {
        ProMessageDisplay(msgfile,"USER Surface selected is not a Cone");
        ERROR_CHECK( "UserConeAngDisp","ProMessageDisplay(Surface selected is not)",status);
        return((int)PRO_TK_GENERAL_ERROR);
    }

    status = ProGeomitemdataGet(&p_mdl_item,&geom_data);
    ERROR_CHECK( "UserConeAngDisp","ProGeomitemdataGet",status);
    angle = fabs(geom_data->data.p_surface_data->srf_shape.cone.alpha*180.0/PI);
    status = ProMessageDisplay(msgfile,"USER Cone angle is %0f",&angle);
    ERROR_CHECK( "UserConeAngDisp","ProMessageDisplay(Cone angle is)",status);

    status = ProGeomitemdataFree(&geom_data);
    ERROR_CHECK( "UserConeAngDisp","ProGeomitemdataFree",status);

    return(status);

}