Page 1 of 1

[feature request] better manipulation widget for 2.38

Posted: Fri May 20, 2005 1:42 pm
by Mohij
The new 2.37 release of Blender will have these nice scale/rotate/grab widget included. My feature request affects this widget. It can be orientated in several ways, what makes manipulations relative to diffrent directions than global XYZ (normals and so on) possible. My request is the idea of orienting the widgets axis also on edges, and the different faces touching them, means one axis pointing in the direction of the edge and one "lying" flat on one of the touching faces.
Secondly orienting the widget on the bisector of an angle means one axis pointing in the direction of an bisector of an angle and one other in the faces (the face of the bisector) normal direction.
The axis direction should be alignable along edges, 90° from edges, onto faces, along the bisector of an angle or combinations of them.
These two features would perhaps fit better in an CAD like Modeller but I think they would also be helpful in Blender.
And thirdly the possibility to make one of the widgets axis track a certain point/vertice (like the tracking function of the camera), this is extremely usefull when, for example editing round objects where vertices only have to be moved towards or away of the center.

The coolest thing would be the possibility to make the widget manipulate other faces/edges/vertices than the ones the widget is alligned to. This could be easily realised with a "keep alignment" switch. When the widget is aligned correctly, for example along a faces normal, the keep alignment switch is pushed. This will keep the widgets alignment, even when it is now used on other faces, edges or vertices or even in other objects.

And my third idea is the possibility to completely free allign the widgets arrows (along edges, faces, normals bisectors of angles and so on), so that the arrows (not axis anymore) don't even have to be 90° to each other. The number of arrows should also be adjustable. My proposal for realizing this is a switch for switching between the standard 3 axis widget and the multitool widget, a button for "editmode" for the widget, buttons for adding and deleting arrows and perhaps three fields for entering XYZ degrees for editing the direction of an arrow. The arrows are allignable in two ways, first by pushing the widget editmode button, then selecting the arrow to edit and finally the edge/face/normal (or directions 90° to them) where the arrow should be alligned to or track after, the second method is by easily entering the XYZ degrees into the three fields. For some special jobs, where a lot vertices only have to be moved in certain directions, for example when a surface with lot of detail on it is tilted and vertices have to be moved in the tilted direction, this freely composable multi-tool-widget would be a real timesaver.

I would gladly program this widget myself but I sadly can not program :oops:.

This widget would include solutions for problems like move face along face normal, complicate 3d cursor actions, editing on tilted faces, editing on round objects, scaling along two axis at the same time, move a vertice along an edge without the 3d cursor thing and so on. It perhaps doesn't provide the fastest way to solve such jobs, but the widget would provide a uniform method.

Please give feedback and/or improvements to my proposal. I'm not sure if my post is understandable :oops:, sorry for that, but please, please post when you didn't understood a certain point I mentioned, so I can express myself clearer :wink:.


Posted: Fri May 20, 2005 4:24 pm
by famitsu
I agreed. We should have this function which is very cool idea.

Posted: Mon May 23, 2005 9:39 pm
by blackpage

yay, that would really be the ultimate widget. The implementation of such a thing would, of course, be a tremendous task. If I understand you correctly it would in fact mean no less than to implement a whole new Pivot-system, on object level and subobject-level too (vertex, edge ...). Let's assume a box .. it has a pivot center and the new widget would appear at this very spot when you want to move/scale/rotate the box while not being in EDIT mode.

If it should also be possible to align the widget to e.g. one edge of the box itself, you'd need to be in editmode to be able to select the respective edge at all. I'm not sure if such a thing can be implemented all to easily as you want to do something in NON-EDIT mode but need info from EDIT-mode, which might leave Blender in some sort of "limbo" state.

From what I take it the reason why Blender has EditMode and NonEditMode is that it can focus on a single object when going into edit mode and leave all oher objects in a frozen state.

For your proposed widget it would be necessary to make each vertex, each edge and each face from ALL the objects on the scene available to align the widget to. That could get a wee bit hairy. And we are not even taking into consideration additional alignment targets like normals or UV-coordinates (in case we REALLY want to go wild :)

Another thing: If I can align the widget to any other entity, be it from within the same object or not, my aligned widget depends on that entity as long as I want the alignment to be persistent (that's your "keep alignment" button). What if I delete the edge in another object that I aligned the widget to? Where to place it? What if the other object becomes child to another object and adapts axis?

Apart from these linkage/hierarchical-hassles there is also a need to store that info somewhere. Even if I always work with a single widget, I still need to store data for every single vertex/edge/face as I can align the widget to these entities. In a low poly scene with -let's say- 250000 tris (and that really IS low poly) we have 750k vertices, 750k edges and 250k faces. For each of these Blender would have to maintain something like a lookup table to do the "keep alignment"-thing. It's something along the line ... "Hang on ... is this an edge i need to do some special adjustments to the transform widget?"

If we now also take into consideration that the widget's axis can be aligned independantly too that lookup-structure could easily explode in terms of mem-space, as well as the lookup-action could explode in terms of processing time - even if you'd use something really fast like Hash tables or btrees or whatever fits the need best. The theoretical number of data-nodes that Blender would have to maintain in a worst case scenario would be someting like

(NrOfEntities * (NrOfEntities - 1)) * NrOfWidgetAxis * NrOfTransformActions * NrOfWidgetAxisAngles * oh well :)

Now one might say "Well, you don't align each widget of every entity to every other entity". But where should Blender draw the line? Should it offer - let's say - 100 custom aligned widgets, or 1000. Hard to say, and any decent programmer will always aim to make a system that can handle any requirement, be it floor or ceiling.

But apart from that, the idea of locally alignable widgets is really classy and would be a great tool to have at hand. I hope they implement bits of your proposal in 2.37.


ps: numbers and computations are merely spit out and in no way accurate. they just aim to demonstrate that a "keep alignment"-feature can easily be as complex as a DNA database :)

Posted: Thu Jul 07, 2005 7:12 pm
by Mohij
When things like information exchange between edit- and non-editmode, information storage of vertex-/edge-/face-/normal-/UV-coordinates or data position change while parenting (in this case needed for the keep alignment button) are a problem, then blender has a major code layout deficit (sorry when this sounds a bit rude). Even when it is hard work, those deficits should be solved. Sooner or later those deficits would lead to a holdup of blender development, because more and more tradeoffs and workarounds would be made, until the blender code is that complex and tangled, it is not maintainable anymore. This is perhaps overstated or far fetched, but it is still a problem in the basis of the blender layout and therefore should be solved as soon as possible.

Please take this as an encouragement.

Posted: Fri Jul 08, 2005 1:14 am
by theeth

Cool to see somebody working on it

Posted: Sun Oct 09, 2005 2:56 pm
by Mohij
Thanks, Theeth. It is really cool to see somebody allready working on it. I hope my ideas still give some inspiration and help to make the widget tool even better.