Помогите, возникли трудности с функцией ksGetObjParam

Автор IvengoRU, 28.05.05, 17:49:39

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

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

IvengoRU

мне надо извлеч параменры объекта чертежа (к примеру прямой),
но всегда после вызыва ksGetObjParam(obj, p,ALLPARAM)
p ссылается на nil, хотя  в текущем чертеже ссылка obj ссылается на
объект чертежа.

на ObjectPascal:

procedure Iterator(iDoc:ksDocument2D);
var itAllObj:reference ;
    obj:reference ;
    msg:string;
    p:LineParam;

begin
 itAllObj := CreateIterator(LINE_OBJ, 0);
 if not(itAllObj = 0) then
 begin
  obj := MoveIterator(itAllObj, ’F’);
  if (ExistObj(obj)=1) then
       while  (ExistObj (obj)=1) do
       begin
            LightObj(obj, 1);
            if  (idoc.ksGetObjParam(obj, p,ALLPARAM)=28) then
            if not (p = nil) then
                 iKompas.ksMessage( ’yes’ );
            else
                 iKompas.ksMessage( ’no’ );
            LightObj(obj, 0);
            obj := MoveIterator (itAllObj, ’N’);
      end;
 end;
end;

Sabahs

LineSegIter:=ksIterator(Kompas.GetIterator);
        LineSegIter.ksCreateIterator(LINESEG_OBJ,0);
        New(Obj);
        Obj^:=LineSegIter.ksMoveIterator(’F’);
        while BOOL(Doc2D.ksExistObj(Obj^)) do
         begin
           if(Doc2D.ksGetObjParam(Obj^,LineSegParam,LINESEG_OBJ))0 then
            begin
              Obj2D.LineSeg.Add(Obj);
Извлекает все отрезки из документа
              New(Obj);
            end;
           Obj^:=LineSegIter.ksMoveIterator(’N’);
         end;

333

В примере много ошибок.
1) ksGetObjParam( не работает с идентификаторами типов объектов он работает с идентивикаторами типов параметров.
Например ALLPARAM, SHEET_ALLPARAM
2) В автоматизации в ksGetObjParam нужно передавать интерфейс параметров а не структуру
Интерфейс параметров нужного типа можно получить с помощью метода
KompasObject::GetParamStruct
var
  par : ksLineSegParam;
begin
  par := kompas.GetParamStruct(ko_LineSegParam) );
См примеры в SDK. Step3 функция DrawLineSeg