Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Тема начата: Mitya от 12.03.03, 13:16:03

Название: Что есть callback функция
Отправлено: Mitya от 12.03.03, 13:16:03
Может ли кто-нибудь привести пример для 3D
при выборе чего-нибудь из модели.
Название: Re:Что есть callback функция
Отправлено: Zashibuka от 12.03.03, 13:45:58
ну к примеру пишется такая вот функция - фильтр которую КОМПАС будет вызывать при выборе объекта - в ней отбираем - выбраковываем объекты по типам и т. д.
//--------------------------------------------------------------------------
function SELECTFILTERPROC(_entity: PIDispatch): BOOLean; stdcall; Export;
var
rez : boolean;
entity : ksEntity;
begin
   rez:=false ;
   entity := ksEntity(_entity);
   if entity  nil then
    begin
     if entity.IsIt(o3d_face)then // если грань - то отбираем в коллекцию
         rez:=true;
    end;
  result:=rez;
end;
//--------------------------------------------------------------------------

а потом инициируем запрос к системе в котором передаём имя callback процедуры
//-------------------------------------------------------------------
     begin
        // запросили первый объект
        ksR:=ksRequestInfo3D(iDocument3D.GetRequestInfo(part)); // интерфейс параметров запроса
        ksR.prompt:=’Запрос первой пары плоскостей’;
        ksR.SetFilterCallBack(’SELECTFILTERPROC’,HINSTANCE,nil);
        iDocument3D.UserGetPlacementAndEntity(3);              // запрос к системе
        // работа с коллекцией сущностей 1
        collect:=ksEntityCollection(ksR.GetEntityCollection());  //   интерфейс коллекции выделенных сущностей
        if collect= nil then exit;
        collect.Clear;

ну и так далее ... если я сам только что-то не наврал %)
 //================================================




 
Название: Re:Что есть callback функция
Отправлено: Mitya от 10.04.03, 08:11:11
Спасибо за ответ :)
Название: Re:Что есть callback функция
Отправлено: Petrovich от 14.07.06, 17:07:10
Есть заковыка:
ksR:=ksRequestInfo3D(iDocument3D.GetRequestInfo(part));
(точнее iDocument3D.GetRequestInfo(part))
присылает nil под Компасом 6 plus LT при part <>nil :-((

Никто не знает как с этим бороться? В примерах на С++ есть только перевод вышеуказанного кода на С++ в примерах на других языках - нет ничего.