/*! * \brief Apply the current style properties to the given object */ void DiaOutputDev::applyStyle (DiaObject *obj, bool fill) { GPtrArray *plist = g_ptr_array_new (); if (!fill) { prop_list_add_line_width (plist, this->line_width); prop_list_add_line_style (plist, this->line_style, this->dash_length); prop_list_add_line_colour (plist, &this->stroke_color); } else { prop_list_add_line_width (plist, 0); prop_list_add_line_colour (plist, &this->fill_color); prop_list_add_fill_colour (plist, &this->fill_color); } prop_list_add_show_background (plist, fill ? TRUE : FALSE); // using the "Standard - Path" internal enum values here is a bit dirty prop_list_add_enum (plist, "stroke_or_fill", fill ? 0x2 : 0x1); obj->ops->set_props (obj, plist); prop_list_free (plist); }
/* reads an ellipse entity from the dxf file and creates an ellipse object in dia*/ static DiaObject * read_entity_ellipse_dxf(FILE *filedxf, DxfData *data, DiagramData *dia) { /* ellipse data */ Point center = {0, 0}; real width = 1.0; real ratio_width_height = 1.0; DiaObjectType *otype = object_get_type("Standard - Ellipse"); Handle *h1, *h2; DiaObject *ellipse_obj; RGB_t color = { 0, }; Color line_colour; GPtrArray *props; real line_width = DEFAULT_LINE_WIDTH; Layer *layer = dia->active_layer; do { if(read_dxf_codes(filedxf, data) == FALSE){ return( NULL ); } switch(data->code){ case 8: layer = layer_find_by_name(data->value, dia); color = pal_get_rgb (_dxf_color_get_by_layer (layer)); break; case 10: center.x = g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; break; case 11: ratio_width_height = g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; break; case 20: center.y = (-1)*g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; break; case 39: line_width = g_ascii_strtod(data->value, NULL) * WIDTH_SCALE; break; case 40: width = g_ascii_strtod(data->value, NULL) * WIDTH_SCALE; /* XXX what scale */ break; case 62 : color = pal_get_rgb (atoi(data->value)); break; } } while(data->code != 0); center.x -= width; center.y -= (width*ratio_width_height); ellipse_obj = otype->ops->create(¢er, otype->default_user_data, &h1, &h2); _color_init_from_rgb (&line_colour, color); props = g_ptr_array_new (); prop_list_add_point (props, "elem_corner", ¢er); prop_list_add_real (props, "elem_width", width); prop_list_add_real (props, "elem_height", width * ratio_width_height); prop_list_add_line_colour (props, &line_colour); prop_list_add_line_width (props, line_width); prop_list_add_show_background (props, FALSE); ellipse_obj->ops->set_props(ellipse_obj, props); prop_list_free(props); if (layer) layer_add_object(layer, ellipse_obj); else return ellipse_obj; return NULL; /* don't add it twice */ }
/* reads a solid entity from the dxf file and creates a polygon object in dia*/ static DiaObject * read_entity_solid_dxf(FILE *filedxf, DxfData *data, DiagramData *dia) { /* polygon data */ Point p[4]; DiaObjectType *otype = object_get_type("Standard - Polygon"); Handle *h1, *h2; DiaObject *polygon_obj; MultipointCreateData *pcd; Color fill_colour; GPtrArray *props; real line_width = 0.001; LineStyle style = LINESTYLE_SOLID; Layer *layer = dia->active_layer; RGB_t color = { 127, 127, 127 }; /* printf( "Solid " ); */ memset(p, 0, sizeof(p)); do { if(read_dxf_codes(filedxf, data) == FALSE){ return( NULL ); } switch(data->code){ case 6: style = get_dia_linestyle_dxf(data->value); break; case 8: layer = layer_find_by_name(data->value, dia); color = pal_get_rgb (_dxf_color_get_by_layer (layer)); /*printf( "layer: %s ", data->value );*/ break; case 10: p[0].x = g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; /*printf( "P0.x: %f ", p[0].x );*/ break; case 11: p[1].x = g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; /*printf( "P1.x: %f ", p[1].x );*/ break; case 12: /* bot only swapped, but special for only 3 points given */ p[2].x = p[3].x = g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; /*printf( "P2.x: %f ", p[2].x );*/ break; case 13: /* SOLID order swapped compared to Dia's */ p[2].x = g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; /*printf( "P3.x: %f ", p[3].x );*/ break; case 20: p[0].y = (-1)*g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; /*printf( "P0.y: %f ", p[0].y );*/ break; case 21: p[1].y = (-1)*g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; /*printf( "P1.y: %f ", p[1].y );*/ break; case 22: p[2].y = p[3].y = (-1)*g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; /*printf( "P2.y: %f ", p[2].y );*/ break; case 23: p[2].y = (-1)*g_ascii_strtod(data->value, NULL) * coord_scale * measure_scale; /*printf( "P3.y: %f\n", p[3].y );*/ break; case 39: line_width = g_ascii_strtod(data->value, NULL) * WIDTH_SCALE; /*printf( "width %f\n", line_width );*/ break; case 62: color = pal_get_rgb (atoi(data->value)); break; } } while(data->code != 0); pcd = g_new( MultipointCreateData, 1); if( p[2].x != p[3].x || p[2].y != p[3].y ) pcd->num_points = 4; else pcd->num_points = 3; pcd->points = g_new( Point, pcd->num_points ); memcpy( pcd->points, p, sizeof( Point ) * pcd->num_points ); polygon_obj = otype->ops->create( NULL, pcd, &h1, &h2 ); _color_init_from_rgb (&fill_colour, color); props = g_ptr_array_new (); prop_list_add_line_colour (props, &fill_colour); prop_list_add_line_width (props, line_width); prop_list_add_line_style (props, style, 1.0); prop_list_add_fill_colour (props, &fill_colour); prop_list_add_show_background (props, TRUE); polygon_obj->ops->set_props( polygon_obj, props ); prop_list_free(props); if (layer) layer_add_object( layer, polygon_obj ); else return polygon_obj; return NULL; }