Добрый день. Если сейчас нет возможности отобразить зарамочное оформление "целиком", возможно есть отдельные функции, помогающие отобразить, например, геодезическую рамку. Подскажите, пожалуйста, её название если она есть
Функция mapAddMarginalRepresentationSite используется для формирования простого зарамочного оформления. Обрабатывает ограниченный набор ключевых слов: ".RSCLINE", ".RSCFRAME", ".GEOTEXT", ".RSCTEXT", ".DIRECTION". Для получения расширенного зарамочного оформления необходимо использовать функцию frmCreateBorderPro. Текст данной функции доступен в виде исходных текстов (frmapi\frmapim.cpp), пример использования в файле (preprint\frmbuild.cpp).
Михаил Федосеев написал (в письме): С этого момента обсуждение существенно не продвинулось. Мне было предложено воспользоваться методом frmCreateBorderPro. Однако существуют 2 проблемы: - во первых метод отказывается принимать HSITE, созданный в обсуждаемом нами примере. HSITE основной карты принимается, но никакого зарамочного оформления не отображается. - во вторых параметры данного метода не подразумевают указания области карты, для которой нужно создать зарамочное оформление, что является для нас критичным. Возможно указать только номер листа карты.
1. Полное зарамочное оформление может быть построено только по карте, открытой в отдельный HMAP (preprint\frmbuild.cpp):
Код
// Вид карты: -1 - SIT c рамкой
mapregex.FlagRealPlace = -1;
HMAP fmap = mapCreateMapPro(RotateSit, rscfilename, &mapregex, &listreg,
&sheet, sheetname, 0, 0);
2. Карта зарамочного оформления создается отдельно в виде безразмерного листа:
Код
// Вид карты: 1 - SIT (безразмерный лист)
mapregex.FlagRealPlace = 1;
HMAP fmap = mapCreateMapPro(FrameSit, rscfilename, &mapregex, &listreg,
&sheet, sheetname, 0, 0);
if (fmap != 0)
{
// Установить параметры DATUM и Ellipsoid
mapSetSiteDatum(fmap, fmap, &datum);
mapSetSiteEllipsoidParameters(fmap, fmap, &ellipsoid);
mapSaveSite(fmap, fmap, 1);
mapCloseData(fmap);
}
3. Вычислить угол поворота карты (для топокарт):
Код
if (RegionCheckBox->Checked == true)
{
angle = 0.;
// Откроем главную карту повёрнутого листа RotateSit
HMAP hSheet = mapOpenDataUn(RotateSit);
if (hSheet != 0)
{
// Вычислить угол поворота для нового листа
frmGetRotateAngle(hSheet, 1, &angle);
// Копирование и поворот объектов на RotateSit
TurnSheetRegion(angle, rsit);
mapCloseSiteForMap(Hmap, rsit);
// Добавим карту зарамочного оформления
frmsit = mapOpenSiteForMapUn(hSheet, FrameSit, 0);
if (frmsit)
{
frmCreateBorderPro(hSheet,1,frmsit,frmsit,FrameTemp,0,LogFile,0);
mapCloseSiteForMap(hSheet, frmsit);
}
// Установка FlagRealPlace = 1, чтобы после поворота пересчитались габариты листа(всего района)
if (mapGetSiteInfoPro(hSheet, hSheet, &mapregex, &listreg, &sheet,1) != 0)
{
mapregex.FlagRealPlace = 1;
mapUpdateSiteInfoEx(hSheet, hSheet, &mapregex, &listreg, 1, &datum, &ellipsoid, 0);
}
// Закрыть документ
mapCloseData(hSheet);
}
}
4. Повернуть карту:
Код
if (frmTurnSheet(TaskParm, Hmap, i, angle, rsit) == 0)
{
mapCloseSiteForMap(Hmap, rsit); // 15/12/17
mapCloseSiteForMap(Hmap, frmsit);
break;
}