[QUOTE]
Михаил Федосеев написал (в письме):
С этого момента обсуждение существенно не продвинулось. Мне было предложено воспользоваться методом frmCreateBorderPro. Однако существуют 2 проблемы:
- во первых метод отказывается принимать HSITE, созданный в обсуждаемом нами примере. HSITE основной карты принимается, но никакого зарамочного оформления не отображается.
- во вторых параметры данного метода не подразумевают указания области карты, для которой нужно создать зарамочное оформление, что является для нас критичным. Возможно указать только номер листа карты.
[/QUOTE]
1. Полное зарамочное оформление может быть построено только по карте, открытой в отдельный HMAP (preprint\frmbuild.cpp):
[CODE] // Вид карты: -1 - SIT c рамкой
mapregex.FlagRealPlace = -1;
HMAP fmap = mapCreateMapPro(RotateSit, rscfilename, &mapregex, &listreg,
&sheet, sheetname, 0, 0);
[/CODE]2. Карта зарамочного оформления создается отдельно в виде безразмерного листа:
[CODE] // Вид карты: 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);
}[/CODE]3. Вычислить угол поворота карты (для топокарт):
[CODE] 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);
}
}
[/CODE]4. Повернуть карту:
[CODE] if (frmTurnSheet(TaskParm, Hmap, i, angle, rsit) == 0)
{
mapCloseSiteForMap(Hmap, rsit); // 15/12/17
mapCloseSiteForMap(Hmap, frmsit);
break;
}
[/CODE]5.
[CODE] // НАНЕСТИ ЗАРАМОЧНОЕ ОФОРМЛЕНИЕ
if (CreateBorder(Hmap, i, rsit, frmsit, angle) == 0)
{
mapCloseSiteForMap(Hmap, rsit); // 15/12/17
mapCloseSiteForMap(Hmap, frmsit);
break;
}
[/CODE][CODE]int TFormFrameBuild::CreateBorder(HMAP hmap, int sheet, HSITE rotsit, HSITE frmsit, double angle) // 15/12/17
{
if (MessageCheck->Checked == true)
return frmCreateBorderPro(Hmap,sheet,rotsit,frmsit,FrameTemp,angle,LogFile,2);
return frmCreateBorderPro(Hmap,sheet,rotsit,frmsit,FrameTemp,angle,LogFile,0);
}
[/CODE]
6. Нанести легенды...