Advertisement
ANevsky

Test function for getproperty

Aug 10th, 2023
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. void TestGetAttribute(const IModelObjectPtr mdlobj) {
  2.     assert(mdlobj, "Model object not defined");
  3.     IPropertyMngPtr propmng(GetKompas());
  4.  
  5.     IPropertyPtr prop = propmng->GetProperty({}, L"ADEM Тип геометрии");
  6.  
  7.    
  8.  
  9.     std::vector<IBody7Ptr> bodies;
  10.     //-----------------------GetResultBodies7-----------------------
  11.     bool res = false;
  12.     bodies.clear();
  13.  
  14.     if (mdlobj)
  15.     {
  16.         IFeature7Ptr objFeature7(mdlobj->GetOwner());
  17.  
  18.         if (objFeature7)
  19.         {
  20.             _bstr_t name = objFeature7->Name;
  21.             MessageT(name);
  22.             _variant_t arr = objFeature7->GetResultBodies();
  23.  
  24.             if (arr.vt == (VT_ARRAY | VT_DISPATCH))
  25.             {
  26.                 long iUBound = 0, iLBound = 0;
  27.                 ::SafeArrayGetUBound(const_cast<SAFEARRAY*>(V_ARRAY(&arr)), 1, &iUBound);  // Верхняя граница массива
  28.                 ::SafeArrayGetLBound(const_cast<SAFEARRAY*>(V_ARRAY(&arr)), 1, &iLBound);  // Нижняя граница массива
  29.                 long count = iUBound - iLBound + 1;           // Кол-во элементов в массиве
  30.  
  31.                 for (long i = 0; i < count; i++)             // Пройдём по всем объектам массива
  32.                 {
  33.                     IDispatchPtr el(nullptr);
  34.                     ::SafeArrayGetElement(V_ARRAY(&arr), &i, &el);
  35.                     bodies.push_back(IBody7Ptr(el));
  36.                 }
  37.             }
  38.             else if (arr.vt == VT_DISPATCH)
  39.                 bodies.push_back(IBody7Ptr(arr.pdispVal));
  40.  
  41.             res = true;
  42.         }
  43.         else
  44.             ASSERT(FALSE); // Где?
  45.     }
  46.     //-----------------------GetResultBodies7-----------------------
  47.     IBody7Ptr body(bodies.size() == 1 ? bodies[0] : nullptr);
  48.     IPropertyKeeperPtr propkprbody = body;
  49.  
  50.  
  51.  
  52.     IPropertyKeeperPtr propkprpart = mdlobj->Part;
  53.  
  54.     _variant_t valbody, valpart;
  55.     if (propkprbody) {
  56.         propkprbody->GetPropertyValue(prop, &valbody, true, {});
  57.     }
  58.     else if (propkprpart) {
  59.         propkprpart->GetPropertyValue(prop, &valpart, true, {});
  60.     }
  61.  
  62.     VARIANT Value = valbody.vt != VT_EMPTY ? valbody : valpart;
  63.  
  64.     TCHAR buf[255];
  65.     _stprintf_s(buf, _T("Value = %d"), Value.iVal);
  66.     Value.vt == VT_EMPTY ? MessageT(L"Empty Value") : MessageT(buf);
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement