mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
cfiController
This commit is contained in:
@@ -23,7 +23,8 @@ void CfiController::unLockAccessToCfiXML()
|
||||
mtxAccess.unlock();
|
||||
}
|
||||
|
||||
bool CfiController::parsingCfiXML()
|
||||
|
||||
bool CfiController::parsingCfiXML(QMap<int, CfiObject>& mapCfiObjects)
|
||||
{
|
||||
QMutexLocker locker(&mtxAccess);
|
||||
|
||||
@@ -32,15 +33,91 @@ bool CfiController::parsingCfiXML()
|
||||
|
||||
QString pathCfiListFile = updateController->getPathAdditionalFile(cfiListFileName);
|
||||
|
||||
QDomDocument docCfiListDOM;
|
||||
if(! Tools::loadXMLtoDOM(pathCfiListFile, &docCfiListDOM))
|
||||
QDomDocument docCfiListDOM_Orig;
|
||||
if(! Tools::loadFileXMLtoDOM(pathCfiListFile, &docCfiListDOM_Orig))
|
||||
return false;
|
||||
|
||||
QDomElement CFIObjectsElement = docCfiListDOM.firstChildElement("CFIObjects");
|
||||
if(!parsingCfiXML_DOM(docCfiListDOM_Orig, mapCfiObjects))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CfiController::updateCfiXML(const QByteArray &array)
|
||||
{
|
||||
QMutexLocker locker(&mtxAccess);
|
||||
|
||||
if(!updateController)
|
||||
return false;
|
||||
|
||||
//Исходный файл (на Сервере)
|
||||
QString pathCfiListFile = updateController->getPathAdditionalFile(cfiListFileName);
|
||||
QDomDocument docCfiListDOM_Orig;
|
||||
if(! Tools::loadFileXMLtoDOM(pathCfiListFile, &docCfiListDOM_Orig))
|
||||
return false;
|
||||
|
||||
//Новый файл с изменениями (поступивший от клиента) в формате массива
|
||||
QDomDocument docCfiListDOM_New;
|
||||
if(! Tools::loadByteArrayXMLtoDOM(array, &docCfiListDOM_New))
|
||||
return false;
|
||||
|
||||
QMap<int, CfiObject> mapCfiObjects_Orig;
|
||||
QMap<int, CfiObject> mapCfiObjects_New;
|
||||
|
||||
if(!parsingCfiXML_DOM(docCfiListDOM_Orig, mapCfiObjects_Orig))
|
||||
return false;
|
||||
|
||||
if(!parsingCfiXML_DOM(docCfiListDOM_New, mapCfiObjects_New))
|
||||
return false;
|
||||
|
||||
if(!merge2map(mapCfiObjects_Orig, mapCfiObjects_New))
|
||||
return false;
|
||||
|
||||
return saveNewCfiListFile(mapCfiObjects_Orig);
|
||||
}
|
||||
|
||||
/*
|
||||
void CfiController::test()
|
||||
{
|
||||
QString pathCfiListFile = updateController->getPathAdditionalFile("/new_CfiList.xml");
|
||||
QByteArray array;
|
||||
Tools::loadFileXMLtoByteArray(pathCfiListFile, array);
|
||||
updateCfiXML(array);
|
||||
}
|
||||
*/
|
||||
|
||||
Vector3dDouble CfiController::getXYZfromElement(QDomElement element)
|
||||
{
|
||||
Vector3dDouble vector3D;
|
||||
QDomNamedNodeMap nodeMap = element.attributes();
|
||||
vector3D.setX(germanLocale->toDouble(nodeMap.namedItem("x").nodeValue()));
|
||||
vector3D.setY(germanLocale->toDouble(nodeMap.namedItem("y").nodeValue()));
|
||||
vector3D.setZ(germanLocale->toDouble(nodeMap.namedItem("z").nodeValue()));
|
||||
return vector3D;
|
||||
}
|
||||
|
||||
Vector2dDouble CfiController::getXYfromElement(QDomElement element)
|
||||
{
|
||||
Vector2dDouble vector2D;
|
||||
QDomNamedNodeMap nodeMap = element.attributes();
|
||||
vector2D.setX(germanLocale->toDouble(nodeMap.namedItem("x").nodeValue()));
|
||||
vector2D.setY(germanLocale->toDouble(nodeMap.namedItem("y").nodeValue()));
|
||||
return vector2D;
|
||||
}
|
||||
|
||||
double CfiController::roundDoubleVal(double value, int cntNumAfterPoint)
|
||||
{
|
||||
return round(value * pow(10, cntNumAfterPoint)) / pow(10, cntNumAfterPoint);
|
||||
}
|
||||
|
||||
bool CfiController::parsingCfiXML_DOM(QDomDocument &domDoc, QMap<int, CfiObject>& mapCfiObjects)
|
||||
{
|
||||
QDomElement CFIObjectsElement = domDoc.firstChildElement("CFIObjects");
|
||||
if(CFIObjectsElement.isNull())
|
||||
return false;
|
||||
|
||||
listCfiObjects.clear();
|
||||
mapCfiObjects.clear();
|
||||
|
||||
//Parsing
|
||||
QDomElement oneCFIObjectElement = CFIObjectsElement.firstChildElement();
|
||||
@@ -57,6 +134,8 @@ bool CfiController::parsingCfiXML()
|
||||
{
|
||||
CfiObject cfiObj;
|
||||
|
||||
cfiObj.setDomElement(oneCFIObjectElement);
|
||||
|
||||
//атрибуты CFIObject
|
||||
QDomNamedNodeMap nodeMapOneCFIObject = oneCFIObjectElement.attributes();
|
||||
cfiObj.setId(nodeMapOneCFIObject.namedItem("id").nodeValue().toInt());
|
||||
@@ -85,15 +164,15 @@ bool CfiController::parsingCfiXML()
|
||||
setCamPos.state = nodeMapSetcamerapos.namedItem("state").nodeValue();
|
||||
setCamPos.panelName = nodeMapSetcamerapos.namedItem("panelName").nodeValue();
|
||||
|
||||
setCamPos.prevCamOffsetMARposY = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("prevCamOffsetMARposY").nodeValue());
|
||||
setCamPos.camOffsetMARposY = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("camOffsetMARposY").nodeValue());
|
||||
setCamPos.prevCharControlerHeight = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("prevCharControlerHeight").nodeValue());
|
||||
setCamPos.charControlerHeight = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("charControlerHeight").nodeValue());
|
||||
setCamPos.FOV = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("FOV").nodeValue());
|
||||
setCamPos.moveSpeed = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("moveSpeed").nodeValue());
|
||||
setCamPos.projectionSize = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("projectionSize").nodeValue());
|
||||
setCamPos.offset = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("offset").nodeValue());
|
||||
setCamPos.prevPlayerRot = germanLocale->toFloat(nodeMapSetcamerapos.namedItem("prevPlayerRot").nodeValue());
|
||||
setCamPos.prevCamOffsetMARposY = germanLocale->toDouble(nodeMapSetcamerapos.namedItem("prevCamOffsetMARposY").nodeValue());
|
||||
setCamPos.camOffsetMARposY = germanLocale->toDouble(nodeMapSetcamerapos.namedItem("camOffsetMARposY").nodeValue());
|
||||
setCamPos.prevCharControlerHeight = germanLocale->toDouble(nodeMapSetcamerapos.namedItem("prevCharControlerHeight").nodeValue());
|
||||
setCamPos.charControlerHeight = germanLocale->toDouble(nodeMapSetcamerapos.namedItem("charControlerHeight").nodeValue());
|
||||
setCamPos.FOV = germanLocale->toDouble(nodeMapSetcamerapos.namedItem("FOV").nodeValue());
|
||||
setCamPos.moveSpeed = germanLocale->toDouble(nodeMapSetcamerapos.namedItem("moveSpeed").nodeValue());
|
||||
setCamPos.projectionSize = germanLocale->toDouble(nodeMapSetcamerapos.namedItem("projectionSize").nodeValue());
|
||||
setCamPos.offset = germanLocale->toDouble(nodeMapSetcamerapos.namedItem("offset").nodeValue());
|
||||
setCamPos.prevPlayerRot = germanLocale->toDouble(nodeMapSetcamerapos.namedItem("prevPlayerRot").nodeValue());
|
||||
|
||||
//childs setcamerapos
|
||||
QDomElement loc_Element;
|
||||
@@ -122,28 +201,55 @@ bool CfiController::parsingCfiXML()
|
||||
|
||||
cfiObj.setSetCameraPos(setCamPos);
|
||||
|
||||
listCfiObjects.append(cfiObj);
|
||||
mapCfiObjects.insert(cfiObj.getId(), cfiObj);
|
||||
}
|
||||
}while (! (oneCFIObjectElement = oneCFIObjectElement.nextSiblingElement()).isNull());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QVector3D CfiController::getXYZfromElement(QDomElement element)
|
||||
bool CfiController::merge2map(QMap<int, CfiObject> &mapCfiObjects_orig, QMap<int, CfiObject> &mapCfiObjects_new)
|
||||
{
|
||||
QVector3D vector3D;
|
||||
QDomNamedNodeMap nodeMap = element.attributes();
|
||||
vector3D.setX(germanLocale->toFloat(nodeMap.namedItem("x").nodeValue()));
|
||||
vector3D.setY(germanLocale->toFloat(nodeMap.namedItem("y").nodeValue()));
|
||||
vector3D.setZ(germanLocale->toFloat(nodeMap.namedItem("z").nodeValue()));
|
||||
return vector3D;
|
||||
for(CfiObject cfiObj : mapCfiObjects_new)
|
||||
{
|
||||
int id = cfiObj.getId();
|
||||
|
||||
if(mapCfiObjects_orig.contains(id))
|
||||
{//Такой есть
|
||||
if(cfiObj.getIsChanged())
|
||||
{//Заменяем
|
||||
mapCfiObjects_orig.take(id);
|
||||
|
||||
cfiObj.setIsChanged(false);
|
||||
cfiObj.resetIsChangedInDomElement();
|
||||
mapCfiObjects_orig.insert(id, cfiObj);
|
||||
}
|
||||
}
|
||||
else
|
||||
{//Добавляем
|
||||
cfiObj.setIsChanged(false);
|
||||
cfiObj.resetIsChangedInDomElement();
|
||||
mapCfiObjects_orig.insert(id, cfiObj);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QVector2D CfiController::getXYfromElement(QDomElement element)
|
||||
bool CfiController::saveNewCfiListFile(QMap<int, CfiObject> &mapCfiObjects)
|
||||
{
|
||||
QVector2D vector2D;
|
||||
QDomNamedNodeMap nodeMap = element.attributes();
|
||||
vector2D.setX(germanLocale->toFloat(nodeMap.namedItem("x").nodeValue()));
|
||||
vector2D.setY(germanLocale->toFloat(nodeMap.namedItem("y").nodeValue()));
|
||||
return vector2D;
|
||||
QDomDocument commonDOM;
|
||||
if(! Tools::loadFileXMLtoDOM(":/resources/blankXML/ListCFI.xml", &commonDOM))
|
||||
return false;
|
||||
|
||||
QDomNode listNode = commonDOM.namedItem("CFIObjects");
|
||||
|
||||
for(CfiObject cfiObj : mapCfiObjects)
|
||||
{
|
||||
listNode.appendChild(cfiObj.getDomElement());
|
||||
}
|
||||
|
||||
QString pathCfiListFile = updateController->getPathAdditionalFile(cfiListFileName);
|
||||
|
||||
return Tools::saveDOMtoFileXML(pathCfiListFile, &commonDOM);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user