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

#include <ProToolkit.h>
#include <ProDtlentity.h>
#include <ProGraphic.h>

/*====================================================================*\ 
FUNCTION : UsrLineentityCreate() 
PURPOSE  : Utility to create a line entity between specified points 
\*====================================================================*/ 
int UsrLineentityCreate(
     ProDrawing drawing,
     ProDtlsymdef *symbol,
     ProVector start,
     ProVector end,
     ProColortype color)
{
  ProDtlentitydata edata;
  ProCurvedata *curve;
  ProDtlentity entity;
  ProColor entity_color;
  int cur_sheet;
  ProView view;

/*--------------------------------------------------------------------*\ 
    Allocate data for the draft entity 
\*--------------------------------------------------------------------*/     
  ProDtlentitydataAlloc(drawing, &edata);

/*--------------------------------------------------------------------*\ 
    Allocate and initialize a curve description 
\*--------------------------------------------------------------------*/     
  ProCurvedataAlloc(&curve);
  ProLinedataInit(start, end, curve);
  
/*--------------------------------------------------------------------*\ 
    Use the curve description to set the entity data curve 
\*--------------------------------------------------------------------*/     
  ProDtlentitydataCurveSet(edata, curve);

/*--------------------------------------------------------------------*\ 
    Set the view to the current background view for this sheet
\*--------------------------------------------------------------------*/     
  ProDrawingCurrentSheetGet (drawing, &cur_sheet);

  ProDrawingBackgroundViewGet (drawing, cur_sheet, &view);

  ProDtlentitydataViewSet (edata, view);

/*--------------------------------------------------------------------*\ 
    Set the color to the specified Pro/ENGINEER predefined color 
\*--------------------------------------------------------------------*/     
  entity_color.method = PRO_COLOR_METHOD_TYPE;     
  entity_color.value.type = color;     
  ProDtlentitydataColorSet(edata, &entity_color);

/*--------------------------------------------------------------------*\ 
    Create the entity 
\*--------------------------------------------------------------------*/     
  ProDtlentityCreate(drawing, symbol, edata, &entity);
  
/*--------------------------------------------------------------------*\ 
    Display the entity 
\*--------------------------------------------------------------------*/     
  ProWindowRepaint (PRO_VALUE_UNUSED);
  
/*--------------------------------------------------------------------*\ 
    Release the entity data memory 
\*--------------------------------------------------------------------*/     
  ProDtlentitydataFree(edata);
 
  return 0;
}

int UsrLineentityCreateWrapper () 
{

    ProDrawing drawing;
    ProMouseButton button;
    ProVector start, end;
    ProFileName msgfil;
    
    ProStringToWstring (msgfil, "msg_ugdrawing.txt");

    ProMdlCurrentGet((ProMdl*)&drawing);

    ProMessageDisplay(msgfil,"USER Select ends of line");
	
    if(ProMousePickGet(PRO_ANY_BUTTON, &button, start) != PRO_TK_NO_ERROR)
        return(0);
    if(ProMousePickGet(PRO_ANY_BUTTON, &button, end) != PRO_TK_NO_ERROR)
        return(0);

    UsrLineentityCreate(drawing, NULL, start, end, PRO_COLOR_WARNING);

	return PRO_TK_NO_ERROR;
}