MCPcopy Create free account
hub / github.com/Kitware/VTK / InsertQuadInHash

Method InsertQuadInHash

Filters/Geometry/vtkDataSetRegionSurfaceFilter.cxx:875–960  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

873
874//------------------------------------------------------------------------------
875void vtkDataSetRegionSurfaceFilter::InsertQuadInHash(
876 vtkIdType a, vtkIdType b, vtkIdType c, vtkIdType d, vtkIdType sourceId, vtkIdType faceId)
877{
878
879 vtkIdType tmp;
880 vtkFastGeomQuad *quad, **end;
881
882 // Reorder to get smallest id in a.
883 if (b < a && b < c && b < d)
884 {
885 tmp = a;
886 a = b;
887 b = c;
888 c = d;
889 d = tmp;
890 }
891 else if (c < a && c < b && c < d)
892 {
893 tmp = a;
894 a = c;
895 c = tmp;
896 tmp = b;
897 b = d;
898 d = tmp;
899 }
900 else if (d < a && d < b && d < c)
901 {
902 tmp = a;
903 a = d;
904 d = c;
905 c = b;
906 b = tmp;
907 }
908
909 // Look for existing quad in the hash;
910 end = this->QuadHash + a;
911 quad = *end;
912 vtkIdType regionId = -1;
913 if (this->RegionArray)
914 {
915 regionId = this->RegionArray->GetValue(sourceId);
916 }
917 while (quad)
918 {
919 end = &(quad->Next);
920 const vtkIdType* quadsRegionId = (quad->ptArray + quad->numPts);
921 // a has to match in this bin.
922 // c should be independent of point order.
923 if (quad->numPts == 4 && c == quad->ptArray[2])
924 {
925 // Check boh orders for b and d.
926 if (((b == quad->ptArray[1] && d == quad->ptArray[3]) ||
927 (b == quad->ptArray[3] && d == quad->ptArray[1])) &&
928 (regionId == -1 || regionId == *quadsRegionId))
929
930 {
931 // We have a match.
932 quad->SourceId = -1;

Callers 1

Calls 2

NewFastGeomQuadMethod · 0.80
GetValueMethod · 0.45

Tested by

no test coverage detected