25 #include <unordered_set>
43 def->component(proxies.commonStorage);
44 def->component(proxies.priorKnowledge);
45 def->component(proxies.workingMemory);
46 def->component(proxies.longtermMemory);
48 def->optional(properties.mongoDbName,
50 "Name of snapshot Mongo database to load files into");
51 def->optional(properties.dryRun,
"p.dryRun",
"If true, don't actually change anything.");
54 def->optional(properties.importObjects,
"p.obj.00_DoImport",
"Whether to import objects.");
56 def->optional(properties.objectsRepository,
57 "p.obj.10_Repository",
58 "Repository such as ArmarXObjects containing the object classes.");
60 def->optional(properties.datasetName,
61 "p.obj.20_DatasetName",
62 "If set, only the given dataset in ArmarXObjects is imported.\n"
63 "Otherwise (default), all objects are imported.");
64 def->optional(properties.className,
66 "If set, only the given dataset in ArmarXObjects is imported.\n"
67 "Otherwise (default), all objects are imported.");
70 def->optional(properties.importScenes,
"p.scenes.00_DoImport",
"Whether to import scenes.");
71 def->optional(properties.scenesDirectory,
72 "p.scenes.10_Directory",
73 "Directory containing the scene files (Scene_*.json).");
74 def->optional(properties.sceneNames,
76 "Scenes to load by name. Comma separated. ({scene_name}.json).");
91 memoryx::PersistentObjectClassSegmentBasePrx objectClassesSegment =
92 proxies.priorKnowledge->getObjectClassesSegment();
96 importer.
dryRun = properties.dryRun;
98 if (properties.dryRun)
103 if (properties.importObjects)
106 std::vector<armarx::ObjectInfo> objectInfos;
107 if (properties.datasetName.size() > 0)
109 if (properties.className.size() > 0)
111 ARMARX_INFO <<
"Finding " << properties.datasetName << properties.className
113 if (
auto info = finder.
findObject(properties.datasetName, properties.className))
115 objectInfos.push_back(info.value());
120 ARMARX_INFO <<
"Finding objects in dataset " << properties.datasetName
130 ARMARX_INFO <<
"Found " << objectInfos.size() <<
" object classes in "
131 << properties.objectsRepository <<
".";
133 ARMARX_INFO <<
"Importing " << objectInfos.size() <<
" object classes ...";
135 objectInfos, gridFileManager, objectClassesSegment, properties.mongoDbName);
138 if (properties.importScenes)
140 const std::filesystem::path scenesDir =
142 std::unordered_set<std::string> scenes;
143 if (not properties.sceneNames.empty())
145 bool trim =
true, removeEmpty =
true;
146 const auto scenesTmp =
armarx::split(properties.sceneNames,
",", trim, removeEmpty);
148 scenes = std::unordered_set<std::string>(scenesTmp.begin(), scenesTmp.end());
151 if (not scenes.empty())
153 ARMARX_INFO <<
"The following scenes will be loaded (if available): "
154 << std::vector<std::string>(scenes.begin(), scenes.end());
157 ARMARX_INFO <<
"Importing scenes in " << scenesDir;
159 proxies.longtermMemory,
160 proxies.workingMemory,
161 objectClassesSegment,
179 return "ArmarXObjectsImporter";
182 ArmarXObjectsImporter::Properties::Properties() :
183 objectsRepository(
armarx::ObjectFinder::DefaultObjectsPackageName),
184 scenesDirectory(
armarx::ObjectFinder::DefaultObjectsPackageName +
"/scenes")