[Bf-committers] Knife tool and perspective mode -- incorrect
results
Robert Wenzlaff
rwenzlaff at soylent-green.com
Mon Nov 8 15:57:52 CET 2004
On Sunday 07 November 2004 16:10, Ton Roosendaal wrote:
> The current knife tool (ab)uses the subdivide() function, which allows
> arbitrary location of a subdivision on an edge, but not more than 1 new
> vertex per edge.
> For this proposal to work an entire new intersection routine has to be
> made.
Well, it's a limitation of subdivide_flag(), not the intersect routine.
Subdivide_flag() didn't even allow arbitrary location until I added it.
Actually, There _is_ a way to do multiple cuts without a new subdivide
routine.
1) Flag one division per edge until you happen upon an edge that already has a
division flagged.
2) Then call subdivide_flag().
3) Continue with step 1 (where you left off) until you come to the end of the
mousetrail.
Not pretty. Might make a few extra faces where second cuts are first
detected, but I think it would work. Would require a little reorganization
of the Knife and Intersect code (either Intersect would have to call
subdivide directly, making it non-reusable for other tools, or Intersect
would need a return code that indicates it's not done with the mouse curve
yet and a couple static variables so it can remember where it left off. Then
Knife can call it again if there are multi-cuts...). A little hackish, but
the alternative is re-writing subdivide_flag() just for knife.
The other "problems" in Bart's propsal are mostly differing interpretations of
"standard" key/modifier meanings. Knife is a little awkward as it is a
multi-step tool, and you need a way to indicate you are done drawing. Like
Wand select, you need to hit a key to indicate you are done selecting, except
I chose just "enter". Since it only takes one hand to work the mouse and one
hand to hit enter, this seemed acceptable. Bart doesn't agree.
*********************************************
Robert Wenzlaff rwenzlaff at soylent-green.com
More information about the Bf-committers
mailing list