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); }
#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);