• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Доступ к списку переменных сборки

Автор neverLost, 11.11.13, 18:20:44

« назад - далее »

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

neverLost

11.11.13, 18:20:44 Последнее редактирование: 11.11.13, 22:23:52 от neverLost
Добрый день. Пишу программку на Delphi для работы с 3D сборками. Стоит задача открыть параметрическую сборку, в которой есть одна или несколько переменных от которых зависят переменные в деталях.
Вот к примеру как здесь:

Моя программка уже умеет отображать детали и переменные в виде дерева, а также менять эти переменные:


Ворос: Как получить ссылку на переменные Pr и Pr2 и прочитать их чтобы затем отобразить дереве под Сборкой и потом можно было менять их так же как и переменные деталей?

Буду благодарен за детальные подсказки, я не очень опытный программист:)


neverLost

Забыл дописать что использую команды Компас API 5, и технологию автоматизации(возможно я неграмотно сформулировал - я новичок в этой теме). Из файлов Компаса пока что ограничиваюсь подключением в проект файла KsTLB.pas

Вот к примеру мой код для получения переменных детали:
function GetPartVars(partname:STRING):TPartVars;
var vr:ksVariableCollection;
    parts:ksPartCollection;
    part:ksPart;
    univar:ksVariable;
    j, numpart:WORD;
begin
parts:=ksPartCollection(doc.PartCollection(true)); // ссылка на деталь с именем partname
part:=ksPart(parts.GetByName(partname,True,True)); // ссылка на список переменных детали
vr:=ksVariableCollection(part.VariableCollection);         
numpart:=vr.GetCount;
SetLength(result,numpart);

  for j:=0 to numpart-1 do
    begin
      univar:=ksVariable(vr.GetByIndex(j)); // ссылка на отдельную переменную
        with result[j] do
        begin
         VarName:=univar.name;
         VarNote:=univar.note;
         VarValue:=univar.value
        end
  end
end;

Как можно решить мою задачу, в этом духе?

Или использовать:
Цитата: Sabahs от 11.11.13, 18:29:05
IFeature7::Variable
IFeature7::Variables
Я так понимаю это из Компас API 7? Какие файлы нужно подключить чтобы использовать это? Есть какой нибудь пример реализации?

Прошу пояснить подробно. Документация расчитана на опытных программистов, мне сложно разобраться и времени не так много на выполнение:)

Просто нужно воспользоваться поиском, совсем недавно обсуждали http://forum.ascon.ru/index.php/topic,25253.msg183169.html#msg183169

neverLost

Спасибо.
Может можно решить задачу с использованием только АPI 5?

11.11.13, 23:03:00 #5 Последнее редактирование: 11.11.13, 23:15:11 от Sabahs
Придётся использовать API7, т.к. Вам нужна IVariable7 - интерфейс параметрической переменной модели.
API5 даёт возможность добраться до ksVariable - интерфейса внешней параметрической переменной модели.
Хотя можно посмотреть имена в свойстве ksVariable::displayName, возможно Вы там найдёте переменные Pr и Pr2.

neverLost

Проблему с первого сообщения темы решил путем небольшой модификации кода(C#):
KsPart assembly = (ksPart)Doc.GetPart(-1);
ksVariableCollection var_col = (VariableCollection)assembly.VariableCollection();


Теперь у меня 3 новых вопроса. Прошу помочь:
1) Можно как то получить доступ к полю Выражение переменной? Хотелось бы чтобы программка могла не только менять значение переменной но его формулу, если такая есть.
3) Есть какие нибудь методы для получения списка зависимых переменных или от каких переменных зависит эта? Хочется сделать удобной и эффективной работу с переменными в программке.
2) Бывает, когда новое значение переменной приводит к нарушению всей сборки или невозможности вычислить зависимые значения. При этом в компасе соответствующие строчки подсвечиваются красным. Как передать в мою программку сообщение об такого рода ошибке?(чтобы например при получении такого сообщения сразу можно было вернуть старое значение)

Прошу поделится опытом или примером кода))

Есть IKompasError - интерфейс информации об ошибке системы КОМПАС.
IVariable7.Expression - Выражение.
Также смотрите интерфейс IVariableTable.