utilvisit.c

来自「Pro.TOOLKIT.Wildfire插件设计.配套光盘-141M.zip」· C语言 代码 · 共 568 行 · 第 1/2 页

C
568
字号
	return NO ERROR,    else	return CONTINUE\*--------------------------------------------------------------------*/    if(ftype == PRO_FEAT_COMPONENT)	return(PRO_TK_NO_ERROR);    return(PRO_TK_CONTINUE);}/*=========================================================================*\    Function:	ProUtilFeatvisFilterAction()    Purpose:	Filter function for ProSolidFeatVisit, allow to visit only 		visible features    Returns:	PRO_TK_NO_ERROR - feature visible		PRO_TK_CONTINUE - otherwise\*=========================================================================*/ProError ProUtilFeatvisFilterAction(    ProFeature *p_feature,	/* In : the feature */    ProAppData app_data)	/* In : appdata (not used) */{    ProError status;    ProBoolean visible;    status = ProFeatureVisibilityGet(p_feature, &visible);    TEST_CALL_REPORT("ProFeatureVisibilityGet()", 				    "ProUtilFeatvisFilterAction()", 				    status, status != PRO_TK_NO_ERROR);    if (status == PRO_TK_NO_ERROR)	status = (visible == PRO_B_TRUE ? PRO_TK_NO_ERROR : PRO_TK_CONTINUE);    return (status);}/*=========================================================================*\    Function:	ProUtilByNameFilterAction()    Purpose:	Allow to visit only modelitem with a specified name    Returns:	PRO_TK_NO_ERROR - success;		PRO_TK_CONTINUE - no valid modelitem found\*=========================================================================*/ProError ProUtilByNameFilterAction(    ProModelitem *p_modelitem,	    /* In : The modelitem */    FindByName   *p_findbyname)	    /* In : The find structure */{    ProName  name;    ProError status;    status = ProModelitemNameGet(p_modelitem, name);    TEST_CALL_REPORT("ProModelitemNameGet()", 				    "ProUtilFindByNameFilterAction()", 	    status, status != PRO_TK_NO_ERROR && status != PRO_TK_E_NOT_FOUND);    if (status == PRO_TK_NO_ERROR)     {	if (ProUtilWstrCmp(p_findbyname->name, name)==0)	    status = PRO_TK_NO_ERROR;	else 	    status = PRO_TK_CONTINUE;    }    else if (status == PRO_TK_E_NOT_FOUND)	status = PRO_TK_CONTINUE;    return (status);}/*=========================================================================*\    Function:	ProUtilFeatvisByNameFilterAction()    Purpose:	Allow to visit only visible features with a specified name    Returns:	PRO_TK_NO_ERROR - success;		PRO_TK_CONTINUE - no valid feature found found\*=========================================================================*/ProError ProUtilFeatvisByNameFilterAction(    ProFeature   *p_feature,	    /* In : The feature */    FindByName   *p_findbyname)	    /* In : The find structure */{    ProError  status;    status = ProUtilFeatvisFilterAction(p_feature, NULL);    if (status == PRO_TK_NO_ERROR)	status = ProUtilByNameFilterAction((ProModelitem*)p_feature, 	    p_findbyname);	    return (status);}/*=========================================================================*\    Function:	ProUtilGeomitemactiveFilterAction()    Purpose:	Filter function for ProFeatureGeomitemVisit, allow to visit 		only active geomitems    Returns:	PRO_TK_NO_ERROR - feature visible		PRO_TK_CONTINUE - otherwise\*=========================================================================*/ProError ProUtilGeomitemactiveFilterAction(    ProGeomitem *p_geomitem,	/* In : the geomitem */    ProAppData app_data)	/* In : appdata (not used) */{    ProBoolean test;    ProError status;    TEST_CALL_REPORT( "ProGeomitemFilter", "ProUtilGeomitemactiveFilterAction",	PRO_TK_NO_ERROR, 0 );    status = ProGeomitemIsInactive(p_geomitem, &test);    TEST_CALL_REPORT("ProGeomitemIsInactive()", 	"ProUtilGeomitemactiveFilterAction()",         status, status != PRO_TK_NO_ERROR);    return (test != PRO_B_TRUE ? PRO_TK_NO_ERROR : PRO_TK_CONTINUE);}/*=========================================================================*\    Function:   ProUtilAxisByVectorFilterAction()    Purpose:    Allow to visit only axis which parallel (perpendicular)                to a vector    Returns:    PRO_TK_NO_ERROR - success;                PRO_TK_CONTINUE - no valid axis found\*=========================================================================*/ProError ProUtilAxisByVectorFilterAction(    ProAxis axis,                               /* In : The Axis */    CollectAxisByVector *p_find_by_vector)      /* In : find data */{    ProGeomitemdata  *p_gi_data;    Pro3dPnt         vec;    double           dot;    ProError         status = PRO_TK_CONTINUE;    TEST_CALL_REPORT( "ProAxisFilterAction", "ProUtilAxisByVectorFilterAction",	PRO_TK_NO_ERROR, 0 );    status = ProAxisDataGet(axis, &p_gi_data);    TEST_CALL_REPORT("ProAxisDataGet()", "ProUtilAxisByVectorFilterAction()",                                    status, status != PRO_TK_NO_ERROR);    ProUtilVectorDiff(p_gi_data->data.p_curve_data->line.end2,                      p_gi_data->data.p_curve_data->line.end1, vec);    status = ProGeomitemdataFree(&p_gi_data);    TEST_CALL_REPORT("ProGeomitemdataFree()",        "ProUtilAxisByVectorFilterAction()", status, status != PRO_TK_NO_ERROR);    ProUtilVectorNormalize(vec, vec);    dot = fabs(ProUtilVectorDot(vec, p_find_by_vector->vec));    if ((p_find_by_vector->option==USER_PARALLEL && 1-dot<EPSM6) ||         (p_find_by_vector->option==USER_PERPENDICULAR && dot<EPSM6))         status = PRO_TK_NO_ERROR;    else         status = PRO_TK_CONTINUE;    return (status);}/*=========================================================================*\    Function:	ProUtilCollectDtmCurveFeatFilter()    Purpose:	Allow to visit only dtm curve features    Returns:	PRO_TK_NO_ERROR - success;		PRO_TK_CONTINUE - no valid feature found found\*=========================================================================*/ProError ProUtilCollectDtmCurveFeatFilter(    ProFeature   *p_feature,	    /* In : The feature */    ProAppData   app_data)	    /* In : The find structure */{    ProError  status;    ProFeattype ftype;        TEST_CALL_REPORT( "ProFeatureFilterAction",         "ProUtilCollectDtmCurveFeatFilter",	PRO_TK_NO_ERROR, 0 );    status = ProFeatureTypeGet(p_feature, &ftype);    TEST_CALL_REPORT("ProFeatureTypeGet()", "ProUtilCollectDtmCurveFeatFilter()",			    status, status != PRO_TK_NO_ERROR);    return(ftype == PRO_FEAT_CURVE ? PRO_TK_NO_ERROR : PRO_TK_CONTINUE);}/*====================================================================*\    FUNCTION :	ProUtilCollectDtmPointFeatFilter()    PURPOSE  :	A filter used to visit only Datum Points features\*====================================================================*/ProError ProUtilCollectDtmPointFeatFilter(    ProFeature *feature,    ProAppData app_data){    ProError status;    ProFeattype ftype;/*--------------------------------------------------------------------*\    Get the feature type\*--------------------------------------------------------------------*/    status = ProFeatureTypeGet(feature, &ftype);/*--------------------------------------------------------------------*\    If the feature is Datum Point,	return NO ERROR,    else	return CONTINUE\*--------------------------------------------------------------------*/    if(ftype == PRO_FEAT_DATUM_POINT)	return(PRO_TK_NO_ERROR);    return(PRO_TK_CONTINUE);}/*=========================================================================*\    Function:	ProUtilCollectDtmCurveFeatFilter()    Purpose:	Allow to visit only dtm curve features    Returns:	PRO_TK_NO_ERROR - success;		PRO_TK_CONTINUE - no valid feature found found\*=========================================================================*/ProError ProUtilCollectNCSeqFeatFilter(    ProFeature   *p_feat,	    /* In : The feature */    ProAppData   tmp_p_nc_seq)	    /* In : The find structure */{    ProError status;    ProBoolean is_nc_seq;        TEST_CALL_REPORT( "ProFeatureFilterAction", "ProUtilCollectNCSeqFeatFilter",	PRO_TK_NO_ERROR, 0 );    status = ProFeatureIsNcseq(p_feat, &is_nc_seq);    TEST_CALL_REPORT("ProFeatureIsNcseq()",                        "ProTestFeatFilterNcseq()", status,                        (status != PRO_TK_NO_ERROR));    return (is_nc_seq == PRO_B_TRUE? PRO_TK_NO_ERROR : PRO_TK_CONTINUE);}/*=========================================================================*\    Function:	ProUtilGeomitemByNameFilterAction()    Purpose:	Allow to visit only geomitem with a specified name    Returns:	PRO_TK_NO_ERROR - success;		PRO_TK_CONTINUE - no valid modelitem found\*=========================================================================*/ProError ProUtilGeomitemByNameFilterAction(    ProAppData geomitem,	    /* In : The geomitem */    FindByName   *p_findbyname)	    /* In : The find structure */{    ProName  name;    ProError status;    ProModelitem modelitem = p_findbyname->p_modelitem[0];    switch (modelitem.type)    {	case PRO_CSYS:	    status = ProCsysToGeomitem((ProSolid)modelitem.owner, 		(ProCsys)geomitem, &modelitem);	    TEST_CALL_REPORT("ProCsysToGeomitem()", 		"ProUtilGeomitemByNameFilterAction()", 		status, status != PRO_TK_NO_ERROR);	    break;	case PRO_AXIS:	    status = ProAxisToGeomitem((ProSolid)modelitem.owner, 		(ProAxis)geomitem, &modelitem);	    TEST_CALL_REPORT("ProAxisToGeomitem()", 		"ProUtilGeomitemByNameFilterAction()", 		status, status != PRO_TK_NO_ERROR);	    break;	case PRO_SURFACE:	    status = ProSurfaceToGeomitem((ProSolid)modelitem.owner, 		(ProSurface)geomitem, &modelitem);	    TEST_CALL_REPORT("ProSurfaceToGeomitem()", 		"ProUtilGeomitemByNameFilterAction()", 		status, status != PRO_TK_NO_ERROR);	    break;	default:	    status = PRO_TK_GENERAL_ERROR;    }        if (status == PRO_TK_NO_ERROR)    {	status = ProModelitemNameGet(&modelitem, name);	TEST_CALL_REPORT("ProModelitemNameGet()", 		"ProUtilGeomitemByNameFilterAction()", status,		status != PRO_TK_NO_ERROR && status != PRO_TK_E_NOT_FOUND);    }    if (status == PRO_TK_NO_ERROR)     {	if (ProUtilWstrCmp(p_findbyname->name, name)==0)	    status = PRO_TK_NO_ERROR;	else 	    status = PRO_TK_CONTINUE;    }    else if (status == PRO_TK_E_NOT_FOUND)	status = PRO_TK_CONTINUE;    return (status);}

⌨️ 快捷键说明

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