Planes
-
looks good thanks Tig.
I'm off for the weekend now, but I've just sent all the files to my home email so I'll see if I can find time to have a bash at it in my own time.
I'll let you know how it goes on monday.
Thanks again for the help so far, I'd be stuck without it -
OK I've had a look at it but not really got anywhere

I've tried both:
tr=Geom::Transformation.rotation(point, vector, angle)
tr=Geom::Transformation.rotation(ORIGIN, Z_AXIS, 90.degrees)just to make sure there wasn't a problem here, and had
puts "transformation " + tr.to_s
put what looks like a reasonable output into the console.
All OK, but whenever I run the program it bugs out to the old click drag click error message and the console shows:Error: #<TypeError: no implicit conversion to Transformation>
C:/Program Files/Google/Google SketchUp 7/Plugins/test5.rb:117:intransform!' C:/Program Files/Google/Google SketchUp 7/Plugins/test5.rb:117:inonLButtonDown'So what it wrong with my transform! bit?
I've tried it as:
master_group = master_group.transform!(tr)
&
master_group.transform! trafter the loop and before it (straight after master_group is defined). None of it works, it always gives me this daft conversion message. But I'm convinced the first bit of code does give a valid transformation, so why does it then think it the wrong type or something?
It can't just be down to where I'm placing the
master_group.transform! tr
line in the code can it? -
You make a transformation and apply it to the group.
...So...
define or getpoint,vectorandangle
...then...
tr=Geom::Transformation.rotation(point,vector,angle)
...then...
master_group.transform!(tr)
The!at the end of thetransformmethod changes the original object iftris a transformation.
If you addputs tr.classwhat do you get - it looks like it's not a real transformation to me ...
The second one with the values set shouldwork OK ?
Pre-set the variables you use outside of all of your 'do loops' or {} blocks - e.gpoint=[], vector=[], angle=0.0, tr=niletc near the start of the script...
It might be that they are not getting transfered between the loops - setting them first means they will be...

-
when I added the =0.0, =nil etc. line of code nothing changed,
and when I tried "trans class " + tr.class
it gave me a cannot be displayed as string message, so I did tr.class.to_s and that gave me:
point (503.690114mm, 371.165908mm, 943.266108mm)
angle 1.5707963267949
perpvector (1.0, -6.27276008913213e-015, 0.0)
transformation #Geom::Transformation:0xba74610
trans class Geom::Transformation
Error: #<TypeError: no implicit conversion to Transformation>
C:/Program Files/Google/Google SketchUp 7/Plugins/test5.rb:170:intransform!' C:/Program Files/Google/Google SketchUp 7/Plugins/test5.rb:170:inonLButtonDown'So it looks like the transformation is OK, but it doesn't like it when it calls transform! .
My geom::transformation line is just after the first click but before the loop, my transform! line is after the loops.
Any ideas? -
Add these lines after the transformation '
tr' is supposedly made
puts tr.class return nil
The Ruby Console should shown whattris - don't mess on with to_setc.
It should just say it's aGeom::Transformation- nothing else...
Thereturn niljust stops execution at that point so you don't have to wait for a later failure...
You seem to be messing up something calledtransand something calledtrhere
can you publish the part of the code so we can see what is going wrong ?
What istrans?
Are you somehow putting stuff into an array (==[]) in error ? -
Here's the code in full, I'd only held off posting it till now as I was keen to learn enough to fix it myself, but as this is getting frustrating I'll welcome any solutions

the initialization of the variables is hashed out because I changed it to initialize in the def initialize sub, rather than here. Not sure if that's good or not though as they might need to be "@point" to carry the value over.
Hope you can decipher it with all the wordwraping, I tend to leave long lines and comments, I was going to tidy up the defunct code hashed out when I finally got it working.
def onLButtonDown(flags, x, y, view) # When the user clicks the first time, we switch to getting the # second point. When they click a second time we create the line #point=[], perpvector=[], angle=0.0, tr=nil if( @state == 0 ) @ip1.pick view, x, y if( @ip1.valid? ) @state = 1 Sketchup;;set_status_text $exStrings.GetString("Select second point (top right)"), SB_PROMPT @xdown = x @ydown = y face = @ip1.face puts "facenormal " + face.normal.to_s angle = Z_AXIS.angle_between(face.normal) perpvector = Z_AXIS.cross(face.normal) point = @ip1.position tr = Geom;;Transformation.rotation(point,perpvector,angle) if perpvector.length!=0 #tr=Geom;;Transformation.rotation(ORIGIN, Z_AXIS, 90.degrees) puts "point " + point.to_s, "angle " + angle.to_s, "perpvector " + perpvector.to_s, "transformation " + tr.to_s, "trans class " + tr.class.to_s, tr.class if face == nil UI.messagebox "The points must be on the face of an object" self.reset end end else # create the line on the second click if( @ip2.valid? ) self.create_geometry(@ip1.position, @ip2.position,view) @ip2.pick view, x, y model = Sketchup.active_model entities = model.entities master_group = entities.add_group() #master_group = master_group.transform!(tr) numsquaresX = 10 #number of squares in the X direction xsize = 30 #size of squares in the X direction (mm) xsize = xsize/25.4 #converts xsize into mm (from inches) numsquaresY = 10 #number of squares in the Y direction #ysize = 3 #size of squares in the Y direction #ysize = ysize/25.4 #converts ysize into mm (from inches) ysize = xsize #as we're generally only dealing with squares, edit this line out and reinstate the two above lines for rectangles zsize = xsize z = 0 x1 = @ip1.position.x y1 = @ip1.position.y z1 = @ip1.position.z xfinal = @ip2.position.x yfinal = @ip2.position.y zfinal = @ip2.position.z #puts x1, y1, z1, xfinal, yfinal, zfinal if (xfinal - x1) > (25 * xsize) largetest = UI.messagebox "You have selected a large area, this may make the program unstable. Suggest multiple smaller areas", MB_OKCANCEL if largetest == 2 self.reset end end while y1 < yfinal y2 = y1 + ysize while x1 < xfinal x2 = x1 + xsize pt1 = [x1, y1, z] #plot the first line pt2 = [x1, y2, z] #plot the second line pt3 = [x2, y2, z] #plot the third line pt4 = [x2, y1, z] #plot the fourth line, back to start #new_face = entities.add_face pt1, pt2, pt3, pt4 #plot a face on the square to make it visible #group.entities.add_face pt1, pt2, pt3, pt4 group = master_group.entities.add_group face = group.entities.add_face pt1, pt2, pt3, pt4 x1 = x2 - (xsize * 0.08) #let the next spot begin at 92% of the way across the previous Sketchup;;set_status_text $exStrings.GetString("Working"), SB_PROMPT #puts "Point1 " + pt1.to_s, "Point2 " + pt2.to_s, "Point3 " + pt3.to_s, "Point4 " + pt4.to_s end y1 = y2 - (ysize * 0.08) #let the next spot begin at 92% of the way across the previous #x1 = x1 - (xsize * 0.92 * xstep) #go back to initial x position for next line in y x1 = @ip1.position.x end master_group.transform! tr self.reset(view) end #end click 2 end # Clear any inference lock view.lock_inference endlet me know if you want me to send the complete .rb files, as this chunk of code wont run without the other def's around it
-
Looks like you need to have tr defined no matter what e.g.
tr=Geom::Transformation.rotation(ORIGIN, Z_AXIS, 0.degrees) if not perpvector
so thattransform!(tr)always has something to work on ? -
Well I added that line:
tr=Geom::Transformation.rotation(ORIGIN, Z_AXIS, 0.degrees) if not perpvector
right next to the other tr = Geom::..... line but its still doing the same thing.
Do you think it'd help if I just sent you the full .rb file so you could where it runs too?It always seems to give the class as geom::transformation in the console, but whenever I uncomment the transform! line then it has trouble

-
PM me the ruby and I'll try and look at it later today...

-
I think the problem is that you define tr in a seperate place than you use it. try replacing tr with @tr.
-
Well I thought that was a long shot as it was defined and used in the same def, but I'd forgotten about the initialize def. Sure enough @tr has got it!!!!
Thanks very much.So its rotating and displaying it just as you'd expect, off floating in space to the side.
I'll have a go at the translation code and see how that goes.Thanks very much guys, really pleased this is coming together.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better π
Register LoginAdvertisement