База знаний
- Онлайн руководство
- Блог проекта
- Вопросы и ответы
- Нормативы
- Обучающие примеры
- Инструкции
- Презентации
- Видеоролики с YouTube
- Совместимость
Обучающие примеры
- Продается коттедж
- Отзеркаливание текста в параметрическом объекте (2)
- Растягивание объекта за базовую точку (pntOrigin)
- Автоматическая маркировка колонн через спецификацию
- Отзеркаливание текста в параметрическом объекте
- Получение значения из другой таблицы
- Пример управления отображением шапки таблицы
- Железобетонная колонна как параметрический объект
- Добавление пользовательского объекта в базу элементов СПДС
- Перенумерация блоков AutoCAD в чертеже
- Создание списков параметрического объекта
- Подсчет блоков AutoCAD
- Как быстро посчитать площадь скатной кровли.
- Чертёж лестницы за 3 минуты средствами СПДС
- Пример получения отчетов в СПДС Стройплощадка
Читать новости в почте
Поиск
Условие установки зависимостей
Задача
Создание сообщения для пользователя при невозможной установке зависимостей соединяемых объектов.
Пример
Соединение двух труб
Решение. Вариант 1
Чтобы известить пользователя можно воспользоваться функцией MessageBox. Для этого нужно открыть Мастером объектов объект «Труба
Protected(seted, hid, Answer);
2. Переключиться на функцию OnConnect
3. Преобразовать скрипт 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;
};
};
};
4. Внести изменения в функцию OnChangeParameters
5. Добавить в скрипт OnChangeParameters следующие строки
// проверка на то, что сохраненное значение объекта ненулевое
if (getObjData(getWorkId(0),obj)) {
// в случае неравенства диаметров и если диалог еще не появлялся, то
if (obj.B!=B && Answer==UnknownValue) {
// ответ определяется диалогом
Answer=MessageBox("Значения диаметра "+obj.B+" нет в таблице объекта. Ставить двунаправленную зависимость?", MB_YESNO, MB_ICONWARNING);
};
};
6. Сохранить объект
При попытке установить зависимость будет появляться сообщение.
- При ответе «Да» диаметр трубы
ГОСТ 8732 будет выравниваться по ближайшему доступному диаметруГОСТ 8734 . - При ответе «Нет» будет устанавливаться однонаправленная зависимость.
Решение. Вариант 2
Добавить в объект
1. Нарисовать элементы управления и задать свойства для поля диаметра трубы, диаметра исходной трубы и переключателей
2. Сохранить форму, задав для неё название и необходимый размер.
3. Внести в скрипт объекта следующие изменения.
ActHeader
Protected( seted, hid,Answer);
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);
// если в диалоге была нажата кнопка "Yes" - устанавливаем
if (Answer=="IDYES") {
// двунаправленную зависимость
// нужно обратить внимание, что тип данных в поле Radiobutton - строка
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
// проверка на то, что сохраненное значение объекта ненулевое
if (getObjData(getWorkId(0), obj)) {
// в случае неравенства диаметров и если диалог еще не появлялся, то
if (obj.B!=B && Answer==UnknownValue) {
// ответ определяется диалогом-формой
ShowForm("Form1");
};
};
4. Сохранить объект.
В этом случае, при попытке установить зависимость будет появляться диалог с вариантами:
- «Изменить диаметр у исходного объекта» устанавливает двунаправленную зависимость
- «Оставить как есть» устанавливает однонаправленную зависимость
Пользовательские библиотеки труб с внесенными изменениями в скрипт: