Габаритный прямоугольник ассоциативного вида

Автор Maxxx, 05.08.13, 17:58:26

« назад - далее »

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

Maxxx

Подскажите кто-нибудь, как получить габаритный прямоугольник ассоциативного вида на чертеже и его координаты. Заранее спасибо!

05.08.13, 18:19:07 #1 Последнее редактирование: 05.08.13, 18:39:05 от Sabahs
Попробуйте функцию GetObjGabaritRect, должна вернуть координаты прямоугольника, координаты привязки вида, есть в свойствах вида.

Maxxx

С координатами привязки - проблемм нет.
пробовал GetObjGabaritRect - если в нее передавать в качестве параметра reference вид - возвращает координаты все нули. я сделал так - прошелся итератором по всему виду, добавил в группу, сделал GetObjGabaritRect для группы - все получилось. но я понимаю что это обходной путь и есть решение правильнее....


У меня, возвращает.
+ Благодарностей: 1

Maxxx

Доброе утро! Спасибо за помощь. Вот мой код. Использую АПИ 5.
            DOC2D := ksDocument2D(iKompas.ActiveDocument2D);
            if DOC2D = nil then
            begin
              iKompas.ksMessage('Должен быть активен чертеж');
              Exit;
            end;

            // указатель на текущий вид
            refView := DOC2D.ksGetReferenceDocumentPart(3);

            if refView = 0 then Exit;

            viewParam := ksAssociationViewParam(iKompas.GetParamStruct(ko_AssociationViewParam));
            DOC2D.ksGetObjParam(refView,viewParam,ASSOCIATION_VIEW_PARAM);


            refGr := DOC2D.ksNewGroup(0);



            iter := ksIterator(iKompas.GetIterator);
            iter.ksCreateIterator(ALL_OBJ, refView);
            refObj:=iter.ksMoveIterator('F');
            while refObj > 0 do
             begin
               refObj:=iter.ksMoveIterator('N');
               try
                DOC2D.ksAddObjGroup(refGr,refObj);
               except

               end;               
             end;

           

            rectP:=ksRectParam(iKompas.GetParamStruct(ko_RectParam));
            DOC2D.ksGetObjGabaritRect(refGr,rectP);
            mp:=ksMathPointParam(rectP.GetpTop);
         
            y:= mp.y+10;
            x:=mp.x;
Вот так я получил...
А вот так - не работает:

            rectP:=ksRectParam(iKompas.GetParamStruct(ko_RectParam));
            if DOC2D.ksGetObjGabaritRect(refView, rectP) = 1 then
            iKompas.ksMessage('2');  // - Сюда не попадаем
            mp:=ksMathPointParam(rectP.GetpDot);


попробую сейчас на АПИ 7. Спасибо за наводку

На API7 компактнее, я сейчас на API5 в крайних случаях, что то получаю.
+ Благодарностей: 1

Maxxx

ув. Sabans, еще маленький вопросик - покажите пож-та как добрались до активного iKompasDocument2D.
делаю так -

iDOC := IKompasDocument(iKompas7.ActiveDocument);
            if iDOC = nil then Exit;
            if iDOC.DocumentType <> 1 then Exit;

вот тут теперь нужно получить iDOC2D. В справке написано что можно получить из iKompasDocument с помощью IUnknown::QueryInterface. Никак не найду как это реализовать. Заранее спасибо!



Maxxx


IgorRUtver

Если не затруднит, подскажите аналог ksGetObjGabaritRect для API7 пожалуйста.

Попробуйте, аналог данного метода при использовании API экспортных функций - GetObjGabaritRect.
http://forum.ascon.ru/index.php/topic,24856.msg179759.html#msg179759
+ Благодарностей: 1

IgorRUtver

Упс, невнимательно слайдик смотрел, прошу прощения, спасибо.