Merhaba Nikolov, If you come Ankara, we may can meet :) Sorry for special question about company!
See you... Regards. Ümit Uzun 2010/1/15 Trajce Nikolov <nikolov.tra...@gmail.com> > 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 <umituzu...@gmail.com> 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 <nikolov.tra...@gmail.com> >> >> 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 <umituzu...@gmail.com> 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 <jean-sebastien.g...@cm-labs.com> >>>> >>>>> 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 jean-sebastien.g...@cm-labs.com >>>>> 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 >>>>> osg-users@lists.openscenegraph.org >>>>> >>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> osg-users mailing list >>>> osg-users@lists.openscenegraph.org >>>> >>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>>> >>>> >>> >>> _______________________________________________ >>> osg-users mailing list >>> osg-users@lists.openscenegraph.org >>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>> >>> >> >> _______________________________________________ >> osg-users mailing list >> osg-users@lists.openscenegraph.org >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> >> > > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > >
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org