• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Итератор по временной группе

Автор Vladimir, 21.09.07, 18:13:47

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

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

Vladimir

Привет All.

Вопрос такой.
Функция contourObj = ksMakeEncloseContours(0, mx, my) вернула мне объект "временная группа".
А как перебрать все элементарные объекты, из которых эта временная группа состоит?

Делаю итератор.
ksIterator tgIter = (ksIterator)kompas.GetIterator();
if (tgIter.ksCreateIterator(ldefin2d.ALL_OBJ, contourObj))
{
  if (doc.ksExistObj(obj = tgIter.ksMoveIterator("F")) == 1)
  {
    do
    {
      int type = doc.ksGetObjParam(obj, 0, 0);
      .......
    }
    while (doc.ksExistObj(obj = tgIter.ksMoveIterator("N")) == 1);
  }
tgIter.ksDeleteIterator();

Этот итератор проходит только один цикл и выдает объект с type=26 (CONTOUR_OBJ),
т.е. получается, что моя временная группа состоит из единственного объекта - контура.

А дальше, что делать с этим контуром?
Делаю внутри еще один вложенный итератор, т.е. пытаюсь определить,
из чего состоит этот контур - вложенный итератор не делает ни одного цикла,
т.е. из какиз объектов систоит контур, узнать не получается.

Как народ в этом случае поступает, если есть временная группа (ksMakeEncloseContours)
и нужно узнать, из чего она состоит?


333

Нужно декомпозировать или разрушить контур.
Тогда можно будет ходить по объектам
см DecomposeObj и ksDestroyObjects

ТрындецЪ

Сколько лет прошло, а проблема актуальна и в 18 версии.
Какого @@@ тогда в SDK написали, что итератор может "передвигаться" по объектам контура?! >:(
Я тут полдня мучаюсь, думаю, что я сам дурак, а оно вон что...

Есть IContour, там можно бегать по объектам и ничего не рушить.
+ Благодарностей: 1

333

Возможность получения параметров простых сегментов контура есть в API7
см IContour::Segment
см также IContour::TmpObjects - Преобразование сегментов контура во временные объекты

в функции DecomposeObj есть недокументированный уровень разрушения 7
он также делает преобразование сегментов контура в 2D объекты 
+ Благодарностей: 1

ТрындецЪ

Про IContour я знал, просто хотел итератором обойтись и АПИ5. Придется АПИ7 подключать. Мне не нужны разрушенные контуры, просто координаты с отрезков собрать. Дальше разберусь, спасибо за отклики и подсказки.!