sketchucation logo sketchucation
    • Login
    πŸ€‘ SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

    [code] intersect_with example

    Scheduled Pinned Locked Moved Developers' Forum
    6 Posts 4 Posters 5.1k Views 4 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.
    • S Offline
      shirazbj
      last edited by shirazbj

      Hi,

      I have tried to use two intersected cubes to demonstrate how to use the intersect_with command. This could be a example for the ruby doc.

      <span class="syntaxdefault"><br />&nbsp;&nbsp;&nbsp;&nbsp;model&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model<br />&nbsp;&nbsp;&nbsp;&nbsp;entities&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#Create&nbsp;a&nbsp;group&nbsp;to&nbsp;collect&nbsp;all&nbsp;entities&nbsp;for&nbsp;base&nbsp;cube<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">basegroup</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">entities</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_group<br />&nbsp;&nbsp;&nbsp;&nbsp;basegroupentities</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">basegroup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities<br />&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">p2&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">2000</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">p3&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">2000</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">150</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">p4&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">150</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">p5&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">points&nbsp;</span><span class="syntaxkeyword">=&nbsp;[</span><span class="syntaxdefault">p1</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">p2</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">p3</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">p4</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">p5</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#Add&nbsp;a&nbsp;face&nbsp;entity&nbsp;into&nbsp;base&nbsp;group<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">base&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">basegroupentities</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face&nbsp;points<br />&nbsp;&nbsp;&nbsp;&nbsp;normal&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">normal<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">normal</span><span class="syntaxkeyword">==[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,-</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">base&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">reverse</span><span class="syntaxkeyword">!&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pushpull&nbsp;1000<br />&nbsp;&nbsp;&nbsp;&nbsp;base_trans</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">basegroup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">transformation<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#Create&nbsp;a&nbsp;group&nbsp;to&nbsp;collect&nbsp;all&nbsp;entities&nbsp;used&nbsp;for&nbsp;cutting&nbsp;cube<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">cutgroup</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">entities</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_group<br />&nbsp;&nbsp;&nbsp;&nbsp;cutgroupentities</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">cutgroup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities<br />&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">500</span><span class="syntaxkeyword">,&nbsp;-</span><span class="syntaxdefault">50</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">500</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">p2&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">1500</span><span class="syntaxkeyword">,&nbsp;-</span><span class="syntaxdefault">50</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">500</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">p3&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">1500</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">200</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">500</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">p4&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">500</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">200</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">500</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">p5&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">500</span><span class="syntaxkeyword">,&nbsp;-</span><span class="syntaxdefault">50</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">500</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">points&nbsp;</span><span class="syntaxkeyword">=&nbsp;[</span><span class="syntaxdefault">p1</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">p2</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">p3</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">p4</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">p5</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#Add&nbsp;a&nbsp;face&nbsp;entity&nbsp;into&nbsp;cut&nbsp;group<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">base&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">cutgroupentities</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face&nbsp;points<br />&nbsp;&nbsp;&nbsp;&nbsp;normal&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">normal<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">normal</span><span class="syntaxkeyword">==[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,-</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">base&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">reverse</span><span class="syntaxkeyword">!&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pushpull&nbsp;1000<br />&nbsp;&nbsp;&nbsp;&nbsp;cut_trans</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">cutgroup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">transformation<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#Use&nbsp;all&nbsp;entities&nbsp;in&nbsp;cut&nbsp;group&nbsp;to&nbsp;cut&nbsp;through&nbsp;all&nbsp;entities&nbsp;in&nbsp;base&nbsp;group<br />&nbsp;&nbsp;&nbsp;&nbsp;#The&nbsp;middle&nbsp;basegroup&nbsp;variable&nbsp;is&nbsp;to&nbsp;specify&nbsp;that&nbsp;the&nbsp;intersection&nbsp;lines&nbsp;are&nbsp;drawn&nbsp;on&nbsp;base&nbsp;group&nbsp;entities.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">cutgroupentities</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">intersect_with&nbsp;false</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">cut_trans</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">basegroup</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">base_trans&nbsp;</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">true</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">basegroup&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">basegroup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">explode<br />&nbsp;&nbsp;&nbsp;&nbsp;model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">zoom_extents<br />&nbsp;&nbsp;&nbsp;&nbsp;UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">messagebox</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Click&nbsp;to&nbsp;delete&nbsp;cut&nbsp;group."</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">cutgroup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">erase</span><span class="syntaxkeyword">!<br />&nbsp;</span><span class="syntaxdefault"></span>
      
      1 Reply Last reply Reply Quote 0
      • DavidBoulderD Offline
        DavidBoulder
        last edited by

        Thanks, that was really helpful, but I'm having problems with a simple variation on this.

        The basic concept is a model with only groups at the top level. The user selects a group and then runs the script. The script should intersect that group with the model; the new geometry is created inside of that group. My next step after this is working is to let the user multi-select and iterate through their selection. That should be easy if I can just get the basic code working first.

        This is what I want for the intersect_with line, but I just can't get it to work. I guess I need to get the name of the group that is in selection[0]? and then use that similar to your code.

        selection[0].intersect_with true, selection[0].transformation, selection[0], [0,0,0], true, entities

        --

        David Goldwasser
        OpenStudio Developer
        National Renewable Energy Laboratory

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

          Your selection[0] will be an entity BUT the intersect_with method is for entities - that is the 'container-entities' holding that individual entity... see
          http://code.google.com/apis/sketchup/docs/ourdoc/entities.html#intersect_with
          Recast it something like... selection[0].parent.entities.intersect_with(true, selection[0].transformation, selection[0].parent.entities, selection[0].transformation, true, entities)***
          ***I'm not sure what your final argument ' entities' is - it should either be an 'entities object' or an 'array of entities'... it could be selection[0].parent.entities.to_a so all entities in the same context are used in the intersection πŸ˜•

          TIG

          1 Reply Last reply Reply Quote 0
          • Dan RathbunD Offline
            Dan Rathbun
            last edited by

            Someone please..

            Codebox the script example, parenthesize the intersect_with call (it wraps,) and rename the topic title:
            [ code ] Entities.intersect_with example
            .. so that Jim's sticky code index script can find it.

            I'm not here much anymore.

            1 Reply Last reply Reply Quote 0
            • DavidBoulderD Offline
              DavidBoulder
              last edited by

              TIG, thanks for you help. That got me over the hump. Below is what I was looking for. If you select one or more top level groups and run this script, it will iterate through the groups adding necessary intersecting geometry under each group.

              model = Sketchup.active_model
              entities = model.active_entities
              selection = model.selection
              
              # loop through selection of top level groups to create new intersecting geomtry under each group.
              selection.each { |entity| 
              entity.entities.intersect_with(true, entity.transformation, entity.entities.parent, entity.transformation, true, entity.parent.entities.to_a)
               }
              
              

              --

              David Goldwasser
              OpenStudio Developer
              National Renewable Energy Laboratory

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

                I suggest you trap for non-groups

                selection.each { |entity|
                ###
                next if not entity.class==Sketchup;;Group
                ###
                entity.entities.intersect_with(true, entity.transformation, entity.entities.parent, entity.transformation, true, entity.parent.entities.to_a)
                }
                

                Also shouldn't entity.entities.parent be entity.entities.parent.entities ❓

                TIG

                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