UG二次开发之显示相关的函数

#include "nx_inc.h"
#include "lin_uf_disp.h"


#ifdef __cplusplus
extern "C" {
#endif




	/*  通过颜色ID查询颜色名称 */

extern  void ask_color_name(int color_num,  // I: 颜色ID
						  char *color)	// O: 颜色名称
	
	{
		char 
			*clr_name; 
		double 
			clr_values[3]; 

		 (UF_DISP_ask_color(color_num, UF_DISP_rgb_model, 
			&clr_name, clr_values)); 
		strcpy(color, clr_name); 
		UF_free(clr_name); 
	}


	/*  查询对象颜色ID */
 
 extern  void ask_object_color_id(tag_t obj,// I: 对象Tag
								int* color)// O: 颜色ID
										
 {
	 int 
		 subtype, 
		 type; 
	 UF_OBJ_disp_props_t 
		 disp_props; 

	  (UF_OBJ_ask_type_and_subtype(obj, &type, &subtype)); 
	 if (UF_OBJ_is_type_displayable(type)) 
	 { 
		  (UF_OBJ_ask_display_properties(obj, &disp_props)); 
		 *color= disp_props.color; 
	 } 
	 else *color= 0; 
 }

 
 /*  查询对象颜色名称 */
 
 extern  void ask_object_color_name(tag_t obj,// I: 对象Tag
								 char *color )// O: 颜色名称
												
 {

	 int 
		 subtype, 
		 type; 
	 char 
		 *clr_name; 
	 double 
		 clr_values[3]; 
	 UF_OBJ_disp_props_t 
		 disp_props; 

	  (UF_OBJ_ask_type_and_subtype(obj, &type, &subtype)); 
	 if (UF_OBJ_is_type_displayable(type)) 
	 { 
		  (UF_OBJ_ask_display_properties(obj, &disp_props)); 
		  (UF_DISP_ask_color(disp_props.color, UF_DISP_rgb_model, 
			 &clr_name, clr_values)); 
		 strcpy(color, clr_name); 
		 UF_free(clr_name); 
	 } 
	 else strcpy(color, "NOT DISPLAYABLE"); 
 }

 
 /*  查询指定ID的颜色RGB值	 */
 
 extern  void ask_color_rgb_value( int color_num,// I: 颜色ID
								int RGB[3] )// O: RGB
											
 {
	 char 
		 *clr_name; 
	 double 
		 clr_values[3]; 

	  (UF_DISP_ask_color(color_num, UF_DISP_rgb_model, 
		 &clr_name, clr_values)); 
	 UF_free(clr_name);
	 
	 RGB[0] =(int)255*clr_values[0];
	 RGB[1] =(int)255*clr_values[1];
	 RGB[2] =(int)255*clr_values[2];

 }

/*  设置背景色 只能在制图里面设置*/

 /* 
 This function sets and loads the color table background color 
 red, green and blue values should be doubles between zero and 1. 
 1.0, 1.0, 1.0 = white, 0.0, 0.0, 0.0 = black, 0.0, 0.0, 1.0 = blue 
 */
 extern  void set_background_color(
	 double redval,								// I: R
	 double grnval,								// I: G
	 double bluval								// I: B
	 )
 {
	 double clr_values[3]; 

	 clr_values[0] = redval; 
	 clr_values[1] = bluval; 
	 clr_values[2] = grnval; 

	 UF_DISP_set_color(UF_DISP_BACKGROUND_COLOR,  
		 UF_DISP_rgb_model, "", clr_values ); 
	
 }

 
 /*  设置特征体颜色 */
 
 extern  void set_feature_body_color(tag_t feature,// I: 特征Tag
								   int color )// I: 颜色ID

 {
	 tag_t body_tag;
	 UF_MODL_ask_feat_body(feature,&body_tag);
	 UF_OBJ_set_color(body_tag,color);
 }

  /* 设置特征面颜色   */
 extern  void set_feature_faces_color( tag_t feature,// I: 特征Tag
								    int color )// I: 颜色ID
												
 {
	 uf_list_p_t faces_list=NULL;
	 int status=UF_MODL_ask_feat_faces(feature,&faces_list);
	 if (status!=0)
	 {
		 return ;
	 }
	 tag_t face_tag=faces_list[0].eid;
	 UF_OBJ_set_color(face_tag,color);
	 while (faces_list->next!=NULL)
	 {
		 faces_list=faces_list->next;
		 face_tag=faces_list->eid;
		 UF_OBJ_set_color(face_tag,color);
	 }
 }

//  //颜色转换函数
//  int doubleToRGB(double v[3])
//  {
// 	 typedef int (*COLOR_convert_double_to_rgb)(double const * const);
// 	 UF_load_f_p_t f_ptr;
// 	 UF_load_library("libpartutils.dll","?COLOR_convert_double_to_rgb@@YAHQEBN@Z",&f_ptr);
// 	 COLOR_convert_double_to_rgb fun = (COLOR_convert_double_to_rgb)f_ptr;
// 	 return fun(v);
//  }
// 
//  void RGBToDouble(int rgb,double dv[3])
//  {
// 	 typedef void (*COLOR_convert_rgb_to_double)(int,double * const);
// 	 UF_load_f_p_t f_ptr;
// 	 UF_load_library("libpartutils.dll","?COLOR_convert_rgb_to_double@@YAXHQEAN@Z",&f_ptr);
// 	 COLOR_convert_rgb_to_double fun = (COLOR_convert_rgb_to_double)f_ptr;
// 	 fun(rgb,dv);
//  }


 void setBGColor    //设置建模的背景色
	 (
	 int color    //输入参数,RGB颜色值
	 )
 {
	 int r = (color&0x00ff0000)>>16;//这是自己写的rgb颜色转换成浮点数
	 int g = (color&0x0000ff00)>>8;//这是自己写的rgb颜色转换成浮点数
	 int b = (color&0x000000ff);//这是自己写的rgb颜色转换成浮点数

	 double clr_values[3];
	 clr_values[0]=r/255.0;//这是自己写的rgb颜色转换成浮点数
	 clr_values[1]=g/255.0;//这是自己写的rgb颜色转换成浮点数
	 clr_values[2]=b/255.0;//这是自己写的rgb颜色转换成浮点数
	 UF_DISP_set_color( UF_DISP_BACKGROUND_COLOR,UF_DISP_rgb_model,NULL,clr_values);
	 UF_DISP_regenerate_display();      //此步不能少    
 }

//  void setDrawingBGColor   //设置制图的背景色
// 	 (
// 	 int color    //输入参数,RGB颜色值
// 	 )
//  {
// 	 int r = (color&0x00ff0000)>>16;
// 	 int g = (color&0x0000ff00)>>8;
// 	 int b = (color&0x000000ff);
// 
// 	 double clr_values[3];
// 	 clr_values[0]=r/255.0;
// 	 clr_values[1]=g/255.0;
// 	 clr_values[2]=b/255.0;
// 	 int clr_num;
// 	 UF_DISP_ask_closest_color(UF_DISP_rgb_model,clr_values,UF_DISP_CCM_EUCLIDEAN_DISTANCE,&clr_num);
// 	 UF_DISP_drawing_display_data_t dd;
// 	 UF_DISP_ask_drawing_display(&dd);
// 	 dd.monochrome_display = TRUE;//单色模式下使用,具体细节可以参考帮助手册
// 	 dd.background_color = clr_num;
// 	 UF_DISP_set_drawing_display(&dd);
//  }

 //下面这个函数是设备渐变色背景,API里面我没有找到相关函数,自己去解析了一下dll。
//  void setGraduateColor
// 	 (
// 	 int topColor,    //输入参数,俯视图的RGB颜色值
// 	 int bottumColor,  //输入参数,仰视图面RGB颜色值
// 	 int type        //输入参数,0为着色视图,1为线框视图
// 	 )
//  {
// 	 typedef void (*DISPLAY_set_graduate_background_data)(double * const,double * const,int);
// 	 UF_load_f_p_t f_ptr;
// 	 UF_load_library("libdisp.dll","?DISPLAY_set_graduate_background_data@@YAXQEAN0H@Z",&f_ptr);
// 	 DISPLAY_set_graduate_background_data fun = (DISPLAY_set_graduate_background_data)f_ptr;
// 	 double clr[2][3];
// 	 RGBToDouble(topColor,clr[0]);
// 	 RGBToDouble(bottumColor,clr[1]);
// 
// 	 fun(clr[0],clr[1],type);
// 	 UF_DISP_regenerate_display(); //此步不能少
//  }






#ifdef __cplusplus
}
#endif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值