*检查 是否存在两个同样的数据集 都是规范关系

 

/**
*检查 是否存在两个同样的数据集 都是规范关系 IMAN_specification
* type1 第一个数据集类型 type2 第二个数据集类型
**/
EPM_decision_t j2_check_drawing(EPM_rule_message_t msg){
//流程根对象
tag_t roottask = NULLTAG;
int i = 0, j = 0, k = 0;
int n = 0, m = 0;
//目标对象
tag_t* attachments = NULL;
int rcode = ITK_ok;
char debug_string[1024];
int curdebug = 1;
char* object_string = NULLTAG;
tag_t IMAN_specification = NULLTAG;
int ref_count = 0;
tag_t* datasets = NULL;
char* object_type_name = NULL;

int argNumber = 0;
char* argStr = NULL;
char* ParaName = NULL;
char* ParaValue = NULL;

char type1[128] = { '\0' };
char type2[128] = { '\0' };

//获取handler参数
argNumber = TC_number_of_arguments(msg.arguments);
for (i = 0; i < argNumber; i++)
{
argStr = TC_next_argument(msg.arguments);
ITKCALL(ITK_ask_argument_named_value((const char*)argStr, &ParaName, &ParaValue));
if (tc_strcmp(ParaName, "type1") == 0)
{
tc_strcpy(type1, ParaValue);
}
else if (tc_strcmp(ParaName, "type2") == 0)
{
tc_strcpy(type2, ParaValue);
}
SAFE_SM_FREE(ParaName);
SAFE_SM_FREE(ParaValue);
}

/*获取流程对象*/
//循环检查处理
ITKCALL(EPM_ask_root_task(msg.task, &roottask));
ITKCALL(EPM_ask_attachments(roottask, EPM_target_attachment, &n, &attachments));
if (n > 0)
{
for (i = 0; i < n; i++) {
int isRev = 0;
isRev = 0;
ITKCALL(AOM_refresh(attachments[i], 0));
ITKCALL(AOM_ask_value_string(attachments[i], "object_string", &object_string));
ITKCALL(WSOM_ask_object_type2(attachments[i], &object_type_name));
if (tc_strstr(object_type_name, "Revision") != NULL) {
//获取规范关系的数据
ITKCALL(GRM_find_relation_type(IMAN_spf, &IMAN_specification));
ITKCALL(GRM_list_secondary_objects_only(attachments[i], IMAN_specification, &ref_count, &datasets));
if (ref_count > 0)
{
int has3D = 0;
int has2D = 0;
int hasdwg = 0;

//获取3D图
for (int j = 0; j < ref_count; j++) {
ITKCALL(WSOM_ask_object_type2(datasets[j], &object_type_name));
if (strcmp(object_type_name, type1) == 0) {
has3D = 1;
}
if (strcmp(object_type_name, type2) == 0) {
has2D = 1;
}
if (strcmp(object_type_name, "YW4_AutoCAD") == 0) {
hasdwg = 1;
}
}
sprintf(debug_string, "EPM_target_attachment ;[%s]缺少SE 三维或二维数据集\n", object_string);
logical l1 = (has3D == 0 && has2D == 1);

logical l2 = (has3D == 1 && has2D == 0);

logical l3 = (hasdwg == 1 && has3D == 1);


if (l3) {
EMH_store_error_s1(EMH_severity_error, debug_string, "有SE三维不能有DWG二维!");
SAFE_SM_FREE(object_type_name);
SAFE_SM_FREE(datasets);
SAFE_SM_FREE(attachments);
SAFE_SM_FREE(object_string);
return EPM_nogo;
}

if (l1 || l2) {
EMH_store_error_s1(EMH_severity_error, debug_string, "缺少SE 三维或二维数据集!");
SAFE_SM_FREE(object_type_name);
SAFE_SM_FREE(datasets);
SAFE_SM_FREE(attachments);
SAFE_SM_FREE(object_string);
return EPM_nogo;
}
}
SAFE_SM_FREE(datasets);
}
}
}
SAFE_SM_FREE(object_type_name);
SAFE_SM_FREE(datasets);
SAFE_SM_FREE(attachments);
SAFE_SM_FREE(object_string);
return EPM_go;
}

 

/**
*检查 通用件仅允许上传SE图纸
**/
EPM_decision_t j2_check_drawing_comm(EPM_rule_message_t msg) {
//流程根对象
tag_t roottask = NULLTAG;
int i = 0, j = 0, k = 0;
int n = 0, m = 0;
//目标对象
tag_t* attachments = NULL;
int rcode = ITK_ok;
char debug_string[1024];
int curdebug = 1;
char* object_string = NULLTAG;
tag_t IMAN_specification = NULLTAG;
int ref_count = 0;
tag_t* datasets = NULL;
char* object_type_name = NULL;

int argNumber = 0;
char* argStr = NULL;
char* ParaName = NULL;
char* ParaValue = NULL;

char type1[128] = { '\0' };
char type2[128] = { '\0' };

//获取handler参数
argNumber = TC_number_of_arguments(msg.arguments);
for (i = 0; i < argNumber; i++)
{
argStr = TC_next_argument(msg.arguments);
ITKCALL(ITK_ask_argument_named_value((const char*)argStr, &ParaName, &ParaValue));
if (tc_strcmp(ParaName, "type1") == 0)
{
tc_strcpy(type1, ParaValue);
}
else if (tc_strcmp(ParaName, "type2") == 0)
{
tc_strcpy(type2, ParaValue);
}
SAFE_SM_FREE(ParaName);
SAFE_SM_FREE(ParaValue);
}

/*获取流程对象*/
//循环检查处理
ITKCALL(EPM_ask_root_task(msg.task, &roottask));
ITKCALL(EPM_ask_attachments(roottask, EPM_target_attachment, &n, &attachments));
if (n > 0)
{
for (i = 0; i < n; i++) {
int isRev = 0;
isRev = 0;
ITKCALL(AOM_refresh(attachments[i], 0));
ITKCALL(AOM_ask_value_string(attachments[i], "object_string", &object_string));
ITKCALL(WSOM_ask_object_type2(attachments[i], &object_type_name));
if (tc_strstr(object_type_name, "Revision") != NULL) {
//获取规范关系的数据
ITKCALL(GRM_find_relation_type(IMAN_spf, &IMAN_specification));
ITKCALL(GRM_list_secondary_objects_only(attachments[i], IMAN_specification, &ref_count, &datasets));
if (ref_count > 0)
{
int has3D = 0;
int has2D = 0;
int hasdwg = 0;

//获取3D图
for (int j = 0; j < ref_count; j++) {
ITKCALL(WSOM_ask_object_type2(datasets[j], &object_type_name));
if (strcmp(object_type_name, type1) == 0) {
has3D = 1;
}
if (strcmp(object_type_name, type2) == 0) {
has2D = 1;
}
if (strcmp(object_type_name, "YW4_AutoCAD") == 0) {
hasdwg = 1;
}
}
sprintf(debug_string, "EPM_target_attachment ;[%s]缺少SE 三维或二维数据集\n", object_string);
logical l1 = (has3D == 0 && has2D == 1);

logical l2 = (has3D == 1 && has2D == 0);

logical l3 = (hasdwg == 1 && has3D == 1);


if (l3) {
EMH_store_error_s1(EMH_severity_error, debug_string, "有SE三维不能有DWG二维!");
SAFE_SM_FREE(object_type_name);
SAFE_SM_FREE(datasets);
SAFE_SM_FREE(attachments);
SAFE_SM_FREE(object_string);
return EPM_nogo;
}

if (l1 || l2) {
EMH_store_error_s1(EMH_severity_error, debug_string, "缺少SE 三维或二维数据集!");
SAFE_SM_FREE(object_type_name);
SAFE_SM_FREE(datasets);
SAFE_SM_FREE(attachments);
SAFE_SM_FREE(object_string);
return EPM_nogo;
}
}
SAFE_SM_FREE(datasets);
}
}
}
SAFE_SM_FREE(object_type_name);
SAFE_SM_FREE(datasets);
SAFE_SM_FREE(attachments);
SAFE_SM_FREE(object_string);
return EPM_go;
}

 

posted @ 2025-04-05 18:40  张永全-PLM顾问  阅读(59)  评论(0)    收藏  举报