+ friend class SymbolRule;
+ friend class SymbolDef;
+
+ void addRule(SymbolRule*);
+
+ void addSymbolsToScene();
+ void addSymbolToScene(SymbolInstance* sym);
+ void limitDisplayedSymbols();
+
+ void findItems();
+ void isPositionedShownInner(FGPositioned* pos, SymbolRuleVector& rules);
+ void foundPositionedItem(FGPositioned* pos);
+ void computePositionedPropsAndHeading(FGPositioned* pos, SGPropertyNode* nd, double& heading);
+ void computePositionedState(FGPositioned* pos, string_set& states);
+ void processRoute();
+ void computeWayptPropsAndHeading(flightgear::Waypt* wpt, const SGGeod& pos, SGPropertyNode* nd, double& heading);
+ void processNavRadios();
+ FGNavRecord* processNavRadio(const SGPropertyNode_ptr& radio);
+ void processAI();
+ void computeAIStates(const SGPropertyNode* ai, string_set& states);
+
+
+ bool anyRuleMatches(const std::string& type, const string_set& states) const;
+ void findRules(const std::string& type, const string_set& states, SymbolRuleVector& rules);
+
+ SymbolInstance* addSymbolInstance(const osg::Vec2& proj, double heading, SymbolDef* def, SGPropertyNode* vars);
+ void addLine(osg::Vec2 a, osg::Vec2 b, const osg::Vec4& color);
+ osg::Vec2 projectBearingRange(double bearingDeg, double rangeNm) const;
+ osg::Vec2 projectGeod(const SGGeod& geod) const;
+ bool isProjectedClipped(const osg::Vec2& projected) const;
+ void updateFont();
+
+ void addTestSymbol(const std::string& type, const std::string& states, const SGGeod& pos, double heading, SGPropertyNode* vars);
+ void addTestSymbols();
+
+ std::string _texture_path;
+ unsigned int _textureSize;