Может ли кто-нибудь привести пример для 3D
при выборе чего-нибудь из модели.
ну к примеру пишется такая вот функция - фильтр которую КОМПАС будет вызывать при выборе объекта - в ней отбираем - выбраковываем объекты по типам и т. д.
//--------------------------------------------------------------------------
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;
ну и так далее ... если я сам только что-то не наврал %)
//================================================
Спасибо за ответ :)
Есть заковыка:
ksR:=ksRequestInfo3D(iDocument3D.GetRequestInfo(part));
(точнее iDocument3D.GetRequestInfo(part))
присылает nil под Компасом 6 plus LT при part <>nil :-((
Никто не знает как с этим бороться? В примерах на С++ есть только перевод вышеуказанного кода на С++ в примерах на других языках - нет ничего.