Ejemplo n.º 1
0
int SettingRegistry::loadJSONsettings(std::string filename, SettingsBase* settings_base, bool warn_base_file_duplicates)
{
    rapidjson::Document json_document;
    
    log("Loading %s...\n", filename.c_str());

    int err = loadJSON(filename, json_document);
    if (err) { return err; }

    if (json_document.HasMember("inherits") && json_document["inherits"].IsString())
    {
        std::string child_filename;
        bool found = getDefinitionFile(json_document["inherits"].GetString(), filename, child_filename);
        if (!found)
        {
            return -1;
        }
        err = loadJSONsettings(child_filename, settings_base, warn_base_file_duplicates); // load child first
        if (err)
        {
            return err;
        }
        err = loadJSONsettingsFromDoc(json_document, settings_base, false);
    }
    else 
    {
        err = loadJSONsettingsFromDoc(json_document, settings_base, warn_base_file_duplicates);
    }

    if (json_document.HasMember("metadata") && json_document["metadata"].IsObject())
    {
        const rapidjson::Value& json_metadata = json_document["metadata"];
        if (json_metadata.HasMember("machine_extruder_trains") && json_metadata["machine_extruder_trains"].IsObject())
        {
            const rapidjson::Value& json_machine_extruder_trains = json_metadata["machine_extruder_trains"];
            for (rapidjson::Value::ConstMemberIterator extr_train_iterator = json_machine_extruder_trains.MemberBegin(); extr_train_iterator != json_machine_extruder_trains.MemberEnd(); ++extr_train_iterator)
            {
                int extruder_train_nr = atoi(extr_train_iterator->name.GetString());
                if (extruder_train_nr < 0)
                {
                    continue;
                }
                const rapidjson::Value& json_id = extr_train_iterator->value;
                if (!json_id.IsString())
                {
                    continue;
                }
                const char* id = json_id.GetString();
                if (extruder_train_nr >= (int) extruder_train_ids.size())
                {
                    extruder_train_ids.resize(extruder_train_nr + 1);
                }
                extruder_train_ids[extruder_train_nr] = std::string(id);
            }
        }
    }

    return err;
}
Ejemplo n.º 2
0
int SettingRegistry::loadExtruderJSONsettings(unsigned int extruder_nr, SettingsBase* settings_base)
{
    if (extruder_nr >= extruder_train_ids.size())
    {
        return -1;
    }
    
    std::string definition_file;
    bool found = getDefinitionFile(extruder_train_ids[extruder_nr], "", definition_file);
    if (!found)
    {
        return -1;
    }
    bool warn_base_file_duplicates = false;
    return loadJSONsettings(definition_file, settings_base, warn_base_file_duplicates);
}
Ejemplo n.º 3
0
int SettingRegistry::loadJSONsettings(std::string filename)
{
    rapidjson::Document json_document;
    
    int err = loadJSON(filename, json_document);
    if (err) { return err; }
    
    if (json_document.HasMember("inherits"))
    {
        std::string filename_copy = std::string(filename.c_str()); // copy the string because dirname(.) changes the input string!!!
        char* filename_cstr = (char*)filename_copy.c_str();
        int err = loadJSONsettings(std::string(dirname(filename_cstr)) + std::string("/") + json_document["inherits"].GetString());
        if (err) { return err; }
        return loadJSONsettingsFromDoc(json_document, false);
    }
    else 
    {
        return loadJSONsettingsFromDoc(json_document, true);
    }
    
}