Как считать параметры 3D детали?

Автор Громозека, 04.05.06, 16:48:24

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

Громозека

Как считать параметры детали? Есть ли функции на подобии
  - ksGetMacroParam
  - ksSetMacroParam
или надо считывать параметры детали из файла *.l3d, при помощи внешнего массива
  -ksVariableCollection
если можно, приведите пример на Delphi.

Как сделать так, чтобы деталь сразу перестраивалась,
после смены параметров (перестраивается только
в ручную, в самом Kompas'е, нажатием клавиши F5) ?
Функции Update и RebuildModel не помогают.
И еще, при отключении библиотеки, при попытке редактировать параметры библиотечного элемента,
обнуляются все значения (размеры), как это исправить?
Заранее благодарен!

IronMaxxx

Многовато вопросов для одной темы...
1. Какие именно параметры? Параметры пользователя или внешние переменные модели из библиотеки? Если второе, то считываются через ksVariableCollection (первые через ksPart::GetUserParam или ksMacro3DDefinition::GetUserParam).
Ниже пример, правда, не на Delphi, а на Visual C++, но, думаю, разобраться можно.

                        // KTA - указатель на ksDocument3D (сборка)
   ksPart Shpeel(KTA.GetPart(pNew_Part));
                        // вставка модели шпильки из *.l3d библиотеки
   KTA.SetPartFromFile(kompas.ksSystemPath(sptLIBS_FILES)+"\\TAdesign\\SealingElements.l3d|Шпильки|Шпилька_1", Shpeel, false);
                        // указатель на коллекцию внешних переменных
   ksVariableCollection iVarColl(Shpeel.VariableCollection());
   if (iVarColl.m_lpDispatch)
   {
                        // изменяем переменные
      ksVariable iVar(iVarColl.GetByIndex(0));
      iVar.SetValue(Dblt);
      ksVariable iVar1(iVarColl.GetByIndex(1));
      iVar1.SetValue((h_tr_resh+2*h_fl+2*1.25*Dblt+2)/2);
      ksVariable iVar2(iVarColl.GetByIndex(2));
      iVar2.SetValue((h_tr_resh+2*h_fl+2*1.25*Dblt+2)/2);
      ksVariable iVar4(iVarColl.GetByIndex(4));
      iVar4.SetValue(Dblt/10);
      ksVariable iVar6(iVarColl.GetByIndex(6));
      iVar6.SetValue(1.0);
                        // перестраиваем и обновляем модель
      Shpeel.RebuildModel();
      Shpeel.Update();
   }

2. ksPart::RebuildModel() и ksPart::Update() у Вас наверняка потому и не работали, что неправильно инициализировался массив переменных, или сами переменные некоректно считывались.

3. Относительно последнего вопроса хочу уточнить: "при отключении библиотеки, при попытке редактировать параметры" - редактировать через библиотеку? Если да, то, я понимаю, Вам нужно, чтоб при запуске на редактирование в окне появлялись параметры редактируемого компонента? Так система за Вас этого делать не будет :). Нужно самому определить необходимые параметры, после чего (при вставке модели в сборку) сохранить их с моделью с помощью метода ksPart::SetUserParam, и лишь потом, считав их при запуске модели на редактирование (ksPart::GetUserParam), вставить в нужные окошки, отметить нужные галочки, переключатели и пр.
Если я не о том пишу - уточните вопрос.

Громозека

Спасибо, IronMaxxx! Попробую и сообщу о результатах. Замечательная программа расчета  и построения редуктора   :)