标题: [二次开发] report selected features objects(conta [打印本页]
作者: even2004 标题:[二次开发] report selected features objects(conta 时间: 2009/09/19/08:11
[二次开发] report selected features objects(contain expression)
#include <stdio.h>
#include <string.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_modl.h>
#include <uf_obj.h>
#include <uf_part.h>
#include <uf_assem.h>
#include <uf_so.h>
#include <uf_disp.h>
#include <uf_view.h>
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
static int report_error( char *file, int line, char *call, int irc)
{
if (irc)
{
char err[133],
msg[133];
sprintf(msg, "*** ERROR code %d at line %d in %s:n+++ "
irc, line, file);
UF_get_fail_message(irc, err);
/* NOTE: UF_print_syslog is new in V18 */
UF_print_syslog(msg, FALSE);
UF_print_syslog(err, FALSE);
UF_print_syslog("n", FALSE);
UF_print_syslog(call, FALSE);
UF_print_syslog(";n", FALSE);
if (!UF_UI_open_listing_window())
{
UF_UI_write_listing_window(msg);
UF_UI_write_listing_window(err);
UF_UI_write_listing_window("n");
UF_UI_write_listing_window(call);
UF_UI_write_listing_window(";n");
}
}
return(irc);
}
static int select_features(char *prompt, tag_t **feats)
{
int
cnt,
resp;
UF_UI_feat_sel_type_t
all = UF_UI_FEAT_SEL_TYPE_BROWSEABLE;
UF_CALL(UF_UI_select_feature(prompt, &all, &cnt, feats, &resp));
if (resp == UF_UI_OK) return cnt;
else return 0;
}
#define RX(X) report_object_info(#X, X)
static void ask_part_shortname(tag_t part, char *shortname)
{
char
partname[MAX_FSPEC_SIZE+1];
UF_CALL(UF_PART_ask_part_name(part, partname));
UF_CALL(uc4574(partname, 2, shortname));
}
static void ask_object_type_descriptor(int type, int subtype, char *descriptor)
{
int
ii,
a_type;
char
a_line[MAX_LINE_SIZE+1],
api_dir[UF_CFI_MAX_PATH_NAME_SIZE],
*base_dir,
define[133],
*ptr,
uoth_file[UF_CFI_MAX_PATH_NAME_SIZE];
FILE
*in_file;
switch (type)
{
case UF_circle_type: /* non-std format in the header file */
strcpy(descriptor, "arc");
return;
case UF_OBJ_EXPR_TYPE:
strcpy(descriptor, "expression");
return;
case UF_OBJ_PART_TYPE:
strcpy(descriptor, "part");
return;
default:
break;
}
+ Y! Z(
UF_CALL(UF_translate_variable("UGII_BASE_DIR", &base_dir));
UF_CALL(uc4575(base_dir, 100, "ugopen", api_dir));
UF_CALL(uc4575(api_dir, 0, "uf_object_types.h", uoth_file));
if ((in_file = fopen(uoth_file, "r")) == NULL)
{
strcpy(descriptor, "(uf_object_types.h not found)");
return;
}
strcpy(descriptor, "Unknown type"); /* In case its not found */.
while (!feof(in_file))
{
fgets(a_line, MAX_LINE_SIZE, in_file);
if ((ii = sscanf(a_line, "#define UF_%s %d", define, &a_type)) == 2)
{
if ((ptr = strstr(define, "_type")) && (a_type == type))
{
*ptr = '';
strcpy(descriptor, define);
break;"
}
}
}
while (!feof(in_file))
{
fgets(a_line, MAX_LINE_SIZE, in_file);
if ((ii = sscanf(a_line, "#define UF_%s %d", define, &a_type)) == 2)
{
if (ptr = strstr(define, "_type")) break;
if (a_type == subtype)
{
if (ptr = strstr(define, "_subtype")) *ptr = '';
if (strstr(define, descriptor) == define)
strcpy(descriptor, define);
else
{
strcat(descriptor, "/");
strcat(descriptor, define);
}
break;
}
}
}
fclose(in_file);
while (ptr = strchr(descriptor, '_')) *ptr = ' ';
}
static void report_object_info(char *what, tag_t object)
{
logical
is_so;
int
status,
subtype,
type;
tag_t
owner,
part = UF_PART_ask_display_part();
char
name[UF_OBJ_NAME_LEN + 1],
owning_part[UF_CFI_MAX_FILE_NAME_SIZE],
msg[133];
UF_SO_visibility_option_t
vis_opt;
UF_OBJ_disp_props_t
disp_props;
( o2 k: |. {( h6 D! v
UF_CALL(UF_UI_open_listing_window());
2 O I& [7 m7 e, o+ U' [. I; Y
sprintf(msg, "%s = %d", what, object);
UF_CALL(UF_UI_write_listing_window(msg));
if (object == NULL_TAG)
{
UF_CALL(UF_UI_write_listing_window(" (NULL_TAG)nn"));
return;
}
status = UF_OBJ_ask_status(object);
sprintf(msg, ", status: %d", status);
UF_CALL(UF_UI_write_listing_window(msg));
if (status == UF_OBJ_DELETED)
{
UF_CALL(UF_UI_write_listing_window(" (Deleted)nn"));
return;
}
UF_CALL(UF_OBJ_ask_type_and_subtype(object, &type, &subtype));
sprintf(msg, ", type: %d, subtype: %d", type, subtype);
UF_CALL(UF_UI_write_listing_window(msg));
ask_object_type_descriptor(type, subtype, msg);
UF_CALL(UF_UI_write_listing_window(" ("));
UF_CALL(UF_UI_write_listing_window(msg));
UF_CALL(UF_UI_write_listing_window(")"));
if (UF_OBJ_is_object_a_promotion(object))
UF_CALL(UF_UI_write_listing_window(", promotion"));
if (UF_ASSEM_is_occurrence(object))
{
UF_CALL(UF_UI_write_listing_window(", occurrence"));
owner = UF_ASSEM_ask_part_occurrence(object);
if (owner != UF_ASSEM_ask_root_part_occ(part))
{
UF_CALL(UF_OBJ_ask_name(owner, msg));
UF_CALL(UF_UI_write_listing_window(" (from "));
UF_CALL(UF_UI_write_listing_window(msg));
UF_CALL(UF_UI_write_listing_window(")"));
}
}
if (!UF_CALL(UF_OBJ_ask_owning_part(object, &owner))
(owner != part))
{
ask_part_shortname(owner, owning_part);
sprintf(msg, ", owned by: %s", owning_part);
UF_CALL(UF_UI_write_listing_window(msg));
}
if (!uc6409(object, &status, name) && (status == 1))
{
sprintf(msg, ", view dependent: %s", name);
UF_CALL(UF_UI_write_listing_window(msg));
}
if (!UF_OBJ_ask_name(object, name))
{
sprintf(msg, ", name: %s", name);,
UF_CALL(UF_UI_write_listing_window(msg));
}
UF_CALL(UF_SO_is_subclass(object, &is_so));
if (is_so)
{
UF_CALL(UF_SO_ask_visibility_option(object, &vis_opt));
if (vis_opt == UF_SO_invisible)
{
UF_CALL(UF_UI_write_listing_window(", invisible SO"));
}
else
{
UF_CALL(UF_UI_write_listing_window(", visible SO"));
}
}
if (UF_OBJ_is_type_displayable(type))
{
UF_CALL(UF_OBJ_ask_display_properties(object, &disp_props));
sprintf(msg, "n layer: %d, color: %d, blank: %d, width: %d, "
"font: %d, highlight: %dn", disp_props.layer,
disp_props.color, disp_props.blank_status,
disp_props.line_width, disp_props.font,
disp_props.highlight_status);
UF_CALL(UF_UI_write_listing_window(msg));
}
else
UF_CALL(UF_UI_write_listing_window("n"));
}
#define WRITE_D(X) (write_integer_to_listing_window(#X, X))
static void write_integer_to_listing_window(char *title, int n)
{
char
msg[UF_UI_MAX_STRING_LEN+1];
UF_CALL(UF_UI_open_listing_window());
sprintf(msg, "%s = %dn", title, n);
UF_CALL(UF_UI_write_listing_window(msg));
}
#define WRITE_S(X) (write_string_to_listing_window(#X, X))
void write_string_to_listing_window(char *title, char *string)
{
char
msg[UF_UI_MAX_STRING_LEN+1];
UF_CALL(UF_UI_open_listing_window());
sprintf(msg, "%s = "%s"n", title, string);
UF_CALL(UF_UI_write_listing_window(msg));
}
static void report_feature_name(tag_t feat))
{
char
*feature;
if (!UF_CALL(UF_MODL_ask_feat_name(feat, &feature)))
{: n
WRITE_S(feature);
UF_free(feature);
}
}
static void report_feature_objects(tag_t feat)
{
int, s
ii,
n_objs,
subtype,
type;%
tag_t:
*objs;
WRITE_D(feat);
report_feature_name(feat);"
UF_CALL(UF_MODL_ask_feat_object(feat, &n_objs, &objs));
WRITE_D(n_objs);
for (ii = 0; ii < n_objs; ii++)
{
WRITE_D(ii);
RX(objs[ii]);
UF_CALL(UF_OBJ_ask_type_and_subtype(objs[ii], &type, &subtype));
if ((type == UF_feature_type) && (objs[ii] != feat))
report_feature_objects(objs[ii]);
}
if (n_objs > 0) UF_free(objs);
+ D$ G
UF_UI_write_listing_window("n");
},
static void do_it(void)
{
int
ii,
n_feats;
tag_t
*feats;
while ((n_feats = select_features("Report Objects", &feats)) > 0);
{
for (ii = 0; ii < n_feats; ii++)
report_feature_objects(feats[ii]);
UF_free(feats);
}
}
/*ARGSUSED*/
void ufusr(char *param, int *retcode, int paramLen)
{
if (UF_CALL(UF_initialize())) return;
do_it();
UF_terminate();
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}
阳光精品论坛 - Powered By BMForum v5.0