/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*---------------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*---------------------------------------------------------------------------*/
#include <ProSelection.h>
#include <ProModelitem.h>
#include <ProColor.h>
#include <ProMessage.h>
#include <ProMenu.h>
#include <ProMdl.h>
#include <ProDrawing.h>
#include <ProUtil.h>
#include <ProCurvedata.h>
#include <ProDtlentity.h>
#include <ProDtlsymdef.h>
#include <ProGraphic.h>
#include <ProObjects.h>
/*---------------------------------------------------------------------------*\
Application includes
\*---------------------------------------------------------------------------*/
#include "UtilMessage.h"
#include "UtilMenu.h"
#include "UtilFiles.h"
#include "UtilMath.h"
#include <ProTKRunTime.h>
/*---------------------------------------------------------------------------*\
Application macros
\*---------------------------------------------------------------------------*/
#define ENT_COLOR 0
#define ENT_FONT 1
#define ENT_THICKNESS 2
#define SOLID_FONT 0
#define CTRL_FONT 1
#define DASH_FONT 2
#define DOT_FONT 3
#define PHANTOM_FONT 4
#define DTL_DRAW 0
#define DTL_ERASE 1
#define DTL_DELETE 2
#define DTL_ENTITY_FILE ".ent"
int ProTestColorGet (ProColor *);
void ProTestColorPrint (FILE *, ProColor);
ProError ProTestEntGet (ProDrawing, ProDtlentity*, ProPoint3d);
ProError ProTestEntCreate (ProDrawing, ProDtlentitydata, ProCurvedata,
ProDtlentity*);
/*===========================================================================*\
Function : ProTestEntity
Purpose :
\*===========================================================================*/
int ProTestEntity(ProDrawing* drawing)
{
ProError err;
int menu_id;
ProDrawing draw = *drawing;
int ProTestEntAdd(ProDrawing drw);
int ProTestEntCopy(ProDrawing drw);
int ProTestEntEdit(ProDrawing drw);
int ProTestEntInfo(ProDrawing drw);
int ProTestEntDisplay(ProDrawing drw);
err = ProMenuFileRegister((char*)"Entity",(char*)"tkentity.mnu", &menu_id);
err = ProMenubuttonActionSet((char*)"Entity",(char*)"Entity",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
err = ProMenubuttonActionSet((char*)"Entity",(char*)"Create",
(ProMenubuttonAction)ProTestEntAdd, draw, 0);
err = ProMenubuttonActionSet((char*)"Entity",(char*)"Copy",
(ProMenubuttonAction)ProTestEntCopy, draw, 0);
err = ProMenubuttonActionSet((char*)"Entity",(char*)"Edit",
(ProMenubuttonAction)ProTestEntEdit, draw, 0);
#if 0
err = ProMenubuttonActionSet((char*)"Entity",(char*)"Info",
(ProMenubuttonAction)ProTestEntInfo, draw, 0);
#else
err = ProMenubuttonActionSet((char*)"Entity",(char*)"Info",
(ProMenubuttonAction)ProMenuDelete, draw, 0);
#endif
err = ProMenubuttonActionSet((char*)"Entity",(char*)"Display",
(ProMenubuttonAction)ProTestEntDisplay, draw, 0);
err = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"Entity",&menu_id);
err = ProMenuProcess((char*)"", &menu_id);
return (0);
}
/*===========================================================================*\
Function : ProTestEntAdd
Purpose :
\*===========================================================================*/
int ProTestEntAdd(ProDrawing drw)
{
ProError err;
int opt, np, n;
ProDtlentitydata ent_data;
ProDtlentity entity;
ProMouseButton btn;
Pro3dPnt sel_pnt, end_pnt, start_pnt, *pnt_arr, chord, *p_tan, *tan_arr;
ProVector vector1, vector2;
ProCurvedata crv_data;
double start_angle = 0.0, end_angle = 0.0, radius = 0.0;
double angle = 0.0, maj_lenth = 0.0, min_lenth = 0.0, len = 0.0;
double range[2] = {0.0, 90.0}, *par_arr;
static ProUtilMenuButtons ent_opt[] = {
{"Create", 0, TEST_CALL_PRO_MENU_DELETE},
{"Point", PRO_ENT_POINT, 0},
{"Line", PRO_ENT_LINE, 0},
{"Arc", PRO_ENT_ARC, 0},
{"Circle", PRO_ENT_CIRCLE, 0},
{"Spline", PRO_ENT_SPLINE, 0},
{"Ellipse", PRO_ENT_ELLIPSE, 0},
{"",0,0}
};
err = ProUtilMenuIntValueSelect(ent_opt, &opt);
err = ProDtlentitydataAlloc (drw, &ent_data);
TEST_CALL_REPORT("ProDtlentitydataAlloc()",
"ProTestEntAdd()", err, err != PRO_TK_NO_ERROR);
switch (opt)
{
case PRO_ENT_POINT :
ProUtilMsgPrint("gen", "TEST %0s", "Select position:");
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, sel_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
return(0);
err = ProPointdataInit (sel_pnt, &crv_data);
TEST_CALL_REPORT("ProPointdataInit()",
"ProTestEntAdd()", err, err != PRO_TK_NO_ERROR);
break;
case PRO_ENT_LINE :
ProUtilMsgPrint("gen", "TEST %0s", "End points");
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, sel_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
return(0);
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, end_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
return(0);
err = ProLinedataInit (sel_pnt, end_pnt, &crv_data);
TEST_CALL_REPORT("ProLinedataInit()",
"ProTestEntAdd()", err, err != PRO_TK_NO_ERROR);
break;
case PRO_ENT_ARC :
ProUtilMsgPrint("gen", "TEST %0s", "Select center");
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, sel_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
return(0);
ProGraphicsCircleDraw( sel_pnt, 0.5);
ProUtilMsgPrint("gen", "TEST %0s", "Select start point");
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, start_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
return(0);
ProGraphicsCircleDraw( start_pnt, 0.5);
ProUtilVectorDiff (sel_pnt, start_pnt, end_pnt);
radius = ProUtilVectorLength (end_pnt);
ProUtilVectorDiff (start_pnt, sel_pnt, vector1);
ProUtilVectorNormalize (vector1, vector1);
ProUtilMsgPrint("gen", "TEST %0s", "Select end point");
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, end_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
return(0);
ProGraphicsCircleDraw(end_pnt, 0.5);
vector2[0] =- vector1[1];
vector2[1] = vector1[0];
vector2[2] = 0;
start_angle = atan2(start_pnt[1] - sel_pnt[1],
start_pnt[0] - sel_pnt[0]);
end_angle = atan2(end_pnt[1] - sel_pnt[1], end_pnt[0] - sel_pnt[0]);
if(end_angle < 0.0)
end_angle += TWOPI;
err = ProArcdataInit (vector1, vector2, sel_pnt, start_angle,
end_angle, radius, &crv_data);
TEST_CALL_REPORT("ProArcdataInit()",
"ProTestEntAdd()", err, err != PRO_TK_NO_ERROR);
break;
case PRO_ENT_CIRCLE :
ProUtilMsgPrint("gen", "TEST %0s", "Select center");
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, sel_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
return(0);
ProUtilMsgPrint("gen", "TEST %0s", "Select perimeter point");
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, start_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
return(0);
ProUtilVectorDiff (sel_pnt, start_pnt, end_pnt);
radius = ProUtilVectorLength (end_pnt);
vector1[0] = 1.0;
vector1[1] = 0.0;
vector1[2] = 0.0;
vector2[0] = 0.0;
vector2[1] = 1.0;
vector2[2] = 0.0;
start_angle = 0.0;
end_angle = TWOPI;
err = ProArcdataInit (vector1, vector2, sel_pnt, start_angle,
end_angle, radius, &crv_data);
TEST_CALL_REPORT("ProArcdataInit()",
"ProTestEntAdd()", err, err != PRO_TK_NO_ERROR);
break;
case PRO_ENT_SPLINE :
err = ProArrayAlloc (0, sizeof(ProPoint3d), 1, (ProArray*)&pnt_arr);
ProUtilMsgPrint("gen", "TEST %0s", "Select points");
while (1)
{
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, sel_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
break;
ProGraphicsCircleDraw( sel_pnt, 0.5);
err = ProArrayObjectAdd( (ProArray*)&pnt_arr, PRO_VALUE_UNUSED,
1, sel_pnt);
}
err = ProArraySizeGet ((ProArray)pnt_arr, &np);
if (err != PRO_TK_NO_ERROR || np == 0)
return (0);
err = ProArrayAlloc (0, sizeof(ProPoint3d), 1, (ProArray*)&p_tan);
err = ProArrayAlloc (0, sizeof(double), 1, (ProArray*)&par_arr);
tan_arr = (ProPoint3d*)calloc(np, sizeof(ProPoint3d));
tan_arr[0][0] = pnt_arr[1][0] - pnt_arr[0][0];
tan_arr[0][1] = 2 * pnt_arr[1][1] - pnt_arr[2][1] - pnt_arr[0][1];
tan_arr[np-1][0] = -(pnt_arr[np-2][0] - pnt_arr[np-1][0]);
tan_arr[np-1][1] = -(2 * pnt_arr[np-2][1] - pnt_arr[np-3][1] -
pnt_arr[np-1][1]);
for(n = 1; n < np-1; n++)
{
tan_arr[n][0] = pnt_arr[n+1][0] - pnt_arr[n-1][0];
tan_arr[n][1] = pnt_arr[n+1][1] - pnt_arr[n-1][1];
}
for (n = 0; n < np; n++)
{
len = (tan_arr[n][0]*tan_arr[n][0])+(tan_arr[n][1]*tan_arr[n][1]);
len = sqrt(len);
tan_arr[n][0] /= len;
tan_arr[n][1] /= len;
err = ProArrayObjectAdd ((ProArray*)&p_tan, PRO_VALUE_UNUSED,
1, tan_arr[n]);
}
angle = 0.0;
err = ProArrayObjectAdd ((ProArray*)&par_arr, PRO_VALUE_UNUSED,
1, &angle);
for (n = 1; n < np; n++)
{
ProUtilVectorDiff (pnt_arr[n], pnt_arr[n-1], chord);
angle = ProUtilVectorLength(chord) + par_arr[n-1];
err = ProArrayObjectAdd ((ProArray*)&par_arr, PRO_VALUE_UNUSED,
1, &angle);
}
err = ProSplinedataInit (par_arr, pnt_arr, p_tan, np, &crv_data);
TEST_CALL_REPORT("ProSplinedataInit()",
"ProTestEntAdd()", err, err != PRO_TK_NO_ERROR);
err = ProArrayFree ((ProArray*)&p_tan);
err = ProArrayFree ((ProArray*)&par_arr);
err = ProArrayFree ((ProArray*)&pnt_arr);
break;
case PRO_ENT_ELLIPSE :
ProUtilMsgPrint("gen", "TEST %0s", "Enter ends of major axis");
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, start_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
return(0);
ProGraphicsCircleDraw( start_pnt, 0.5);
err = ProMousePickGet(PRO_ANY_BUTTON, &btn, end_pnt);
if (btn != PRO_LEFT_BUTTON || err != PRO_TK_NO_ERROR)
return(0);
ProGraphicsCircleDraw( end_pnt, 0.5);
sel_pnt[0] = (start_pnt[0] + end_pnt[0]) / 2.0;
sel_pnt[1] = (start_pnt[1] + end_pnt[1]) / 2.0;
sel_pnt[2] = 0.0;
ProUtilMsgPrint("gen", "TEST %0s", "Enter the rotation angle");
if (ProMessageDoubleRead (range, &angle) != PRO_TK_NO_ERROR)
return(0);
ProUtilVectorDiff (end_pnt, sel_pnt, vector1);
maj_lenth = ProUtilVectorLength (vector1);
ProUtilVectorNormalize(vector1, vector1);
vector2[0] = 0.0;
vector2[1] = 0.0;
vector2[2] = 1.0;
min_lenth = maj_lenth * cos(angle * TWOPI /360);
start_angle = 0.0;
end_angle = TWOPI;
err = ProEllipsedataInit (sel_pnt, vector1, vector2, min_lenth,
maj_lenth, start_angle, end_angle, &crv_data);
TEST_CALL_REPORT("ProEllipsedataInit()",
"ProTestEntAdd()", err, err != PRO_TK_NO_ERROR);
break;
}
err = ProTestEntCreate (drw, ent_data, crv_data, &entity);
err = ProDtlentitydataFree(ent_data);
TEST_CALL_REPORT("ProDtlentitydataFree()",
"ProTestEntAdd()", err, err != PRO_TK_NO_ERROR);
return (0);
}
/*===========================================================================*\
Function : ProTestEntCreate
Purpose :
\*===========================================================================*/
ProError ProTestEntCreate (ProDrawing drw,
ProDtlentitydata ent_data,
ProCurvedata crv_data,
ProDtlentity *entity)
{
ProError err;
int sheet = 0;
ProView over_view;
err = ProDtlentitydataCurveSet (ent_data, &crv_data);
TEST_CALL_REPORT("ProDtlentitydataCurveSet()",
"ProTestEntCreate()", err, err != PRO_TK_NO_ERROR);
err = ProDrawingCurrentSheetGet (drw, &sheet);
TEST_CALL_REPORT("ProDrawingCurrentSheetGet()",
"ProTestEntCreate()", err, err != PRO_TK_NO_ERROR);
err = ProDrawingBackgroundViewGet (drw, sheet, &over_view);
TEST_CALL_REPORT("ProDrawingBackgroundViewGet()",
"ProTestEntCreate()", err, err != PRO_TK_NO_ERROR);
err = ProDtlentitydataViewSet (ent_data, over_view);
TEST_CALL_REPORT("ProDtlentitydataViewSet()",
"ProTestEntCreate()", err, err != PRO_TK_NO_ERROR);
err = ProDtlentityCreate (drw, NULL, ent_data, entity);
TEST_CALL_REPORT("ProDtlentityCreate()",
"ProTestEntCreate()", err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
return (err);
err = ProDtlentityDraw(entity);
TEST_CALL_REPORT("ProDtlentityDraw()",
"ProTestEntCreate()", err, err != PRO_TK_NO_ERROR);
return (err);
}
/*===========================================================================*\
Function : ProTestEntCopy
Purpose :
\*===========================================================================*/
int ProTestEntCopy (ProDrawing drw)
{
ProError err;
ProDtlentity entity;
int i;
ProDtlentitydata entdata;
ProCurvedata crv_data;
ProEnttype crv_type;
ProMouseButton btn;
Pro3dPnt move, sel_pnt, pos;
err = ProTestEntGet (drw, &entity, pos);
if (err != PRO_TK_NO_ERROR)
return (0);
err = ProDtlentityDataGet (&entity, NULL, &entdata);
TEST_CALL_REPORT("ProDtlentityDataGet()",
"ProTestEntCopy()", err, err != PRO_TK_NO_ERROR);
ProUtilMsgPrint("gen", "TEST %0s", "Select new position");
if(ProMousePickGet(PRO_ANY_BUTTON, &btn, sel_pnt) != PRO_TK_NO_ERROR)
return (0);
err = ProDtlentitydataCurveGet (entdata, &crv_data);
TEST_CALL_REPORT("ProDtlentitydataCurveGet()",
"ProTestEntCopy()", err, err != PRO_TK_NO_ERROR);
err = ProCurvedataTypeGet(&crv_data, &crv_type);
TEST_CALL_REPORT("ProCurvedataTypeGet()",
"ProTestEntCopy()", err, err != PRO_TK_NO_ERROR);
ProUtilVectorDiff (sel_pnt, pos, move);
switch (crv_type)
{
case PRO_ENT_POINT :
ProUtilVectorSum (crv_data.point.position, move,
crv_data.point.position);
break;
case PRO_ENT_LINE :
ProUtilVectorSum (crv_data.line.end1, move, crv_data.line.end1);
ProUtilVectorSum (crv_data.line.end2, move, crv_data.line.end2);
break;
case PRO_ENT_ARC :
ProUtilVectorSum(crv_data.arc.origin, move, crv_data.arc.origin);
break;
case PRO_ENT_SPLINE :
for(i = 0; i < crv_data.spline.num_points; i++)
ProUtilVectorSum(crv_data.spline.pnt_arr[i], move,
crv_data.spline.pnt_arr[i]);
break;
case PRO_ENT_ELLIPSE :
ProUtilVectorSum(crv_data.ellipse.center, move,
crv_data.ellipse.center);
break;
default :
return (0);
}
err = ProTestEntCreate (drw, entdata, crv_data, &entity);
err = ProDtlentitydataFree( entdata );
TEST_CALL_REPORT("ProDtlentitydataFree()",
"ProTestEntCopy()", err, err != PRO_TK_NO_ERROR);
return (0);
}
/*===========================================================================*\
Function : ProTestNewEntCreate
Purpose :
\*===========================================================================*/
ProError ProTestEntGet (ProDrawing drw,
ProDtlentity *entity,
ProPoint3d pos)
{
ProError err = PRO_TK_NO_ERROR;
ProSelection *sel;
int n_sel;
ProUtilMsgPrint("gen", "TEST %0s", "Select an entity");
if (ProSelect((char*)"draft_ent", 1, NULL, NULL, NULL, NULL, &sel, &n_sel)!= PRO_TK_NO_ERROR)
return PRO_TK_GENERAL_ERROR;
err = ProSelectionModelitemGet (sel[0], entity);
if (err != PRO_TK_NO_ERROR)
return err;
if (pos != NULL)
{
err = ProSelectionPoint3dGet(sel[0], pos);
if (err != PRO_TK_NO_ERROR)
return err;
}
return (err);
}
/*===========================================================================*\
Function : ProTestFontGet
Purpose :
\*===========================================================================*/
int ProTestFontGet(ProName font)
{
ProError err;
int opt;
static ProUtilMenuButtons font_type[] = {
{"Font", 0, TEST_CALL_PRO_MENU_DELETE},
{"Solid", SOLID_FONT, 0},
{"Ctrl", CTRL_FONT, 0},
{"Dot", DOT_FONT, 0},
{"Phantom", PHANTOM_FONT, 0},
{"Dash", DASH_FONT, 0},
{"",0,0}
};
err = ProUtilMenuIntValueSelect(font_type, &opt);
switch (opt)
{
case SOLID_FONT :
ProStringToWstring(font, (char*)"SOLIDFONT");
break;
case CTRL_FONT:
ProStringToWstring(font, (char*)"CTRLFONT");
break;
case PHANTOM_FONT:
ProStringToWstring(font, (char*)"PHANTOMFONT");
break;
case DOT_FONT:
ProStringToWstring(font, (char*)"DOTFONT");
break;
case DASH_FONT:
ProStringToWstring(font, (char*)"DASHFONT");
break;
}
return (0);
}
/*===========================================================================*\
Function : ProTestEntEdit
Purpose :
\*===========================================================================*/
int ProTestEntEdit(ProDrawing drw)
{
ProError err;
int opt;
ProColor color;
ProDtlentity entity;
ProDtlsymdef *symbol = NULL;
ProDtlentitydata ent_data;
ProName font;
ProCharLine line;
double width = 0.0;
static ProUtilMenuButtons edit_opt[] = {
{"Edit", 0, TEST_CALL_PRO_MENU_DELETE},
{"Color", ENT_COLOR, 0},
{"Font", ENT_FONT, 0},
{"Thickness", ENT_THICKNESS, 0},
{"",0,0}
};
err = ProTestEntGet (drw, &entity, NULL);
if (err != PRO_TK_NO_ERROR)
return (err);
err = ProDtlentityDataGet (&entity, symbol, &ent_data);
TEST_CALL_REPORT("ProDtlentityDataGet()",
"ProTestEntEdit()", err, err != PRO_TK_NO_ERROR);
err = ProUtilMenuIntValueSelect(edit_opt, &opt);
switch (opt)
{
case ENT_COLOR :
ProTestColorGet (&color);
err = ProDtlentitydataColorSet (ent_data, &color);
TEST_CALL_REPORT("ProDtlentitydataColorSet()",
"ProTestEntEdit()", err, err != PRO_TK_NO_ERROR);
break;
case ENT_FONT :
ProTestFontGet (font);
err = ProDtlentitydataFontSet (ent_data, font);
TEST_CALL_REPORT("ProDtlentitydataFontSet()",
"ProTestEntEdit()", err, err != PRO_TK_NO_ERROR);
break;
case ENT_THICKNESS :
err = ProDtlentitydataWidthGet (ent_data, &width);
ProTKSprintf (line, "Enter width [%6.2f]", width);
ProUtilMsgPrint("gen", "TEST %0s", line);
if (ProMessageDoubleRead (NULL, &width) != PRO_TK_NO_ERROR)
return (0);
err = ProDtlentitydataWidthSet (ent_data, width);
TEST_CALL_REPORT("ProDtlentitydataWidthSet()",
"ProTestEntEdit()", err, err != PRO_TK_NO_ERROR);
break;
}
err = ProDtlentityErase (&entity);
TEST_CALL_REPORT("ProDtlentityErase()",
"ProTestEntEdit()", err, err != PRO_TK_NO_ERROR);
err = ProDtlentityModify (&entity, symbol, ent_data);
TEST_CALL_REPORT("ProDtlentityModify()",
"ProTestEntEdit()", err, err != PRO_TK_NO_ERROR);
err = ProDtlentityDraw (&entity);
TEST_CALL_REPORT("ProDtlentityDraw()",
"ProTestEntEdit()", err, err != PRO_TK_NO_ERROR);
err = ProDtlentitydataFree( ent_data );
TEST_CALL_REPORT("ProDtlentitydataFree()",
"ProTestEntEdit()", err, err != PRO_TK_NO_ERROR);
return (0);
}
/*===========================================================================*\
Function : ProTestColorGet
Purpose :
\*===========================================================================*/
int ProTestColorGet(ProColor *color)
{
ProError err;
int opt;
double range[2] = {0.0, 1.0};
static ProUtilMenuButtons method_type[] = {
{"Method", 0, TEST_CALL_PRO_MENU_DELETE},
{"Default", PRO_COLOR_METHOD_DEFAULT, 0},
{"Type", PRO_COLOR_METHOD_TYPE, 0},
{"RGB", PRO_COLOR_METHOD_RGB, 0},
{"",0,0}
};
static ProUtilMenuButtons color_type[] = {
{"-Color", 0, TEST_CALL_PRO_MENU_DELETE},
{"Yellow", PRO_COLOR_LETTER, 0},
{"Red",PRO_COLOR_HIGHLITE, 0},
{"White", PRO_COLOR_DRAWING, 0},
{"Background", PRO_COLOR_BACKGROUND, 0},
{"Grey", PRO_COLOR_HALF_TONE , 0},
{"Blue", PRO_COLOR_EDGE_HIGHLIGHT,0},
{"Grey", PRO_COLOR_DIMMED, 0},
{"Magenta", PRO_COLOR_ERROR , 0},
{"Cyan", PRO_COLOR_WARNING , 0},
{"Green", PRO_COLOR_SHEETMETAL, 0},
{"Brown", PRO_COLOR_CURVE, 0},
{"MAX", PRO_COLOR_MAX, 0},
{"",0,0}
};
err = ProUtilMenuIntValueSelect(method_type, &opt);
switch (opt)
{
case PRO_COLOR_METHOD_DEFAULT :
color->method = PRO_COLOR_METHOD_DEFAULT;
break;
case PRO_COLOR_METHOD_TYPE :
color->method = PRO_COLOR_METHOD_TYPE;
ProUtilMenuIntValueSelect(color_type, (int*)&(color->value.type));
break;
case PRO_COLOR_METHOD_RGB :
color->method = PRO_COLOR_METHOD_RGB;
ProUtilMsgPrint("gen", "TEST %0s", "Enter red color factor:");
if (ProMessageDoubleRead (range, &(color->value.map.red)) !=
PRO_TK_NO_ERROR)
color->value.map.red = 0.9;
ProUtilMsgPrint("gen", "TEST %0s", "Enter green color factor:");
if (ProMessageDoubleRead (range, &(color->value.map.green)) !=
PRO_TK_NO_ERROR)
color->value.map.green = 0.05;
ProUtilMsgPrint("gen", "TEST %0s", "Enter blue color factor:");
if (ProMessageDoubleRead (range, &(color->value.map.blue)) !=
PRO_TK_NO_ERROR)
color->value.map.blue = 0.05;
break;
}
return (0);
}
/*===========================================================================*\
Function : ProTestEntDisplay
Purpose :
\*===========================================================================*/
int ProTestEntDisplay(ProDrawing draw)
{
ProError err;
int opt, size = 0, i;
ProDtlsymdef *symbol = NULL;
ProDtlentity entity, *ent_arr = NULL;
static ProUtilMenuButtons disp_type[] = {
{"Display", 0, TEST_CALL_PRO_MENU_DELETE},
{"Draw", DTL_DRAW, 0},
{"Erase", DTL_ERASE, 0},
{"Delete", DTL_DELETE, 0},
{"", 0, 0}
};
err = ProUtilMenuIntValueSelect(disp_type, &opt);
switch (opt)
{
#if 0
case DTL_DRAW :
err = ProDrawingDtlentitiesCollect (draw, symbol, 1, &ent_arr);
TEST_CALL_REPORT("ProDrawingDtlentitiesCollect()","ProTestEntDisplay()",
err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND);
if (err != PRO_TK_NO_ERROR)
break;
err = ProArraySizeGet((ProArray)ent_arr, &size);
for (i = 0; i < size; i++)
{
err = ProDtlentityDraw (&ent_arr[i]);
TEST_CALL_REPORT("ProDtlentityDraw()",
"ProTestEntDisplay()", err, err != PRO_TK_NO_ERROR);
}
err = ProArrayFree ((ProArray*)&ent_arr);
break;
#endif
case DTL_ERASE :
err = ProTestEntGet (draw, &entity, NULL);
if(err != PRO_TK_NO_ERROR)
return err;
err = ProDtlentityErase(&entity);
TEST_CALL_REPORT("ProDtlentityErase()",
"ProTestEntDisplay()", err, err != PRO_TK_NO_ERROR);
break;
case DTL_DELETE :
err = ProTestEntGet (draw, &entity, NULL);
if(err != PRO_TK_NO_ERROR)
return err;
err = ProDtlentityDelete (&entity, symbol);
TEST_CALL_REPORT("ProDtlentityDelete()",
"ProTestEntDisplay()", err, err != PRO_TK_NO_ERROR);
break;
}
return (0);
}
/*===========================================================================*\
Function : ProTestEntInfo
Purpose :
\*===========================================================================*/
int ProTestEntInfo(ProDrawing drw)
{
ProError err;
ProDtlsymdef *symbol = NULL;
ProDtlentity *dtl_ent_arr;
int i, size = 0, ent_id = -1;
ProDtlentitydata ent_data;
ProCurvedata crv_data;
ProColor color;
ProName font;
double width = 0.0;
FILE *fp;
ProCharLine fname, string;
ProEnttype crv_type = (ProEnttype)0;
fp = ProUtilGenFilePtr((ProMdl)drw, (char*)DTL_ENTITY_FILE, fname, (char*)"w");
err = ProDrawingDtlentitiesCollect (drw, symbol, PRO_VALUE_UNUSED,
&dtl_ent_arr);
TEST_CALL_REPORT("ProDrawingDtlentitiesCollect()","ProTestEntInfo()",
err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND);
if (err != PRO_TK_NO_ERROR)
return (0);
err = ProArraySizeGet ((ProArray)dtl_ent_arr, &size);
ProTKPrintf ("\n\t size = %d", size);
ProTKFprintf(fp, "File name : %s\n", fname);
ProTKFprintf(fp, "Id\tType\tFont\t\tWidth\tColor\n");
for (i = 0; i < size; i++)
{
err = ProDtlentityDataGet(&dtl_ent_arr[i], NULL, &ent_data);
TEST_CALL_REPORT("ProDtlentityDataGet()",
"ProTestEntInfo()", err, err != PRO_TK_NO_ERROR);
err = ProDtlentitydataIdGet (ent_data, &ent_id);
TEST_CALL_REPORT("ProDtlentitydataIdGet()",
"ProTestEntInfo()", err, err != PRO_TK_NO_ERROR);
err = ProDtlentitydataCurveGet (ent_data, &crv_data);
TEST_CALL_REPORT("ProDtlentitydataCurveGet()",
"ProTestEntInfo()", err, err != PRO_TK_NO_ERROR);
err = ProCurvedataTypeGet (&crv_data, &crv_type);
TEST_CALL_REPORT("ProCurvedataTypeGet()",
"ProTestEntInfo()", err, err != PRO_TK_NO_ERROR);
err = ProDtlentitydataColorGet (ent_data, &color);
TEST_CALL_REPORT("ProDtlentitydataColorGet()",
"ProTestEntInfo()", err, err != PRO_TK_NO_ERROR);
err = ProDtlentitydataFontGet (ent_data, font);
TEST_CALL_REPORT("ProDtlentitydataFontGet()",
"ProTestEntInfo()", err, err != PRO_TK_NO_ERROR);
err = ProDtlentitydataWidthGet (ent_data, &width);
TEST_CALL_REPORT("ProDtlentitydataWidthGet()",
"ProTestEntInfo()", err, err != PRO_TK_NO_ERROR);
ProWstringToString (string, font);
ProTKFprintf(fp, "%d\t%d\t%s\t%5.3f\t",ent_id, crv_type, string,
width);
ProTestColorPrint (fp, color);
err = ProDtlentitydataFree( ent_data );
TEST_CALL_REPORT("ProDtlentitydataFree()",
"ProTestEntInfo()", err, err != PRO_TK_NO_ERROR);
}
fclose (fp);
ProStringToWstring(font, fname);
err = ProInfoWindowDisplay(font, NULL, NULL);
err = ProArrayFree ((ProArray*)&dtl_ent_arr);
return (0);
}
/*===========================================================================*\
Function : ProTestColorPrint
Purpose :
\*===========================================================================*/
void ProTestColorPrint (FILE *fp, ProColor color)
{
switch (color.method)
{
case PRO_COLOR_METHOD_DEFAULT :
ProTKFprintf(fp, "Default\n");
break;
case PRO_COLOR_METHOD_TYPE :
ProTKFprintf(fp, "Type: %d\n", color.value.type);
break;
case PRO_COLOR_METHOD_RGB :
ProTKFprintf(fp, "red:%5.3f green:%5.3f blue:%5.3f\n",
color.value.map.red, color.value.map.green,
color.value.map.blue);
break;
default :
ProTKFprintf(fp, "\n");
break;
}
}