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

Reply via email to