/*! * \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 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; }