Пример #1
0
void initcontours(contour **ci_ptr, float **rgbptr, int ncontours,float constval, int idir, float level_min, float level_max, int nlevels){
  int i;

  contour *cont;
  float dval;

  dval = 0.0;

  if(nlevels>1){
    dval = (level_max-level_min)/(float)(nlevels);
  }

  NewMemory((void **)&cont,ncontours*sizeof(contour));
  *ci_ptr=cont;
  for(i=0;i<ncontours;i++){
    contour *ci;
    int j;

    ci = cont+i;
    initcontour(ci,rgbptr,nlevels);
    ci->xyzval=constval;
    ci->idir=idir;
    for(j=0;j<nlevels+1;j++){
      ci->levels[j]=level_min+j*dval;
    }
  }

}
Пример #2
0
int
process_contour(Image *img, Rect clipr, uchar *cimg, int w, int h, int st, uchar *colors)
{
	int i;
	short *pt;
	int npt, apt;

	Contour contr;

	apt = 32768;
	pt = malloc(2 * apt * sizeof pt[0]);

	uchar color[4];

	enum { MaxError = 5 };

	/* highlight cracks */
	drawrect(img, clipr, color(0x00, 0xff, 0x00, 0xff));

	Tess tess[16];
	for(i = 0; i < nelem(tess); i++)
		inittess(tess+i);

	initcontour(&contr, cimg, w, h, st);
	int fid;
	while((npt = nextcontour(&contr, pt, apt, 0, &fid)) != -1){
		short orig[2] = { -1, -1 };
		int area;
		int poly[4096];
		int npoly;

		if(npt == apt){
			fprintf(stderr, "out of points!\n");
			continue;
		}

		area = ptarea(pt, npt, orig);
		if(area > 0){
			if((npoly = fitpoly(poly, nelem(poly), pt, npt, MaxError)) == -1)
				continue; /* not enough points */
			if(npoly == nelem(poly) || npoly < 3)
				continue;
			if(polyarea(pt, poly, npoly, orig) < 0){
				continue;
			}
			tessaddpoly(tess+fid, pt, poly, npoly);
		} else {
			ptreverse(pt, npt);
			npoly = fitpoly(poly, nelem(poly), pt, npt, MaxError);
			if(npoly == nelem(poly) || npoly < 3)
				continue;
			if(polyarea(pt, poly, npoly, orig) < 0){
				continue;
			}
			polyreverse(poly, npoly);
			tessaddpoly(tess+fid, pt, poly, npoly);
		}
	}


	free(pt);
	int ntris;
	int j;
	for(j = 0; j < nelem(tess); j++){
		if((ntris = tesstris(tess+j, &pt)) != -1){
			memcpy(color, colors+4*j, sizeof color);
			for(i = 0; i < ntris; i++){
				//idx2color(j, color);
				//memcpy(color, poscolor, sizeof color);
				pt[6*i+0+0] += clipr.u0;
				pt[6*i+0+1] += clipr.v0;
				pt[6*i+2+0] += clipr.u0;
				pt[6*i+2+1] += clipr.v0;
				pt[6*i+4+0] += clipr.u0;
				pt[6*i+4+1] += clipr.v0;
				drawtri(img, clipr, pt+6*i+0, pt+6*i+2, pt+6*i+4, color);
			}
			free(pt);
		}
		freetess(tess+j);
	}

	return 0;
}
Пример #3
0
void Init(void){
  int i;

  FREEMEMORY(plotiso);
  NewMemory((void **)&plotiso,mxplot3dvars*sizeof(int));

  for(i=0;i<16;i++){
    if(i%5==0){
      modelview_identity[i]=1.0;
    }
    else{
      modelview_identity[i]=0.0;
    }
  }
  for(i=0;i<mxplot3dvars;i++){
    plotiso[i]=nrgb/2;
  }

  for(i=0;i<16;i++){
    modelview_setup[i]=0.0;
  }
  for(i=0;i<4;i++){
    modelview_setup[i+4*i]=1.0;
  }

  for(i=0;i<nmeshes;i++){
    mesh *meshi;

    meshi=meshinfo+i;
    initcontour(&meshi->plot3dcontour1,rgb_plot3d_contour,nrgb);
    initcontour(&meshi->plot3dcontour2,rgb_plot3d_contour,nrgb);
    initcontour(&meshi->plot3dcontour3,rgb_plot3d_contour,nrgb);
  }

  for(i=0;i<nmeshes;i++){
    mesh *meshi;

    meshi=meshinfo+i;
    meshi->currentsurf.defined=0;
    meshi->currentsurf2.defined=0;
  }

  /* initialize box sizes, lighting parameters */

  xyzbox = MAX(MAX(xbar,ybar),zbar);

  {
    char name_external[32];
    strcpy(name_external,"external");
    init_camera(camera_external,name_external);
    camera_external->view_id=EXTERNAL_LIST_ID;
  }
  if(camera_ini->defined==1){
    copy_camera(camera_current,camera_ini);
  }
  else{
    camera_external->zoom=zoom;
    copy_camera(camera_current,camera_external);
  }
  strcpy(camera_label,camera_current->name);
  update_camera_label();
  {
    char name_internal[32];
    strcpy(name_internal,"internal");
    init_camera(camera_internal,name_internal);
  }
  camera_internal->eye[0]=0.5*xbar;
  camera_internal->eye[1]=0.5*ybar;
  camera_internal->eye[2]=0.5*zbar;
  camera_internal->view_id=0;
  copy_camera(camera_save,camera_current);
  copy_camera(camera_last,camera_current);

  init_camera_list();
  add_default_views();
  copy_camera(camera_external_save,camera_external);
  update_view_gluilist();

  //reset_glui_view(i_view_list);

  glEnable(GL_DEPTH_TEST);
  glEnable(GL_NORMALIZE);
  if(cullfaces==1)glEnable(GL_CULL_FACE);

  glClearColor(backgroundcolor[0],backgroundcolor[1],backgroundcolor[2], 0.0f);
  glShadeModel(GL_SMOOTH); 
  glDisable(GL_DITHER);

  thistime=0;
  lasttime=0;

  /* define color bar */

  UpdateRGBColors(COLORBAR_INDEX_NONE);

  block_ambient2[3] = 1.0;
  mat_ambient2[3] = 1.0;
  mat_specular2[3] = 1.0;

  reset_glui_view(startup_view_ini);
  Update_Show();
}