Вставка группы объектов в чертёж

Автор Death, 06.06.07, 15:54:51

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

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

Death

Каждый раз, программно добавляя объекты в чертёж (линии, окружности, ...), я сталкиваюсь с проблемой: при вызове UnDo добавленные объекты удаляются по-одному. Ctrl+z нужно нажать столько раз, сколько новых объектов вставлено, да ещё не всегда удаётся отменить все добавленные объекты таким образом... Имеется ли возможность вставить несколько новых объектов в чертёж таким образом, чтобы они все удалялись по одному нажатию Ctrl+z?

Death

Пришлось разбираться самому. Вот решение данной проблемы: в моём случае необходимость предоставить пользователю

возможность отменить сразу все добавленные библиотекой объекты связана с тем, что я добавляю объекты с целью

обратить внимание на определённые области чертежа. Поэтому удаление этих объектов не должно быть обременительным

для пользователя. Я нашёл два решения этой задачи. Первый вариант - выделяем все добавленные объекты, чтобы они

могли быть удалены одним нажатием клавиши del:

//Сохраняем указатели на все добавленные объекты
long pline1 = doc.ksLineSeg(10, 10, 50, 50, 0);
long pline2 = doc.ksLineSeg(60, 60, 100, 100, 0);

//Теперь добавляем наши объекты в группу.
//Здесь "0" вместо указателя на группу говорит о том, что объекты добавляются в группу выделения
doc.ksAddObjGroup(0, pline1);
doc.ksAddObjGroup(0, pline2);


Вариант второй связан с созданием врЕменной группы объектов:

//Создаём группу. Единица в качестве аргумента говорит о том, что группа временная
long pgroup = doc.ksNewGroup(1);

//Теперь вставляем наши объекты в чертёж. Все они автоматически становятся членами группы
doc.ksLineSeg(10, 10, 50, 50, 0);
doc.ksLineSeg(60, 60, 100, 100, 0);

//Говорим, что заполнение группы завершено
doc.ksEndGroup();

//Этот вызов необходим для того, чтобы временная группа не была удалена сразу после завершения работы библиотеки
doc.ksStoreTmpGroup(pgroup);


Теперь все объекты, являющиеся членами временной группы, будут удалены одним нажатием Ctrl+z.