[Plugin] Perpendicular Face Tools (UPDATED 26-03-09)
-
could you not just align one of the sides to vertical (z)?
-
No, it doesn't show it well, but the sides are often not vertical. The alignment needs to make the top and bottom lie on planes that are "flat", but the sides are not necessarily vertical.
-
Thank you Chris A very useful script, am using it right now
-
Thanks Chris.
-
Chris,
Thanks for the usefull ruby !
erikB -
Your response hasn't gone un-noticed Tig. I thank you immensely for it. I'm still working on implementing it I think there is a small flaw in that I don't point C either. I think I know how to get it, so thats good. In fact, it is essentially what you provided with the "cosine rule". Thanks for that! That is currently what I'm working at. I had one method, but it was rather convoluted and started to fall apart for some reason, so I think it must not have been sound. This new method feels much more mathematically correct. I'll let you know how it goes. Hopefully within a few hours. Thanks sooo much for your help and ideas,
Chris
-
To rotate the square you have more than enough info. You don't actually need point-D.
You want to rotate it about the centre-point [let's call it point-O] - so you know that too.
You know point-A and point-C as you have them initially or have just calculated them already.
Now find the angle between the two vectors O->A and O->C.***
Select all of the square's edges (face will go with them?) and make a rotation-transformation about point-O by that angle: using the normal to the square's face as the axis of rotation...Points A and C, and points B and D will then be coincident...
"new vector"
v = [x,y,z]
vector1 = Geom::Vector3d.new(v)Where v [x,y,z] is obtained from the sum of the two points v = (pointO - pointA) etc
you might also want to ".normalize" the vector(s)...
Find vector2 (O->C) the same way...
"angle_between vectors"
The angle_between method is used to compute the angle (in radians) between this vector and another vector.
Syntax
angle = vector1.angle_between(vector2)
Arguments
vector2 - a Vector3d object
Return Value
angle - an angle (in radians)
Example
vector1 = Geom::Vector3d.new(x,y,z)
vector2 = Geom::Vector3d.new(xx,yy,zz)angle = vector1.angle_between(vector2)
###########
A bit more complicated to my mind is doing it with the 'cosine rule',
here it is though - you can easily find the length 'AC'
you have the other two points and can use 'AC = pointA.distance(pointC)' method for that.
You also know the circle's Radius - or can easily get it from the square's side dim.
Angle = Math::acos((RadiusRadius + RadiusRadius - ACAC) / (2Radius))
Note: if Angle > 90 degrees (pi/2) then it's negative...
.
-
Hi Chris
Small feedback : using customer shape crashes SU ( under Windows XP 3)without any message.
MALAISE
-
@malaise said:
Hi Chris
Small feedback : using customer shape crashes SU ( under Windows XP 3)without any message.
MALAISE
Oh dear, thats not good. Can anyone else confirm? I don't have xp sp3 anywhere to test it on. Is it possible that it is a conflict with another script? That doesn't seem likely to me since I think I've written my code so that can not happen.
I do have xp sp2 I can test it on. Perhaps if I can duplicate it there, I can narrow down the problem. Thanks for the notice,
Chris
-
Chris, I've done a couple of experiments with it. No crashes yet. I've got XP Pro SP3.
Dave
-
An artist who is also a coder?
That's Chris Fullmer!Thank you very much for taking the time to code this; with a couple of tweaks, this will be perfect.
-
OK, let me see which plugin may be in conflict
MALAISE
-
Hi ALL
Filtering the last downloaded plugins, I've found a conflict with Jim's cd_power_n.rb ( mover2.rb) Has someone experienced that? several times tested.
( SU V7, Windows XP SP3 )
MALAISE
-
Very Interesting. I have that plugin installed with no conflicts. I'll dig around tomorrow and see what I can find. Sorry for the inconvenience,
Chris
-
Thanks for playing attention, no matter for inconvenience, don't worry
MALAISE -
@malaise said:
Hi ALL
Filtering the last downloaded plugins, I've found a conflict with Jim's cd_power_n.rb ( mover2.rb) Has someone experienced that? several times tested.
( SU V7, Windows XP SP3 )
MALAISE
Mover2 does not use a file or method named
cd_power_n.rb
. -
I know, its cad_fathers's SCF powertools toolbar plugin that wrapped mover2 into a file called cd_power_n.rb. If you open that file, its just your script. So I'm guessing it has something to do with how its being loaded from his main plugin loader maybe? I don't know. I know I've got my whole script wrapped in a class so I thought I should not have conflicts. But perhaps there is more to it than that.
Chris
-
I'm not getting bug-splats with custom-face, BUT it does inconveniently make a group of the selected face and not explode it at the end. It's easily fixed by adding a line of code after line #299, to explode the temporary group...
@group.explode
How's the orienting face rotation on end of line going ?
. -
I've tried this improvement, the group is still present, not exploded.
MALAISE
-
Hey Tig, I probably could explode the group without any conflicts. I was thinking I didn't want the added face to interefere with the model, but its probably not an issue. Or maybe I explode it by default and have a ctrl key modifier that leaves it grouped. I've been wanting to figure out modifier keys.
As for the rotation thing, I still have not got it worked out I'm having a hard time pinpointing point C from my diagram above. I got close and it sort of worked, but it fell apart if the face was too slanted or something and I got so frustrated I have not even looked to figure out why. I'm sure its a million times easier than I'm making it. Since I can't find "C" yet, I intersected a flat plane with the face plane to get an intersection vector. That vector is the vector that I want my top(or bottom) edge to exist on. So I then did an angle_between the 2 vectors (the found one and the existing edge one) to get the angle that I want to rotate the face. That seemed to work in testing, but did not work well once I put it in the script. Sorry to drag this out. I'll probably put some more time into it today since I got a few other scripts updated last night.
@Malaise, I think maybe that added the ungroup function to the custom face tool only, and maybe you tested it on one of the other tools. It would need to be added for each tool. I'll look into it, and maybe even get it implemented sometime this century
Thanks everyone, thanks TIG!
Chris
Advertisement