static void draw_axis (ModeInfo *mi) { GLfloat s; glDisable (GL_TEXTURE_2D); glDisable (GL_LIGHTING); glPushMatrix(); align_axis (mi, 0); glTranslatef (0.34, 0.39, -0.61); s = 0.96; glScalef (s, s, s); /* tighten up the enclosing sphere */ glColor3f (0.5, 0.5, 0); glRotatef (90, 1, 0, 0); /* unit_sphere is off by 90 */ glRotatef (9.5, 0, 1, 0); /* line up the time zones */ glFrontFace (GL_CCW); unit_sphere (12, 24, True); glBegin(GL_LINES); glVertex3f(0, -2, 0); glVertex3f(0, 2, 0); glEnd(); glPopMatrix(); }
ENTRYPOINT void draw_planet (ModeInfo * mi) { planetstruct *gp = &planets[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); double x, y, z; if (!gp->glx_context) return; glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glXMakeCurrent (dpy, window, *(gp->glx_context)); mi->polygon_count = 0; if (! gp->button_down_p) switch (gp->state) { case STARTUP: gp->ratio += speed * 0.01; break; case FLAT: gp->ratio += speed * 0.005; break; case FOLD: gp->ratio += speed * 0.01; break; case ICO: gp->ratio += speed * 0.01; break; case STEL_IN: gp->ratio += speed * 0.05; break; case STEL: gp->ratio += speed * 0.01; break; case STEL_OUT: gp->ratio += speed * 0.07; break; case ICO2: gp->ratio += speed * 0.07; break; case AXIS: gp->ratio += speed * 0.02; break; case SPIN: gp->ratio += speed * 0.005; break; case UNFOLD: gp->ratio += speed * 0.01; break; default: abort(); } if (gp->ratio > 1.0) { gp->ratio = 0; switch (gp->state) { case STARTUP: gp->state = FLAT; break; case FLAT: gp->state = FOLD; break; case FOLD: gp->state = ICO; break; case ICO: gp->state = STEL_IN; break; case STEL_IN: gp->state = STEL; break; case STEL: { int i = (random() << 9) % 7; gp->state = (i < 3 ? STEL_OUT : i < 6 ? SPIN : AXIS); } break; case AXIS: gp->state = STEL_OUT; break; case SPIN: gp->state = STEL_OUT; break; case STEL_OUT: gp->state = ICO2; break; case ICO2: gp->state = UNFOLD; break; case UNFOLD: gp->state = FLAT; break; default: abort(); } } glEnable(GL_LINE_SMOOTH); glEnable(GL_POINT_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glPushMatrix(); gltrackball_rotate (gp->trackball); glRotatef (current_device_rotation(), 0, 0, 1); if (gp->state != STARTUP) { get_position (gp->rot, &x, &y, &z, !gp->button_down_p); x = (x - 0.5) * 3; y = (y - 0.5) * 3; z = 0; glTranslatef(x, y, z); } if (do_roll && gp->state != STARTUP) { get_rotation (gp->rot, &x, &y, 0, !gp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); } if (do_stars) { glDisable(GL_TEXTURE_2D); glDisable(GL_LIGHTING); glPushMatrix(); glScalef (60, 60, 60); glRotatef (90, 1, 0, 0); glRotatef (35, 1, 0, 0); glCallList (gp->starlist); mi->polygon_count += gp->starcount; glPopMatrix(); glClear(GL_DEPTH_BUFFER_BIT); } if (! wire) glEnable (GL_LIGHTING); if (do_texture) glEnable(GL_TEXTURE_2D); glScalef (2.6, 2.6, 2.6); { GLfloat fold_ratio = 0; GLfloat stel_ratio = 0; switch (gp->state) { case FOLD: fold_ratio = gp->ratio; break; case UNFOLD: fold_ratio = 1 - gp->ratio; break; case ICO: case ICO2: fold_ratio = 1; break; case STEL: case AXIS: case SPIN: fold_ratio = 1; stel_ratio = 1; break; case STEL_IN: fold_ratio = 1; stel_ratio = gp->ratio; break; case STEL_OUT: fold_ratio = 1; stel_ratio = 1 - gp->ratio; break; case STARTUP: /* Tilt in from flat */ glRotatef (-90 * ease_ratio (1 - gp->ratio), 1, 0, 0); break; default: break; } # ifdef HAVE_MOBILE /* Enlarge the icosahedron a bit to make it more visible */ { GLfloat s = 1 + 1.3 * ease_ratio (fold_ratio); glScalef (s, s, s); } # endif if (gp->state == SPIN) { align_axis (mi, 0); glRotatef (ease_ratio (gp->ratio) * 360 * 3, 0, 0, 1); align_axis (mi, 1); } draw_triangles (mi, ease_ratio (fold_ratio), ease_ratio (stel_ratio)); if (gp->state == AXIS) draw_axis(mi); } glPopMatrix(); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); }
bool pre_processing_main(const V3DPluginArgList & input, V3DPluginArgList & output) { printf("welcome to pre_processing\n"); vector<char*>* inlist = (vector<char*>*)(input.at(0).p); vector<char*>* outlist = NULL; vector<char*>* paralist = NULL; if(input.size() != 2) { printf("Please specify parameter set.\n"); printHelp_pre_processing(); return false; } paralist = (vector<char*>*)(input.at(1).p); if (paralist->size()!=1) { printf("Please specify all paramters in one text string.\n"); printHelp_pre_processing(); return false; } char * paras = paralist->at(0); int argc = 1; enum {kArgMax = 64}; char *argv[kArgMax]; //parsing parameters if (paras) { int len = strlen(paras); for (int i=0;i<len;i++) { if (paras[i]=='#') paras[i] = '-'; } char* pch = strtok(paras, " "); while (pch && argc<kArgMax) { argv[argc++] = pch; pch = strtok(NULL, " "); } } else printHelp_pre_processing(); //read arguments char *dfile_input = NULL; char *dfile_result = NULL; char *outfile = NULL; double step_size = 2; int skip_rotation = 1; int c; static char optstring[]="i:o:s:r:"; extern char * optarg; extern int optind, opterr; while ((c = getopt(argc, argv, optstring))!=-1) { switch (c) { case 'h': printHelp_pre_processing(); return 0; break; case 'i': if (strcmp(optarg,"(null)")==0 || optarg[0]=='-') { fprintf(stderr, "Found illegal or NULL parameter for the option -l.\n"); return 1; } dfile_input = optarg; break; case 'o': if (strcmp(optarg,"(null)")==0 || optarg[0]=='-') { fprintf(stderr, "Found illegal or NULL parameter for the option -o.\n"); return 1; } dfile_result = optarg; break; case 'r': if (strcmp(optarg,"(null)")==0 || optarg[0]=='-') { fprintf(stderr, "Found illegal or NULL parameter for the option -o.\n"); return 1; } skip_rotation = atoi(optarg); break; case 's': if (strcmp(optarg,"(null)")==0 || optarg[0]=='-') { fprintf(stderr, "Found illegal or NULL parameter for the option -s.\n"); return 1; } step_size = atof(optarg); if (step_size<=0) { fprintf(stderr, "Illegal step size. It must>0.\n"); } break; case '?': fprintf(stderr,"Unknown option '-%c' or incomplete argument lists.\n",optopt); return 1; break; } } QString qs_input(dfile_input); NeuronTree nt = readSWC_file(qs_input); QString outfileName = QString(dfile_result); if (dfile_result==NULL) { outfileName = qs_input+"_preprocessed.swc"; } printf("Pruning short branches\n"); NeuronTree pruned; if (!prune_branch(nt, pruned)) { fprintf(stderr,"Error in prune_short_branch.\n"); return 1; } printf("Resampling along segments\n"); NeuronTree resampled = resample(pruned, step_size); NeuronTree result; if (skip_rotation!=1) { printf("Aligning PCA axis\n"); result = align_axis(resampled); } else result = resampled; if (export_listNeuron_2swc(result.listNeuron,qPrintable(outfileName))) printf("\t %s has been generated successfully.\n",qPrintable(outfileName)); return 1; }