Как графический объект из своего текущего состояния может производить опрос системы?
-А никак! Опрос никак! Он(объект А) просто подчистит во внешнем файле(только при наличии скрипта деструктора) инфу о себе(ну грохнет он узел в дереве со своим названием, открой мануал по GDL XML IN/OUT )...а вот другой объект(Б) прочитает все дерево XML документа и таким образом все синхронизируется, Б будет работать только с "живыми" А, либо выдавать сообщение что такой то из А удален(нет такого узла в xml дереве).
Вся фишка в том что:
- нельзя в скрипте объекта Б написать инструкцию типа - читать из xml-файла каждые 2 мин(5 шагов), НО:
- можно прокрутить весь скрипт объекта Б и остальных объектов которые размещены в проекте, а скрипт объекта Б написан так - что прочитает все дерево *.xml, либо все строки из *.Txt, и выберет только то что нужно ему...
а как написать обработчик на событие???(к вопросу о состоянии системы...)
так же точно - допустим в объекте А есть параметр w_type - тип профиля - труба, уголок и т.д., и еще один параметр A_Num - метка объекта А среди остальных объектов А(придется назначать значение вручную,следить чтобы два объекта не имели одинаковых меток, но когда вещи не абстрактны то в этом нет не удобства а наоборот - например первый объект А спецификация на колонну, второй А - на балку, третий - на площадку и.т.д. соответственно в первом объекте A_Num="K1", во втором A_Num="Б1" и т.д.)
Как обработать событие - "изменение параметра w_type"?
Каждый объект А, при размещении на плане отписывает во внешний xml-файл, по след. принципу: создается узел уровня 2(уровень 1(root)-имя проекта(ну или имя указанное пользователем, не суть)), имеющий имя - A_Num, тип - текст, далее поддерево от этого узла - в нем все что нужно для работы с объектом А объекту Б. С объектом А вроде все объяснил,
далее - размещаем объекты А на плане - настраиваем их - задаем в них все что требуется, назначаем им уникальные метки, таким образом получаем xml -файл со всей информацией из объектов А
Далее размещаем на плане объект Б, скрипт которого примерно следующий:
во первых есть строковой массив(dim A) в котором руками забиваем имена тех объектов А по которым требуется составить сводную спецификацию, дальше сершинг по xml-дереву на наличие узлов второго уровня с именами из Dim A, ничего сложного, обработка-логика объекта Б,его 2Д скрипт - который и есть результат обработки и все!Имеем Б - сводный по А.
Объект Б сработал по тем объектам А которые перечислены в его параметре - Массиве А.Удобно.Можно иметь N объектов Б которые будут представлять ту или иную инфу, например делаем спецификации на 2 цеха(две группы объектов А), и сводные на 2 цеха по отдельности два объекта Б, дальше прикидываем сколько нужно металла на первую очередь строительства - создаем еще один Б на определенное количество А из первой группы(например на фермы и прогоны покрытия т.е. пишем в массив А - Ф1,Ф2,Ф3,Ф7,Пр4 (если к примеру эти конструкции составят первую очередь)) Вот так...вопросы?
Дальше - как синхронизировать Б и А?
Т.е. изменили мы параметр w_type в одном из объектов А(через интерфейс объекта) - с уголка на трубу, клик на ок, объект изменился, потому что прокрутились его(только его!!!) скрипты, т.е А отписал свою "новую" инфу в xml(в узел под той же меткой -owerwrite), а Б не прочитал ее(т.е. отражает старую инфу), но! что важно: узел в xml Файле уже "новый"(переписан под тем же именем), т.е всего то нужно чтобы Б прокрутил свой скрипт - и этого добиваемся командой Rebuild All из меню архикада, по этой команде все объекты выполняют свой скрипт...
Даже нет необходимости обращаться к базе данных...
Я писал о том что было бы неплохо чтобы при удалении объекта была возможность выполнять некие gdl команды - блин ну как еще сказать - деструктор!
Что из того что я написал кажется не реальным?