UG二次开发之选择相关的函数

本文深入探讨了UG软件的二次开发过程中,如何利用C++选择相关的函数进行操作。通过对不同函数的功能解析和使用示例,揭示了在UG环境中进行定制化开发的关键技巧,帮助开发者提升效率。
摘要由CSDN通过智能技术生成
#include "nx_inc.h"
#include "Lin_uf_CALL.h"
#include "Lin_uf_select.h"


#ifdef __cplusplus
extern "C" {
   
#endif


	//
	//							nx_select.h									//
	//


	/*===============================================*\
	*	功能:鼠标选择过滤函数
	*	参数:userdata - 选择类型
	这个要改进用户选择对象如果为空要处理,返回response
	\*===============================================*/
int SelTarget(UF_UI_selection_p_t select, void* userdata)
	{
   
		char message[133];
		int num_triples(0);
		UF_UI_mask_t *mask_triples=NULL;
		int* filter_type=(int*)userdata;
		switch(*filter_type)
		{
   
		case SOLID_TYPE:
			num_triples=1;
			mask_triples=(UF_UI_mask_t*)calloc(2,sizeof(UF_UI_mask_t));
			mask_triples[0].object_type=UF_solid_type;
			mask_triples[0].object_subtype=UF_solid_body_subtype;
			mask_triples[0].solid_type=UF_UI_SEL_FEATURE_BODY;
			break;
		case FEAT_TYPE:
			num_triples=1;
			mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
			mask_triples[0].object_type=UF_feature_type;
			mask_triples[0].object_subtype=UF_all_subtype;
			mask_triples[0].solid_type=0;
			break;
		case EDGE_TYPE:
			num_triples=1;
			mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
			mask_triples->object_type=/*UF_edge_type*/UF_edge_type;
			mask_triples->object_subtype=UF_all_subtype;
			mask_triples->solid_type=0;
			break;
		case LINE_TYPE:
			num_triples=1;
			mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
			mask_triples->object_type=/*UF_edge_type*/UF_line_type;
			mask_triples->object_subtype=UF_all_subtype;
			mask_triples->solid_type=0;
			break;
		case POINT_TYPE:
			num_triples=1;
			mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
			mask_triples->object_type=/*UF_edge_type*/UF_point_type;
			mask_triples->object_subtype=UF_all_subtype;
			mask_triples->solid_type=0;
			break;
		case CIRCLE_TYPE:
			num_triples=1;
			mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
			mask_triples->object_type=/*UF_edge_type*/UF_circle_type;
			mask_triples->object_subtype=UF_all_subtype;
			mask_triples->solid_type=0;
			break;
		case FACE_TYPE:
			num_triples=1;
			mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
			mask_triples->object_type=UF_face_type;
			mask_triples->object_subtype=UF_all_subtype;
			mask_triples->solid_type=0;
			break;
		case FACE_EDGE_TYPE:
			num_triples=2;
			mask_triples=(UF_UI_mask_t*)calloc(2,sizeof(UF_UI_mask_t));
			mask_triples[0].object_type=UF_face_type;
			mask_triples[0].object_subtype=0;
			mask_triples[0].solid_type=UF_UI_SEL_FEATURE_ANY_FACE;
			mask_triples[1].object_type=UF_edge_type;
			mask_triples[1].object_subtype=0;
			mask_triples[1].solid_type=UF_UI_SEL_FEATURE_ANY_EDGE;
			break;
		case DIMENSION_TYPE:
			num_triples=1;
			mask_triples=(UF_UI_mask_t*)calloc(1,sizeof(UF_UI_mask_t));
			mask_triples->object_type=UF_dimension_type;
			mask_triples->object_subtype=UF_all_subtype;
			mask_triples->solid_type=0;
			break;
		}
		int err = UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
			num_triples, mask_triples);
		free(mask_triples);
		if(err == 0)
		{
   
			return (UF_UI_SEL_SUCCESS);
		}
		else
		{
   
			UF_get_fail_message(err, message);
			return (UF_UI_SEL_FAILURE);
		}
		return (UF_UI_SEL_SUCCESS);
	}



	/*  调用对话框选择单一对象 */


	extern   int select_single_with_dlg(
		FILTER_TYPE seltype,					//	I:选择类型
		char* title,							//	I:选择对话框显示提示字符
		tag_t * selobj							//	O:返回选择对象
		)
	{
   
		try
		{
   
			int response=-1;
			int ugError=-1;
			char cue[] = "Select Single Object";
			tag_t view;
			double cursor[3];
			UF_UI_lock_ug_access(UF_UI_FROM_CUSTOM);
			ugError=UF_UI_select_with_single_dialog(cue,title,
				UF_UI_SEL_SCOPE_NO_CHANGE, SelTarget, &seltype,
				&response, selobj, cursor, &view);
			UF_UI_unlock_ug_access(UF_UI_FROM_CUSTOM);
			if(ugError!=0)
			{
   
				return -1;
			}
			if (*selobj != NULL_TAG)
			{
   
				UF_DISP_set_highlight(*selobj, 0);
			}
		}
		catch (...)
		{
   
			return -1;
		}
		return 0;
	}

	/*  对话框的形式选多个对象 */

	extern   int select_class_with_dlg(
		FILTER_TYPE seltype,					//	I:选择类型
		char* title,							//	I:选择对话框显示提示字符
		tag_t * selobj							//	O:返回选择对象
		)
	{
   
		try
		{
   
			char cue[] = "Select Multi Objects";
			int response, count, i;
			
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值