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

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

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

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

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

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

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

Сохранение в файл объектов фрагментов (COLORFILL)

Автор Alkanaft, 23.09.03, 20:01:02

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

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

Alkanaft

Всем привет.
Имеется фрагмент содержащий объекты, созданные при помощи следующего кода:
ksColouring(Param.LayColor);    // Param.LayColor – содержит цвет заливки
ksRectangle(&TmpRectPar, 0);   // TmpRectPar – описание параметров пр-ка
EndObj();
Необходимо сохранить в файл некоторые параметры этих объектов, например длину и высоту пр-ка. Пишу следующий код:

//Создаем итератор по объектам «Заливка»
iFillGrp = CreateIterator (COLORFILL_OBJ, 0);
reference ColorObj=MoveIterator ( iFillGrp , 'F' );
do
{
        //Получаем копию границы заливки в виде контура
reference Grp=ksDuplicateBoundaries( ColorObj );  
//Создаем итератор для движения по полученной группе объектов (контуру)  
        BoundariesIter = CreateIterator ( CONTOUR_OBJ, Grp );
       reference contour=MoveIterator ( BoundariesIter, 'F' );
        do
        {
              //Разрушаем контур, т.к. к контуру нельзя применить итератор
reference DecomposeGrp=DecomposeObj( contour, 1, 1, 1 );
//Создаем итератор для движения по полученному контуру
                  LineIter = CreateIterator ( ALL_OBJ, DecomposeGrp );
              reference line=MoveIterator ( LineIter, 'F' );
              do
              {
                  //Получаем параметры отрезков, составляющих контур и сохраняем
их в файл
GetObjParam(line, &lineparam, sizeof(LineSegParam), ALLPARAM);
                  line=MoveIterator ( LineIter, 'N' );
                    GetObjParam(line, &lineparam1, sizeof(LineSegParam), ALLPARAM);
Ang=Angle(lineparam.x1, lineparam.y1, lineparam.x2, lineparam.y2);
outfile<<"H"<outfile<<"W"<outfile<<"A"<                 }while( ExistObj(line = MoveIterator( LineIter, 'N' )) );
              ClearGroup(DecomposeGrp);
        }while( ExistObj(contour = MoveIterator( BoundariesIter, 'N' )) );
}while( ExistObj(ColorObj = MoveIterator( iFillGrp, 'N' )) );

В принципе это все работает, но очень медленно. В среднем фрагмент содержит от 3000 до 8000 таких объектов и поэтому запись в файл занимает несколько  минут (5-10) на Pentium III - 800 МГц.  Может, кто подскажет, как проще получить информацию об объекте заливка, точнее о том объекте, который она залила.