Создание контура по штриховке

Автор Sprinter500, 12.02.15, 17:59:33

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

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

Sprinter500

Добрый день!

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

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

#1
У штриховки своя копия границ, её просто нужно получить.
ksDocument2D.ksDuplicateBoundaries или ksDocument2D.ksDuplicateBoundariesEx
+ Благодарностей: 1

Sprinter500

А дальше что с этой копией делать? Вкратце схему, алгоритм можешь разъяснить?


Sprinter500

Ну прямо краткость - сестра таланта. :)

Как считать? Второй вариант и думаю даже предпочтительнее - воссоздать контур штриховки отрезками, дугами, кривыми, по которым она была образована.


Sprinter500

Sabahs, а как восстановить внешний контур по штриховке не подскажешь? Хотя бы основные этапы: что через что и какие интерфейсы нужны.


Sprinter500

Это как не сказать совсем ничего.

Sprinter500

Как указатель на границу, возвращаемый этой командой использовать для создания контура?

Вставить временную группу в документ или создать итератор получить все элементы и создать заново.
Первый вариант можно сделать одной строчкой.
+ Благодарностей: 1

Sprinter500

А временная группа вставляется командой ksStoreTmpGroup?

То есть грубо алгоритм следующий?
1. Определяется номер объекта выделенной штриховки/заливки
2. Через ksDuplicateBoundaries получаем дубликат границ
3. Создаем временную группу по дубликату границ
4. Создаем контур, используя временную группу.

Так или я не понял? Может что упустил еще?

+ Благодарностей: 1

Sprinter500

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

Или я чего-то не понял?

Справку читать - это не царское дело?
ksStoreTmpGroup - Функция StoreTmpGroup записывает все объекты временной группы в модель (т.е. фиксирует ее). Сама же группа получает статус постоянной.
+ Благодарностей: 1

Sprinter500

Так я и так читаю. Получается что с помощью этой команды все исходные объекты появятся сами? Я думал это виртуальные объекты.

Они виртуальные пока временные.
+ Благодарностей: 1

Sprinter500

А уникальный номер штриховки как лучше получить?:
1. Перебором штриховок - и если выделенная то получаем номер. Получается что нужно API7 вдобавок использовать. Чтобы без перебора нужно использовать SAFEARRAY, но я с ним так и не разобрался.
2. По позиции курсора над штриховкой. А тут как?


Sprinter500

А координаты указателя мыши (курсора) надо полагать так?:

long ksGetCursorPosition (double* x, double* y, long type);
Входной параметр:
type - признак, какие координаты возвращать:
0 - без учета привязок,
1 - с учетом привязок.
Выходные параметры:
x, y - координаты курсора (в миллиметрах).
Возвращаемое значение:
1 - в случае удачного завершения, 0  - в случае неудачи.


Только меня что смущает: почему выходные параметры X и Y находятся в скобках у функции как аргумент?

Илия я опять чего-то недопонял?