Pro/E之調用交互介面收集曲綫

/*----------------- Static variables -------------------*/
static int crv_entry_count; 
/*=====================================================*\
Function: UserCurveLength()
Purpose: Compute Area of the Surface Collection
\*=====================================================*/
ProError UserCurveLength()
{
	int sel_count;
	ProError status;
	ProCharName name;
	ProModelitem model_item;
	ProFileName msgfile;
	ProName w_name;
	ProCollection collection; 
	ProSelection * regen_sels; 
	int n_regen_sels; 
	double total_length = 0; 
	ProSelection * coll_sels; 
	int coll_sels_size; 
	ProCollectioninstrType coll_flags[6] = { 
		PRO_CURVCOLL_ONE_BY_ONE, 
		PRO_CURVCOLL_TAN_CHAIN,
		PRO_CURVCOLL_CURVE_CHAIN,
		PRO_CURVCOLL_BNDRY_CHAIN,
		PRO_CURVCOLL_SURF_CHAIN,
		PRO_CURVCOLL_LOG_EDGE }; 
		crv_entry_count++; 
		/*--------------------------------------*\
		Prompt user for Curve Collection
		\*-------------------------------------*/
		ProStringToWstring(msgfile,"Message.txt");
		status = ProMessageDisplay(msgfile,"USER Collect Curves to find total length:");
		//ERROR_CHECK("UserCurveLength","ProMessageDisplay",status);
		status = ProCollectionAlloc ( &collection );
		//ERROR_CHECK( "UserCurveLength", "ProCollectionAlloc", status );
		/*---------------------------------------------------*\
		Interactive Curve Collection
		\*---------------------------------------------------*/ 
		status = ProCurvesCollect((ProChaincollUIControl *)coll_flags, 
			6,
			(ProCrvcollFilter)UserCrvcollectionFilter,
			(ProAppData ) NULL, 
			&collection, 
			&coll_sels, 
			&coll_sels_size ); 
		//ERROR_CHECK( "UserCurveLength", "ProCurvesCollect", status );
		/*--------------------------------------------*\
		Regenerating the returned collection to get the list of constituent curves
		\*--------------------------------------------*/  
		status = ProCrvcollectionRegenerate ( collection, &regen_sels, &n_regen_sels ); 
		//ERROR_CHECK( "UserCurveLength", "ProCrvcollectionRegenerate", status );
		if ( (status != PRO_TK_NO_ERROR) || (n_regen_sels <= 0) )
			return PRO_TK_GENERAL_ERROR; 
		/*------------------------------------------*\
		Evaluating the overall length from edge collection
		\*---------------------------------------------*/
		for (sel_count = 0; sel_count < n_regen_sels; sel_count++ )
		{
			ProEdge edge; 
			double length; 
			status = ProSelectionModelitemGet (regen_sels[sel_count], &model_item ); 
			//ERROR_CHECK( "UserCurveLength", "ProSelectionModelitemGet",status);
			status = ProGeomitemToEdge ( &model_item, &edge ); 
			//ERROR_CHECK( "UserCurveLength", "ProGeomitemToEdge", status );
			/*------------------------------------------*\
			Evaluating the length of individual curve
			\*--------------------------------------*/ 
			status = ProEdgeLengthEval ( edge, &length ); 
			//ERROR_CHECK( "UserCurveLength", "ProSurfaceAreaEval", status );
			total_length = total_length + length; 
		}
		status = ProMessageDisplay(msgfile,"USER Total Curve Length is %0f", &total_length);
		//ERROR_CHECK( "UserCurveLength", "ProMessageDisplay", status );
		/*-----------------------------------------*\
		Freeing Memory
		\*---------------------------------------*/ 
		status = ProCollectionFree ( &collection ); 
		//ERROR_CHECK( "UserCurveLength", "ProCollectionFree", status );
		status = ProSelectionarrayFree ( regen_sels ); 
		//ERROR_CHECK( "UserCurveLength", "ProSelectionarrayFree", status );
		status = ProSelectionarrayFree ( coll_sels ); 
		//ERROR_CHECK( "UserCurveLength", "ProSelectionarrayFree", status ); 
		ProMessageClear();
		return(status);
}
/*=====================================================*\
Function: UserCrvcollectionFilter()
Purpose: Filter function for curve collection. 
Filters only PRO_EDGE type of selections
\*=====================================================*/
ProError UserCrvcollectionFilter (ProSelection   cur_sel,
								  ProAppData   app_data)
{
	ProError status; 
	ProModelitem model_item; 
	status = ProSelectionModelitemGet (cur_sel, &model_item); 
	//ERROR_CHECK( "UserCrvcollectionFilter", "ProSelectionModelitemGet", status );

	if ( model_item.type == PRO_EDGE ) 
		return PRO_TK_NO_ERROR;
	else
		return PRO_TK_GENERAL_ERROR; 
}
posted @ 2010-04-08 11:07  samyangvs05  阅读(422)  评论(0编辑  收藏  举报