⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
						is_parent_set = 1;					}					{						M_Transform2D *tr = (M_Transform2D *)node;						if (converter->all_atts.x) tr->translation.x = converter->all_atts.x->value;						if (converter->all_atts.y) tr->translation.y = converter->all_atts.y->value;					}				} 				child = gf_node_new(converter->bifs_sg, TAG_MPEG4_Shape);				gf_node_register(child, node);				gf_node_list_add_child(&((GF_ParentNode*)node)->children, child);				node = child;				child = NULL;				if (!is_parent_set) converter->bifs_parent = node;				{					M_Shape *shape = (M_Shape *)node;					shape->geometry = gf_node_new(converter->bifs_sg, TAG_MPEG4_XCurve2D);					gf_node_register(shape->geometry, (GF_Node *)shape);					if (converter->all_atts.d) {						M_Coordinate2D *c2d;						M_XCurve2D *xc = (M_XCurve2D *)shape->geometry;						u32 i, j, c;						xc->point = gf_node_new(converter->bifs_sg, TAG_MPEG4_Coordinate2D);						c2d = (M_Coordinate2D *)xc->point;						gf_node_register(xc->point, (GF_Node *)xc);												gf_sg_vrml_mf_alloc(&c2d->point, GF_SG_VRML_MFVEC2F, converter->all_atts.d->n_points);						j= 0;						for (i = 0; i < converter->all_atts.d->n_points; i++) {							if (converter->all_atts.d->tags[i] != GF_PATH_CLOSE || i == converter->all_atts.d->n_points-1) {								c2d->point.vals[j] = converter->all_atts.d->points[i];								j++;							}						}						c2d->point.count = j;						gf_sg_vrml_mf_alloc(&xc->type, GF_SG_VRML_MFINT32, converter->all_atts.d->n_points);						c = 0;						j = 0;						xc->type.vals[0] = 0;						for (i = 1; i < converter->all_atts.d->n_points; i++) {							switch(converter->all_atts.d->tags[i]) {							case GF_PATH_CURVE_ON:								if (c < converter->all_atts.d->n_contours &&									i-1 == converter->all_atts.d->contours[c]) {									xc->type.vals[j] = 0;									c++;								} else {									xc->type.vals[j] = 1;								}								break;							case GF_PATH_CURVE_CUBIC:								xc->type.vals[j] = 2;								i+=2;								break;							case GF_PATH_CLOSE:								xc->type.vals[j] = 6;								break;							case GF_PATH_CURVE_CONIC:								xc->type.vals[j] = 7;								i++;								break;							}							j++;						}						xc->type.count = j;					}													shape->appearance = create_appearance(&converter->svg_props, converter->bifs_sg);					gf_node_register(shape->appearance, (GF_Node *)shape);				}			}			break;		case TAG_SVG_polyline:			{				Bool is_parent_set = 0;				if (converter->all_atts.transform) {					node = add_transform(converter, node);					converter->bifs_parent = node;					is_parent_set = 1;				} 				child = gf_node_new(converter->bifs_sg, TAG_MPEG4_Shape);				gf_node_register(child, node);				gf_node_list_add_child(&((GF_ParentNode*)node)->children, child);				node = child;				child = NULL;				if (!is_parent_set) converter->bifs_parent = node;				{					M_Shape *shape = (M_Shape *)node;					shape->geometry = gf_node_new(converter->bifs_sg, TAG_MPEG4_IndexedFaceSet2D);					gf_node_register(shape->geometry, (GF_Node *)shape);					if (converter->all_atts.points) {						M_Coordinate2D *c2d;						M_IndexedFaceSet2D *ifs = (M_IndexedFaceSet2D *)shape->geometry;						u32 i;						ifs->coord = gf_node_new(converter->bifs_sg, TAG_MPEG4_Coordinate2D);						c2d = (M_Coordinate2D *)ifs->coord;						gf_node_register(ifs->coord, (GF_Node *)ifs);												gf_sg_vrml_mf_alloc(&c2d->point, GF_SG_VRML_MFVEC2F, gf_list_count(*converter->all_atts.points));						for (i = 0; i < gf_list_count(*converter->all_atts.points); i++) {							SVG_Point *p = (SVG_Point *)gf_list_get(*converter->all_atts.points, i);							c2d->point.vals[i].x = p->x;							c2d->point.vals[i].y = p->y;						}											}													shape->appearance = create_appearance(&converter->svg_props, converter->bifs_sg);					gf_node_register(shape->appearance, (GF_Node *)shape);				}			}			break;		case TAG_SVG_text:			{				Bool is_parent_set = 0;				if (converter->all_atts.transform) {					node = add_transform(converter, node);					converter->bifs_parent = node;					is_parent_set = 1;				}				child = gf_node_new(converter->bifs_sg, TAG_MPEG4_Transform2D);				gf_node_register(child, node);				gf_node_list_add_child(&((GF_ParentNode*)node)->children, child);				{					M_Transform2D *tr = (M_Transform2D *)child;					if (converter->all_atts.text_x) tr->translation.x = ((SVG_Coordinate *)gf_list_get(*converter->all_atts.text_x, 0))->value;					if (converter->all_atts.text_y) tr->translation.y = ((SVG_Coordinate *)gf_list_get(*converter->all_atts.text_y, 0))->value;					tr->scale.y = -FIX_ONE;				}				node = child;				child = NULL;				if (!is_parent_set) {					converter->bifs_parent = node;					is_parent_set = 1;				}				child = gf_node_new(converter->bifs_sg, TAG_MPEG4_Shape);				gf_node_register(child, node);				gf_node_list_add_child(&((GF_ParentNode*)node)->children, child);				node = child;				child = NULL;				if (!is_parent_set) converter->bifs_parent = node;				{					M_FontStyle *fs;					M_Text *text; 					M_Shape *shape = (M_Shape *)node;					text = (M_Text *)gf_node_new(converter->bifs_sg, TAG_MPEG4_Text);					shape->geometry = (GF_Node *)text;					converter->bifs_text_node = shape->geometry;					gf_node_register(shape->geometry, (GF_Node *)shape);										fs = (M_FontStyle *)gf_node_new(converter->bifs_sg, TAG_MPEG4_XFontStyle);					gf_node_register((GF_Node *)fs, (GF_Node*)text);					text->fontStyle = (GF_Node *)fs;					gf_sg_vrml_mf_alloc(&fs->family, GF_SG_VRML_MFSTRING, 1);									fs->family.vals[0] = strdup(converter->svg_props.font_family->value);									fs->size = converter->svg_props.font_size->value;					shape->appearance = create_appearance(&converter->svg_props, converter->bifs_sg);					gf_node_register(shape->appearance, (GF_Node *)shape);				}			}			break;		case TAG_SVG_ellipse:		case TAG_SVG_circle:			{				Bool is_parent_set = 0;				if (converter->all_atts.transform) {					node = add_transform(converter, node);					converter->bifs_parent = node;					is_parent_set = 1;				}				if (converter->all_atts.cx || converter->all_atts.cy) {					child = gf_node_new(converter->bifs_sg, TAG_MPEG4_Transform2D);					gf_node_register(child, node);					gf_node_list_add_child(&((GF_ParentNode*)node)->children, child);					{						M_Transform2D *tr = (M_Transform2D *)child;						if (converter->all_atts.cx) tr->translation.x = converter->all_atts.cx->value;						if (converter->all_atts.cy) tr->translation.y = converter->all_atts.cy->value;					}					node = child;					child = NULL;					if (!is_parent_set) {						converter->bifs_parent = node;						is_parent_set = 1;					}				} 				child = gf_node_new(converter->bifs_sg, TAG_MPEG4_Shape);				gf_node_register(child, node);				gf_node_list_add_child(&((GF_ParentNode*)node)->children, child);				node = child;				child = NULL;				if (!is_parent_set) converter->bifs_parent = node;				{					M_Shape *shape = (M_Shape *)node;					if (tag == TAG_SVG_ellipse) {						M_Ellipse *e = (M_Ellipse *)gf_node_new(converter->bifs_sg, TAG_MPEG4_Ellipse);						shape->geometry = (GF_Node *)e;						e->radius.x = converter->all_atts.rx->value;						e->radius.y = converter->all_atts.ry->value;					} else {						M_Circle *c = (M_Circle *)gf_node_new(converter->bifs_sg, TAG_MPEG4_Circle);						shape->geometry = (GF_Node *)c;						c->radius = converter->all_atts.r->value;					}					gf_node_register(shape->geometry, (GF_Node *)shape);										shape->appearance = create_appearance(&converter->svg_props, converter->bifs_sg);					gf_node_register(shape->appearance, (GF_Node *)shape);				}			}			break;		case TAG_SVG_defs:			{				child = gf_node_new(converter->bifs_sg, TAG_MPEG4_Switch);				gf_node_register(child, node);				gf_node_list_add_child(&((GF_ParentNode*)node)->children, child);				node = child;				child = NULL;				{					M_Switch *sw = (M_Switch *)node;					sw->whichChoice = -1;				}				converter->bifs_parent = node;			}			break;		case TAG_SVG_solidColor:			{				child = gf_node_new(converter->bifs_sg, TAG_MPEG4_Shape);				gf_node_register(child, node);				gf_node_list_add_child(&((GF_ParentNode*)node)->children, child);				node = child;				child = NULL;				converter->bifs_parent = node;			}			break;		default:			{				fprintf(stdout, "Warning: element %s not supported \n", gf_node_get_class_name((GF_Node *)elt));				child = gf_node_new(converter->bifs_sg, TAG_MPEG4_Transform2D);				gf_node_register(child, node);				gf_node_list_add_child(&((GF_ParentNode*)node)->children, child);				node = child;				child = NULL;				converter->bifs_parent = node;			}			break;		}		if (id_string) 			gf_node_set_id(converter->bifs_parent, gf_node_get_id((GF_Node *)elt), gf_node_get_name((GF_Node *)elt));	}}static void svg2bifs_node_end(void *sax_cbck, const char *name, const char *name_space){	SVG_SANI_BIFS_Converter *converter = (SVG_SANI_BIFS_Converter *)sax_cbck;	GF_Node *parent;	SVGPropertiesPointers *backup_props = gf_node_get_private(converter->svg_parent);	memcpy(&converter->svg_props, backup_props, sizeof(SVGPropertiesPointers));//	free(backup_props);	gf_node_set_private(converter->svg_parent, NULL);	converter->bifs_parent = gf_node_get_parent(converter->bifs_parent, 0);	parent = gf_node_get_parent(converter->svg_parent, 0);	gf_node_unregister(converter->svg_parent, parent);		if (!parent) gf_sg_set_root_node(converter->svg_sg, NULL);	converter->svg_parent = parent;	converter->bifs_text_node = NULL;}static void svg2bifs_text_content(void *sax_cbck, const char *text_content, Bool is_cdata){	SVG_SANI_BIFS_Converter *converter = (SVG_SANI_BIFS_Converter *)sax_cbck;	if (converter->bifs_text_node) {		M_Text *text = (M_Text *)converter->bifs_text_node;		gf_sg_vrml_mf_alloc(&text->string, GF_SG_VRML_MFSTRING, 1);		text->string.vals[0] = strdup(text_content);	}}int main(int argc, char **argv){	SVG_SANI_BIFS_Converter *converter;	GF_SceneDumper *dump;	char *tmp;	gf_sys_init();	GF_SAFEALLOC(converter, SVG_SANI_BIFS_Converter);	converter->sax_parser = gf_xml_sax_new(svg2bifs_node_start, svg2bifs_node_end, svg2bifs_text_content, converter);		converter->svg_sg = gf_sg_new();	gf_svg_properties_init_pointers(&converter->svg_props);	converter->bifs_sg = gf_sg_new();	fprintf(stdout, "Parsing SVG File\n");	gf_xml_sax_parse_file(converter->sax_parser, argv[1], NULL);	fprintf(stdout, "Dumping BIFS scenegraph\n");	tmp = strchr(argv[1], '.');	tmp[0] = 0;	dump = gf_sm_dumper_new(converter->bifs_sg, argv[1], ' ', GF_SM_DUMP_XMTA);	tmp[0] = '.';	gf_sm_dump_graph(dump, 1, 1);	gf_sm_dumper_del(dump);	gf_svg_properties_reset_pointers(&converter->svg_props);	gf_sg_del(converter->svg_sg);	gf_sg_del(converter->bifs_sg);	gf_xml_sax_del(converter->sax_parser);		free(converter);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -