На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Богдан (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Богдан
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Отображение заголовка диалога свойств объекта
 
[QUOTE]Andrey Gheleznyakov написал:
Инструментарий использует те же диалоги, что и ГИС Панорама (вызывает АПИ функции из dll). Скорее всего, у Вас разные данные (карты).[/QUOTE]
А возможно ли отображение в этом диалоге номенклатуры для планов городов?
Отображение заголовка диалога свойств объекта
 
Здравствуйте.
[CODE]// Поиск объекта с вызовом диалога
  typedef long int (WINAPI SELECTOBJECTPROC)(HOBJ object, MAPDFRAME frame, long int place, OBJECTFORM form, TASKPARM parm);
  SELECTOBJECTPROC pSelectObjectProc = (SELECTOBJECTPROC)GetProcAddress(hLibrary, "formCheckAndSelectObject");

[/CODE]В диалоговом окне показа объекта нужно чтобы в заголовке показывалась номенклатура. В 12 тулсете сейчас показывается иногда номеклатура, иногда название, а в Панораме всегда номенклатура. Нам тоже нужно показывать всегда номенклатуру, каким образом можно этого достичь?
Проблемы с нарезкой объекта при mapCommitWithPlace
 
Спасибо!
Не могли бы Вы отписаться в этой ветке по готовности?
Проблемы с нарезкой объекта при mapCommitWithPlace
 
Во вложении данные, на которых тестируется проблема.

11 версия, с ней работает как ожидается:
Линковка с gisacces.lib.
Версия, судя по подписи gisacces.dll, 11.13.12.23

12 версия, с ней другое поведение:
Линковка с gisuacces.lib (у gisuacces.dll подпись 12.5.2.16)  и libgislink12x32.lib


Приведу фрагмент тестового кода добавления нового объекта (с перемещением объектов те же проблемы):

[CODE]//...
std::vector<CIC_Point3DD>& vPoints = sxfLayer.GetCurrentSelectionVector();
/********************************************************
Метод для создания произвольного объекта на пользовательской карте*
********************************************************/
auto CreateObject = [&]()->bool
{
//0.Ищем куда мы попали
CIC_Rect3DD siteRect, polyRect;
CSXFLayer::CSITE* targetSite = NULL;

auto minmaxX = std::minmax_element(vPoints.begin(), vPoints.end(), [](CIC_Point3DD & pt, CIC_Point3DD & pt2){ return pt.x < pt2.x; });
auto minmaxY = std::minmax_element(vPoints.begin(), vPoints.end(), [](CIC_Point3DD & pt, CIC_Point3DD & pt2){ return pt.y < pt2.y; });

polyRect.SetRect(minmaxX.first->x, minmaxY.second->y, minmaxX.second->x, minmaxY.first->y);
polyRect.NormalizeGeoRect();

//Работаем только с sits у которых классификатор "Errors"
std::vector<CSXFLayer::CSITE*> vErrorsSites = GetErrorsSites(&sxfLayer);

auto sitesIter = vErrorsSites.begin();
auto alternativeSite = vErrorsSites.end();

for(; sitesIter != vErrorsSites.end(); ++sitesIter)
{
(*sitesIter)->GetBoundRect(siteRect);
if(siteRect.RectInRectGeo(&polyRect))
break;
if(siteRect.IntersectGeoRect(&siteRect,&polyRect))
{
if(alternativeSite == vErrorsSites.end())
alternativeSite = sitesIter;
else
{
CIC_Rect3DD currentAlternativeRect;
(*alternativeSite)->GetBoundRect(currentAlternativeRect);
currentAlternativeRect.IntersectGeoRect(¤tAlternativeRect, &polyRect);
if(siteRect.GetSquare() > currentAlternativeRect.GetSquare())
alternativeSite = sitesIter;
}
}
}
HMAP targetHmap;
HSITE targetHsite;

if(sitesIter != vErrorsSites.end())
{
targetHmap = (*sitesIter)->GetMap();
targetHsite = (*sitesIter)->GetSite();
}
else if(alternativeSite != vErrorsSites.end())
{
targetHmap = (*alternativeSite)->GetMap();
targetHsite = (*alternativeSite)->GetSite();
}
else
{
ASSERT(0);
return false;
}

//1.Cоздать пустой объект пользовательской карты
HOBJ hNewObj = mapCreateSiteObject(targetHmap, targetHsite);
if(hNewObj)
{
//2.Добавить метрику
for(size_t i = 0; i < vPoints.size(); ++i)
mapAppendPointPlane3D(hNewObj, vPoints.at(i).y, vPoints.at(i).x, vPoints.at(i).z);


//3.Сформировать описание нового объекта
mapRegisterObject(hNewObj, pObjInfo->m_rscObjectInfo.Code, pObjInfo->m_rscObjectInfo.Local);

//Добавить текст подписи если это соответствующий тип
if(pObjInfo->m_rscObjectInfo.Local == LOCAL_TITLE)
{
#ifdef UNICODE
mapPutTextUnicode(hNewObj, pObjInfo->m_sTitleLabel.GetString(), 0);
#else
mapPutText(hNewObj, pObjInfo->m_sTitleLabel.GetString(), 0);
#endif

//Если в метрике одна точка - посчитать вторую
if(vPoints.size() == 1)
{
double dLenghtInMicrons = mapGetTextLengthMkm(hNewObj, 0);
double dMapScale = mapGetMapScale(targetHmap) /  1000000.;

double dLength = dLenghtInMicrons * dMapScale;

CIC_Point3DD secondP(vPoints.at(0));
secondP.x += dLength;//TODO(optional): подумать о работе с углами
mapAppendPointPlane3D(hNewObj, secondP.y, secondP.x, secondP.z);
}
}

//4.Добавить семантики
std::vector<CMapObjectData::SEM_VARIANT> vSemantics = pObjInfo->GetSemantics();
for_each(vSemantics.begin(), vSemantics.end(), [&] (const CMapObjectData::SEM_VARIANT& semantic)
{
switch(semantic.m_storedType)
{
case CMapObjectData::SEM_VARIANT::SEM_TYPE_DOUBLE:
mapAppendSemanticDouble(hNewObj, semantic.m_iSemCode, semantic.m_value.doubleValue);
break;

case CMapObjectData::SEM_VARIANT::SEM_TYPE_LONG:
mapAppendSemanticLong(hNewObj, semantic.m_iSemCode, semantic.m_value.longValue);
break;

case CMapObjectData::SEM_VARIANT::SEM_TYPE_STR:
#ifdef  UNICODE
mapAppendSemanticUnicode(hNewObj, semantic.m_iSemCode, semantic.m_value.strValue, _tcslen(semantic.m_value.strValue));
#else
mapAppendSemantic(hNewObj, semantic.m_iSemCode, semantic.m_value.strValue, _tcslen(semantic.m_value.strValue));
#endif
break;
default: ASSERT(0);
}
});

//5.Сommit в карту
mapCommitWithPlace(hNewObj);

//6.Освободить память
mapFreeObject(hNewObj);
}
else
return false;

return true;
};

[/CODE]
Проблемы с нарезкой объекта при mapCommitWithPlace
 
Здравствуйте, возникла проблема при использовании mapCommitWithPlace в 12й версии тулкита. Далее по порядку:

1. Открываем первый sit файл через
mapOpenAnyData(pszFilePath, GENERIC_READ | GENERIC_WRITE, &iError);

2. Открываем еще n sit файлов через
mapOpenSiteForMapUn(hMap, pszFilePath, GENERIC_READ | GENERIC_WRITE);
где hMap = возвращаемому вызовом в п.1 значению

3. Как-либо модифицируем метрику объекта / создаем новый, а в конце вызываем
mapCommitWithPlace(hNewObj);

При использовании gislib11 (первоначально разработка велась с ней) все работало корректно - при перемещении объекта таким образом, что часть объекта залезала на территорию одного сита, а часть на территорию другого - он распиливался на границе на 2 части и каждая часть добавлялась на свой сит.
Сейчас купили GISToolActive12Free и соответственно перешли на gislib12, и теперь остается только часть объекта, а вторая половина пропадает.
Пока нет идей в какую сторону думать, может кто-нибудь подскажет?
Страницы: 1



© КБ Панорама, 1991-2022

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности