Trisurf Monte Carlo simulator
Samo Penic
2014-06-25 49dbdd4940aa78021f4ba516f4edb632058262bf
src/cross-section.c
@@ -2,6 +2,7 @@
#include<cross-section.h>
#include<coord.h>
#include<cairo/cairo.h>
#include<stdint.h>
/** @brief Calculates cross-section of vesicle with plane.
 *
 * Function returns points of cross-section of vesicle with plane. Plane is described with equation $ax+by+cz+d=0$. Algorithm extracts coordinates of each vertex of a vesicle and then:
@@ -77,17 +78,17 @@
   cairo_surface_t *surface;
   cairo_t *cr;
   ts_uint i;
   surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, 1800, 1800);
   surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 768, 576);
   cr = cairo_create (surface);
   cairo_rectangle(cr, 0.0, 0.0, 1800,1800);
   cairo_set_source_rgb(cr, 0.3, 0.3, 0.3);
   cairo_rectangle(cr, 0.0, 0.0, 768,576);
   cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
   cairo_fill(cr);
   cairo_set_line_width (cr, 5.0/30.0);
   cairo_set_line_width (cr, 2.0/8.0);
   cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
   cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); 
   cairo_translate(cr, 900,900);
   cairo_scale (cr, 30, 30);
   cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
   cairo_translate(cr, 380,250);
   cairo_scale (cr, 8.0, 8.0);
   cairo_set_source_rgb (cr, 0.3, 0.3, 0.3);
   for(i=0;i<pts->n;i+=2){
      cairo_move_to(cr, pts->coord[i]->e1, pts->coord[i]->e2);
@@ -95,6 +96,7 @@
   }
   cairo_stroke(cr);
   cairo_surface_write_to_png (surface,filename);
    append_to_isak_program_raw(surface,"experimental.img");
   cairo_surface_finish (surface);   
   return TS_SUCCESS;
}
@@ -106,3 +108,39 @@
   crossection_to_png(pts,filename);
   return TS_SUCCESS;
}
ts_bool append_to_isak_program_raw(cairo_surface_t *surface, char *filename){
    unsigned char *d=cairo_image_surface_get_data(surface);
    int w=cairo_image_surface_get_width(surface);
    int h=cairo_image_surface_get_height(surface);
    int s=cairo_image_surface_get_stride(surface);
    int i,j;
    FILE *fd=fopen(filename, "a+");
    uint32_t *pixelptr;
    uint32_t my_pixel;
    uint8_t pixel_channel;
//       red = (pixel[8] >> 16) & 0xFF;
       fwrite (&w,sizeof(uint32_t),1,fd);
       fwrite (&h,sizeof(uint32_t),1,fd);
       fwrite (&w,sizeof(uint32_t),1,fd);//time!
    for(i=0;i<h;i++){
        for(j=0;j<w;j++){
            pixelptr=(uint32_t *)(d + i * s);
            my_pixel = pixelptr[j];
            pixel_channel=(my_pixel>>16)&0xFF;
            fwrite(&pixel_channel,sizeof(uint8_t), 1,fd);
        }
    }
    fclose(fd);
    return TS_SUCCESS;
}
/*ts_bool init_isak_program_raw_output_file(ts_uint w, ts_uint h, char *filename){
}*/