Что есть callback функция

Автор Mitya, 12.03.03, 13:16:03

« предыдущая - следующая »

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

Mitya

Может ли кто-нибудь привести пример для 3D
при выборе чего-нибудь из модели.

Zashibuka

ну к примеру пишется такая вот функция - фильтр которую КОМПАС будет вызывать при выборе объекта - в ней отбираем - выбраковываем объекты по типам и т. д.
//--------------------------------------------------------------------------
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;

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




 

Mitya


Petrovich

Есть заковыка:
ksR:=ksRequestInfo3D(iDocument3D.GetRequestInfo(part));
(точнее iDocument3D.GetRequestInfo(part))
присылает nil под Компасом 6 plus LT при part <>nil :-((

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