• Login
sketchucation logo sketchucation
  • Login
⚠️ Libfredo 15.4b | Minor release with bugfixes and improvements Update

[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 16 Mar 2009, 11:25

    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
    • D Offline
      DavidBoulder
      last edited by 8 Feb 2011, 21:07

      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
      • T Offline
        TIG Moderator
        last edited by 8 Feb 2011, 21:40

        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
        • D Offline
          Dan Rathbun
          last edited by 8 Feb 2011, 22:03

          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
          • D Offline
            DavidBoulder
            last edited by 9 Feb 2011, 06:26

            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
            • T Offline
              TIG Moderator
              last edited by 9 Feb 2011, 08:07

              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