/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*--------------------------------------------------------------------*\ Pro/Toolkit includes -- include this first \*--------------------------------------------------------------------*/ #include <ProToolkit.h> #include <ProArray.h> #include <ProAsmcomp.h> #include <ProFeatType.h> #include <ProFeature.h> #include <ProMdl.h> #include <ProMenu.h> #include <ProMessage.h> #include <ProModelitem.h> #include <ProNote.h> #include <ProObjects.h> #include <ProSelection.h> #include <ProSizeConst.h> #include <ProUtil.h> #include <ProTKRunTime.h> #include <PTApplsUnicodeUtils.h> #include <UtilFiles.h> #include <ProAnnotation.h> /*--------------------------------------------------------------------*\ Application includes \*--------------------------------------------------------------------*/ #include "TestError.h" #include "TestSetup.h" #include "UtilMessage.h" #include "UtilString.h" #include "TestFiletypes.h" #include "UtilTypes.h" #include "UtilCollect.h" #include "UtilMath.h" #include "UtilMatrix.h" /*--------------------------------------------------------------------*\ Application macros \*--------------------------------------------------------------------*/ #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #define ADD_NOTE 0 #define DELETE_NOTE 1 #define SHOW_NOTE 2 #define TEXT_STYLE 3 #define DISPLAY_NOTE 4 #define EREASE_NOTE 5 #define MODIFY_HEIGHT 10 #define MODIFY_WIDTH 11 #define MODIFY_ANGLE 12 #define MODIFY_THIKNESS 13 #define MODIFY_MIRROR 14 #define MODIFY_UNDERLINE 16 #define MODIFY_FONTANGLE 18 #define MAX_NUM_LINES 120 #define GET_NAME 1 #define SET_NAME 2 /*====================================================================*\ FUNCTION : ProTestSetupMnu PURPOSE : Top level menu for the Setup Menu testing. \*====================================================================*/ int ProTestSetupMnu(ProMdl *model) { ProMdlType model_type; int ProTestNoteMnu(ProMdl model); ProError TestGtolMainMenu(); ProError status; int id; status = ProMdlTypeGet(*model, &model_type); TEST_CALL_REPORT("ProMdlTypeGet()", "ProTestSetupMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuFileRegister((char*)"TkSetup", (char*)"tksetup.mnu", &id); TEST_CALL_REPORT("ProMenuFileRegister()", "ProTestSetupMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkSetup", (char*)"TkSetup", (ProMenubuttonAction)ProMenuDelete, NULL, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestSetupMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkSetup", (char*)"Names", (ProMenubuttonAction)ProTestSetupNameMnu, *model, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestSetupMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkSetup", (char*)"-Notes", (ProMenubuttonAction)ProTestNoteMnu, *model, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestSetupMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkSetup", (char*)"-Gtol", (ProMenubuttonAction)TestGtolMainMenu, NULL, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestSetupMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkSetup", (char*)"-Done/Return", (ProMenubuttonAction)ProMenuDelete, NULL, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestSetupMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"TkSetup", &id); TEST_CALL_REPORT("ProMenuCreate()", "ProTestSetupMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuProcess((char*)"TkSetup", &id); TEST_CALL_REPORT("ProMenuProcess()", "ProTestSetupMnu()", status, status != PRO_TK_NO_ERROR); return (0); } /*====================================================================*\ FUNCTION : ProTestFeatMnu PURPOSE : Top level menu for the Note testing. \*====================================================================*/ int ProTestNoteMnu(ProMdl model) { #ifndef PT_PRODUCTS_BUILD ProMdlType model_type; int ProTestNote(ProMdl model, int action); ProError status; int id; status = ProMdlTypeGet(model, &model_type); TEST_CALL_REPORT("ProMdlTypeGet()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuFileRegister((char*)"TkNote", (char*)"tknote.mnu", &id); TEST_CALL_REPORT("ProMenuFileRegister()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkNote", (char*)"TkNote", (ProMenubuttonAction)ProMenuDelete, NULL, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkNote", (char*)"-Add Note", (ProMenubuttonAction)ProTestNote, model, ADD_NOTE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkNote", (char*)"-Delete Note", (ProMenubuttonAction)ProTestNote, model, DELETE_NOTE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkNote", (char*)"-Show Note", (ProMenubuttonAction)ProTestNote, model, SHOW_NOTE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkNote", (char*)"-Display notes", (ProMenubuttonAction)ProTestNote, model, DISPLAY_NOTE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkNote", (char*)"-Erease notes", (ProMenubuttonAction)ProTestNote, model, EREASE_NOTE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkNote", (char*)"-Text style", (ProMenubuttonAction)ProTestNote, model, TEXT_STYLE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"TkNote", &id); TEST_CALL_REPORT("ProMenuCreate()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuProcess((char*)"TkNote", &id); TEST_CALL_REPORT("ProMenuProcess()", "ProTestNoteMnu()", status, status != PRO_TK_NO_ERROR); #endif /* #ifndef PT_PRODUCTS_BUILD */ return (0); } #ifndef PT_PRODUCTS_BUILD /*====================================================================*\ FUNCTION : ProTestSelectAttr() PURPOSE : Action function for selecting attach attrs. \*====================================================================*/ int ProTestSelectAttr( ProMdl model, int action) { ProMenuDeleteWithStatus (action); return (0); } /*====================================================================*\ FUNCTION : ProTestNote() PURPOSE : General action function for the Note testing. \*====================================================================*/ int ProTestNote( ProMdl model, int action) { ProError status; ProModelitem note_item, *notes; wchar_t** p_text; int i, j, n_lines=0, p_size=0, n_notes=0, num_note = 0; wchar_t w_line[PRO_LINE_SIZE]; char str[PRO_LINE_SIZE]; int id, attrib; FILE *note_fp; char filename[] = "note_test.inf"; wchar_t wfilename[PRO_LINE_SIZE]; char opt[] = "edge"; int max_count = -1, num_attach; ProSelection *sel_attach, *sel_note , *note_plane; ProNoteAttach note_attach; wchar_t wstr_url [500]; ProTextStyle text_style; ProMouseButton mouse_button; ProPoint3d free_point, note_point, outline[2]; double text_double; int text_int; ProMatrix matrix, inv_matrix; ProMatrix def_matrix = {{1.0, 0.0, 0.0, 0.0}, {0.0, 1.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}}; ProDrawMode draw_mode = PRO_DRAW_NO_MODE; ProModelitem note_owner; int length; wchar_t* tmp_wchar_ptr; wchar_t *getUrl = NULL; ProVector annotPlaneUnit = {1.00,1.00,1.00}; ProAnnotationPlane annotPlane; switch(action) { case ADD_NOTE : status = ProArrayAlloc(1, sizeof(wchar_t*), 1, (ProArray*)&p_text); TEST_CALL_REPORT("ProArrayAlloc()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); /* Get several lines of text */ while(n_lines < MAX_NUM_LINES) { ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Enter note text [QUIT]:"); if(ProUtilStringGet(w_line, NULL, PRO_LINE_SIZE) == 0) break; ProWstringLengthGet (w_line, &length); if(n_lines == 0) { p_text [0] = (wchar_t*) calloc (length + 1, sizeof (wchar_t)); } else { tmp_wchar_ptr = (wchar_t*) calloc (length + 1, sizeof (wchar_t)); status = ProArrayObjectAdd ((ProArray*)&p_text, -1, 1, &tmp_wchar_ptr); TEST_CALL_REPORT("ProArrayObjectAdd()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); } ProWstringCopy (w_line, p_text [n_lines], PRO_VALUE_UNUSED); n_lines++; } if(n_lines == 0) return(0); /*--------------------------------------------------------------------------*\ Creates a note (test ProSolidNoteCreate) \*--------------------------------------------------------------------------*/ status = ProSolidNoteCreate(model, NULL, p_text, ¬e_item); TEST_CALL_REPORT("ProSolidNoteCreate()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); for (i = 0; i < n_lines; i++) { free (p_text [i]); } ProArrayFree((ProArray*)&p_text); /*--------------------------------------------------------------------------*\ Sets URL (test ProNoteURLSet, ProNoteURLGet) \*--------------------------------------------------------------------------*/ ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Enter URL [QUIT]:"); status = ProMessageStringRead (500, (wchar_t*)wstr_url); if (status == PRO_TK_NO_ERROR) { status = ProNoteURLWstringSet (¬e_item, wstr_url); TEST_CALL_REPORT("ProNoteURLWstringSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); } /*--------------------------------------------------------------------------*\ Menu for attachment attributes \*--------------------------------------------------------------------------*/ status = ProMenuFileRegister((char*)"Attach attr",(char*)"tkattr.mnu",&id); TEST_CALL_REPORT("ProMenuFileRegister()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"Attach attr",(char*)"-None", (ProMenubuttonAction)ProTestSelectAttr,NULL, PRO_NOTE_ATT_NONE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"Attach attr",(char*)"-Normal", (ProMenubuttonAction)ProTestSelectAttr,NULL, PRO_NOTE_ATT_NORMAL); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"Attach attr",(char*)"-Tangent", (ProMenubuttonAction)ProTestSelectAttr,NULL, PRO_NOTE_ATT_TANGENT); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"Attach attr",(char*)"Attach attr", (ProMenubuttonAction)ProMenuDelete,NULL,0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenuCreate(PROMENUTYPE_MAIN,(char*)"Attach attr",&id); TEST_CALL_REPORT("ProMenuCreate()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenuProcess((char*)"",&attrib); TEST_CALL_REPORT("ProMenuProcess()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); /*--------------------------------------------------------------------------*\ Select leaders for attachment \*--------------------------------------------------------------------------*/ status = ProSelect (opt, max_count, NULL, NULL, NULL, NULL, &sel_attach, &num_attach); if (status != PRO_TK_NO_ERROR || num_attach < 1) return (0); /*--------------------------------------------------------------------------*\ Allocate memory for note attachment (test ProNoteAttachAlloc) \*--------------------------------------------------------------------------*/ status = ProNoteAttachAlloc (¬e_attach); TEST_CALL_REPORT("ProNoteAttachAlloc()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); for (i = 0; i < num_attach; i++) { /*--------------------------------------------------------------------------*\ Add leader to attachment \*--------------------------------------------------------------------------*/ status = ProNoteAttachAddend(note_attach, sel_attach[i], (ProNoteAttachAttr)attrib); TEST_CALL_REPORT("ProNoteAttachAddend()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); } /*--------------------------------------------------------------------------*\ Assign annotation plane \*--------------------------------------------------------------------------*/ ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Select annotation plane for note"); status = ProSelect("datum",1,NULL,NULL,NULL,NULL,¬e_plane,&num_attach); TEST_CALL_REPORT("ProSelect()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProAnnotationplaneCreate(note_plane[0],annotPlaneUnit,&annotPlane); TEST_CALL_REPORT("ProAnnotationplaneCreate()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); /*--------------------------------------------------------------------------*\ Select location for note and translate screen coordinates in params \*--------------------------------------------------------------------------*/ ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Select location for note"); status = ProMousePickGet (PRO_LEFT_BUTTON, &mouse_button, free_point); TEST_CALL_REPORT("ProMousePickGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); ProViewMatrixGet (model, NULL, matrix); ProUtilMatrixInvert (matrix, inv_matrix); ProUtilPointTrans (inv_matrix, free_point, note_point); ProSolidDispoutlineGet ((ProSolid)model, def_matrix, outline); /*--------------------------------------------------------------------------*\ Sets location for note text (test PtoNoteAttachFreeSet, ProNoteAttachFreeGet) \*--------------------------------------------------------------------------*/ note_point[0] = (note_point[0]-outline[0][0])/(outline[1][0]-outline[0][0]); note_point[1] = (note_point[1]-outline[0][1])/(outline[1][1]-outline[0][1]); note_point[2] = (note_point[2]-outline[0][2])/(outline[1][2]-outline[0][2]); status = ProNoteAttachFreeSet (note_attach, note_point[0], note_point[1], note_point[2]); TEST_CALL_REPORT("ProNoteAttachFreeSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); /*--------------------------------------------------------------------------*\ Sets placement for note (test ProNotePlacementSet, ProNotePlacementGet) \*--------------------------------------------------------------------------*/ status = ProNotePlacementSet (¬e_item, note_attach); TEST_CALL_REPORT("ProNotePlacementSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); /*--------------------------------------------------------------------------*\ Display note (test ProNoteDisplay) \*--------------------------------------------------------------------------*/ status = ProAnnotationShow (¬e_item,NULL , NULL); TEST_CALL_REPORT("ProAnnotationShow()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); /*--------------------------------------------------------------------------*\ Release attachment (test ProNoteAttachRelease) \*--------------------------------------------------------------------------*/ status = ProNoteAttachRelease (¬e_attach); TEST_CALL_REPORT("ProNoteAttachRelease()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); break; case DELETE_NOTE : ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Select note for delete"); status = ProSelect ((char*)"note_3d" ,1 , NULL, NULL, NULL, NULL, &sel_note, &num_note); if (status != PRO_TK_NO_ERROR || num_note != 1) return (0); status = ProSelectionModelitemGet (sel_note[0], ¬e_item); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); if (status != PRO_TK_NO_ERROR) break; status = ProNoteDelete(¬e_item); TEST_CALL_REPORT("ProNoteDelete()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); break; case SHOW_NOTE : ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Select note for show"); status = ProSelect ((char*)"note_3d" ,1 , NULL, NULL, NULL, NULL, &sel_note, &num_note); if (status != PRO_TK_NO_ERROR || num_note != 1) return (0); status = ProSelectionModelitemGet (sel_note[0], ¬e_item); status = ProNoteTextGet(¬e_item, PRODISPMODE_SYMBOLIC, &p_text); TEST_CALL_REPORT("ProNoteTextGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProArraySizeGet((ProArray*)p_text, &p_size); /* Set obtained notes only to test this function */ status = ProNoteTextSet(¬e_item, p_text ); TEST_CALL_REPORT( "ProNoteTextSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); if ( (note_fp = PTApplsUnicodeFopen(filename,"w")) == NULL) { ProTKFprintf(stderr,(char*)"Error opening file for writing\n"); return -1; } for(j= 0; j< p_size; j++) ProTKFprintf(note_fp,(char*)"%s\n", ProWstringToString(str, p_text[j]) ); ProWstringproarrayFree (p_text); status = ProNoteURLWstringGet (¬e_item, &getUrl); TEST_CALL_REPORT("ProNoteURLWstringGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProNoteOwnerGet (¬e_item, ¬e_owner); TEST_CALL_REPORT("ProNoteOwnerGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); ProTKFprintf (note_fp, (char*)"URL: %s\n", ProWstringToString (str, getUrl)); /*status = ProModelitemNameGet (¬e_owner, wstr_url); TEST_CALL_REPORT("ProModelitemNameGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); if (status == PRO_TK_E_NOT_FOUND) fprintf (note_fp, "Owner does not have a name"); else if (status == PRO_TK_NO_ERROR) fprintf (note_fp, "Owner: %s\n", ProWstringToString (str, wstr_url));*/ status = ProTextStyleAlloc (&text_style); TEST_CALL_REPORT("ProTextStyleAlloc()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProTextStyleHeightGet (text_style, &text_double); TEST_CALL_REPORT("ProTextStyleHeightGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_GENERAL_ERROR); if (status == -1) ProTKFprintf (note_fp, (char*)"Height DEFAULT\n"); else if (status == PRO_TK_NO_ERROR) ProTKFprintf (note_fp, (char*)"Height %f\n", text_double); status = ProTextStyleWidthGet (text_style, &text_double); TEST_CALL_REPORT("ProTextStyleWidthGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_GENERAL_ERROR); if (status == -1) ProTKFprintf (note_fp, (char*)"Width DEFAULT\n"); else if (status == PRO_TK_NO_ERROR) ProTKFprintf (note_fp, (char*)"Width %f\n", text_double); status = ProTextStyleAngleGet (text_style, &text_double); TEST_CALL_REPORT("ProTextStyleAngleGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); ProTKFprintf (note_fp, (char*)"Angle %f\n", text_double); status = ProTextStyleSlantAngleGet (text_style, &text_double); TEST_CALL_REPORT("ProTextStyleSlantAngleGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); ProTKFprintf (note_fp, (char*)"Slant angle %f\n", text_double); status = ProTextStyleThicknessGet (text_style, &text_double); TEST_CALL_REPORT("ProTextStyleThicknessGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_GENERAL_ERROR); if (status == -1) ProTKFprintf (note_fp, (char*)"Thickness DEFAULT\n"); else if (status == PRO_TK_NO_ERROR) ProTKFprintf (note_fp, (char*)"Thickness %f\n", text_double); status = ProTextStyleMirrorGet (text_style, &text_int); TEST_CALL_REPORT("ProTextStyleMirrorGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); ProTKFprintf (note_fp, (char*)"Mirror %s\n", text_int ? "On" : "Off"); status = ProTextStyleUnderlineGet (text_style, &text_int); TEST_CALL_REPORT("ProTextStyleUnderlineGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); ProTKFprintf (note_fp, (char*)"Underline %s\n", text_int ? "On" : "Off"); status = ProTextStyleFree (&text_style); TEST_CALL_REPORT("ProTextStyleFree()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); fclose(note_fp); ProInfoWindowDisplay (ProStringToWstring(wfilename, filename), NULL, NULL); break; case DISPLAY_NOTE: draw_mode = PRO_DRAW_SET_MODE; break; case EREASE_NOTE: status = ProUtilCollectModelNotes(model, ¬es); if (status != PRO_TK_NO_ERROR) break; status = ProArraySizeGet((ProArray*)notes, &n_notes); for(i= 0; i< n_notes; i++) { status = ProNoteDisplay (&(notes[i]), draw_mode); TEST_CALL_REPORT("ProNoteDelete()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); } ProArrayFree((ProArray*)¬es); break; case TEXT_STYLE: /*--------------------------------------------------------------------------*\ Menu for text style operations \*--------------------------------------------------------------------------*/ status = ProMenuFileRegister((char*)"-Text style",(char*)"tktextstyle.mnu",&id); TEST_CALL_REPORT("ProMenuFileRegister()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"-Text style",(char*)"-Height", (ProMenubuttonAction)ProTestSelectAttr,NULL, MODIFY_HEIGHT); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"-Text style",(char*)"-Width", (ProMenubuttonAction)ProTestSelectAttr,NULL, MODIFY_WIDTH); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"-Text style",(char*)"-Angle", (ProMenubuttonAction)ProTestSelectAttr,NULL, MODIFY_ANGLE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"-Text style",(char*)"-Slant angle", (ProMenubuttonAction)ProTestSelectAttr,NULL, MODIFY_FONTANGLE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"-Text style",(char*)"-Thikness", (ProMenubuttonAction)ProTestSelectAttr,NULL, MODIFY_THIKNESS); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"-Text style",(char*)"-Mirror", (ProMenubuttonAction)ProTestSelectAttr,NULL, MODIFY_MIRROR); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"-Text style",(char*)"-Underline", (ProMenubuttonAction)ProTestSelectAttr,NULL, MODIFY_UNDERLINE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"-Text style",(char*)"-Text style", (ProMenubuttonAction)ProMenuDelete,NULL,0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenuCreate(PROMENUTYPE_MAIN,(char*)"-Text style",&id); TEST_CALL_REPORT("ProMenuCreate()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); status = ProMenuProcess((char*)"",&attrib); TEST_CALL_REPORT("ProMenuProcess()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Select note for change text style."); status = ProSelect ((char*)"note_3d" ,1 , NULL, NULL, NULL, NULL, &sel_note, &num_note); if (status != PRO_TK_NO_ERROR || num_note != 1) return (0); status = ProSelectionModelitemGet (sel_note[0], ¬e_item); status = ProTextStyleAlloc (&text_style); TEST_CALL_REPORT("ProTextStyleAlloc()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); switch (attrib) { case MODIFY_HEIGHT: status = ProTextStyleHeightGet (text_style, &text_double); TEST_CALL_REPORT("ProTextStyleHeightGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_GENERAL_ERROR); if (status == -1) ProTKSprintf (str, (char*)"Enter height [DEFAULT]:"); else if (status == PRO_TK_NO_ERROR) ProTKSprintf (str, (char*)"Enter height [%f]", text_double); else return (0); ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", str); if(ProUtilDoubleGet(NULL, NULL, &text_double) == 0) break; status = ProTextStyleHeightSet (text_style, text_double); TEST_CALL_REPORT("ProTextStyleHeightSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); break; case MODIFY_WIDTH: status = ProTextStyleWidthGet (text_style, &text_double); TEST_CALL_REPORT("ProTextStyleWidthGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_GENERAL_ERROR); if (status == -1) ProTKSprintf (str, (char*)"Enter width [DEFAULT]"); else if (status == PRO_TK_NO_ERROR) ProTKSprintf (str, (char*)"Enter width [%f]", text_double); else return (0); ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", str); if(ProUtilDoubleGet(NULL, NULL, &text_double) == 0) break; status = ProTextStyleWidthSet (text_style, text_double); TEST_CALL_REPORT("ProTextStyleWidthSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); break; case MODIFY_ANGLE: status = ProTextStyleAngleGet (text_style, &text_double); TEST_CALL_REPORT("ProTextStyleAngleGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); if (status == PRO_TK_NO_ERROR) ProTKSprintf (str, (char*)"Enter angle [%f]", text_double); else return (0); ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", str); if(ProUtilDoubleGet(NULL, NULL, &text_double) == 0) break; status = ProTextStyleAngleSet (text_style, text_double); TEST_CALL_REPORT("ProTextStyleAngleSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); break; case MODIFY_FONTANGLE: status = ProTextStyleSlantAngleGet (text_style, &text_double); TEST_CALL_REPORT("ProTextStyleSlantAngleGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); if (status == PRO_TK_NO_ERROR) ProTKSprintf (str, (char*)"Enter slant angle [%f]", text_double); else return (0); ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", str); if(ProUtilDoubleGet(NULL, NULL, &text_double) == 0) break; status = ProTextStyleSlantAngleSet (text_style, text_double); TEST_CALL_REPORT("ProTextStyleSlantAngleSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); break; case MODIFY_THIKNESS: status = ProTextStyleThicknessGet (text_style, &text_double); TEST_CALL_REPORT("ProTextStyleThicknessGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_GENERAL_ERROR); if (status == -1) ProTKSprintf (str, (char*)"Enter thickness [DEFAULT]"); else if (status == PRO_TK_NO_ERROR) ProTKSprintf (str, (char*)"Enter thickness [%f]", text_double); else return (0); ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", str); if(ProUtilDoubleGet(NULL, NULL, &text_double) == 0) break; status = ProTextStyleThicknessSet (text_style, text_double); TEST_CALL_REPORT("ProTextStyleThicknessSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); break; case MODIFY_MIRROR: status = ProTextStyleMirrorGet (text_style, &text_int); TEST_CALL_REPORT("ProTextStyleMirrorGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); if (status == PRO_TK_NO_ERROR) ProTKSprintf (str, (char*)"Mirror on(1)/off(0) [%s]", text_int ? "on" : "off"); else return (0); ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", str); if(ProUtilIntGet(NULL, NULL, &text_int) == 0) break; status = ProTextStyleMirrorSet (text_style, text_int); TEST_CALL_REPORT("ProTextStyleMirrorSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); break; case MODIFY_UNDERLINE: status = ProTextStyleUnderlineGet (text_style, &text_int); TEST_CALL_REPORT("ProTextStyleUnderlineGet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); if (status == PRO_TK_NO_ERROR) ProTKSprintf (str, (char*)"Underline on(1)/off(0) [%s]", text_int ? "on" : "off"); else return (0); ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", str); if(ProUtilIntGet(NULL, NULL, &text_int) == 0) break; status = ProTextStyleUnderlineSet (text_style, text_int); TEST_CALL_REPORT("ProTextStyleUnderlineSet()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); break; } status = ProTextStyleFree (&text_style); TEST_CALL_REPORT("ProTextStyleFree()", "ProTestNote()", status, status != PRO_TK_NO_ERROR); break; } return(0); } #endif /* #ifndef PT_PRODUCTS_BUILD */ /*====================================================================*\ FUNCTION : ProTestSetupNameMnu PURPOSE : Top level menu for the Name Setup testing. \*====================================================================*/ int ProTestSetupNameMnu(ProMdl model) { ProError status; ProMdlType model_type; int id; status = ProMdlTypeGet(model, &model_type); TEST_CALL_REPORT("ProMdlTypeGet()", "ProTestSetupNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuFileRegister((char*)"TkSetupName", (char*)"tksetupnm.mnu", &id); TEST_CALL_REPORT("ProMenuFileRegister()", "ProTestSetupNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkSetupName", (char*)"Feature", (ProMenubuttonAction)ProTestNameMnu, model, PRO_FEATURE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestSetupNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkSetupName", (char*)"Others", (ProMenubuttonAction)ProTestNameMnu, model, -1); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestSetupNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkSetupName", (char*)"List Names", (ProMenubuttonAction)ProTestListAllNames, model, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestSetupNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkSetupName", (char*)"TkSetupName", (ProMenubuttonAction)ProMenuDelete, NULL, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestSetupNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"TkSetupName", &id); TEST_CALL_REPORT("ProMenuCreate()", "ProTestSetupNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuProcess((char*)"TkSetupName", &id); TEST_CALL_REPORT("ProMenuProcess()", "ProTestSetupNameMnu()", status, status != PRO_TK_NO_ERROR); return(0); } /* End of ProTestSetupNameMnu() */ /*====================================================================*\ FUNCTION : ProTestNameMnu PURPOSE : Top level menu for the Name testing. \*====================================================================*/ int ProTestNameMnu(ProMdl model, int item_type) { ProError status; ProMdlType model_type; int id; status = ProMdlTypeGet(model, &model_type); TEST_CALL_REPORT("ProMdlTypeGet()", "ProTestNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuFileRegister((char*)"TkName", (char*)"tkname.mnu", &id); TEST_CALL_REPORT ("ProMenuFileRegister", "ProTestNameMnu", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonGenactionSet((char*)"TkName", (char*)"Get Name", (ProMenubuttonGenaction)ProTestSetupName, model, (ProAppData)item_type, (ProAppData)GET_NAME, NULL, NULL, NULL); TEST_CALL_REPORT("ProMenubuttonGenactionSet()", "ProTestNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonGenactionSet((char*)"TkName", (char*)"Set Name", (ProMenubuttonGenaction)ProTestSetupName, model, (ProAppData)item_type, (ProAppData)SET_NAME, NULL, NULL, NULL); TEST_CALL_REPORT("ProMenubuttonGenactionSet()", "ProTestNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet((char*)"TkName", (char*)"TkName", (ProMenubuttonAction)ProMenuDelete, NULL, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"TkName", &id); TEST_CALL_REPORT("ProMenuCreate()", "ProTestNameMnu()", status, status != PRO_TK_NO_ERROR); status = ProMenuProcess((char*)"TkName", &id); TEST_CALL_REPORT("ProMenuProcess()", "ProTestNameMnu()", status, status != PRO_TK_NO_ERROR); return(0); } /* End of ProTestNameMnu() */ /*====================================================================*\ FUNCTION : ProTestSetupName() PURPOSE : General action function for the Name Setup testing. \*====================================================================*/ int ProTestSetupName(ProMdl model, int item_type, int action) { ProError status; ProMdlType model_type; char *msg, *options; ProSelection *sel_list; int n_sels, ret, cont = 1; ProModelitem sel_item; ProName o_name, n_name, d_name; status = ProMdlTypeGet(model, &model_type); TEST_CALL_REPORT("ProMdlTypeGet()", "ProTestSetupName()", status, status != PRO_TK_NO_ERROR); if (item_type == PRO_FEATURE) { msg = (char*)"Select a feature."; options = (char*)"feature"; } else { msg = (char*)"Select an item."; options = (char*)"edge,csys,axis,point,curve,dtmqlt,surface"; } while ( cont ) { ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", msg); status = ProSelect(options, 1, NULL, NULL, NULL, NULL, &sel_list, &n_sels); TEST_CALL_REPORT("ProSelect()", "ProTestSetupName()", status, status == PRO_TK_COMM_ERROR); if (status != PRO_TK_NO_ERROR) return(-1); status = ProSelectionModelitemGet(sel_list[0], &sel_item); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestSetupName()", status, status != PRO_TK_NO_ERROR); status = ProModelitemNameGet(&sel_item, o_name); TEST_CALL_REPORT("ProModelitemNameGet()", "ProTestSetupName()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_E_NOT_FOUND); ret = 0; switch (action) { case GET_NAME: if (o_name[0] == NULL_WCHAR) ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", "The selected item does not have a name."); else ProUtilMsgPrint((char*)"gen", (char*)"TEST The selected item's name is : %0w", o_name); break; case SET_NAME: if (o_name[0] == NULL_WCHAR) ProStringToWstring(d_name, (char*)"QUIT"); else ProUtilWstrcpy(d_name, o_name); ProUtilMsgPrint((char*)"gen", (char*)"TEST Enter the new name [%0w] : ", d_name); status = ProMessageStringRead(PRO_NAME_SIZE, n_name); if (status != PRO_TK_NO_ERROR) ret = -1; else if ( ProUtilWstrCmp(n_name, o_name) != 0 ) { status = ProModelitemNameSet(&sel_item, n_name); TEST_CALL_REPORT("ProModelitemNameSet()", "ProTestSetupName()", status, status != PRO_TK_NO_ERROR); } break; } status = ProSelectionUnhighlight(sel_list[0]); TEST_CALL_REPORT("ProSelectionUnhighlight()", "ProTestSetupName()", status, status != PRO_TK_NO_ERROR); } return(ret); } /* End of ProTestSetupName() */ /*====================================================================*\ FUNCTION : ProTestListAllNames() PURPOSE : General action function for the Name Listing. \*====================================================================*/ int ProTestListAllNames(ProMdl model) { int status; ProMdlType model_type; ProCharName filename; ProName wfilename; FILE *fp; status = ProMdlTypeGet(model, &model_type); TEST_CALL_REPORT("ProMdlTypeGet()", "ProTestListAllNames()", (ProError)status, status != PRO_TK_NO_ERROR); ProTestQcrName(&model, (char*)NAMES, filename); fp = PTApplsUnicodeFopen(filename, "w"); status = ProTestListNames(( ProSolid )model, fp); fclose(fp); status = ProInfoWindowDisplay( ProStringToWstring(wfilename, filename), NULL, NULL ); TEST_CALL_REPORT("ProInfoWindowDisplay()", "ProTestListAllNames()", (ProError)status, status != PRO_TK_NO_ERROR); return(0); } /* End of ProTestListAllNames() */ /*====================================================================*\ FUNCTION : ProTestListName() PURPOSE : Generalized action function for visiting notes. \*====================================================================*/ int ProTestListNames(ProMdl model, FILE *fp) { int status; ProMdlType model_type; ProMdlName model_name; ProFeature *features; int features_num, i; status = ProMdlTypeGet(model, &model_type); TEST_CALL_REPORT("ProMdlTypeGet()", "ProTestListAllNames()", (ProError)status, status != PRO_TK_NO_ERROR); status = ProMdlMdlnameGet(model, model_name); TEST_CALL_REPORT("ProMdlMdlnameGet()", "ProTestListNames()", (ProError)status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp, (char*)"\n********************************************************\n"); ProTKFprintf(fp, (char*)"MODEL NAME: %S, MODEL TYPE: %d\n\n", model_name, model_type); ProTKFprintf(fp, (char*)" ID TYPE NAME\n"); ProTKFprintf(fp, (char*)"==== ================== ================================\n"); status = ProUtilCollectSolidFeatures ((ProSolid)model, &features); if (status == PRO_TK_NO_ERROR) { status = ProArraySizeGet ((ProArray)features, &features_num); TEST_CALL_REPORT( "ProArraySizeGet()", "ProTestListNames()", (ProError)status, status != PRO_TK_NO_ERROR ); for (i = 0; i < features_num; i++) { status = ProTestListNameAction (features+i, PRO_TK_NO_ERROR, (ProAppData)fp); } status = ProArrayFree ((ProArray*)&features); TEST_CALL_REPORT( "ProArrayFree()", "ProTestListNames()", (ProError)status, status != PRO_TK_NO_ERROR ); } return( PRO_TK_NO_ERROR ); } /* End of ProTestListNames() */ /*====================================================================*\ FUNCTION : ProTestListNameAction() PURPOSE : Generalized action function for visiting notes. \*====================================================================*/ ProError ProTestListNameAction(ProFeature *p_feat, ProError stat, ProAppData app_data) { int status, feat_type; ProCharName type_str; FILE *fp; ProMdl model; ProName feat_name; ProGeomitem *geomitems; int geomitems_num, i; status = ProFeatureTypeGet(p_feat, &feat_type); if (status != PRO_TK_NO_ERROR) return((ProError)status); fp = ( FILE * )app_data; if (feat_type == PRO_FEAT_COMPONENT) { status = ProAsmcompMdlGet(( ProAsmcomp * )p_feat, &model); TEST_CALL_REPORT("ProAsmcompMdlGet()", "ProTestListNameAction()", (ProError)status, status != PRO_TK_NO_ERROR); status = ProTestListNames(( ProSolid )model, fp); TEST_CALL_REPORT("ProTestListNames()", "ProTestListNameAction()", (ProError)status, status != PRO_TK_NO_ERROR); return( PRO_TK_NO_ERROR ); } status = ProModelitemNameGet(p_feat, feat_name); TEST_CALL_REPORT("ProModelitemNameGet()", "ProTestListNameAction()", (ProError)status, status != PRO_TK_NO_ERROR); if (feat_name[0] != NULL_WCHAR) { status = ProUtilFeattypeStr(feat_type, type_str); TEST_CALL_REPORT("ProUtilFeattypeStr()", "ProTestListNameAction()", (ProError)status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp, (char*)"%4d %-18s %-32S\n", p_feat->id, type_str, feat_name); } status = ProUtilCollectFeatureGeomitems (p_feat, PRO_TYPE_UNUSED, &geomitems); if (status == PRO_TK_NO_ERROR) { status = ProArraySizeGet ((ProArray)geomitems, &geomitems_num); TEST_CALL_REPORT( "ProArraySizeGet()", "ProTestListNameAction()", (ProError)status, status != PRO_TK_NO_ERROR ); for (i = 0; i < geomitems_num; i++) { status = ProTestListGeomAction (geomitems+i, PRO_TK_NO_ERROR, (ProAppData)fp); } status = ProArrayFree ((ProArray*)&geomitems); TEST_CALL_REPORT( "ProArrayFree()", "ProTestListNameAction()", (ProError)status, status != PRO_TK_NO_ERROR ); } return( PRO_TK_NO_ERROR ); } /* End of ProTestListNameAction() */ /*====================================================================*\ FUNCTION : ProTestListNameAction() PURPOSE : Generalized action function for visiting notes. \*====================================================================*/ ProError ProTestListGeomAction(ProModelitem *p_item, ProError stat, ProAppData app_data) { int status; ProName item_name; ProCharName type_str; FILE *fp; status = ProModelitemNameGet(p_item, item_name); TEST_CALL_REPORT("ProModelitemNameGet()", "ProTestListGeomAction()", (ProError)status, status != PRO_TK_NO_ERROR); if (item_name[0] != NULL_WCHAR) { status = ProUtilObjtypeStr(p_item->type, type_str); TEST_CALL_REPORT("ProUtilObjtypeStr()", "ProTestListGeomAction()", (ProError)status, status != PRO_TK_NO_ERROR); fp = ( FILE * )app_data; ProTKFprintf(fp, (char*)"%4d %-18s %-32S\n", p_item->id, type_str, item_name); } return( PRO_TK_NO_ERROR ); } /* End of ProTestListGeomAction() */