sketchucation logo sketchucation
    • Login
    โ„น๏ธ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    Intersecting 2 Groups Question

    Scheduled Pinned Locked Moved Developers' Forum
    13 Posts 3 Posters 302 Views 3 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • K Offline
      kyyu
      last edited by

      Hi, need some help figuring something out. I would like to intersect a set of lines with a face. The face is grouped. I can do it with the lines as loose geometry, as you see it set up in the picture.
      int = ent.intersect_with(true, tr, ent, tr, false, face)
      But if I move the face up to the grouped lines, I can't get it to work with this new line. I am changing it to use the line group entities, instead of the model's entities:
      int = lent.intersect_with(true, ltr, ent, tr, false, face)
      Any idea how to get this to work?

      ent = Sketchup.active_model.entities
      face = (ent.to_a.select {|e| e.is_a? Sketchup;;Group and e.name=="face"})[0]
      lines = (ent.to_a.select {|e| e.is_a? Sketchup;;Group and e.name=="lines"})[0]
      puts face; puts lines
      lent = lines.entities
      tr = Geom;;Transformation.new
      ltr = lines.transformation
      int = ent.intersect_with(true, tr, ent, tr, false, face)
      

      2 groups intersect_with.png


      sketchup test file

      1 Reply Last reply Reply Quote 0
      • TIGT Offline
        TIG Moderator
        last edited by

        Try ent.intersect_with(true, tr, ent, tr, false, [face,lines])
        You do realize that the resulting geometry goes directly into the model's active_entities?
        Why no put that into a group - at least initially?
        Note, since it always returns 'nil' there's no point in assigning a reference to this operation with int=...

        TIG

        1 Reply Last reply Reply Quote 0
        • K Offline
          kyyu
          last edited by

          @tig said:

          Try ent.intersect_with(true, tr, ent, tr, false, [face,lines])
          You do realize that the resulting geometry goes directly into the model's active_entities?
          Why no put that into a group - at least initially?
          Note, since it always returns 'nil' there's no point in assigning a reference to this operation with int=...

          Thanks, TIG. I haven't thought of it that way before, when trying to intersect two groups. That way worked. I used "intersect_with" with several past plugins, but still trying to understand it fully. Just doing some basic testing of general cases. So it doesn't matter, if the geomtry is simply going into the models's active_entities.

          It doesn't always return 'nil'. Your way returns the new edges. That paticular case I was asking about returns 'nil'. And didn't work, in certian situations, like I expected. But using face.entities as reciever also returns the new edges, and works exactly the way I expect. The only difference I can see is possibly face.entities has a face in there, whereas lines.entities doesn't? Using lines.entities as reciever seems to returns 'nil'.

          -Kwok

          1 Reply Last reply Reply Quote 0
          • TIGT Offline
            TIG Moderator
            last edited by

            http://code.google.com/apis/sketchup/docs/ourdoc/entities.html#intersect_with says 'intersect_with' returns 'nil' always... ๐Ÿ˜•

            TIG

            1 Reply Last reply Reply Quote 0
            • K Offline
              kyyu
              last edited by

              @tig said:

              http://code.google.com/apis/sketchup/docs/ourdoc/entities.html#intersect_with says 'intersect_with' returns 'nil' always... ๐Ÿ˜•

              And we all know the are no mistakes in the API docs. ๐Ÿ˜› But seriously, I know in practice that it's not true. I have a plugin that slices up a solid and add the edges returned each time, into an array. Looks something like this:

              while @x < @total
              	int = intersect_with_plane(plane)
              	int.each do |i|
              		@@cary << i
              	end
              	@x += @inc
              	move_plane(plane, @inc)
              end
              
              def intersect_with_plane(plane)
              	t = Geom;;Transformation.new 
              	int = @@plane_ent.intersect_with(true, plane.transformation, @@ent, t, false, @@g)
              end
              
              1 Reply Last reply Reply Quote 0
              • TIGT Offline
                TIG Moderator
                last edited by

                So you are saying that entities.intersect_with() return the geometry that's added ? ๐Ÿ˜•
                I have tested this and I can confirm that you are correct - geo=entities.intersect_with(.....) will return an array 'geo' of any newly made geometry - in direct contravention of what the API notes say ! ๐Ÿ˜ฎ
                Have you posted a comment in the API section ? ๐Ÿ˜’

                TIG

                1 Reply Last reply Reply Quote 0
                • K Offline
                  kyyu
                  last edited by

                  @tig said:

                  So you are saying that entities.intersect_with() return the geometry that's added ? ๐Ÿ˜•
                  I have tested this and I can confirm that you are correct - geo=entities.intersect_with(.....) will return an array 'geo' of any newly made geometry - in direct contravention of what the API notes say ! ๐Ÿ˜ฎ
                  Have you posted a comment in the API section ? ๐Ÿ˜’

                  No I haven't posted a comment. I am a beginner, found the docs very confusing at the beginning and don't take them literally. In the past, I've had to test stuff to see what they actually do. Plus I sometimes figure(or partly figure) out something, then forget it and later have to relearn it. On top of that, I don't have a google account. I may be force to get one someday, but I don't like them trying to link to my youtube account. And some lame stuff they did, when I had google video. If I went and posted "It doesn't always return 'nil'", don't think that would be very useful.

                  But I can show proof, with an example. You can use that test file I posted above and move the face group up onto the lines group. Then run this script. In the picture, I've selected the 37 edges that were created. You can see in the ruby console, an array was returned with 37 edges.

                  model = Sketchup.active_model
                  ent = model.entities
                  sel = model.selection
                  
                  face = (ent.to_a.select {|e| e.is_a? Sketchup;;Group and e.name=="face"})[0]
                  lines = (ent.to_a.select {|e| e.is_a? Sketchup;;Group and e.name=="lines"})[0]
                  puts face; puts lines
                  lent = lines.entities
                  fent = face.entities
                  tr = Geom;;Transformation.new
                  ltr = lines.transformation
                  ftr = face.transformation
                  int = fent.intersect_with(true, ftr, ent, tr, false, lines)
                  puts int
                  puts int.class
                  puts int.length
                  

                  int returning an array of edges.png

                  1 Reply Last reply Reply Quote 0
                  • TIGT Offline
                    TIG Moderator
                    last edited by

                    I posted an anonymous comment in the API.
                    Put simply, the entities.intersect_with() method returns an array of the newly created geometry [faces/edges] or 'nil' if there is none, the guide is wrong as it says it returns 'nil' [always].

                    TIG

                    1 Reply Last reply Reply Quote 0
                    • K Offline
                      kyyu
                      last edited by

                      Thanks, TIG. Lots of times, a beginner is not cofident enough to jump in there and make too many comments, even on this forum. Did you still need a google account, to post that anonymous comment in the API?

                      1 Reply Last reply Reply Quote 0
                      • TIGT Offline
                        TIG Moderator
                        last edited by

                        I do have a Google account... but Google Apps has recently messed around with lots of accounts and settings... so I ended up being 'anonymous' anyway ๐Ÿ˜’

                        TIG

                        1 Reply Last reply Reply Quote 0
                        • jolranJ Offline
                          jolran
                          last edited by

                          Very interesting experiment and find. I wonder how missleading sometimes the API really is?
                          And what reference should beginners use if not the API?

                          1 Reply Last reply Reply Quote 0
                          • TIGT Offline
                            TIG Moderator
                            last edited by

                            Use the API site but read the notes at the ends, as there are many corrections by users...
                            If in doubt ask in the Developers' forum - especially if you think you have found something odd.
                            Test your new tools methods in small steps so you can see what is returned or what is made at each step...

                            TIG

                            1 Reply Last reply Reply Quote 0
                            • jolranJ Offline
                              jolran
                              last edited by

                              OK. thanks. I have missed the notes part.

                              1 Reply Last reply Reply Quote 0
                              • 1 / 1
                              • First post
                                Last post
                              Buy SketchPlus
                              Buy SUbD
                              Buy WrapR
                              Buy eBook
                              Buy Modelur
                              Buy Vertex Tools
                              Buy SketchCuisine
                              Buy FormFonts

                              Advertisement