34 #ifndef ANA_SURFACE_SURFACE_D_H 35 #define ANA_SURFACE_SURFACE_D_H 49 #include <qtranslator.h> 54 template <
int D>
inline 63 if( surf.
normal().empty() )
68 carto::Object cnorm = mat->getProperty(
"shader_color_normals" );
69 if( cnorm->getScalar() )
71 carto::Object nisd = mat->getProperty(
"normal_is_direction" );
72 if( nisd->getScalar() )
74 std::cout <<
"normal_is_direction ON\n";
75 std::vector<AimsVector<float, 3> > *dirs
77 std::cout <<
"generate dirs: " << dirs->size() << std::endl;
98 :
AGLObject(), _surface( 0 ), _planar( false )
100 _type = AObject::TRIANG;
115 return AGLObject::glMakeBodyGLL(viewState, glList);
153 unsigned t = (unsigned) ( time / voxelSize()[3] );
156 if( is == _surface->end() )
158 if( is != _surface->begin() )
161 return( &(*is).second );
171 unsigned t = (unsigned) ( time / voxelSize()[3] );
173 if( _surface->empty() )
174 return( &(*_surface)[t] );
178 if( is == _surface->end() )
180 if( is != _surface->begin() )
183 return( &(*is).second );
194 const std::vector<Point3df> &
norm = _surface->normal();
195 std::vector<Point3df>::size_type i, n = norm.size();
196 if( n < _surface->vertex().size() )
197 _surface->updateNormals();
201 const float eps = 1e-5;
204 if( fabs( norm[i][0] - nref[0] ) > eps
205 || fabs( norm[i][1] - nref[1] ) > eps
206 || fabs( norm[i][2] - nref[2] ) > eps )
218 if( !_surface || _surface->size() == 0 )
220 return( voxelSize()[3] * (*_surface->rbegin()).first );
227 if( !_surface || _surface->size() == 0 )
229 return( voxelSize()[3] * (*_surface->begin()).first );
236 bool hasold = _surface.get() != 0;
240 _completeMeshDirections( *surf );
241 if( D == 2 && !_surface->normal().empty() )
243 GetMaterial().setRenderProperty( Material::UseShader, 1 );
244 GetMaterial().setRenderProperty( Material::NormalIsDirection, 1 );
249 carto::Object omat = _surface->header().getProperty(
"material" );
257 glSetChanged( glGEOMETRY );
267 bool hasold = _surface.get() != 0;
269 _surface.reset( surf );
271 _completeMeshDirections( *surf );
272 if( D == 2 && !_surface->normal().empty() )
274 GetMaterial().setRenderProperty( Material::UseShader, 1 );
275 GetMaterial().setRenderProperty( Material::NormalIsDirection, 1 );
280 carto::Object omat = _surface->header().getProperty(
"material" );
288 glSetChanged( glGEOMETRY );
302 return surf->
vertex().size();
313 return &surf->
vertex()[0][0];
324 return surf->
normal().size();
335 const std::vector<Point3df> & n = surf->
normal();
336 if( n.size() < surf->
vertex().size() )
349 return( (GLuint *) &surf->
polygon()[0][0] );
360 return( surf->
polygon().size() );
367 static Tree* _optionTree = 0;
372 _optionTree =
new Tree(
true,
"option tree" );
373 t =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
"File" ) );
375 t2 =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
"Reload" ) );
376 t2->setProperty(
"callback", &ObjectActions::fileReload );
378 t2 =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
"Save" ) );
379 t2->setProperty(
"callback", &ObjectActions::saveStatic );
381 t2 =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
383 t2->setProperty(
"callback", &ObjectActions::renameObject );
386 QT_TRANSLATE_NOOP(
"QSelectMenu",
387 "Create generated 1D texture" ) );
388 t2->setProperty(
"callback", &ObjectActions::generateTexture1D );
391 QT_TRANSLATE_NOOP(
"QSelectMenu",
392 "Create generated 2D texture" ) );
393 t2->setProperty(
"callback", &ObjectActions::generateTexture2D );
396 t =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
"Color" ) );
398 t2 =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
"Material" ) );
399 t2->setProperty(
"callback", &ObjectActions::colorMaterial );
401 t2 =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
"Rendering" ) );
402 t2->setProperty(
"callback", &ObjectActions::colorRendering);
404 t =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
407 t2 =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
"Load" ) );
408 t2->setProperty(
"callback", &ObjectActions::referentialLoad );
410 t2 =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
411 "Load information from file header") );
412 t2->setProperty(
"callback", &ObjectActions::setAutomaticReferential );
414 t =
new Tree(
true, QT_TRANSLATE_NOOP(
"QSelectMenu",
"Geometry" ) );
417 QT_TRANSLATE_NOOP(
"QSelectMenu",
418 "Invert polygon orientation" ) );
419 t2->setProperty(
"callback", &invertPolygonsStatic );
421 setObjectMenu( objectFullTypeName(),
425 return AObject::optionTree();
444 storeHeaderOptions();
448 catch( std::exception & e )
450 std::cerr << e.what() <<
"\nsave aborted\n";
462 if( !reader.
read( *obj ) )
473 std::set<AObject *>::const_iterator io, fo=obj.end();
475 for( io=obj.begin(); io!=fo; ++io )
484 glSetChanged( glGEOMETRY );
486 notifyObservers(
this );
492 std::vector<float> & bmax )
const 499 Point3df bminp = _surface->minimum();
500 Point3df bmaxp = _surface->maximum();
501 if( bminp ==
Point3df( 1e38, 1e38, 1e38 )
502 && bmaxp ==
Point3df( -1e38, -1e38, -1e38) )
515 if( _surface->empty() )
522 float timestep = voxelSize()[3];
523 bmin[3] = _surface->begin()->first * timestep;
524 bmax[3] = _surface->rbegin()->first * timestep;
536 float ts = voxelSize()[3];
537 unsigned t = (unsigned) ( time / ts );
540 if( is == _surface->end() )
541 is = _surface->begin();
542 return( is->first * ts );
549 AGLObject::notifyObservers( arg );
550 glSetChanged( glGEOMETRY,
false );
593 glSetChanged( glGEOMETRY );
void set(const carto::GenericObject &)
static std::vector< Point3df > * lineDirections(const AimsTimeSurface< 2, Void > &)
ASurface(const char *filename="")
static void invertSurfacePolygons(AimsTimeSurface< D, T > &surface)
ViewState holds information about how a view wants to see an object.
virtual bool getProperty(const std::string &, Object &) const
Base Anatomist object (abstract)
std::list< carto::rc_ptr< GLItem > > PrimList
const std::vector< Point3df > & vertex() const
virtual bool render(PrimList &, const ViewState &)
rendering (generally 2D or 3D using OpenGL).
std::map< int, AimsSurface< D, T > >::iterator iterator
This class has to be rewritten, it's really really a shame.......
const std::vector< Point3df > & normal() const
void setFileName(const std::string &filename)
const std::vector< AimsVector< uint, D > > & polygon() const
std::vector< float > timedims
void setSurface(carto::rc_ptr< TimeSurfaceType > surf)
void insert(BaseTree *child, int index=-1)
AIMSDATA_API float norm(const Tensor &thing)
virtual bool read(T &obj, int border=0, const std::string *format=0, int frame=-1)
std::map< int, AimsSurface< D, T > >::const_iterator const_iterator
const aims::PythonHeader & header() const
const std::vector< Point3df > & normal() const