Beispiel #1
0
void
init(char *filename)
{
	stl_error_t err;
	GLfloat *vertices = NULL;
	GLuint triangle_cnt = 0;
	int i = 0, base = 0;

 	stl = stl_alloc();
	if (stl == NULL) {
		fprintf(stderr, "Unable to allocate memoryfor the stl object");
		exit(1);
	}

	err = stl_load(stl, filename);

	if (err != STL_ERR_NONE) {
		fprintf(stderr, "Problem loading the stl file, check lineno %d\n",
			stl_error_lineno(stl));
		exit(1);
	}

	err =  stl_vertices(stl, &vertices);
	if (err) {
		fprintf(stderr, "Problem getting the vertex array");
		exit(1);
	}

	triangle_cnt = stl_facet_cnt(stl);

        model = glGenLists(1);
        glNewList(model, GL_COMPILE);
        glBegin(GL_TRIANGLES);
	for (i = 0; i < triangle_cnt; i++) {
		base = i*18;
		drawTriangle(vertices[base], vertices[base + 1], vertices[base + 2],
			     vertices[base + 6], vertices[base + 7], vertices[base + 8],
			     vertices[base + 12], vertices[base + 13], vertices[base + 14]);
	}
	glEnd();
        glEndList();

	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
	glEnable(GL_DEPTH_TEST);
	glShadeModel(GL_SMOOTH);

        glClearColor(135.0 / 255, 206.0 / 255.0, 250.0 / 255.0, 0.0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glColor3f(120.0 / 255.0 , 120.0 / 255.0, 120.0 / 255.0);

        glEnable(GL_NORMALIZE);
	glEnable(GL_COLOR_MATERIAL);

	glFlush();
}
// ---------------------------------------------------------------------------
// 
// ------------
bool bvDefPaletteHisto::write(){
_bTrace_("bvDefPaletteHistoc::write",true);
bArray			arr(sizeof(xmlelt));
char			val[_values_length_max_];
int				n;
bvDefHistoStyle	*stl,*src;
UInt32			sign=_sign;
	
//	if(_styles.get(1,&stl)){
//		qref=stl->_qref;
//		qmax=stl->_qmax;
//	}
	
	add_cdesc(arr,0,_stylename,"");
	
// Identification			
	add_cdesc(arr,1,"styleidentification","");
	add_cdesc(arr,2,"name",_name);
	sprintf(val,"%.4s",&sign);
	add_cdesc(arr,2,"sign",val);
	add_cdesc(arr,2,"version",_vers);
	
// Globals		
	add_cdesc(arr,1,"globals","");
	_tp->fields()->get_name(_fld,val);
	add_cdesc(arr,2,"classfield",val);
	add_ddesc(arr,2,"scaleref",_sref,0);
	add_ddesc(arr,2,"unitcoef",_coef,6);
	add_idesc(arr,2,"sort",0);
	add_idesc(arr,2,"passcount",1);
	add_cdesc(arr,2,"classboundsarray","");
	add_idesc(arr,3,"classbound",1);
	add_cdesc(arr,3,"classname","min");
	add_idesc(arr,3,"classbound",LONG_MAX);
	add_cdesc(arr,3,"classname","max");
	
// Conditions	
	add_cdesc(arr,1,"condition","");
	if(_cfld){
		add_cdesc(arr,2,nsvdef_op_list[_cop],"");
		_tp->fields()->get_name(_cfld,val);
		add_cdesc(arr,3,"dbfield",val);
		_tp->fields()->get_kind(_cfld,&n);
		switch(n){
			case _bool:
				add_cdesc(arr,3,"dbbool",_cval);
				break;
			case _int:
				add_cdesc(arr,3,"dbint",_cval);
				break;
			case _double:
				add_cdesc(arr,3,"dbfloat",_cval);
				break;
			case _date:
				add_cdesc(arr,3,"dbdate",_cval);
				break;
			case _time:
				add_cdesc(arr,3,"dbtime",_cval);
				break;
			default:
				add_cdesc(arr,3,"dbchar",_cval);
				break;
		}
	}
	
	// StyleRuns
	if(_bck){
_tm_("insertion du style background");
		if(_styles.get(1,&src)){
			stl_alloc(true);
			_styles.get(_styles.count(),&stl);
			stl->_stroke[0]=_stroke[0];
			stl->_stroke[1]=_stroke[1];
			stl->_stroke[2]=_stroke[2];
			stl->_stroke[3]=_stroke[3];
			stl->_stroke[4]=_stroke[4];
			stl->_fill[0]=_fill[0];
			stl->_fill[1]=_fill[1];
			stl->_fill[2]=_fill[2];
			stl->_fill[3]=_fill[3];
			stl->_fill[4]=_fill[4];
			stl->_width=_width;
			stl->_isback=true;
			stl->_cc=_cmyk?5:4;
			stl->_smin=src->_smin;
			stl->_smax=src->_smax;
			stl->_offx=src->_offx;
			stl->_offy=src->_offy;
			stl->_dimx=src->_dimx;
			stl->_dimy=src->_dimy;
			stl->_dx=src->_dx;
			stl->_dy=src->_dy;
			stl->_spc=src->_spc;
			stl->_onx=src->_onx;
			stl->_centro=src->_centro;
			
			_styles.rmv(_styles.count());
			_styles.insert(1,&stl);
		}
	}
	for(int i=1;i<=_styles.count();i++){
_tm_("dump style "+i);
		_styles.get(i,&stl);
		stl->dump(arr,0);
	}
	if(_bck){
_tm_("retrait du style background");
		_styles.get(1,&stl);
		_styles.rmv(1);
		delete stl;
	}
	
	_root=_gapp->classMgr()->ParseXMLDescriptors(&arr);
	
	free_descs(arr);
	
	return(true);
}
// ---------------------------------------------------------------------------
// 
// ------------
bool bvDefPaletteHisto::read(){
_bTrace_("bvDefPaletteHistoc::read",true);
bool	made=false,b=false;

	_bck=false;
	_width=0;
	_stroke[0]=0;
	_stroke[1]=0;
	_stroke[2]=0;
	_stroke[3]=1;
	_stroke[4]=1;
	_fill[0]=0;
	_fill[1]=0;
	_fill[2]=0;
	_fill[3]=1;
	_fill[4]=1;
	
	if(!_root){
		make();
		made=true;
	}
	
bGenericXMLBaseElement* chld;
bGenericXMLBaseElement* elt;
bvDefHistoStyle*		stl;
char					val[_values_length_max_];
int						i,n;
double					bmax=LONG_MAX;
	
	for(;;){
// Identification		
		chld=_gapp->classMgr()->NthElement(_root,1,"styleidentification");
		if(!chld){
			break;
		}
		elt=_gapp->classMgr()->NthElement(chld,1,"name");
		if(!elt){
			break;
		}
		elt->getvalue(_name);
		elt=_gapp->classMgr()->NthElement(chld,1,"version");
		if(!elt){
			break;
		}
		elt->getvalue(_vers);
		if(strlen(_vers)==0){
			strcpy(_vers,"3.0.0");
		}
// Globals
		chld=_gapp->classMgr()->NthElement(_root,1,"globals");
		if(!chld){
			break;
		}
		
		elt=_gapp->classMgr()->NthElement(chld,1,"classfield");
		if(!elt){
			break;
		}
		elt->getvalue(val);
		_fld=_tp->fields()->get_index(val);
		if(_fld==0){
			_fld=kOBJ_SubType_;
		}
		
		i=0;
		do{	
			i++;
			elt=_gapp->classMgr()->NthElement(chld,i,"classbound");
			if(elt){
				elt->getvalue(val);
				bmax=matof(val);
			}
		}while(elt);
		
		elt=_gapp->classMgr()->NthElement(chld,1,"scaleref");
		if(!elt){
			break;
		}
		elt->getvalue(val);
		_sref=matof(val);
		elt=_gapp->classMgr()->NthElement(chld,1,"unitcoef");
		if(!elt){
			break;
		}
		elt->getvalue(val);
		_coef=matof(val);
		
// Condition		
		chld=_gapp->classMgr()->NthElement(_root,1,"condition");
		if(!chld){
			break;
		}
		if(chld->countelements()>0){
			elt=chld->getelement(1);
			elt->getclassname(val);
			for(i=1;i<=nsvdef_op_max;i++){
				if(!strcmp(val,nsvdef_op_list[i])){
					chld=elt;
					if(chld->countelements()==2){
						elt=chld->getelement(1);
						elt->getvalue(val);
						_cfld=_tp->fields()->get_index(val);
						if(_cfld){
							elt=chld->getelement(2);
							elt->getvalue(_cval);
						}
					}
					else{
						_cfld=0;
					}
					break;
				}
			}
			if(i==nsvdef_op_max+1){
				_cfld=0;
			}
			else{
				_cop=i;
			}
		}
		else{
			_cfld=0;
		}
		
// StyleRuns
		n=_gapp->classMgr()->CountElements(_root,"stylerun");
		for(i=1;i<=n;i++){
			chld=_gapp->classMgr()->NthElement(_root,i,"stylerun");
			stl_alloc(true);
			_styles.get(i,&stl);
			stl->load(chld);
			if(stl->is_back()){
				_stroke[0]=stl->_stroke[0];
				_stroke[1]=stl->_stroke[1];
				_stroke[2]=stl->_stroke[2];
				_stroke[3]=stl->_stroke[3];
				_stroke[4]=stl->_stroke[4];
				_fill[0]=stl->_fill[0];
				_fill[1]=stl->_fill[1];
				_fill[2]=stl->_fill[2];
				_fill[3]=stl->_fill[3];
				_fill[4]=stl->_fill[4];
				_width=stl->_width;
				_bck=true;
			}
			_cmyk=(stl->_cc==5);
		}
		for(i=_styles.count();i>0;i--){
			_styles.get(i,&stl);
			if(stl->is_back()){
				_styles.rmv(i);
				delete stl;
			}
		}
		
		b=true;
		break;
	}

	if(made){
		_gapp->classMgr()->ReleaseXMLInstance(_root);
		_root=NULL;
	}
	
	return(true);
}
// ---------------------------------------------------------------------------
// 
// ------------
bool bvDefPaletteQuick::read(){
_bTrace_("bvDefPaletteQuick::read",true);
bool	made=false,b=false;
	if(!_root){
		make();
		made=true;
	}
	
_tm_("make passé");
bGenericXMLBaseElement* chld;
bGenericXMLBaseElement* elt;
bvDefPaletteQuickStyle*	stl;
char					val[_values_length_max_];
int						i;
	
	for(;;){
// Identification		
_tm_("Identification");
		chld=_gapp->classMgr()->NthElement(_root,1,"styleidentification");
		if(!chld){
			break;
		}
		elt=_gapp->classMgr()->NthElement(chld,1,"name");
		if(!elt){
			break;
		}
		elt->getvalue(_name);
		elt=_gapp->classMgr()->NthElement(chld,1,"version");
		if(!elt){
			break;
		}
		elt->getvalue(_vers);
		if(strlen(_vers)==0){
			strcpy(_vers,"3.0.0");
		}
		
// Globals
_tm_("Globals");
		chld=_gapp->classMgr()->NthElement(_root,1,"globals");
		if(!chld){
			break;
		}
		
		elt=_gapp->classMgr()->NthElement(chld,1,"classfield");
		if(!elt){
			break;
		}
		elt->getvalue(val);
		_fld=_tp->fields()->get_index(val);
		if(_fld==0){
			_fld=kOBJ_SubType_;
		}
		if(_fld!=kOBJ_SubType_){
			stl_free();
			stl_alloc();
		}
		
		elt=_gapp->classMgr()->NthElement(chld,1,"scaleref");
		if(!elt){
			break;
		}
		elt->getvalue(val);
		_sref=matof(val);
		elt=_gapp->classMgr()->NthElement(chld,1,"unitcoef");
		if(!elt){
			break;
		}
		elt->getvalue(val);
		_coef=matof(val);
		elt=_gapp->classMgr()->NthElement(chld,1,"sort");
		if(!elt){
			break;
		}
		elt->getvalue(val);
		_sort=atoi(val);
		elt=_gapp->classMgr()->NthElement(chld,1,"passcount");
		if(!elt){
			break;
		}
		elt->getvalue(val);
		_pssmax=atoi(val);
		
// Condition		
_tm_("Condition");
		chld=_gapp->classMgr()->NthElement(_root,1,"condition");
		if(!chld){
			break;
		}
		if(chld->countelements()>0){
			elt=chld->getelement(1);
			elt->getclassname(val);
			for(i=1;i<=nsvdef_op_max;i++){
				if(!strcmp(val,nsvdef_op_list[i])){
					chld=elt;
					if(chld->countelements()==2){
						elt=chld->getelement(1);
						elt->getvalue(val);
						_cfld=_tp->fields()->get_index(val);
						if(_cfld){
							elt=chld->getelement(2);
							elt->getvalue(_cval);
						}
					}
					else{
						_cfld=0;
					}
					break;
				}
			}
			if(i==nsvdef_op_max+1){
				_cfld=0;
			}
			else{
				_cop=i;
			}
		}
		else{
			_cfld=0;
		}
_tm_("_cop="+_cop);
		
// StyleRuns
_tm_("StyleRuns");
// Load des styles et init du flag cmyk
		for(int i=1;i<=_styles.count();i++){
			_styles.get(i,&stl);
			stl->load(_root);
			if(_cmyk==false){
				_cmyk=(stl->_cc==5);
			}
		}
// Remise de tous les styles sur la même colorimétrie
		for(int i=1;i<=_styles.count();i++){
			_styles.get(i,&stl);
			stl->_cc=(_cmyk)?5:4;
		}
		
        b=true;
        
		break;
	}
	
	if(made){
		_gapp->classMgr()->ReleaseXMLInstance(_root);
		_root=NULL;
	}
	
	return(b);
}
Beispiel #5
0
#include "util.h"
#include "export.h"
#include "bsp_mesh.h"

stl_object *stl_from_polys(klist_t(poly) *polygons) {
	stl_object *stl = stl_alloc(NULL, polygons->size);

	kliter_t(poly) *iter = kl_begin(polygons);
	stl_facet *facet = stl->facets;
	poly_t *poly = NULL;
	for(; iter != kl_end(polygons); iter = kl_next(iter), facet++) {
		poly = kl_val(iter);
		check(poly_vertex_count(poly) == 3, "Polygon is not a triangle.");
		memcpy(facet->normal, poly->normal, sizeof(float3));
		memcpy(facet->vertices, poly->vertices, sizeof(facet->vertices));
	}

	return stl;
error:
	if(stl) stl_free(stl);
	return NULL;
}

stl_object *bsp_to_stl(bsp_node_t *tree) {
	stl_object *stl = NULL;
	klist_t(poly) *polys = NULL;

	polys = bsp_to_polygons(tree, 1, NULL);
	check(polys != NULL, "Failed to generate polygons from bsp_node_t(%p)", tree);

	stl = stl_from_polys(polys);