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



/*---------------------- Pro/Toolkit Includes ------------------------*/
#include "ProToolkit.h"
#include "ProGraphic.h"
#include <PTApplsUnicodeUtils.h>
/*---------------------- Application Includes ------------------------*/
#include "TestError.h"

/*---------------------- Function Prototypes -------------------------*/
int UserPolyline();
ProError UserGetLine();


int UserPolyline()
{
    ProPoint3d p1, p2;
    ProMouseButton button;
    ProLine w_font;
    ProError err;
    int font_id, np=1;
    char text[80];
    wchar_t w_text[80];
    ProTextAttribute text_atts,old_atts;

/*---------------------------------------------------------------------*\
    Get the id of the font called "filled".
\*---------------------------------------------------------------------*/
    ProStringToWstring(w_font,"filled.ndx");
    err=ProTextFontNameToId(w_font,&font_id);
    ERROR_CHECK("UserPolyline","ProTextFontNameToId",err);

/*---------------------------------------------------------------------*\
    Get the current text attributes and remember them
\*---------------------------------------------------------------------*/
    ProTextAttributesCurrentGet(&old_atts);
    memcpy(&text_atts,&old_atts,sizeof(ProTextAttribute));

/*---------------------------------------------------------------------*\
    Modify the text attributes, font = 'filled',
    height = double the default, and slant = 10 degrees (italic)
*---------------------------------------------------------------------*/
    text_atts.font_id = font_id;
    text_atts.height *= 2.0;
    text_atts.slant_angle = 10.0;
    ProTextFontIdCurrentSet(font_id);
    ProTextHeightCurrentSet(text_atts.height);
    ProTextSlantAngleCurrentSet(text_atts.slant_angle);

/*---------------------------------------------------------------------*\
    Get the first point from the user
\*---------------------------------------------------------------------*/
    err=ProMousePickGet(PRO_LEFT_BUTTON,&button,p1);
    ERROR_CHECK("UserPolyline","ProMousePickGet(p1)",err);

/*---------------------------------------------------------------------*\
    Label it with some text
\*---------------------------------------------------------------------*/
    ProTKSprintf(text,"Point %d",np++);
    ProStringToWstring(w_text,text);
    ProGraphicsTextDisplay(p1,w_text);

    while(1)
    {
/*---------------------------------------------------------------------*\
        Get a new point (using example 6.6)
\*---------------------------------------------------------------------*/
        button = UserGetLine(p1,p2);

/*---------------------------------------------------------------------*\
        If the user hit the middle or right button, finish up.
\*---------------------------------------------------------------------*/
        if((button & PRO_RIGHT_BUTTON) ||
           (button & PRO_MIDDLE_BUTTON))
            break;

/*---------------------------------------------------------------------*\
        Draw a line between the new point and the previous one
\*---------------------------------------------------------------------*/
        ProGraphicsPenPosition(p1);
        ProGraphicsLineDraw(p2);

/*---------------------------------------------------------------------*\
        Label the new point with some text
\*---------------------------------------------------------------------*/
        ProTKSprintf(text,"Point %d",np++);
        ProStringToWstring(w_text,text);
        ProGraphicsTextDisplay(p2,w_text);

/*---------------------------------------------------------------------*\
        Remember the point
\*---------------------------------------------------------------------*/
        p1[0] = p2[0];
        p1[1] = p2[1];
        p1[2] = p2[2];
    }

/*---------------------------------------------------------------------*\
    Restore the original text attributes
\*---------------------------------------------------------------------*/
   ProTextFontIdCurrentSet(old_atts.font_id);
   ProTextHeightCurrentSet(old_atts.height);
   ProTextWidthFactorCurrentSet(old_atts.width_factor);
   ProTextRotationAngleCurrentSet(old_atts.rot_angle);
   ProTextSlantAngleCurrentSet(old_atts.slant_angle);
}