rapidjson

生成

std::string slicedResultToJsonString(const cura::FffGcodeWriter::SlicedMeshInfo& slicedResult)
{
    float size_x = INT2MM(slicedResult.boundInfo.max.x - slicedResult.boundInfo.min.x);
    float size_y = INT2MM(slicedResult.boundInfo.max.y - slicedResult.boundInfo.min.y);
    float size_z = INT2MM(slicedResult.boundInfo.max.z - slicedResult.boundInfo.min.z);

    rapidjson::Document d;
    d.SetObject();
    rapidjson::Document::AllocatorType& allocator = d.GetAllocator();          // 获取分配器

    d.AddMember("size_x ", size_x, allocator);                                 // 切片后模型尺寸x
    d.AddMember("size_y ", size_y, allocator);                                 // 切片后模型尺寸y
    d.AddMember("size_z ", size_z, allocator);                                 // 切片后模型尺寸z
    d.AddMember("supplies_usage", slicedResult.totalFilamentUsed, allocator);  // 所需耗材
    d.AddMember("layers", slicedResult.totalLayers, allocator);                // 切片后模型层数
    d.AddMember("estimate", slicedResult.totalTimes, allocator);               // 预估打印时间,单位秒,
    d.AddMember("machine_name", "Anycubic", allocator);                        // 机器类型名称

    rapidjson::StringBuffer strBuf;
    rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);
    d.Accept(writer);

    return strBuf.GetString();
}

遍历

int loadJson(const std::string& sliceParam, Settings& settings)
{
    rapidjson::Document document;
    document.Parse(sliceParam.c_str());
    if (document.HasParseError())
    {
        return 1;
    }
	for (rapidjson::Value::ConstMemberIterator itr = document.MemberBegin(); itr != document.MemberEnd(); itr++)
	{
		rapidjson::Value jKey;
		rapidjson::Value jValue;
		rapidjson::Document::AllocatorType allocator;
		jKey.CopyFrom(itr->name, allocator);
		jValue.CopyFrom(itr->value, allocator);

        std::string name;
        std::string value_string;

		if (jKey.IsString())
		{
            name = jKey.GetString();
		}


        if (jValue.IsString())
        {
            value_string = jValue.GetString();
        }
        else if (jValue.IsTrue())
        {
            value_string = "true";
        }
        else if (jValue.IsFalse())
        {
            value_string = "false";
        }
        else if (jValue.IsNumber())
        {
            std::ostringstream ss;
            ss << jValue.GetDouble();
            value_string = ss.str();
        }
        else
        {
            return 1;
        }
		
        settings.add(name, value_string);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值