sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    Ruby plugin?

    Scheduled Pinned Locked Moved Developers' Forum
    16 Posts 6 Posters 828 Views 6 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.
    • TIGT Offline
      TIG Moderator
      last edited by

      @thomas214 said:

      @driven said:

      for something like this it's probably quicker and easier to draw [rectangle tool] the profile, select all lines and click followMe tool.

      there are lot of rubies that deal with more complex versions of this, but the standard tools can do quite a bit...
      [attachment=0:3bwzyrmz]<!-- ia0 -->use_followMe.png<!-- ia0 -->[/attachment:3bwzyrmz]

      This is somethin for my school project so to draw it this way it isn't an option πŸ˜„

      So write down the plan for your code...
      . check the model.selection contains some connected Edges (>>>path)
      . use a UI.inputbox() dialog to get the height
      . add a rectangle_face at start.position (p0) of first edge in path, calculating the other three points as p0=p1.clone; p1.z=p1.z+height etc using rectangle_face=entities.add_face(p0,p1,p2,p3)
      . use rectangle_face.followme(path) to extrude the new face along the path.
      . done

      TIG

      1 Reply Last reply Reply Quote 0
      • T Offline
        Thomas214
        last edited by

        @tig said:

        @thomas214 said:

        @driven said:

        for something like this it's probably quicker and easier to draw [rectangle tool] the profile, select all lines and click followMe tool.

        there are lot of rubies that deal with more complex versions of this, but the standard tools can do quite a bit...
        [attachment=0:2kbtp9i4]<!-- ia0 -->use_followMe.png<!-- ia0 -->[/attachment:2kbtp9i4]

        This is somethin for my school project so to draw it this way it isn't an option πŸ˜„

        So write down the plan for your code...
        . check the model.selection contains some connected Edges (>>>path)
        . use a UI.inputbox() dialog to get the height
        . add a rectangle_face at start.position (p0) of first edge in path, calculating the other three points as p0=p1.clone; p1.z=p1.z+height etc using rectangle_face=entities.add_face(p0,p1,p2,p3)
        . use rectangle_face.followme(path) to extrude the new face along the path.
        . done

        Hmmm what if I useEdge.all_connectedthen the code from the the plugin push/pull face I have?

        1 Reply Last reply Reply Quote 0
        • T Offline
          Thomas214
          last edited by

          I got this far

          prompts = ["x:", "y:", "z:"]
          defaults = [10, 20, 100]
          input = UI.inputbox prompts, defaults, "Input data"
          x = input[0]
          y = imput[1]
          z = imput[2]
          model = Sketchup.active_model
          ent = model.entities
          sel = model.selection

          model = Sketchup.active_model
          entities = model.active_entities
          pts = []
          pts[0] = [0, 0, 0]
          pts[1] = [x, 0, 0]
          pts[2] = [x, y, 0]
          pts[3] = [0, y, 0]

          Add the face to the entities in the model

          face = entities.add_face pts

          I just happen to know that the second and third entities in the

          entities objects are edges.

          entity1 = entities[1]
          entity2 = entities[2]
          edges = entity1.all_connected
          if (edges)
          UI.messagebox edges.to_s
          else
          UI.messagebox "Failure"
          end

          faces = []

          sel.each do |e|
          	if e.is_a? Sketchup::Face
                   faces.push e
          	end
          end   
          
           Sketchup.active_model.start_operation "Wall"     
          faces.each do |e|
               ent.add_group e
               e.pushpull (z)
           end
          		Sketchup.active_model.commit_operation	
          

          end

          if( not file_loaded?('Wall.rb') )
          UI.menu('Plugins').add_item('wall') {wall }
          end

          file_loaded 'Wall.rb'

          I think I have to create a new entety for the faces theat are created to use it in push/pull ?

          1 Reply Last reply Reply Quote 0
          • GaieusG Offline
            Gaieus
            last edited by

            Okay. When it comes to a point and I cannot understand what it is then I move the whole topic to the developers' forum.

            Good luck! πŸ˜‰

            Gai...

            1 Reply Last reply Reply Quote 0
            • sdmitchS Offline
              sdmitch
              last edited by

              http://rhin.crai.archi.fr/rld/plugin_details.php?id=250 is the link to midline2wall.rb which looks to be exactly what you want.

              Nothing is worthless, it can always be used as a bad example.

              http://sdmitch.blogspot.com/

              1 Reply Last reply Reply Quote 0
              • T Offline
                Thomas214
                last edited by

                @sdmitch said:

                http://rhin.crai.archi.fr/rld/plugin_details.php?id=250 is the link to midline2wall.rb which looks to be exactly what you want.

                Hmmm yes but how can I select multiple lines?

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

                  Choose the Select tool.
                  Pick on an object [like a line].
                  Hold down Ctrl and pick on another object to add it to the selection.
                  Holding down Shift toggles an object in/out of the selection.
                  Holding down Shift+Ctrl and picking an object removes it from the selection.

                  With a face one click to pick face, two clicks to pick face and its edges and three clicks to select it AND all other edges and faces connected to it...

                  TIG

                  1 Reply Last reply Reply Quote 0
                  • T Offline
                    Thomas214
                    last edited by

                    @tig said:

                    Choose the Select tool.
                    Pick on an object [like a line].
                    Hold down Ctrl and pick on another object to add it to the selection.
                    Holding down Shift toggles an object in/out of the selection.
                    Holding down Shift+Ctrl and picking an object removes it from the selection.

                    With a face one click to pick face, two clicks to pick face and its edges and three clicks to select it AND all other edges and faces connected to it...

                    I was talking about the plugin πŸ˜„

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

                      Why not preselect the lines BEFORE running the tool? Then you process the selection??
                      You can pick kinds of objects with a Tool using pickhelpers and add them to a 'selection' etc BUT it's pretty complex for a simple tool... πŸ˜’

                      TIG

                      1 Reply Last reply Reply Quote 0
                      • T Offline
                        Thomas214
                        last edited by

                        Can someone explain to me what this lines are for? I know they are for creating faces and offset lines but witch ones do what?

                        width, height = results
                        

                        pts = tl[0].vertices
                        i = 0
                        pts2 = []

                        pts.each do |pt|
                        pts2[i] = pt.position + [0 , 0 , results[1]]
                        i = i +1
                        end
                        line_copy = entities.add_line pts2

                        pts_copy = line_copy.vertices

                        i = 0
                        j = 0

                        new_face = entities.add_face(pts[0], pts_copy[0], pts_copy[1], pts[1])
                        new_face.pushpull (width / 2)

                        model.commit_operation
                        end

                        if( not file_loaded?("zid.rb") )

                        UI.menu("Plugins").add_item("Zid") { zid }
                        

                        end

                        file_loaded("zid.rb")

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

                          Thomas

                          You really need to learn to crawl before you walk...
                          You expect 'random lines of code' to be interpreted for you !
                          Please structure your questions a little more friendly...

                          width, height = results
                          presumably this follows a UI.inputbox that results= ?
                          There were two answers... width & height ??

                          pts = tl[0].vertices
                          sets an array called 'pts' to be the vertices related to the first element in the array tl - as it's not named logically that couls be a list of faces OR edges...
                          i = 0
                          sets a reference called 'i' to be 0 [this is used later in the '.each do' loop ???

                          pts2 = []
                          Makes an empty array called 'pts2' - presumably this will be filled with elements later...

                          pts.each do |pt| pts2[i] = pt.position + [0 , 0 , results[1]] i = i +1 end
                          This process the vertices in 'pts' [it would've been better to call it 'verts' ??]
                          And for each vertex [pt !!!] it returns its position as a 3d-point BUT swaps its z-value for whatever the results[1] was = probably the 'height' so why wasn't 'height' used ??

                          line_copy = entities.add_line pts2
                          Tis makes a line in [whatever] 'entities' [is] using the array 'pts2' as the 2 points - these have had their z values set to 'height'...

                          pts_copy = line_copy.vertices
                          This sets the array 'pts_copy' to be the vertices used by the edge 'line_copy' ???

                          i = 0 j = 0
                          sets the references 'i' and 'j' to 0

                          new_face = entities.add_face(pts[0], pts_copy[0], pts_copy[1], pts[1])
                          This sets the reference 'new_face' to be the face [if any] that is made using the 4 points listed [if they are not coplanar it will fail!]

                          new_face.pushpull (width / 2)
                          It pushpulls the 'new_face' by half of the 'width [i.e. results[0] set earlier]
                          Do NOT leave a gap between the 'pushpull' and its argument in parentheses [i.e face.pushpull(xxx) NEVER face.pushpull (xxx)]

                          model.commit_operation end
                          This closes the 'operation' and 'end's something - presumably the ' def zid' ?
                          You must have a model.start_operation("MyTool") to 'close' it later...

                          [ruby:1dtqmkst]if( not file_loaded?("zid.rb") )
                          UI.menu("Plugins").add_item("Zid") { zid }
                          end
                          file_loaded("zid.rb")[/ruby:1dtqmkst]
                          This makes the Plugins menu item a called '[ruby:1dtqmkst]Zid[/ruby:1dtqmkst]' which in turn runs the [ruby:1dtqmkst]def[/ruby:1dtqmkst] called '[ruby:1dtqmkst]zid[/ruby:1dtqmkst]' ???
                          The [ruby:1dtqmkst]file_loaded[/ruby:1dtqmkst] parts need you to have a [ruby:1dtqmkst]require 'sketchup.rb'[/ruby:1dtqmkst] earlier and ensure that only one menu item appears even if you manually reload the script into the same SKP session...

                          πŸ˜’

                          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