获取标注对象的详细信息
static void report_all_dimension_information(tag_t dim)
{
int
ii,
jj,
subtype;
double
origin[3];
UF_DRF_dim_info_t
*info;
if (UF_CALL(UF_DRF_ask_dim_info(dim, &subtype, origin, &info)))
return;
ECHO("unmapped ");
WRITE3F(origin);
map_obj2abs(dim, origin);
ECHO("absolute ");
WRITE3F(origin);
show_objects_csys(dim, origin);
WRITE_D(info->num_text);
for (ii = 0; ii < info->num_text; ii++)
{
WRITE_D(ii);
WRITE_D(info->text_info[ii].text_type);
WRITE_D(info->text_info[ii].text_font);
WRITE_F(info->text_info[ii].size);
WRITE_F(info->text_info[ii].angle);
ECHO("unmapped ");
WRITE3F(info->text_info[ii].origin);
map_obj2abs(dim, info->text_info[ii].origin);
ECHO("absolute ");
WRITE3F(info->text_info[ii].origin);
display_temporary_colored_point(info->text_info[ii].origin,
UF_OBJ_YELLOW);
WRITE_F(info->text_info[ii].length);
WRITE_F(info->text_info[ii].height);
WRITE_F(info->text_info[ii].distance);
WRITE_F(info->text_info[ii].aspect_ratio);
WRITE_F(info->text_info[ii].gap);
WRITE_F(info->text_info[ii].line_spacing);
WRITE_D(info->text_info[ii].num_lines);
for (jj = 0; jj < info->text_info[ii].num_lines; jj++)
{
WRITE_D(jj);
WRITE_D(info->text_info[ii].text[jj].num_chars);
WRITE_S(info->text_info[ii].text[jj].string);
WRITE_D(info->text_info[ii].text[jj].num_ints);
WRITE_D(info->text_info[ii].text[jj].full_num_chars);
WRITE_S(info->text_info[ii].text[jj].full_string);
}
}
WRITE_D(info->num_lines);
for (ii = 0; ii < info->num_lines; ii++)
{
WRITE_D(ii);
WRITE_D(info->dim_line_info->line_pnts[ii].sequence_number);
WRITE_D(info->dim_line_info->line_pnts[ii].num_symbols);
for (jj = 0; jj < info->dim_line_info->line_pnts[ii].num_symbols;
jj++)
{
WRITE_D(jj);
WRITE_D(info->dim_line_info->line_pnts[ii].symbol_data[jj].
master);
WRITE_L(info->dim_line_info->line_pnts[ii].symbol_data[jj].
is_gap);
WRITE3F(info->dim_line_info->line_pnts[ii].symbol_data[jj].
origin);
WRITE_F(info->dim_line_info->line_pnts[ii].symbol_data[jj].
parameter_on_element);
WRITE_F(info->dim_line_info->line_pnts[ii].symbol_data[jj].
symbol_length);
WRITE_F(info->dim_line_info->line_pnts[ii].symbol_data[jj].
symbol_height);
WRITE_D(info->dim_line_info->line_pnts[ii].symbol_data[jj].
creation_mask);
WRITE_D(info->dim_line_info->line_pnts[ii].symbol_data[jj].
record_number);
WRITE_D(info->dim_line_info->line_pnts[ii].symbol_data[jj].
segment_number);
WRITE_L(info->dim_line_info->line_pnts[ii].symbol_data[jj].
is_mirrored);
WRITE_L(info->dim_line_info->line_pnts[ii].symbol_data[jj].
is_reflected);
}
WRITE_D(info->dim_line_info->line_pnts[ii].num_segments);
for (jj = 0;
jj < info->dim_line_info->line_pnts[ii].num_segments * 6;
jj = jj + 3)
{
WRITE_D(jj);
ECHO("unmapped ");
WRITE3F(&info->dim_line_info->line_pnts[ii].segment_pnts[jj]);
map_obj2abs(dim,
&info->dim_line_info->line_pnts[ii].segment_pnts[jj]);
ECHO("absolute ");
WRITE3F(&info->dim_line_info->line_pnts[ii].segment_pnts[jj]);
display_temporary_colored_point(
&info->dim_line_info->line_pnts[ii].segment_pnts[jj],
UF_OBJ_GREEN);
}
}
WRITE_D(info->dim_line_info->num_assoc_objs);
for (ii = 0; ii < info->dim_line_info->num_assoc_objs; ii++)
{
WRITE_D(ii);
WRITE_D(info->dim_line_info->assoc_objs[ii].assoc_object_tag);
WRITE_D(info->dim_line_info->assoc_objs[ii].assoc_object_view_tag);
WRITE_D(info->dim_line_info->assoc_objs[ii].assoc_type);
WRITE_D(info->dim_line_info->assoc_objs[ii].assoc_modifier);
}
WRITE_D(info->num_arcs);
for (ii = 0; ii < info->num_arcs; ii++)
{
WRITE_D(ii);
WRITE_D(info->arc_info[ii].arc_type);
WRITE_D(info->arc_info[ii].sequence_number);
ECHO("unmapped ");
WRITE3F(info->arc_info[ii].arc_center);
map_obj2abs(dim, info->arc_info[ii].arc_center);
ECHO("absolute ");
WRITE3F(info->arc_info[ii].arc_center);
display_temporary_colored_point(info->arc_info[ii].arc_center,
UF_OBJ_RED);
WRITE_F(info->arc_info[ii].radius);
WRITE_F(info->arc_info[ii].start_angle);
WRITE_F(info->arc_info[ii].start_angle * RADEG);
WRITE_F(info->arc_info[ii].end_angle);
WRITE_F(info->arc_info[ii].end_angle * RADEG);
WRITE_D(info->arc_info[ii].num_symbols);
for (jj = 0; jj < info->arc_info[ii].num_symbols; jj++)
{
WRITE_D(jj);
WRITE_D(info->arc_info[ii].symbol_data[jj].master);
WRITE_L(info->arc_info[ii].symbol_data[jj].is_gap);
WRITE3F(info->arc_info[ii].symbol_data[jj].origin);
WRITE_F(info->arc_info[ii].symbol_data[jj].
parameter_on_element);
WRITE_F(info->arc_info[ii].symbol_data[jj].symbol_length);
WRITE_F(info->arc_info[ii].symbol_data[jj].symbol_height);
WRITE_D(info->arc_info[ii].symbol_data[jj].creation_mask);
WRITE_D(info->arc_info[ii].symbol_data[jj].record_number);
WRITE_D(info->arc_info[ii].symbol_data[jj].segment_number);
WRITE_L(info->arc_info[ii].symbol_data[jj].is_mirrored);
WRITE_L(info->arc_info[ii].symbol_data[jj].is_reflected);
}
if (ii > 0) continue;
WRITE_D(info->arc_info[ii].num_assoc_objs);
for (jj = 0; jj < info->arc_info[ii].num_assoc_objs; jj++)
{
WRITE_D(jj);
WRITE_D(info->arc_info[ii].assoc_objs[jj].assoc_object_tag);
WRITE_D(info->arc_info[ii].assoc_objs[jj].
assoc_object_view_tag);
WRITE_D(info->arc_info[ii].assoc_objs[jj].assoc_type);
WRITE_D(info->arc_info[ii].assoc_objs[jj].assoc_modifier);
}
}
WRITE_D(info->num_arrows);
for (ii = 0; ii < info->num_arrows; ii++)
{
WRITE_D(ii);
WRITE_D(info->arrow_info[ii].sequence_number);
WRITE_D(info->arrow_info[ii].arrow_type);
WRITE_D(info->arrow_info[ii].arrow_fill);
ECHO("unmapped ");
WRITE3F(info->arrow_info[ii].arrow_origin);
map_obj2abs(dim, info->arrow_info[ii].arrow_origin);
ECHO("absolute ");
WRITE3F(info->arrow_info[ii].arrow_origin);
display_temporary_colored_point(info->arrow_info[ii].arrow_origin,
UF_OBJ_CYAN);
WRITE_F(info->arrow_info[ii].arrow_angle);
WRITE_F(info->arrow_info[ii].arrow_include_angle);
WRITE_F(info->arrow_info[ii].arrow_height);
WRITE_F(info->arrow_info[ii].arrow_width);
}
ECHO("\n");
UF_CALL(UF_DRF_free_dimension(&info));
}
获取关联对象信息
void OutPutDimInfo(tag_t dimObj)
{
int type = 0, subType = 0;
UF_OBJ_ask_type_and_subtype(dimObj, &type, &subType);
//ECHO("type: %d", type);
//ECHO("subType: %d", subType);
if (UF_drafting_entity_type == type && UF_draft_fpt_subtype == subType)//包含了所有形位公差及基准标注
{
if(IsDraftingFcf(dimObj))
report_gdt_text_interop(dimObj);
}
//return;
if (UF_dimension_type == type)
{
print("标注类型: " + DimType[subType - 1]);
int dimtt = 0;
double dimOri[3] = { 0.0 };
UF_DRF_dim_info_p_t info;
UF_DRF_ask_dim_info(dimObj, &dimtt, dimOri, &info);
print("标注文字:");
for (int ii = 0; ii < info->num_text; ii++)
{
for (int jj = 0; jj < info->text_info[ii].num_lines; jj++)
{
WRITE_S(info->text_info[ii].text[jj].string);
}
}
UF_CALL(UF_DRF_free_dimension(&info));
}
double
centerline_origin[3];
UF_DRF_valid_cline_form_t
centerline_type;
UF_DRF_centerline_info_t
*centerline_info;
if (!UF_CALL(UF_DRF_ask_centerline_info(dimObj, ¢erline_type,
centerline_origin, ¢erline_info)))
{
if (1 == centerline_info->num_lines)
{
if (1 == centerline_info->line_info[0].num_segments)
{
print(Db2Str(centerline_info->line_info[0].segment_pnts[0]));
print(Db2Str(centerline_info->line_info[0].segment_pnts[1]));
print(Db2Str(centerline_info->line_info[0].segment_pnts[2]));
print(Db2Str(centerline_info->line_info[0].segment_pnts[3]));
print(Db2Str(centerline_info->line_info[0].segment_pnts[4]));
print(Db2Str(centerline_info->line_info[0].segment_pnts[5]));
print(Db2Str(centerline_info->line_info[0].segment_pnts[6]));
double pt1[3] = { centerline_info->line_info[0].segment_pnts[0],
centerline_info->line_info[0].segment_pnts[1],
centerline_info->line_info[0].segment_pnts[2] },
pt2[3] = { centerline_info->line_info[0].segment_pnts[3],
centerline_info->line_info[0].segment_pnts[4],
centerline_info->line_info[0].segment_pnts[5] };
}
}
}
int num = 0;
UF_DRF_object_assoc_data_t *assocData = { NULL_TAG };
UF_DRF_ask_associativity_data(dimObj, &num, &assocData);
vector<tag_t> parents;
if (num > 0)
{
double mtx[9] = { 0.0 };
if (NULL_TAG != assocData[0].object_view)
{
UF_VIEW_ask_rotation(assocData[0].object_view, mtx);
print("视图矩阵:");
for (size_t i = 0; i < 9; i++)
{
print(Db2Str(mtx[i]));
}
}
for (int i = 0; i < num; i++)
{
print("=================" + Int2Str(i + 1) + "=================");
if (NULL_TAG != assocData[i].assoc_object_1)
{
//报告第一个对象
print("关联点类型:" + PointType[assocData[i].point_type]);
print("关联线类型:" + LineType[assocData[i].line_type]);
print("关联图纸对象类型:");
UF_OBJ_ask_type_and_subtype(assocData[i].assoc_object_1, &type, &subType);
print("mainType : " + Int2Str(type) + ", subtype: " + Int2Str(subType));
print("关联点坐标(ABS):");
for (size_t j = 0; j < 3; ++j)
{
print(Db2Str(assocData[i].assoc_point[j]));
}
vector<tag_t> pars;
if (UF_feature_type == type)
{
uf_list_p_t fcs;
UF_MODL_ask_feat_faces(assocData[i].assoc_object_1, &fcs);
pars = GetListObjs(fcs);
}
else if (UF_solid_type == type && UF_solid_face_subtype == subType)
{
pars.push_back(assocData[i].assoc_object_1);
}
else
{
pars = GetDraftCrvParents(assocData[i].assoc_object_1,&mtx[6]);
}
if (!pars.empty())
{
parents.insert(parents.end(), pars.begin(), pars.end());
}
if (UF_dimension_type == type)
{
OutPutDimInfo(assocData[i].assoc_object_1);
}
}
if (NULL_TAG != assocData[i].assoc_object_2)
{
print("关联图纸对象2类型:");
UF_OBJ_ask_type_and_subtype(assocData[i].assoc_object_2, &type, &subType);
print("mainType : " + Int2Str(type) + ", subtype: " + Int2Str(subType));
vector<tag_t> pars;
if (UF_feature_type == type)
{
uf_list_p_t fcs;
UF_MODL_ask_feat_faces(assocData[i].assoc_object_2, &fcs);
pars = GetListObjs(fcs);
}
else if (UF_solid_type == type && UF_solid_face_subtype == subType)
{
pars.push_back(assocData[i].assoc_object_2);
}
else
{
pars = GetDraftCrvParents(assocData[i].assoc_object_2, &mtx[6]);
}
if (!pars.empty())
{
parents.insert(parents.end(), pars.begin(), pars.end());
}
if (UF_dimension_type == type)
{
OutPutDimInfo(assocData[i].assoc_object_2);
}
}
}
}
}