Условие установки зависимостей

Задача

Создание сообщения для пользователя при невозможной установке зависимостей соединяемых объектов.

Пример

Соединение двух труб ГОСТ 8732–78 и ГОСТ 8734–75. Номенклатура типоразмеров у трубы ГОСТ 8732–78 больше, чем у 8734−75, поэтому при присоединении 8734−75 к 8732−78 диаметр труб может не совпасть. Если диаметр трубы ГОСТ 8732–78 составляет 325 мм, то при присоединении трубы ГОСТ 8734–75 будет выбран максимальный доступный диаметр — 250 мм, не равный диаметру исходной трубы по ГОСТ 8732–78.

Решение. Вариант 1

Чтобы известить пользователя можно воспользоваться функцией MessageBox. Для этого нужно открыть Мастером объектов объект «Труба ГОСТ 8734» и внести в скрипт следующие изменения:

  • Добавить защищённый параметр Answer Protected(seted, hid, Answer);
  • Переключиться на функцию OnConnect

  • Преобразовать скрипт OnConnect к следующему виду:

function OnConnect {

// проверка типа объекта к которому устанавливается зависимость

if ( (obj.strTheType=="Tube" && obj.strTheSubType=="Round") || obj.strTheType=="vaPipe" ) {

// находим индекс ближайшей плоскости WP1, WP2, WP3, WP4

iWPindx = findNearest(pntOrigin, obj.WP, 1, 4);

// если ближайшая плоскость была найдена, то 

if ( iWPindx==1 || iWPindx==2 || iWPindx==3 || iWPindx==4 ) {

// устанавливаем зависимости:

// геометрическая зависимость вставки на ближайшую плоскость

SetGeomConstraint(INSERT, CONTRDIRECT, obj, WP1, obj.WP[iWPindx], 0, TRUE);

// присваиваем одинаковые значения для отображения обычный видразрез

// lSimpleView==2 - разрез, lSimpleView==0 - обычный вид

lSimpleView = obj.lSimpleView;

// не указывать вектор вставки

NoVectorSelect = 1;

// запоминаем ID объекта, к которому установлена зависимость

setWorkId(0,obj.objectID);

if (Answer==IDYES) {

// если в диалоге была нажата кнопка "Yes" - устанавливаем двунаправленную зависимость

SetParamConstraint(rdE1, obj, EXPR, "obj.rdE"+iWPindx, TRUE); 

} else { 

// в противном случае - зависимость по диаметру будет однонаправленная

SetParamConstraint(rdE1, obj, EXPR, "obj.rdE"+iWPindx, FALSE); 

};

// устанавливаем зависимость по толщине стенки

SetParamConstraint(rS1,obj,EXPR,"obj.rS"+iWPindx,TRUE);

//Зависимость успешно установлена

Handled = OBJ_HANDLED;

};

};

};

  • Внести изменения в функцию OnChangeParameters

  • Добавить в скрипт OnChangeParameters следующие строки

// проверка на то, что сохраненное значение объекта ненулевое

if (getObjData(getWorkId(0),obj)) { 

// в случае неравенства диаметров и если диалог еще не появлялся, то

if (obj.B!=B && Answer==UnknownValue) { 

// ответ определяется диалогом

Answer=MessageBox("Значения диаметра "+obj.B+" нет в таблице объекта. Ставить двунаправленную зависимость?", MB_YESNO, MB_ICONWARNING);

};

};

  • Сохранить объект

При попытке установить зависимость будет появляться сообщение.

При ответе «Да» диаметр трубы ГОСТ 8732 будет выравниваться по ближайшему доступному диаметру ГОСТ 8734.

При ответе «Нет» будет устанавливаться однонаправленная зависимость.

Клуб СПДС
© ООО "Магма-Компьютер"

2016-2021 Все права защищены

Мы в соц.сетях