#include <ligo_config.h>
Nevrax France
Definition at line 47 of file ligo_config.h.
Primitive class accessors | |
bool | canBeChild (const NLLIGO::IPrimitive &child, const NLLIGO::IPrimitive &parent) |
bool | canBeRoot (const NLLIGO::IPrimitive &primitive) |
virtual void | errorMessage (const char *format,...) |
const std::vector< std::string > & | getContextString () const |
const CPrimitiveClass * | getPrimitiveClass (const char *className) const |
const CPrimitiveClass * | getPrimitiveClass (const NLLIGO::IPrimitive &primitive) const |
NLMISC::CRGBA | getPrimitiveColor (const NLLIGO::IPrimitive &primitive) |
const std::vector< CPrimitiveConfigurations > & | getPrimitiveConfiguration () const |
bool | getPropertyString (std::string &result, const char *filename, xmlNodePtr xmlNode, const char *propName) |
bool | isPrimitiveDeletable (const NLLIGO::IPrimitive &primitive) |
bool | isPrimitiveLinked (const NLLIGO::IPrimitive &primitive) |
void | syntaxError (const char *filename, xmlNodePtr xmlNode, const char *format,...) |
bool | initPrimitiveClass (const char *filename) |
std::map< std::string, std::string > | _ContextFilesLookup |
std::vector< std::string > | _Contexts |
std::map< std::string, CPrimitiveClass > | _PrimitiveClasses |
std::vector< CPrimitiveConfigurations > | _PrimitiveConfigurations |
Public Member Functions | |
bool | read (const char *fileName) |
bool | readPrimitiveClass (const char *fileName) |
virtual | ~CLigoConfig () |
Data Fields | |
Public value | |
float | CellSize |
Size of a cell of the ligoscape in meter. | |
std::string | PrimitiveClassFilename |
The ligo class file. | |
float | Snap |
Snap precision for vertex position checking in meter. | |
uint | ZoneSnapShotRes |
Zone snap shot resolution. |
|
Definition at line 51 of file ligo_config.h.
00051 { } |
|
Definition at line 242 of file ligo_config.cpp. References NLLIGO::CPrimitiveClass::DynamicChildren, NLLIGO::CPrimitiveClass::GeneratedChildren, NLLIGO::IPrimitive::getParent(), getPrimitiveClass(), NLLIGO::IPrimitive::getPropertyByName(), and uint.
00243 { 00244 // Get the child class 00245 string childClassName; 00246 if (child.getPropertyByName ("class", childClassName)) 00247 { 00248 // Get the parent class 00249 const CPrimitiveClass *parentClass = getPrimitiveClass (parent); 00250 if (parentClass) 00251 { 00252 // Search for the child class 00253 uint i; 00254 for (i=0; i<parentClass->DynamicChildren.size (); i++) 00255 { 00256 // The same ? 00257 if (parentClass->DynamicChildren[i].ClassName == childClassName) 00258 break; 00259 } 00260 00261 if (i<parentClass->DynamicChildren.size ()) 00262 return true; 00263 00264 for (i=0; i<parentClass->GeneratedChildren.size (); i++) 00265 { 00266 // The same ? 00267 if (parentClass->GeneratedChildren[i].ClassName == childClassName) 00268 break; 00269 } 00270 00271 return (i<parentClass->GeneratedChildren.size ()); 00272 } 00273 else 00274 return true; 00275 } 00276 else 00277 { 00278 // Only if it is a root node or parent class doesn't exist 00279 string parentClassName; 00280 return ( (parent.getParent () == NULL) || (!parent.getPropertyByName ("class", parentClassName) ) ); 00281 } 00282 } |
|
Definition at line 286 of file ligo_config.cpp. References NLLIGO::CPrimitiveClass::DynamicChildren, getPrimitiveClass(), NLLIGO::IPrimitive::getPropertyByName(), and uint.
00287 { 00288 // Get the child class 00289 string childClassName; 00290 if (child.getPropertyByName ("class", childClassName)) 00291 { 00292 // Get the parent class 00293 const CPrimitiveClass *parentClass = getPrimitiveClass ("root"); 00294 if (parentClass) 00295 { 00296 // Search for the child class 00297 uint i; 00298 for (i=0; i<parentClass->DynamicChildren.size (); i++) 00299 { 00300 // The same ? 00301 if (parentClass->DynamicChildren[i].ClassName == childClassName) 00302 break; 00303 } 00304 00305 return (i<parentClass->DynamicChildren.size ()); 00306 } 00307 else 00308 return true; 00309 } 00310 else 00311 { 00312 // Root class doesn't exist 00313 return ( !getPrimitiveClass ("root") ); 00314 } 00315 } |
|
Definition at line 346 of file ligo_config.cpp. References buffer, format, and nlwarning. Referenced by readPrimitiveClass(), and syntaxError().
|
|
Definition at line 360 of file ligo_config.cpp. References _Contexts.
00361 { 00362 return _Contexts; 00363 } |
|
Definition at line 400 of file ligo_config.cpp. References _PrimitiveClasses.
00401 { 00402 std::map<std::string, CPrimitiveClass>::const_iterator ite = _PrimitiveClasses.find (className); 00403 if (ite != _PrimitiveClasses.end ()) 00404 { 00405 return &(ite->second); 00406 } 00407 return NULL; 00408 } |
|
Definition at line 367 of file ligo_config.cpp. References _PrimitiveClasses, NLLIGO::IPrimitive::getParent(), and NLLIGO::IPrimitive::getPropertyByName(). Referenced by canBeChild(), canBeRoot(), and NLLIGO::IPrimitive::read().
00368 { 00369 const CPrimitiveClass *primClass = NULL; 00370 00371 // Get property class 00372 string className; 00373 if (primitive.getPropertyByName ("class", className)) 00374 { 00375 std::map<std::string, CPrimitiveClass>::const_iterator ite = _PrimitiveClasses.find (className); 00376 if (ite != _PrimitiveClasses.end ()) 00377 { 00378 primClass = &(ite->second); 00379 } 00380 } 00381 00382 // Not found ? 00383 if (!primClass) 00384 { 00385 // Root ? 00386 if (!primitive.getParent ()) 00387 { 00388 std::map<std::string, CPrimitiveClass>::const_iterator ite = _PrimitiveClasses.find ("root"); 00389 if (ite != _PrimitiveClasses.end ()) 00390 { 00391 primClass = &(ite->second); 00392 } 00393 } 00394 } 00395 return primClass; 00396 } |
|
Definition at line 188 of file ligo_config.cpp. References _PrimitiveClasses, DEFAULT_PRIMITIVE_COLOR, and NLLIGO::IPrimitive::getPropertyByName().
00189 { 00190 // Get the class 00191 string className; 00192 if (primitive.getPropertyByName ("class", className)) 00193 { 00194 // Get the class 00195 std::map<std::string, CPrimitiveClass>::iterator ite = _PrimitiveClasses.find (className); 00196 if (ite != _PrimitiveClasses.end ()) 00197 { 00198 return ite->second.Color; 00199 } 00200 } 00201 return DEFAULT_PRIMITIVE_COLOR; 00202 } |
|
Definition at line 114 of file ligo_config.h. References _PrimitiveConfigurations.
00115 { 00116 return _PrimitiveConfigurations; 00117 } |
|
Definition at line 319 of file ligo_config.cpp. References syntaxError(). Referenced by NLLIGO::CPrimitiveConfigurations::read(), NLLIGO::CPrimitiveClass::read(), and readPrimitiveClass().
00320 { 00321 // Call the CIXml version 00322 if (!CIXml::getPropertyString (result, xmlNode, propName)) 00323 { 00324 // Output a formated error 00325 syntaxError (filename, xmlNode, "Missing XML node property (%s)", propName); 00326 return false; 00327 } 00328 return true; 00329 } |
|
|
|
Definition at line 224 of file ligo_config.cpp. References _PrimitiveClasses, and NLLIGO::IPrimitive::getPropertyByName().
00225 { 00226 // Get the class 00227 string className; 00228 if (primitive.getPropertyByName ("class", className)) 00229 { 00230 // Get the class 00231 std::map<std::string, CPrimitiveClass>::iterator ite = _PrimitiveClasses.find (className); 00232 if (ite != _PrimitiveClasses.end ()) 00233 { 00234 return ite->second.Deletable; 00235 } 00236 } 00237 return false; 00238 } |
|
Definition at line 206 of file ligo_config.cpp. References _PrimitiveClasses, and NLLIGO::IPrimitive::getPropertyByName().
00207 { 00208 // Get the class 00209 string className; 00210 if (primitive.getPropertyByName ("class", className)) 00211 { 00212 // Get the class 00213 std::map<std::string, CPrimitiveClass>::iterator ite = _PrimitiveClasses.find (className); 00214 if (ite != _PrimitiveClasses.end ()) 00215 { 00216 return ite->second.LinkBrothers; 00217 } 00218 } 00219 return false; 00220 } |
|
Load the config file. Can throw some exception if file doesn't exist or is malformed. This file will try to open the file ligo class description file (XML) using the LigoClass as file name. It will try first to load directly the file and then to lookup the file in NLMISC::CPath. Definition at line 42 of file ligo_config.cpp. References _Contexts, _PrimitiveClasses, _PrimitiveConfigurations, NLMISC::CConfigFile::CVar::asFloat(), NLMISC::CConfigFile::CVar::asInt(), NLMISC::CConfigFile::CVar::asString(), NLMISC::CConfigFile::getVar(), NLMISC::CConfigFile::load(), PrimitiveClassFilename, readPrimitiveClass(), Snap, uint, and ZoneSnapShotRes.
00043 { 00044 // The CF 00045 CConfigFile cf; 00046 00047 // Load and parse the file 00048 cf.load (fileName); 00049 00050 // Read the parameters 00051 CConfigFile::CVar &cell_size = cf.getVar ("cell_size"); 00052 CellSize = cell_size.asFloat (); 00053 CConfigFile::CVar &snap = cf.getVar ("snap"); 00054 Snap = snap.asFloat (); 00055 CConfigFile::CVar &snapShot = cf.getVar ("zone_snapeshot_res"); 00056 ZoneSnapShotRes = (uint)snapShot.asInt (); 00057 CConfigFile::CVar &primitiveClassFilename = cf.getVar ("primitive_class_filename"); 00058 PrimitiveClassFilename= primitiveClassFilename.asString (); 00059 00060 // Clear the previous classes 00061 _Contexts.clear(); 00062 _PrimitiveClasses.clear(); 00063 _PrimitiveConfigurations.clear(); 00064 00065 // Read the primitive class name 00066 if (!PrimitiveClassFilename.empty()) 00067 { 00068 return readPrimitiveClass (PrimitiveClassFilename.c_str()); 00069 } 00070 return true; 00071 } |
|
This file will read the file ligo class description file (XML) using the LigoClass as file name. It will try first to load directly the file and then to lookup the file in NLMISC::CPath. Definition at line 75 of file ligo_config.cpp. References _ContextFilesLookup, _Contexts, _PrimitiveClasses, _PrimitiveConfigurations, errorMessage(), file, getPropertyString(), nlassert, and syntaxError(). Referenced by read().
00076 { 00077 // File exist ? 00078 string filename = _fileName; 00079 filename = CPath::lookup (_fileName, false, false, false); 00080 if (filename.empty()) 00081 filename = _fileName; 00082 00083 // The context strings 00084 set<string> contextStrings; 00085 00086 // Read the document 00087 CIFile file; 00088 if (file.open (filename)) 00089 { 00090 try 00091 { 00092 // XML stream 00093 CIXml xml; 00094 xml.init (file); 00095 00096 // Get the root node 00097 xmlNodePtr root = xml.getRootNode (); 00098 nlassert (root); 00099 00100 // Check the header 00101 if (strcmp ((const char*)root->name, "NEL_LIGO_PRIMITIVE_CLASS") == 0) 00102 { 00103 // Get the first primitive description 00104 xmlNodePtr primitive = CIXml::getFirstChildNode (root, "PRIMITIVE"); 00105 if (primitive) 00106 { 00107 do 00108 { 00109 // Get the primitive name 00110 std::string name; 00111 if (getPropertyString (name, filename.c_str(), primitive, "CLASS_NAME")) 00112 { 00113 // Add the primitive 00114 pair<std::map<std::string, CPrimitiveClass>::iterator, bool> insertResult = 00115 _PrimitiveClasses.insert (std::map<std::string, CPrimitiveClass>::value_type (name, CPrimitiveClass ())); 00116 if (insertResult.second) 00117 { 00118 if (!insertResult.first->second.read (primitive, filename.c_str(), name.c_str (), contextStrings, _ContextFilesLookup, *this)) 00119 return false; 00120 } 00121 else 00122 { 00123 syntaxError (filename.c_str(), root, "Class (%s) aready defined", name.c_str ()); 00124 } 00125 } 00126 else 00127 return false; 00128 } 00129 while ((primitive = CIXml::getNextChildNode (primitive, "PRIMITIVE"))); 00130 } 00131 00132 // Add the context strings 00133 { 00134 set<string>::iterator ite = contextStrings.begin (); 00135 while (ite != contextStrings.end ()) 00136 { 00137 if (*ite != "default") 00138 _Contexts.push_back (*ite); 00139 ite++; 00140 } 00141 _Contexts.push_back ("default"); 00142 } 00143 00144 // Get the first primitive configuration 00145 _PrimitiveConfigurations.reserve (CIXml::countChildren (root, "CONFIGURATION")); 00146 xmlNodePtr configuration = CIXml::getFirstChildNode (root, "CONFIGURATION"); 00147 if (configuration) 00148 { 00149 do 00150 { 00151 // Get the configuration name 00152 std::string name; 00153 if (getPropertyString (name, filename.c_str(), configuration, "NAME")) 00154 { 00155 // Add the configuration 00156 _PrimitiveConfigurations.resize (_PrimitiveConfigurations.size()+1); 00157 if (!_PrimitiveConfigurations.back().read (configuration, filename.c_str(), name.c_str (), *this)) 00158 return false; 00159 } 00160 else 00161 return false; 00162 } 00163 while ((configuration = CIXml::getNextChildNode (configuration, "CONFIGURATION"))); 00164 } 00165 00166 // Ok 00167 return true; 00168 } 00169 else 00170 { 00171 syntaxError (filename.c_str(), root, "Wrong root node, should be NEL_LIGO_PRIMITIVE_CLASS"); 00172 } 00173 } 00174 catch (Exception &e) 00175 { 00176 errorMessage ("File read error (%s):%s", filename.c_str(), e.what ()); 00177 } 00178 } 00179 else 00180 { 00181 errorMessage ("Can't open the file %s for reading.", filename.c_str()); 00182 } 00183 return false; 00184 } |
|
Definition at line 333 of file ligo_config.cpp. References buffer, errorMessage(), and format. Referenced by getPropertyString(), NLLIGO::CPrimitiveConfigurations::read(), NLLIGO::CPrimitiveClass::read(), and readPrimitiveClass().
00334 { 00335 va_list args; 00336 va_start( args, format ); 00337 char buffer[1024]; 00338 vsnprintf( buffer, 1024, format, args ); 00339 va_end( args ); 00340 00341 errorMessage ("(%s), node (%s), line (%d) :\n%s", filename, xmlNode->name, (int)xmlNode->content, buffer); 00342 } |
|
Definition at line 131 of file ligo_config.h. Referenced by readPrimitiveClass(). |
|
Definition at line 128 of file ligo_config.h. Referenced by getContextString(), read(), and readPrimitiveClass(). |
|
Definition at line 125 of file ligo_config.h. Referenced by getPrimitiveClass(), getPrimitiveColor(), isPrimitiveDeletable(), isPrimitiveLinked(), read(), and readPrimitiveClass(). |
|
Definition at line 134 of file ligo_config.h. Referenced by getPrimitiveConfiguration(), read(), and readPrimitiveClass(). |
|
Size of a cell of the ligoscape in meter.
Definition at line 69 of file ligo_config.h. Referenced by NLLIGO::CZoneTemplate::build(), NLLIGO::CZoneEdge::build(), NLLIGO::CZoneEdge::buildMatrix(), NLLIGO::CZoneEdge::invert(), and NLLIGO::CZoneEdge::isSymetrical(). |
|
The ligo class file.
Definition at line 78 of file ligo_config.h. Referenced by read(). |
|
Snap precision for vertex position checking in meter.
Definition at line 72 of file ligo_config.h. Referenced by NLLIGO::CZoneTemplate::build(), NLLIGO::CZoneEdge::build(), NLLIGO::CZoneEdge::isSymetrical(), NLLIGO::CZoneEdge::isTheSame(), and read(). |
|
Zone snap shot resolution.
Definition at line 75 of file ligo_config.h. Referenced by read(). |