Manipulators / gizmos

In the spirit of helping out some users to roll their own editor, I decided to try and create some high quality, Maya-style manipulators. I’ve just about finished the rotation one that you can see below.

I’m banking on the translation and scale ones not being as complicated, and once I’m finished I should be posting the code if you’re interseted in using them. :slight_smile:





Good job! It looks familiar from the point of view of a Blender user :slight_smile:
Are those looking the same at all zoom factors? (would require rescaling in respect to the distance to the cam + some FOV calculations, I guess)?

And is that the level editor which is included within the original sources? (By Gyedo and Craig W.)

Suggestion: use the same colors for the rings as for the axes they rotate around.

Thanks for your interest!

I’m currently scaling all the gizmos by a factor calculated like so:

( self.getPos() - ).length()

This gets multiplied by a ‘size’ property which takes place of the usual scale (since this is now controlled by the distance to the camera) and is bound to the + and - keys to increase / decrease the size of the gizmo.

The axes are normally the same colour as the axis they equate to, except when they are selected / highlighted. In this case they turn yellow.

The UI is just a proof of concept (might turn into something more :wink: ) that I cooked up based off Ogitor for Ogre. My plan is to build a scene editor. If people want to build on top of that to create a level editor, be my guest :smiley:

EDIT: Got the others up and running. Should be ready to release soon.

Yay, this sounds great!
Can’t wait to see the level editor running and to hack on it :smiley:

It’s the level editor included within Panda’s sources, right?

This is really interesting, nice work so far. I’ve very interested when you are ready to release the code.
Thanks for sharing.

No worries. :slight_smile:

I’ve just finished the basic behavior for all three types of gizmos, but the code needs a bit of polish before I release it. I’ve also written a simple gizmo manager which will handle switching gizmos on certain key strokes. Shouldn’t be too much longer, I hope!

Hey those of you who were interested in this,

Just a quick one to say that I’m back working on this after a long hiatus. All the basic behaviour is in for the different gizmos and the code is looking pretty clean. I’ll try and fix up the remaining bugs and make a release soon.

Great to hear. Do you have a code repository available (github, googlecode, etc) to look at.

I’d love to start looking at what you’ve got.

Unfortunately, no. I do have panda3d project space sitting there collecting dust whch I’ve never completely figured out how to use. I suppose I could upload a zip there?

The most straight-forward solution I’ve found is to just setup a free account at and upload your code.

A lot of people like github too. Either way it’s free, and it makes it easy for others to look at, comment, or contribute to your code.

I decided to finally make use of the Panda project webspace I have. I might upload to Google at some point, but I really wanted to get this out and get some feedback from the community.

Please let me know if this link works! I’m not terribly familiar with manipulating webspace.

There are still a few bugs which I’m working on currently, but they have most of the functionality that I’m aiming for. I’ll see if I can’t add some more polish and wrap this project up.

I haven’t included a readMe yet but I’ll put that out in the next release. I’m not sure which license to use; I want people to use this stuff freely (non-commercial of course) but I wouldn’t mind a shoutout if you’re going to include this stuff in something larger… Any suggestions?

Thanks all!

I just spun up the demo, and it looks perfect. Great stuff.

Code looks clean and straightforward so far, I’m looking forward to using it.

thanks for sharing.

Hope you reconsider about the license. This is just the kind of thing that many are looking for, not a full level editor but the little tools and things to build one quickly.

For licenses, I’d recommend either the BSD license (which Panda3D uses) or the GPL license.

Personally, I’d go with the GPL license, because it explicitly requires anyone who uses your GPL’ed library to license their code under the GPL as well.

Although, if you prefer a more liberal license (one that allows proprietary programs to use your software without becoming FOSS themselves, which the GPL forbids), I’d recommend the BSD license.

The full texts for both licenses are linked below.

@teedee: Can I ask which part you’re unhappy with? I would like for people to be able to use these freely and build on them if they desire, as this meant to be a contribution to the community and forums for all the help I’ve gotten. I’m not sure I really like the idea of people profiting from work I’ve done however, maybe that’s just me… :frowning:

Well as a developer of a product I hope to sell, I would not be able to use it. :slight_smile:
Of course I understand your position on the matter completely.

I think, a few people, on here will also want to sell their products. Though I also understand the concern of other people selling your work.
It simply means you appeal to less. The reason why Panda is BSD flavored is so that (well, at the time I suppose, Disney) people can sell their games.
Otherwise panda would lose a hefty amount of traffic to other game engines namely Ogre/UDK/Unity just to name a few.

It’s acceptable that you license your code either way, it’s only important that you understand both of the free licenses and choose the one you personally enjoy the most :wink:

Nevertheless, the manipulators look great, I’ll bet that we’ll see a few editors using them sometime!


Just tried this out.
Great stuff. I think, I can use it somewhere.

I especially like the rotation tool with its “relative to view” rotation.

Bugs found:
-Moving the cursor out of the rotating circle while rotating with the same (means holding the mouse key) lets the rotation behave unexpected, e.g. continuous rotation.
-The handles sometimes stay highilghted even after moving the cursor away or clicking somewhere else.
-The scaling handle for all axes returns to size 1 when clicked, ignoring the settings done with “+” and “-”.

Keep up the good work!

New release available now. Most bugs should be fixed, and there are a few nice new features too.

  • Fixed intra module importing
  • Moved constants out of and into
  • Fixed local transforming for rotation / scale
  • Added “complementary” scaling when ctrl-clicking an axis
  • Added middle mouse functionality to continue transforming
  • Fixed bug where moving the mouse from the rotation gizmo would stop transforming
  • Fixed bug where quickly rotating in camera axis would spin the gizmo wildly
  • Added support for attaching multiple nodes
  • Added marquee selection for demo
  • Fixed scale gizmo appearance during transform
  • Added concept of default axis
  • All transformations now done with matrices
  • General code cleanup

Any bugs please let me know :slight_smile:

Very nice. Thank you for choosing a license thats compatible with my projects.

One bug: last used manipulator stays the highlight (yellow) color after releasing and moving the mouse, even after selecting another object. This is true for all the different tools (scale, translate etc)

Edit: I see Nemesis#13 above mentioned that issue, and a few others that are still present.