hi Umut, I might have a short trip to Ankara soon. I am not going to disclose the company :) Nick
http://www.linkedin.com/in/tnick Sent from Devlet, Ankara, Turkey On Fri, Jan 15, 2010 at 4:58 PM, Ümit Uzun <[email protected]> wrote: > Merhaba Nikolov :) > > I would have been glad to meet you, but I stay in Ankara :( I think you > are on graphical prject in Istanbul. Which company works based on 3D > environment and simulation on Istanbul? > > Nice to meet you. > Saygilar :D > > Ümit Uzun > > > 2010/1/15 Trajce Nikolov <[email protected]> > > Merhaba Umut :), >> >> its the google mail stuff, I guess based on the ip. I am originaly half >> macedonian half czech, at present in Istanbul on a project. No idea how long >> will stay here. >> >> If you are in Istanbul we can meet to have a beer >> >> Nick >> >> >> http://www.linkedin.com/in/tnick >> Sent from Devlet, Ankara, Turkey >> >> On Fri, Jan 15, 2010 at 4:36 PM, Ümit Uzun <[email protected]> wrote: >> >>> Hi Nikolov, >>> >>> What does >>> "http://www.linkedin.com/in/tnick<http://www.linkedin.com/in/tnick>Sent >>> from Devlet, Ankara, Turkey " mean. Is this undefined spam type? Your >>> location changing too fast. I am crious because I am from Turkey, too :D >>> >>> Regards. >>> >>> Ümit Uzun >>> >>> >>> 2010/1/15 Jean-Sébastien Guay <[email protected]> >>> >>>> Hi Nick, >>>> >>>> >>>> However, I started the osgwidgetinput example and for some reason it is >>>>> not getting my input from the keyboard. >>>>> >>>> >>>> This is the same problem I noticed in other osgWidget classes lately. >>>> Someone changed the signature of virtual methods in the EventInterface >>>> class >>>> (which Widget inherits and thus, all other Widgets too) adding a const, but >>>> didn't change the signature of methods that are supposed to overload those >>>> virtual methods in derived classes. So for example, EventInterface defines: >>>> >>>> virtual bool keyDown (int, int, const WindowManager*) { return false; } >>>> virtual bool keyUp (int, int, const WindowManager*) { return false; } >>>> >>>> but Input defines: >>>> >>>> virtual bool keyUp (int, int, WindowManager*); >>>> virtual bool keyDown (int, int, WindowManager*); >>>> >>>> So there is no compile error, but the base class methods are called >>>> instead of the derived class methods because their argument lists don't >>>> match. >>>> >>>> Here's the change for Input. It would be nice to go across all osgWidget >>>> classes and fix this if you have the time. I already did it for Frame a >>>> week >>>> or so ago, and this fixes Input, but there are bound to be more. >>>> >>>> Hope this helps, >>>> >>>> J-S >>>> -- >>>> ______________________________________________________ >>>> Jean-Sebastien Guay [email protected] >>>> http://www.cm-labs.com/ >>>> http://whitestar02.webhop.org/ >>>> >>>> /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2008 Robert Osfield >>>> * >>>> * This library is open source and may be redistributed and/or modified >>>> under >>>> * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or >>>> * (at your option) any later version. The full license is in LICENSE >>>> file >>>> * included with this distribution, and on the openscenegraph.orgwebsite. >>>> * >>>> * This library is distributed in the hope that it will be useful, >>>> * but WITHOUT ANY WARRANTY; without even the implied warranty of >>>> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >>>> * OpenSceneGraph Public License for more details. >>>> */ >>>> >>>> // Code by: Jeremy Moles (cubicool) 2007-2008 >>>> >>>> #ifndef OSGWIDGET_INPUT >>>> #define OSGWIDGET_INPUT >>>> >>>> #include <osgWidget/Label> >>>> >>>> namespace osgWidget { >>>> >>>> // This is a string of values we use to try and determine the best Y >>>> // descent value (yoffset); you're welcome to use what works best for >>>> // your font. >>>> const std::string DESCENT_STRING("qpl"); >>>> >>>> class OSGWIDGET_EXPORT Input: public Label >>>> { >>>> public: >>>> >>>> Input(const std::string& = "", const std::string& = "", unsigned >>>> int = 20); >>>> >>>> virtual void parented (Window*); >>>> virtual void positioned (); >>>> >>>> virtual bool focus (const WindowManager*); >>>> virtual bool unfocus (const WindowManager*); >>>> virtual bool keyUp (int, int, const WindowManager*); >>>> virtual bool keyDown (int, int, const WindowManager*); >>>> >>>> void setCursor (Widget*); >>>> unsigned int calculateBestYOffset (const std::string& = "qgl"); >>>> >>>> void setXOffset(point_type xo) { >>>> _xoff = xo; >>>> } >>>> >>>> void setYOffset(point_type yo) { >>>> _yoff = yo; >>>> } >>>> >>>> void setXYOffset(point_type xo, point_type yo) { >>>> _xoff = xo; >>>> _yoff = yo; >>>> } >>>> >>>> osg::Drawable* getCursor() { >>>> return _cursor.get(); >>>> } >>>> >>>> const osg::Drawable* getCursor() const { >>>> return _cursor.get(); >>>> } >>>> >>>> point_type getXOffset() const { >>>> return _xoff; >>>> } >>>> >>>> point_type getYOffset() const { >>>> return _yoff; >>>> } >>>> >>>> XYCoord getXYOffset() const { >>>> return XYCoord(_xoff, _yoff); >>>> } >>>> >>>> protected: >>>> virtual void _calculateSize(const XYCoord&); >>>> >>>> void _calculateCursorOffsets(); >>>> >>>> point_type _xoff; >>>> point_type _yoff; >>>> >>>> unsigned int _index; >>>> unsigned int _size; >>>> unsigned int _cursorIndex; >>>> unsigned int _maxSize; >>>> >>>> std::vector<point_type> _offsets; >>>> osg::ref_ptr<Widget> _cursor; >>>> }; >>>> >>>> } >>>> >>>> #endif >>>> >>>> // -*-c++-*- osgWidget - Code by: Jeremy Moles (cubicool) 2007-2008 >>>> >>>> #include <osg/io_utils> >>>> #include <osgWidget/WindowManager> >>>> #include <osgWidget/Input> >>>> >>>> namespace osgWidget { >>>> >>>> Input::Input(const std::string& name, const std::string& label, unsigned >>>> int size): >>>> Label (name, label), >>>> _xoff (0.0f), >>>> _yoff (0.0f), >>>> _index (0), >>>> _size (0), >>>> _cursorIndex (0), >>>> _maxSize (size), >>>> _cursor (new Widget("cursor")) { >>>> _text->setAlignment(osgText::Text::LEFT_BOTTOM_BASE_LINE); >>>> _text->setKerningType(osgText::KERNING_NONE); >>>> >>>> // Make the cursor un-copyable. >>>> _cursor->setCanClone(false); >>>> _cursor->setDataVariance(osg::Object::DYNAMIC); >>>> _cursor->setColor(0.0f, 0.0f, 0.0f, 1.0f); >>>> >>>> setEventMask( >>>> // For showing/hiding the "cursor." >>>> EVENT_MASK_FOCUS | >>>> // For keypresses, obviously. >>>> EVENT_MASK_KEY | >>>> // For "click" focusing. >>>> EVENT_MOUSE_PUSH >>>> ); >>>> >>>> _offsets.resize(size, 0.0f); >>>> >>>> _text->getText().resize(size, ' '); >>>> _text->update(); >>>> } >>>> >>>> void Input::_calculateSize(const XYCoord& size) { >>>> // An Input cannot currently set it's own size RELIABLY until the >>>> osgText implementation >>>> // is dratiscally improved. I'm getting wildly crazy results. :( >>>> // point_type height = size.y() > _cursor->getHeight() ? size.y() : >>>> _cursor->getHeight(); >>>> >>>> #if 0 >>>> point_type width = size.x() + _cursor->getWidth(); >>>> point_type height = _cursor->getHeight(); >>>> >>>> if(width > getWidth()) setWidth(osg::round(width)); >>>> >>>> if(height > getHeight()) setHeight(osg::round(height)); >>>> #endif >>>> } >>>> >>>> void Input::_calculateCursorOffsets() { >>>> // Determine the "offset" >>>> const osgText::Text::TextureGlyphQuadMap& tgqm = >>>> _text->getTextureGlyphQuadMap(); >>>> >>>> const osgText::Text::TextureGlyphQuadMap::const_iterator tgqmi = >>>> tgqm.begin(); >>>> >>>> const osgText::Text::GlyphQuads& gq = tgqmi->second; >>>> >>>> osg::Vec3 pos = _text->getPosition(); >>>> >>>> for(unsigned int i = 0; i < _maxSize; i++) { >>>> osg::Vec3 ul = gq.getTransformedCoords(0)[0 + (i * 4)]; >>>> osg::Vec3 ll = gq.getTransformedCoords(0)[1 + (i * 4)]; >>>> osg::Vec3 lr = gq.getTransformedCoords(0)[2 + (i * 4)]; >>>> osg::Vec3 ur = gq.getTransformedCoords(0)[3 + (i * 4)]; >>>> >>>> _offsets[i] = lr.x() - pos.x(); >>>> >>>> // warn() << "vb: " << gq.getGlyphs()[i]->getHorizontalBearing() >>>> << std::endl; >>>> } >>>> } >>>> >>>> bool Input::focus(const WindowManager*) { >>>> _cursor->setColor(0.0f, 0.0f, 0.0f, 1.0f); >>>> >>>> return true; >>>> } >>>> >>>> bool Input::unfocus(const WindowManager*) { >>>> _cursor->setColor(0.0f, 0.0f, 0.0f, 0.0f); >>>> >>>> return true; >>>> } >>>> >>>> void Input::parented(Window* parent) { >>>> Label::parented(parent); >>>> >>>> _cursor->setSize(2.0f, _text->getCharacterHeight()); >>>> >>>> if(_cursorIndex) parent->getGeode()->setDrawable(_cursorIndex, >>>> _cursor.get()); >>>> >>>> else _cursorIndex = parent->addDrawableAndGetIndex(_cursor.get()); >>>> } >>>> >>>> void Input::positioned() { >>>> point_type ln = static_cast<point_type>(_text->getLineCount()); >>>> >>>> ln = ln == 0.0f ? 1.0f : ln; >>>> >>>> // point_type th = (_text->getCharacterHeight() * ln) + >>>> (_text->getLineSpacing() * (ln - 1.0f)); >>>> >>>> point_type x = getX() + _xoff; >>>> point_type y = getY() + _yoff; >>>> >>>> // XYCoord size = getTextSize(); >>>> >>>> _text->setPosition(osg::Vec3(x, y, _calculateZ(LAYER_MIDDLE))); >>>> >>>> point_type xoffset = _index > 0 ? _offsets[_index - 1] : 0.0f; >>>> >>>> _cursor->setOrigin(x + xoffset + 1.0f, y + 1.0f); >>>> _cursor->setZ(_calculateZ(LAYER_MIDDLE)); >>>> } >>>> >>>> bool Input::keyUp(int key, int mask, const WindowManager*) { >>>> return false; >>>> } >>>> >>>> bool Input::keyDown(int key, int mask, const WindowManager*) { >>>> osgText::String& s = _text->getText(); >>>> >>>> if(key == osgGA::GUIEventAdapter::KEY_BackSpace) { >>>> if(_index >= 1) { >>>> // s.erase(s.begin() + (_index - 1)); >>>> >>>> s[_index - 1] = ' '; >>>> >>>> _text->update(); >>>> >>>> _calculateCursorOffsets(); >>>> >>>> _index--; >>>> } >>>> } >>>> >>>> else { >>>> if(key > 255 || _index >= _maxSize) return false; >>>> >>>> // else if(_index < s.size()) s.insert(s.begin() + _index, key); >>>> // else if(_index == s.size()) s.push_back(key); >>>> >>>> s[_index] = key; >>>> >>>> _text->update(); >>>> >>>> _calculateCursorOffsets(); >>>> >>>> _index++; >>>> } >>>> >>>> // _text->update(); >>>> >>>> _calculateSize(getTextSize()); >>>> >>>> getParent()->resize(); >>>> >>>> return false; >>>> } >>>> >>>> void Input::setCursor(Widget*) { >>>> } >>>> >>>> unsigned int Input::calculateBestYOffset(const std::string& s) >>>> { >>>> >>>> const osgText::FontResolution fr(static_cast<unsigned >>>> int>(_text->getCharacterHeight()), >>>> static_cast<unsigned >>>> int>(_text->getCharacterHeight())); >>>> >>>> osgText::String utf(s); >>>> >>>> unsigned int descent = 0; >>>> >>>> for(osgText::String::iterator i = utf.begin(); i != utf.end(); i++) { >>>> osgText::Font* font = >>>> const_cast<osgText::Font*>(_text->getFont()); >>>> osgText::Font::Glyph* glyph = font->getGlyph(fr, *i); >>>> unsigned int d = >>>> abs((int)glyph->getHorizontalBearing().y()); >>>> >>>> if(d > descent) descent = d; >>>> } >>>> >>>> return descent; >>>> } >>>> >>>> } >>>> >>>> >>>> _______________________________________________ >>>> osg-users mailing list >>>> [email protected] >>>> >>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>>> >>>> >>> >>> _______________________________________________ >>> osg-users mailing list >>> [email protected] >>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>> >>> >> >> _______________________________________________ >> osg-users mailing list >> [email protected] >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> >> > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > >
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

