Commit Graph

340 Commits

Author SHA1 Message Date
Paolo Cignoni dc842fd034 Corrected a Bug in the VFOrderedStarFF (it could return twice the same face in when asked on boundary faces)
Added FFCollapseEdge 
Added managment of faux edges in swapedges
2013-10-09 08:48:10 +00:00
Paolo Cignoni df97ef0c36 Added zero initialization to quality component. (and corrected a small bug in the ocf quality component) 2013-09-24 13:55:23 +00:00
Paolo Cignoni 344de42c2e removed the return type from the ++ operator of the vfi iterator 2013-09-10 10:54:40 +00:00
Paolo Cignoni 9ad68bc573 Added DihedralAngleRad that computes the signed dihedral angle between the normals of two adjacent faces 2013-06-24 07:55:54 +00:00
Paolo Cignoni f3337dcb7c updated polygon component to the cP/P behavior for access to elements 2013-03-20 08:56:20 +00:00
Paolo Cignoni 4665f36e40 Improved component documentation. Added IsVFInitialized, VFClear function for VF component. Clarified the difference between null and uninitialized for a VF component. 2013-03-13 14:02:03 +00:00
Nico Pietroni e5ed268b6a added function cVFi 2013-02-19 13:56:37 +00:00
Nico Pietroni 60bca978f7 added function VVExtendedStarVF 2013-02-19 13:55:15 +00:00
Paolo Cignoni 8111bcda24 Corrected a very nasty bug introduced in Revision 4782 that reorganized ocf face component and added a standard interface for query the availabiilty of data:
bool FaceType::IsXXXAvaialble() ,must be defined in the XXX ocf type and not in the info type otherwise it would be defined also for non ocf components.
2013-02-06 11:22:11 +00:00
Paolo Cignoni b48b0e568c added initialization of mark component to zero. So all the element it is sure that are unitialized after the first unmarkall. 2012-12-21 15:33:18 +00:00
Paolo Cignoni 5dcf1aec47 forgot a IsCurvatureDirEnabled() 2012-12-17 15:58:16 +00:00
Paolo Cignoni 08aeee8716 Reorganized ocf face component and added a standard interface for query the availabiilty of data:
now we have 
static bool FaceType::HasXXX() // statically says if a certain type is present
bool FaceType::IsXXXAvaialble() // NON STATIC (always true for non ocf objects)
So now ImportData works for face ocf component.
2012-12-17 15:02:34 +00:00
Nico Pietroni fb9a9bbac6 added function FFExtendedStarFF 2012-12-12 16:04:26 +00:00
Paolo Cignoni 9a1704379f Improved documentation to include stars 2012-12-10 12:40:21 +00:00
Paolo Cignoni 3b466514b3 Added Standard exception throwing functions to claim requirements in the mesh algorithmic functions (Te Deum!)
for example, now at the beginning of a function requiring FFAdjacency you should just write:

RequireFFAdjacency(mesh); 

No more assert please.
2012-12-06 10:34:08 +00:00
ganovelli 755eb7dda7 added HasNormal to EmptyCore 2012-12-03 17:47:15 +00:00
Paolo Cignoni ab49388781 Added a VFDetach for face. 2012-11-27 14:03:24 +00:00
Paolo Cignoni 8b4d04be7a Added a bunch of 'c' to component members to clarify constant access 2012-11-15 19:11:28 +00:00
Paolo Cignoni 5c266a7ccb HEAVY CHANGE:
The vertex and face component (natural and optional) have been cleaned and reordered.
Particular care has been devoted to have common behaviour in the import, const access, and so. 
If you get compilation errors probably it is due to the fact that if you really need constant access to a member you have to use the "c" prefixed member (e.g. if you access to normal of a constant vertex you should use the cN() member.
2012-11-15 19:04:08 +00:00
Paolo Cignoni f2be4a4d95 mismatch in the VertexVectorHasVFAdjacency and FaceVectorHasVFAdjacency names 2012-11-14 12:37:18 +00:00
Nico Pietroni 3864a934da corrected 1 call of VFStarVF 2012-11-12 12:59:50 +00:00
Paolo Cignoni feb77d945a Significant changes of interface of VFOrderedStarFF (that substitute two very similar VFOrderedStarFF_VF)
Added EFStarFF
2012-11-10 16:53:10 +00:00
Paolo Cignoni 1a8c1dafe2 VFlip() and FFlip are const members but there is no need of returning a pointer to a Const element 2012-11-09 11:11:50 +00:00
Paolo Cignoni 26ee5e5246 const access to flags -> cFlags() 2012-11-07 22:53:41 +00:00
Paolo Cignoni 9f39a0c7cb added cflags to the emtpycore face component 2012-11-07 15:51:51 +00:00
Paolo Cignoni 1046deb107 Corrected bug recently introduced due to small difference in the signature of the flags functions... 2012-11-07 15:42:14 +00:00
Paolo Cignoni 7bc4277fcd Cleaned up documentation of components (new doxygroup for them, written something for most of them...).
Cleaned Edge components (Added adjacency stuff, implemented the single emptycore)
2012-11-07 01:24:45 +00:00
Paolo Cignoni 578ea5ae6b Added control in the creation of a pos that you pass a consistent triple 2012-10-26 12:39:58 +00:00
Paolo Cignoni d784bebe07 Added guards to avoid useless (and sometime dangerous) inclusion of internal file of the vcglib 2012-10-25 21:29:10 +00:00
Paolo Cignoni cfda5a3eca Removed all the UberXXX members from the various components. No more needed since many years. Still there just because we are quite lazy... 2012-10-25 13:07:25 +00:00
Paolo Cignoni b045c9b992 Removed old useless files. Why do we kept them? 2012-10-25 13:01:34 +00:00
Paolo Cignoni b1a1b36260 Re added the empty component. It can be useful sometimes... 2012-10-19 11:45:51 +00:00
Paolo Cignoni fb60087ee4 component_ocf are now part of the standard inclusion sequence of complex.h
No more need of including them.
It was needed to avoid the issue of wrong inclusion order that could trigger a failure in the partial specialization of the reflection functions that should say if a component is present or not...
2012-10-15 09:17:48 +00:00
Nico Pietroni 8d4bdc467e added function VFExtendedStarVF 2012-10-14 09:24:49 +00:00
Paolo Cignoni a7dc9a853e Better naming for the EdgePlane face component for fast closest query 2012-10-04 16:17:31 +00:00
Paolo Cignoni d97f08e23e Better naming for the EdgePlane face component for fast closest query 2012-10-04 16:15:24 +00:00
Paolo Cignoni 2577210a54 **** SIGNIFICANT CHANGES *****
- Cleaned up include order: Now you only need to include <vcg/complex/complex.h> (no more vertex/base.h etc) 
- Added official VN() EN() FN() const members for knowing number of vertexes etc...
- Added exceptions (at last!)
    Now instead of:
       assert(HasPerVertexNormal(m)) 
    you should write:
      if(!HasPerFaceNormal(m)) throw vcg::MissingComponentException();
2012-10-04 11:10:25 +00:00
Nico Pietroni dcb0d036ff added FindSharedFaces and VFOrderedStarVF functions 2012-09-22 12:54:30 +00:00
Nico Pietroni be2d3613b9 added one more call of VFStarVF that returns also the indexes of vertices as seen from the faces 2012-09-03 15:57:52 +00:00
Paolo Cignoni 2aa57698ad better uniform naming for detach attach functions (now there is FFAttach, FFAttachManifold, FFDetach, etc)
changed SharedVertex into FindSharedVertex
added FindSharedEdge
2012-07-27 12:59:27 +00:00
Paolo Cignoni 45b0deb7eb Important Change: ** LastBitFlag ** now is named ** FirstUnusedBitFlag **
Corrected the name of the function allocating a user bit among the flags of the simplexes. 
Changed in ALL the simplexes (vertex, edge, face, etc) and updating functions. 
Note that the LastBitFlag should never be used by common users...
2012-07-18 09:37:32 +00:00
Paolo Cignoni 7ffb878913 SIGNIFICANT CHANGE
About the point to mesh distance functionalities
Now the two different 'path' for this distance computation (with or without the precomputation of planes and edges for triangular faces) are well distinct and with different names:
PointDistanceEP and PointDistanceBase

See the sample/trimesh_closest sample for more details
2012-07-06 15:24:04 +00:00
Paolo Cignoni 24110c34b2 added an Empty Component for the edgePlane component. 2012-07-06 05:07:25 +00:00
Paolo Cignoni ea701b39b3 Restructured Face component in order to follow the unique emptycore approach that avoid an endless derivation chain in the type definition 2012-04-04 10:04:46 +00:00
Paolo Cignoni 8a631d48c1 Corrected a significant bug in the reflection types for ocf components.
Changed the basic reflection mechanism: Instead of having a function templates over all the four containers now we template over Trimesh and we rely on a second function templated on face/vert that wants a vector<face> ; this second function only is eventually overloaded by another function that needs a vector_ocf of faces. 

That is Before we had:
- in complex.h

template < class  CType0, class CType1, class CType2 , class CType3>
bool HasPerFaceVFAdjacency   (const TriMesh < CType0, CType1, CType2, CType3> & /*m*/) {return TriMesh < CType0 , CType1, CType2, CType3>::FaceContainer::value_type::HasVFAdjacency();}

- in the component_ocf.h

template < class VertContainerType, class FaceType, class Container1, class Container2  >
		bool HasPerFaceVFAdjacency (const TriMesh < VertContainerType , face::vector_ocf< FaceType >, Container1, Container2 > & m)
	{
	  if(FaceType::HasVFAdjacencyOcf()) return m.face.IsVFAdjacencyEnabled();
	  else return FaceType::FaceType::HasVFAdjacency();
	}


While now we have:
- in complex.h

template < class FaceType  > bool   FaceVectorHasPerFaceVFAdjacency     (const std::vector<FaceType  > &) {  return FaceType::HasVFAdjacency(); }
template < class TriMeshType> bool   HasPerFaceVFAdjacency     (const TriMeshType &m) { return tri::FaceVectorHasPerFaceVFAdjacency  (m.vert); }

- and in component_ocf.h

template < class FaceType >
  bool FaceVectorHasPerFaceVFAdjacency(const face::vector_ocf<FaceType> &fv)
  {
    if(FaceType::HasVFAdjacencyOcf()) return fv.IsVFAdjacencyEnabled();
    else return FaceType::HasVFAdjacency();
  }
2012-03-31 01:16:58 +00:00
Nico Pietroni a53447ab1c added VFOrderedStarVF_FF function 2012-03-29 16:36:01 +00:00
ganovelli bbcfbfabc2 added CurvatureDir to Face 2012-03-28 12:39:22 +00:00
Nico Pietroni 4f166fbd95 added Crease Flag access functions 2012-03-16 13:49:04 +00:00
Paolo Cignoni 57bd611892 added assert in the VFIterator to handle uninitialized topology. 2012-03-14 16:02:30 +00:00
Paolo Cignoni f58551601a CHANGE to the VERY USED PointDistanceBase, the basic functor used to find the closest point to a face in all the grids.
It has a bug that could return a nan in some degnerate case where an almost null face has different vertices but the squared distance between them could be zero. 
Now it should handle also these cases.
2012-03-14 15:59:42 +00:00
Paolo Cignoni c32db09276 Changed the name of the Distance from point to plane
from DistancePointPlane
to     SignedDistancePointPlane
to underline the fact that it is SIGNED!!!
2012-01-23 06:47:31 +00:00
Paolo Cignoni f4cf3b9221 Changed the name of the Distance from point to plane
from DistancePointPlane
to     SignedDistancePointPlane
to underline the fact that it is SIGNED!!!
2012-01-18 11:44:42 +00:00
Paolo Cignoni e4b114ea55 Added CheckFlipEdgeNormal that check if a flip modify the involved normals more than a given threshold. 2011-11-30 18:04:53 +00:00
Marco Callieri 7616955d64 changed function call from Distance to DistancePlanePoint 2011-11-21 13:20:45 +00:00
Paolo Cignoni 8f7aab147d changed BASIC VERSION of the Point-face distance that does not require the EdgePlane Additional data.
now it does not require any more the dreaded face bit flags...
2011-11-21 08:56:52 +00:00
ganovelli cedf5fb284 bug fixing:
- mixup of nomes Edge and Face on the components.
- possibly use of empty vector in import_obj.h
Thanks to nagaokagetora for showing them
2011-10-25 10:03:10 +00:00
Paolo Cignoni 2fe129645b Rolled back 2011-10-05 15:04:40 +00:00
ganovelli 68fc8ae865 removed Neigh functions 2011-06-15 13:02:20 +00:00
ganovelli a815890b15 minimal addition to support neighboorhood relation between vertices
and between faces
2011-06-14 16:18:34 +00:00
Nico Pietroni 052e774fbc added Quality3 component 2011-05-25 16:28:18 +00:00
granzuglia 451e3ec084 added missing include file 2011-04-13 13:02:41 +00:00
granzuglia 6d1e0fca7d from f.N() = -> f.N().Import in order to avoid compile errors when the defined mesh-type presents different scalar types for vertex-coordinates and vertex-normal 2011-04-12 08:26:15 +00:00
Paolo Cignoni 214904b312 Ongoing corrections of include paths to comply the new folder arrangement 2011-04-03 22:50:59 +00:00
Paolo Cignoni 2d218e768a commented some code 2011-03-22 11:53:48 +00:00
Paolo Cignoni 90ee3c4a71 added NumberOfFacesOnEdge function on a pos 2011-03-22 11:52:19 +00:00
Paolo Cignoni ec825ed246 harmless gcc warnings 2011-02-17 11:39:57 +00:00
ganovelli d505581af9 bug fixing in vector_ocf::reserve for the case of empty vector 2010-11-11 09:33:35 +00:00
Nico Pietroni 7332494ee2 line 331 called the correct distance function between segment-point in distance3.h 2010-10-15 15:19:12 +00:00
ganovelli 3bcc518722 replaced ImportLocal with ImportData (it was left behind) 2010-10-15 09:24:51 +00:00
Paolo Cignoni f83dc8b993 rewrote checkflip edge. 2010-10-01 20:27:30 +00:00
Paolo Cignoni 349e9869cf Updated many vcg files to do not use anymore the vcg::Max(a,b) and vcg::Min(a,b). Use the std version instead. 2010-09-21 22:09:13 +00:00
Paolo Cignoni 8451875482 slight change in the PointDistance. Now it checks with an assert in the ifthenelse chain that it chooses the best projection direction and removed a warning. 2010-07-14 08:09:28 +00:00
ganovelli eb3f1a97fc added HasPerVertexVFAdjacency and HasPerFaceVFAdjacency. Removed
generic HasVFAdjacency which made the logical AND of the two and updated the 
relative calls.
2010-06-24 12:35:37 +00:00
ganovelli 585f0462e8 ImportLocal to ImportData. Adjacencies are no more handle by ImportData, but
by speficic functions in append.h (ImportPerxxxAdj(..))
2010-06-16 16:24:26 +00:00
ganovelli de851eb29e inclusion of alltypes.h 2010-05-19 17:16:58 +00:00
Paolo Cignoni 7bd30d3ca0 fixed wrong pointer type in FHAdj class 2010-04-26 14:54:44 +00:00
Paolo Cignoni 3ee9667060 added two helper functions used for the self intersection tests 2010-04-20 00:56:08 +00:00
matteodelle 8b293069af Corrected an error in the template def. of TriMesh 2010-03-29 08:07:22 +00:00
ganovelli 261ff53ab1 [introduction of half edges as alternative representation]
No modification should be necessary for the existing code.

most relevant changes:

creation of folder:
vcg/connectors  
vcg/connectors/hedge.h
vcg/connectors/hedge_component.h

addition to the container of half edges to the trimesh:
HEdgeContainer hedge; // container
int hn;               // number of half edges

addition of 
vcg/trimesh/update/halfedge_indexed.h
which contains:
- the functions to compute the half edge representation from the indexed  and vivecersa
- the functions to add or remove an half edge
2010-03-25 16:52:18 +00:00
ganovelli a2341076c1 added typedef of ScalarType 2010-03-19 17:20:52 +00:00
ganovelli 21dd8aa179 Simplified reflection typedefs:
added type traits to support the mod below:

[ Changes in definition of  TriMesh: PART II ]

Note: No changes to existing code need be the done, this mod
should be fully backward compatible

Old way to define a TriMesh ==============
struct MyMesh: public vcg::tri::TriMesh< vector<MyVertex> , vector <MyFace> >{};

new  ways to define a TriMesh ==============

struct MyMesh: public vcg::tri::TriMesh< CONT1 >{};
struct MyMesh: public vcg::tri::TriMesh< CONT1 , CONT2>{};
struct MyMesh: public vcg::tri::TriMesh< CONT1 , CONT2, CONT3>{};

where CONT[i] can be vector< [MyVertex | MyEdge | MyFace ] > 
(the order is unimportant)
2010-03-19 17:19:51 +00:00
Paolo Cignoni cf872a327c Doh! Forgot a const in the getbbox of Face Base 2010-03-18 10:28:10 +00:00
Paolo Cignoni 63e21f15cb Disambiguated the origin of the ScalarType and CoordType in the simplex class. Now it derives from the type specified by the vertexRef component for the faces and from the Coord component for the vertexes. To be sure the ScalarType and CoordTypes are initialized to weird point3<bool> and char just to detect easisly when the wrong types shallow... 2010-03-18 10:02:32 +00:00
ganovelli c40a6c3d97 [ Changes in definition of TriMesh: PART I ]
Note for the developers: the change to make to existing projects is very little 
but strictly necessary to compile. This change IS NOT backward compliant.


==== OLD ==== way to define a TriMesh:

// forward declarations
class MyVertex;
class MyEdge;
class MyFace;

class MyVertex: public VertexSimp2 < MyVertex, MyEdge, MyFace, vertex::Coord3f,...other components>{};
class MyFace: public FaceSimp2 < MyVertex, MyEdge, MyFace, face::VertexRef,...other components>{};
class MyMesh: public TriMesh<vector<MyVertex>,vector<MyFace> >{};


==== NEW ==== way to define a TriMesh:
// forward declarations
class MyVertex;
class MyEdge;
class MyFace;

// declaration of which types is used as VertexType, which type is used as FaceType and so on...
class MyUsedTypes: public vcg::UsedType < vcg::Use<MyVertex>::AsVertexType,
                                          vcg::Use<MyFace>::AsFaceType>{};

class MyVertex: public Vertex < MyUsedTypes, vertex::Coord3f,...other components>{};
class MyFace: public Face < MyUsedTypes, face::VertexRef,...other components>{};
class MyMesh: public TriMesh<vector<MyVertex>,vector<MyFace> >{};

                                 
===== classes introduced          
[vcg::UsedType] : it is a class containing all the types that must be passed to the definition of Vertex, Face, Edge... This
class replaces the list of typenames to pass as first templates and the need to specify the maximal simplicial. So 

<MyVertex, MyEdge, MyFace  becomes <MyUsedTypes<

and 

VertexSimp2 becomes Vertex

[vcg::Use] : an auxiliary class to give a simple way to specify the role of a type

Note 2: the order of templates parameters to vcg::UsedTypes is unimportant, e.g:

class MyUsedTypes: public vcg::UsedType <vcg::Use<MyVertex>::AsVertexType,
                                         vcg::Use<MyEdge>::AsEdgeType,
                                         vcg::Use<MyFace>::AsFaceType>{};

is the same as:
class MyUsedTypes: public vcg::UsedType <vcg::Use<MyFace>::AsFaceType,
                                         vcg::Use<MyEdge>::AsEdgeType,
                                         vcg::Use<MyVertex>::AsVertexType>{};

Note 3: you only need to specify the type  you use. If you do not have edges you do not need 
to include vcg::Use<MyEdge>::AsEdgeType in the template list of UsedTypes.
==== the Part II will be a tiny change to the class TriMesh it self.
2010-03-15 10:42:52 +00:00
Paolo Cignoni 5ef6d30d37 Added a test to check in the point to face distance computation to manage the case of degenerated faces. Now correctly resort to distance point to segment. 2010-03-03 00:35:20 +00:00
Paolo Cignoni 18c92582d4 Cleaned up the CompactFaceVector and the CompactVertexVector, Now they correctly manage existing FV and FF topology by preserving them (if they are initialized to something meaningful). 2010-02-22 17:37:51 +00:00
Nico Pietroni 98eba3ef33 corrected minor compiling issues 2010-02-22 01:03:23 +00:00
Paolo Cignoni 446400f6fc Now the compactvertex and compactface funtions use the importlocal chain so we are sure that all the meaningful data is correctly copied (otherwise ocf stuff will not be copied) On the other hand when using ImportLocal we do not copy pointer based stuff like adjacency and *vertex pointers* that must be terefore copied by hand... 2010-02-19 00:21:26 +00:00
Paolo Cignoni 3b152298cc added runtime assert to prevent dangerous simplex to simplex assignment in the case of OCF optional attributes. 2010-02-11 00:14:35 +00:00
Paolo Cignoni a26b0e34f9 Cleaned up Detach functions and added a special, simpler version of Detatch for 2Manifold cases 2010-01-03 02:01:45 +00:00
Paolo Cignoni 7030dbb151 small change. The FFp<i> shortcuts seems no more used... 2009-12-07 08:31:01 +00:00
Marco Di Benedetto 5b076c064e added public: to WedgeColor* and Color Name(). 2009-12-01 17:35:42 +00:00
Paolo Cignoni 302a7725fa removed harmless warnings 2009-11-17 23:34:46 +00:00
Paolo Cignoni 70ae4d5c50 made public the self inspection member 'name' of the components. I do not know why it was not public in that case. 2009-11-05 22:35:56 +00:00
Paolo Cignoni 5ef3e2ca50 added a missing const cQ() for ocf face component 2009-11-01 09:51:53 +00:00
Nico Pietroni ea6553f1d5 corrected funtion NormalAbs::ImportLocal 2009-10-14 14:25:00 +00:00
ganovelli 5c0f228a4d added few missing Has*Ocf 2009-10-08 15:46:31 +00:00
Marco Di Benedetto 6fb6cfbb24 added const to method. 2009-09-03 14:48:22 +00:00
Marco Di Benedetto ae09d558f0 added const to method. 2009-09-03 14:48:08 +00:00
Paolo Cignoni 415228fcd4 Added some missing importLocal functions 2009-08-30 13:54:06 +00:00