⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utiltree.c

📁 Pro.TOOLKIT.Wildfire插件设计.配套光盘-141M.zip
💻 C
📖 第 1 页 / 共 4 页
字号:
/*====================================================================*\FILE    : UtilTree.cPURPOSE : Element tree related utility functionsHISTORY..DATE      BUILD   AUTHOR   MODIFICATIONS12-Nov-96 H-01-16 mgs      $$1 Created22-Nov-96 H-01-18 mgs      $$2 Removed extra ProInfoWindowDisplay()04-Dec-96 H-01-19 igor     $$3 added env var for graphical window02-Dec-96 H-01-19 amin     $$4 Changed order of arg for ProStringToWstring06-Dec-96 H-01-20 amin     $$5 ProCurrentTextAttributesGet -> ProTextAttributesCurrentGet17-Dec-96 H-01-21 Igor     $$6 Bug fixed18-Dec-96 H-01-21 amin     $$7 Removed calls to ProCurrentText20-Jan-97 H-01-24 Alexey   $$8 Update for further testing effort29-Jan-97 H-01-25 Igor     $$9 put a check if model exists before creating 08-Apr-97 H-03-05 Igor     $$10 output ids for selection15-Sep-97 H-03-22 Pavel    $$11 replace pro/D on Pro/E05-Oct-97 H-03-25 Pavel	   $$12 Added more includes01-Nov-97 H-03-27 Pavel	   $$13 Added ProUtilElemtreeReplaceSelection24-Nov-97 H-03-30 Alexey   $$14 Handle default data type in ProUtilValuePrint01-Dec-97 H-03-31 Pavel	   $$15 Added ProUtilSelectionChangeAsmcomppath10-Dec-97 H-03-31 Alexey   $$16 Added PRO_VALUE_TYPE_TRANSFORM data type case				to ProUtilValuePrint20-Jan-98 H-03-37 aab      $$17 Added some type casting for c++ compiler26-Jan-98 H-03-37 aab      $$18 Fixed bug in ProUtilElemtreePPrint                                initialized fname, than open file27-Jan-98 H-03-38 Pavel    $$19 Added ProUtilElemtreeCreate, 				ProUtilElemtreeElementGet11-Feb-98 H-03-38 ljl      $$20 Added cast for C++ compiler14-Feb-98 H-03-39 Pavel    $$21 Added ProUtilFeatErrsPrint24-Feb-98 H-03-40 aab	   $$22 Added ProUtilElementValueSet and fixed                                      ProUtilElemtreeElemPrint01-Jul-98 I-01-13 AKH      $$23 Add support for PT/Products Toolkit25-Aug-98 I-01-16 AKH      $$24 ProUtilElemValuePrint(): Consider the case when 				multivalue element has no values at all.13-Oct-98 I-01-23 aab      $$25 fixed bug in ProUtilElemtreeReplaceSelection26-Nov-98 I-01-27 Pavel    $$26 Fixed TEST_CALL_REPORT01-Jun-99 I-03-11 mka      $$27 Delete unused variable13-Sep-99 J-01-18 shkulkar $$28 Added NULL checks for Hull Features19-Jul-01 J-03-04 JCN      $$29 Removed return value check for ProValueFree(SPR 891469)\*====================================================================*/#ifndef lintstatic char UtilTree_c [] = "@(#)UtilTree.c     1.2 11/26/96";#endif/*--------------------------------------------------------------------*\Pro/Toolkit includes\*--------------------------------------------------------------------*/#include "ProToolkit.h"#include "ProMdl.h"#include "ProDisplist.h"#include "ProFeatType.h"#include "ProElement.h"#include "ProElemId.h"#include "ProElempath.h"#include "ProDtmPln.h"#include <string.h>#include <stdio.h>#include "prodevelop.h"/*--------------------------------------------------------------------*\Pro/Develop includes\*--------------------------------------------------------------------*//*--------------------------------------------------------------------*\Application macros\*--------------------------------------------------------------------*/#include "UtilTree.h"#include "TestError.h"#include "UtilString.h"#include "UtilCollect.h"/*--------------------------------------------------------------------*\Application data types\*--------------------------------------------------------------------*/extern ProError ProUtilIdToStr();/*--------------------------------------------------------------------*\Application global/external data\*--------------------------------------------------------------------*/typedef enum{   PRO_ELEMTREE_PRINT_ALL = 1,   PRO_ELEMTREE_PRINT_BRANCHES = 2} ProUtilElemtreePrintOpts;typedef struct{   ProUtilElemtreePrintOpts *options;   FILE                     *f;   int                       branches[2*PRO_ELEMTREE_MAX_LEVEL];   UtilTreeprintWindow window;} UtilElemtreePrintdata;static UtilGrWindowData win_data;static ProError ProUtilElemValuePrint ( ProElement, ProBoolean, ProBoolean, UtilElemtreePrintdata, char*);static ProError ProUtilValuePrint ( ProValue, UtilElemtreePrintdata, char*);static ProError ProUtilElemtreePPrint    (ProElement, ProElempath,ProUtilElemtreePrintOpts*,UtilTreeprintWindow*);static ProError ProUtilElemtreeElemPrint ( ProElement, ProElement, ProElempath, UtilElemtreePrintdata*);static ProError ProUtilElemPrint ( ProElement, ProBoolean, ProBoolean, ProBoolean, ProBoolean, UtilElemtreePrintdata, char*);static ProError ProUtilElemIdPrint ( ProElement, ProBoolean, ProBoolean, UtilElemtreePrintdata, char*);static ProError ProUtilDisp(char*, ProBool);static ProError ProUtilElemtreeInGrWindow( ProElement, ProElempath, ProUtilElemtreePrintOpts*s, int*);/*====================================================================*\FUNCTION : ProUtilElementtreePrintPURPOSE  : Print an entire element tree\*====================================================================*/ProError ProUtilElementtreePrint (   ProElement elem_tree,   UtilTreeprintWindow window,   int *grwin_id ){   ProError    status = PRO_TK_NO_ERROR;   ProElempath path = (ProElempath)NULL;   char *p_env_win;    /* get empty path */    status = ProElempathAlloc ( &path );    TEST_CALL_REPORT("ProElempathAlloc()", "ProUtilElementtreePrint()",                                status, (status != PRO_TK_NO_ERROR));    if ( status == PRO_TK_NO_ERROR )    {        switch (window)        {            case PRO_TEST_INFO_WINDOW:                status = ProUtilElemtreePPrint (elem_tree,path,NULL,&window);                break;            case PRO_TEST_GRAPHICS_WINDOW:                p_env_win = getenv("GRAPH_WINDOW");                if ((p_env_win == NULL) || (ProUtilStrcmp(p_env_win, "yes")))                  {                    *grwin_id = -1;                    break;                  }                status = ProUtilElemtreeInGrWindow( elem_tree, path, NULL,                                                                grwin_id);                break;        }    }    if ( path != (ProElempath)NULL )      {        status = ProElempathFree ( &path );        TEST_CALL_REPORT("ProElempathFree()", "ProUtilElementtreePrint",                                      status, status != PRO_TK_NO_ERROR);      }    return ( status );}/*====================================================================*\FUNCTION : ProUtilElemtreePPrintPURPOSE  : Print an element tree\*====================================================================*/static ProError ProUtilElemtreePPrint (   ProElement                  elem_tree,   ProElempath                 elem_path,   ProUtilElemtreePrintOpts   *options,   UtilTreeprintWindow *p_window){    UtilElemtreePrintdata  data;    ProError               status = PRO_TK_NO_ERROR;    char                   fname[PRO_NAME_SIZE];    wchar_t               wfname[PRO_NAME_SIZE];    data.options = options;    sprintf (fname, "%s", "elemtree.inf");    data.f = fopen (fname, "w");    if ( data.f == (FILE *)NULL )    {        status = PRO_TK_GENERAL_ERROR;    }    else    {        fprintf(data.f, "Element tree\n============\n\n");        if (*p_window == PRO_TEST_GRAPHICS_WINDOW)        {            ProUtilDisp("Element tree", PRO_B_FALSE);            win_data.point[1] = win_data.point[1] - win_data.decrease;            ProUtilDisp("============", PRO_B_FALSE);            win_data.point[1] = win_data.point[1] - 2 * win_data.decrease;        }    }    memset(data.branches, 0, sizeof(data.branches));    data.window = *p_window;    if ( status == PRO_TK_NO_ERROR )    {        status = ProElemtreeElementVisit ( elem_tree, elem_path,                (ProElemtreeVisitFilter)NULL,                (ProElemtreeVisitAction)ProUtilElemtreeElemPrint,                (ProAppData)&data );        TEST_CALL_REPORT("ProElemtreeElementVisit()","ProUtilElemtreePPrint()",                                        status, (status != PRO_TK_NO_ERROR));    }    if ( (data.f != (FILE *)NULL)&&(*p_window == PRO_TEST_INFO_WINDOW))    {        fclose ( data.f );        ProInfoWindowDisplay(ProStringToWstring(wfname, fname), NULL, NULL);    }    return ( status );}/*====================================================================*\FUNCTION : ProUtilElemtreeElemPrintPURPOSE  : Print the element tree\*====================================================================*/static ProError ProUtilElemtreeElemPrint (   ProElement     elem_tree,   ProElement     elem,   ProElempath    elem_path,   UtilElemtreePrintdata   *p_data){    int          i, level = -1, n_elems = -1;    ProElemId    id;    ProError     status = PRO_TK_NO_ERROR;    char         indent[2*PRO_ELEMTREE_MAX_LEVEL];    ProBoolean   is_compound = PRO_B_FALSE, is_array = PRO_B_FALSE,                 is_multi_val = PRO_B_FALSE, are_more_items = PRO_B_FALSE;    ProElement  *children;    status = ProElementIdGet (elem, &id );    TEST_CALL_REPORT("ProElementIdGet()","ProUtilElemtreeElemPrint()",                                        status, (status != PRO_TK_NO_ERROR));    status = ProElementIsCompound (elem_tree, elem_path, &is_compound);    TEST_CALL_REPORT("ProElementIsCompound()","ProUtilElemtreeElemPrint()",                                        status, (status != PRO_TK_NO_ERROR));    if (status == PRO_TK_NO_ERROR)    {        status = ProElementIsArray (elem_tree, elem_path, &is_array);        TEST_CALL_REPORT("ProElementIsArray()",                         "ProUtilElemtreeElemPrint()",                            status, (status != PRO_TK_NO_ERROR));    }    if (status == PRO_TK_NO_ERROR)    {        status = ProElempathSizeGet ( elem_path, &level );        TEST_CALL_REPORT("ProElempathSizeGet()",                         "ProUtilElemtreeElemPrint()",                            status, (status != PRO_TK_NO_ERROR));    }/*--------------------------------------------------------------------*\   Check to see if element is multivalued\*--------------------------------------------------------------------*/    if (status == PRO_TK_NO_ERROR)    {        status = ProElementIsMultival(elem_tree,elem_path, &is_multi_val);        TEST_CALL_REPORT("ProElementIsMultival()","ProUtilElemtreeElemPrint()",                                        status, (status != PRO_TK_NO_ERROR));    }/*--------------------------------------------------------------------*\    Set the indents properly\*--------------------------------------------------------------------*/    if (status != PRO_TK_NO_ERROR)        return PRO_TK_BAD_INPUTS;    if (is_compound || is_array)    {        status = ProArrayAlloc(0,sizeof(ProElement),1,(ProArray*) &children);        TEST_CALL_REPORT("ProArrayAlloc()","ProUtilElemtreeElemPrint()",                                        status, (status != PRO_TK_NO_ERROR));        if (status == PRO_TK_NO_ERROR)        {            if (is_compound)            {                status = ProElementChildrenGet(elem_tree, elem_path, &children);                TEST_CALL_REPORT("ProElementChildrenGet()",                             "ProUtilElemtreeElemPrint()",                              status, (status != PRO_TK_NO_ERROR));                if (status == PRO_TK_NO_ERROR)                {                    status = ProArraySizeGet((ProArray) children, &n_elems);                    TEST_CALL_REPORT("ProArraySizeGet()",                                 "ProUtilElemtreeElemPrint()",                                  status, (status != PRO_TK_NO_ERROR));                }            }            else            {                status = ProElementArrayGet(elem_tree, elem_path, &children);                TEST_CALL_REPORT("ProElementArrayGet()",                             "ProUtilElemtreeElemPrint()",                              status, (status != PRO_TK_NO_ERROR));		status = ProElementArrayCount(elem_tree, elem_path, &n_elems);		TEST_CALL_REPORT("ProElementArrayCount()",                                 "ProUtilElemtreeElemPrint()",                                  status, (status != PRO_TK_NO_ERROR));            }            if (level > 0)                (p_data->branches[level-1])--;            if (n_elems > 0)            {                p_data->branches[level] = n_elems;            }        }        status = ProArrayFree((ProArray*) &children);        TEST_CALL_REPORT("ProArrayFree()","ProUtilElemtreeElemPrint()",                                    status, (status != PRO_TK_NO_ERROR));    }    else    {        if (level == -1 )            return PRO_TK_BAD_INPUTS;        if (level > 0)            (p_data->branches[level-1])--;    }    indent[0] = '\0';    if ( level > 0 )    {        for ( i = 0; i < (level-1); i++ )        {            if ( p_data->branches[i] > 0 )            {                strcat (indent, " |   " );            }            else                strcat (indent, "     " );        }            strcat(indent," |---");    }    for (i = 0; i < 20; i++)    {        if ( p_data->branches[i] > 0 )        {            are_more_items = PRO_B_TRUE;            break;        }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -