LCOV - code coverage report
Current view: top level - geom/OCC - OCCAttribSet.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 267 288 92.7 %
Date: 2020-06-30 00:58:45 Functions: 10 12 83.3 %
Branches: 494 886 55.8 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : OCCAttribSet.cpp
       3                 :            : //
       4                 :            : // Purpose       : Common attribute functionality for MBG
       5                 :            : //
       6                 :            : // Special Notes : 
       7                 :            : //
       8                 :            : // Creator       : Jason Kraftcheck
       9                 :            : //
      10                 :            : // Creation Date : 03/01/03
      11                 :            : //-------------------------------------------------------------------------
      12                 :            : 
      13                 :            : #include "OCCAttribSet.hpp"
      14                 :            : //#include "OCCAttrib.hpp"
      15                 :            : #include "OCCQueryEngine.hpp"
      16                 :            : #include "CubitSimpleAttrib.hpp"
      17                 :            : #include "CubitFileIOWrapper.hpp"
      18                 :            : 
      19                 :            : #ifndef OCC_VERSION_MINOR
      20                 :            : #include "Standard_Version.hxx"
      21                 :            : #endif
      22                 :            : 
      23                 :            : #if OCC_VERSION_MINOR < 5
      24                 :            :   #include "TDataStd_Shape.hxx"
      25                 :            :   typedef TDataStd_Shape TDataXtd_Shape;
      26                 :            :   typedef Handle_TDataStd_Shape Handle_TDataXtd_Shape;
      27                 :            : #else
      28                 :            :   #include "TDataXtd_Shape.hxx"
      29                 :            : #endif
      30                 :            : 
      31                 :            : #include "TDF_Label.hxx"
      32                 :            : #include "TopTools_DataMapOfShapeInteger.hxx"
      33                 :            : #include "TCollection_ExtendedString.hxx"
      34                 :            : #include "Handle_TDataStd_Name.hxx"
      35                 :            : #include "Handle_TDataStd_ExtStringArray.hxx"
      36                 :            : #include "Handle_TDataStd_RealArray.hxx"
      37                 :            : #include "Handle_TDataStd_IntegerArray.hxx"
      38                 :            : #include "TDataStd_Name.hxx"
      39                 :            : #include "TDataStd_ExtStringArray.hxx"
      40                 :            : #include "TDataStd_RealArray.hxx"
      41                 :            : #include "TDataStd_IntegerArray.hxx"
      42                 :            : #include "TopoDS_Shape.hxx"
      43                 :            : #include "TDF_ChildIterator.hxx"
      44                 :            : #include <vector>
      45                 :            : typedef std::map<int, TDF_Label>::value_type labType;
      46                 :            : 
      47                 :    1407215 : void OCCAttribSet::FindShape(TopoDS_Shape& shape,
      48                 :            :                              TDF_Label& aLabel,
      49                 :            :                              CubitBoolean& found) 
      50                 :            : {
      51                 :    1407215 :   found = CUBIT_FALSE;
      52 [ +  - ][ +  - ]:    1407215 :   if(!OCCQueryEngine::instance()->OCCMap->IsBound(shape))
                 [ +  + ]
      53                 :    1407215 :     return;
      54                 :            : 
      55 [ +  - ][ +  - ]:    1396192 :   int k = OCCQueryEngine::instance()->OCCMap->Find(shape);
      56                 :            :   std::map<int, TDF_Label>::iterator it = 
      57 [ +  - ][ +  - ]:    1396192 :             OCCQueryEngine::instance()->Shape_Label_Map->find(k);
      58 [ +  - ][ +  - ]:    1396192 :   if(it != OCCQueryEngine::instance()->Shape_Label_Map->end())
         [ +  - ][ +  + ]
      59                 :            :   {
      60         [ +  - ]:     261993 :     aLabel = (*it).second; 
      61                 :    1396192 :     found = CUBIT_TRUE;
      62                 :            :   }
      63                 :            : }
      64                 :            : 
      65                 :      39141 : void OCCAttribSet::append_attribute( const CubitSimpleAttrib& csa, TopoDS_Shape& shape )
      66                 :            : {
      67 [ +  - ][ -  + ]:      39141 :   if(shape.IsNull())
      68                 :      39141 :     return;
      69                 :            : 
      70                 :            :   //Add attributes on child of myLabel
      71                 :            :   //1. add shape attribute, first check to make sure there's no shape attribute
      72                 :      39141 :   CubitBoolean found = CUBIT_FALSE;
      73                 :      39141 :   int result = 1;
      74 [ +  - ][ +  - ]:      39141 :   TDF_Label aLabel, lab;
      75         [ +  - ]:      39141 :   Handle_TDataStd_Name attr_name;
      76 [ +  - ][ +  - ]:      78282 :   CubitString type = csa.string_data_list()[0];
         [ +  - ][ +  - ]
                 [ +  + ]
      77 [ +  - ][ +  - ]:      78282 :   TCollection_ExtendedString cstring( (Standard_CString)type.c_str() );
         [ +  - ][ +  + ]
      78                 :            : 
      79         [ +  - ]:      39141 :   FindShape(shape, aLabel, found);
      80                 :            : 
      81         [ +  + ]:      39141 :   if(!found)
      82                 :            :   { 
      83 [ +  - ][ +  - ]:      16566 :     aLabel = OCCQueryEngine::instance()->mainLabel.NewChild();
      84         [ +  - ]:      16566 :     Handle_TDataXtd_Shape attr_shape = TDataXtd_Shape::Set(aLabel, shape);
      85                 :            :     //aLabel.AddAttribute(attr_shape);
      86                 :            :     //test if the attribute has been attached
      87 [ +  - ][ +  - ]:      16566 :     assert(aLabel.IsAttribute(TDataXtd_Shape::GetID()));
                 [ -  + ]
      88                 :            : 
      89 [ +  - ][ +  - ]:      16566 :     if(!OCCQueryEngine::instance()->OCCMap->IsBound(shape))
                 [ +  + ]
      90                 :            :     {
      91         [ +  - ]:       6082 :       OCCQueryEngine::instance()->iTotalTBCreated++;
      92         [ +  - ]:       6082 :       int k = OCCQueryEngine::instance()->iTotalTBCreated;
      93 [ +  - ][ +  - ]:       6082 :       OCCQueryEngine::instance()->OCCMap->Bind(shape, k);
      94                 :            :     }
      95                 :            :  
      96 [ +  - ][ +  - ]:      16566 :     int k = OCCQueryEngine::instance()->OCCMap->Find(shape);
      97 [ +  - ][ +  - ]:      16566 :     OCCQueryEngine::instance()->Shape_Label_Map->insert(labType(k, aLabel));
         [ +  - ][ +  - ]
      98                 :            :   }
      99                 :            : 
     100                 :            :   //2. add type attribute , below attributes are added on child lable of myLabel
     101                 :            :   //First check if the attributes are already exist, if so, create new data.
     102                 :            :   else
     103                 :            :   {
     104         [ +  - ]:      22575 :     TCollection_ExtendedString name_string;
     105 [ +  - ][ +  - ]:      51516 :     for (TDF_ChildIterator it(aLabel,CUBIT_FALSE); it.More(); it.Next()) 
         [ +  - ][ +  + ]
     106                 :            :     {
     107         [ +  - ]:      38115 :       lab = it.Value();
     108         [ +  - ]:      38115 :       result = find_attribute(lab, csa);
     109         [ +  + ]:      38115 :       if(result != 1)
     110                 :       9174 :         break;
     111         [ +  - ]:      22575 :     }
     112                 :            :   }
     113                 :            :   //if not exist,  create new child label
     114 [ +  - ][ +  - ]:      78282 :   Handle_TDataStd_ExtStringArray attr_string;
                 [ +  + ]
     115         [ +  - ]:      39141 :   const std::vector<CubitString>& strings = csa.string_data_list();
     116         [ +  - ]:      39141 :   int size = strings.size()-1;
     117                 :            :  
     118         [ +  + ]:      39141 :   if (result == 1) 
     119                 :            :   {
     120         [ +  - ]:      29967 :     lab = aLabel.NewChild();
     121 [ +  - ][ +  - ]:      29967 :     attr_name = TDataStd_Name::Set(lab, cstring);
                 [ +  - ]
     122                 :            :     //lab.AddAttribute(attr_name);
     123 [ +  - ][ +  - ]:      29967 :     assert(lab.IsAttribute(TDataStd_Name::GetID()));
                 [ -  + ]
     124                 :            :   }
     125                 :            :      
     126         [ +  + ]:       9174 :   else if(result == 3)//nothing to do
     127                 :        326 :     return;
     128                 :            : 
     129         [ +  - ]:       8848 :   else if(result == 2) 
     130                 :            :   //adding the name strings
     131                 :            :   {
     132 [ +  - ][ +  - ]:       8848 :     lab.FindAttribute(TDataStd_ExtStringArray::GetID(), attr_string);
     133 [ +  - ][ +  - ]:      17696 :     TCollection_ExtendedString name1, name2;
                 [ +  - ]
     134 [ +  - ][ +  - ]:      17696 :     std::vector<CubitString> new_names;
     135                 :       8848 :     int length = 0;
     136 [ +  - ][ +  + ]:      19282 :     for(int j = 1; j < (int)strings.size();j++)
     137                 :            :     { 
     138 [ +  - ][ +  - ]:      10434 :       CubitString name_string = strings[j];
     139 [ +  - ][ +  - ]:      20868 :       TCollection_ExtendedString cstring(name_string.c_str(), Standard_True );
                 [ +  - ]
     140                 :      10434 :       bool dup = false;
     141 [ +  - ][ +  - ]:      10434 :       length = attr_string->Length() ;
     142                 :            : 
     143         [ +  + ]:      15568 :       for(int i = 0; i < length; i++)
     144                 :            :       {
     145 [ +  - ][ +  - ]:      14958 :         name1 = attr_string->Value(i);
                 [ +  - ]
     146                 :            :         //it could be string[0] = "volume 1", string[1] = "volume_1";
     147                 :            :     
     148 [ +  - ][ +  + ]:      14958 :         if(name1.IsEqual(cstring))
     149                 :            :         {
     150                 :       9824 :           dup = true;
     151                 :       9824 :           break;
     152                 :            :         }
     153                 :            :       }
     154         [ +  + ]:      10434 :       if(!dup) 
     155         [ +  - ]:        610 :         new_names.push_back(name_string);
     156         [ +  - ]:      10434 :     }
     157 [ +  - ][ +  + ]:       8848 :     if(new_names.size() > 0)
     158                 :            :     {
     159         [ +  - ]:        568 :       lab.ForgetAttribute(attr_string);
     160         [ +  - ]:        568 :       Handle_TDataStd_ExtStringArray attr_string_new; 
     161 [ +  - ][ +  - ]:       1136 :       attr_string_new = TDataStd_ExtStringArray::Set(lab, 0, 
     162 [ +  - ][ +  - ]:       1136 :                                        length+new_names.size()-1); 
     163 [ +  - ][ +  - ]:       1928 :       for(int i = 0; i < attr_string_new->Length(); i++)
                 [ +  + ]
     164                 :            :       {
     165         [ +  + ]:       1360 :         if (i < length)
     166 [ +  - ][ +  - ]:        750 :           attr_string_new->SetValue(i, attr_string->Value(i));
         [ +  - ][ +  - ]
     167                 :            :         else
     168                 :            :         {
     169 [ +  - ][ +  - ]:        610 :           TCollection_ExtendedString cstring(new_names[i-length].c_str(), Standard_True );
                 [ +  - ]
     170 [ +  - ][ +  - ]:        610 :           attr_string_new->SetValue(i, cstring);
                 [ +  - ]
     171                 :            :         }
     172         [ +  - ]:        568 :       }
     173                 :            :     } 
     174         [ +  - ]:      17696 :     return;
     175                 :            :   } 
     176                 :            :   //3. add string attribute
     177         [ +  + ]:      29967 :   if(size > 0)
     178                 :            :   {
     179                 :            :     //set the length of String Array .
     180 [ +  - ][ +  - ]:       3423 :     attr_string = TDataStd_ExtStringArray::Set(lab, 0, size-1);
                 [ +  - ]
     181                 :            :   }
     182 [ +  - ][ +  + ]:      34926 :   for(int i = 1; i < (int)strings.size(); i++)
     183                 :            :   {
     184 [ +  - ][ +  - ]:       4959 :     TCollection_ExtendedString cstring(strings[i].c_str(), Standard_True );
                 [ +  - ]
     185 [ +  - ][ +  - ]:       4959 :     attr_string->SetValue(i-1, cstring) ;
     186         [ +  - ]:       4959 :   }
     187                 :            :   
     188         [ +  + ]:      29967 :   if (size > 0)
     189                 :            :   {
     190                 :            :     //lab.AddAttribute(attr_string);
     191 [ +  - ][ +  - ]:       3423 :     assert(lab.IsAttribute(TDataStd_ExtStringArray::GetID()));
                 [ -  + ]
     192                 :            :   }
     193                 :            :   //4. add double attribute
     194         [ +  - ]:      29967 :   const std::vector<double>& doubles = csa.double_data_list();
     195 [ +  - ][ +  - ]:      69108 :   Handle_TDataStd_RealArray attr_double;
         [ +  - ][ +  + ]
     196         [ +  - ]:      29967 :   size = doubles.size();
     197         [ +  + ]:      29967 :   if(size > 0)
     198                 :            :   {
     199                 :            :     //set the length of double array .
     200 [ +  - ][ +  - ]:        240 :     attr_double = TDataStd_RealArray::Set(lab,0, size-1);
                 [ +  - ]
     201                 :            :   } 
     202         [ +  + ]:      30687 :   for(int i = 0; i < size; i++)
     203 [ +  - ][ +  - ]:        720 :     attr_double->SetValue(i, doubles[i]);
                 [ +  - ]
     204                 :            : 
     205         [ +  + ]:      29967 :   if(size > 0)
     206                 :            :   {
     207                 :            :     //lab.AddAttribute(attr_double);
     208 [ +  - ][ +  - ]:        240 :     assert(lab.IsAttribute(TDataStd_RealArray::GetID()));
                 [ -  + ]
     209                 :            :   }  
     210                 :            :   //5. add int attribute
     211         [ +  - ]:      29967 :   const std::vector<int>& ints = csa.int_data_list();
     212 [ +  - ][ +  - ]:      59934 :   Handle_TDataStd_IntegerArray attr_int;
     213         [ +  - ]:      29967 :   size = ints.size();
     214         [ +  + ]:      29967 :   if(size > 0)
     215                 :            :   {
     216                 :            :     //set the length of int array be 11, can be extended.
     217 [ +  - ][ +  - ]:      27375 :     attr_int = TDataStd_IntegerArray::Set(lab, 0, size-1);
                 [ +  - ]
     218                 :            :   }
     219         [ +  + ]:     110714 :   for(int i = 0; i < size; i++)
     220 [ +  - ][ +  - ]:      80747 :     attr_int->SetValue(i, ints[i]);
                 [ +  - ]
     221                 :            : 
     222         [ +  + ]:      29967 :   if(size > 0)
     223                 :            :   {
     224                 :            :     //lab.AddAttribute(attr_int);
     225 [ +  - ][ +  - ]:      27375 :     assert(lab.IsAttribute(TDataStd_IntegerArray::GetID()));
                 [ -  + ]
     226                 :      29967 :   }
     227                 :            : }
     228                 :            : 
     229                 :            : // return 1 = not found
     230                 :            : // return 2 = found ENTITY_NAME attribute
     231                 :            : // return 3 = found the same attribute
     232                 :      94639 : int  OCCAttribSet::find_attribute(TDF_Label child,
     233                 :            :                                   const CubitSimpleAttrib& csa)
     234                 :            : {
     235         [ +  - ]:      94639 :   const std::vector<int>& ints = csa.int_data_list();
     236         [ +  - ]:      94639 :   CubitString type = csa.character_type();
     237                 :      94639 :   Standard_Boolean isMultiByte = Standard_True;
     238 [ +  - ][ +  - ]:     189278 :   TCollection_ExtendedString cstring( type.c_str(), isMultiByte );
                 [ +  - ]
     239         [ +  - ]:      94639 :   const std::vector<double>& doubles = csa.double_data_list();
     240         [ +  - ]:      94639 :   const std::vector<CubitString>& strings = csa.string_data_list();
     241                 :            : 
     242                 :            :   //find the same type attribute first
     243 [ +  - ][ +  - ]:     189278 :   Handle_TDataStd_Name attr_name;
     244 [ +  - ][ +  - ]:     189278 :   TCollection_ExtendedString old_string;
     245 [ +  - ][ +  - ]:      94639 :   if(child.FindAttribute(TDataStd_Name::GetID(), attr_name))
                 [ +  + ]
     246                 :            :   {
     247 [ +  - ][ +  - ]:      83301 :     old_string = attr_name->Get();
                 [ +  - ]
     248                 :      83301 :     Standard_Boolean isMultiByte = Standard_True;
     249                 :      83301 :     char const* string = "ENTITY_NAME";
     250         [ +  - ]:      83301 :     TCollection_ExtendedString string2( string, isMultiByte );
     251 [ +  - ][ +  + ]:      83301 :     if(old_string != cstring)
     252                 :      43798 :       return 1;
     253                 :            : 
     254 [ +  - ][ +  + ]:      39503 :     else if(cstring.IsEqual(string2))
     255 [ +  - ][ +  + ]:      83301 :       return 2;  
     256                 :            :   }
     257                 :            : 
     258                 :            :   else
     259                 :      11338 :     return 1;
     260                 :            : 
     261                 :            :   //continue to compare the rest attributes.
     262                 :      20493 :   CubitBoolean is_same = CUBIT_TRUE;
     263 [ +  - ][ +  + ]:      20493 :   if(ints.size()> 0 )
     264                 :            :   {
     265         [ +  - ]:      20391 :     Handle_TDataStd_IntegerArray attr_ints;
     266 [ +  - ][ +  - ]:      40782 :     if(child.FindAttribute(TDataStd_IntegerArray::GetID(), attr_ints) &&
         [ +  - ][ +  + ]
                 [ +  + ]
     267 [ +  - ][ +  - ]:      20391 :        attr_ints->Length() == (int)ints.size())
                 [ +  - ]
     268                 :            :     {
     269 [ +  - ][ +  + ]:      72963 :       for(int i = 0; i < (int)ints.size(); i++)
     270 [ +  - ][ +  - ]:      53886 :         if(attr_ints->Value(i) != ints[i])
         [ +  - ][ +  + ]
     271                 :            :         {
     272                 :       1015 :           is_same = CUBIT_FALSE;
     273                 :       1015 :           break;
     274                 :            :         }
     275         [ +  - ]:      20391 :     }
     276                 :            :   }
     277         [ +  + ]:      20493 :   if(!is_same)
     278                 :       1015 :     return 1;
     279                 :            : 
     280 [ +  - ][ +  + ]:      19478 :   if(doubles.size() > 0 )
     281                 :            :   {
     282         [ +  - ]:        200 :     Handle_TDataStd_RealArray attr_doubles;
     283 [ +  - ][ +  - ]:        400 :     if(child.FindAttribute(TDataStd_RealArray::GetID(), attr_doubles) &&
         [ +  - ][ +  - ]
                 [ +  - ]
     284 [ +  - ][ +  - ]:        200 :        attr_doubles->Length() == (int)doubles.size())
                 [ +  - ]
     285                 :            :     {
     286 [ +  - ][ +  + ]:        800 :       for(int i = 0; i < (int)doubles.size(); i++)
     287 [ +  - ][ +  - ]:        600 :         if(attr_doubles->Value(i) != doubles[i])
         [ +  - ][ -  + ]
     288                 :            :         {
     289                 :          0 :           is_same = CUBIT_FALSE;
     290                 :          0 :           break;
     291                 :            :         }
     292         [ +  - ]:        200 :     }
     293                 :            :   }
     294                 :            : 
     295         [ -  + ]:      19478 :   if(!is_same)
     296                 :          0 :     return 1;
     297                 :            : 
     298 [ +  - ][ +  - ]:      19478 :   if(strings.size() > 0 )
     299                 :            :   {
     300         [ +  - ]:      19478 :     Handle_TDataStd_ExtStringArray attr_strings;
     301 [ +  - ][ +  - ]:      20411 :     if(child.FindAttribute(TDataStd_ExtStringArray::GetID(), attr_strings) &&
         [ +  + ][ +  - ]
                 [ +  + ]
     302 [ +  - ][ +  - ]:        933 :        attr_strings->Length() == (int)strings.size()-1)
                 [ +  - ]
     303                 :            :     {
     304 [ +  - ][ +  + ]:       2550 :       for(int i = 1; i < (int)strings.size(); i++)
     305                 :            :       {
     306 [ +  - ][ +  - ]:       1617 :         CubitString astring = strings[i];
     307 [ +  - ][ +  - ]:       3234 :         TCollection_ExtendedString string( astring.c_str() , Standard_True);
         [ +  - ][ +  - ]
     308 [ +  - ][ +  - ]:       1617 :         if(attr_strings->Value(i-1) != string)
         [ +  - ][ -  + ]
     309                 :            :         {
     310                 :          0 :           is_same = CUBIT_FALSE;
     311 [ +  - ][ +  - ]:       1617 :           break;
     312                 :            :         }
     313                 :       1617 :       }
     314                 :            :     }
     315         [ -  + ]:      19478 :     if(!is_same)
     316 [ +  - ][ +  - ]:      19478 :       return 1;
     317                 :            :   }
     318         [ +  - ]:     114117 :   return 3  ;
     319                 :            : }
     320                 :            : 
     321                 :          0 : void OCCAttribSet::remove_attribute( const CubitSimpleAttrib& csa)
     322                 :            : {
     323         [ #  # ]:          0 :   CubitString type = csa.character_type();
     324 [ #  # ][ #  # ]:          0 :   if(type.length() == 0)
     325                 :          0 :       return;
     326                 :            : 
     327         [ #  # ]:          0 :   TDF_Label myLabel;
     328 [ #  # ][ #  # ]:          0 :   for (TDF_ChildIterator it(OCCQueryEngine::instance()->mainLabel, CUBIT_FALSE); it.More(); it.Next())
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     329                 :            :   {
     330                 :            :     //find the same type attribute first
     331         [ #  # ]:          0 :     myLabel = it.Value();
     332                 :            : 
     333                 :            :     //forget csa attribute from the document
     334 [ #  # ][ #  # ]:          0 :     for (TDF_ChildIterator it1(myLabel, CUBIT_FALSE); it1.More(); it1.Next())
         [ #  # ][ #  # ]
     335                 :            :     {
     336                 :            :       //find the same type attribute first
     337         [ #  # ]:          0 :       TDF_Label child = it1.Value();
     338                 :            : 
     339         [ #  # ]:          0 :       int found = find_attribute(child, csa);
     340                 :            : 
     341         [ #  # ]:          0 :       if(found == 3)
     342         [ #  # ]:          0 :         child.ForgetAllAttributes(false );
     343                 :            :     }
     344                 :          0 :   }
     345                 :            : }
     346                 :            : 
     347                 :      48915 : void OCCAttribSet::remove_attribute( TopoDS_Shape& shape)
     348                 :            : {
     349                 :      48915 :   CubitBoolean found = CUBIT_FALSE;
     350         [ +  - ]:      48915 :   TDF_Label myLabel;
     351                 :            : 
     352         [ +  - ]:      48915 :   FindShape(shape, myLabel, found);
     353                 :            : 
     354         [ +  + ]:      48915 :   if(!found)
     355                 :      48915 :     return;
     356                 :            :  
     357         [ +  - ]:       5661 :   myLabel.ForgetAllAttributes(false);
     358                 :            : /*
     359                 :            :   if(OCCQueryEngine::instance()->OCCMap->IsBound(shape)) 
     360                 :            :   {
     361                 :            :     int k = OCCQueryEngine::instance()->OCCMap->Find(shape);
     362                 :            :     OCCQueryEngine::instance()->Shape_Label_Map->erase(k);
     363                 :            :   }
     364                 :            : */
     365                 :            : }
     366                 :            : 
     367                 :     388358 : void OCCAttribSet::remove_attribute( const CubitSimpleAttrib& csa,
     368                 :            :                                      TopoDS_Shape& shape)
     369                 :            : {
     370                 :     388358 :   CubitBoolean found = CUBIT_FALSE;
     371         [ +  - ]:     388358 :   TDF_Label myLabel;
     372                 :            : 
     373         [ +  - ]:     388358 :   FindShape(shape, myLabel, found);
     374                 :            : 
     375         [ +  + ]:     388358 :   if(!found)
     376                 :     388358 :     return;
     377                 :            : 
     378                 :      80940 :   int num_children = 0;
     379                 :      80940 :   int num_found = 0;
     380 [ +  - ][ +  - ]:     238089 :   for (TDF_ChildIterator it1(myLabel, CUBIT_FALSE); it1.More(); it1.Next())
         [ +  - ][ +  + ]
     381                 :            :   {
     382                 :            :     //find the same type attribute first
     383         [ +  - ]:     157149 :     TDF_Label child = it1.Value();
     384 [ +  - ][ +  + ]:     157149 :     if (child.NbAttributes() == 0)
     385                 :      96904 :       continue;
     386                 :            : 
     387                 :      64251 :     num_children ++;
     388                 :            : 
     389 [ +  - ][ +  + ]:      64251 :     if(csa.isEmpty())
     390                 :            :     {
     391                 :            :       //only name attributes can't be forget here.
     392         [ +  - ]:       7727 :       Handle_TDataStd_Name attr_name;
     393 [ +  - ][ +  - ]:       7727 :       if(child.FindAttribute(TDataStd_Name::GetID(), attr_name))
                 [ +  - ]
     394                 :            :       {
     395 [ +  - ][ +  - ]:       7727 :         TCollection_ExtendedString old_string = attr_name->Get();
                 [ +  - ]
     396                 :       7727 :         char const* string1 = "ENTITY_NAME";
     397                 :       7727 :         Standard_Boolean isMultiByte = Standard_True;
     398 [ +  - ][ +  - ]:      15454 :         TCollection_ExtendedString cstring( string1, isMultiByte );
                 [ +  + ]
     399 [ +  - ][ +  + ]:       7727 :         if( old_string == cstring)
     400 [ +  - ][ +  + ]:      15454 :           continue;
     401                 :            :       }
     402         [ +  - ]:       3721 :       child.ForgetAllAttributes(false );
     403 [ +  - ][ +  + ]:       7727 :       num_found ++;
     404                 :            :     }
     405                 :            : 
     406                 :            :     else
     407                 :            :     {
     408         [ +  - ]:      56524 :       int found = find_attribute(child, csa);
     409                 :            : 
     410         [ +  + ]:      56524 :       if(found == 3)
     411                 :            :       {
     412         [ +  - ]:      19152 :         child.ForgetAllAttributes(false );
     413                 :      60245 :         num_found ++;
     414                 :            :       } 
     415                 :            :     }
     416                 :            :   }
     417                 :            : /*
     418                 :            :   if(num_children == num_found)
     419                 :            :   {
     420                 :            :     if(OCCQueryEngine::instance()->OCCMap->IsBound(shape))
     421                 :            :     {
     422                 :            :       int k = OCCQueryEngine::instance()->OCCMap->Find(shape);
     423                 :            :       OCCQueryEngine::instance()->Shape_Label_Map->erase(k);
     424                 :            :     }
     425                 :            :   }
     426                 :            : */
     427                 :            : }
     428                 :            : 
     429                 :      28881 : void OCCAttribSet::get_attributes(TDF_Label &lab,
     430                 :            :                                   DLIList<CubitSimpleAttrib>& list)
     431                 :            : {
     432         [ +  - ]:      28881 :   std::vector<CubitString> strings;
     433 [ +  - ][ +  - ]:      57762 :   CubitString string;
     434 [ +  - ][ +  - ]:      57762 :   std::vector<double> doubles;
     435 [ +  - ][ +  - ]:      57762 :   std::vector<int> ints;
     436                 :            : 
     437 [ +  - ][ +  - ]:      57762 :   Handle_TDataStd_Name attr_name;
     438 [ +  - ][ +  - ]:      57762 :   TCollection_ExtendedString name_string;
     439 [ +  - ][ +  - ]:      57762 :   Handle_TDataStd_ExtStringArray attr_string;
     440 [ +  - ][ +  - ]:      57762 :   Handle_TDataStd_RealArray attr_doubles;
     441 [ +  - ][ +  - ]:      57762 :   Handle_TDataStd_IntegerArray attr_ints;
     442                 :            : 
     443 [ +  - ][ +  - ]:      28881 :   if(lab.FindAttribute(TDataStd_Name::GetID(), attr_name))
                 [ +  + ]
     444                 :            :   {
     445 [ +  - ][ +  - ]:      26618 :     name_string = attr_name->Get();
                 [ +  - ]
     446         [ +  - ]:      26618 :     int length = name_string.Length();
     447         [ +  - ]:      26618 :     std::vector<char> temp_type(length+1);
     448         [ +  + ]:     300820 :     for (int i = 1 ;  i <= length; i++)
     449                 :            :     {
     450         [ +  - ]:     274202 :       Standard_ExtCharacter c = name_string.Value(i);
     451 [ +  - ][ +  - ]:     274202 :       temp_type[i-1] = ToCharacter(c);
     452                 :            :     }
     453         [ +  - ]:      26618 :     temp_type[length] = '\0';
     454 [ +  - ][ +  - ]:      26618 :     string = CubitString(&temp_type[0]);
         [ +  - ][ +  - ]
     455 [ +  - ][ +  - ]:      26618 :     strings.push_back(string);
     456                 :            :   }
     457 [ +  - ][ +  - ]:      28881 :   if(lab.FindAttribute(TDataStd_ExtStringArray::GetID(), attr_string))
                 [ +  + ]
     458                 :            :   {
     459 [ +  - ][ +  - ]:      12572 :     int length = attr_string->Length();
     460         [ +  + ]:      31123 :     for (int i = 0 ;  i < length; i++)
     461                 :            :     {
     462 [ +  - ][ +  - ]:      18551 :       name_string = attr_string->Value(i);
                 [ +  - ]
     463         [ +  - ]:      18551 :       int length2 = name_string.Length();
     464         [ -  + ]:      18551 :       if (length2 == 0)
     465                 :          0 :         continue;
     466         [ +  - ]:      18551 :       std::vector<char> temp_string(length2+1);
     467         [ +  + ]:     265915 :       for(int j = 1; j <= length2; j ++)
     468                 :            :       {
     469         [ +  - ]:     247364 :         Standard_ExtCharacter c = name_string.Value(j);
     470 [ +  - ][ +  - ]:     247364 :         temp_string[j-1] = ToCharacter(c);
     471                 :            :       }
     472         [ +  - ]:      18551 :       temp_string[length2] = '\0';
     473         [ +  - ]:      18551 :       const char *s = &temp_string[0];
     474 [ +  - ][ +  - ]:      18551 :       string = CubitString(s);
                 [ +  - ]
     475         [ +  - ]:      18551 :       strings.push_back(string);
     476         [ +  - ]:      18551 :     }
     477                 :            :   }
     478 [ +  - ][ +  - ]:      28881 :   if(lab.FindAttribute(TDataStd_RealArray::GetID(), attr_doubles))
                 [ +  + ]
     479                 :            :   {
     480 [ +  - ][ +  - ]:        480 :     for(int i = 0; i < attr_doubles->Length(); i++)
                 [ +  + ]
     481                 :            :     {
     482 [ +  - ][ +  - ]:        360 :       double d = attr_doubles->Value(i);
     483         [ +  - ]:        360 :       doubles.push_back(d);
     484                 :            :     }
     485                 :            :   }
     486 [ +  - ][ +  - ]:      28881 :   if(lab.FindAttribute(TDataStd_IntegerArray::GetID(), attr_ints))
                 [ +  + ]
     487                 :            :   {
     488 [ +  - ][ +  - ]:      62037 :     for(int i = 0; i < attr_ints->Length(); i++)
                 [ +  + ]
     489                 :            :     {
     490 [ +  - ][ +  - ]:      47105 :       int j = attr_ints->Value(i);
     491         [ +  - ]:      47105 :       ints.push_back(j);
     492                 :            :     }
     493                 :            :   }
     494 [ +  - ][ +  + ]:      28881 :   if(strings.size() > 0 || doubles.size() || ints.size())
         [ +  - ][ +  - ]
         [ +  - ][ -  + ]
                 [ +  + ]
     495                 :            :   {
     496 [ +  - ][ +  - ]:      26618 :     list.append(CubitSimpleAttrib(&strings, &doubles, &ints));
                 [ +  - ]
     497         [ +  - ]:      28881 :   }
     498                 :      28881 : }
     499                 :            : 
     500                 :     121619 : CubitStatus OCCAttribSet::get_attributes( TopoDS_Shape& shape,
     501                 :            :                                           DLIList<CubitSimpleAttrib>& list)
     502                 :            : {
     503                 :     121619 :   CubitBoolean found = CUBIT_FALSE;
     504         [ +  - ]:     121619 :   TDF_Label myLabel;
     505                 :            : 
     506         [ +  - ]:     121619 :   FindShape(shape, myLabel, found);
     507                 :            : 
     508         [ +  + ]:     121619 :   if(!found)
     509                 :     112211 :     return CUBIT_FAILURE;
     510                 :            : 
     511         [ +  - ]:       9408 :   TDF_Label lab;
     512 [ +  - ][ +  - ]:      21454 :   for (TDF_ChildIterator it(myLabel,CUBIT_FALSE); it.More(); it.Next())
         [ +  - ][ +  + ]
     513                 :            :   {
     514         [ +  - ]:      12046 :     lab = it.Value();
     515         [ +  - ]:      12046 :     get_attributes(lab, list);
     516                 :            :   }     
     517                 :     121619 :   return CUBIT_SUCCESS;
     518                 :            : }
     519                 :            : 
     520                 :     806457 : CubitStatus OCCAttribSet::get_attributes( const CubitString& name,
     521                 :            :                                           TopoDS_Shape& shape,
     522                 :            :                                     DLIList<CubitSimpleAttrib>& list )
     523                 :            : {
     524                 :     806457 :   CubitBoolean found = CUBIT_FALSE;
     525         [ +  - ]:     806457 :   TDF_Label aLabel;
     526                 :            : 
     527         [ +  - ]:     806457 :   FindShape(shape, aLabel, found);
     528                 :            : 
     529         [ +  + ]:     806457 :   if(!found)
     530                 :     665773 :     return CUBIT_FAILURE;
     531                 :            : 
     532         [ +  - ]:     140684 :   Handle_TDataStd_Name attr_name;
     533 [ +  - ][ +  - ]:     281368 :   TCollection_ExtendedString cstring( (Standard_CString)name.c_str() );
                 [ +  - ]
     534         [ +  - ]:     140684 :   TDF_Label lab;
     535 [ +  - ][ +  - ]:     351642 :   for (TDF_ChildIterator it(aLabel,CUBIT_FALSE); it.More(); it.Next())
         [ +  - ][ +  + ]
     536                 :            :   {
     537         [ +  - ]:     210958 :     lab = it.Value();
     538                 :            : 
     539                 :            :     //check if the type attribute is the same, disable it
     540         [ +  - ]:     210958 :     TCollection_ExtendedString old_string;
     541 [ +  - ][ +  - ]:     210958 :     if(lab.FindAttribute(TDataStd_Name::GetID(), attr_name))
                 [ +  + ]
     542                 :            :     {
     543 [ +  - ][ +  - ]:     159807 :       old_string = attr_name->Get();
                 [ +  - ]
     544                 :            : 
     545 [ +  - ][ +  + ]:     159807 :       if(old_string == cstring)
     546                 :            :       {
     547         [ +  - ]:      16835 :         get_attributes(lab, list);
     548 [ +  - ][ +  + ]:     210958 :         break;
     549                 :            :       }
     550                 :            :     }
     551                 :     194123 :   }
     552                 :            :  
     553         [ +  - ]:     806457 :   return CUBIT_SUCCESS;
     554                 :            : }
     555                 :            : 
     556                 :            : 
     557                 :          0 : int OCCAttribSet::attribute_count() 
     558                 :            : {
     559                 :          0 :   int count = 0;
     560                 :            :   
     561                 :          0 :   return count;
     562 [ +  - ][ +  - ]:       6364 : }
     563                 :            : 

Generated by: LCOV version 1.11