How to draw an edge with an angle and distance
-
-
You're right - my daft typo... I've corrected the original

hit=rayt[1][0] -
When done.. you will need to test the
hitsarray members and retrieve objects that are certain types.<span class="syntaxdefault">hit_faces </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> hits</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">select </span><span class="syntaxkeyword">{|</span><span class="syntaxdefault">e</span><span class="syntaxkeyword">|</span><span class="syntaxdefault"> e</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">][</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">instance_of</span><span class="syntaxkeyword">?(</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Face</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">hit_comps </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> hits</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">select </span><span class="syntaxkeyword">{|</span><span class="syntaxdefault">e</span><span class="syntaxkeyword">|</span><span class="syntaxdefault"> e</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">][</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">instance_of</span><span class="syntaxkeyword">?(</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">ComponentInstance</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> </span>..etc ...
@TIG: I think
hit=rayt[0][0]would return thexcoordinate ofpt? -
Hey you missed my boo-boo I had written
hits.eachinstead ofhits.select
(corrected the code..) -
morc ... use [ code=php ] and [ /code ] tags around your sourcecode when you post it here.
I sent you a PrivateMessage, explaining how.
You are missing 2
endstatements at the bottom, just before the**}**closing of the block. -
Tig it isn't working.
guys could u have a look at the code and tell me what do you think?require 'sketchup.rb' UI.menu("PlugIns").add_item("Fire Arrows") { ents = Sketchup.active_model.entities Sketchup.active_model.selection.each do |e| if e.is_a? Sketchup;;Face ce=e.bounds.center en=ce.offset(e.normal, 100000.mm) cl90=ents.add_cline(ce, en) #a vertical line tr=Geom;;Transformation.rotation(ce, Z_AXIS, 45.degrees) en.transform!(tr) cl45=ents.add_line(ce, en) #a 45 deg line vec=ce.vector_to(en) dist=ce.distance(en) hits=[] pt = Geom;;Point3d.new pe=ce.clone ### set up a copy of the point to raytest from goon=true while goon rayt= Sketchup.active_model.raytest(pe, vec) goon=false if not rayt pt=rayt[0] hit=rayt[1][0] goon=false if ce.distance(pt) > dist hits << [pt, hit] pe=pt ### look from last hit point... end#while hits.each do |s| if s[1][0].is_a? Sketchup;;Face hit_face = s.bounds zmin = hit_face.min.z zmax = hit_face.max.z h = zmax - zmin h = h.to_m UI.messagebox s[1][0] UI.messagebox h end end tr=Geom;;Transformation.rotation(ce, Z_AXIS, -90.degrees) en.transform!(tr) cl135=ents.add_cline(ce, en) #a 135 deg line #en=ce.offset(Z_AXIS, 5000.mm) #tr=Geom;;Transformation.rotation(ce, X_AXIS, -45.degrees) #en.transform!(tr) #cl135=ents.add_cline(ce, en) #a 135 deg line #tr=Geom;;Transformation.rotation(ce, X_AXIS, 90.degrees) #en.transform!(tr) #cl135=ents.add_cline(ce, en) #a 135 deg line end end }Thanks Dan,
i added the two end statements. but the complier doesn't like line 31 ]pt=rayt[0]thanks again Dan
-
@morci429 said:
Tig it isn't working.
Error messages?
Unexpected behaviour?It always help to be specific to what isn't working.
-
Error: #<NoMethodError: undefined method
[]' for nil:NilClass> C:/PROGRA~1/Google/GOOGLE~3/Plugins/Fire Arrows.rb:31 C:/PROGRA~1/Google/GOOGLE~3/Plugins/Fire Arrows.rb:7:ineach'
C:/PROGRA~1/Google/GOOGLE~3/Plugins/Fire Arrows.rb:7
C:/PROGRA~1/Google/GOOGLE~3/Plugins/Fire Arrows.rb:3:in `call'Sorry if i wasn't clear enough
-
Try adding a test after the
goon=false if not raytlike
next if not raytthat way it will jump.I notice that your 'line' creation is a bit muddled - you a make one then transform the end_point [en] BUT doing so around the Z_AXIS leaves it where it is - do it around the X_AXIS or Y_AXIS...
-
morc..
EDIT:The problem is that the API doc does not say that if the ray does not hit anything, the raytest method just returns nil.
rayt= Sketchup.active_model.raytest(pe, vec)If you read the API for Model.raytest(), you'll see that the first argument must be an
Array; the second optional argument (added in SU8.0M1,) is the wysiwyg_flag that sets whether to hit hidden geometry.EDIT:Actually the method is smart enough to know what you mean... you don't really need an Array arg, unless you want to use the wysiwyg_flag %(#BF4000)[argument.
So you can to call it this way:]
rayt= Sketchup.active_model.raytest( **[**pe, vec**]** ) -
Tig it isn't working.
guys could u have a look at the code and tell me what do you think?...*[snip]*... reposted [in later post](http://forums.sketchucation.com/viewtopic.php?f) -
Added a note at the bottom of the API doc page for
Model.raytest()informing readers of thenilreturn value, when no geometry is "hit." -
guys i think you are right, the hits array is empty. the ray isn't hitting any geometry. Still trying to find out why though
-
Rather than start with convoluted code try a simple 'one-liner' pasted into the Ruby Console...
Draw two rectangular faces place them one above the other, above the origin.rt=true;p=ORIGIN;while rt;p rt=Sketchup.active_model.raytest(p,Z_AXIS);p=rt[0]if rt;endit should produce something like this
[Point3d(0, 0, 16.9685), [#<Sketchup::Face:0xbea3ae8>]] [Point3d(0, 0, 39.3701), [#<Sketchup::Face:0xbea3ad4>]] nil
NOW you know it's working........ -
Mission accomplished
Thanks to you all Geniuses
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