#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