#include "stdafx.h" #include "nlohmann\json.hpp" #include "WellObjectAttributesJson.h" #include "DrawOperator/Encoding.h" extern CString GetGdfFontStr(GDFLOGFONTEXT &gdffont); //{ // CPublicFunction& pf = *AfxGetPublicFunction(); // CString strW, strH, strSpace, strClr, str; // pf.FloatToString(strW, gdffont.m_dWidth); // pf.FloatToString(strH, gdffont.m_dHeight); // pf.FloatToString(strSpace, gdffont.m_dTextSpace); // strClr = pf.ColorRefToHex(gdffont.m_color); // // str.Format("W=\"%s\" H=\"%s\" B=\"%d\" I=\"%d\" U=\"%d\" S=\"%d\" PF=\"%s\" FN=\"%s\" C=\"%s\" SP=\"%d\"", // strW, strH, gdffont.m_logFont.lfWeight, gdffont.m_logFont.lfItalic, gdffont.m_logFont.lfUnderline // , gdffont.m_logFont.lfStrikeOut, strSpace, gdffont.m_logFont.lfFaceName, strClr, gdffont.m_nScript); // return str; //} extern CString GetGdfPenStr(GDFLOGPENEXT& pen); //{ // CPublicFunction& pf = *AfxGetPublicFunction(); // CString str,strClr,strbSolid; // if (pen.m_bSolid) // strbSolid = "TRUE"; // else // strbSolid = "FALSE"; // // strClr = pf.ColorRefToHex(pen.m_color); // str.Format("Width=\"%lf\" Solid=\"%s\" Color=\"%s\" Style=\"%s\"", // TransformPixelToPound(pen.m_dWidth),strbSolid, strClr, pen.m_style); // // return str; //} //"标题字体": "W=\"20\" H=\"20\" U=\"0\" I=\"0\" B=\"0\" S=\"0\" PF=\"\" FN=\"宋体\" C=\"#FF0000\" SP=\"0\"", extern void SetStrValueToGdfFont(CString strValue, GDFLOGFONTEXT &gdffont); //{ // CPublicFunction& pf = *AfxGetPublicFunction(); // CString str, strKey, val; // CStringArray strArr; // MakeStrToArr1(strValue, strArr, " "); // for (int ii = 0; ii < strArr.GetSize(); ii++) // { // str = strArr[ii]; // int pos = str.Find("="); // if (pos <1) // { // continue; // } // // strKey = str.Left(pos + 1); // val = str.Right(str.GetLength() - (pos + 1)); // if (strKey == "W") // { // gdffont.m_dWidth = atoi(val); // gdffont.m_logFont.lfWidth = long(gdffont.m_dWidth + 0.5); // } // else if (strKey == "H") // { // gdffont.m_dHeight = atoi(val); // gdffont.m_logFont.lfHeight = long(gdffont.m_dHeight + 0.5); // } // else if (strKey == "U") // gdffont.m_logFont.lfUnderline = atoi(val); // else if (strKey == "I") // gdffont.m_logFont.lfItalic = atoi(val); // else if (strKey == "B") // gdffont.m_logFont.lfWeight = atoi(val); // else if (strKey == "S") // gdffont.m_logFont.lfStrikeOut = atoi(val); // else if (strKey == "PF") // { // } // else if (strKey == "FN") // strcpy(gdffont.m_logFont.lfFaceName, val.GetBuffer()); // else if (strKey == "C") // { // gdffont.m_color = pf.HexToColorRef(val); // } // else if (strKey == "SP") // { // gdffont.m_nScript = atoi(val); // } // } //} //"Color=\"#FF00FF\" Solid=\"FALSE\" Width=\"0.00\" Style=\"Single4\"", extern void SetStrValueToGdfPen(CString strValue, GDFLOGPENEXT& gdfpen); //{ // CPublicFunction& pf = *AfxGetPublicFunction(); // // CString str, strKey, val; // CStringArray strArr; // MakeStrToArr1(strValue, strArr, " "); // for (int ii = 0; ii < strArr.GetSize(); ii++) // { // str = strArr[ii]; // int pos = str.Find("="); // if (pos < 1) // { // continue; // } // // strKey = str.Left(pos + 1); // val = str.Right(str.GetLength() - (pos + 1)); // if (strKey == "Width") // gdfpen.m_dWidth = atof(val);//磅转像素 // else if (strKey == "Style") // gdfpen.m_style = val; // else if (strKey == "Color") // { // gdfpen.m_color = pf.HexToColorRef(val); // } // else if (strKey == "Solid") // { // val.MakeUpper(); // if (val == "TRUE") // { // gdfpen.m_bSolid = TRUE; // if (gdfpen.m_pHowToViewCurve) // delete gdfpen.m_pHowToViewCurve; // gdfpen.m_pHowToViewCurve = NULL; // } // else // { // gdfpen.m_bSolid = FALSE; // // if (AfxGetGlobalWellXy()) // { // //曲线修饰 // CString cmd; // cmd.Format("%s\\%s", LIB_CURVE_TYPE, gdfpen.m_style);//曲线线型 // CLayer* pLayer = AfxGetGlobalWellXy()->FindLayer(cmd); // if (pLayer) // { // if (pLayer->HowToViewCurve) // { // gdfpen.m_pHowToViewCurve = new CHowToViewCurve(); // *gdfpen.m_pHowToViewCurve = *(pLayer->HowToViewCurve); // gdfpen.m_pHowToViewCurve->SetColor(gdfpen.m_color); // } // } // } // } // } // } //} CWellObjectAttributesJson::CWellObjectAttributesJson() { } BOOL CWellObjectAttributesJson::GetWellObjectAttributesJson(ULONGLONG objHandle, int type, int ttype, CString& strJson) { BOOL b = FALSE; try { CWellBaseObj* pWellBase = (CWellBaseObj*)objHandle; if (type == KEP_WELL) { CWellPole* pWell = dynamic_cast(pWellBase); b = CWellObjectAttributesJson::GetWellObjectAttributes(pWell, strJson); } else if (type == KEP_TRACK) { if (ttype == Track_Depth) { CTrackDepth* pDepthTrack = dynamic_cast(pWellBase); if (pDepthTrack == NULL) return b; b = CWellObjectAttributesJson::GetDepthTrackAttributes(pDepthTrack, strJson); } else if (ttype == Track_Text) { CTrackText* pTextTrack = dynamic_cast(pWellBase); if (pTextTrack == NULL) return b; b = CWellObjectAttributesJson::GetTextTrackAttributes(pTextTrack, strJson); } else if (ttype == Track_Lith) { CTrackLith* pLithTrack = dynamic_cast(pWellBase); if (pLithTrack == NULL) return b; b = CWellObjectAttributesJson::GetLithologyTrackAttributes(pLithTrack, strJson); } else if (ttype == Track_Curve) { CTrackCurve* pCurveTrack = dynamic_cast(pWellBase); if (pCurveTrack == NULL) return b; b = CWellObjectAttributesJson::GetCurveTrackAttributes(pCurveTrack, strJson); } } else if (type == KEP_TRACKINDATA) { b = CWellObjectAttributesJson::GetInTrackDataAttributes(pWellBase,ttype, strJson); } } catch (std::exception e) { return FALSE; } return b; } BOOL CWellObjectAttributesJson::SetWellObjectAttributesJson(ULONGLONG objHandle, int type, int ttype, CString& strJson) { BOOL b = FALSE; try { CWellBaseObj* pWellBase = (CWellBaseObj*)objHandle; if (type == KEP_WELL) { CWellPole* pWell = dynamic_cast(pWellBase); b = CWellObjectAttributesJson::SetWellObjectAttributes(pWell, strJson); } else if (type == KEP_TRACK) { if (ttype == Track_Depth) { CTrackDepth* pDepthTrack = dynamic_cast(pWellBase); if (pDepthTrack == NULL) return b; b = CWellObjectAttributesJson::SetDepthTrackAttributes(pDepthTrack, strJson); } else if (ttype == Track_Text) { CTrackText* pTextTrack = dynamic_cast(pWellBase); if (pTextTrack == NULL) return b; b = CWellObjectAttributesJson::SetTextTrackAttributes(pTextTrack, strJson); } else if (ttype == Track_Lith) { CTrackLith* pLithTrack = dynamic_cast(pWellBase); if (pLithTrack == NULL) return b; b = CWellObjectAttributesJson::SetLithologyTrackAttributes(pLithTrack, strJson); } else if (ttype == Track_Curve) { CTrackCurve* pCurveTrack = dynamic_cast(pWellBase); if (pCurveTrack == NULL) return b; b = CWellObjectAttributesJson::SetCurveTrackAttributes(pCurveTrack, strJson); } } else if (type == KEP_TRACKINDATA) { b = CWellObjectAttributesJson::SetInTrackDataAttributes(pWellBase,ttype, strJson); } } catch (std::exception e) { return FALSE; } return b; } BOOL CWellObjectAttributesJson::GetWellObjectAttributes(CWellPole* pWell, CString& strJson) { BOOL b = FALSE; if (pWell) { try { nlohmann::json json; json["type"] = "wellPole"; nlohmann::json baseProp; baseProp[GB2312_To_UTF8("标题")] = GB2312_To_UTF8(pWell->m_strTitle); baseProp[GB2312_To_UTF8("井名")] = GB2312_To_UTF8(pWell->GetWellName()); baseProp[GB2312_To_UTF8("补心海拔")] = pWell->m_fLevel; baseProp[GB2312_To_UTF8("深度比例尺")] = pWell->m_dDepthRatio; baseProp[GB2312_To_UTF8("起始深度")] = pWell->m_dSdep; baseProp[GB2312_To_UTF8("结束深度")] = pWell->m_dEdep; baseProp[GB2312_To_UTF8("左右边距")] = pWell->m_fMarginLR; baseProp[GB2312_To_UTF8("上下边距")] = pWell->m_fMarginTB; nlohmann::json scaleProp; scaleProp[GB2312_To_UTF8("主刻度")] = pWell->m_fMajorSpace; scaleProp[GB2312_To_UTF8("副刻度")] = pWell->m_fMinorSpace; nlohmann::json fontsJson; fontsJson[GB2312_To_UTF8("标题字体")] = GB2312_To_UTF8(GetGdfFontStr(pWell->m_font)); fontsJson[GB2312_To_UTF8("道头字体")] = GB2312_To_UTF8(GetGdfFontStr(pWell->m_fontTrack)); fontsJson[GB2312_To_UTF8("道头刻度字体")] = GB2312_To_UTF8(GetGdfFontStr(pWell->m_fontHeadMark)); fontsJson[GB2312_To_UTF8("深度刻度字体")] = GB2312_To_UTF8(GetGdfFontStr(pWell->m_fontGridMark)); nlohmann::json pensJson; pensJson[GB2312_To_UTF8("井边框线")] = GetGdfPenStr(pWell->m_pen); pensJson[GB2312_To_UTF8("道边框线")] = GetGdfPenStr(pWell->m_penTrack); pensJson[GB2312_To_UTF8("主刻度线")] = GetGdfPenStr(pWell->m_penGridMajor); pensJson[GB2312_To_UTF8("次刻度线")] = GetGdfPenStr(pWell->m_penGridMinor); nlohmann::json jsonProps; jsonProps["baseProperties"] = baseProp; jsonProps[GB2312_To_UTF8("基本属性")] = baseProp; jsonProps[GB2312_To_UTF8("间隔设置")] = scaleProp; jsonProps[GB2312_To_UTF8("字体")] = fontsJson; jsonProps[GB2312_To_UTF8("线属性")] = pensJson; json["properties"] = jsonProps; strJson = json.dump().c_str(); b = TRUE; } catch (nlohmann::json::parse_error& e) { return FALSE; } } return b; } BOOL CWellObjectAttributesJson::SetWellObjectAttributes(CWellPole* pWell, CString& strJson) { BOOL b = FALSE; if (pWell) { nlohmann::json tjson; try { tjson = nlohmann::json::parse(strJson.GetBuffer()); strJson.ReleaseBuffer(); CString str; str = tjson["type"].get().c_str(); if (str != "wellPole") return FALSE; nlohmann::json propsJson; propsJson = tjson["properties"]; nlohmann::json baseJson; baseJson = propsJson[GB2312_To_UTF8("基本属性")]; pWell->m_strTitle = UTF8_To_GB2312(baseJson[GB2312_To_UTF8("标题")].get().c_str()); pWell->SetWellName(UTF8_To_GB2312(baseJson[GB2312_To_UTF8("井名")].get().c_str())); pWell->m_fLevel = baseJson[GB2312_To_UTF8("补心海拔")].get(); pWell->m_fProportion = baseJson[GB2312_To_UTF8("深度比例尺")].get(); pWell->m_dSdep = baseJson[GB2312_To_UTF8("起始深度")].get(); pWell->m_dEdep = baseJson[GB2312_To_UTF8("结束深度")].get(); pWell->m_fMarginLR = baseJson[GB2312_To_UTF8("左右边距")].get(); pWell->m_fMarginTB = baseJson[GB2312_To_UTF8("上下边距")].get(); nlohmann::json scaleProp; scaleProp = baseJson[GB2312_To_UTF8("间隔设置")]; pWell->m_fMajorSpace = scaleProp[GB2312_To_UTF8("主刻度")].get(); pWell->m_fMinorSpace = scaleProp[GB2312_To_UTF8("副刻度")].get(); nlohmann::json fontsJson; fontsJson = baseJson[GB2312_To_UTF8("字体")]; SetStrValueToGdfFont(fontsJson[GB2312_To_UTF8("标题字体")].get().c_str(), pWell->m_font); SetStrValueToGdfFont(fontsJson[GB2312_To_UTF8("道头字体")].get().c_str(), pWell->m_fontTrack); SetStrValueToGdfFont(fontsJson[GB2312_To_UTF8("道头刻度字体")].get().c_str(), pWell->m_fontHeadMark); SetStrValueToGdfFont(fontsJson[GB2312_To_UTF8("深度刻度字体")].get().c_str(), pWell->m_fontGridMark); nlohmann::json pensJson; pensJson = baseJson[GB2312_To_UTF8("字体")]; SetStrValueToGdfPen(pensJson[GB2312_To_UTF8("井边框线")].get().c_str(),pWell->m_pen); SetStrValueToGdfPen(pensJson[GB2312_To_UTF8("道边框线")].get().c_str(), pWell->m_penTrack); SetStrValueToGdfPen(pensJson[GB2312_To_UTF8("主刻度线")].get().c_str(), pWell->m_penGridMajor); SetStrValueToGdfPen(pensJson[GB2312_To_UTF8("次刻度线")].get().c_str(), pWell->m_penGridMinor); } catch (nlohmann::json::parse_error& e) { return FALSE; } b = TRUE; } return b; } BOOL CWellObjectAttributesJson::GetDepthTrackAttributes(CTrackDepth* pTrack, CString& strJson) { CPublicFunction& pf = *AfxGetPublicFunction(); BOOL b = FALSE; try { nlohmann::json json; json["type"] = "depthTrack"; nlohmann::json baseProp; baseProp[GB2312_To_UTF8("标题")] = GB2312_To_UTF8(pTrack->m_strTitle); baseProp[GB2312_To_UTF8("宽度")] = pTrack->m_dTrackWidth; baseProp[GB2312_To_UTF8("填充")] = bool(pTrack->IsFlagBrush()); baseProp[GB2312_To_UTF8("背景颜色")] = pf.ColorRefToHex(pTrack->m_brush.m_color); nlohmann::json scaleJson; scaleJson[GB2312_To_UTF8("显示海拔刻度")] = bool(pTrack->IsMarkLevel()); scaleJson[GB2312_To_UTF8("刻度居左")] = bool(pTrack->IsMarkLeft()); scaleJson[GB2312_To_UTF8("英制单位")] = bool(pTrack->IsMarkFeet()); scaleJson[GB2312_To_UTF8("主刻度")] = pTrack->m_fMajorGrid; scaleJson[GB2312_To_UTF8("副刻度")] = pTrack->m_fMinorGrid; scaleJson[GB2312_To_UTF8("主刻度宽度")] = pTrack->m_fMajorWidth; scaleJson[GB2312_To_UTF8("副刻度宽度")] = pTrack->m_fMinorWidth; scaleJson[GB2312_To_UTF8("主刻度线")] = GetGdfPenStr(pTrack->m_penGridMajor); scaleJson[GB2312_To_UTF8("次刻度线")] = GetGdfPenStr(pTrack->m_penGridMinor); scaleJson[GB2312_To_UTF8("刻度字体")] = GB2312_To_UTF8(GetGdfFontStr(pTrack->m_fontGridMark)); nlohmann::json markJson; markJson[GB2312_To_UTF8("显示深度单位")] = bool(pTrack->IsShowMarkUnit()); markJson[GB2312_To_UTF8("垂直显示标注")] = bool(pTrack->IsMarkArrange()); nlohmann::json jsonProps; jsonProps["baseProperties"] = baseProp; jsonProps[GB2312_To_UTF8("深度道")] = baseProp; jsonProps[GB2312_To_UTF8("刻度")] = scaleJson; jsonProps[GB2312_To_UTF8("标注")] = markJson; json["properties"] = jsonProps; strJson = json.dump().c_str(); b = TRUE; } catch (nlohmann::json::parse_error& e) { return FALSE; } return b; } BOOL CWellObjectAttributesJson::SetDepthTrackAttributes(CTrackDepth* pTrack, CString& strJson) { CPublicFunction& pf = *AfxGetPublicFunction(); BOOL b = FALSE; nlohmann::json tjson; try { tjson = nlohmann::json::parse(strJson.GetBuffer()); strJson.ReleaseBuffer(); CString str; str = tjson["type"].get().c_str(); if (str != "depthTrack") return FALSE; nlohmann::json propsJson; propsJson = tjson["properties"]; nlohmann::json baseJson; baseJson = propsJson[GB2312_To_UTF8("深度道")]; pTrack->m_strTitle = UTF8_To_GB2312(baseJson[GB2312_To_UTF8("标题")].get().c_str()); pTrack->m_dTrackWidth = baseJson[GB2312_To_UTF8("宽度")].get(); pTrack->SetFlagBrush(baseJson[GB2312_To_UTF8("填充")].get()); pTrack->m_brush.m_color = pf.HexToColorRef(baseJson[GB2312_To_UTF8("背景颜色")].get().c_str()); nlohmann::json scaleJson; scaleJson = propsJson[GB2312_To_UTF8("刻度")]; pTrack->SetMarkLevel(scaleJson[GB2312_To_UTF8("显示海拔刻度")].get()); pTrack->SetMarkLeft(scaleJson[GB2312_To_UTF8("刻度居左")].get()); pTrack->SetMarkFeet(scaleJson[GB2312_To_UTF8("英制单位")].get()); pTrack->m_fMajorGrid = scaleJson[GB2312_To_UTF8("主刻度")].get(); pTrack->m_fMinorGrid = scaleJson[GB2312_To_UTF8("副刻度")].get(); pTrack->m_fMajorWidth = scaleJson[GB2312_To_UTF8("主刻度宽度")].get(); pTrack->m_fMinorWidth = scaleJson[GB2312_To_UTF8("副刻度宽度")].get(); SetStrValueToGdfPen(scaleJson[GB2312_To_UTF8("主刻度线")].get().c_str(), pTrack->m_penGridMajor); SetStrValueToGdfPen(scaleJson[GB2312_To_UTF8("次刻度线")].get().c_str(), pTrack->m_penGridMinor); SetStrValueToGdfFont(scaleJson[GB2312_To_UTF8("刻度字体")].get().c_str(), pTrack->m_fontGridMark); nlohmann::json markJson = propsJson[GB2312_To_UTF8("标注")]; pTrack->SetShowMarkUnit(markJson[GB2312_To_UTF8("显示深度单位")].get()); pTrack->SetMarkArrange(markJson[GB2312_To_UTF8("垂直显示标注")].get()); } catch (nlohmann::json::parse_error& e) { return FALSE; } b = TRUE; return b; } BOOL CWellObjectAttributesJson::GetTextTrackAttributes(CTrackText* pTrack, CString& strJson) { CPublicFunction& pf = *AfxGetPublicFunction(); BOOL b = FALSE; try { nlohmann::json json; json["type"] = "textTrack"; nlohmann::json baseProp; baseProp[GB2312_To_UTF8("标题")] = GB2312_To_UTF8(pTrack->m_strTitle); baseProp[GB2312_To_UTF8("宽度")] = pTrack->m_dTrackWidth; baseProp[GB2312_To_UTF8("填充")] = bool(pTrack->IsFlagBrush()); baseProp[GB2312_To_UTF8("背景颜色")] = pf.ColorRefToHex(pTrack->m_brush.m_color); baseProp[GB2312_To_UTF8("道头字体")] = GB2312_To_UTF8(GetGdfFontStr(pTrack->m_font)); nlohmann::json indataJson; indataJson[GB2312_To_UTF8("边框线")] = GetGdfPenStr(pTrack->m_penChild); indataJson[GB2312_To_UTF8("背景颜色")] = pf.ColorRefToHex(pTrack->m_brushChild.m_color); indataJson[GB2312_To_UTF8("字体")] = GB2312_To_UTF8(GetGdfFontStr(pTrack->m_fontChild)); nlohmann::json jsonProps; jsonProps["baseProperties"] = baseProp; jsonProps[GB2312_To_UTF8("文本道")] = baseProp; jsonProps[GB2312_To_UTF8("道内对象设置")] = indataJson; json["properties"] = jsonProps; strJson = json.dump().c_str(); b = TRUE; } catch (nlohmann::json::parse_error& e) { return FALSE; } return b; } BOOL CWellObjectAttributesJson::SetTextTrackAttributes(CTrackText* pTrack, CString& strJson) { CPublicFunction& pf = *AfxGetPublicFunction(); BOOL b = FALSE; nlohmann::json tjson; try { tjson = nlohmann::json::parse(strJson.GetBuffer()); strJson.ReleaseBuffer(); CString str; str = tjson["type"].get().c_str(); if (str != "textTrack") return FALSE; nlohmann::json propsJson; propsJson = tjson["properties"]; nlohmann::json baseJson; baseJson = propsJson[GB2312_To_UTF8("深度道")]; pTrack->m_strTitle = UTF8_To_GB2312(baseJson[GB2312_To_UTF8("标题")].get().c_str()); pTrack->m_dTrackWidth = baseJson[GB2312_To_UTF8("宽度")].get(); pTrack->SetFlagBrush(baseJson[GB2312_To_UTF8("填充")].get()); pTrack->m_brush.m_color = pf.HexToColorRef(baseJson[GB2312_To_UTF8("背景颜色")].get().c_str()); SetStrValueToGdfFont(baseJson[GB2312_To_UTF8("道头字体")].get().c_str(), pTrack->m_font); nlohmann::json indataJson = propsJson[GB2312_To_UTF8("道内对象设置")]; SetStrValueToGdfPen(indataJson[GB2312_To_UTF8("边框线")].get().c_str(), pTrack->m_penChild); pTrack->m_brushChild.m_color = pf.HexToColorRef(indataJson[GB2312_To_UTF8("背景颜色")].get().c_str()); SetStrValueToGdfFont(indataJson[GB2312_To_UTF8("字体")].get().c_str(), pTrack->m_fontChild); } catch (nlohmann::json::parse_error& e) { return FALSE; } b = TRUE; return b; } BOOL CWellObjectAttributesJson::GetLithologyTrackAttributes(CTrackLith* pTrack, CString& strJson) { CPublicFunction& pf = *AfxGetPublicFunction(); BOOL b = FALSE; try { nlohmann::json json; json["type"] = "lithologyTrack"; nlohmann::json baseProp; baseProp[GB2312_To_UTF8("标题")] = GB2312_To_UTF8(pTrack->m_strTitle); baseProp[GB2312_To_UTF8("宽度")] = pTrack->m_dTrackWidth; baseProp[GB2312_To_UTF8("填充")] = bool(pTrack->IsFlagBrush()); baseProp[GB2312_To_UTF8("背景颜色")] = pf.ColorRefToHex(pTrack->m_brush.m_color); baseProp[GB2312_To_UTF8("道头字体")] = GB2312_To_UTF8(GetGdfFontStr(pTrack->m_font)); nlohmann::json indataJson; indataJson[GB2312_To_UTF8("油气性宽度百分比")] = pTrack->m_nWidthOil; indataJson[GB2312_To_UTF8("单个符号厚度")] = pTrack->m_nThick; indataJson[GB2312_To_UTF8("单个符号充填")] = bool(pTrack->IsSingle()); indataJson[GB2312_To_UTF8("是否显示岩性")] = bool(pTrack->IsShowLith()); indataJson[GB2312_To_UTF8("显示岩性颜色")] = bool(pTrack->IsShowColor()); indataJson[GB2312_To_UTF8("显示含油气性")] = bool(pTrack->IsShowOil()); indataJson[GB2312_To_UTF8("控制岩性宽度")] = bool(pTrack->IsWidth()); indataJson[GB2312_To_UTF8("含油气性在道右侧")] = bool(pTrack->IsRightOil()); nlohmann::json jsonProps; jsonProps["baseProperties"] = baseProp; jsonProps[GB2312_To_UTF8("岩性道")] = baseProp; jsonProps[GB2312_To_UTF8("道内对象设置")] = indataJson; json["properties"] = jsonProps; strJson = json.dump().c_str(); b = TRUE; } catch (nlohmann::json::parse_error& e) { return FALSE; } return b; } BOOL CWellObjectAttributesJson::SetLithologyTrackAttributes(CTrackLith* pTrack, CString& strJson) { CPublicFunction& pf = *AfxGetPublicFunction(); BOOL b = FALSE; nlohmann::json tjson; try { tjson = nlohmann::json::parse(strJson.GetBuffer()); strJson.ReleaseBuffer(); CString str; str = tjson["type"].get().c_str(); if (str != "lithologyTrack") return FALSE; nlohmann::json propsJson; propsJson = tjson["properties"]; nlohmann::json baseJson; baseJson = propsJson[GB2312_To_UTF8("岩性道")]; pTrack->m_strTitle = UTF8_To_GB2312(baseJson[GB2312_To_UTF8("标题")].get().c_str()); pTrack->m_dTrackWidth = baseJson[GB2312_To_UTF8("宽度")].get(); pTrack->SetFlagBrush(baseJson[GB2312_To_UTF8("填充")].get()); pTrack->m_brush.m_color = pf.HexToColorRef(baseJson[GB2312_To_UTF8("背景颜色")].get().c_str()); SetStrValueToGdfFont(baseJson[GB2312_To_UTF8("道头字体")].get().c_str(), pTrack->m_font); nlohmann::json indataJson = propsJson[GB2312_To_UTF8("道内对象设置")]; pTrack->m_nWidthOil = indataJson[GB2312_To_UTF8("油气性宽度百分比")].get(); pTrack->m_nThick = indataJson[GB2312_To_UTF8("单个符号厚度")].get() ; pTrack->SetSingle(indataJson[GB2312_To_UTF8("单个符号充填")].get()); pTrack->SetShowLith(indataJson[GB2312_To_UTF8("是否显示岩性")].get()); pTrack->SetShowColor(indataJson[GB2312_To_UTF8("显示岩性颜色")].get()); pTrack->SetShowOil(indataJson[GB2312_To_UTF8("显示含油气性")].get()); pTrack->SetWidth(indataJson[GB2312_To_UTF8("控制岩性宽度")].get()); pTrack->SetRightOil(indataJson[GB2312_To_UTF8("含油气性在道右侧")].get()); } catch (nlohmann::json::parse_error& e) { return FALSE; } b = TRUE; return b; } BOOL CWellObjectAttributesJson::GetCurveTrackAttributes(CTrackCurve* pTrack, CString& strJson) { CPublicFunction& pf = *AfxGetPublicFunction(); BOOL b = FALSE; try { nlohmann::json json; json["type"] = "curveTrack"; nlohmann::json baseProp; baseProp[GB2312_To_UTF8("标题")] = GB2312_To_UTF8(pTrack->m_strTitle); baseProp[GB2312_To_UTF8("宽度")] = pTrack->m_dTrackWidth; baseProp[GB2312_To_UTF8("左值")] = pTrack->m_curve_left; baseProp[GB2312_To_UTF8("右值")] = pTrack->m_curve_right; baseProp[GB2312_To_UTF8("标注格式")] = pTrack->m_strFormat; baseProp[GB2312_To_UTF8("对数")] = bool(pTrack->IsLog()); baseProp[GB2312_To_UTF8("显示道头刻度")] = bool(pTrack->IsShowGridHead()); baseProp[GB2312_To_UTF8("显示道头刻度")] = bool(pTrack->IsShowHeadLine()); baseProp[GB2312_To_UTF8("曲线显示样式")] = pTrack->GetCurveShowMode(); baseProp[GB2312_To_UTF8("道头字体")] = GB2312_To_UTF8(GetGdfFontStr(pTrack->m_font)); nlohmann::json gridJson; gridJson["显示横网格"] = bool(pTrack->IsShowGridX()); gridJson["显示纵网格"] = bool(pTrack->IsShowGridY()); gridJson["主刻度个数"] = pTrack->m_nMajorSpace; gridJson["次刻度个数"] = pTrack->m_nMinorSpace; nlohmann::json fillJson; int nInitfill = -1; if (pTrack->IsFillStyleLeft()) nInitfill = 0; else if (pTrack->IsFillStyleRight()) nInitfill = 1; else if (pTrack->IsFillStyleLeftV()) nInitfill = 2; else if (pTrack->IsFillStyleRightV()) nInitfill = 3; fillJson[GB2312_To_UTF8("充填方式")] = nInitfill; int nInitbrush = 0; if (pTrack->IsFillBrushColor()) { nInitbrush = 1; } else if (pTrack->IsFillBrushPattern() || pTrack->IsFillBrushVector()) { nInitbrush = 2; } else if (pTrack->IsFillBrushGradient()) { nInitbrush = 3; } fillJson[GB2312_To_UTF8("画刷类型")] = nInitbrush; fillJson[GB2312_To_UTF8("充填曲线")] = pTrack->m_strFillSideCurve; fillJson[GB2312_To_UTF8("显示充填曲线")] = bool(pTrack->IsShowFillSideCurve()); fillJson[GB2312_To_UTF8("充填颜色")] = pf.ColorRefToHex(pTrack->m_fillClr); fillJson[GB2312_To_UTF8("充填道头")] = bool(pTrack->IsShowHeadFill()); fillJson[GB2312_To_UTF8("充填符号")] = pTrack->m_strFillSymbol; nlohmann::json curveStyleJson; int tstyle = 1; if (pTrack->IsShowStep()) tstyle = 2; curveStyleJson["样式"] = tstyle; curveStyleJson["线型"] = GetGdfPenStr(pTrack->m_penCurve); nlohmann::json symbolJson; symbolJson["散点"] = bool(pTrack->IsShowDot()); symbolJson["符号"] = pTrack->m_strDotSymbol; symbolJson["符号边框颜色"] = pf.ColorRefToHex(pTrack->m_dotBorderClr); symbolJson["符号填充颜色"] = pf.ColorRefToHex(pTrack->m_dotFillClr); symbolJson["符号大小"] = pTrack->m_dotSize.cx; nlohmann::json jsonProps; jsonProps["baseProperties"] = baseProp; jsonProps[GB2312_To_UTF8("曲线道")] = baseProp; jsonProps[GB2312_To_UTF8("网格")] = gridJson; jsonProps[GB2312_To_UTF8("充填")] = fillJson; jsonProps[GB2312_To_UTF8("曲线风格")] = curveStyleJson; jsonProps[GB2312_To_UTF8("符号")] = symbolJson; json["properties"] = jsonProps; strJson = json.dump().c_str(); b = TRUE; } catch (nlohmann::json::parse_error& e) { return FALSE; } return b; } BOOL CWellObjectAttributesJson::SetCurveTrackAttributes(CTrackCurve* pTrack, CString& strJson) { BOOL b = FALSE; return b; } BOOL CWellObjectAttributesJson::GetInTrackDataAttributes(CWellBaseObj* pDataBase, int inTrackType, CString& strJson) { BOOL b = FALSE; return b; } BOOL CWellObjectAttributesJson::SetInTrackDataAttributes(CWellBaseObj* pDataBase, int inTrackType, CString& strJson) { BOOL b = FALSE; return b; }